@sherwoodagent/cli 0.11.0 → 0.12.1

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.
@@ -2,8 +2,8 @@ import {
2
2
  getTextRecord,
3
3
  resolveSyndicate,
4
4
  setTextRecord
5
- } from "./chunk-6IUSJWAL.js";
6
- import "./chunk-IXMM3TT3.js";
5
+ } from "./chunk-SQID2KF4.js";
6
+ import "./chunk-X34TJQ4P.js";
7
7
  import {
8
8
  getAccount
9
9
  } from "./chunk-FWJBUK57.js";
@@ -17,7 +17,7 @@ import {
17
17
  import chalk from "chalk";
18
18
  import ora from "ora";
19
19
  async function loadXmtp() {
20
- return import("./xmtp-A5G2GEWF.js");
20
+ return import("./xmtp-ZGW4KGC4.js");
21
21
  }
22
22
  function formatTimestamp(date) {
23
23
  return `${date.getHours().toString().padStart(2, "0")}:${date.getMinutes().toString().padStart(2, "0")}`;
@@ -352,4 +352,4 @@ function registerChatCommands(program) {
352
352
  export {
353
353
  registerChatCommands
354
354
  };
355
- //# sourceMappingURL=chat-2X5FQI5X.js.map
355
+ //# sourceMappingURL=chat-3PQDDLVR.js.map
@@ -72,4 +72,4 @@ export {
72
72
  uploadMetadata,
73
73
  fetchMetadata
74
74
  };
75
- //# sourceMappingURL=chunk-DVWORPEY.js.map
75
+ //# sourceMappingURL=chunk-LEQLX7XF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/ipfs.ts"],"sourcesContent":["/**\n * IPFS metadata upload/fetch via Pinata.\n *\n * Used for syndicate metadata (name, description, strategies, terms).\n * Requires PINATA_API_KEY and PINATA_GATEWAY env vars.\n */\n\nexport interface SyndicateMetadata {\n schema: string;\n name: string;\n description: string;\n logo?: string;\n chain: string;\n strategies: {\n id: string;\n name: string;\n description: string;\n protocols: string[];\n riskLevel: string;\n }[];\n terms: {\n minDeposit?: string;\n minDepositFormatted?: string;\n feeModel?: string;\n lockPeriod?: number;\n };\n links: {\n moltbook?: string;\n dashboard?: string;\n github?: string;\n };\n}\n\n// Bundled Pinata credentials — used by all CLI users for syndicate metadata.\n// Override with PINATA_API_KEY / PINATA_GATEWAY env vars if needed.\nconst BUNDLED_PINATA_JWT =\n \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySW5mb3JtYXRpb24iOnsiaWQiOiI2NDQ0MGViOC1hYTYyLTQzY2EtOGYwNC04MDZjZmNjY2Y4YTUiLCJlbWFpbCI6ImltdGhhdGNhcmxvc0BnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwicGluX3BvbGljeSI6eyJyZWdpb25zIjpbeyJkZXNpcmVkUmVwbGljYXRpb25Db3VudCI6MSwiaWQiOiJGUkExIn1dLCJ2ZXJzaW9uIjoxfSwibWZhX2VuYWJsZWQiOmZhbHNlLCJzdGF0dXMiOiJBQ1RJVkUifSwiYXV0aGVudGljYXRpb25UeXBlIjoic2NvcGVkS2V5Iiwic2NvcGVkS2V5S2V5IjoiMWJhZWFmMzQwODM3MGQ0NGZkZWEiLCJzY29wZWRLZXlTZWNyZXQiOiIzNDcxMmU5MTkyYTgxNWFhMGRmNjUyYjYyMDQzODQ1MDJjMmU0YWE0MDhkZTJmOTU2NWYwOTk3YTNlY2U3NGU3IiwiZXhwIjoxODAxMjc2ODExfQ.7OMJiOATpqkSwe7Orrpt2b8H_-czH-W61vBm4AHtqfA\";\nconst BUNDLED_PINATA_GATEWAY = \"https://sherwood.mypinata.cloud\";\n\nfunction getPinataApiKey(): string {\n return process.env.PINATA_API_KEY || BUNDLED_PINATA_JWT;\n}\n\nfunction getPinataGateway(): string {\n return process.env.PINATA_GATEWAY || BUNDLED_PINATA_GATEWAY;\n}\n\n/**\n * Pin arbitrary JSON to IPFS via Pinata.\n * Used for research results and other generic JSON payloads.\n * Returns the IPFS URI (ipfs://Qm...).\n */\nexport async function pinJSON(content: Record<string, unknown>, name: string): Promise<string> {\n const apiKey = getPinataApiKey();\n\n const response = await fetch(\"https://api.pinata.cloud/pinning/pinJSONToIPFS\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${apiKey}`,\n },\n body: JSON.stringify({\n pinataContent: content,\n pinataMetadata: { name },\n }),\n });\n\n if (!response.ok) {\n const text = await response.text();\n throw new Error(`Pinata upload failed (${response.status}): ${text}`);\n }\n\n const result = (await response.json()) as { IpfsHash: string };\n return `ipfs://${result.IpfsHash}`;\n}\n\n/**\n * Upload syndicate metadata to IPFS via Pinata.\n * Returns the IPFS URI (ipfs://Qm...).\n */\nexport async function uploadMetadata(metadata: SyndicateMetadata): Promise<string> {\n const apiKey = getPinataApiKey();\n\n const response = await fetch(\"https://api.pinata.cloud/pinning/pinJSONToIPFS\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${apiKey}`,\n },\n body: JSON.stringify({\n pinataContent: metadata,\n pinataMetadata: {\n name: `sherwood-syndicate-${metadata.name.toLowerCase().replace(/\\s+/g, \"-\")}`,\n },\n }),\n });\n\n if (!response.ok) {\n const text = await response.text();\n throw new Error(`Pinata upload failed (${response.status}): ${text}`);\n }\n\n const result = (await response.json()) as { IpfsHash: string };\n return `ipfs://${result.IpfsHash}`;\n}\n\n/**\n * Fetch and parse metadata from an IPFS URI.\n * Supports ipfs:// protocol URIs and raw CIDs.\n */\nexport async function fetchMetadata(ipfsURI: string): Promise<SyndicateMetadata> {\n const gateway = getPinataGateway();\n let cid: string;\n\n if (ipfsURI.startsWith(\"ipfs://\")) {\n cid = ipfsURI.slice(7);\n } else if (ipfsURI.startsWith(\"Qm\") || ipfsURI.startsWith(\"bafy\")) {\n cid = ipfsURI;\n } else {\n throw new Error(`Invalid IPFS URI: ${ipfsURI}`);\n }\n\n const url = `${gateway}/ipfs/${cid}`;\n const response = await fetch(url);\n\n if (!response.ok) {\n throw new Error(`Failed to fetch metadata from ${url} (${response.status})`);\n }\n\n return (await response.json()) as SyndicateMetadata;\n}\n"],"mappings":";AAmCA,IAAM,qBACJ;AACF,IAAM,yBAAyB;AAE/B,SAAS,kBAA0B;AACjC,SAAO,QAAQ,IAAI,kBAAkB;AACvC;AAEA,SAAS,mBAA2B;AAClC,SAAO,QAAQ,IAAI,kBAAkB;AACvC;AAOA,eAAsB,QAAQ,SAAkC,MAA+B;AAC7F,QAAM,SAAS,gBAAgB;AAE/B,QAAM,WAAW,MAAM,MAAM,kDAAkD;AAAA,IAC7E,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,gBAAgB;AAAA,MAChB,eAAe,UAAU,MAAM;AAAA,IACjC;AAAA,IACA,MAAM,KAAK,UAAU;AAAA,MACnB,eAAe;AAAA,MACf,gBAAgB,EAAE,KAAK;AAAA,IACzB,CAAC;AAAA,EACH,CAAC;AAED,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,UAAM,IAAI,MAAM,yBAAyB,SAAS,MAAM,MAAM,IAAI,EAAE;AAAA,EACtE;AAEA,QAAM,SAAU,MAAM,SAAS,KAAK;AACpC,SAAO,UAAU,OAAO,QAAQ;AAClC;AAMA,eAAsB,eAAe,UAA8C;AACjF,QAAM,SAAS,gBAAgB;AAE/B,QAAM,WAAW,MAAM,MAAM,kDAAkD;AAAA,IAC7E,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,gBAAgB;AAAA,MAChB,eAAe,UAAU,MAAM;AAAA,IACjC;AAAA,IACA,MAAM,KAAK,UAAU;AAAA,MACnB,eAAe;AAAA,MACf,gBAAgB;AAAA,QACd,MAAM,sBAAsB,SAAS,KAAK,YAAY,EAAE,QAAQ,QAAQ,GAAG,CAAC;AAAA,MAC9E;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,UAAM,IAAI,MAAM,yBAAyB,SAAS,MAAM,MAAM,IAAI,EAAE;AAAA,EACtE;AAEA,QAAM,SAAU,MAAM,SAAS,KAAK;AACpC,SAAO,UAAU,OAAO,QAAQ;AAClC;AAMA,eAAsB,cAAc,SAA6C;AAC/E,QAAM,UAAU,iBAAiB;AACjC,MAAI;AAEJ,MAAI,QAAQ,WAAW,SAAS,GAAG;AACjC,UAAM,QAAQ,MAAM,CAAC;AAAA,EACvB,WAAW,QAAQ,WAAW,IAAI,KAAK,QAAQ,WAAW,MAAM,GAAG;AACjE,UAAM;AAAA,EACR,OAAO;AACL,UAAM,IAAI,MAAM,qBAAqB,OAAO,EAAE;AAAA,EAChD;AAEA,QAAM,MAAM,GAAG,OAAO,SAAS,GAAG;AAClC,QAAM,WAAW,MAAM,MAAM,GAAG;AAEhC,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,iCAAiC,GAAG,KAAK,SAAS,MAAM,GAAG;AAAA,EAC7E;AAEA,SAAQ,MAAM,SAAS,KAAK;AAC9B;","names":[]}
@@ -5,7 +5,7 @@ import {
5
5
  SHERWOOD,
6
6
  SYNDICATE_FACTORY_ABI,
7
7
  SYNDICATE_VAULT_ABI
8
- } from "./chunk-IXMM3TT3.js";
8
+ } from "./chunk-X34TJQ4P.js";
9
9
  import {
10
10
  getAccount,
11
11
  getPublicClient,
@@ -19,7 +19,7 @@ import {
19
19
  } from "./chunk-IIDZ2TK5.js";
20
20
 
21
21
  // src/lib/vault.ts
22
- import { formatUnits, encodeFunctionData, decodeFunctionResult } from "viem";
22
+ import { formatUnits } from "viem";
23
23
  var _vaultOverride = null;
24
24
  function setVaultAddress(addr) {
25
25
  _vaultOverride = addr;
@@ -74,18 +74,6 @@ async function deposit(amount) {
74
74
  args: [amount, account.address]
75
75
  });
76
76
  }
77
- async function ragequit() {
78
- const wallet = getWalletClient();
79
- const account = getAccount();
80
- return wallet.writeContract({
81
- account: getAccount(),
82
- chain: getChain(),
83
- address: getVaultAddress(),
84
- abi: SYNDICATE_VAULT_ABI,
85
- functionName: "ragequit",
86
- args: [account.address]
87
- });
88
- }
89
77
  async function executeBatch(calls) {
90
78
  const wallet = getWalletClient();
91
79
  return wallet.writeContract({
@@ -103,37 +91,6 @@ async function executeBatch(calls) {
103
91
  ]
104
92
  });
105
93
  }
106
- async function simulateBatch(calls) {
107
- const client = getPublicClient();
108
- const vaultAddress = getVaultAddress();
109
- const calldata = encodeFunctionData({
110
- abi: SYNDICATE_VAULT_ABI,
111
- functionName: "simulateBatch",
112
- args: [
113
- calls.map((c) => ({
114
- target: c.target,
115
- data: c.data,
116
- value: c.value
117
- }))
118
- ]
119
- });
120
- const { data } = await client.call({
121
- to: vaultAddress,
122
- data: calldata
123
- });
124
- if (!data) {
125
- throw new Error("simulateBatch returned no data");
126
- }
127
- const decoded = decodeFunctionResult({
128
- abi: SYNDICATE_VAULT_ABI,
129
- functionName: "simulateBatch",
130
- data
131
- });
132
- return decoded.map((r) => ({
133
- success: r.success,
134
- returnData: r.returnData
135
- }));
136
- }
137
94
  async function approveDepositor(depositor) {
138
95
  const wallet = getWalletClient();
139
96
  return wallet.writeContract({
@@ -249,7 +206,7 @@ async function getVaultInfo() {
249
206
  }
250
207
 
251
208
  // src/lib/ens.ts
252
- import { encodeFunctionData as encodeFunctionData2 } from "viem";
209
+ import { encodeFunctionData } from "viem";
253
210
  import { namehash } from "viem/ens";
254
211
  var ENS_DOMAIN = "sherwoodagent.eth";
255
212
  function getFactoryAddress() {
@@ -312,7 +269,7 @@ async function setTextRecord(subdomain, key, value, vaultAddress) {
312
269
  const l2Registry = ENS().L2_REGISTRY;
313
270
  const node = getSubdomainNode(subdomain);
314
271
  setVaultAddress(vaultAddress);
315
- const setTextData = encodeFunctionData2({
272
+ const setTextData = encodeFunctionData({
316
273
  abi: L2_REGISTRY_ABI,
317
274
  functionName: "setText",
318
275
  args: [node, key, value]
@@ -337,9 +294,7 @@ export {
337
294
  getVaultAddress,
338
295
  getAssetDecimals,
339
296
  deposit,
340
- ragequit,
341
297
  executeBatch,
342
- simulateBatch,
343
298
  approveDepositor,
344
299
  removeDepositor,
345
300
  isAgent,
@@ -351,4 +306,4 @@ export {
351
306
  setTextRecord,
352
307
  getTextRecord
353
308
  };
354
- //# sourceMappingURL=chunk-6IUSJWAL.js.map
309
+ //# sourceMappingURL=chunk-SQID2KF4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/vault.ts","../src/lib/ens.ts"],"sourcesContent":["/**\n * SyndicateVault contract wrapper.\n *\n * The vault is the onchain identity — it holds all positions via delegatecall\n * to a shared BatchExecutorLib. No separate executor contract needed.\n */\n\nimport type { Address, Hex } from \"viem\";\nimport { formatUnits } from \"viem\";\nimport { getChain } from \"./network.js\";\nimport { getPublicClient, getWalletClient, getAccount } from \"./client.js\";\nimport { SYNDICATE_VAULT_ABI, ERC20_ABI } from \"./abis.js\";\nimport type { BatchCall } from \"./batch.js\";\nimport { getChainContracts } from \"./config.js\";\n\n// Per-command override (set by --vault flag in index.ts)\nlet _vaultOverride: Address | null = null;\n\nexport function setVaultAddress(addr: Address): void {\n _vaultOverride = addr;\n}\n\nexport function getVaultAddress(): Address {\n // 1. Per-command override (--vault flag)\n if (_vaultOverride) return _vaultOverride;\n\n // 2. Config (~/.sherwood/config.json) — default vault\n const chainId = getChain().id;\n const fromConfig = getChainContracts(chainId).vault;\n if (fromConfig) return fromConfig as Address;\n\n throw new Error(\n \"Vault address not found. Pass --vault <addr> or run 'sherwood config set --vault <addr>'.\",\n );\n}\n\n// ── Asset Helpers ──\n\n/**\n * Read the vault's underlying ERC-20 asset address.\n */\nexport async function getAssetAddress(): Promise<Address> {\n const client = getPublicClient();\n return client.readContract({\n address: getVaultAddress(),\n abi: SYNDICATE_VAULT_ABI,\n functionName: \"asset\",\n }) as Promise<Address>;\n}\n\n/**\n * Read decimals from the vault's underlying asset.\n * Works with any ERC-20 (USDC=6, WETH=18, WBTC=8, etc.).\n */\nexport async function getAssetDecimals(): Promise<number> {\n const client = getPublicClient();\n const asset = await getAssetAddress();\n return client.readContract({\n address: asset,\n abi: ERC20_ABI,\n functionName: \"decimals\",\n }) as Promise<number>;\n}\n\n// ── LP Functions ──\n\n/**\n * Deposit into the vault. Handles approval + deposit for the vault's asset.\n */\nexport async function deposit(amount: bigint): Promise<Hex> {\n const wallet = getWalletClient();\n const client = getPublicClient();\n const vaultAddress = getVaultAddress();\n const account = getAccount();\n\n // Approve vault to pull the underlying asset\n const asset = await getAssetAddress();\n const approveHash = await wallet.writeContract({\n account: getAccount(),\n chain: getChain(),\n address: asset,\n abi: ERC20_ABI,\n functionName: \"approve\",\n args: [vaultAddress, amount],\n });\n await client.waitForTransactionReceipt({ hash: approveHash });\n\n // Deposit\n return wallet.writeContract({\n account: getAccount(),\n chain: getChain(),\n address: vaultAddress,\n abi: SYNDICATE_VAULT_ABI,\n functionName: \"deposit\",\n args: [amount, account.address],\n });\n}\n\n// ── Batch Execution ──\n\n/**\n * Execute a batch of protocol calls through the vault (owner only).\n * The vault delegatecalls to the executor lib.\n * All calls execute as the vault — positions live on the vault.\n */\nexport async function executeBatch(calls: BatchCall[]): Promise<Hex> {\n const wallet = getWalletClient();\n\n return wallet.writeContract({\n account: getAccount(),\n chain: getChain(),\n address: getVaultAddress(),\n abi: SYNDICATE_VAULT_ABI,\n functionName: \"executeBatch\",\n args: [\n calls.map((c) => ({\n target: c.target,\n data: c.data,\n value: c.value,\n })),\n ],\n });\n}\n\n// ── Depositor Management ──\n\n/**\n * Approve a depositor address (owner only).\n */\nexport async function approveDepositor(depositor: Address): Promise<Hex> {\n const wallet = getWalletClient();\n return wallet.writeContract({\n account: getAccount(),\n chain: getChain(),\n address: getVaultAddress(),\n abi: SYNDICATE_VAULT_ABI,\n functionName: \"approveDepositor\",\n args: [depositor],\n });\n}\n\n/**\n * Remove a depositor from the whitelist (owner only).\n */\nexport async function removeDepositor(depositor: Address): Promise<Hex> {\n const wallet = getWalletClient();\n return wallet.writeContract({\n account: getAccount(),\n chain: getChain(),\n address: getVaultAddress(),\n abi: SYNDICATE_VAULT_ABI,\n functionName: \"removeDepositor\",\n args: [depositor],\n });\n}\n\n/**\n * Approve multiple depositors in a batch (owner only).\n */\nexport async function approveDepositors(depositors: Address[]): Promise<Hex> {\n const wallet = getWalletClient();\n return wallet.writeContract({\n account: getAccount(),\n chain: getChain(),\n address: getVaultAddress(),\n abi: SYNDICATE_VAULT_ABI,\n functionName: \"approveDepositors\",\n args: [depositors],\n });\n}\n\n/**\n * Check if an address is a registered agent on the vault.\n */\nexport async function isAgent(agentAddress: Address): Promise<boolean> {\n const client = getPublicClient();\n return client.readContract({\n address: getVaultAddress(),\n abi: SYNDICATE_VAULT_ABI,\n functionName: \"isAgent\",\n args: [agentAddress],\n }) as Promise<boolean>;\n}\n\n/**\n * Check if an address is an approved depositor.\n */\nexport async function isApprovedDepositor(depositor: Address): Promise<boolean> {\n const client = getPublicClient();\n return client.readContract({\n address: getVaultAddress(),\n abi: SYNDICATE_VAULT_ABI,\n functionName: \"isApprovedDepositor\",\n args: [depositor],\n }) as Promise<boolean>;\n}\n\n/**\n * Get LP share balance and asset value.\n */\nexport async function getBalance(address?: Address): Promise<{\n shares: bigint;\n assetsValue: string;\n percentOfVault: string;\n}> {\n const client = getPublicClient();\n const vaultAddress = getVaultAddress();\n const account = address || getAccount().address;\n\n const [shares, totalSupply] = await Promise.all([\n client.readContract({\n address: vaultAddress,\n abi: SYNDICATE_VAULT_ABI,\n functionName: \"balanceOf\",\n args: [account],\n }) as Promise<bigint>,\n client.readContract({\n address: vaultAddress,\n abi: SYNDICATE_VAULT_ABI,\n functionName: \"totalSupply\",\n }) as Promise<bigint>,\n ]);\n\n let assetsValue = 0n;\n if (shares > 0n) {\n assetsValue = (await client.readContract({\n address: vaultAddress,\n abi: SYNDICATE_VAULT_ABI,\n functionName: \"convertToAssets\",\n args: [shares],\n })) as bigint;\n }\n\n const percent =\n totalSupply > 0n ? ((Number(shares) / Number(totalSupply)) * 100).toFixed(2) : \"0.00\";\n\n const decimals = await getAssetDecimals();\n\n return {\n shares,\n assetsValue: formatUnits(assetsValue, decimals),\n percentOfVault: `${percent}%`,\n };\n}\n\n// ── Agent Management ──\n\n/**\n * Register a new agent (owner only). Requires ERC-8004 agent identity.\n */\nexport async function registerAgent(\n agentId: bigint,\n agentAddress: Address,\n): Promise<Hex> {\n const wallet = getWalletClient();\n const client = getPublicClient();\n\n const hash = await wallet.writeContract({\n account: getAccount(),\n chain: getChain(),\n address: getVaultAddress(),\n abi: SYNDICATE_VAULT_ABI,\n functionName: \"registerAgent\",\n args: [agentId, agentAddress],\n });\n\n await client.waitForTransactionReceipt({ hash });\n return hash;\n}\n\n// ── Views ──\n\nexport interface VaultInfo {\n address: Address;\n totalAssets: string;\n agentCount: bigint;\n redemptionsLocked: boolean;\n managementFeeBps: bigint;\n}\n\n/**\n * Get vault overview info.\n */\nexport async function getVaultInfo(): Promise<VaultInfo> {\n const client = getPublicClient();\n const vaultAddress = getVaultAddress();\n\n const [totalAssets, agentCount, redemptionsLocked, managementFeeBps, decimals] =\n await Promise.all([\n client.readContract({\n address: vaultAddress,\n abi: SYNDICATE_VAULT_ABI,\n functionName: \"totalAssets\",\n }) as Promise<bigint>,\n client.readContract({\n address: vaultAddress,\n abi: SYNDICATE_VAULT_ABI,\n functionName: \"getAgentCount\",\n }) as Promise<bigint>,\n client.readContract({\n address: vaultAddress,\n abi: SYNDICATE_VAULT_ABI,\n functionName: \"redemptionsLocked\",\n }) as Promise<boolean>,\n client.readContract({\n address: vaultAddress,\n abi: SYNDICATE_VAULT_ABI,\n functionName: \"managementFeeBps\",\n }) as Promise<bigint>,\n getAssetDecimals(),\n ]);\n\n return {\n address: vaultAddress,\n totalAssets: formatUnits(totalAssets, decimals),\n agentCount,\n redemptionsLocked,\n managementFeeBps,\n };\n}\n","/**\n * ENS resolution + text records via Durin L2Registry on Base.\n *\n * Two responsibilities:\n * 1. Resolve syndicate subdomain → on-chain syndicate data (via factory)\n * 2. Read/write ENS text records (via L2Registry, routed through vault's executeBatch)\n *\n * The vault owns the ENS subdomain node (registered in the factory via\n * `ensRegistrar.register(subdomain, vault)`). Only the vault can write text\n * records. We route writes through vault.executeBatch → L2Registry.setText,\n * which executes as the vault via delegatecall to the shared executor lib.\n */\n\nimport { encodeFunctionData } from \"viem\";\nimport type { Address, Hex } from \"viem\";\nimport { namehash } from \"viem/ens\";\nimport { getPublicClient, getWalletClient, getAccount } from \"./client.js\";\nimport { getChain, getNetwork } from \"./network.js\";\nimport { SYNDICATE_FACTORY_ABI, L2_REGISTRY_ABI } from \"./abis.js\";\nimport { ENS, SHERWOOD } from \"./addresses.js\";\nimport * as vaultLib from \"./vault.js\";\n\n/**\n * Wait for a transaction to be mined before proceeding.\n */\nasync function waitForTx(hash: Hex): Promise<void> {\n const client = getPublicClient();\n await client.waitForTransactionReceipt({ hash });\n}\n\nconst ENS_DOMAIN = \"sherwoodagent.eth\";\n\nfunction getFactoryAddress(): Address {\n return SHERWOOD().FACTORY;\n}\n\n// ── Syndicate Resolution (via factory) ──\n\nexport interface SyndicateResolution {\n id: bigint;\n vault: Address;\n creator: Address;\n subdomain: string;\n}\n\n/**\n * Resolve a syndicate subdomain to its on-chain data.\n * Uses factory.subdomainToSyndicate() → factory.syndicates().\n */\nexport async function resolveSyndicate(subdomain: string): Promise<SyndicateResolution> {\n const client = getPublicClient();\n const factory = getFactoryAddress();\n\n // Get syndicate ID from subdomain\n const syndicateId = (await client.readContract({\n address: factory,\n abi: SYNDICATE_FACTORY_ABI,\n functionName: \"subdomainToSyndicate\",\n args: [subdomain],\n })) as bigint;\n\n if (syndicateId === 0n) {\n throw new Error(`Syndicate \"${subdomain}\" not found`);\n }\n\n // Get full syndicate record\n const result = (await client.readContract({\n address: factory,\n abi: SYNDICATE_FACTORY_ABI,\n functionName: \"syndicates\",\n args: [syndicateId],\n })) as [bigint, Address, Address, string, bigint, boolean, string];\n\n return {\n id: result[0],\n vault: result[1],\n creator: result[2],\n subdomain: result[6],\n };\n}\n\n/**\n * Reverse lookup: vault address → syndicate info.\n * Uses factory.vaultToSyndicate() → factory.syndicates().\n */\nexport async function resolveVaultSyndicate(\n vaultAddress: Address,\n): Promise<SyndicateResolution> {\n const client = getPublicClient();\n const factory = getFactoryAddress();\n\n const syndicateId = (await client.readContract({\n address: factory,\n abi: SYNDICATE_FACTORY_ABI,\n functionName: \"vaultToSyndicate\",\n args: [vaultAddress],\n })) as bigint;\n\n if (syndicateId === 0n) {\n throw new Error(`No syndicate found for vault ${vaultAddress}`);\n }\n\n const result = (await client.readContract({\n address: factory,\n abi: SYNDICATE_FACTORY_ABI,\n functionName: \"syndicates\",\n args: [syndicateId],\n })) as [bigint, Address, Address, string, bigint, boolean, string];\n\n return {\n id: result[0],\n vault: result[1],\n creator: result[2],\n subdomain: result[6],\n };\n}\n\n// ── ENS Text Records (via L2Registry) ──\n\n/**\n * Compute the ENS node hash for a subdomain under sherwoodagent.eth.\n */\nfunction getSubdomainNode(subdomain: string): Hex {\n return namehash(`${subdomain}.${ENS_DOMAIN}`);\n}\n\n/**\n * Write a text record to the L2Registry via the vault's executeBatch.\n *\n * The vault owns the ENS node, so only the vault can call setText.\n * We route the call through vault.executeBatch (delegatecall → executor lib → L2Registry),\n * which means L2Registry sees msg.sender = vault address.\n *\n * Requires the caller to be a registered agent on the vault (creator is auto-registered).\n */\nexport async function setTextRecord(\n subdomain: string,\n key: string,\n value: string,\n vaultAddress: Address,\n): Promise<Hex> {\n const l2Registry = ENS().L2_REGISTRY;\n const node = getSubdomainNode(subdomain);\n\n vaultLib.setVaultAddress(vaultAddress);\n\n // Encode the L2Registry.setText call\n const setTextData = encodeFunctionData({\n abi: L2_REGISTRY_ABI,\n functionName: \"setText\",\n args: [node, key, value],\n });\n\n // Route through vault.executeBatch (owner only)\n return vaultLib.executeBatch(\n [{ target: l2Registry, data: setTextData, value: 0n }],\n );\n}\n\n/**\n * Read a text record from the L2Registry.\n * Used to look up xmtpGroupId when not cached locally.\n */\nexport async function getTextRecord(\n subdomain: string,\n key: string,\n): Promise<string> {\n const client = getPublicClient();\n const node = getSubdomainNode(subdomain);\n\n return client.readContract({\n address: ENS().L2_REGISTRY,\n abi: L2_REGISTRY_ABI,\n functionName: \"text\",\n args: [node, key],\n }) as Promise<string>;\n}\n"],"mappings":"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","names":[]}
@@ -2,7 +2,7 @@ import {
2
2
  EAS_ABI,
3
3
  EAS_CONTRACTS,
4
4
  EAS_SCHEMAS
5
- } from "./chunk-IXMM3TT3.js";
5
+ } from "./chunk-X34TJQ4P.js";
6
6
  import {
7
7
  getAccount,
8
8
  getPublicClient,
@@ -286,4 +286,4 @@ export {
286
286
  queryApprovals,
287
287
  queryJoinRequests
288
288
  };
289
- //# sourceMappingURL=chunk-56W62BYY.js.map
289
+ //# sourceMappingURL=chunk-TTGRYJYY.js.map
@@ -108,20 +108,16 @@ var ROBINHOOD_TESTNET_AGENT_REGISTRY = {
108
108
  var BASE_SHERWOOD = {
109
109
  FACTORY: ZERO,
110
110
  // TODO: set after mainnet deploy
111
- STRATEGY_REGISTRY: ZERO,
112
- // TODO: set after mainnet deploy
113
111
  GOVERNOR: ZERO
114
112
  // TODO: set after mainnet deploy
115
113
  };
116
114
  var BASE_SEPOLIA_SHERWOOD = {
117
- FACTORY: "0x60bf54dDce61ece85BE5e66CBaA17cC312DEa6C8",
118
- STRATEGY_REGISTRY: "0xf1e6E9bd1a735B54F383b18ad6603Ddd566C71cE",
119
- GOVERNOR: "0xB478cdb99260F46191C9e5Da405F7E70eEA23dE4"
115
+ FACTORY: "0x2efD194ADb3Db40E0e6faAe06c4e602c7a3D9199",
116
+ GOVERNOR: "0x6fc67a9aD15eD3A9DE25c29CCe10D662079129E2"
120
117
  };
121
118
  var ROBINHOOD_TESTNET_SHERWOOD = {
122
- FACTORY: "0xD348524c66e209DfcC76b9a3208a05B82F6948D6",
123
- STRATEGY_REGISTRY: "0xC6744E4941f4810fDadB72c795aD3EE7cb55D925",
124
- GOVERNOR: "0x866996c808E6244216a3d0df15464FCF5d495394"
119
+ FACTORY: "0x72981ce06d9c183953F6a8Cc587a8C28C785670e",
120
+ GOVERNOR: "0x7E1F71A72a88Ce8418cf82CACDE9ce5Bbbcf5772"
125
121
  };
126
122
  var BASE_VENICE = {
127
123
  VVV: "0xacfe6019ed1a7dc6f7b508c02d1b04ec88cc21bf",
@@ -274,14 +270,6 @@ var SYNDICATE_VAULT_ABI = [
274
270
  inputs: [{ name: "account", type: "address" }],
275
271
  outputs: [{ name: "", type: "uint256" }]
276
272
  },
277
- // LP
278
- {
279
- name: "ragequit",
280
- type: "function",
281
- stateMutability: "nonpayable",
282
- inputs: [{ name: "receiver", type: "address" }],
283
- outputs: [{ name: "assets", type: "uint256" }]
284
- },
285
273
  // Batch execution (owner-only, via delegatecall to shared executor lib)
286
274
  {
287
275
  name: "executeBatch",
@@ -300,32 +288,6 @@ var SYNDICATE_VAULT_ABI = [
300
288
  ],
301
289
  outputs: []
302
290
  },
303
- {
304
- name: "simulateBatch",
305
- type: "function",
306
- stateMutability: "nonpayable",
307
- inputs: [
308
- {
309
- name: "calls",
310
- type: "tuple[]",
311
- components: [
312
- { name: "target", type: "address" },
313
- { name: "data", type: "bytes" },
314
- { name: "value", type: "uint256" }
315
- ]
316
- }
317
- ],
318
- outputs: [
319
- {
320
- name: "results",
321
- type: "tuple[]",
322
- components: [
323
- { name: "success", type: "bool" },
324
- { name: "returnData", type: "bytes" }
325
- ]
326
- }
327
- ]
328
- },
329
291
  // Agent management
330
292
  {
331
293
  name: "registerAgent",
@@ -490,15 +452,6 @@ var SYNDICATE_VAULT_ABI = [
490
452
  type: "event",
491
453
  inputs: [{ name: "agentAddress", type: "address", indexed: true }]
492
454
  },
493
- {
494
- name: "Ragequit",
495
- type: "event",
496
- inputs: [
497
- { name: "lp", type: "address", indexed: true },
498
- { name: "shares", type: "uint256", indexed: false },
499
- { name: "assets", type: "uint256", indexed: false }
500
- ]
501
- },
502
455
  {
503
456
  name: "DepositorApproved",
504
457
  type: "event",
@@ -509,16 +462,6 @@ var SYNDICATE_VAULT_ABI = [
509
462
  type: "event",
510
463
  inputs: [{ name: "depositor", type: "address", indexed: true }]
511
464
  },
512
- {
513
- name: "RedemptionsLockedEvent",
514
- type: "event",
515
- inputs: []
516
- },
517
- {
518
- name: "RedemptionsUnlockedEvent",
519
- type: "event",
520
- inputs: []
521
- },
522
465
  // Governor integration
523
466
  {
524
467
  name: "governor",
@@ -540,13 +483,6 @@ var SYNDICATE_VAULT_ABI = [
540
483
  stateMutability: "view",
541
484
  inputs: [],
542
485
  outputs: [{ name: "", type: "uint256" }]
543
- },
544
- {
545
- name: "setGovernor",
546
- type: "function",
547
- stateMutability: "nonpayable",
548
- inputs: [{ name: "governor_", type: "address" }],
549
- outputs: []
550
486
  }
551
487
  ];
552
488
  var UNISWAP_QUOTER_V2_ABI = [
@@ -684,7 +620,7 @@ var SYNDICATE_FACTORY_ABI = [
684
620
  ]
685
621
  },
686
622
  {
687
- name: "getActiveSyndicates",
623
+ name: "getAllActiveSyndicates",
688
624
  type: "function",
689
625
  stateMutability: "view",
690
626
  inputs: [],
@@ -1026,7 +962,16 @@ var SYNDICATE_GOVERNOR_ABI = [
1026
962
  { name: "performanceFeeBps", type: "uint256" },
1027
963
  { name: "strategyDuration", type: "uint256" },
1028
964
  {
1029
- name: "calls",
965
+ name: "executeCalls",
966
+ type: "tuple[]",
967
+ components: [
968
+ { name: "target", type: "address" },
969
+ { name: "data", type: "bytes" },
970
+ { name: "value", type: "uint256" }
971
+ ]
972
+ },
973
+ {
974
+ name: "settlementCalls",
1030
975
  type: "tuple[]",
1031
976
  components: [
1032
977
  { name: "target", type: "address" },
@@ -1034,7 +979,6 @@ var SYNDICATE_GOVERNOR_ABI = [
1034
979
  { name: "value", type: "uint256" }
1035
980
  ]
1036
981
  },
1037
- { name: "splitIndex", type: "uint256" },
1038
982
  {
1039
983
  name: "coProposers",
1040
984
  type: "tuple[]",
@@ -1070,24 +1014,6 @@ var SYNDICATE_GOVERNOR_ABI = [
1070
1014
  inputs: [{ name: "proposalId", type: "uint256" }],
1071
1015
  outputs: []
1072
1016
  },
1073
- {
1074
- name: "settleByAgent",
1075
- type: "function",
1076
- stateMutability: "nonpayable",
1077
- inputs: [
1078
- { name: "proposalId", type: "uint256" },
1079
- {
1080
- name: "calls",
1081
- type: "tuple[]",
1082
- components: [
1083
- { name: "target", type: "address" },
1084
- { name: "data", type: "bytes" },
1085
- { name: "value", type: "uint256" }
1086
- ]
1087
- }
1088
- ],
1089
- outputs: []
1090
- },
1091
1017
  {
1092
1018
  name: "emergencySettle",
1093
1019
  type: "function",
@@ -1136,7 +1062,6 @@ var SYNDICATE_GOVERNOR_ABI = [
1136
1062
  { name: "vault", type: "address" },
1137
1063
  { name: "metadataURI", type: "string" },
1138
1064
  { name: "performanceFeeBps", type: "uint256" },
1139
- { name: "splitIndex", type: "uint256" },
1140
1065
  { name: "strategyDuration", type: "uint256" },
1141
1066
  { name: "votesFor", type: "uint256" },
1142
1067
  { name: "votesAgainst", type: "uint256" },
@@ -1213,7 +1138,7 @@ var SYNDICATE_GOVERNOR_ABI = [
1213
1138
  components: [
1214
1139
  { name: "votingPeriod", type: "uint256" },
1215
1140
  { name: "executionWindow", type: "uint256" },
1216
- { name: "quorumBps", type: "uint256" },
1141
+ { name: "vetoThresholdBps", type: "uint256" },
1217
1142
  { name: "maxPerformanceFeeBps", type: "uint256" },
1218
1143
  { name: "cooldownPeriod", type: "uint256" },
1219
1144
  { name: "collaborationWindow", type: "uint256" },
@@ -1284,8 +1209,8 @@ var SYNDICATE_GOVERNOR_ABI = [
1284
1209
  { name: "vault", type: "address", indexed: true },
1285
1210
  { name: "performanceFeeBps", type: "uint256", indexed: false },
1286
1211
  { name: "strategyDuration", type: "uint256", indexed: false },
1287
- { name: "splitIndex", type: "uint256", indexed: false },
1288
- { name: "callCount", type: "uint256", indexed: false },
1212
+ { name: "executeCallCount", type: "uint256", indexed: false },
1213
+ { name: "settlementCallCount", type: "uint256", indexed: false },
1289
1214
  { name: "metadataURI", type: "string", indexed: false }
1290
1215
  ]
1291
1216
  },
@@ -1343,10 +1268,10 @@ var SYNDICATE_GOVERNOR_ABI = [
1343
1268
  outputs: []
1344
1269
  },
1345
1270
  {
1346
- name: "setQuorumBps",
1271
+ name: "setVetoThresholdBps",
1347
1272
  type: "function",
1348
1273
  stateMutability: "nonpayable",
1349
- inputs: [{ name: "newQuorumBps", type: "uint256" }],
1274
+ inputs: [{ name: "newVetoThresholdBps", type: "uint256" }],
1350
1275
  outputs: []
1351
1276
  },
1352
1277
  {
@@ -1369,6 +1294,54 @@ var SYNDICATE_GOVERNOR_ABI = [
1369
1294
  stateMutability: "nonpayable",
1370
1295
  inputs: [{ name: "newCooldownPeriod", type: "uint256" }],
1371
1296
  outputs: []
1297
+ },
1298
+ {
1299
+ name: "vetoProposal",
1300
+ type: "function",
1301
+ stateMutability: "nonpayable",
1302
+ inputs: [{ name: "proposalId", type: "uint256" }],
1303
+ outputs: []
1304
+ },
1305
+ {
1306
+ name: "setProtocolFeeBps",
1307
+ type: "function",
1308
+ stateMutability: "nonpayable",
1309
+ inputs: [{ name: "newProtocolFeeBps", type: "uint256" }],
1310
+ outputs: []
1311
+ },
1312
+ {
1313
+ name: "getExecuteCalls",
1314
+ type: "function",
1315
+ stateMutability: "view",
1316
+ inputs: [{ name: "proposalId", type: "uint256" }],
1317
+ outputs: [
1318
+ {
1319
+ name: "",
1320
+ type: "tuple[]",
1321
+ components: [
1322
+ { name: "target", type: "address" },
1323
+ { name: "data", type: "bytes" },
1324
+ { name: "value", type: "uint256" }
1325
+ ]
1326
+ }
1327
+ ]
1328
+ },
1329
+ {
1330
+ name: "getSettlementCalls",
1331
+ type: "function",
1332
+ stateMutability: "view",
1333
+ inputs: [{ name: "proposalId", type: "uint256" }],
1334
+ outputs: [
1335
+ {
1336
+ name: "",
1337
+ type: "tuple[]",
1338
+ components: [
1339
+ { name: "target", type: "address" },
1340
+ { name: "data", type: "bytes" },
1341
+ { name: "value", type: "uint256" }
1342
+ ]
1343
+ }
1344
+ ]
1372
1345
  }
1373
1346
  ];
1374
1347
 
@@ -1392,4 +1365,4 @@ export {
1392
1365
  EAS_ABI,
1393
1366
  SYNDICATE_GOVERNOR_ABI
1394
1367
  };
1395
- //# sourceMappingURL=chunk-IXMM3TT3.js.map
1368
+ //# sourceMappingURL=chunk-X34TJQ4P.js.map