@sherwoodagent/cli 0.41.5 → 0.42.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.
Files changed (48) hide show
  1. package/dist/{addresses-RQ7DTIBS.js → addresses-DCQMJJFI.js} +3 -3
  2. package/dist/{agent-SXEV65ME.js → agent-5YEJ6W6W.js} +5 -5
  3. package/dist/{chat-D5OF4OTL.js → chat-UWJ6JBFE.js} +7 -7
  4. package/dist/{chunk-YRCJ3NUX.js → chunk-4OAZ7TP5.js} +4 -4
  5. package/dist/{chunk-4QNPS5LI.js → chunk-5Q3VT6NQ.js} +24 -5
  6. package/dist/{chunk-4QNPS5LI.js.map → chunk-5Q3VT6NQ.js.map} +1 -1
  7. package/dist/{chunk-XZHIZVJ3.js → chunk-6U3A6ZJ2.js} +4 -4
  8. package/dist/{chunk-2YOXRATG.js → chunk-FOOZC4AM.js} +11 -1
  9. package/dist/{chunk-2YOXRATG.js.map → chunk-FOOZC4AM.js.map} +1 -1
  10. package/dist/{chunk-D2UYGUV2.js → chunk-GMVDHSCF.js} +2 -2
  11. package/dist/{chunk-DG2K6CPY.js → chunk-JNDEZFXW.js} +110 -68
  12. package/dist/chunk-JNDEZFXW.js.map +1 -0
  13. package/dist/{chunk-M2NJPATE.js → chunk-SWKHSKDH.js} +2 -2
  14. package/dist/{chunk-YYB4TF6D.js → chunk-T2IA6CCW.js} +4 -4
  15. package/dist/{chunk-MT3VS3GZ.js → chunk-XAUMJZU2.js} +2 -2
  16. package/dist/{client-VSBQM2LU.js → client-DRVUILER.js} +3 -3
  17. package/dist/{eas-QNZKCEP7.js → eas-KBU2BAOD.js} +15 -5
  18. package/dist/{governor-RE6IJMUJ.js → governor-KH7RNH2E.js} +5 -5
  19. package/dist/index.js +161 -43
  20. package/dist/index.js.map +1 -1
  21. package/dist/{network-R5NFPIAF.js → network-3HB46JMQ.js} +6 -4
  22. package/dist/{price-GY3JQ2OK.js → price-TTQWI672.js} +4 -4
  23. package/dist/{research-SVWNPHIN.js → research-J3HYU3N6.js} +7 -7
  24. package/dist/{research-PB22GPXC.js → research-NR4VC5LN.js} +4 -4
  25. package/dist/{session-3Z6I2IM3.js → session-NUPHC6ZN.js} +8 -8
  26. package/dist/{trade-E5HSZE44.js → trade-VGECC4QZ.js} +13 -13
  27. package/dist/{xmtp-VPGQE4IP.js → xmtp-JO7W6RFK.js} +5 -5
  28. package/package.json +1 -1
  29. package/dist/chunk-DG2K6CPY.js.map +0 -1
  30. /package/dist/{addresses-RQ7DTIBS.js.map → addresses-DCQMJJFI.js.map} +0 -0
  31. /package/dist/{agent-SXEV65ME.js.map → agent-5YEJ6W6W.js.map} +0 -0
  32. /package/dist/{chat-D5OF4OTL.js.map → chat-UWJ6JBFE.js.map} +0 -0
  33. /package/dist/{chunk-YRCJ3NUX.js.map → chunk-4OAZ7TP5.js.map} +0 -0
  34. /package/dist/{chunk-XZHIZVJ3.js.map → chunk-6U3A6ZJ2.js.map} +0 -0
  35. /package/dist/{chunk-D2UYGUV2.js.map → chunk-GMVDHSCF.js.map} +0 -0
  36. /package/dist/{chunk-M2NJPATE.js.map → chunk-SWKHSKDH.js.map} +0 -0
  37. /package/dist/{chunk-YYB4TF6D.js.map → chunk-T2IA6CCW.js.map} +0 -0
  38. /package/dist/{chunk-MT3VS3GZ.js.map → chunk-XAUMJZU2.js.map} +0 -0
  39. /package/dist/{client-VSBQM2LU.js.map → client-DRVUILER.js.map} +0 -0
  40. /package/dist/{eas-QNZKCEP7.js.map → eas-KBU2BAOD.js.map} +0 -0
  41. /package/dist/{governor-RE6IJMUJ.js.map → governor-KH7RNH2E.js.map} +0 -0
  42. /package/dist/{network-R5NFPIAF.js.map → network-3HB46JMQ.js.map} +0 -0
  43. /package/dist/{price-GY3JQ2OK.js.map → price-TTQWI672.js.map} +0 -0
  44. /package/dist/{research-SVWNPHIN.js.map → research-J3HYU3N6.js.map} +0 -0
  45. /package/dist/{research-PB22GPXC.js.map → research-NR4VC5LN.js.map} +0 -0
  46. /package/dist/{session-3Z6I2IM3.js.map → session-NUPHC6ZN.js.map} +0 -0
  47. /package/dist/{trade-E5HSZE44.js.map → trade-VGECC4QZ.js.map} +0 -0
  48. /package/dist/{xmtp-VPGQE4IP.js.map → xmtp-JO7W6RFK.js.map} +0 -0
@@ -11,8 +11,9 @@ import {
11
11
  hyperevmTestnet,
12
12
  isTestnet,
13
13
  robinhoodTestnet,
14
- setNetwork
15
- } from "./chunk-2YOXRATG.js";
14
+ setNetwork,
15
+ withNetwork
16
+ } from "./chunk-FOOZC4AM.js";
16
17
  import "./chunk-4EHI4SKM.js";
17
18
  export {
18
19
  CHAIN_REGISTRY,
@@ -27,6 +28,7 @@ export {
27
28
  hyperevmTestnet,
28
29
  isTestnet,
29
30
  robinhoodTestnet,
30
- setNetwork
31
+ setNetwork,
32
+ withNetwork
31
33
  };
32
- //# sourceMappingURL=network-R5NFPIAF.js.map
34
+ //# sourceMappingURL=network-3HB46JMQ.js.map
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  SYNTHRA,
3
3
  UNISWAP
4
- } from "./chunk-MT3VS3GZ.js";
4
+ } from "./chunk-XAUMJZU2.js";
5
5
  import {
6
6
  getPublicClient
7
- } from "./chunk-M2NJPATE.js";
7
+ } from "./chunk-SWKHSKDH.js";
8
8
  import {
9
9
  getNetwork
10
- } from "./chunk-2YOXRATG.js";
10
+ } from "./chunk-FOOZC4AM.js";
11
11
  import "./chunk-4EHI4SKM.js";
12
12
  import {
13
13
  UNISWAP_QUOTER_V2_ABI
@@ -155,4 +155,4 @@ export {
155
155
  getTokenPriceInAsset,
156
156
  getTokenPricesInAsset
157
157
  };
158
- //# sourceMappingURL=price-GY3JQ2OK.js.map
158
+ //# sourceMappingURL=price-TTQWI672.js.map
@@ -2,12 +2,12 @@ import {
2
2
  MESSARI_COST_ESTIMATE,
3
3
  NANSEN_COST_ESTIMATE,
4
4
  getResearchProvider
5
- } from "./chunk-D2UYGUV2.js";
5
+ } from "./chunk-GMVDHSCF.js";
6
6
  import {
7
7
  formatContractError,
8
8
  getAccount
9
- } from "./chunk-M2NJPATE.js";
10
- import "./chunk-2YOXRATG.js";
9
+ } from "./chunk-SWKHSKDH.js";
10
+ import "./chunk-FOOZC4AM.js";
11
11
  import "./chunk-4EHI4SKM.js";
12
12
 
13
13
  // src/commands/research.ts
@@ -16,7 +16,7 @@ import ora from "ora";
16
16
  import { confirm } from "@inquirer/prompts";
17
17
  import { isAddress } from "viem";
18
18
  async function loadXmtp() {
19
- return import("./xmtp-VPGQE4IP.js");
19
+ return import("./xmtp-JO7W6RFK.js");
20
20
  }
21
21
  var COST_ESTIMATES = {
22
22
  messari: MESSARI_COST_ESTIMATE,
@@ -83,7 +83,7 @@ function formatValue(value) {
83
83
  }
84
84
  async function postResearch(syndicateName, result, prompt) {
85
85
  const { pinJSON } = await import("./ipfs-IGXLLJCF.js");
86
- const { createResearchAttestation, getEasScanUrl } = await import("./eas-QNZKCEP7.js");
86
+ const { createResearchAttestation, getEasScanUrl } = await import("./eas-KBU2BAOD.js");
87
87
  const xmtp = await loadXmtp();
88
88
  const pinSpinner = ora("Pinning research result to IPFS...").start();
89
89
  let resultUri;
@@ -113,7 +113,7 @@ async function postResearch(syndicateName, result, prompt) {
113
113
  let attestationUid;
114
114
  try {
115
115
  const { getChainContracts } = await import("./config-YRERDZSL.js");
116
- const { getChain } = await import("./network-R5NFPIAF.js");
116
+ const { getChain } = await import("./network-3HB46JMQ.js");
117
117
  const vaultRecipient = getChainContracts(getChain().id).vault;
118
118
  const { uid } = await createResearchAttestation(
119
119
  result.provider,
@@ -312,4 +312,4 @@ function registerResearchCommands(program) {
312
312
  export {
313
313
  registerResearchCommands
314
314
  };
315
- //# sourceMappingURL=research-SVWNPHIN.js.map
315
+ //# sourceMappingURL=research-J3HYU3N6.js.map
@@ -2,13 +2,13 @@ import {
2
2
  MessariProvider,
3
3
  NansenProvider,
4
4
  getResearchProvider
5
- } from "./chunk-D2UYGUV2.js";
6
- import "./chunk-M2NJPATE.js";
7
- import "./chunk-2YOXRATG.js";
5
+ } from "./chunk-GMVDHSCF.js";
6
+ import "./chunk-SWKHSKDH.js";
7
+ import "./chunk-FOOZC4AM.js";
8
8
  import "./chunk-4EHI4SKM.js";
9
9
  export {
10
10
  MessariProvider,
11
11
  NansenProvider,
12
12
  getResearchProvider
13
13
  };
14
- //# sourceMappingURL=research-PB22GPXC.js.map
14
+ //# sourceMappingURL=research-NR4VC5LN.js.map
@@ -6,18 +6,18 @@ import {
6
6
  } from "./chunk-W2ZUPR3W.js";
7
7
  import {
8
8
  resolveSyndicate
9
- } from "./chunk-4QNPS5LI.js";
9
+ } from "./chunk-5Q3VT6NQ.js";
10
10
  import {
11
11
  PROPOSAL_STATES,
12
12
  getProposal
13
- } from "./chunk-YYB4TF6D.js";
13
+ } from "./chunk-T2IA6CCW.js";
14
14
  import {
15
15
  SHERWOOD
16
- } from "./chunk-MT3VS3GZ.js";
16
+ } from "./chunk-XAUMJZU2.js";
17
17
  import {
18
18
  getPublicClient
19
- } from "./chunk-M2NJPATE.js";
20
- import "./chunk-2YOXRATG.js";
19
+ } from "./chunk-SWKHSKDH.js";
20
+ import "./chunk-FOOZC4AM.js";
21
21
  import {
22
22
  loadConfig
23
23
  } from "./chunk-4EHI4SKM.js";
@@ -187,7 +187,7 @@ async function enrichProposalEvents(events, metadataCache) {
187
187
 
188
188
  // src/commands/session.ts
189
189
  async function loadXmtp() {
190
- return import("./xmtp-VPGQE4IP.js");
190
+ return import("./xmtp-JO7W6RFK.js");
191
191
  }
192
192
  async function resolveGovernor(vaultAddress) {
193
193
  const client = getPublicClient();
@@ -435,7 +435,7 @@ function registerSessionCommands(program) {
435
435
  );
436
436
  session.command("cron <name>").description("Manage participation crons (OpenClaw agents)").option("--remove", "Remove participation crons", false).option("--status", "Show cron status", false).action(async (name, opts) => {
437
437
  const { isOpenClaw, registerSyndicateCrons, unregisterSyndicateCrons, getSyndicateCronStatus } = await import("./cron-EOULYO3R.js");
438
- const { isTestnet } = await import("./network-R5NFPIAF.js");
438
+ const { isTestnet } = await import("./network-3HB46JMQ.js");
439
439
  const { getNotifyTo } = await import("./config-YRERDZSL.js");
440
440
  if (!isOpenClaw()) {
441
441
  console.log(chalk.yellow("Not running on OpenClaw \u2014 cron commands unavailable"));
@@ -477,4 +477,4 @@ function registerSessionCommands(program) {
477
477
  export {
478
478
  registerSessionCommands
479
479
  };
480
- //# sourceMappingURL=session-3Z6I2IM3.js.map
480
+ //# sourceMappingURL=session-NUPHC6ZN.js.map
@@ -1,22 +1,22 @@
1
1
  import {
2
2
  getResearchProvider
3
- } from "./chunk-D2UYGUV2.js";
3
+ } from "./chunk-GMVDHSCF.js";
4
4
  import {
5
5
  UniswapProvider,
6
6
  chatCompletion,
7
7
  getQuote
8
- } from "./chunk-XZHIZVJ3.js";
8
+ } from "./chunk-6U3A6ZJ2.js";
9
9
  import {
10
10
  TOKENS
11
- } from "./chunk-MT3VS3GZ.js";
11
+ } from "./chunk-XAUMJZU2.js";
12
12
  import {
13
13
  formatContractError,
14
14
  getAccount,
15
15
  getPublicClient
16
- } from "./chunk-M2NJPATE.js";
16
+ } from "./chunk-SWKHSKDH.js";
17
17
  import {
18
18
  getExplorerUrl
19
- } from "./chunk-2YOXRATG.js";
19
+ } from "./chunk-FOOZC4AM.js";
20
20
  import {
21
21
  loadConfig,
22
22
  saveConfig
@@ -332,7 +332,7 @@ async function getCurrentPrice(tokenAddress, tokenDecimals, feeTier) {
332
332
  // src/commands/trade.ts
333
333
  var uniswap = new UniswapProvider();
334
334
  async function loadXmtp() {
335
- return import("./xmtp-VPGQE4IP.js");
335
+ return import("./xmtp-JO7W6RFK.js");
336
336
  }
337
337
  var ETH_ADDRESS = "0x0000000000000000000000000000000000000000";
338
338
  var KNOWN_MEMECOINS = {
@@ -516,7 +516,7 @@ function registerTradeCommands(program) {
516
516
  }
517
517
  const wrapSpinner = ora("Wrapping ETH \u2192 WETH...").start();
518
518
  try {
519
- const { writeContractWithRetry, waitForReceipt: waitForReceiptFn } = await import("./client-VSBQM2LU.js");
519
+ const { writeContractWithRetry, waitForReceipt: waitForReceiptFn } = await import("./client-DRVUILER.js");
520
520
  const wethAddr = TOKENS().WETH;
521
521
  const wrapHash = await writeContractWithRetry({
522
522
  address: wethAddr,
@@ -525,7 +525,7 @@ function registerTradeCommands(program) {
525
525
  args: [],
526
526
  value: inputAmount,
527
527
  account,
528
- chain: (await import("./network-R5NFPIAF.js")).getChain()
528
+ chain: (await import("./network-3HB46JMQ.js")).getChain()
529
529
  });
530
530
  await waitForReceiptFn(wrapHash);
531
531
  wrapSpinner.succeed(`Wrapped ${opts.amount} ETH \u2192 WETH`);
@@ -639,9 +639,9 @@ function registerTradeCommands(program) {
639
639
  }
640
640
  console.log(` Tx: ${chalk.dim(getExplorerUrl(txHash))}`);
641
641
  try {
642
- const { createTradeAttestation, getEasScanUrl } = await import("./eas-QNZKCEP7.js");
642
+ const { createTradeAttestation, getEasScanUrl } = await import("./eas-KBU2BAOD.js");
643
643
  const { getChainContracts } = await import("./config-YRERDZSL.js");
644
- const { getChain: getActiveChain } = await import("./network-R5NFPIAF.js");
644
+ const { getChain: getActiveChain } = await import("./network-3HB46JMQ.js");
645
645
  const vaultRecipient = getChainContracts(getActiveChain().id).vault;
646
646
  const { uid } = await createTradeAttestation(
647
647
  inputAddr,
@@ -767,9 +767,9 @@ function registerTradeCommands(program) {
767
767
  }
768
768
  console.log(` Tx: ${chalk.dim(getExplorerUrl(txHash))}`);
769
769
  try {
770
- const { createTradeAttestation, getEasScanUrl } = await import("./eas-QNZKCEP7.js");
770
+ const { createTradeAttestation, getEasScanUrl } = await import("./eas-KBU2BAOD.js");
771
771
  const { getChainContracts } = await import("./config-YRERDZSL.js");
772
- const { getChain: getActiveChain } = await import("./network-R5NFPIAF.js");
772
+ const { getChain: getActiveChain } = await import("./network-3HB46JMQ.js");
773
773
  const vaultRecipient = getChainContracts(getActiveChain().id).vault;
774
774
  const { uid } = await createTradeAttestation(
775
775
  tokenAddr,
@@ -944,4 +944,4 @@ function sleep(ms) {
944
944
  export {
945
945
  registerTradeCommands
946
946
  };
947
- //# sourceMappingURL=trade-E5HSZE44.js.map
947
+ //# sourceMappingURL=trade-VGECC4QZ.js.map
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  getTextRecord
3
- } from "./chunk-4QNPS5LI.js";
4
- import "./chunk-MT3VS3GZ.js";
3
+ } from "./chunk-5Q3VT6NQ.js";
4
+ import "./chunk-XAUMJZU2.js";
5
5
  import {
6
6
  getAccount
7
- } from "./chunk-M2NJPATE.js";
7
+ } from "./chunk-SWKHSKDH.js";
8
8
  import {
9
9
  getChainConfig
10
- } from "./chunk-2YOXRATG.js";
10
+ } from "./chunk-FOOZC4AM.js";
11
11
  import {
12
12
  cacheGroupId,
13
13
  getCachedGroupId,
@@ -281,4 +281,4 @@ export {
281
281
  sendReaction,
282
282
  streamMessages
283
283
  };
284
- //# sourceMappingURL=xmtp-VPGQE4IP.js.map
284
+ //# sourceMappingURL=xmtp-JO7W6RFK.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sherwoodagent/cli",
3
- "version": "0.41.5",
3
+ "version": "0.42.0",
4
4
  "description": "CLI for agent-managed investment syndicates — onchain DeFi syndicates with XMTP chat",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/eas.ts"],"sourcesContent":["/**\n * EAS (Ethereum Attestation Service) wrapper for syndicate join requests and approvals.\n *\n * Uses viem for on-chain writes and the EAS GraphQL API for queries.\n * No ethers dependency — attestation data is encoded with viem's encodeAbiParameters.\n */\n\nimport type { Address, Hex } from \"viem\";\nimport { encodeAbiParameters, parseAbiParameters, decodeAbiParameters } from \"viem\";\nimport { getPublicClient, getAccount, writeContractWithRetry, waitForReceipt } from \"./client.js\";\nimport { getChain, getNetwork, getChainConfig } from \"./network.js\";\nimport { EAS_CONTRACTS, EAS_SCHEMAS } from \"./addresses.js\";\nimport { EAS_ABI } from \"./abis.js\";\n\n// ── Schema definitions ──\n\nconst ZERO_BYTES32 = \"0x0000000000000000000000000000000000000000000000000000000000000000\" as Hex;\n\n// keccak256(\"Attested(address,address,bytes32,bytes32)\")\nconst ATTESTED_TOPIC = \"0x8bf46bf4cfd674fa735a3d63ec1c9ad4153f033c290341f3a588b75685141b35\" as Hex;\n\nconst JOIN_REQUEST_PARAMS = parseAbiParameters(\"uint256, uint256, address, string\");\nconst AGENT_APPROVED_PARAMS = parseAbiParameters(\"uint256, uint256, address\");\nconst X402_RESEARCH_PARAMS = parseAbiParameters(\"string, string, string, string, string\");\nconst VENICE_PROVISION_PARAMS = parseAbiParameters(\"address, string\");\nconst VENICE_INFERENCE_PARAMS = parseAbiParameters(\"string, uint256, uint256, string\");\nconst TRADE_EXECUTED_PARAMS = parseAbiParameters(\"address, address, uint256, string, string, string\");\n\nfunction assertSchemasRegistered() {\n const schemas = EAS_SCHEMAS();\n if (schemas.SYNDICATE_JOIN_REQUEST === ZERO_BYTES32 || schemas.AGENT_APPROVED === ZERO_BYTES32) {\n throw new Error(\n \"EAS schemas not registered. Run: npx tsx scripts/register-eas-schemas.ts --testnet\",\n );\n }\n}\n\n// ── GraphQL ──\n\nfunction getEasGraphqlUrl(): string {\n const url = getChainConfig().easGraphqlUrl;\n if (!url) {\n throw new Error(\n `EAS is not available on ${getNetwork()}. Attestation operations require a chain with EAS (e.g. base, base-sepolia).`,\n );\n }\n return url;\n}\n\nexport function getEasScanUrl(uid: Hex): string {\n const host = getChainConfig().easScanHost;\n if (!host) {\n throw new Error(`EAS scan is not available on ${getNetwork()}.`);\n }\n return `https://${host}/attestation/view/${uid}`;\n}\n\n// ── Attestation Creation ──\n\n/**\n * Extract the attestation UID from a transaction receipt.\n * The EAS contract emits: event Attested(address indexed recipient, address indexed attester, bytes32 uid, bytes32 indexed schemaUID)\n * uid is a non-indexed parameter in the event data.\n */\nfunction extractAttestationUid(receipt: { logs: readonly { topics: readonly Hex[]; data: Hex }[] }): Hex {\n for (const log of receipt.logs) {\n // Match the Attested event signature to avoid false positives from other events\n if (log.topics[0] !== ATTESTED_TOPIC) continue;\n // Attested event has 4 topics (sig + 3 indexed) and data contains the uid (bytes32)\n if (log.topics.length === 4 && log.data.length >= 66) {\n return (\"0x\" + log.data.slice(2, 66)) as Hex;\n }\n }\n throw new Error(\"Could not extract attestation UID from transaction receipt\");\n}\n\n// ── Referral Helpers ──\n\nconst REF_PREFIX_RE = /^\\[ref:(\\d+)\\]\\s*/;\n\n/**\n * Format a message with an optional referrer prefix.\n * e.g. formatMessageWithRef(\"Hello\", 42) → \"[ref:42] Hello\"\n */\nexport function formatMessageWithRef(message: string, referrerAgentId?: number): string {\n if (referrerAgentId == null) return message;\n return `[ref:${referrerAgentId}] ${message}`;\n}\n\n/**\n * Parse a referrer agentId from a message, if present.\n * e.g. parseReferrer(\"[ref:42] Hello\") → 42\n */\nexport function parseReferrer(message: string): number | null {\n const match = message.match(REF_PREFIX_RE);\n return match ? parseInt(match[1], 10) : null;\n}\n\n/**\n * Strip the referrer prefix from a message, returning the clean message.\n */\nexport function stripReferrerPrefix(message: string): string {\n return message.replace(REF_PREFIX_RE, \"\");\n}\n\n/**\n * Create a SYNDICATE_JOIN_REQUEST attestation.\n * Attester: the calling agent. Recipient: the syndicate creator.\n * If referrerAgentId is provided, it's embedded in the message as a [ref:N] prefix.\n */\nexport async function createJoinRequest(\n syndicateId: bigint,\n agentId: bigint,\n vault: Address,\n creatorAddress: Address,\n message: string,\n referrerAgentId?: number,\n): Promise<{ uid: Hex; hash: Hex }> {\n assertSchemasRegistered();\n const client = getPublicClient();\n\n const encodedMessage = formatMessageWithRef(message, referrerAgentId);\n const data = encodeAbiParameters(JOIN_REQUEST_PARAMS, [\n syndicateId, agentId, vault, encodedMessage,\n ]);\n\n const hash = await writeContractWithRetry({\n account: getAccount(),\n chain: getChain(),\n address: EAS_CONTRACTS().EAS,\n abi: EAS_ABI,\n functionName: \"attest\",\n args: [{\n schema: EAS_SCHEMAS().SYNDICATE_JOIN_REQUEST,\n data: {\n recipient: creatorAddress,\n expirationTime: 0n,\n revocable: true,\n refUID: ZERO_BYTES32,\n data,\n value: 0n,\n },\n }],\n value: 0n,\n });\n\n const receipt = await waitForReceipt(hash);\n const uid = extractAttestationUid(receipt);\n\n return { uid, hash };\n}\n\n/**\n * Create an AGENT_APPROVED attestation.\n * Attester: the syndicate creator. Recipient: the agent wallet.\n */\nexport async function createApproval(\n syndicateId: bigint,\n agentId: bigint,\n vault: Address,\n agentAddress: Address,\n): Promise<{ uid: Hex; hash: Hex }> {\n assertSchemasRegistered();\n const client = getPublicClient();\n\n const data = encodeAbiParameters(AGENT_APPROVED_PARAMS, [\n syndicateId, agentId, vault,\n ]);\n\n const hash = await writeContractWithRetry({\n account: getAccount(),\n chain: getChain(),\n address: EAS_CONTRACTS().EAS,\n abi: EAS_ABI,\n functionName: \"attest\",\n args: [{\n schema: EAS_SCHEMAS().AGENT_APPROVED,\n data: {\n recipient: agentAddress,\n expirationTime: 0n,\n revocable: true,\n refUID: ZERO_BYTES32,\n data,\n value: 0n,\n },\n }],\n value: 0n,\n });\n\n const receipt = await waitForReceipt(hash);\n const uid = extractAttestationUid(receipt);\n\n return { uid, hash };\n}\n\n/**\n * Revoke an attestation. Only the original attester can revoke.\n */\nexport async function revokeAttestation(\n schemaUid: Hex,\n attestationUid: Hex,\n): Promise<Hex> {\n return writeContractWithRetry({\n account: getAccount(),\n chain: getChain(),\n address: EAS_CONTRACTS().EAS,\n abi: EAS_ABI,\n functionName: \"revoke\",\n args: [{\n schema: schemaUid,\n data: {\n uid: attestationUid,\n value: 0n,\n },\n }],\n value: 0n,\n });\n}\n\n/**\n * Create an X402_RESEARCH attestation — records a research query on-chain.\n * Attester: the agent. Recipient: vault address (links to syndicate) or agent itself.\n * Schema: \"string provider, string queryType, string prompt, string costUsdc, string resultUri\"\n */\nexport async function createResearchAttestation(\n provider: string,\n queryType: string,\n prompt: string,\n costUsdc: string,\n resultUri: string,\n recipient?: Address,\n): Promise<{ uid: Hex; hash: Hex }> {\n const schemas = EAS_SCHEMAS();\n if (schemas.X402_RESEARCH === ZERO_BYTES32) {\n throw new Error(\n \"X402_RESEARCH schema not registered. Run: npx tsx scripts/register-eas-schemas.ts --testnet\",\n );\n }\n\n const client = getPublicClient();\n const account = getAccount();\n\n const data = encodeAbiParameters(X402_RESEARCH_PARAMS, [\n provider, queryType, prompt, costUsdc, resultUri,\n ]);\n\n const hash = await writeContractWithRetry({\n account,\n chain: getChain(),\n address: EAS_CONTRACTS().EAS,\n abi: EAS_ABI,\n functionName: \"attest\",\n args: [{\n schema: schemas.X402_RESEARCH,\n data: {\n recipient: recipient ?? account.address,\n expirationTime: 0n,\n revocable: false,\n refUID: ZERO_BYTES32,\n data,\n value: 0n,\n },\n }],\n value: 0n,\n });\n\n const receipt = await waitForReceipt(hash);\n const uid = extractAttestationUid(receipt);\n\n return { uid, hash };\n}\n\n/**\n * Create a VENICE_PROVISION attestation — records that an agent provisioned a Venice API key.\n * Schema: \"address agent, string status\"\n */\nexport async function createVeniceProvisionAttestation(\n agent: Address,\n): Promise<{ uid: Hex; hash: Hex }> {\n const schemas = EAS_SCHEMAS();\n if (schemas.VENICE_PROVISION === ZERO_BYTES32) return skipAttestation(\"VENICE_PROVISION\");\n\n const client = getPublicClient();\n const account = getAccount();\n\n const data = encodeAbiParameters(VENICE_PROVISION_PARAMS, [agent, \"provisioned\"]);\n\n const hash = await writeContractWithRetry({\n account,\n chain: getChain(),\n address: EAS_CONTRACTS().EAS,\n abi: EAS_ABI,\n functionName: \"attest\",\n args: [{\n schema: schemas.VENICE_PROVISION,\n data: {\n recipient: agent,\n expirationTime: 0n,\n revocable: false,\n refUID: ZERO_BYTES32,\n data,\n value: 0n,\n },\n }],\n value: 0n,\n });\n\n const receipt = await waitForReceipt(hash);\n const uid = extractAttestationUid(receipt);\n return { uid, hash };\n}\n\n/**\n * Create a VENICE_INFERENCE attestation — records an inference call.\n * Attester: the agent. Recipient: vault address (links to syndicate) or agent itself.\n * Schema: \"string model, uint256 promptTokens, uint256 completionTokens, string promptHash\"\n */\nexport async function createVeniceInferenceAttestation(\n model: string,\n promptTokens: number,\n completionTokens: number,\n promptHash: string,\n recipient?: Address,\n): Promise<{ uid: Hex; hash: Hex }> {\n const schemas = EAS_SCHEMAS();\n if (schemas.VENICE_INFERENCE === ZERO_BYTES32) return skipAttestation(\"VENICE_INFERENCE\");\n\n const client = getPublicClient();\n const account = getAccount();\n\n const data = encodeAbiParameters(VENICE_INFERENCE_PARAMS, [\n model,\n BigInt(promptTokens),\n BigInt(completionTokens),\n promptHash,\n ]);\n\n const hash = await writeContractWithRetry({\n account,\n chain: getChain(),\n address: EAS_CONTRACTS().EAS,\n abi: EAS_ABI,\n functionName: \"attest\",\n args: [{\n schema: schemas.VENICE_INFERENCE,\n data: {\n recipient: recipient ?? account.address,\n expirationTime: 0n,\n revocable: false,\n refUID: ZERO_BYTES32,\n data,\n value: 0n,\n },\n }],\n value: 0n,\n });\n\n const receipt = await waitForReceipt(hash);\n const uid = extractAttestationUid(receipt);\n return { uid, hash };\n}\n\n/**\n * Create a TRADE_EXECUTED attestation — records a swap on-chain.\n * Attester: the agent. Recipient: vault address (links to syndicate) or agent itself.\n * Schema: \"address tokenIn, address tokenOut, uint256 amountIn, string amountOut, string txHash, string routing\"\n */\nexport async function createTradeAttestation(\n tokenIn: Address,\n tokenOut: Address,\n amountIn: bigint,\n amountOut: string,\n txHash: string,\n routing: string,\n recipient?: Address,\n): Promise<{ uid: Hex; hash: Hex }> {\n const schemas = EAS_SCHEMAS();\n if (schemas.TRADE_EXECUTED === ZERO_BYTES32) return skipAttestation(\"TRADE_EXECUTED\");\n\n const client = getPublicClient();\n const account = getAccount();\n\n const data = encodeAbiParameters(TRADE_EXECUTED_PARAMS, [\n tokenIn, tokenOut, amountIn, amountOut, txHash, routing,\n ]);\n\n const hash = await writeContractWithRetry({\n account,\n chain: getChain(),\n address: EAS_CONTRACTS().EAS,\n abi: EAS_ABI,\n functionName: \"attest\",\n args: [{\n schema: schemas.TRADE_EXECUTED,\n data: {\n recipient: recipient ?? account.address,\n expirationTime: 0n,\n revocable: false,\n refUID: ZERO_BYTES32,\n data,\n value: 0n,\n },\n }],\n value: 0n,\n });\n\n const receipt = await waitForReceipt(hash);\n const uid = extractAttestationUid(receipt);\n return { uid, hash };\n}\n\n/** Skip attestation gracefully when schema isn't registered on this chain. */\nfunction skipAttestation(name: string): { uid: Hex; hash: Hex } {\n return { uid: ZERO_BYTES32, hash: ZERO_BYTES32 };\n}\n\n// ── Attestation Queries ──\n\nexport interface JoinRequestAttestation {\n uid: Hex;\n attester: Address;\n recipient: Address;\n time: number;\n decoded: {\n syndicateId: bigint;\n agentId: bigint;\n vault: Address;\n message: string;\n };\n}\n\n/**\n * Query pending (non-revoked) join requests for a given recipient (creator address).\n * Uses the EAS GraphQL API.\n */\nexport interface ApprovalAttestation {\n uid: Hex;\n attester: Address;\n recipient: Address;\n time: number;\n decoded: {\n syndicateId: bigint;\n agentId: bigint;\n vault: Address;\n };\n}\n\n/**\n * Query existing (non-revoked) AGENT_APPROVED attestations created by a given attester (creator).\n * Used to check for duplicates before creating a new approval and to filter already-approved agents from requests.\n */\nexport async function queryApprovals(\n attester: Address,\n): Promise<ApprovalAttestation[]> {\n assertSchemasRegistered();\n const schemaUid = EAS_SCHEMAS().AGENT_APPROVED;\n const url = getEasGraphqlUrl();\n\n const query = `\n query Approvals($schemaId: String!, $attester: String!) {\n attestations(\n where: {\n schemaId: { equals: $schemaId }\n attester: { equals: $attester }\n revoked: { equals: false }\n }\n orderBy: [{ time: desc }]\n ) {\n id\n attester\n recipient\n time\n data\n }\n }\n `;\n\n const response = await fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n query,\n variables: { schemaId: schemaUid, attester },\n }),\n });\n\n if (!response.ok) {\n throw new Error(`EAS GraphQL query failed: ${response.statusText}`);\n }\n\n const json = await response.json() as {\n data?: {\n attestations: Array<{\n id: string;\n attester: string;\n recipient: string;\n time: number;\n data: string;\n }>;\n };\n };\n\n if (!json.data?.attestations) return [];\n\n return json.data.attestations.map((a) => {\n const decoded = decodeAbiParameters(AGENT_APPROVED_PARAMS, a.data as Hex);\n return {\n uid: a.id as Hex,\n attester: a.attester as Address,\n recipient: a.recipient as Address,\n time: a.time,\n decoded: {\n syndicateId: decoded[0],\n agentId: decoded[1],\n vault: decoded[2],\n },\n };\n });\n}\n\nexport async function queryJoinRequests(\n recipient: Address,\n): Promise<JoinRequestAttestation[]> {\n assertSchemasRegistered();\n const schemaUid = EAS_SCHEMAS().SYNDICATE_JOIN_REQUEST;\n const url = getEasGraphqlUrl();\n\n const query = `\n query JoinRequests($schemaId: String!, $recipient: String!) {\n attestations(\n where: {\n schemaId: { equals: $schemaId }\n recipient: { equals: $recipient }\n revoked: { equals: false }\n }\n orderBy: [{ time: desc }]\n ) {\n id\n attester\n recipient\n time\n data\n }\n }\n `;\n\n const response = await fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n query,\n variables: { schemaId: schemaUid, recipient },\n }),\n });\n\n if (!response.ok) {\n throw new Error(`EAS GraphQL query failed: ${response.statusText}`);\n }\n\n const json = await response.json() as {\n data?: {\n attestations: Array<{\n id: string;\n attester: string;\n recipient: string;\n time: number;\n data: string;\n }>;\n };\n };\n\n if (!json.data?.attestations) return [];\n\n return json.data.attestations.map((a) => {\n const decoded = decodeAbiParameters(JOIN_REQUEST_PARAMS, a.data as Hex);\n return {\n uid: a.id as Hex,\n attester: a.attester as Address,\n recipient: a.recipient as Address,\n time: a.time,\n decoded: {\n syndicateId: decoded[0],\n agentId: decoded[1],\n vault: decoded[2],\n message: decoded[3],\n },\n };\n });\n}\n"],"mappings":"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","names":[]}