@sherwoodagent/cli 0.3.7 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,13 +5,13 @@ import {
5
5
  getTextRecord,
6
6
  resolveSyndicate,
7
7
  setTextRecord
8
- } from "./chunk-J4J7VSMJ.js";
8
+ } from "./chunk-3WZLP6BH.js";
9
9
 
10
10
  // src/commands/chat.ts
11
11
  import chalk from "chalk";
12
12
  import ora from "ora";
13
13
  async function loadXmtp() {
14
- return import("./xmtp-BQAJYBMY.js");
14
+ return import("./xmtp-PICTODCB.js");
15
15
  }
16
16
  function formatTimestamp(date) {
17
17
  return `${date.getHours().toString().padStart(2, "0")}:${date.getMinutes().toString().padStart(2, "0")}`;
@@ -211,7 +211,30 @@ async function handleRemove(name, address) {
211
211
  process.exit(1);
212
212
  }
213
213
  }
214
- async function handleInit(name, force, publicChat) {
214
+ async function handlePublic(name, on) {
215
+ const spectatorAddress = process.env.DASHBOARD_SPECTATOR_ADDRESS;
216
+ if (!spectatorAddress) {
217
+ console.error(chalk.red("DASHBOARD_SPECTATOR_ADDRESS env var is required"));
218
+ process.exit(1);
219
+ }
220
+ const spinner = ora(`${on ? "Enabling" : "Disabling"} public chat...`).start();
221
+ try {
222
+ const xmtp = await loadXmtp();
223
+ const group = await xmtp.getGroup("", name);
224
+ if (on) {
225
+ await xmtp.addMember(group, spectatorAddress);
226
+ spinner.succeed("Public chat enabled \u2014 dashboard spectator added");
227
+ } else {
228
+ await xmtp.removeMember(group, spectatorAddress);
229
+ spinner.succeed("Public chat disabled \u2014 dashboard spectator removed");
230
+ }
231
+ } catch (err) {
232
+ spinner.fail("Failed to toggle public chat");
233
+ console.error(chalk.red(err instanceof Error ? err.message : String(err)));
234
+ process.exit(1);
235
+ }
236
+ }
237
+ async function handleInit(name, force, isPublic) {
215
238
  const spinner = ora("Initializing chat group...").start();
216
239
  try {
217
240
  const syndicate = await resolveSyndicate(name);
@@ -231,7 +254,7 @@ async function handleInit(name, force, publicChat) {
231
254
  spinner.text = "Creating XMTP group...";
232
255
  const xmtp = await loadXmtp();
233
256
  const client = await xmtp.getXmtpClient();
234
- const groupId = await xmtp.createSyndicateGroup(client, name, publicChat);
257
+ const groupId = await xmtp.createSyndicateGroup(client, name, isPublic);
235
258
  cacheGroupId(name, groupId);
236
259
  try {
237
260
  spinner.text = "Writing group ID to ENS...";
@@ -250,7 +273,7 @@ async function handleInit(name, force, publicChat) {
250
273
  }
251
274
  }
252
275
  function registerChatCommands(program) {
253
- program.command("chat <name> [action] [actionArgs...]").description("Syndicate chat \u2014 stream, send, log, members, add, remove, init").option("--markdown", "Send as rich markdown (for send)", false).option("--limit <n>", "Number of messages to show (for log)", "20").option("--force", "Recreate group even if one exists (for init)", false).option("--public-chat", "Enable dashboard spectator mode (for init)", false).action(async (name, action, actionArgs, opts) => {
276
+ program.command("chat <name> [action] [actionArgs...]").description("Syndicate chat \u2014 stream, send, log, members, add, remove, init, public").option("--markdown", "Send as rich markdown (for send)", false).option("--limit <n>", "Number of messages to show (for log)", "20").option("--force", "Recreate group even if one exists (for init)", false).option("--public", "Enable public chat \u2014 adds dashboard spectator (for init)", false).action(async (name, action, actionArgs, opts) => {
254
277
  switch (action) {
255
278
  case "send": {
256
279
  const message = actionArgs[0];
@@ -295,8 +318,17 @@ function registerChatCommands(program) {
295
318
  break;
296
319
  }
297
320
  case "init":
298
- await handleInit(name, opts.force, opts.publicChat);
321
+ await handleInit(name, opts.force, opts.public);
299
322
  break;
323
+ case "public": {
324
+ const flag = actionArgs[0];
325
+ if (flag !== "on" && flag !== "off") {
326
+ console.error(chalk.red("Usage: sherwood chat <name> public on/off"));
327
+ process.exit(1);
328
+ }
329
+ await handlePublic(name, flag === "on");
330
+ break;
331
+ }
300
332
  case void 0:
301
333
  default:
302
334
  await handleStream(name);
@@ -307,4 +339,4 @@ function registerChatCommands(program) {
307
339
  export {
308
340
  registerChatCommands
309
341
  };
310
- //# sourceMappingURL=chat-YHUZPD54.js.map
342
+ //# sourceMappingURL=chat-HHXJOCKN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/chat.ts"],"sourcesContent":["/**\n * Chat commands — sherwood chat <syndicate-name> [action] [args...]\n *\n * Uses XMTP for encrypted group messaging tied to syndicates.\n * Shells out to the @xmtp/cli binary for all XMTP operations.\n *\n * Commander can't dispatch subcommands when the parent has a positional <name> arg\n * (it always runs the parent action). So we use manual dispatch: a single .action()\n * that routes based on the [action] argument.\n *\n * Usage:\n * sherwood chat <name> — stream messages (default)\n * sherwood chat <name> send \"hello\" — send a text message\n * sherwood chat <name> send \"hello\" --markdown — send formatted markdown\n * sherwood chat <name> react <id> <emoji> — react to a message\n * sherwood chat <name> log [--limit 50] — show recent messages\n * sherwood chat <name> members — list group members\n * sherwood chat <name> add <address> — add member (creator only)\n * sherwood chat <name> init [--force] [--public] — create XMTP group + write ENS record\n * sherwood chat <name> public on/off — toggle dashboard spectator access\n */\n\nimport { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport ora from \"ora\";\nimport { getAccount } from \"../lib/client.js\";\nimport { resolveSyndicate, setTextRecord, getTextRecord } from \"../lib/ens.js\";\nimport { cacheGroupId, getCachedGroupId } from \"../lib/config.js\";\nimport type { ChatEnvelope, MessageType } from \"../lib/types.js\";\nimport type { XmtpMessage } from \"../lib/xmtp.js\";\n\n// Lazy-load XMTP to avoid breaking non-chat commands when @xmtp/cli is missing\nasync function loadXmtp() {\n return import(\"../lib/xmtp.js\");\n}\n\n// ── Formatting ──\n\nfunction formatTimestamp(date: Date): string {\n return `${date.getHours().toString().padStart(2, \"0\")}:${date.getMinutes().toString().padStart(2, \"0\")}`;\n}\n\nfunction truncateAddress(addr: string): string {\n return `${addr.slice(0, 6)}...${addr.slice(-4)}`;\n}\n\nfunction colorByType(type: MessageType): (text: string) => string {\n switch (type) {\n case \"TRADE_EXECUTED\":\n return chalk.green;\n case \"RISK_ALERT\":\n return chalk.red;\n case \"TRADE_SIGNAL\":\n return chalk.yellow;\n case \"POSITION_UPDATE\":\n return chalk.cyan;\n case \"LP_REPORT\":\n return chalk.magenta;\n case \"AGENT_REGISTERED\":\n case \"MEMBER_JOIN\":\n return chalk.blue;\n case \"RAGEQUIT_NOTICE\":\n return chalk.red;\n default:\n return chalk.white;\n }\n}\n\nfunction formatMessage(msg: XmtpMessage): string {\n const time = chalk.dim(`[${formatTimestamp(msg.sentAt)}]`);\n const sender = chalk.dim(truncateAddress(msg.senderInboxId));\n\n const text = msg.content;\n try {\n const envelope: ChatEnvelope = JSON.parse(text);\n const color = colorByType(envelope.type);\n const from = envelope.from ? truncateAddress(envelope.from) : sender;\n\n if (envelope.type === \"REACTION\") {\n const data = envelope.data as { reference?: string; emoji?: string } | undefined;\n return `${time} ${sender} reacted ${data?.emoji || \"?\"} to ${truncateAddress(data?.reference || \"?\")}`;\n }\n\n if (envelope.type === \"MESSAGE\") {\n if ((envelope.data as Record<string, unknown>)?.format === \"markdown\") {\n return `${time} ${chalk.dim(from)}\\n${envelope.text || \"\"}`;\n }\n return `${time} ${chalk.dim(from)}: ${envelope.text || \"\"}`;\n }\n\n if (envelope.type === \"AGENT_REGISTERED\") {\n return `${time} ${color(`[${envelope.type}]`)} Agent ${truncateAddress(envelope.agent?.address || \"?\")} registered`;\n }\n\n if (envelope.type === \"MEMBER_JOIN\") {\n return `${time} ${color(`[${envelope.type}]`)} ${truncateAddress(envelope.from || \"?\")} joined`;\n }\n\n const summary = envelope.text || envelope.type;\n return `${time} ${color(`[${envelope.type}]`)} ${chalk.dim(from)}: ${summary}`;\n } catch {\n return `${time} ${sender}: ${text}`;\n }\n}\n\n// ── Action handlers ──\n\nasync function handleStream(name: string): Promise<void> {\n const spinner = ora(\"Connecting to chat...\").start();\n try {\n await resolveSyndicate(name);\n const xmtp = await loadXmtp();\n const client = await xmtp.getXmtpClient();\n const group = await xmtp.getGroup(client, name);\n spinner.succeed(`Connected to ${name}.sherwoodagent.eth`);\n console.log(chalk.dim(\"Streaming messages... (Ctrl+C to exit)\\n\"));\n\n const cleanup = await xmtp.streamMessages(group, (msg) => {\n console.log(formatMessage(msg));\n });\n\n process.on(\"SIGINT\", async () => {\n console.log(chalk.dim(\"\\nDisconnecting...\"));\n cleanup();\n process.exit(0);\n });\n\n await new Promise(() => {});\n } catch (err) {\n spinner.fail(\"Failed to connect to chat\");\n console.error(chalk.red(err instanceof Error ? err.message : String(err)));\n process.exit(1);\n }\n}\n\nasync function handleSend(name: string, message: string, markdown: boolean): Promise<void> {\n const spinner = ora(\"Sending...\").start();\n try {\n const xmtp = await loadXmtp();\n const group = await xmtp.getGroup(\"\", name);\n\n if (markdown) {\n await xmtp.sendMarkdown(group, message);\n } else {\n const envelope: ChatEnvelope = {\n type: \"MESSAGE\",\n from: getAccount().address,\n text: message,\n timestamp: Math.floor(Date.now() / 1000),\n };\n await xmtp.sendEnvelope(group, envelope);\n }\n\n spinner.succeed(\"Message sent\");\n } catch (err) {\n spinner.fail(\"Failed to send message\");\n console.error(chalk.red(err instanceof Error ? err.message : String(err)));\n process.exit(1);\n }\n}\n\nasync function handleReact(name: string, messageId: string, emoji: string): Promise<void> {\n const spinner = ora(\"Reacting...\").start();\n try {\n const xmtp = await loadXmtp();\n const group = await xmtp.getGroup(\"\", name);\n await xmtp.sendReaction(group, messageId, emoji);\n spinner.succeed(`Reacted ${emoji}`);\n } catch (err) {\n spinner.fail(\"Failed to send reaction\");\n console.error(chalk.red(err instanceof Error ? err.message : String(err)));\n process.exit(1);\n }\n}\n\nasync function handleLog(name: string, limit: number): Promise<void> {\n const spinner = ora(\"Loading messages...\").start();\n try {\n const xmtp = await loadXmtp();\n const group = await xmtp.getGroup(\"\", name);\n const messages = await xmtp.getRecentMessages(group, limit);\n\n spinner.stop();\n console.log();\n console.log(chalk.bold(`Chat log: ${name}.sherwoodagent.eth`));\n console.log(chalk.dim(\"─\".repeat(50)));\n\n if (messages.length === 0) {\n console.log(chalk.dim(\" No messages yet\"));\n } else {\n for (const msg of messages.reverse()) {\n console.log(formatMessage(msg));\n }\n }\n console.log();\n } catch (err) {\n spinner.fail(\"Failed to load messages\");\n console.error(chalk.red(err instanceof Error ? err.message : String(err)));\n process.exit(1);\n }\n}\n\nasync function handleMembers(name: string): Promise<void> {\n const spinner = ora(\"Loading members...\").start();\n try {\n const xmtp = await loadXmtp();\n const group = await xmtp.getGroup(\"\", name);\n const members = await xmtp.getMembers(group);\n\n spinner.stop();\n console.log();\n console.log(chalk.bold(`Members: ${name}.sherwoodagent.eth`));\n console.log(chalk.dim(\"─\".repeat(50)));\n\n for (const member of members) {\n const role = member.permissionLevel === \"super_admin\"\n ? chalk.yellow(\" (super admin)\")\n : member.permissionLevel === \"admin\"\n ? chalk.blue(\" (admin)\")\n : \"\";\n console.log(` ${member.inboxId}${role}`);\n }\n\n console.log(chalk.dim(`\\n Total: ${members.length} members`));\n console.log();\n } catch (err) {\n spinner.fail(\"Failed to load members\");\n console.error(chalk.red(err instanceof Error ? err.message : String(err)));\n process.exit(1);\n }\n}\n\nasync function handleAdd(name: string, address: string): Promise<void> {\n const spinner = ora(\"Adding member...\").start();\n try {\n const xmtp = await loadXmtp();\n const group = await xmtp.getGroup(\"\", name);\n await xmtp.addMember(group, address);\n\n await xmtp.sendEnvelope(group, {\n type: \"MEMBER_JOIN\",\n from: address,\n syndicate: name,\n timestamp: Math.floor(Date.now() / 1000),\n });\n\n spinner.succeed(`Member added: ${address}`);\n } catch (err) {\n spinner.fail(\"Failed to add member\");\n console.error(chalk.red(err instanceof Error ? err.message : String(err)));\n process.exit(1);\n }\n}\n\nasync function handleRemove(name: string, address: string): Promise<void> {\n const spinner = ora(\"Removing member...\").start();\n try {\n const xmtp = await loadXmtp();\n const group = await xmtp.getGroup(\"\", name);\n await xmtp.removeMember(group, address);\n spinner.succeed(`Member removed: ${address}`);\n } catch (err) {\n spinner.fail(\"Failed to remove member\");\n console.error(chalk.red(err instanceof Error ? err.message : String(err)));\n process.exit(1);\n }\n}\n\nasync function handlePublic(name: string, on: boolean): Promise<void> {\n const spectatorAddress = process.env.DASHBOARD_SPECTATOR_ADDRESS;\n if (!spectatorAddress) {\n console.error(chalk.red(\"DASHBOARD_SPECTATOR_ADDRESS env var is required\"));\n process.exit(1);\n }\n\n const spinner = ora(`${on ? \"Enabling\" : \"Disabling\"} public chat...`).start();\n try {\n const xmtp = await loadXmtp();\n const group = await xmtp.getGroup(\"\", name);\n\n if (on) {\n await xmtp.addMember(group, spectatorAddress);\n spinner.succeed(\"Public chat enabled — dashboard spectator added\");\n } else {\n await xmtp.removeMember(group, spectatorAddress);\n spinner.succeed(\"Public chat disabled — dashboard spectator removed\");\n }\n } catch (err) {\n spinner.fail(\"Failed to toggle public chat\");\n console.error(chalk.red(err instanceof Error ? err.message : String(err)));\n process.exit(1);\n }\n}\n\nasync function handleInit(name: string, force: boolean, isPublic: boolean): Promise<void> {\n const spinner = ora(\"Initializing chat group...\").start();\n try {\n const syndicate = await resolveSyndicate(name);\n const callerAddress = getAccount().address.toLowerCase();\n if (syndicate.creator.toLowerCase() !== callerAddress) {\n spinner.fail(\"Only the syndicate creator can initialize the chat group\");\n process.exit(1);\n }\n\n // Idempotency check\n if (!force) {\n const existingId = getCachedGroupId(name) || await getTextRecord(name, \"xmtpGroupId\");\n if (existingId) {\n spinner.succeed(\"XMTP group already exists for this syndicate\");\n console.log(chalk.dim(` Group ID: ${existingId}`));\n return;\n }\n }\n\n // Create the group\n spinner.text = \"Creating XMTP group...\";\n const xmtp = await loadXmtp();\n const client = await xmtp.getXmtpClient();\n const groupId = await xmtp.createSyndicateGroup(client, name, isPublic);\n\n cacheGroupId(name, groupId);\n\n try {\n spinner.text = \"Writing group ID to ENS...\";\n await setTextRecord(name, \"xmtpGroupId\", groupId, syndicate.vault);\n } catch (ensErr) {\n console.warn(chalk.yellow(\"\\n \\u26a0 Could not write ENS text record (cached locally only)\"));\n console.warn(chalk.dim(` ${ensErr instanceof Error ? ensErr.message : String(ensErr)}`));\n }\n\n spinner.succeed(`Chat group created for ${name}.sherwoodagent.eth`);\n console.log(chalk.dim(` Group ID: ${groupId}`));\n console.log(chalk.dim(` Stream: sherwood chat ${name}`));\n } catch (err) {\n spinner.fail(\"Failed to initialize chat group\");\n console.error(chalk.red(err instanceof Error ? err.message : String(err)));\n process.exit(1);\n }\n}\n\n// ── Command Registration ──\n\nexport function registerChatCommands(program: Command): void {\n program\n .command(\"chat <name> [action] [actionArgs...]\")\n .description(\"Syndicate chat — stream, send, log, members, add, remove, init, public\")\n .option(\"--markdown\", \"Send as rich markdown (for send)\", false)\n .option(\"--limit <n>\", \"Number of messages to show (for log)\", \"20\")\n .option(\"--force\", \"Recreate group even if one exists (for init)\", false)\n .option(\"--public\", \"Enable public chat — adds dashboard spectator (for init)\", false)\n .action(async (name: string, action: string | undefined, actionArgs: string[], opts: { markdown: boolean; limit: string; force: boolean; public: boolean }) => {\n switch (action) {\n case \"send\": {\n const message = actionArgs[0];\n if (!message) {\n console.error(chalk.red(\"Usage: sherwood chat <name> send <message> [--markdown]\"));\n process.exit(1);\n }\n await handleSend(name, message, opts.markdown);\n break;\n }\n\n case \"react\": {\n const [messageId, emoji] = actionArgs;\n if (!messageId || !emoji) {\n console.error(chalk.red(\"Usage: sherwood chat <name> react <messageId> <emoji>\"));\n process.exit(1);\n }\n await handleReact(name, messageId, emoji);\n break;\n }\n\n case \"log\":\n await handleLog(name, parseInt(opts.limit, 10));\n break;\n\n case \"members\":\n await handleMembers(name);\n break;\n\n case \"add\": {\n const address = actionArgs[0];\n if (!address) {\n console.error(chalk.red(\"Usage: sherwood chat <name> add <address>\"));\n process.exit(1);\n }\n await handleAdd(name, address);\n break;\n }\n\n case \"remove\": {\n const removeAddr = actionArgs[0];\n if (!removeAddr) {\n console.error(chalk.red(\"Usage: sherwood chat <name> remove <address>\"));\n process.exit(1);\n }\n await handleRemove(name, removeAddr);\n break;\n }\n\n case \"init\":\n await handleInit(name, opts.force, opts.public);\n break;\n\n case \"public\": {\n const flag = actionArgs[0];\n if (flag !== \"on\" && flag !== \"off\") {\n console.error(chalk.red(\"Usage: sherwood chat <name> public on/off\"));\n process.exit(1);\n }\n await handlePublic(name, flag === \"on\");\n break;\n }\n\n case undefined:\n default:\n await handleStream(name);\n break;\n }\n });\n}\n"],"mappings":"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","names":[]}
@@ -93,12 +93,15 @@ var BASE_SEPOLIA_AGENT_REGISTRY = {
93
93
  var BASE_SHERWOOD = {
94
94
  FACTORY: "0x0000000000000000000000000000000000000000",
95
95
  // TODO: set after mainnet deploy
96
- STRATEGY_REGISTRY: "0x0000000000000000000000000000000000000000"
96
+ STRATEGY_REGISTRY: "0x0000000000000000000000000000000000000000",
97
+ // TODO: set after mainnet deploy
98
+ GOVERNOR: "0x0000000000000000000000000000000000000000"
97
99
  // TODO: set after mainnet deploy
98
100
  };
99
101
  var BASE_SEPOLIA_SHERWOOD = {
100
- FACTORY: "0xc705F04fF2781aF9bB53ba416Cb32A29540c4624",
101
- STRATEGY_REGISTRY: "0x8A45f769553D10F26a6633d019B04f7805b1368A"
102
+ FACTORY: "0x60bf54dDce61ece85BE5e66CBaA17cC312DEa6C8",
103
+ STRATEGY_REGISTRY: "0xf1e6E9bd1a735B54F383b18ad6603Ddd566C71cE",
104
+ GOVERNOR: "0xB478cdb99260F46191C9e5Da405F7E70eEA23dE4"
102
105
  };
103
106
  var BASE_VENICE = {
104
107
  VVV: "0xacfe6019ed1a7dc6f7b508c02d1b04ec88cc21bf",
@@ -302,7 +305,7 @@ var SYNDICATE_VAULT_ABI = [
302
305
  inputs: [{ name: "receiver", type: "address" }],
303
306
  outputs: [{ name: "assets", type: "uint256" }]
304
307
  },
305
- // Batch execution (via delegatecall to shared executor lib)
308
+ // Batch execution (owner-only, via delegatecall to shared executor lib)
306
309
  {
307
310
  name: "executeBatch",
308
311
  type: "function",
@@ -316,8 +319,7 @@ var SYNDICATE_VAULT_ABI = [
316
319
  { name: "data", type: "bytes" },
317
320
  { name: "value", type: "uint256" }
318
321
  ]
319
- },
320
- { name: "assetAmount", type: "uint256" }
322
+ }
321
323
  ],
322
324
  outputs: []
323
325
  },
@@ -347,42 +349,6 @@ var SYNDICATE_VAULT_ABI = [
347
349
  }
348
350
  ]
349
351
  },
350
- // Target allowlist
351
- {
352
- name: "addTarget",
353
- type: "function",
354
- stateMutability: "nonpayable",
355
- inputs: [{ name: "target", type: "address" }],
356
- outputs: []
357
- },
358
- {
359
- name: "addTargets",
360
- type: "function",
361
- stateMutability: "nonpayable",
362
- inputs: [{ name: "targets", type: "address[]" }],
363
- outputs: []
364
- },
365
- {
366
- name: "removeTarget",
367
- type: "function",
368
- stateMutability: "nonpayable",
369
- inputs: [{ name: "target", type: "address" }],
370
- outputs: []
371
- },
372
- {
373
- name: "isAllowedTarget",
374
- type: "function",
375
- stateMutability: "view",
376
- inputs: [{ name: "target", type: "address" }],
377
- outputs: [{ name: "", type: "bool" }]
378
- },
379
- {
380
- name: "getAllowedTargets",
381
- type: "function",
382
- stateMutability: "view",
383
- inputs: [],
384
- outputs: [{ name: "", type: "address[]" }]
385
- },
386
352
  // Agent management
387
353
  {
388
354
  name: "registerAgent",
@@ -391,9 +357,7 @@ var SYNDICATE_VAULT_ABI = [
391
357
  inputs: [
392
358
  { name: "agentId", type: "uint256" },
393
359
  { name: "pkpAddress", type: "address" },
394
- { name: "operatorEOA", type: "address" },
395
- { name: "maxPerTx", type: "uint256" },
396
- { name: "dailyLimit", type: "uint256" }
360
+ { name: "operatorEOA", type: "address" }
397
361
  ],
398
362
  outputs: []
399
363
  },
@@ -418,32 +382,11 @@ var SYNDICATE_VAULT_ABI = [
418
382
  { name: "agentId", type: "uint256" },
419
383
  { name: "pkpAddress", type: "address" },
420
384
  { name: "operatorEOA", type: "address" },
421
- { name: "maxPerTx", type: "uint256" },
422
- { name: "dailyLimit", type: "uint256" },
423
- { name: "spentToday", type: "uint256" },
424
- { name: "lastResetDay", type: "uint256" },
425
385
  { name: "active", type: "bool" }
426
386
  ]
427
387
  }
428
388
  ]
429
389
  },
430
- {
431
- name: "getSyndicateCaps",
432
- type: "function",
433
- stateMutability: "view",
434
- inputs: [],
435
- outputs: [
436
- {
437
- name: "",
438
- type: "tuple",
439
- components: [
440
- { name: "maxPerTx", type: "uint256" },
441
- { name: "maxDailyTotal", type: "uint256" },
442
- { name: "maxBorrowRatio", type: "uint256" }
443
- ]
444
- }
445
- ]
446
- },
447
390
  {
448
391
  name: "getAgentCount",
449
392
  type: "function",
@@ -451,13 +394,6 @@ var SYNDICATE_VAULT_ABI = [
451
394
  inputs: [],
452
395
  outputs: [{ name: "", type: "uint256" }]
453
396
  },
454
- {
455
- name: "getDailySpendTotal",
456
- type: "function",
457
- stateMutability: "view",
458
- inputs: [],
459
- outputs: [{ name: "", type: "uint256" }]
460
- },
461
397
  {
462
398
  name: "isAgent",
463
399
  type: "function",
@@ -564,6 +500,35 @@ var SYNDICATE_VAULT_ABI = [
564
500
  stateMutability: "view",
565
501
  inputs: [],
566
502
  outputs: [{ name: "", type: "uint256" }]
503
+ },
504
+ // Governor integration
505
+ {
506
+ name: "governor",
507
+ type: "function",
508
+ stateMutability: "view",
509
+ inputs: [],
510
+ outputs: [{ name: "", type: "address" }]
511
+ },
512
+ {
513
+ name: "redemptionsLocked",
514
+ type: "function",
515
+ stateMutability: "view",
516
+ inputs: [],
517
+ outputs: [{ name: "", type: "bool" }]
518
+ },
519
+ {
520
+ name: "managementFeeBps",
521
+ type: "function",
522
+ stateMutability: "view",
523
+ inputs: [],
524
+ outputs: [{ name: "", type: "uint256" }]
525
+ },
526
+ {
527
+ name: "setGovernor",
528
+ type: "function",
529
+ stateMutability: "nonpayable",
530
+ inputs: [{ name: "governor_", type: "address" }],
531
+ outputs: []
567
532
  }
568
533
  ];
569
534
  var UNISWAP_QUOTER_V2_ABI = [
@@ -675,16 +640,6 @@ var SYNDICATE_FACTORY_ABI = [
675
640
  { name: "asset", type: "address" },
676
641
  { name: "name", type: "string" },
677
642
  { name: "symbol", type: "string" },
678
- {
679
- name: "caps",
680
- type: "tuple",
681
- components: [
682
- { name: "maxPerTx", type: "uint256" },
683
- { name: "maxDailyTotal", type: "uint256" },
684
- { name: "maxBorrowRatio", type: "uint256" }
685
- ]
686
- },
687
- { name: "initialTargets", type: "address[]" },
688
643
  { name: "openDeposits", type: "bool" },
689
644
  { name: "subdomain", type: "string" }
690
645
  ]
@@ -1110,7 +1065,7 @@ async function ragequit() {
1110
1065
  args: [account.address]
1111
1066
  });
1112
1067
  }
1113
- async function executeBatch(calls, assetAmount) {
1068
+ async function executeBatch(calls) {
1114
1069
  const wallet = getWalletClient();
1115
1070
  return wallet.writeContract({
1116
1071
  account: getAccount(),
@@ -1123,8 +1078,7 @@ async function executeBatch(calls, assetAmount) {
1123
1078
  target: c.target,
1124
1079
  data: c.data,
1125
1080
  value: c.value
1126
- })),
1127
- assetAmount
1081
+ }))
1128
1082
  ]
1129
1083
  });
1130
1084
  }
@@ -1159,36 +1113,6 @@ async function simulateBatch(calls) {
1159
1113
  returnData: r.returnData
1160
1114
  }));
1161
1115
  }
1162
- async function addTarget(target) {
1163
- const client = getWalletClient();
1164
- return client.writeContract({
1165
- account: getAccount(),
1166
- chain: getChain(),
1167
- address: getVaultAddress(),
1168
- abi: SYNDICATE_VAULT_ABI,
1169
- functionName: "addTarget",
1170
- args: [target]
1171
- });
1172
- }
1173
- async function removeTarget(target) {
1174
- const client = getWalletClient();
1175
- return client.writeContract({
1176
- account: getAccount(),
1177
- chain: getChain(),
1178
- address: getVaultAddress(),
1179
- abi: SYNDICATE_VAULT_ABI,
1180
- functionName: "removeTarget",
1181
- args: [target]
1182
- });
1183
- }
1184
- async function getAllowedTargets() {
1185
- const client = getPublicClient();
1186
- return client.readContract({
1187
- address: getVaultAddress(),
1188
- abi: SYNDICATE_VAULT_ABI,
1189
- functionName: "getAllowedTargets"
1190
- });
1191
- }
1192
1116
  async function approveDepositor(depositor) {
1193
1117
  const wallet = getWalletClient();
1194
1118
  return wallet.writeContract({
@@ -1254,7 +1178,7 @@ async function getBalance(address) {
1254
1178
  percentOfVault: `${percent}%`
1255
1179
  };
1256
1180
  }
1257
- async function registerAgent(agentId, pkpAddress, operatorEOA, maxPerTx, dailyLimit) {
1181
+ async function registerAgent(agentId, pkpAddress, operatorEOA) {
1258
1182
  const wallet = getWalletClient();
1259
1183
  const client = getPublicClient();
1260
1184
  const hash = await wallet.writeContract({
@@ -1263,7 +1187,7 @@ async function registerAgent(agentId, pkpAddress, operatorEOA, maxPerTx, dailyLi
1263
1187
  address: getVaultAddress(),
1264
1188
  abi: SYNDICATE_VAULT_ABI,
1265
1189
  functionName: "registerAgent",
1266
- args: [agentId, pkpAddress, operatorEOA, maxPerTx, dailyLimit]
1190
+ args: [agentId, pkpAddress, operatorEOA]
1267
1191
  });
1268
1192
  await client.waitForTransactionReceipt({ hash });
1269
1193
  return hash;
@@ -1271,7 +1195,7 @@ async function registerAgent(agentId, pkpAddress, operatorEOA, maxPerTx, dailyLi
1271
1195
  async function getVaultInfo() {
1272
1196
  const client = getPublicClient();
1273
1197
  const vaultAddress = getVaultAddress();
1274
- const [totalAssets, caps, agentCount, dailySpend, decimals] = await Promise.all([
1198
+ const [totalAssets, agentCount, redemptionsLocked, managementFeeBps, decimals] = await Promise.all([
1275
1199
  client.readContract({
1276
1200
  address: vaultAddress,
1277
1201
  abi: SYNDICATE_VAULT_ABI,
@@ -1280,40 +1204,32 @@ async function getVaultInfo() {
1280
1204
  client.readContract({
1281
1205
  address: vaultAddress,
1282
1206
  abi: SYNDICATE_VAULT_ABI,
1283
- functionName: "getSyndicateCaps"
1207
+ functionName: "getAgentCount"
1284
1208
  }),
1285
1209
  client.readContract({
1286
1210
  address: vaultAddress,
1287
1211
  abi: SYNDICATE_VAULT_ABI,
1288
- functionName: "getAgentCount"
1212
+ functionName: "redemptionsLocked"
1289
1213
  }),
1290
1214
  client.readContract({
1291
1215
  address: vaultAddress,
1292
1216
  abi: SYNDICATE_VAULT_ABI,
1293
- functionName: "getDailySpendTotal"
1217
+ functionName: "managementFeeBps"
1294
1218
  }),
1295
1219
  getAssetDecimals()
1296
1220
  ]);
1297
1221
  return {
1298
1222
  address: vaultAddress,
1299
1223
  totalAssets: formatUnits(totalAssets, decimals),
1300
- syndicateCaps: {
1301
- maxPerTx: formatUnits(caps.maxPerTx, decimals),
1302
- maxDailyTotal: formatUnits(caps.maxDailyTotal, decimals),
1303
- maxBorrowRatio: `${(Number(caps.maxBorrowRatio) / 100).toFixed(1)}%`
1304
- },
1305
1224
  agentCount,
1306
- dailySpendTotal: formatUnits(dailySpend, decimals)
1225
+ redemptionsLocked,
1226
+ managementFeeBps
1307
1227
  };
1308
1228
  }
1309
1229
 
1310
1230
  // src/lib/ens.ts
1311
1231
  import { encodeFunctionData as encodeFunctionData2 } from "viem";
1312
1232
  import { namehash } from "viem/ens";
1313
- async function waitForTx(hash) {
1314
- const client = getPublicClient();
1315
- await client.waitForTransactionReceipt({ hash });
1316
- }
1317
1233
  var ENS_DOMAIN = "sherwoodagent.eth";
1318
1234
  function getFactoryAddress() {
1319
1235
  return SHERWOOD().FACTORY;
@@ -1375,23 +1291,13 @@ async function setTextRecord(subdomain, key, value, vaultAddress) {
1375
1291
  const l2Registry = ENS().L2_REGISTRY;
1376
1292
  const node = getSubdomainNode(subdomain);
1377
1293
  setVaultAddress(vaultAddress);
1378
- try {
1379
- const addTargetHash = await addTarget(l2Registry);
1380
- await waitForTx(addTargetHash);
1381
- } catch (err) {
1382
- const msg = err instanceof Error ? err.message : String(err);
1383
- if (!msg.includes("0xff0e53f8") && !msg.includes("TargetAlreadyAllowed")) {
1384
- throw err;
1385
- }
1386
- }
1387
1294
  const setTextData = encodeFunctionData2({
1388
1295
  abi: L2_REGISTRY_ABI,
1389
1296
  functionName: "setText",
1390
1297
  args: [node, key, value]
1391
1298
  });
1392
1299
  return executeBatch(
1393
- [{ target: l2Registry, data: setTextData, value: 0n }],
1394
- 0n
1300
+ [{ target: l2Registry, data: setTextData, value: 0n }]
1395
1301
  );
1396
1302
  }
1397
1303
  async function getTextRecord(subdomain, key) {
@@ -1447,9 +1353,6 @@ export {
1447
1353
  ragequit,
1448
1354
  executeBatch,
1449
1355
  simulateBatch,
1450
- addTarget,
1451
- removeTarget,
1452
- getAllowedTargets,
1453
1356
  approveDepositor,
1454
1357
  removeDepositor,
1455
1358
  isAgent,
@@ -1461,4 +1364,4 @@ export {
1461
1364
  setTextRecord,
1462
1365
  getTextRecord
1463
1366
  };
1464
- //# sourceMappingURL=chunk-J4J7VSMJ.js.map
1367
+ //# sourceMappingURL=chunk-3WZLP6BH.js.map