@sherwoodagent/cli 0.29.0 → 0.38.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/{addresses-CQLJSZGN.js → addresses-6GJP2WAY.js} +4 -4
  2. package/dist/{agent-QIQABFLV.js → agent-NUYY5PF7.js} +1084 -295
  3. package/dist/agent-NUYY5PF7.js.map +1 -0
  4. package/dist/{chat-N6LSZUSC.js → chat-ABL6Z5XZ.js} +8 -8
  5. package/dist/{chunk-I3UVF2GD.js → chunk-3RVDBIXD.js} +4 -4
  6. package/dist/{chunk-IIBOFECO.js → chunk-6X3FGJJO.js} +5 -5
  7. package/dist/{chunk-QGEIK4H5.js → chunk-B4AH26UI.js} +2 -2
  8. package/dist/{chunk-ZPYN5ZAI.js → chunk-IJG4CTOI.js} +29 -12
  9. package/dist/chunk-IJG4CTOI.js.map +1 -0
  10. package/dist/{chunk-YRYPGJ66.js → chunk-LWIPZN5P.js} +5 -5
  11. package/dist/{chunk-T5BRUFWV.js → chunk-O2JHLTDB.js} +4 -4
  12. package/dist/{chunk-3EMDYEAD.js → chunk-ODB2GWA7.js} +4 -4
  13. package/dist/{chunk-WRG7GAIA.js → chunk-OFR3LCYE.js} +14 -7
  14. package/dist/chunk-OFR3LCYE.js.map +1 -0
  15. package/dist/{chunk-WQOTLKVP.js → chunk-OPKMVIYJ.js} +4 -4
  16. package/dist/{chunk-WQOTLKVP.js.map → chunk-OPKMVIYJ.js.map} +1 -1
  17. package/dist/{chunk-RGOTBJIN.js → chunk-WCBG44IQ.js} +9 -1
  18. package/dist/chunk-WCBG44IQ.js.map +1 -0
  19. package/dist/{client-HBMSTSKK.js → client-HKAG55PQ.js} +4 -4
  20. package/dist/{config-YXZKPSZB.js → config-LS7FKZL5.js} +4 -2
  21. package/dist/{eas-D3KSAGWT.js → eas-KBFTHWSI.js} +6 -6
  22. package/dist/{governor-3MYMDBRF.js → governor-KEXLUOGB.js} +6 -6
  23. package/dist/index.js +66 -47
  24. package/dist/index.js.map +1 -1
  25. package/dist/{network-X6GM7ROG.js → network-KSMKPKNL.js} +5 -3
  26. package/dist/{price-DXNFNTV6.js → price-M5H57DPY.js} +5 -5
  27. package/dist/research-662HNMOG.js +14 -0
  28. package/dist/{research-H3I4LALI.js → research-W6QW2JJ3.js} +9 -9
  29. package/dist/{session-5JUUZYIL.js → session-64BCMJIB.js} +10 -10
  30. package/dist/{trade-XDE6YCNY.js → trade-7343J4LA.js} +16 -16
  31. package/dist/{xmtp-XTJ7HDVG.js → xmtp-EB2CU2LE.js} +20 -15
  32. package/dist/xmtp-EB2CU2LE.js.map +1 -0
  33. package/package.json +7 -5
  34. package/dist/agent-QIQABFLV.js.map +0 -1
  35. package/dist/chunk-RGOTBJIN.js.map +0 -1
  36. package/dist/chunk-WRG7GAIA.js.map +0 -1
  37. package/dist/chunk-ZPYN5ZAI.js.map +0 -1
  38. package/dist/research-NCESMYXK.js +0 -14
  39. package/dist/xmtp-XTJ7HDVG.js.map +0 -1
  40. /package/dist/{addresses-CQLJSZGN.js.map → addresses-6GJP2WAY.js.map} +0 -0
  41. /package/dist/{chat-N6LSZUSC.js.map → chat-ABL6Z5XZ.js.map} +0 -0
  42. /package/dist/{chunk-I3UVF2GD.js.map → chunk-3RVDBIXD.js.map} +0 -0
  43. /package/dist/{chunk-IIBOFECO.js.map → chunk-6X3FGJJO.js.map} +0 -0
  44. /package/dist/{chunk-QGEIK4H5.js.map → chunk-B4AH26UI.js.map} +0 -0
  45. /package/dist/{chunk-YRYPGJ66.js.map → chunk-LWIPZN5P.js.map} +0 -0
  46. /package/dist/{chunk-T5BRUFWV.js.map → chunk-O2JHLTDB.js.map} +0 -0
  47. /package/dist/{chunk-3EMDYEAD.js.map → chunk-ODB2GWA7.js.map} +0 -0
  48. /package/dist/{client-HBMSTSKK.js.map → client-HKAG55PQ.js.map} +0 -0
  49. /package/dist/{config-YXZKPSZB.js.map → config-LS7FKZL5.js.map} +0 -0
  50. /package/dist/{eas-D3KSAGWT.js.map → eas-KBFTHWSI.js.map} +0 -0
  51. /package/dist/{governor-3MYMDBRF.js.map → governor-KEXLUOGB.js.map} +0 -0
  52. /package/dist/{network-X6GM7ROG.js.map → network-KSMKPKNL.js.map} +0 -0
  53. /package/dist/{price-DXNFNTV6.js.map → price-M5H57DPY.js.map} +0 -0
  54. /package/dist/{research-NCESMYXK.js.map → research-662HNMOG.js.map} +0 -0
  55. /package/dist/{research-H3I4LALI.js.map → research-W6QW2JJ3.js.map} +0 -0
  56. /package/dist/{session-5JUUZYIL.js.map → session-64BCMJIB.js.map} +0 -0
  57. /package/dist/{trade-XDE6YCNY.js.map → trade-7343J4LA.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/addresses.ts"],"sourcesContent":["/**\n * Contract addresses by network.\n *\n * All exports are functions — they resolve at call time based on the\n * current network set via setNetwork(). This ensures --chain works\n * even when modules are imported before the flag is parsed.\n *\n * Zero addresses = protocol not deployed on that chain. Strategies that\n * need them will fail at execution time with a clear allowlist error.\n */\n\nimport type { Address } from \"viem\";\nimport { type Network, getNetwork } from \"./network.js\";\n\nconst ZERO: Address = \"0x0000000000000000000000000000000000000000\";\nconst ZERO_BYTES32 =\n \"0x0000000000000000000000000000000000000000000000000000000000000000\" as `0x${string}`;\n\n// ── Base Mainnet ──\n\nconst BASE_TOKENS = {\n USDC: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\" as Address,\n WETH: \"0x4200000000000000000000000000000000000006\" as Address,\n cbETH: \"0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22\" as Address,\n wstETH: \"0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452\" as Address,\n cbBTC: \"0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf\" as Address,\n DAI: \"0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb\" as Address,\n AERO: \"0x940181a94A35A4569E4529A3CDfB74e38FD98631\" as Address,\n} as const;\n\nconst BASE_MOONWELL = {\n COMPTROLLER: \"0xfBb21d0380beE3312B33c4353c8936a0F13EF26C\" as Address,\n mUSDC: \"0xEdc817A28E8B93B03976FBd4a3dDBc9f7D176c22\" as Address,\n mWETH: \"0x628ff693426583D9a7FB391E54366292F509D457\" as Address,\n mCbETH: \"0x3bf93770f2d4a794c3d9EBEfBAeBAE2a8f09A5E5\" as Address,\n mWstETH: \"0x627Fe393Bc6EdDA28e99AE648fD6fF362514304b\" as Address,\n mCbBTC: \"0xF877ACaFA28c19b96727966690b2f44d35aD5976\" as Address,\n mDAI: \"0x73b06D8d18De422E269645eaCe15400DE7462417\" as Address,\n mAERO: \"0x73902f619CEB9B31FD8EFecf435CbDf89E369Ba6\" as Address,\n} as const;\n\nconst BASE_UNISWAP = {\n SWAP_ROUTER: \"0x2626664c2603336E57B271c5C0b26F421741e481\" as Address,\n QUOTER_V2: \"0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a\" as Address,\n SWAP_ADAPTER: \"0x121AaC2B96Ec365e457fcCc1C2ED5a6142064069\" as Address,\n} as const;\n\nconst BASE_INFRA = {\n MULTICALL3: \"0xcA11bde05977b3631167028862bE2a173976CA11\" as Address,\n} as const;\n\n// ── Base Sepolia ──\n\nconst BASE_SEPOLIA_TOKENS = {\n USDC: \"0x036CbD53842c5426634e7929541eC2318f3dCF7e\" as Address, // Circle test USDC\n WETH: \"0x4200000000000000000000000000000000000006\" as Address, // Canonical bridged WETH\n cbETH: ZERO,\n wstETH: ZERO,\n cbBTC: ZERO,\n DAI: ZERO,\n AERO: ZERO,\n} as const;\n\nconst BASE_SEPOLIA_MOONWELL = {\n COMPTROLLER: ZERO,\n mUSDC: ZERO,\n mWETH: ZERO,\n mCbETH: ZERO,\n mWstETH: ZERO,\n mCbBTC: ZERO,\n mDAI: ZERO,\n mAERO: ZERO,\n} as const;\n\nconst BASE_SEPOLIA_UNISWAP = {\n SWAP_ROUTER: \"0x94cC0AaC535CCDB3C01d6787D6413C739ae12bc4\" as Address, // Uniswap V3 SwapRouter02\n QUOTER_V2: \"0xC5290058841028F1614F3A6F0F5816cAd0df5E27\" as Address, // Uniswap V3 QuoterV2\n SWAP_ADAPTER: ZERO as Address,\n} as const;\n\nconst BASE_SEPOLIA_INFRA = {\n MULTICALL3: \"0xcA11bde05977b3631167028862bE2a173976CA11\" as Address, // Deterministic, same everywhere\n} as const;\n\n// ── Robinhood L2 Testnet (Arbitrum Orbit, chain 46630) ──\n// Synthra DEX for swaps. Stock tokens available.\n\nconst ROBINHOOD_TESTNET_TOKENS = {\n USDC: ZERO,\n WETH: \"0x7943e237c7F95DA44E0301572D358911207852Fa\" as Address,\n cbETH: ZERO,\n wstETH: ZERO,\n cbBTC: ZERO,\n DAI: ZERO,\n AERO: ZERO,\n TSLA: \"0xC9f9c86933092BbbfFF3CCb4b105A4A94bf3Bd4E\" as Address,\n AMZN: \"0x5884aD2f920c162CFBbACc88C9C51AA75eC09E02\" as Address,\n PLTR: \"0x1FBE1a0e43594b3455993B5dE5Fd0A7A266298d0\" as Address,\n NFLX: \"0x3b8262A63d25f0477c4DDE23F83cfe22Cb768C93\" as Address,\n AMD: \"0x71178BAc73cBeb415514eB542a8995b82669778d\" as Address,\n} as const;\n\nconst ROBINHOOD_TESTNET_MOONWELL = {\n COMPTROLLER: ZERO,\n mUSDC: ZERO,\n mWETH: ZERO,\n mCbETH: ZERO,\n mWstETH: ZERO,\n mCbBTC: ZERO,\n mDAI: ZERO,\n mAERO: ZERO,\n} as const;\n\nconst ROBINHOOD_TESTNET_UNISWAP = {\n SWAP_ROUTER: ZERO,\n QUOTER_V2: ZERO,\n SWAP_ADAPTER: ZERO as Address,\n} as const;\n\n// ── Synthra DEX (Robinhood L2 — Uniswap V3-compatible concentrated liquidity) ──\n\nconst BASE_SYNTHRA = { ROUTER: ZERO, QUOTER: ZERO, FACTORY: ZERO } as const;\nconst BASE_SEPOLIA_SYNTHRA = { ROUTER: ZERO, QUOTER: ZERO, FACTORY: ZERO } as const;\nconst ROBINHOOD_TESTNET_SYNTHRA = {\n ROUTER: \"0x3Ce954107b1A675826B33bF23060Dd655e3758fE\" as Address,\n QUOTER: \"0x231606c321A99DE81e28fE48B07a93F1ba49e713\" as Address,\n FACTORY: \"0x911b4000D3422F482F4062a913885f7b035382Df\" as Address,\n} as const;\n\n// ── Chainlink (Data Streams verifier proxy) ──\n\nconst BASE_CHAINLINK = { VERIFIER_PROXY: \"0xDE1A28D87Afd0f546505B28AB50410A5c3a7387a\" as Address } as const;\nconst BASE_SEPOLIA_CHAINLINK = { VERIFIER_PROXY: ZERO } as const;\nconst ROBINHOOD_TESTNET_CHAINLINK = {\n VERIFIER_PROXY: \"0x72790f9eB82db492a7DDb6d2af22A270Dcc3Db64\" as Address,\n} as const;\n\nconst ROBINHOOD_TESTNET_INFRA = {\n MULTICALL3: \"0xcA11bde05977b3631167028862bE2a173976CA11\" as Address, // Deterministic, same everywhere\n} as const;\n\n// ── HyperEVM (chain 999) ──\n// No Moonwell, no Uniswap, no Venice, no ENS/Durin, no ERC-8004, no EAS.\n// USDC: native USDC on HyperEVM.\n\nconst HYPEREVM_TOKENS = {\n USDC: \"0xb88339CB7199b77E23DB6E890353E22632Ba630f\" as Address,\n WETH: ZERO,\n cbETH: ZERO,\n wstETH: ZERO,\n cbBTC: ZERO,\n DAI: ZERO,\n AERO: ZERO,\n} as const;\n\nconst HYPEREVM_TESTNET_TOKENS = {\n USDC: ZERO,\n WETH: ZERO,\n cbETH: ZERO,\n wstETH: ZERO,\n cbBTC: ZERO,\n DAI: ZERO,\n AERO: ZERO,\n} as const;\n\nconst HYPEREVM_MOONWELL = {\n COMPTROLLER: ZERO, mUSDC: ZERO, mWETH: ZERO, mCbETH: ZERO,\n mWstETH: ZERO, mCbBTC: ZERO, mDAI: ZERO, mAERO: ZERO,\n} as const;\n\nconst HYPEREVM_UNISWAP = { SWAP_ROUTER: ZERO, QUOTER_V2: ZERO, SWAP_ADAPTER: ZERO as Address } as const;\n\nconst HYPEREVM_INFRA = {\n MULTICALL3: \"0xcA11bde05977b3631167028862bE2a173976CA11\" as Address,\n} as const;\n\n// ── ENS / Durin ──\n\nconst BASE_ENS = {\n L2_REGISTRAR: \"0x866996c808E6244216a3d0df15464FCF5d495394\" as Address,\n L2_REGISTRY: \"0x7a019ce699e27b0ad1e5b51344a58116b9f3b9b1\" as Address,\n} as const;\n\nconst BASE_SEPOLIA_ENS = {\n L2_REGISTRAR: \"0x1fCbe9dFC25e3fa3F7C55b26c7992684A4758b47\" as Address,\n L2_REGISTRY: \"0x06eb7b85b59bc3e50fe4837be776cdd26de602cf\" as Address,\n} as const;\n\nconst ROBINHOOD_TESTNET_ENS = {\n L2_REGISTRAR: ZERO,\n L2_REGISTRY: ZERO,\n} as const;\n\nconst HYPEREVM_ENS = { L2_REGISTRAR: ZERO, L2_REGISTRY: ZERO } as const;\n\n// ── ERC-8004 Agent Identity ──\n\nconst BASE_AGENT_REGISTRY = {\n IDENTITY_REGISTRY: \"0x8004A169FB4a3325136EB29fA0ceB6D2e539a432\" as Address,\n REPUTATION_REGISTRY:\n \"0x8004BAa17C55a88189AE136b182e5fdA19dE9b63\" as Address,\n} as const;\n\nconst BASE_SEPOLIA_AGENT_REGISTRY = {\n IDENTITY_REGISTRY: \"0x8004A818BFB912233c491871b3d84c89A494BD9e\" as Address,\n REPUTATION_REGISTRY:\n \"0x8004B663056A597Dffe9eCcC1965A193B7388713\" as Address,\n} as const;\n\nconst ROBINHOOD_TESTNET_AGENT_REGISTRY = {\n IDENTITY_REGISTRY: ZERO,\n REPUTATION_REGISTRY: ZERO,\n} as const;\n\nconst HYPEREVM_AGENT_REGISTRY = { IDENTITY_REGISTRY: ZERO, REPUTATION_REGISTRY: ZERO } as const;\n\n// ── Sherwood Protocol (our deployed contracts) ──\n\nconst BASE_SHERWOOD = {\n FACTORY: \"0xd5C4eE2E4c5B606b9401E69A3B3FeE169037C284\" as Address,\n GOVERNOR: \"0x358AD8B492BcC710BE0D7c902D8702164c35DC34\" as Address,\n} as const;\n\nconst BASE_SEPOLIA_SHERWOOD = {\n FACTORY: \"0x121AaC2B96Ec365e457fcCc1C2ED5a6142064069\" as Address,\n GOVERNOR: \"0xE5ecf2B06E3f3e298B632C0cf6575f9d9422F55E\" as Address,\n} as const;\n\nconst ROBINHOOD_TESTNET_SHERWOOD = {\n FACTORY: \"0x6d026e2f5Ff0C34A01690EC46Cb601B8fF391985\" as Address,\n GOVERNOR: \"0xd882056ba6b0aEd8908c541884B327121E2f2C9C\" as Address,\n} as const;\n\nconst HYPEREVM_SHERWOOD = {\n FACTORY: \"0x4085EEa1E6d3D20E84D8Ae14964FAb8b899DA40a\" as Address,\n GOVERNOR: \"0x7B4a2f3480FE101f88b2e3547A1bCf3eaaDE46bc\" as Address,\n} as const;\n\n// ── Venice (VVV governance + sVVV staking + DIEM compute) ──\n\nconst BASE_VENICE = {\n VVV: \"0xacfe6019ed1a7dc6f7b508c02d1b04ec88cc21bf\" as Address,\n STAKING: \"0x321b7ff75154472b18edb199033ff4d116f340ff\" as Address, // also the sVVV ERC-20\n DIEM: \"0xF4d97F2da56e8c3098f3a8D538DB630A2606a024\" as Address,\n} as const;\n\nconst BASE_SEPOLIA_VENICE = {\n VVV: ZERO,\n STAKING: ZERO,\n DIEM: ZERO,\n} as const;\n\nconst ROBINHOOD_TESTNET_VENICE = {\n VVV: ZERO,\n STAKING: ZERO,\n DIEM: ZERO,\n} as const;\n\nconst HYPEREVM_VENICE = { VVV: ZERO, STAKING: ZERO, DIEM: ZERO } as const;\n\n// ── Aerodrome (Base ve(3,3) DEX) ──\n\nconst BASE_AERODROME = {\n ROUTER: \"0xcF77a3Ba9A5CA399B7c97c74d54e5b1Beb874E43\" as Address,\n FACTORY: \"0x420DD381b31aEf6683db6B902084cB0FFECe40Da\" as Address,\n} as const;\n\nconst BASE_SEPOLIA_AERODROME = {\n ROUTER: ZERO,\n FACTORY: ZERO,\n} as const;\n\nconst ROBINHOOD_TESTNET_AERODROME = {\n ROUTER: ZERO,\n FACTORY: ZERO,\n} as const;\n\nconst HYPEREVM_AERODROME = { ROUTER: ZERO, FACTORY: ZERO } as const;\n\n// ── Strategy Templates (ERC-1167 clonable singletons) ──\n// Populated after running script/DeployTemplates.s.sol\n\nconst BASE_STRATEGY_TEMPLATES = {\n MOONWELL_SUPPLY: \"0x72216571Ac847b29E1a5e3378e6ebCca3C2882da\" as Address,\n AERODROME_LP: \"0x1c61c740702690B86b874ab929A6F04A4Ec56C1c\" as Address,\n VENICE_INFERENCE: \"0xd882056ba6b0aEd8908c541884B327121E2f2C9C\" as Address,\n WSTETH_MOONWELL: \"0x6d026e2f5Ff0C34A01690EC46Cb601B8fF391985\" as Address,\n MAMO_YIELD: \"0x5c98808Ce5e51767ba2d969F75312eEFF0b14a6A\" as Address,\n HYPERLIQUID_PERP: ZERO as Address,\n PORTFOLIO: \"0x7865eEA4063c22d0F55FdD412D345495c7b73f64\" as Address,\n} as const;\n\nconst BASE_SEPOLIA_STRATEGY_TEMPLATES = {\n MOONWELL_SUPPLY: ZERO as Address,\n AERODROME_LP: ZERO as Address,\n VENICE_INFERENCE: ZERO as Address,\n WSTETH_MOONWELL: ZERO as Address,\n MAMO_YIELD: ZERO as Address,\n HYPERLIQUID_PERP: ZERO as Address,\n PORTFOLIO: ZERO as Address,\n} as const;\n\nconst ROBINHOOD_TESTNET_STRATEGY_TEMPLATES = {\n MOONWELL_SUPPLY: ZERO as Address,\n AERODROME_LP: ZERO as Address,\n VENICE_INFERENCE: ZERO as Address,\n WSTETH_MOONWELL: ZERO as Address,\n MAMO_YIELD: ZERO as Address,\n HYPERLIQUID_PERP: ZERO as Address,\n PORTFOLIO: \"0xAe981882923E0C76A7F10E7cAa3782023c0abd9B\" as Address,\n} as const;\n\nconst HYPEREVM_STRATEGY_TEMPLATES = {\n MOONWELL_SUPPLY: ZERO as Address,\n AERODROME_LP: ZERO as Address,\n VENICE_INFERENCE: ZERO as Address,\n WSTETH_MOONWELL: ZERO as Address,\n MAMO_YIELD: ZERO as Address,\n HYPERLIQUID_PERP: \"0x1E831aB61Dc423bF678a2Ff8d9ce768E1e6D2338\" as Address,\n PORTFOLIO: ZERO as Address,\n} as const;\n\n// ── EAS (Ethereum Attestation Service) — Base predeploys ──\n\nconst BASE_EAS = {\n EAS: \"0x4200000000000000000000000000000000000021\" as Address,\n SCHEMA_REGISTRY: \"0x4200000000000000000000000000000000000020\" as Address,\n} as const;\n\nconst BASE_SEPOLIA_EAS = {\n EAS: \"0x4200000000000000000000000000000000000021\" as Address,\n SCHEMA_REGISTRY: \"0x4200000000000000000000000000000000000020\" as Address,\n} as const;\n\nconst ROBINHOOD_TESTNET_EAS = {\n EAS: ZERO,\n SCHEMA_REGISTRY: ZERO,\n} as const;\n\nconst HYPEREVM_EAS = { EAS: ZERO, SCHEMA_REGISTRY: ZERO } as const;\n\n// ── EAS Schema UIDs (populated after running scripts/register-eas-schemas.ts) ──\n\nconst BASE_EAS_SCHEMAS = {\n SYNDICATE_JOIN_REQUEST:\n \"0x1e7ce17b16233977ba913b156033e98f52029f4bee273a4abefe6c15ce11d5ef\" as `0x${string}`,\n AGENT_APPROVED:\n \"0x1013f7b38f433b2a93fc5ac162482813081c64edd67cea9b5a90698531ddb607\" as `0x${string}`,\n X402_RESEARCH:\n \"0x86c67f0a59acb3093ecbeb6c4d1d4352e4a48143672e92ef9dd2fdfc8a9ca708\" as `0x${string}`,\n VENICE_PROVISION:\n \"0x76d4d6baa72307826cd2fd4ce069bb42ee54cdda6ed6ab208c8d233c893fb7f1\" as `0x${string}`,\n VENICE_INFERENCE:\n \"0xf9b4e530f3016c19439b67372a1c213c9339857627fb817032614b97433a2a14\" as `0x${string}`,\n TRADE_EXECUTED:\n \"0x06bb488363a468f7f857ddc8cfffe918d048b8746a0d59eca9cd7f58dbdb4af6\" as `0x${string}`,\n} as const;\n\nconst BASE_SEPOLIA_EAS_SCHEMAS = {\n SYNDICATE_JOIN_REQUEST:\n \"0x1e7ce17b16233977ba913b156033e98f52029f4bee273a4abefe6c15ce11d5ef\" as `0x${string}`,\n AGENT_APPROVED:\n \"0x1013f7b38f433b2a93fc5ac162482813081c64edd67cea9b5a90698531ddb607\" as `0x${string}`,\n X402_RESEARCH:\n \"0x86c67f0a59acb3093ecbeb6c4d1d4352e4a48143672e92ef9dd2fdfc8a9ca708\" as `0x${string}`,\n VENICE_PROVISION:\n \"0x76d4d6baa72307826cd2fd4ce069bb42ee54cdda6ed6ab208c8d233c893fb7f1\" as `0x${string}`,\n VENICE_INFERENCE:\n \"0xf9b4e530f3016c19439b67372a1c213c9339857627fb817032614b97433a2a14\" as `0x${string}`,\n TRADE_EXECUTED:\n \"0x06bb488363a468f7f857ddc8cfffe918d048b8746a0d59eca9cd7f58dbdb4af6\" as `0x${string}`,\n} as const;\n\nconst ROBINHOOD_TESTNET_EAS_SCHEMAS = {\n SYNDICATE_JOIN_REQUEST: ZERO_BYTES32,\n AGENT_APPROVED: ZERO_BYTES32,\n X402_RESEARCH: ZERO_BYTES32,\n VENICE_PROVISION: ZERO_BYTES32,\n VENICE_INFERENCE: ZERO_BYTES32,\n TRADE_EXECUTED: ZERO_BYTES32,\n} as const;\n\nconst HYPEREVM_EAS_SCHEMAS = {\n SYNDICATE_JOIN_REQUEST: ZERO_BYTES32, AGENT_APPROVED: ZERO_BYTES32,\n X402_RESEARCH: ZERO_BYTES32, VENICE_PROVISION: ZERO_BYTES32,\n VENICE_INFERENCE: ZERO_BYTES32, TRADE_EXECUTED: ZERO_BYTES32,\n} as const;\n\n// ── Registries (map-based lookup) ──\n\nconst TOKEN_REGISTRY: Record<Network, typeof BASE_TOKENS> = {\n base: BASE_TOKENS,\n \"base-sepolia\": BASE_SEPOLIA_TOKENS,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_TOKENS,\n hyperevm: HYPEREVM_TOKENS,\n \"hyperevm-testnet\": HYPEREVM_TESTNET_TOKENS,\n};\n\nconst MOONWELL_REGISTRY: Record<Network, typeof BASE_MOONWELL> = {\n base: BASE_MOONWELL,\n \"base-sepolia\": BASE_SEPOLIA_MOONWELL,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_MOONWELL,\n hyperevm: HYPEREVM_MOONWELL,\n \"hyperevm-testnet\": HYPEREVM_MOONWELL,\n};\n\nconst UNISWAP_REGISTRY: Record<Network, typeof BASE_UNISWAP> = {\n base: BASE_UNISWAP,\n \"base-sepolia\": BASE_SEPOLIA_UNISWAP,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_UNISWAP,\n hyperevm: HYPEREVM_UNISWAP,\n \"hyperevm-testnet\": HYPEREVM_UNISWAP,\n};\n\nconst INFRA_REGISTRY: Record<Network, typeof BASE_INFRA> = {\n base: BASE_INFRA,\n \"base-sepolia\": BASE_SEPOLIA_INFRA,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_INFRA,\n hyperevm: HYPEREVM_INFRA,\n \"hyperevm-testnet\": HYPEREVM_INFRA,\n};\n\nconst ENS_REGISTRY: Record<Network, typeof BASE_ENS> = {\n base: BASE_ENS,\n \"base-sepolia\": BASE_SEPOLIA_ENS,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_ENS,\n hyperevm: HYPEREVM_ENS,\n \"hyperevm-testnet\": HYPEREVM_ENS,\n};\n\nconst AGENT_REGISTRY_MAP: Record<Network, typeof BASE_AGENT_REGISTRY> = {\n base: BASE_AGENT_REGISTRY,\n \"base-sepolia\": BASE_SEPOLIA_AGENT_REGISTRY,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_AGENT_REGISTRY,\n hyperevm: HYPEREVM_AGENT_REGISTRY,\n \"hyperevm-testnet\": HYPEREVM_AGENT_REGISTRY,\n};\n\nconst SHERWOOD_REGISTRY: Record<Network, typeof BASE_SHERWOOD> = {\n base: BASE_SHERWOOD,\n \"base-sepolia\": BASE_SEPOLIA_SHERWOOD,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_SHERWOOD,\n hyperevm: HYPEREVM_SHERWOOD,\n \"hyperevm-testnet\": HYPEREVM_SHERWOOD,\n};\n\nconst VENICE_REGISTRY: Record<Network, typeof BASE_VENICE> = {\n base: BASE_VENICE,\n \"base-sepolia\": BASE_SEPOLIA_VENICE,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_VENICE,\n hyperevm: HYPEREVM_VENICE,\n \"hyperevm-testnet\": HYPEREVM_VENICE,\n};\n\nconst AERODROME_REGISTRY: Record<Network, typeof BASE_AERODROME> = {\n base: BASE_AERODROME,\n \"base-sepolia\": BASE_SEPOLIA_AERODROME,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_AERODROME,\n hyperevm: HYPEREVM_AERODROME,\n \"hyperevm-testnet\": HYPEREVM_AERODROME,\n};\n\nconst STRATEGY_TEMPLATE_REGISTRY: Record<Network, typeof BASE_STRATEGY_TEMPLATES> = {\n base: BASE_STRATEGY_TEMPLATES,\n \"base-sepolia\": BASE_SEPOLIA_STRATEGY_TEMPLATES,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_STRATEGY_TEMPLATES,\n hyperevm: HYPEREVM_STRATEGY_TEMPLATES,\n \"hyperevm-testnet\": HYPEREVM_STRATEGY_TEMPLATES,\n};\n\nconst HYPEREVM_SYNTHRA = { ROUTER: ZERO, QUOTER: ZERO, FACTORY: ZERO } as const;\nconst HYPEREVM_CHAINLINK = { VERIFIER_PROXY: ZERO } as const;\n\nconst SYNTHRA_REGISTRY: Record<Network, typeof BASE_SYNTHRA> = {\n base: BASE_SYNTHRA,\n \"base-sepolia\": BASE_SEPOLIA_SYNTHRA,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_SYNTHRA,\n hyperevm: HYPEREVM_SYNTHRA,\n \"hyperevm-testnet\": HYPEREVM_SYNTHRA,\n};\n\nconst CHAINLINK_REGISTRY: Record<Network, typeof BASE_CHAINLINK> = {\n base: BASE_CHAINLINK,\n \"base-sepolia\": BASE_SEPOLIA_CHAINLINK,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_CHAINLINK,\n hyperevm: HYPEREVM_CHAINLINK,\n \"hyperevm-testnet\": HYPEREVM_CHAINLINK,\n};\n\nconst EAS_CONTRACT_REGISTRY: Record<Network, typeof BASE_EAS> = {\n base: BASE_EAS,\n \"base-sepolia\": BASE_SEPOLIA_EAS,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_EAS,\n hyperevm: HYPEREVM_EAS,\n \"hyperevm-testnet\": HYPEREVM_EAS,\n};\n\nconst EAS_SCHEMA_REGISTRY: Record<Network, typeof BASE_EAS_SCHEMAS> = {\n base: BASE_EAS_SCHEMAS,\n \"base-sepolia\": BASE_SEPOLIA_EAS_SCHEMAS,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_EAS_SCHEMAS,\n hyperevm: HYPEREVM_EAS_SCHEMAS,\n \"hyperevm-testnet\": HYPEREVM_EAS_SCHEMAS,\n};\n\n// ── Exports (functions, resolved at call time) ──\n\nexport function TOKENS() {\n return TOKEN_REGISTRY[getNetwork()];\n}\n\nexport function MOONWELL() {\n return MOONWELL_REGISTRY[getNetwork()];\n}\n\nexport function UNISWAP() {\n return UNISWAP_REGISTRY[getNetwork()];\n}\n\nexport function INFRA() {\n return INFRA_REGISTRY[getNetwork()];\n}\n\nexport function ENS() {\n return ENS_REGISTRY[getNetwork()];\n}\n\nexport function AGENT_REGISTRY() {\n return AGENT_REGISTRY_MAP[getNetwork()];\n}\n\nexport function VENICE() {\n return VENICE_REGISTRY[getNetwork()];\n}\n\nexport function SHERWOOD() {\n return SHERWOOD_REGISTRY[getNetwork()];\n}\n\nexport function AERODROME() {\n return AERODROME_REGISTRY[getNetwork()];\n}\n\nexport function STRATEGY_TEMPLATES() {\n return STRATEGY_TEMPLATE_REGISTRY[getNetwork()];\n}\n\nexport function EAS_CONTRACTS() {\n return EAS_CONTRACT_REGISTRY[getNetwork()];\n}\n\nexport function EAS_SCHEMAS() {\n return EAS_SCHEMA_REGISTRY[getNetwork()];\n}\n\nexport function SYNTHRA() {\n return SYNTHRA_REGISTRY[getNetwork()];\n}\n\nexport function CHAINLINK() {\n return CHAINLINK_REGISTRY[getNetwork()];\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/lib/addresses.ts"],"sourcesContent":["/**\n * Contract addresses by network.\n *\n * All exports are functions — they resolve at call time based on the\n * current network set via setNetwork(). This ensures --chain works\n * even when modules are imported before the flag is parsed.\n *\n * Zero addresses = protocol not deployed on that chain. Strategies that\n * need them will fail at execution time with a clear allowlist error.\n */\n\nimport type { Address } from \"viem\";\nimport { type Network, getNetwork } from \"./network.js\";\n\nconst ZERO: Address = \"0x0000000000000000000000000000000000000000\";\nconst ZERO_BYTES32 =\n \"0x0000000000000000000000000000000000000000000000000000000000000000\" as `0x${string}`;\n\n// ── Base Mainnet ──\n\nconst BASE_TOKENS = {\n USDC: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\" as Address,\n WETH: \"0x4200000000000000000000000000000000000006\" as Address,\n cbETH: \"0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22\" as Address,\n wstETH: \"0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452\" as Address,\n cbBTC: \"0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf\" as Address,\n DAI: \"0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb\" as Address,\n AERO: \"0x940181a94A35A4569E4529A3CDfB74e38FD98631\" as Address,\n} as const;\n\nconst BASE_MOONWELL = {\n COMPTROLLER: \"0xfBb21d0380beE3312B33c4353c8936a0F13EF26C\" as Address,\n mUSDC: \"0xEdc817A28E8B93B03976FBd4a3dDBc9f7D176c22\" as Address,\n mWETH: \"0x628ff693426583D9a7FB391E54366292F509D457\" as Address,\n mCbETH: \"0x3bf93770f2d4a794c3d9EBEfBAeBAE2a8f09A5E5\" as Address,\n mWstETH: \"0x627Fe393Bc6EdDA28e99AE648fD6fF362514304b\" as Address,\n mCbBTC: \"0xF877ACaFA28c19b96727966690b2f44d35aD5976\" as Address,\n mDAI: \"0x73b06D8d18De422E269645eaCe15400DE7462417\" as Address,\n mAERO: \"0x73902f619CEB9B31FD8EFecf435CbDf89E369Ba6\" as Address,\n} as const;\n\nconst BASE_UNISWAP = {\n SWAP_ROUTER: \"0x2626664c2603336E57B271c5C0b26F421741e481\" as Address,\n QUOTER_V2: \"0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a\" as Address,\n SWAP_ADAPTER: \"0x121AaC2B96Ec365e457fcCc1C2ED5a6142064069\" as Address,\n} as const;\n\nconst BASE_INFRA = {\n MULTICALL3: \"0xcA11bde05977b3631167028862bE2a173976CA11\" as Address,\n} as const;\n\n// ── Base Sepolia ──\n\nconst BASE_SEPOLIA_TOKENS = {\n USDC: \"0x036CbD53842c5426634e7929541eC2318f3dCF7e\" as Address, // Circle test USDC\n WETH: \"0x4200000000000000000000000000000000000006\" as Address, // Canonical bridged WETH\n cbETH: ZERO,\n wstETH: ZERO,\n cbBTC: ZERO,\n DAI: ZERO,\n AERO: ZERO,\n} as const;\n\nconst BASE_SEPOLIA_MOONWELL = {\n COMPTROLLER: ZERO,\n mUSDC: ZERO,\n mWETH: ZERO,\n mCbETH: ZERO,\n mWstETH: ZERO,\n mCbBTC: ZERO,\n mDAI: ZERO,\n mAERO: ZERO,\n} as const;\n\nconst BASE_SEPOLIA_UNISWAP = {\n SWAP_ROUTER: \"0x94cC0AaC535CCDB3C01d6787D6413C739ae12bc4\" as Address, // Uniswap V3 SwapRouter02\n QUOTER_V2: \"0xC5290058841028F1614F3A6F0F5816cAd0df5E27\" as Address, // Uniswap V3 QuoterV2\n SWAP_ADAPTER: ZERO as Address,\n} as const;\n\nconst BASE_SEPOLIA_INFRA = {\n MULTICALL3: \"0xcA11bde05977b3631167028862bE2a173976CA11\" as Address, // Deterministic, same everywhere\n} as const;\n\n// ── Robinhood L2 Testnet (Arbitrum Orbit, chain 46630) ──\n// Synthra DEX for swaps. Stock tokens available.\n\nconst ROBINHOOD_TESTNET_TOKENS = {\n USDC: ZERO,\n WETH: \"0x7943e237c7F95DA44E0301572D358911207852Fa\" as Address,\n cbETH: ZERO,\n wstETH: ZERO,\n cbBTC: ZERO,\n DAI: ZERO,\n AERO: ZERO,\n TSLA: \"0xC9f9c86933092BbbfFF3CCb4b105A4A94bf3Bd4E\" as Address,\n AMZN: \"0x5884aD2f920c162CFBbACc88C9C51AA75eC09E02\" as Address,\n PLTR: \"0x1FBE1a0e43594b3455993B5dE5Fd0A7A266298d0\" as Address,\n NFLX: \"0x3b8262A63d25f0477c4DDE23F83cfe22Cb768C93\" as Address,\n AMD: \"0x71178BAc73cBeb415514eB542a8995b82669778d\" as Address,\n} as const;\n\nconst ROBINHOOD_TESTNET_MOONWELL = {\n COMPTROLLER: ZERO,\n mUSDC: ZERO,\n mWETH: ZERO,\n mCbETH: ZERO,\n mWstETH: ZERO,\n mCbBTC: ZERO,\n mDAI: ZERO,\n mAERO: ZERO,\n} as const;\n\nconst ROBINHOOD_TESTNET_UNISWAP = {\n SWAP_ROUTER: ZERO,\n QUOTER_V2: ZERO,\n SWAP_ADAPTER: ZERO as Address,\n} as const;\n\n// ── Synthra DEX (Robinhood L2 — Uniswap V3-compatible concentrated liquidity) ──\n\nconst BASE_SYNTHRA = { ROUTER: ZERO, QUOTER: ZERO, FACTORY: ZERO } as const;\nconst BASE_SEPOLIA_SYNTHRA = { ROUTER: ZERO, QUOTER: ZERO, FACTORY: ZERO } as const;\nconst ROBINHOOD_TESTNET_SYNTHRA = {\n ROUTER: \"0x3Ce954107b1A675826B33bF23060Dd655e3758fE\" as Address,\n QUOTER: \"0x231606c321A99DE81e28fE48B07a93F1ba49e713\" as Address,\n FACTORY: \"0x911b4000D3422F482F4062a913885f7b035382Df\" as Address,\n} as const;\n\n// ── Chainlink (Data Streams verifier proxy) ──\n\nconst BASE_CHAINLINK = { VERIFIER_PROXY: \"0xDE1A28D87Afd0f546505B28AB50410A5c3a7387a\" as Address } as const;\nconst BASE_SEPOLIA_CHAINLINK = { VERIFIER_PROXY: ZERO } as const;\nconst ROBINHOOD_TESTNET_CHAINLINK = {\n VERIFIER_PROXY: \"0x72790f9eB82db492a7DDb6d2af22A270Dcc3Db64\" as Address,\n} as const;\n\nconst ROBINHOOD_TESTNET_INFRA = {\n MULTICALL3: \"0xcA11bde05977b3631167028862bE2a173976CA11\" as Address, // Deterministic, same everywhere\n} as const;\n\n// ── HyperEVM (chain 999) ──\n// No Moonwell, no Uniswap, no Venice, no ENS/Durin, no ERC-8004, no EAS.\n// USDC: native USDC on HyperEVM.\n\nconst HYPEREVM_TOKENS = {\n USDC: \"0xb88339CB7199b77E23DB6E890353E22632Ba630f\" as Address,\n WETH: ZERO,\n cbETH: ZERO,\n wstETH: ZERO,\n cbBTC: ZERO,\n DAI: ZERO,\n AERO: ZERO,\n} as const;\n\nconst HYPEREVM_TESTNET_TOKENS = {\n USDC: ZERO,\n WETH: ZERO,\n cbETH: ZERO,\n wstETH: ZERO,\n cbBTC: ZERO,\n DAI: ZERO,\n AERO: ZERO,\n} as const;\n\nconst HYPEREVM_MOONWELL = {\n COMPTROLLER: ZERO, mUSDC: ZERO, mWETH: ZERO, mCbETH: ZERO,\n mWstETH: ZERO, mCbBTC: ZERO, mDAI: ZERO, mAERO: ZERO,\n} as const;\n\nconst HYPEREVM_UNISWAP = { SWAP_ROUTER: ZERO, QUOTER_V2: ZERO, SWAP_ADAPTER: ZERO as Address } as const;\n\nconst HYPEREVM_INFRA = {\n MULTICALL3: \"0xcA11bde05977b3631167028862bE2a173976CA11\" as Address,\n} as const;\n\n// ── ENS / Durin ──\n\nconst BASE_ENS = {\n L2_REGISTRAR: \"0x866996c808E6244216a3d0df15464FCF5d495394\" as Address,\n L2_REGISTRY: \"0x7a019ce699e27b0ad1e5b51344a58116b9f3b9b1\" as Address,\n} as const;\n\nconst BASE_SEPOLIA_ENS = {\n L2_REGISTRAR: \"0x1fCbe9dFC25e3fa3F7C55b26c7992684A4758b47\" as Address,\n L2_REGISTRY: \"0x06eb7b85b59bc3e50fe4837be776cdd26de602cf\" as Address,\n} as const;\n\nconst ROBINHOOD_TESTNET_ENS = {\n L2_REGISTRAR: ZERO,\n L2_REGISTRY: ZERO,\n} as const;\n\nconst HYPEREVM_ENS = { L2_REGISTRAR: ZERO, L2_REGISTRY: ZERO } as const;\n\n// ── ERC-8004 Agent Identity ──\n\nconst BASE_AGENT_REGISTRY = {\n IDENTITY_REGISTRY: \"0x8004A169FB4a3325136EB29fA0ceB6D2e539a432\" as Address,\n REPUTATION_REGISTRY:\n \"0x8004BAa17C55a88189AE136b182e5fdA19dE9b63\" as Address,\n} as const;\n\nconst BASE_SEPOLIA_AGENT_REGISTRY = {\n IDENTITY_REGISTRY: \"0x8004A818BFB912233c491871b3d84c89A494BD9e\" as Address,\n REPUTATION_REGISTRY:\n \"0x8004B663056A597Dffe9eCcC1965A193B7388713\" as Address,\n} as const;\n\nconst ROBINHOOD_TESTNET_AGENT_REGISTRY = {\n IDENTITY_REGISTRY: ZERO,\n REPUTATION_REGISTRY: ZERO,\n} as const;\n\nconst HYPEREVM_AGENT_REGISTRY = { IDENTITY_REGISTRY: ZERO, REPUTATION_REGISTRY: ZERO } as const;\n\n// ── Sherwood Protocol (our deployed contracts) ──\n\nconst BASE_SHERWOOD = {\n FACTORY: \"0xd5C4eE2E4c5B606b9401E69A3B3FeE169037C284\" as Address,\n GOVERNOR: \"0x358AD8B492BcC710BE0D7c902D8702164c35DC34\" as Address,\n} as const;\n\nconst BASE_SEPOLIA_SHERWOOD = {\n FACTORY: \"0x121AaC2B96Ec365e457fcCc1C2ED5a6142064069\" as Address,\n GOVERNOR: \"0xE5ecf2B06E3f3e298B632C0cf6575f9d9422F55E\" as Address,\n} as const;\n\nconst ROBINHOOD_TESTNET_SHERWOOD = {\n FACTORY: \"0x6d026e2f5Ff0C34A01690EC46Cb601B8fF391985\" as Address,\n GOVERNOR: \"0xd882056ba6b0aEd8908c541884B327121E2f2C9C\" as Address,\n} as const;\n\nconst HYPEREVM_SHERWOOD = {\n FACTORY: \"0x4085EEa1E6d3D20E84D8Ae14964FAb8b899DA40a\" as Address,\n GOVERNOR: \"0x7B4a2f3480FE101f88b2e3547A1bCf3eaaDE46bc\" as Address,\n} as const;\n\n// ── Venice (VVV governance + sVVV staking + DIEM compute) ──\n\nconst BASE_VENICE = {\n VVV: \"0xacfe6019ed1a7dc6f7b508c02d1b04ec88cc21bf\" as Address,\n STAKING: \"0x321b7ff75154472b18edb199033ff4d116f340ff\" as Address, // also the sVVV ERC-20\n DIEM: \"0xF4d97F2da56e8c3098f3a8D538DB630A2606a024\" as Address,\n} as const;\n\nconst BASE_SEPOLIA_VENICE = {\n VVV: ZERO,\n STAKING: ZERO,\n DIEM: ZERO,\n} as const;\n\nconst ROBINHOOD_TESTNET_VENICE = {\n VVV: ZERO,\n STAKING: ZERO,\n DIEM: ZERO,\n} as const;\n\nconst HYPEREVM_VENICE = { VVV: ZERO, STAKING: ZERO, DIEM: ZERO } as const;\n\n// ── Aerodrome (Base ve(3,3) DEX) ──\n\nconst BASE_AERODROME = {\n ROUTER: \"0xcF77a3Ba9A5CA399B7c97c74d54e5b1Beb874E43\" as Address,\n FACTORY: \"0x420DD381b31aEf6683db6B902084cB0FFECe40Da\" as Address,\n} as const;\n\nconst BASE_SEPOLIA_AERODROME = {\n ROUTER: ZERO,\n FACTORY: ZERO,\n} as const;\n\nconst ROBINHOOD_TESTNET_AERODROME = {\n ROUTER: ZERO,\n FACTORY: ZERO,\n} as const;\n\nconst HYPEREVM_AERODROME = { ROUTER: ZERO, FACTORY: ZERO } as const;\n\n// ── Strategy Templates (ERC-1167 clonable singletons) ──\n// Populated after running script/DeployTemplates.s.sol\n\nconst BASE_STRATEGY_TEMPLATES = {\n MOONWELL_SUPPLY: \"0x72216571Ac847b29E1a5e3378e6ebCca3C2882da\" as Address,\n AERODROME_LP: \"0x1c61c740702690B86b874ab929A6F04A4Ec56C1c\" as Address,\n VENICE_INFERENCE: \"0xd882056ba6b0aEd8908c541884B327121E2f2C9C\" as Address,\n WSTETH_MOONWELL: \"0xdae81cDCfcB14c56fCeB788A147Fcd6CbEdfEeca\" as Address,\n MAMO_YIELD: \"0x5c98808Ce5e51767ba2d969F75312eEFF0b14a6A\" as Address,\n HYPERLIQUID_PERP: ZERO as Address,\n PORTFOLIO: \"0x7865eEA4063c22d0F55FdD412D345495c7b73f64\" as Address,\n} as const;\n\nconst BASE_SEPOLIA_STRATEGY_TEMPLATES = {\n MOONWELL_SUPPLY: ZERO as Address,\n AERODROME_LP: ZERO as Address,\n VENICE_INFERENCE: ZERO as Address,\n WSTETH_MOONWELL: ZERO as Address,\n MAMO_YIELD: ZERO as Address,\n HYPERLIQUID_PERP: ZERO as Address,\n PORTFOLIO: ZERO as Address,\n} as const;\n\nconst ROBINHOOD_TESTNET_STRATEGY_TEMPLATES = {\n MOONWELL_SUPPLY: ZERO as Address,\n AERODROME_LP: ZERO as Address,\n VENICE_INFERENCE: ZERO as Address,\n WSTETH_MOONWELL: ZERO as Address,\n MAMO_YIELD: ZERO as Address,\n HYPERLIQUID_PERP: ZERO as Address,\n PORTFOLIO: \"0xAe981882923E0C76A7F10E7cAa3782023c0abd9B\" as Address,\n} as const;\n\nconst HYPEREVM_STRATEGY_TEMPLATES = {\n MOONWELL_SUPPLY: ZERO as Address,\n AERODROME_LP: ZERO as Address,\n VENICE_INFERENCE: ZERO as Address,\n WSTETH_MOONWELL: ZERO as Address,\n MAMO_YIELD: ZERO as Address,\n HYPERLIQUID_PERP: \"0x2efD194ADb3Db40E0e6faAe06c4e602c7a3D9199\" as Address,\n PORTFOLIO: ZERO as Address,\n} as const;\n\n// ── EAS (Ethereum Attestation Service) — Base predeploys ──\n\nconst BASE_EAS = {\n EAS: \"0x4200000000000000000000000000000000000021\" as Address,\n SCHEMA_REGISTRY: \"0x4200000000000000000000000000000000000020\" as Address,\n} as const;\n\nconst BASE_SEPOLIA_EAS = {\n EAS: \"0x4200000000000000000000000000000000000021\" as Address,\n SCHEMA_REGISTRY: \"0x4200000000000000000000000000000000000020\" as Address,\n} as const;\n\nconst ROBINHOOD_TESTNET_EAS = {\n EAS: ZERO,\n SCHEMA_REGISTRY: ZERO,\n} as const;\n\nconst HYPEREVM_EAS = { EAS: ZERO, SCHEMA_REGISTRY: ZERO } as const;\n\n// ── EAS Schema UIDs (populated after running scripts/register-eas-schemas.ts) ──\n\nconst BASE_EAS_SCHEMAS = {\n SYNDICATE_JOIN_REQUEST:\n \"0x1e7ce17b16233977ba913b156033e98f52029f4bee273a4abefe6c15ce11d5ef\" as `0x${string}`,\n AGENT_APPROVED:\n \"0x1013f7b38f433b2a93fc5ac162482813081c64edd67cea9b5a90698531ddb607\" as `0x${string}`,\n X402_RESEARCH:\n \"0x86c67f0a59acb3093ecbeb6c4d1d4352e4a48143672e92ef9dd2fdfc8a9ca708\" as `0x${string}`,\n VENICE_PROVISION:\n \"0x76d4d6baa72307826cd2fd4ce069bb42ee54cdda6ed6ab208c8d233c893fb7f1\" as `0x${string}`,\n VENICE_INFERENCE:\n \"0xf9b4e530f3016c19439b67372a1c213c9339857627fb817032614b97433a2a14\" as `0x${string}`,\n TRADE_EXECUTED:\n \"0x06bb488363a468f7f857ddc8cfffe918d048b8746a0d59eca9cd7f58dbdb4af6\" as `0x${string}`,\n} as const;\n\nconst BASE_SEPOLIA_EAS_SCHEMAS = {\n SYNDICATE_JOIN_REQUEST:\n \"0x1e7ce17b16233977ba913b156033e98f52029f4bee273a4abefe6c15ce11d5ef\" as `0x${string}`,\n AGENT_APPROVED:\n \"0x1013f7b38f433b2a93fc5ac162482813081c64edd67cea9b5a90698531ddb607\" as `0x${string}`,\n X402_RESEARCH:\n \"0x86c67f0a59acb3093ecbeb6c4d1d4352e4a48143672e92ef9dd2fdfc8a9ca708\" as `0x${string}`,\n VENICE_PROVISION:\n \"0x76d4d6baa72307826cd2fd4ce069bb42ee54cdda6ed6ab208c8d233c893fb7f1\" as `0x${string}`,\n VENICE_INFERENCE:\n \"0xf9b4e530f3016c19439b67372a1c213c9339857627fb817032614b97433a2a14\" as `0x${string}`,\n TRADE_EXECUTED:\n \"0x06bb488363a468f7f857ddc8cfffe918d048b8746a0d59eca9cd7f58dbdb4af6\" as `0x${string}`,\n} as const;\n\nconst ROBINHOOD_TESTNET_EAS_SCHEMAS = {\n SYNDICATE_JOIN_REQUEST: ZERO_BYTES32,\n AGENT_APPROVED: ZERO_BYTES32,\n X402_RESEARCH: ZERO_BYTES32,\n VENICE_PROVISION: ZERO_BYTES32,\n VENICE_INFERENCE: ZERO_BYTES32,\n TRADE_EXECUTED: ZERO_BYTES32,\n} as const;\n\nconst HYPEREVM_EAS_SCHEMAS = {\n SYNDICATE_JOIN_REQUEST: ZERO_BYTES32, AGENT_APPROVED: ZERO_BYTES32,\n X402_RESEARCH: ZERO_BYTES32, VENICE_PROVISION: ZERO_BYTES32,\n VENICE_INFERENCE: ZERO_BYTES32, TRADE_EXECUTED: ZERO_BYTES32,\n} as const;\n\n// ── Registries (map-based lookup) ──\n\nconst TOKEN_REGISTRY: Record<Network, typeof BASE_TOKENS> = {\n base: BASE_TOKENS,\n \"base-sepolia\": BASE_SEPOLIA_TOKENS,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_TOKENS,\n hyperevm: HYPEREVM_TOKENS,\n \"hyperevm-testnet\": HYPEREVM_TESTNET_TOKENS,\n};\n\nconst MOONWELL_REGISTRY: Record<Network, typeof BASE_MOONWELL> = {\n base: BASE_MOONWELL,\n \"base-sepolia\": BASE_SEPOLIA_MOONWELL,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_MOONWELL,\n hyperevm: HYPEREVM_MOONWELL,\n \"hyperevm-testnet\": HYPEREVM_MOONWELL,\n};\n\nconst UNISWAP_REGISTRY: Record<Network, typeof BASE_UNISWAP> = {\n base: BASE_UNISWAP,\n \"base-sepolia\": BASE_SEPOLIA_UNISWAP,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_UNISWAP,\n hyperevm: HYPEREVM_UNISWAP,\n \"hyperevm-testnet\": HYPEREVM_UNISWAP,\n};\n\nconst INFRA_REGISTRY: Record<Network, typeof BASE_INFRA> = {\n base: BASE_INFRA,\n \"base-sepolia\": BASE_SEPOLIA_INFRA,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_INFRA,\n hyperevm: HYPEREVM_INFRA,\n \"hyperevm-testnet\": HYPEREVM_INFRA,\n};\n\nconst ENS_REGISTRY: Record<Network, typeof BASE_ENS> = {\n base: BASE_ENS,\n \"base-sepolia\": BASE_SEPOLIA_ENS,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_ENS,\n hyperevm: HYPEREVM_ENS,\n \"hyperevm-testnet\": HYPEREVM_ENS,\n};\n\nconst AGENT_REGISTRY_MAP: Record<Network, typeof BASE_AGENT_REGISTRY> = {\n base: BASE_AGENT_REGISTRY,\n \"base-sepolia\": BASE_SEPOLIA_AGENT_REGISTRY,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_AGENT_REGISTRY,\n hyperevm: HYPEREVM_AGENT_REGISTRY,\n \"hyperevm-testnet\": HYPEREVM_AGENT_REGISTRY,\n};\n\nconst SHERWOOD_REGISTRY: Record<Network, typeof BASE_SHERWOOD> = {\n base: BASE_SHERWOOD,\n \"base-sepolia\": BASE_SEPOLIA_SHERWOOD,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_SHERWOOD,\n hyperevm: HYPEREVM_SHERWOOD,\n \"hyperevm-testnet\": HYPEREVM_SHERWOOD,\n};\n\nconst VENICE_REGISTRY: Record<Network, typeof BASE_VENICE> = {\n base: BASE_VENICE,\n \"base-sepolia\": BASE_SEPOLIA_VENICE,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_VENICE,\n hyperevm: HYPEREVM_VENICE,\n \"hyperevm-testnet\": HYPEREVM_VENICE,\n};\n\nconst AERODROME_REGISTRY: Record<Network, typeof BASE_AERODROME> = {\n base: BASE_AERODROME,\n \"base-sepolia\": BASE_SEPOLIA_AERODROME,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_AERODROME,\n hyperevm: HYPEREVM_AERODROME,\n \"hyperevm-testnet\": HYPEREVM_AERODROME,\n};\n\nconst STRATEGY_TEMPLATE_REGISTRY: Record<Network, typeof BASE_STRATEGY_TEMPLATES> = {\n base: BASE_STRATEGY_TEMPLATES,\n \"base-sepolia\": BASE_SEPOLIA_STRATEGY_TEMPLATES,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_STRATEGY_TEMPLATES,\n hyperevm: HYPEREVM_STRATEGY_TEMPLATES,\n \"hyperevm-testnet\": HYPEREVM_STRATEGY_TEMPLATES,\n};\n\nconst HYPEREVM_SYNTHRA = { ROUTER: ZERO, QUOTER: ZERO, FACTORY: ZERO } as const;\nconst HYPEREVM_CHAINLINK = { VERIFIER_PROXY: ZERO } as const;\n\nconst SYNTHRA_REGISTRY: Record<Network, typeof BASE_SYNTHRA> = {\n base: BASE_SYNTHRA,\n \"base-sepolia\": BASE_SEPOLIA_SYNTHRA,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_SYNTHRA,\n hyperevm: HYPEREVM_SYNTHRA,\n \"hyperevm-testnet\": HYPEREVM_SYNTHRA,\n};\n\nconst CHAINLINK_REGISTRY: Record<Network, typeof BASE_CHAINLINK> = {\n base: BASE_CHAINLINK,\n \"base-sepolia\": BASE_SEPOLIA_CHAINLINK,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_CHAINLINK,\n hyperevm: HYPEREVM_CHAINLINK,\n \"hyperevm-testnet\": HYPEREVM_CHAINLINK,\n};\n\nconst EAS_CONTRACT_REGISTRY: Record<Network, typeof BASE_EAS> = {\n base: BASE_EAS,\n \"base-sepolia\": BASE_SEPOLIA_EAS,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_EAS,\n hyperevm: HYPEREVM_EAS,\n \"hyperevm-testnet\": HYPEREVM_EAS,\n};\n\nconst EAS_SCHEMA_REGISTRY: Record<Network, typeof BASE_EAS_SCHEMAS> = {\n base: BASE_EAS_SCHEMAS,\n \"base-sepolia\": BASE_SEPOLIA_EAS_SCHEMAS,\n \"robinhood-testnet\": ROBINHOOD_TESTNET_EAS_SCHEMAS,\n hyperevm: HYPEREVM_EAS_SCHEMAS,\n \"hyperevm-testnet\": HYPEREVM_EAS_SCHEMAS,\n};\n\n// ── Exports (functions, resolved at call time) ──\n\nexport function TOKENS() {\n return TOKEN_REGISTRY[getNetwork()];\n}\n\nexport function MOONWELL() {\n return MOONWELL_REGISTRY[getNetwork()];\n}\n\nexport function UNISWAP() {\n return UNISWAP_REGISTRY[getNetwork()];\n}\n\nexport function INFRA() {\n return INFRA_REGISTRY[getNetwork()];\n}\n\nexport function ENS() {\n return ENS_REGISTRY[getNetwork()];\n}\n\nexport function AGENT_REGISTRY() {\n return AGENT_REGISTRY_MAP[getNetwork()];\n}\n\nexport function VENICE() {\n return VENICE_REGISTRY[getNetwork()];\n}\n\nexport function SHERWOOD() {\n return SHERWOOD_REGISTRY[getNetwork()];\n}\n\nexport function AERODROME() {\n return AERODROME_REGISTRY[getNetwork()];\n}\n\nexport function STRATEGY_TEMPLATES() {\n return STRATEGY_TEMPLATE_REGISTRY[getNetwork()];\n}\n\nexport function EAS_CONTRACTS() {\n return EAS_CONTRACT_REGISTRY[getNetwork()];\n}\n\nexport function EAS_SCHEMAS() {\n return EAS_SCHEMA_REGISTRY[getNetwork()];\n}\n\nexport function SYNTHRA() {\n return SYNTHRA_REGISTRY[getNetwork()];\n}\n\nexport function CHAINLINK() {\n return CHAINLINK_REGISTRY[getNetwork()];\n}\n"],"mappings":"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","names":[]}
@@ -25,6 +25,13 @@ function getCachedGroupId(subdomain) {
25
25
  const config = loadConfig();
26
26
  return config.groupCache[subdomain];
27
27
  }
28
+ function invalidateCachedGroupId(subdomain) {
29
+ const config = loadConfig();
30
+ if (config.groupCache[subdomain]) {
31
+ delete config.groupCache[subdomain];
32
+ saveConfig(config);
33
+ }
34
+ }
28
35
  function setVeniceApiKey(apiKey) {
29
36
  const config = loadConfig();
30
37
  config.veniceApiKey = apiKey;
@@ -160,6 +167,7 @@ export {
160
167
  saveConfig,
161
168
  cacheGroupId,
162
169
  getCachedGroupId,
170
+ invalidateCachedGroupId,
163
171
  setVeniceApiKey,
164
172
  getVeniceApiKey,
165
173
  setAgentId,
@@ -182,4 +190,4 @@ export {
182
190
  cacheSwapRoute,
183
191
  clearSwapRoutes
184
192
  };
185
- //# sourceMappingURL=chunk-RGOTBJIN.js.map
193
+ //# sourceMappingURL=chunk-WCBG44IQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/config.ts"],"sourcesContent":["/**\n * Local config management — ~/.sherwood/config.json\n *\n * Stores group ID cache, per-chain contract addresses, and wallet config.\n */\n\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nconst CONFIG_DIR = path.join(os.homedir(), \".sherwood\");\nconst CONFIG_PATH = path.join(CONFIG_DIR, \"config.json\");\n\n/** Per-chain user-specific addresses (stored by chainId). */\nexport interface ChainContracts {\n vault?: string; // user's default vault address\n}\n\n/** A syndicate the agent belongs to (creator or member). */\nexport interface SyndicateMembership {\n subdomain: string;\n vault: string;\n role: \"creator\" | \"agent\";\n}\n\nexport interface SherwoodConfig {\n dbEncryptionKey?: string; // legacy — no longer used, XMTP CLI manages its own DB\n privateKey?: string; // wallet private key (0x-prefixed)\n xmtpInboxId?: string;\n groupCache: Record<string, string>; // subdomain → XMTP group ID\n veniceApiKey?: string; // Venice AI inference API key\n agentId?: number; // ERC-8004 identity token ID\n contracts?: Record<string, ChainContracts>; // chainId → user addresses\n syndicates?: Record<string, SyndicateMembership[]>; // chainId → syndicate memberships\n primarySyndicate?: Record<string, string>; // chainId → subdomain of the active syndicate\n rpc?: Record<string, string>; // network name → custom RPC URL\n notifyTo?: string; // destination for cron summaries (Telegram chat ID, phone, etc.)\n uniswapApiKey?: string; // Uniswap Trading API key (from developers.uniswap.org)\n positions?: unknown[]; // open trade positions (typed in positions.ts)\n closedPositions?: unknown[]; // historical closed positions\n _xmtpMigrated?: boolean; // one-time flag: revoked stale installations from ~/.xmtp/ era\n /** Cached swap routes per chain: chainId → { tokenPair → SwapRoute } */\n swapRoutes?: Record<string, Record<string, SwapRoute>>;\n}\n\n/** Persisted swap route detected by the CLI during portfolio strategy proposal. */\nexport interface SwapRoute {\n mode: \"direct\" | \"multi-hop\";\n feeTier: number; // direct pool fee tier\n hop?: { via: string; feeIn: number; feeOut: number }; // multi-hop details\n detectedAt: number; // unix timestamp\n}\n\nexport function loadConfig(): SherwoodConfig {\n if (fs.existsSync(CONFIG_PATH)) {\n const config = JSON.parse(fs.readFileSync(CONFIG_PATH, \"utf-8\"));\n if (!config.groupCache) config.groupCache = {};\n return config;\n }\n\n return { groupCache: {} };\n}\n\nexport function saveConfig(config: SherwoodConfig): void {\n fs.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });\n fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2), { mode: 0o600 });\n}\n\nexport function cacheGroupId(subdomain: string, groupId: string): void {\n const config = loadConfig();\n config.groupCache[subdomain] = groupId;\n saveConfig(config);\n}\n\nexport function getCachedGroupId(subdomain: string): string | undefined {\n const config = loadConfig();\n return config.groupCache[subdomain];\n}\n\nexport function invalidateCachedGroupId(subdomain: string): void {\n const config = loadConfig();\n if (config.groupCache[subdomain]) {\n delete config.groupCache[subdomain];\n saveConfig(config);\n }\n}\n\nexport function setVeniceApiKey(apiKey: string): void {\n const config = loadConfig();\n config.veniceApiKey = apiKey;\n saveConfig(config);\n}\n\nexport function getVeniceApiKey(): string | undefined {\n return loadConfig().veniceApiKey ?? process.env.VENICE_API_KEY;\n}\n\nexport function setAgentId(agentId: number): void {\n const config = loadConfig();\n config.agentId = agentId;\n saveConfig(config);\n}\n\nexport function getAgentId(): number | undefined {\n return loadConfig().agentId;\n}\n\nexport function setPrivateKey(key: string): void {\n const config = loadConfig();\n config.privateKey = key.startsWith(\"0x\") ? key : `0x${key}`;\n saveConfig(config);\n}\n\nexport function getPrivateKey(): string | undefined {\n return loadConfig().privateKey;\n}\n\n// ── Uniswap Trading API Key ──\n\nexport function setUniswapApiKey(apiKey: string): void {\n const config = loadConfig();\n config.uniswapApiKey = apiKey;\n saveConfig(config);\n}\n\nexport function getUniswapApiKey(): string | undefined {\n return loadConfig().uniswapApiKey ?? process.env.UNISWAP_API_KEY;\n}\n\n// ── Per-network RPC URLs ──\n\nexport function getConfigRpcUrl(network: string): string | undefined {\n return loadConfig().rpc?.[network];\n}\n\nexport function setConfigRpcUrl(network: string, url: string): void {\n const config = loadConfig();\n if (!config.rpc) config.rpc = {};\n config.rpc[network] = url;\n saveConfig(config);\n}\n\n// ── Per-chain contract addresses ──\n\nexport function getChainContracts(chainId: number): ChainContracts {\n const config = loadConfig();\n return config.contracts?.[String(chainId)] ?? {};\n}\n\nexport function getNotifyTo(): string | undefined {\n return loadConfig().notifyTo;\n}\n\nexport function setNotifyTo(id: string): void {\n const config = loadConfig();\n config.notifyTo = id;\n saveConfig(config);\n}\n\nexport function setChainContract(\n chainId: number,\n key: keyof ChainContracts,\n value: string,\n): void {\n const config = loadConfig();\n if (!config.contracts) config.contracts = {};\n const cid = String(chainId);\n if (!config.contracts[cid]) config.contracts[cid] = {};\n config.contracts[cid][key] = value;\n saveConfig(config);\n}\n\n// ── Syndicate Membership ──\n\n/**\n * Add (or update) a syndicate membership. Deduplicates by subdomain.\n * Automatically sets it as primary if it's the first syndicate on this chain.\n */\nexport function addSyndicate(\n chainId: number,\n membership: SyndicateMembership,\n): void {\n const config = loadConfig();\n const cid = String(chainId);\n if (!config.syndicates) config.syndicates = {};\n if (!config.syndicates[cid]) config.syndicates[cid] = [];\n\n // Upsert — replace existing entry with same subdomain\n const idx = config.syndicates[cid].findIndex(\n (s) => s.subdomain === membership.subdomain,\n );\n if (idx >= 0) {\n config.syndicates[cid][idx] = membership;\n } else {\n config.syndicates[cid].push(membership);\n }\n\n // Auto-set as primary if it's the first syndicate (or no primary set)\n if (!config.primarySyndicate) config.primarySyndicate = {};\n if (!config.primarySyndicate[cid]) {\n config.primarySyndicate[cid] = membership.subdomain;\n }\n\n saveConfig(config);\n}\n\n/** Get all syndicate memberships for a chain. */\nexport function getSyndicates(chainId: number): SyndicateMembership[] {\n const config = loadConfig();\n return config.syndicates?.[String(chainId)] ?? [];\n}\n\n/** Set which syndicate is the active/primary one for CLI commands. */\nexport function setPrimarySyndicate(\n chainId: number,\n subdomain: string,\n): void {\n const config = loadConfig();\n if (!config.primarySyndicate) config.primarySyndicate = {};\n config.primarySyndicate[String(chainId)] = subdomain;\n saveConfig(config);\n}\n\n/**\n * Get the primary syndicate for this chain.\n * Falls back to ChainContracts.vault for backwards compat with older configs.\n */\nexport function getPrimarySyndicate(\n chainId: number,\n): SyndicateMembership | undefined {\n const config = loadConfig();\n const cid = String(chainId);\n\n // Check new syndicates store first\n const primarySubdomain = config.primarySyndicate?.[cid];\n if (primarySubdomain && config.syndicates?.[cid]) {\n const found = config.syndicates[cid].find(\n (s) => s.subdomain === primarySubdomain,\n );\n if (found) return found;\n }\n\n // Backwards compat: if syndicates list has entries but no primary, use the first one\n if (config.syndicates?.[cid]?.length) {\n return config.syndicates[cid][0];\n }\n\n // Legacy fallback: config only has a vault address, no subdomain\n const vault = config.contracts?.[cid]?.vault;\n if (vault) {\n return { subdomain: \"\", vault, role: \"creator\" };\n }\n\n return undefined;\n}\n\n// ── Swap Route Cache ──\n\nfunction swapRouteKey(asset: string, token: string): string {\n return `${asset.toLowerCase()}→${token.toLowerCase()}`;\n}\n\n/** Get a cached swap route for a token pair on a chain. */\nexport function getCachedSwapRoute(chainId: number, asset: string, token: string): SwapRoute | undefined {\n const config = loadConfig();\n return config.swapRoutes?.[String(chainId)]?.[swapRouteKey(asset, token)];\n}\n\n/** Save a detected swap route to the config cache. */\nexport function cacheSwapRoute(chainId: number, asset: string, token: string, route: SwapRoute): void {\n const config = loadConfig();\n const cid = String(chainId);\n if (!config.swapRoutes) config.swapRoutes = {};\n if (!config.swapRoutes[cid]) config.swapRoutes[cid] = {};\n config.swapRoutes[cid][swapRouteKey(asset, token)] = route;\n saveConfig(config);\n}\n\n/** Clear all cached swap routes for a chain (e.g. after pool migration). */\nexport function clearSwapRoutes(chainId: number): void {\n const config = loadConfig();\n delete config.swapRoutes?.[String(chainId)];\n saveConfig(config);\n}\n"],"mappings":"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","names":[]}
@@ -10,9 +10,9 @@ import {
10
10
  unstickWallet,
11
11
  waitForReceipt,
12
12
  writeContractWithRetry
13
- } from "./chunk-WRG7GAIA.js";
14
- import "./chunk-ZPYN5ZAI.js";
15
- import "./chunk-RGOTBJIN.js";
13
+ } from "./chunk-OFR3LCYE.js";
14
+ import "./chunk-IJG4CTOI.js";
15
+ import "./chunk-WCBG44IQ.js";
16
16
  export {
17
17
  detectStuckNonce,
18
18
  estimateFeesWithBuffer,
@@ -26,4 +26,4 @@ export {
26
26
  waitForReceipt,
27
27
  writeContractWithRetry
28
28
  };
29
- //# sourceMappingURL=client-HBMSTSKK.js.map
29
+ //# sourceMappingURL=client-HKAG55PQ.js.map
@@ -14,6 +14,7 @@ import {
14
14
  getSyndicates,
15
15
  getUniswapApiKey,
16
16
  getVeniceApiKey,
17
+ invalidateCachedGroupId,
17
18
  loadConfig,
18
19
  saveConfig,
19
20
  setAgentId,
@@ -24,7 +25,7 @@ import {
24
25
  setPrivateKey,
25
26
  setUniswapApiKey,
26
27
  setVeniceApiKey
27
- } from "./chunk-RGOTBJIN.js";
28
+ } from "./chunk-WCBG44IQ.js";
28
29
  export {
29
30
  addSyndicate,
30
31
  cacheGroupId,
@@ -41,6 +42,7 @@ export {
41
42
  getSyndicates,
42
43
  getUniswapApiKey,
43
44
  getVeniceApiKey,
45
+ invalidateCachedGroupId,
44
46
  loadConfig,
45
47
  saveConfig,
46
48
  setAgentId,
@@ -52,4 +54,4 @@ export {
52
54
  setUniswapApiKey,
53
55
  setVeniceApiKey
54
56
  };
55
- //# sourceMappingURL=config-YXZKPSZB.js.map
57
+ //# sourceMappingURL=config-LS7FKZL5.js.map
@@ -12,12 +12,12 @@ import {
12
12
  queryJoinRequests,
13
13
  revokeAttestation,
14
14
  stripReferrerPrefix
15
- } from "./chunk-I3UVF2GD.js";
15
+ } from "./chunk-3RVDBIXD.js";
16
16
  import "./chunk-PQ5ZX6ZT.js";
17
- import "./chunk-WQOTLKVP.js";
18
- import "./chunk-WRG7GAIA.js";
19
- import "./chunk-ZPYN5ZAI.js";
20
- import "./chunk-RGOTBJIN.js";
17
+ import "./chunk-OPKMVIYJ.js";
18
+ import "./chunk-OFR3LCYE.js";
19
+ import "./chunk-IJG4CTOI.js";
20
+ import "./chunk-WCBG44IQ.js";
21
21
  export {
22
22
  createApproval,
23
23
  createJoinRequest,
@@ -33,4 +33,4 @@ export {
33
33
  revokeAttestation,
34
34
  stripReferrerPrefix
35
35
  };
36
- //# sourceMappingURL=eas-D3KSAGWT.js.map
36
+ //# sourceMappingURL=eas-KBFTHWSI.js.map
@@ -34,12 +34,12 @@ import {
34
34
  settleProposal,
35
35
  vetoProposal,
36
36
  vote
37
- } from "./chunk-3EMDYEAD.js";
37
+ } from "./chunk-ODB2GWA7.js";
38
38
  import "./chunk-PQ5ZX6ZT.js";
39
- import "./chunk-WQOTLKVP.js";
40
- import "./chunk-WRG7GAIA.js";
41
- import "./chunk-ZPYN5ZAI.js";
42
- import "./chunk-RGOTBJIN.js";
39
+ import "./chunk-OPKMVIYJ.js";
40
+ import "./chunk-OFR3LCYE.js";
41
+ import "./chunk-IJG4CTOI.js";
42
+ import "./chunk-WCBG44IQ.js";
43
43
  export {
44
44
  PROPOSAL_STATE,
45
45
  PROPOSAL_STATES,
@@ -77,4 +77,4 @@ export {
77
77
  vetoProposal,
78
78
  vote
79
79
  };
80
- //# sourceMappingURL=governor-3MYMDBRF.js.map
80
+ //# sourceMappingURL=governor-KEXLUOGB.js.map
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@ import {
9
9
  getQuote,
10
10
  listModels,
11
11
  provisionApiKey
12
- } from "./chunk-IIBOFECO.js";
12
+ } from "./chunk-6X3FGJJO.js";
13
13
  import {
14
14
  createApproval,
15
15
  createJoinRequest,
@@ -19,14 +19,14 @@ import {
19
19
  queryJoinRequests,
20
20
  revokeAttestation,
21
21
  stripReferrerPrefix
22
- } from "./chunk-I3UVF2GD.js";
22
+ } from "./chunk-3RVDBIXD.js";
23
23
  import {
24
24
  createSyndicate,
25
25
  getActiveSyndicates,
26
26
  getSyndicate,
27
27
  subdomainExists,
28
28
  updateMetadata
29
- } from "./chunk-T5BRUFWV.js";
29
+ } from "./chunk-O2JHLTDB.js";
30
30
  import {
31
31
  approveDepositor,
32
32
  deposit,
@@ -49,7 +49,7 @@ import {
49
49
  resolveVaultSyndicate,
50
50
  setTextRecord,
51
51
  setVaultAddress
52
- } from "./chunk-YRYPGJ66.js";
52
+ } from "./chunk-LWIPZN5P.js";
53
53
  import {
54
54
  PROPOSAL_STATE,
55
55
  PROPOSAL_STATES,
@@ -81,7 +81,7 @@ import {
81
81
  setVotingPeriod,
82
82
  settleProposal,
83
83
  vote
84
- } from "./chunk-3EMDYEAD.js";
84
+ } from "./chunk-ODB2GWA7.js";
85
85
  import {
86
86
  fetchMetadata,
87
87
  uploadMetadata
@@ -107,7 +107,7 @@ import {
107
107
  TOKENS,
108
108
  UNISWAP,
109
109
  VENICE
110
- } from "./chunk-WQOTLKVP.js";
110
+ } from "./chunk-OPKMVIYJ.js";
111
111
  import {
112
112
  formatContractError,
113
113
  getAccount,
@@ -115,7 +115,7 @@ import {
115
115
  sendTxWithRetry,
116
116
  waitForReceipt,
117
117
  writeContractWithRetry
118
- } from "./chunk-WRG7GAIA.js";
118
+ } from "./chunk-OFR3LCYE.js";
119
119
  import {
120
120
  CHAIN_REGISTRY,
121
121
  VALID_NETWORKS,
@@ -125,7 +125,7 @@ import {
125
125
  getRpcUrl,
126
126
  isTestnet,
127
127
  setNetwork
128
- } from "./chunk-ZPYN5ZAI.js";
128
+ } from "./chunk-IJG4CTOI.js";
129
129
  import {
130
130
  addSyndicate,
131
131
  cacheGroupId,
@@ -148,7 +148,7 @@ import {
148
148
  setPrivateKey,
149
149
  setUniswapApiKey,
150
150
  setVeniceApiKey
151
- } from "./chunk-RGOTBJIN.js";
151
+ } from "./chunk-WCBG44IQ.js";
152
152
 
153
153
  // src/index.ts
154
154
  import { config as loadDotenv } from "dotenv";
@@ -404,7 +404,7 @@ function buildSettleCalls3(clone) {
404
404
  }
405
405
 
406
406
  // src/strategies/wsteth-moonwell-template.ts
407
- import { encodeAbiParameters as encodeAbiParameters4, encodeFunctionData as encodeFunctionData4 } from "viem";
407
+ import { encodeAbiParameters as encodeAbiParameters4, encodeFunctionData as encodeFunctionData4, maxUint256 } from "viem";
408
408
  var INIT_PARAMS_TYPES3 = [
409
409
  {
410
410
  type: "tuple",
@@ -415,8 +415,8 @@ var INIT_PARAMS_TYPES3 = [
415
415
  { name: "aeroRouter", type: "address" },
416
416
  { name: "aeroFactory", type: "address" },
417
417
  { name: "supplyAmount", type: "uint256" },
418
- { name: "minWstethOut", type: "uint256" },
419
- { name: "minWethOut", type: "uint256" },
418
+ { name: "minWstethOutPerWeth", type: "uint256" },
419
+ { name: "minWethOutPerWsteth", type: "uint256" },
420
420
  { name: "deadlineOffset", type: "uint256" }
421
421
  ]
422
422
  }
@@ -425,13 +425,14 @@ function buildInitData4(params) {
425
425
  return encodeAbiParameters4(INIT_PARAMS_TYPES3, [params]);
426
426
  }
427
427
  function buildExecuteCalls4(clone, weth, supplyAmount) {
428
+ const approveAmount = supplyAmount === 0n ? maxUint256 : supplyAmount;
428
429
  return [
429
430
  {
430
431
  target: weth,
431
432
  data: encodeFunctionData4({
432
433
  abi: ERC20_ABI,
433
434
  functionName: "approve",
434
- args: [clone, supplyAmount]
435
+ args: [clone, approveAmount]
435
436
  }),
436
437
  value: 0n
437
438
  },
@@ -442,6 +443,15 @@ function buildExecuteCalls4(clone, weth, supplyAmount) {
442
443
  functionName: "execute"
443
444
  }),
444
445
  value: 0n
446
+ },
447
+ {
448
+ target: weth,
449
+ data: encodeFunctionData4({
450
+ abi: ERC20_ABI,
451
+ functionName: "approve",
452
+ args: [clone, 0n]
453
+ }),
454
+ value: 0n
445
455
  }
446
456
  ];
447
457
  }
@@ -568,7 +578,7 @@ function buildSettleCalls6(clone) {
568
578
  }
569
579
 
570
580
  // src/strategies/hyperliquid-perp-template.ts
571
- import { encodeAbiParameters as encodeAbiParameters7, encodeFunctionData as encodeFunctionData7 } from "viem";
581
+ import { encodeAbiParameters as encodeAbiParameters7, encodeFunctionData as encodeFunctionData7, maxUint256 as maxUint2562 } from "viem";
572
582
  function buildInitData7(asset, depositAmount, minReturnAmount, perpAssetIndex, leverage, maxPositionSize, maxTradesPerDay) {
573
583
  return encodeAbiParameters7(
574
584
  [
@@ -584,13 +594,14 @@ function buildInitData7(asset, depositAmount, minReturnAmount, perpAssetIndex, l
584
594
  );
585
595
  }
586
596
  function buildExecuteCalls7(clone, asset, amount) {
597
+ const approveAmount = amount === 0n ? maxUint2562 : amount;
587
598
  return [
588
599
  {
589
600
  target: asset,
590
601
  data: encodeFunctionData7({
591
602
  abi: ERC20_ABI,
592
603
  functionName: "approve",
593
- args: [clone, amount]
604
+ args: [clone, approveAmount]
594
605
  }),
595
606
  value: 0n
596
607
  },
@@ -601,6 +612,15 @@ function buildExecuteCalls7(clone, asset, amount) {
601
612
  functionName: "execute"
602
613
  }),
603
614
  value: 0n
615
+ },
616
+ {
617
+ target: asset,
618
+ data: encodeFunctionData7({
619
+ abi: ERC20_ABI,
620
+ functionName: "approve",
621
+ args: [clone, 0n]
622
+ }),
623
+ value: 0n
604
624
  }
605
625
  ];
606
626
  }
@@ -928,14 +948,11 @@ async function buildInitDataForTemplate(templateKey, opts, vault) {
928
948
  };
929
949
  }
930
950
  if (templateKey === "wsteth-moonwell") {
931
- if (!opts.amount) {
932
- console.error(chalk.red("--amount is required for wsteth-moonwell template"));
933
- process.exit(1);
934
- }
935
- const supplyAmount = parseUnits(opts.amount, 18);
951
+ const supplyAmount = opts.amount ? parseUnits(opts.amount, 18) : 0n;
936
952
  const slippageBps = BigInt(opts.slippage || "500");
937
- const minWstethOut = supplyAmount - supplyAmount * slippageBps / 10000n;
938
- const minWethOut = supplyAmount - supplyAmount * slippageBps / 10000n;
953
+ const ONE = 10n ** 18n;
954
+ const minWstethOutPerWeth = ONE * (10000n - slippageBps) / 10000n;
955
+ const minWethOutPerWsteth = ONE * (10000n - slippageBps) / 10000n;
939
956
  const params = {
940
957
  weth: TOKENS().WETH,
941
958
  wsteth: TOKENS().wstETH,
@@ -943,8 +960,8 @@ async function buildInitDataForTemplate(templateKey, opts, vault) {
943
960
  aeroRouter: AERODROME().ROUTER,
944
961
  aeroFactory: AERODROME().FACTORY,
945
962
  supplyAmount,
946
- minWstethOut,
947
- minWethOut,
963
+ minWstethOutPerWeth,
964
+ minWethOutPerWsteth,
948
965
  deadlineOffset: 300n
949
966
  };
950
967
  return {
@@ -1035,15 +1052,17 @@ async function buildInitDataForTemplate(templateKey, opts, vault) {
1035
1052
  };
1036
1053
  }
1037
1054
  if (templateKey === "hyperliquid-perp") {
1038
- if (!opts.amount) {
1039
- console.error(chalk.red("--amount is required for hyperliquid-perp template"));
1040
- process.exit(1);
1041
- }
1042
1055
  const token = opts.token || "USDC";
1043
1056
  const asset = resolveToken(token);
1044
1057
  const decimals = token.toUpperCase() === "USDC" ? 6 : 18;
1045
- const depositAmount = parseUnits(opts.amount, decimals);
1046
- const minReturn = parseUnits(opts.minReturn || opts.amount, decimals);
1058
+ const depositAmount = opts.amount ? parseUnits(opts.amount, decimals) : 0n;
1059
+ if (depositAmount === 0n && !opts.minReturn) {
1060
+ console.error(chalk.red(
1061
+ "--min-return is required when --amount is omitted (dynamic-all mode).\n The settlement floor can't be derived without a reference deposit \u2014 set it explicitly to the minimum USDC you'll accept back from HyperCore."
1062
+ ));
1063
+ process.exit(1);
1064
+ }
1065
+ const minReturn = opts.minReturn ? parseUnits(opts.minReturn, decimals) : opts.amount ? parseUnits(opts.amount, decimals) : 0n;
1047
1066
  const leverage = Number(opts.leverage || "10");
1048
1067
  const assetIndex = Number(opts.assetIndex || "0");
1049
1068
  const maxPosition = parseUnits(opts.maxPosition || "100000", decimals);
@@ -1390,9 +1409,9 @@ function registerStrategyTemplateCommands(strategy2) {
1390
1409
  console.error(chalk.red("Missing --name, --performance-fee, or --duration. Use --write-calls to skip proposal submission."));
1391
1410
  process.exit(1);
1392
1411
  }
1393
- const { propose: propose2 } = await import("./governor-3MYMDBRF.js");
1412
+ const { propose: propose2 } = await import("./governor-KEXLUOGB.js");
1394
1413
  const { pinJSON } = await import("./ipfs-IGXLLJCF.js");
1395
- const { parseDuration: parseDuration2 } = await import("./governor-3MYMDBRF.js");
1414
+ const { parseDuration: parseDuration2 } = await import("./governor-KEXLUOGB.js");
1396
1415
  const performanceFeeBps = BigInt(opts.performanceFee);
1397
1416
  if (performanceFeeBps < 0n || performanceFeeBps > 10000n) {
1398
1417
  console.error(chalk.red("--performance-fee must be 0-10000 (basis points)"));
@@ -1500,7 +1519,7 @@ function registerStrategyTemplateCommands(strategy2) {
1500
1519
  let prices = [];
1501
1520
  let priceSource = null;
1502
1521
  try {
1503
- const { getTokenPricesInAsset } = await import("./price-DXNFNTV6.js");
1522
+ const { getTokenPricesInAsset } = await import("./price-M5H57DPY.js");
1504
1523
  prices = await getTokenPricesInAsset({
1505
1524
  tokens: allocations.map((a, i) => ({
1506
1525
  token: a.token,
@@ -1929,7 +1948,7 @@ function registerVeniceCommands(program2) {
1929
1948
  console.log(chalk2.dim(` Key: ${apiKey.slice(0, 8)}...${apiKey.slice(-4)}`));
1930
1949
  console.log(chalk2.dim(" Saved to ~/.sherwood/config.json"));
1931
1950
  try {
1932
- const { createVeniceProvisionAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-D3KSAGWT.js");
1951
+ const { createVeniceProvisionAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-KBFTHWSI.js");
1933
1952
  const { uid } = await createVeniceProvisionAttestation(account.address);
1934
1953
  if (uid !== "0x0000000000000000000000000000000000000000000000000000000000000000") {
1935
1954
  console.log(chalk2.dim(` Attested: ${getEasScanUrl2(uid)}`));
@@ -2080,10 +2099,10 @@ ${opts.prompt}`;
2080
2099
  console.log(chalk2.dim(`Model: ${result.model} | Tokens: ${result.usage.promptTokens} in, ${result.usage.completionTokens} out, ${result.usage.totalTokens} total`));
2081
2100
  }
2082
2101
  try {
2083
- const { createVeniceInferenceAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-D3KSAGWT.js");
2102
+ const { createVeniceInferenceAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-KBFTHWSI.js");
2084
2103
  const { keccak256, toHex, isAddress: isAddr } = await import("viem");
2085
- const { getChainContracts: getChainContracts2 } = await import("./config-YXZKPSZB.js");
2086
- const { getChain: getActiveChain } = await import("./network-X6GM7ROG.js");
2104
+ const { getChainContracts: getChainContracts2 } = await import("./config-LS7FKZL5.js");
2105
+ const { getChain: getActiveChain } = await import("./network-KSMKPKNL.js");
2087
2106
  const vaultRecipient = opts.vault && isAddr(opts.vault) ? opts.vault : getChainContracts2(getActiveChain().id).vault;
2088
2107
  const promptHash = keccak256(toHex(userContent)).slice(0, 18);
2089
2108
  const { uid } = await createVeniceInferenceAttestation(
@@ -3212,8 +3231,8 @@ function printSimulationResult(result, callType) {
3212
3231
  }
3213
3232
  async function sendSimulationAlert(subdomain, proposalId, vault, execResult, settleResult) {
3214
3233
  try {
3215
- const xmtp = await import("./xmtp-XTJ7HDVG.js");
3216
- const { getAccount: getAccount2 } = await import("./client-HBMSTSKK.js");
3234
+ const xmtp = await import("./xmtp-EB2CU2LE.js");
3235
+ const { getAccount: getAccount2 } = await import("./client-HKAG55PQ.js");
3217
3236
  const group = await xmtp.getGroup("", subdomain);
3218
3237
  const allRisks = [...execResult.risks, ...settleResult?.risks ?? []];
3219
3238
  const criticals = allRisks.filter((r) => r.level === "critical");
@@ -4029,7 +4048,7 @@ try {
4029
4048
  var require2 = createRequire(import.meta.url);
4030
4049
  var { version: CLI_VERSION } = require2("../package.json");
4031
4050
  async function loadXmtp() {
4032
- return import("./xmtp-XTJ7HDVG.js");
4051
+ return import("./xmtp-EB2CU2LE.js");
4033
4052
  }
4034
4053
  async function loadCron() {
4035
4054
  return import("./cron-EOULYO3R.js");
@@ -4497,7 +4516,7 @@ syndicate.command("add").description("Register an agent on a syndicate vault (cr
4497
4516
  if (opts.agentId) {
4498
4517
  agentId = BigInt(opts.agentId);
4499
4518
  } else {
4500
- const { AGENT_REGISTRY: AGENT_REGISTRY2 } = await import("./addresses-CQLJSZGN.js");
4519
+ const { AGENT_REGISTRY: AGENT_REGISTRY2 } = await import("./addresses-6GJP2WAY.js");
4501
4520
  const registry = AGENT_REGISTRY2().IDENTITY_REGISTRY;
4502
4521
  if (registry === "0x0000000000000000000000000000000000000000") {
4503
4522
  agentId = 0n;
@@ -5096,7 +5115,7 @@ vaultCmd.command("redeem").description("Redeem vault shares for the underlying a
5096
5115
  var strategy = program.command("strategy").description("Strategy templates \u2014 list, clone, propose");
5097
5116
  registerStrategyTemplateCommands(strategy);
5098
5117
  program.command("providers").description("List available DeFi providers").action(async () => {
5099
- const { MessariProvider, NansenProvider } = await import("./research-NCESMYXK.js");
5118
+ const { MessariProvider, NansenProvider } = await import("./research-662HNMOG.js");
5100
5119
  const providers = [new MoonwellProvider(), new UniswapProvider(), new MessariProvider(), new NansenProvider()];
5101
5120
  for (const p of providers) {
5102
5121
  const info = p.info();
@@ -5107,7 +5126,7 @@ ${info.name} (${info.type})`);
5107
5126
  }
5108
5127
  });
5109
5128
  try {
5110
- const { registerChatCommands } = await import("./chat-N6LSZUSC.js");
5129
+ const { registerChatCommands } = await import("./chat-ABL6Z5XZ.js");
5111
5130
  registerChatCommands(program);
5112
5131
  } catch {
5113
5132
  program.command("chat <name> [action] [actionArgs...]").description("Syndicate chat (XMTP) \u2014 requires @xmtp/cli").action(() => {
@@ -5117,18 +5136,18 @@ try {
5117
5136
  process.exit(1);
5118
5137
  });
5119
5138
  }
5120
- var { registerSessionCommands } = await import("./session-5JUUZYIL.js");
5139
+ var { registerSessionCommands } = await import("./session-64BCMJIB.js");
5121
5140
  registerSessionCommands(program);
5122
5141
  registerVeniceCommands(program);
5123
5142
  registerAllowanceCommands(program);
5124
5143
  registerIdentityCommands(program);
5125
5144
  registerProposalCommands(program);
5126
5145
  registerGovernorCommands(program);
5127
- var { registerResearchCommands } = await import("./research-H3I4LALI.js");
5146
+ var { registerResearchCommands } = await import("./research-W6QW2JJ3.js");
5128
5147
  registerResearchCommands(program);
5129
- var { registerAgentCommands } = await import("./agent-QIQABFLV.js");
5148
+ var { registerAgentCommands } = await import("./agent-NUYY5PF7.js");
5130
5149
  registerAgentCommands(program);
5131
- var { registerTradeCommands } = await import("./trade-XDE6YCNY.js");
5150
+ var { registerTradeCommands } = await import("./trade-7343J4LA.js");
5132
5151
  registerTradeCommands(program);
5133
5152
  var configCmd = program.command("config");
5134
5153
  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 SyndicateVault 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 syndicate (e.g. my-fund:abc123)").action((opts) => {