@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.
- package/dist/{chat-YHUZPD54.js → chat-HHXJOCKN.js} +39 -7
- package/dist/chat-HHXJOCKN.js.map +1 -0
- package/dist/{chunk-J4J7VSMJ.js → chunk-3WZLP6BH.js} +50 -147
- package/dist/chunk-3WZLP6BH.js.map +1 -0
- package/dist/index.js +22 -146
- package/dist/index.js.map +1 -1
- package/dist/{xmtp-BQAJYBMY.js → xmtp-PICTODCB.js} +6 -5
- package/dist/xmtp-PICTODCB.js.map +1 -0
- package/package.json +1 -1
- package/dist/chat-YHUZPD54.js.map +0 -1
- package/dist/chunk-J4J7VSMJ.js.map +0 -1
- package/dist/xmtp-BQAJYBMY.js.map +0 -1
|
@@ -5,13 +5,13 @@ import {
|
|
|
5
5
|
getTextRecord,
|
|
6
6
|
resolveSyndicate,
|
|
7
7
|
setTextRecord
|
|
8
|
-
} from "./chunk-
|
|
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-
|
|
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
|
|
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,
|
|
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
|
|
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.
|
|
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-
|
|
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: "
|
|
101
|
-
STRATEGY_REGISTRY: "
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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: "
|
|
1207
|
+
functionName: "getAgentCount"
|
|
1284
1208
|
}),
|
|
1285
1209
|
client.readContract({
|
|
1286
1210
|
address: vaultAddress,
|
|
1287
1211
|
abi: SYNDICATE_VAULT_ABI,
|
|
1288
|
-
functionName: "
|
|
1212
|
+
functionName: "redemptionsLocked"
|
|
1289
1213
|
}),
|
|
1290
1214
|
client.readContract({
|
|
1291
1215
|
address: vaultAddress,
|
|
1292
1216
|
abi: SYNDICATE_VAULT_ABI,
|
|
1293
|
-
functionName: "
|
|
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
|
-
|
|
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-
|
|
1367
|
+
//# sourceMappingURL=chunk-3WZLP6BH.js.map
|