@sherwoodagent/cli 0.41.4 → 0.41.5

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 (52) hide show
  1. package/dist/{addresses-JBIU5U3T.js → addresses-RQ7DTIBS.js} +4 -4
  2. package/dist/{agent-LBF6OZRW.js → agent-SXEV65ME.js} +6 -6
  3. package/dist/{chat-3GE6474H.js → chat-D5OF4OTL.js} +8 -8
  4. package/dist/{chunk-IJG4CTOI.js → chunk-2YOXRATG.js} +2 -2
  5. package/dist/{chunk-WCBG44IQ.js → chunk-4EHI4SKM.js} +25 -1
  6. package/dist/chunk-4EHI4SKM.js.map +1 -0
  7. package/dist/{chunk-JJ4EF7ZE.js → chunk-4QNPS5LI.js} +5 -5
  8. package/dist/{chunk-DNX3P5YK.js → chunk-D2UYGUV2.js} +2 -2
  9. package/dist/{chunk-CECQNUS6.js → chunk-DG2K6CPY.js} +4 -4
  10. package/dist/{chunk-OFR3LCYE.js → chunk-M2NJPATE.js} +3 -3
  11. package/dist/{chunk-VMNB4ARO.js → chunk-MT3VS3GZ.js} +2 -2
  12. package/dist/{chunk-JGJAKTKK.js → chunk-XZHIZVJ3.js} +5 -5
  13. package/dist/{chunk-AGKCDHKI.js → chunk-YRCJ3NUX.js} +4 -4
  14. package/dist/{chunk-ARHM3CYN.js → chunk-YYB4TF6D.js} +4 -4
  15. package/dist/{client-HKAG55PQ.js → client-VSBQM2LU.js} +4 -4
  16. package/dist/{config-LS7FKZL5.js → config-YRERDZSL.js} +2 -2
  17. package/dist/{eas-27JA63VQ.js → eas-QNZKCEP7.js} +6 -6
  18. package/dist/{governor-YLZJIQOB.js → governor-RE6IJMUJ.js} +6 -6
  19. package/dist/index.js +26 -26
  20. package/dist/{network-KSMKPKNL.js → network-R5NFPIAF.js} +3 -3
  21. package/dist/{price-5RAPTAYW.js → price-GY3JQ2OK.js} +5 -5
  22. package/dist/research-PB22GPXC.js +14 -0
  23. package/dist/{research-HDEPP2SL.js → research-SVWNPHIN.js} +9 -9
  24. package/dist/{session-EST3O7W3.js → session-3Z6I2IM3.js} +10 -10
  25. package/dist/{trade-XTLUZJB6.js → trade-E5HSZE44.js} +16 -16
  26. package/dist/{xmtp-LPCRZRHX.js → xmtp-VPGQE4IP.js} +6 -6
  27. package/package.json +1 -1
  28. package/dist/chunk-WCBG44IQ.js.map +0 -1
  29. package/dist/research-4UA4UB5P.js +0 -14
  30. /package/dist/{addresses-JBIU5U3T.js.map → addresses-RQ7DTIBS.js.map} +0 -0
  31. /package/dist/{agent-LBF6OZRW.js.map → agent-SXEV65ME.js.map} +0 -0
  32. /package/dist/{chat-3GE6474H.js.map → chat-D5OF4OTL.js.map} +0 -0
  33. /package/dist/{chunk-IJG4CTOI.js.map → chunk-2YOXRATG.js.map} +0 -0
  34. /package/dist/{chunk-JJ4EF7ZE.js.map → chunk-4QNPS5LI.js.map} +0 -0
  35. /package/dist/{chunk-DNX3P5YK.js.map → chunk-D2UYGUV2.js.map} +0 -0
  36. /package/dist/{chunk-CECQNUS6.js.map → chunk-DG2K6CPY.js.map} +0 -0
  37. /package/dist/{chunk-OFR3LCYE.js.map → chunk-M2NJPATE.js.map} +0 -0
  38. /package/dist/{chunk-VMNB4ARO.js.map → chunk-MT3VS3GZ.js.map} +0 -0
  39. /package/dist/{chunk-JGJAKTKK.js.map → chunk-XZHIZVJ3.js.map} +0 -0
  40. /package/dist/{chunk-AGKCDHKI.js.map → chunk-YRCJ3NUX.js.map} +0 -0
  41. /package/dist/{chunk-ARHM3CYN.js.map → chunk-YYB4TF6D.js.map} +0 -0
  42. /package/dist/{client-HKAG55PQ.js.map → client-VSBQM2LU.js.map} +0 -0
  43. /package/dist/{config-LS7FKZL5.js.map → config-YRERDZSL.js.map} +0 -0
  44. /package/dist/{eas-27JA63VQ.js.map → eas-QNZKCEP7.js.map} +0 -0
  45. /package/dist/{governor-YLZJIQOB.js.map → governor-RE6IJMUJ.js.map} +0 -0
  46. /package/dist/{network-KSMKPKNL.js.map → network-R5NFPIAF.js.map} +0 -0
  47. /package/dist/{price-5RAPTAYW.js.map → price-GY3JQ2OK.js.map} +0 -0
  48. /package/dist/{research-4UA4UB5P.js.map → research-PB22GPXC.js.map} +0 -0
  49. /package/dist/{research-HDEPP2SL.js.map → research-SVWNPHIN.js.map} +0 -0
  50. /package/dist/{session-EST3O7W3.js.map → session-3Z6I2IM3.js.map} +0 -0
  51. /package/dist/{trade-XTLUZJB6.js.map → trade-E5HSZE44.js.map} +0 -0
  52. /package/dist/{xmtp-LPCRZRHX.js.map → xmtp-VPGQE4IP.js.map} +0 -0
@@ -13,9 +13,9 @@ import {
13
13
  TOKENS,
14
14
  UNISWAP,
15
15
  VENICE
16
- } from "./chunk-VMNB4ARO.js";
17
- import "./chunk-IJG4CTOI.js";
18
- import "./chunk-WCBG44IQ.js";
16
+ } from "./chunk-MT3VS3GZ.js";
17
+ import "./chunk-2YOXRATG.js";
18
+ import "./chunk-4EHI4SKM.js";
19
19
  export {
20
20
  AERODROME,
21
21
  AGENT_REGISTRY,
@@ -32,4 +32,4 @@ export {
32
32
  UNISWAP,
33
33
  VENICE
34
34
  };
35
- //# sourceMappingURL=addresses-JBIU5U3T.js.map
35
+ //# sourceMappingURL=addresses-RQ7DTIBS.js.map
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  getResearchProvider,
3
3
  isX402WalletFunded
4
- } from "./chunk-DNX3P5YK.js";
5
- import "./chunk-OFR3LCYE.js";
4
+ } from "./chunk-D2UYGUV2.js";
5
+ import "./chunk-M2NJPATE.js";
6
6
  import {
7
7
  hyperevm,
8
8
  hyperevmTestnet
9
- } from "./chunk-IJG4CTOI.js";
10
- import "./chunk-WCBG44IQ.js";
9
+ } from "./chunk-2YOXRATG.js";
10
+ import "./chunk-4EHI4SKM.js";
11
11
  import {
12
12
  BASE_STRATEGY_ABI
13
13
  } from "./chunk-D77JGXIV.js";
@@ -5099,7 +5099,7 @@ var PortfolioTracker = class {
5099
5099
  }
5100
5100
  try {
5101
5101
  const { createPublicClient, http: http2 } = await import("viem");
5102
- const { hyperevm: hyperevm2, hyperevmTestnet: hyperevmTestnet2 } = await import("./network-KSMKPKNL.js");
5102
+ const { hyperevm: hyperevm2, hyperevmTestnet: hyperevmTestnet2 } = await import("./network-R5NFPIAF.js");
5103
5103
  const { BASE_STRATEGY_ABI: BASE_STRATEGY_ABI2, SYNDICATE_VAULT_ABI } = await import("./abis-RGCO5GHC.js");
5104
5104
  const selectedChain = chain === "hyperevm-testnet" ? hyperevmTestnet2 : hyperevm2;
5105
5105
  const client = createPublicClient({
@@ -8644,4 +8644,4 @@ function formatFearGreed(value) {
8644
8644
  export {
8645
8645
  registerAgentCommands
8646
8646
  };
8647
- //# sourceMappingURL=agent-LBF6OZRW.js.map
8647
+ //# sourceMappingURL=agent-SXEV65ME.js.map
@@ -1,24 +1,24 @@
1
1
  import {
2
2
  getSyndicate,
3
3
  updateMetadata
4
- } from "./chunk-AGKCDHKI.js";
4
+ } from "./chunk-YRCJ3NUX.js";
5
5
  import {
6
6
  getTextRecord,
7
7
  resolveSyndicate,
8
8
  setTextRecord
9
- } from "./chunk-JJ4EF7ZE.js";
9
+ } from "./chunk-4QNPS5LI.js";
10
10
  import {
11
11
  ENS
12
- } from "./chunk-VMNB4ARO.js";
12
+ } from "./chunk-MT3VS3GZ.js";
13
13
  import {
14
14
  formatContractError,
15
15
  getAccount
16
- } from "./chunk-OFR3LCYE.js";
17
- import "./chunk-IJG4CTOI.js";
16
+ } from "./chunk-M2NJPATE.js";
17
+ import "./chunk-2YOXRATG.js";
18
18
  import {
19
19
  cacheGroupId,
20
20
  getCachedGroupId
21
- } from "./chunk-WCBG44IQ.js";
21
+ } from "./chunk-4EHI4SKM.js";
22
22
  import "./chunk-D77JGXIV.js";
23
23
  import {
24
24
  fetchMetadata,
@@ -29,7 +29,7 @@ import {
29
29
  import chalk from "chalk";
30
30
  import ora from "ora";
31
31
  async function loadXmtp() {
32
- return import("./xmtp-LPCRZRHX.js");
32
+ return import("./xmtp-VPGQE4IP.js");
33
33
  }
34
34
  function formatTimestamp(date) {
35
35
  return `${date.getHours().toString().padStart(2, "0")}:${date.getMinutes().toString().padStart(2, "0")}`;
@@ -428,4 +428,4 @@ function registerChatCommands(program) {
428
428
  export {
429
429
  registerChatCommands
430
430
  };
431
- //# sourceMappingURL=chat-3GE6474H.js.map
431
+ //# sourceMappingURL=chat-D5OF4OTL.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getConfigRpcUrl
3
- } from "./chunk-WCBG44IQ.js";
3
+ } from "./chunk-4EHI4SKM.js";
4
4
 
5
5
  // src/lib/network.ts
6
6
  import { defineChain } from "viem";
@@ -173,4 +173,4 @@ export {
173
173
  getExplorerUrl,
174
174
  isTestnet
175
175
  };
176
- //# sourceMappingURL=chunk-IJG4CTOI.js.map
176
+ //# sourceMappingURL=chunk-2YOXRATG.js.map
@@ -2,8 +2,10 @@
2
2
  import fs from "fs";
3
3
  import os from "os";
4
4
  import path from "path";
5
+ import { privateKeyToAccount } from "viem/accounts";
5
6
  var CONFIG_DIR = path.join(os.homedir(), ".sherwood");
6
7
  var CONFIG_PATH = path.join(CONFIG_DIR, "config.json");
8
+ var DASHBOARD_BRIDGE_PATH = path.join(CONFIG_DIR, "dashboard.json");
7
9
  function loadConfig() {
8
10
  if (fs.existsSync(CONFIG_PATH)) {
9
11
  const config = JSON.parse(fs.readFileSync(CONFIG_PATH, "utf-8"));
@@ -15,6 +17,28 @@ function loadConfig() {
15
17
  function saveConfig(config) {
16
18
  fs.mkdirSync(CONFIG_DIR, { recursive: true, mode: 448 });
17
19
  fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2), { mode: 384 });
20
+ writeDashboardBridge(config);
21
+ }
22
+ function writeDashboardBridge(config) {
23
+ try {
24
+ let agentWallet = null;
25
+ if (config.privateKey) {
26
+ const key = config.privateKey.startsWith("0x") ? config.privateKey : `0x${config.privateKey}`;
27
+ agentWallet = privateKeyToAccount(key).address;
28
+ }
29
+ const bridge = {
30
+ version: 1,
31
+ agentWallet,
32
+ syndicates: config.syndicates ?? {},
33
+ primarySyndicate: config.primarySyndicate ?? {}
34
+ };
35
+ fs.writeFileSync(
36
+ DASHBOARD_BRIDGE_PATH,
37
+ JSON.stringify(bridge, null, 2),
38
+ { mode: 384 }
39
+ );
40
+ } catch {
41
+ }
18
42
  }
19
43
  function cacheGroupId(subdomain, groupId) {
20
44
  const config = loadConfig();
@@ -190,4 +214,4 @@ export {
190
214
  cacheSwapRoute,
191
215
  clearSwapRoutes
192
216
  };
193
- //# sourceMappingURL=chunk-WCBG44IQ.js.map
217
+ //# sourceMappingURL=chunk-4EHI4SKM.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\";\nimport { privateKeyToAccount } from \"viem/accounts\";\n\nconst CONFIG_DIR = path.join(os.homedir(), \".sherwood\");\nconst CONFIG_PATH = path.join(CONFIG_DIR, \"config.json\");\nconst DASHBOARD_BRIDGE_PATH = path.join(CONFIG_DIR, \"dashboard.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 writeDashboardBridge(config);\n}\n\n/**\n * Public-safe derivation of config.json for Hermes dashboard plugins to read.\n * Excludes privateKey + every other sensitive field. Hermes' sherwood-companion\n * plugin reads ~/.sherwood/dashboard.json to auto-detect the operator's\n * primary syndicate without prompting.\n *\n * Wrapped in try/catch — bridge-write failure must not break a config save.\n */\nfunction writeDashboardBridge(config: SherwoodConfig): void {\n try {\n let agentWallet: string | null = null;\n if (config.privateKey) {\n const key = config.privateKey.startsWith(\"0x\")\n ? (config.privateKey as `0x${string}`)\n : (`0x${config.privateKey}` as `0x${string}`);\n agentWallet = privateKeyToAccount(key).address;\n }\n const bridge = {\n version: 1,\n agentWallet,\n syndicates: config.syndicates ?? {},\n primarySyndicate: config.primarySyndicate ?? {},\n };\n fs.writeFileSync(\n DASHBOARD_BRIDGE_PATH,\n JSON.stringify(bridge, null, 2),\n { mode: 0o600 },\n );\n } catch {\n // Non-fatal: plugin will fall back to manual subdomain entry.\n }\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":[]}
@@ -2,20 +2,20 @@ import {
2
2
  ENS,
3
3
  SHERWOOD,
4
4
  TOKENS
5
- } from "./chunk-VMNB4ARO.js";
5
+ } from "./chunk-MT3VS3GZ.js";
6
6
  import {
7
7
  getAccount,
8
8
  getPublicClient,
9
9
  getWalletClient,
10
10
  waitForReceipt,
11
11
  writeContractWithRetry
12
- } from "./chunk-OFR3LCYE.js";
12
+ } from "./chunk-M2NJPATE.js";
13
13
  import {
14
14
  getChain
15
- } from "./chunk-IJG4CTOI.js";
15
+ } from "./chunk-2YOXRATG.js";
16
16
  import {
17
17
  getChainContracts
18
- } from "./chunk-WCBG44IQ.js";
18
+ } from "./chunk-4EHI4SKM.js";
19
19
  import {
20
20
  ERC20_ABI,
21
21
  L2_REGISTRY_ABI,
@@ -524,4 +524,4 @@ export {
524
524
  setTextRecord,
525
525
  getTextRecord
526
526
  };
527
- //# sourceMappingURL=chunk-JJ4EF7ZE.js.map
527
+ //# sourceMappingURL=chunk-4QNPS5LI.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getAccount
3
- } from "./chunk-OFR3LCYE.js";
3
+ } from "./chunk-M2NJPATE.js";
4
4
 
5
5
  // src/providers/research/messari.ts
6
6
  import { base, baseSepolia } from "viem/chains";
@@ -580,4 +580,4 @@ export {
580
580
  NansenProvider,
581
581
  getResearchProvider
582
582
  };
583
- //# sourceMappingURL=chunk-DNX3P5YK.js.map
583
+ //# sourceMappingURL=chunk-D2UYGUV2.js.map
@@ -1,18 +1,18 @@
1
1
  import {
2
2
  EAS_CONTRACTS,
3
3
  EAS_SCHEMAS
4
- } from "./chunk-VMNB4ARO.js";
4
+ } from "./chunk-MT3VS3GZ.js";
5
5
  import {
6
6
  getAccount,
7
7
  getPublicClient,
8
8
  waitForReceipt,
9
9
  writeContractWithRetry
10
- } from "./chunk-OFR3LCYE.js";
10
+ } from "./chunk-M2NJPATE.js";
11
11
  import {
12
12
  getChain,
13
13
  getChainConfig,
14
14
  getNetwork
15
- } from "./chunk-IJG4CTOI.js";
15
+ } from "./chunk-2YOXRATG.js";
16
16
  import {
17
17
  EAS_ABI
18
18
  } from "./chunk-D77JGXIV.js";
@@ -411,4 +411,4 @@ export {
411
411
  queryApprovals,
412
412
  queryJoinRequests
413
413
  };
414
- //# sourceMappingURL=chunk-CECQNUS6.js.map
414
+ //# sourceMappingURL=chunk-DG2K6CPY.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  getChain,
3
3
  getRpcUrls
4
- } from "./chunk-IJG4CTOI.js";
4
+ } from "./chunk-2YOXRATG.js";
5
5
  import {
6
6
  loadConfig
7
- } from "./chunk-WCBG44IQ.js";
7
+ } from "./chunk-4EHI4SKM.js";
8
8
 
9
9
  // src/lib/client.ts
10
10
  import { createPublicClient, createWalletClient, fallback, http } from "viem";
@@ -489,4 +489,4 @@ export {
489
489
  writeContractWithRetry,
490
490
  waitForReceipt
491
491
  };
492
- //# sourceMappingURL=chunk-OFR3LCYE.js.map
492
+ //# sourceMappingURL=chunk-M2NJPATE.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getNetwork
3
- } from "./chunk-IJG4CTOI.js";
3
+ } from "./chunk-2YOXRATG.js";
4
4
 
5
5
  // src/lib/addresses.ts
6
6
  var ZERO = "0x0000000000000000000000000000000000000000";
@@ -467,4 +467,4 @@ export {
467
467
  SYNTHRA,
468
468
  CHAINLINK
469
469
  };
470
- //# sourceMappingURL=chunk-VMNB4ARO.js.map
470
+ //# sourceMappingURL=chunk-MT3VS3GZ.js.map
@@ -1,20 +1,20 @@
1
1
  import {
2
2
  UNISWAP
3
- } from "./chunk-VMNB4ARO.js";
3
+ } from "./chunk-MT3VS3GZ.js";
4
4
  import {
5
5
  getAccount,
6
6
  getPublicClient,
7
7
  sendTxWithRetry,
8
8
  waitForReceipt
9
- } from "./chunk-OFR3LCYE.js";
9
+ } from "./chunk-M2NJPATE.js";
10
10
  import {
11
11
  getChain
12
- } from "./chunk-IJG4CTOI.js";
12
+ } from "./chunk-2YOXRATG.js";
13
13
  import {
14
14
  getUniswapApiKey,
15
15
  getVeniceApiKey,
16
16
  setVeniceApiKey
17
- } from "./chunk-WCBG44IQ.js";
17
+ } from "./chunk-4EHI4SKM.js";
18
18
  import {
19
19
  UNISWAP_QUOTER_V2_ABI
20
20
  } from "./chunk-D77JGXIV.js";
@@ -443,4 +443,4 @@ export {
443
443
  encodeSwapPath,
444
444
  getMultiHopQuote
445
445
  };
446
- //# sourceMappingURL=chunk-JGJAKTKK.js.map
446
+ //# sourceMappingURL=chunk-XZHIZVJ3.js.map
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  SHERWOOD
3
- } from "./chunk-VMNB4ARO.js";
3
+ } from "./chunk-MT3VS3GZ.js";
4
4
  import {
5
5
  getAccount,
6
6
  getPublicClient,
7
7
  waitForReceipt,
8
8
  writeContractWithRetry
9
- } from "./chunk-OFR3LCYE.js";
9
+ } from "./chunk-M2NJPATE.js";
10
10
  import {
11
11
  getChain
12
- } from "./chunk-IJG4CTOI.js";
12
+ } from "./chunk-2YOXRATG.js";
13
13
  import {
14
14
  SYNDICATE_FACTORY_ABI
15
15
  } from "./chunk-D77JGXIV.js";
@@ -139,4 +139,4 @@ export {
139
139
  getActiveSyndicates,
140
140
  updateMetadata
141
141
  };
142
- //# sourceMappingURL=chunk-AGKCDHKI.js.map
142
+ //# sourceMappingURL=chunk-YRCJ3NUX.js.map
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  SHERWOOD
3
- } from "./chunk-VMNB4ARO.js";
3
+ } from "./chunk-MT3VS3GZ.js";
4
4
  import {
5
5
  getAccount,
6
6
  getPublicClient,
7
7
  waitForReceipt,
8
8
  writeContractWithRetry
9
- } from "./chunk-OFR3LCYE.js";
9
+ } from "./chunk-M2NJPATE.js";
10
10
  import {
11
11
  getChain
12
- } from "./chunk-IJG4CTOI.js";
12
+ } from "./chunk-2YOXRATG.js";
13
13
  import {
14
14
  SYNDICATE_GOVERNOR_ABI
15
15
  } from "./chunk-D77JGXIV.js";
@@ -429,4 +429,4 @@ export {
429
429
  vetoProposal,
430
430
  setProtocolFeeBps
431
431
  };
432
- //# sourceMappingURL=chunk-ARHM3CYN.js.map
432
+ //# sourceMappingURL=chunk-YYB4TF6D.js.map
@@ -10,9 +10,9 @@ import {
10
10
  unstickWallet,
11
11
  waitForReceipt,
12
12
  writeContractWithRetry
13
- } from "./chunk-OFR3LCYE.js";
14
- import "./chunk-IJG4CTOI.js";
15
- import "./chunk-WCBG44IQ.js";
13
+ } from "./chunk-M2NJPATE.js";
14
+ import "./chunk-2YOXRATG.js";
15
+ import "./chunk-4EHI4SKM.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-HKAG55PQ.js.map
29
+ //# sourceMappingURL=client-VSBQM2LU.js.map
@@ -25,7 +25,7 @@ import {
25
25
  setPrivateKey,
26
26
  setUniswapApiKey,
27
27
  setVeniceApiKey
28
- } from "./chunk-WCBG44IQ.js";
28
+ } from "./chunk-4EHI4SKM.js";
29
29
  export {
30
30
  addSyndicate,
31
31
  cacheGroupId,
@@ -54,4 +54,4 @@ export {
54
54
  setUniswapApiKey,
55
55
  setVeniceApiKey
56
56
  };
57
- //# sourceMappingURL=config-LS7FKZL5.js.map
57
+ //# sourceMappingURL=config-YRERDZSL.js.map
@@ -12,11 +12,11 @@ import {
12
12
  queryJoinRequests,
13
13
  revokeAttestation,
14
14
  stripReferrerPrefix
15
- } from "./chunk-CECQNUS6.js";
16
- import "./chunk-VMNB4ARO.js";
17
- import "./chunk-OFR3LCYE.js";
18
- import "./chunk-IJG4CTOI.js";
19
- import "./chunk-WCBG44IQ.js";
15
+ } from "./chunk-DG2K6CPY.js";
16
+ import "./chunk-MT3VS3GZ.js";
17
+ import "./chunk-M2NJPATE.js";
18
+ import "./chunk-2YOXRATG.js";
19
+ import "./chunk-4EHI4SKM.js";
20
20
  import "./chunk-D77JGXIV.js";
21
21
  export {
22
22
  createApproval,
@@ -33,4 +33,4 @@ export {
33
33
  revokeAttestation,
34
34
  stripReferrerPrefix
35
35
  };
36
- //# sourceMappingURL=eas-27JA63VQ.js.map
36
+ //# sourceMappingURL=eas-QNZKCEP7.js.map
@@ -34,11 +34,11 @@ import {
34
34
  settleProposal,
35
35
  vetoProposal,
36
36
  vote
37
- } from "./chunk-ARHM3CYN.js";
38
- import "./chunk-VMNB4ARO.js";
39
- import "./chunk-OFR3LCYE.js";
40
- import "./chunk-IJG4CTOI.js";
41
- import "./chunk-WCBG44IQ.js";
37
+ } from "./chunk-YYB4TF6D.js";
38
+ import "./chunk-MT3VS3GZ.js";
39
+ import "./chunk-M2NJPATE.js";
40
+ import "./chunk-2YOXRATG.js";
41
+ import "./chunk-4EHI4SKM.js";
42
42
  import "./chunk-D77JGXIV.js";
43
43
  export {
44
44
  PROPOSAL_STATE,
@@ -77,4 +77,4 @@ export {
77
77
  vetoProposal,
78
78
  vote
79
79
  };
80
- //# sourceMappingURL=governor-YLZJIQOB.js.map
80
+ //# sourceMappingURL=governor-RE6IJMUJ.js.map
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@ import {
9
9
  getQuote,
10
10
  listModels,
11
11
  provisionApiKey
12
- } from "./chunk-JGJAKTKK.js";
12
+ } from "./chunk-XZHIZVJ3.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-CECQNUS6.js";
22
+ } from "./chunk-DG2K6CPY.js";
23
23
  import {
24
24
  createSyndicate,
25
25
  getActiveSyndicates,
26
26
  getSyndicate,
27
27
  subdomainExists,
28
28
  updateMetadata
29
- } from "./chunk-AGKCDHKI.js";
29
+ } from "./chunk-YRCJ3NUX.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-JJ4EF7ZE.js";
52
+ } from "./chunk-4QNPS5LI.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-ARHM3CYN.js";
84
+ } from "./chunk-YYB4TF6D.js";
85
85
  import {
86
86
  AERODROME,
87
87
  AGENT_REGISTRY,
@@ -94,7 +94,7 @@ import {
94
94
  TOKENS,
95
95
  UNISWAP,
96
96
  VENICE
97
- } from "./chunk-VMNB4ARO.js";
97
+ } from "./chunk-MT3VS3GZ.js";
98
98
  import {
99
99
  formatContractError,
100
100
  getAccount,
@@ -103,7 +103,7 @@ import {
103
103
  sendTxWithRetry,
104
104
  waitForReceipt,
105
105
  writeContractWithRetry
106
- } from "./chunk-OFR3LCYE.js";
106
+ } from "./chunk-M2NJPATE.js";
107
107
  import {
108
108
  CHAIN_REGISTRY,
109
109
  VALID_NETWORKS,
@@ -113,7 +113,7 @@ import {
113
113
  getRpcUrl,
114
114
  isTestnet,
115
115
  setNetwork
116
- } from "./chunk-IJG4CTOI.js";
116
+ } from "./chunk-2YOXRATG.js";
117
117
  import {
118
118
  addSyndicate,
119
119
  cacheGroupId,
@@ -136,7 +136,7 @@ import {
136
136
  setPrivateKey,
137
137
  setUniswapApiKey,
138
138
  setVeniceApiKey
139
- } from "./chunk-WCBG44IQ.js";
139
+ } from "./chunk-4EHI4SKM.js";
140
140
  import {
141
141
  BASE_STRATEGY_ABI,
142
142
  ERC20_ABI,
@@ -1445,9 +1445,9 @@ function registerStrategyTemplateCommands(strategy2) {
1445
1445
  console.error(chalk.red("Missing --name, --performance-fee, or --duration. Use --write-calls to skip proposal submission."));
1446
1446
  process.exit(1);
1447
1447
  }
1448
- const { propose: propose2 } = await import("./governor-YLZJIQOB.js");
1448
+ const { propose: propose2 } = await import("./governor-RE6IJMUJ.js");
1449
1449
  const { pinJSON } = await import("./ipfs-IGXLLJCF.js");
1450
- const { parseDuration: parseDuration2 } = await import("./governor-YLZJIQOB.js");
1450
+ const { parseDuration: parseDuration2 } = await import("./governor-RE6IJMUJ.js");
1451
1451
  const performanceFeeBps = BigInt(opts.performanceFee);
1452
1452
  if (performanceFeeBps < 0n || performanceFeeBps > 10000n) {
1453
1453
  console.error(chalk.red("--performance-fee must be 0-10000 (basis points)"));
@@ -1554,7 +1554,7 @@ function registerStrategyTemplateCommands(strategy2) {
1554
1554
  let prices = [];
1555
1555
  let priceSource = null;
1556
1556
  try {
1557
- const { getTokenPricesInAsset } = await import("./price-5RAPTAYW.js");
1557
+ const { getTokenPricesInAsset } = await import("./price-GY3JQ2OK.js");
1558
1558
  prices = await getTokenPricesInAsset({
1559
1559
  tokens: allocations.map((a, i) => ({
1560
1560
  token: a.token,
@@ -1984,7 +1984,7 @@ function registerVeniceCommands(program2) {
1984
1984
  console.log(chalk2.dim(` Key: ${apiKey.slice(0, 8)}...${apiKey.slice(-4)}`));
1985
1985
  console.log(chalk2.dim(" Saved to ~/.sherwood/config.json"));
1986
1986
  try {
1987
- const { createVeniceProvisionAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-27JA63VQ.js");
1987
+ const { createVeniceProvisionAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-QNZKCEP7.js");
1988
1988
  const { uid } = await createVeniceProvisionAttestation(account.address);
1989
1989
  if (uid !== "0x0000000000000000000000000000000000000000000000000000000000000000") {
1990
1990
  console.log(chalk2.dim(` Attested: ${getEasScanUrl2(uid)}`));
@@ -2340,10 +2340,10 @@ ${opts.prompt}`;
2340
2340
  console.log(chalk2.dim(`Model: ${result.model} | Tokens: ${result.usage.promptTokens} in, ${result.usage.completionTokens} out, ${result.usage.totalTokens} total`));
2341
2341
  }
2342
2342
  try {
2343
- const { createVeniceInferenceAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-27JA63VQ.js");
2343
+ const { createVeniceInferenceAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-QNZKCEP7.js");
2344
2344
  const { keccak256, toHex, isAddress: isAddr } = await import("viem");
2345
- const { getChainContracts: getChainContracts2 } = await import("./config-LS7FKZL5.js");
2346
- const { getChain: getActiveChain } = await import("./network-KSMKPKNL.js");
2345
+ const { getChainContracts: getChainContracts2 } = await import("./config-YRERDZSL.js");
2346
+ const { getChain: getActiveChain } = await import("./network-R5NFPIAF.js");
2347
2347
  const vaultRecipient = opts.vault && isAddr(opts.vault) ? opts.vault : getChainContracts2(getActiveChain().id).vault;
2348
2348
  const promptHash = keccak256(toHex(userContent)).slice(0, 18);
2349
2349
  const { uid } = await createVeniceInferenceAttestation(
@@ -3472,8 +3472,8 @@ function printSimulationResult(result, callType) {
3472
3472
  }
3473
3473
  async function sendSimulationAlert(subdomain, proposalId, vault, execResult, settleResult) {
3474
3474
  try {
3475
- const xmtp = await import("./xmtp-LPCRZRHX.js");
3476
- const { getAccount: getAccount2 } = await import("./client-HKAG55PQ.js");
3475
+ const xmtp = await import("./xmtp-VPGQE4IP.js");
3476
+ const { getAccount: getAccount2 } = await import("./client-VSBQM2LU.js");
3477
3477
  const group = await xmtp.getGroup("", subdomain);
3478
3478
  const allRisks = [...execResult.risks, ...settleResult?.risks ?? []];
3479
3479
  const criticals = allRisks.filter((r) => r.level === "critical");
@@ -4572,7 +4572,7 @@ try {
4572
4572
  var require2 = createRequire(import.meta.url);
4573
4573
  var { version: CLI_VERSION } = require2("../package.json");
4574
4574
  async function loadXmtp() {
4575
- return import("./xmtp-LPCRZRHX.js");
4575
+ return import("./xmtp-VPGQE4IP.js");
4576
4576
  }
4577
4577
  async function loadCron() {
4578
4578
  return import("./cron-EOULYO3R.js");
@@ -5040,7 +5040,7 @@ syndicate.command("add").description("Register an agent on a syndicate vault (cr
5040
5040
  if (opts.agentId) {
5041
5041
  agentId = BigInt(opts.agentId);
5042
5042
  } else {
5043
- const { AGENT_REGISTRY: AGENT_REGISTRY2 } = await import("./addresses-JBIU5U3T.js");
5043
+ const { AGENT_REGISTRY: AGENT_REGISTRY2 } = await import("./addresses-RQ7DTIBS.js");
5044
5044
  const registry2 = AGENT_REGISTRY2().IDENTITY_REGISTRY;
5045
5045
  if (registry2 === "0x0000000000000000000000000000000000000000") {
5046
5046
  agentId = 0n;
@@ -5639,7 +5639,7 @@ vaultCmd.command("redeem").description("Redeem vault shares for the underlying a
5639
5639
  var strategy = program.command("strategy").description("Strategy templates \u2014 list, clone, propose");
5640
5640
  registerStrategyTemplateCommands(strategy);
5641
5641
  program.command("providers").description("List available DeFi providers").action(async () => {
5642
- const { MessariProvider, NansenProvider } = await import("./research-4UA4UB5P.js");
5642
+ const { MessariProvider, NansenProvider } = await import("./research-PB22GPXC.js");
5643
5643
  const providers = [new MoonwellProvider(), new UniswapProvider(), new MessariProvider(), new NansenProvider()];
5644
5644
  for (const p of providers) {
5645
5645
  const info = p.info();
@@ -5650,7 +5650,7 @@ ${info.name} (${info.type})`);
5650
5650
  }
5651
5651
  });
5652
5652
  try {
5653
- const { registerChatCommands } = await import("./chat-3GE6474H.js");
5653
+ const { registerChatCommands } = await import("./chat-D5OF4OTL.js");
5654
5654
  registerChatCommands(program);
5655
5655
  } catch {
5656
5656
  program.command("chat <name> [action] [actionArgs...]").description("Syndicate chat (XMTP) \u2014 requires @xmtp/cli").action(() => {
@@ -5660,7 +5660,7 @@ try {
5660
5660
  process.exit(1);
5661
5661
  });
5662
5662
  }
5663
- var { registerSessionCommands } = await import("./session-EST3O7W3.js");
5663
+ var { registerSessionCommands } = await import("./session-3Z6I2IM3.js");
5664
5664
  registerSessionCommands(program);
5665
5665
  registerVeniceCommands(program);
5666
5666
  registerAllowanceCommands(program);
@@ -5668,11 +5668,11 @@ registerIdentityCommands(program);
5668
5668
  registerProposalCommands(program);
5669
5669
  registerGovernorCommands(program);
5670
5670
  registerGuardianCommands(program);
5671
- var { registerResearchCommands } = await import("./research-HDEPP2SL.js");
5671
+ var { registerResearchCommands } = await import("./research-SVWNPHIN.js");
5672
5672
  registerResearchCommands(program);
5673
- var { registerAgentCommands } = await import("./agent-LBF6OZRW.js");
5673
+ var { registerAgentCommands } = await import("./agent-SXEV65ME.js");
5674
5674
  registerAgentCommands(program);
5675
- var { registerTradeCommands } = await import("./trade-XTLUZJB6.js");
5675
+ var { registerTradeCommands } = await import("./trade-E5HSZE44.js");
5676
5676
  registerTradeCommands(program);
5677
5677
  var configCmd = program.command("config");
5678
5678
  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) => {
@@ -12,8 +12,8 @@ import {
12
12
  isTestnet,
13
13
  robinhoodTestnet,
14
14
  setNetwork
15
- } from "./chunk-IJG4CTOI.js";
16
- import "./chunk-WCBG44IQ.js";
15
+ } from "./chunk-2YOXRATG.js";
16
+ import "./chunk-4EHI4SKM.js";
17
17
  export {
18
18
  CHAIN_REGISTRY,
19
19
  VALID_NETWORKS,
@@ -29,4 +29,4 @@ export {
29
29
  robinhoodTestnet,
30
30
  setNetwork
31
31
  };
32
- //# sourceMappingURL=network-KSMKPKNL.js.map
32
+ //# sourceMappingURL=network-R5NFPIAF.js.map
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  SYNTHRA,
3
3
  UNISWAP
4
- } from "./chunk-VMNB4ARO.js";
4
+ } from "./chunk-MT3VS3GZ.js";
5
5
  import {
6
6
  getPublicClient
7
- } from "./chunk-OFR3LCYE.js";
7
+ } from "./chunk-M2NJPATE.js";
8
8
  import {
9
9
  getNetwork
10
- } from "./chunk-IJG4CTOI.js";
11
- import "./chunk-WCBG44IQ.js";
10
+ } from "./chunk-2YOXRATG.js";
11
+ import "./chunk-4EHI4SKM.js";
12
12
  import {
13
13
  UNISWAP_QUOTER_V2_ABI
14
14
  } from "./chunk-D77JGXIV.js";
@@ -155,4 +155,4 @@ export {
155
155
  getTokenPriceInAsset,
156
156
  getTokenPricesInAsset
157
157
  };
158
- //# sourceMappingURL=price-5RAPTAYW.js.map
158
+ //# sourceMappingURL=price-GY3JQ2OK.js.map
@@ -0,0 +1,14 @@
1
+ import {
2
+ MessariProvider,
3
+ NansenProvider,
4
+ getResearchProvider
5
+ } from "./chunk-D2UYGUV2.js";
6
+ import "./chunk-M2NJPATE.js";
7
+ import "./chunk-2YOXRATG.js";
8
+ import "./chunk-4EHI4SKM.js";
9
+ export {
10
+ MessariProvider,
11
+ NansenProvider,
12
+ getResearchProvider
13
+ };
14
+ //# sourceMappingURL=research-PB22GPXC.js.map
@@ -2,13 +2,13 @@ import {
2
2
  MESSARI_COST_ESTIMATE,
3
3
  NANSEN_COST_ESTIMATE,
4
4
  getResearchProvider
5
- } from "./chunk-DNX3P5YK.js";
5
+ } from "./chunk-D2UYGUV2.js";
6
6
  import {
7
7
  formatContractError,
8
8
  getAccount
9
- } from "./chunk-OFR3LCYE.js";
10
- import "./chunk-IJG4CTOI.js";
11
- import "./chunk-WCBG44IQ.js";
9
+ } from "./chunk-M2NJPATE.js";
10
+ import "./chunk-2YOXRATG.js";
11
+ import "./chunk-4EHI4SKM.js";
12
12
 
13
13
  // src/commands/research.ts
14
14
  import chalk from "chalk";
@@ -16,7 +16,7 @@ import ora from "ora";
16
16
  import { confirm } from "@inquirer/prompts";
17
17
  import { isAddress } from "viem";
18
18
  async function loadXmtp() {
19
- return import("./xmtp-LPCRZRHX.js");
19
+ return import("./xmtp-VPGQE4IP.js");
20
20
  }
21
21
  var COST_ESTIMATES = {
22
22
  messari: MESSARI_COST_ESTIMATE,
@@ -83,7 +83,7 @@ function formatValue(value) {
83
83
  }
84
84
  async function postResearch(syndicateName, result, prompt) {
85
85
  const { pinJSON } = await import("./ipfs-IGXLLJCF.js");
86
- const { createResearchAttestation, getEasScanUrl } = await import("./eas-27JA63VQ.js");
86
+ const { createResearchAttestation, getEasScanUrl } = await import("./eas-QNZKCEP7.js");
87
87
  const xmtp = await loadXmtp();
88
88
  const pinSpinner = ora("Pinning research result to IPFS...").start();
89
89
  let resultUri;
@@ -112,8 +112,8 @@ async function postResearch(syndicateName, result, prompt) {
112
112
  const easSpinner = ora("Creating EAS attestation...").start();
113
113
  let attestationUid;
114
114
  try {
115
- const { getChainContracts } = await import("./config-LS7FKZL5.js");
116
- const { getChain } = await import("./network-KSMKPKNL.js");
115
+ const { getChainContracts } = await import("./config-YRERDZSL.js");
116
+ const { getChain } = await import("./network-R5NFPIAF.js");
117
117
  const vaultRecipient = getChainContracts(getChain().id).vault;
118
118
  const { uid } = await createResearchAttestation(
119
119
  result.provider,
@@ -312,4 +312,4 @@ function registerResearchCommands(program) {
312
312
  export {
313
313
  registerResearchCommands
314
314
  };
315
- //# sourceMappingURL=research-HDEPP2SL.js.map
315
+ //# sourceMappingURL=research-SVWNPHIN.js.map
@@ -6,21 +6,21 @@ import {
6
6
  } from "./chunk-W2ZUPR3W.js";
7
7
  import {
8
8
  resolveSyndicate
9
- } from "./chunk-JJ4EF7ZE.js";
9
+ } from "./chunk-4QNPS5LI.js";
10
10
  import {
11
11
  PROPOSAL_STATES,
12
12
  getProposal
13
- } from "./chunk-ARHM3CYN.js";
13
+ } from "./chunk-YYB4TF6D.js";
14
14
  import {
15
15
  SHERWOOD
16
- } from "./chunk-VMNB4ARO.js";
16
+ } from "./chunk-MT3VS3GZ.js";
17
17
  import {
18
18
  getPublicClient
19
- } from "./chunk-OFR3LCYE.js";
20
- import "./chunk-IJG4CTOI.js";
19
+ } from "./chunk-M2NJPATE.js";
20
+ import "./chunk-2YOXRATG.js";
21
21
  import {
22
22
  loadConfig
23
- } from "./chunk-WCBG44IQ.js";
23
+ } from "./chunk-4EHI4SKM.js";
24
24
  import {
25
25
  SYNDICATE_VAULT_ABI
26
26
  } from "./chunk-D77JGXIV.js";
@@ -187,7 +187,7 @@ async function enrichProposalEvents(events, metadataCache) {
187
187
 
188
188
  // src/commands/session.ts
189
189
  async function loadXmtp() {
190
- return import("./xmtp-LPCRZRHX.js");
190
+ return import("./xmtp-VPGQE4IP.js");
191
191
  }
192
192
  async function resolveGovernor(vaultAddress) {
193
193
  const client = getPublicClient();
@@ -435,8 +435,8 @@ function registerSessionCommands(program) {
435
435
  );
436
436
  session.command("cron <name>").description("Manage participation crons (OpenClaw agents)").option("--remove", "Remove participation crons", false).option("--status", "Show cron status", false).action(async (name, opts) => {
437
437
  const { isOpenClaw, registerSyndicateCrons, unregisterSyndicateCrons, getSyndicateCronStatus } = await import("./cron-EOULYO3R.js");
438
- const { isTestnet } = await import("./network-KSMKPKNL.js");
439
- const { getNotifyTo } = await import("./config-LS7FKZL5.js");
438
+ const { isTestnet } = await import("./network-R5NFPIAF.js");
439
+ const { getNotifyTo } = await import("./config-YRERDZSL.js");
440
440
  if (!isOpenClaw()) {
441
441
  console.log(chalk.yellow("Not running on OpenClaw \u2014 cron commands unavailable"));
442
442
  console.log(chalk.dim(` Set up your own scheduler: sherwood session check ${name} --stream`));
@@ -477,4 +477,4 @@ function registerSessionCommands(program) {
477
477
  export {
478
478
  registerSessionCommands
479
479
  };
480
- //# sourceMappingURL=session-EST3O7W3.js.map
480
+ //# sourceMappingURL=session-3Z6I2IM3.js.map
@@ -1,26 +1,26 @@
1
1
  import {
2
2
  getResearchProvider
3
- } from "./chunk-DNX3P5YK.js";
3
+ } from "./chunk-D2UYGUV2.js";
4
4
  import {
5
5
  UniswapProvider,
6
6
  chatCompletion,
7
7
  getQuote
8
- } from "./chunk-JGJAKTKK.js";
8
+ } from "./chunk-XZHIZVJ3.js";
9
9
  import {
10
10
  TOKENS
11
- } from "./chunk-VMNB4ARO.js";
11
+ } from "./chunk-MT3VS3GZ.js";
12
12
  import {
13
13
  formatContractError,
14
14
  getAccount,
15
15
  getPublicClient
16
- } from "./chunk-OFR3LCYE.js";
16
+ } from "./chunk-M2NJPATE.js";
17
17
  import {
18
18
  getExplorerUrl
19
- } from "./chunk-IJG4CTOI.js";
19
+ } from "./chunk-2YOXRATG.js";
20
20
  import {
21
21
  loadConfig,
22
22
  saveConfig
23
- } from "./chunk-WCBG44IQ.js";
23
+ } from "./chunk-4EHI4SKM.js";
24
24
  import {
25
25
  ERC20_ABI
26
26
  } from "./chunk-D77JGXIV.js";
@@ -332,7 +332,7 @@ async function getCurrentPrice(tokenAddress, tokenDecimals, feeTier) {
332
332
  // src/commands/trade.ts
333
333
  var uniswap = new UniswapProvider();
334
334
  async function loadXmtp() {
335
- return import("./xmtp-LPCRZRHX.js");
335
+ return import("./xmtp-VPGQE4IP.js");
336
336
  }
337
337
  var ETH_ADDRESS = "0x0000000000000000000000000000000000000000";
338
338
  var KNOWN_MEMECOINS = {
@@ -516,7 +516,7 @@ function registerTradeCommands(program) {
516
516
  }
517
517
  const wrapSpinner = ora("Wrapping ETH \u2192 WETH...").start();
518
518
  try {
519
- const { writeContractWithRetry, waitForReceipt: waitForReceiptFn } = await import("./client-HKAG55PQ.js");
519
+ const { writeContractWithRetry, waitForReceipt: waitForReceiptFn } = await import("./client-VSBQM2LU.js");
520
520
  const wethAddr = TOKENS().WETH;
521
521
  const wrapHash = await writeContractWithRetry({
522
522
  address: wethAddr,
@@ -525,7 +525,7 @@ function registerTradeCommands(program) {
525
525
  args: [],
526
526
  value: inputAmount,
527
527
  account,
528
- chain: (await import("./network-KSMKPKNL.js")).getChain()
528
+ chain: (await import("./network-R5NFPIAF.js")).getChain()
529
529
  });
530
530
  await waitForReceiptFn(wrapHash);
531
531
  wrapSpinner.succeed(`Wrapped ${opts.amount} ETH \u2192 WETH`);
@@ -639,9 +639,9 @@ function registerTradeCommands(program) {
639
639
  }
640
640
  console.log(` Tx: ${chalk.dim(getExplorerUrl(txHash))}`);
641
641
  try {
642
- const { createTradeAttestation, getEasScanUrl } = await import("./eas-27JA63VQ.js");
643
- const { getChainContracts } = await import("./config-LS7FKZL5.js");
644
- const { getChain: getActiveChain } = await import("./network-KSMKPKNL.js");
642
+ const { createTradeAttestation, getEasScanUrl } = await import("./eas-QNZKCEP7.js");
643
+ const { getChainContracts } = await import("./config-YRERDZSL.js");
644
+ const { getChain: getActiveChain } = await import("./network-R5NFPIAF.js");
645
645
  const vaultRecipient = getChainContracts(getActiveChain().id).vault;
646
646
  const { uid } = await createTradeAttestation(
647
647
  inputAddr,
@@ -767,9 +767,9 @@ function registerTradeCommands(program) {
767
767
  }
768
768
  console.log(` Tx: ${chalk.dim(getExplorerUrl(txHash))}`);
769
769
  try {
770
- const { createTradeAttestation, getEasScanUrl } = await import("./eas-27JA63VQ.js");
771
- const { getChainContracts } = await import("./config-LS7FKZL5.js");
772
- const { getChain: getActiveChain } = await import("./network-KSMKPKNL.js");
770
+ const { createTradeAttestation, getEasScanUrl } = await import("./eas-QNZKCEP7.js");
771
+ const { getChainContracts } = await import("./config-YRERDZSL.js");
772
+ const { getChain: getActiveChain } = await import("./network-R5NFPIAF.js");
773
773
  const vaultRecipient = getChainContracts(getActiveChain().id).vault;
774
774
  const { uid } = await createTradeAttestation(
775
775
  tokenAddr,
@@ -944,4 +944,4 @@ function sleep(ms) {
944
944
  export {
945
945
  registerTradeCommands
946
946
  };
947
- //# sourceMappingURL=trade-XTLUZJB6.js.map
947
+ //# sourceMappingURL=trade-E5HSZE44.js.map
@@ -1,20 +1,20 @@
1
1
  import {
2
2
  getTextRecord
3
- } from "./chunk-JJ4EF7ZE.js";
4
- import "./chunk-VMNB4ARO.js";
3
+ } from "./chunk-4QNPS5LI.js";
4
+ import "./chunk-MT3VS3GZ.js";
5
5
  import {
6
6
  getAccount
7
- } from "./chunk-OFR3LCYE.js";
7
+ } from "./chunk-M2NJPATE.js";
8
8
  import {
9
9
  getChainConfig
10
- } from "./chunk-IJG4CTOI.js";
10
+ } from "./chunk-2YOXRATG.js";
11
11
  import {
12
12
  cacheGroupId,
13
13
  getCachedGroupId,
14
14
  invalidateCachedGroupId,
15
15
  loadConfig,
16
16
  saveConfig
17
- } from "./chunk-WCBG44IQ.js";
17
+ } from "./chunk-4EHI4SKM.js";
18
18
  import "./chunk-D77JGXIV.js";
19
19
 
20
20
  // src/lib/xmtp.ts
@@ -281,4 +281,4 @@ export {
281
281
  sendReaction,
282
282
  streamMessages
283
283
  };
284
- //# sourceMappingURL=xmtp-LPCRZRHX.js.map
284
+ //# sourceMappingURL=xmtp-VPGQE4IP.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sherwoodagent/cli",
3
- "version": "0.41.4",
3
+ "version": "0.41.5",
4
4
  "description": "CLI for agent-managed investment syndicates — onchain DeFi syndicates with XMTP chat",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1 +0,0 @@
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":[]}
@@ -1,14 +0,0 @@
1
- import {
2
- MessariProvider,
3
- NansenProvider,
4
- getResearchProvider
5
- } from "./chunk-DNX3P5YK.js";
6
- import "./chunk-OFR3LCYE.js";
7
- import "./chunk-IJG4CTOI.js";
8
- import "./chunk-WCBG44IQ.js";
9
- export {
10
- MessariProvider,
11
- NansenProvider,
12
- getResearchProvider
13
- };
14
- //# sourceMappingURL=research-4UA4UB5P.js.map