@sherwoodagent/cli 0.41.4 → 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.
- package/dist/{addresses-JBIU5U3T.js → addresses-DCQMJJFI.js} +4 -4
- package/dist/{agent-LBF6OZRW.js → agent-5YEJ6W6W.js} +6 -6
- package/dist/{chat-3GE6474H.js → chat-UWJ6JBFE.js} +8 -8
- package/dist/{chunk-WCBG44IQ.js → chunk-4EHI4SKM.js} +25 -1
- package/dist/chunk-4EHI4SKM.js.map +1 -0
- package/dist/{chunk-AGKCDHKI.js → chunk-4OAZ7TP5.js} +4 -4
- package/dist/{chunk-JJ4EF7ZE.js → chunk-5Q3VT6NQ.js} +25 -6
- package/dist/{chunk-JJ4EF7ZE.js.map → chunk-5Q3VT6NQ.js.map} +1 -1
- package/dist/{chunk-JGJAKTKK.js → chunk-6U3A6ZJ2.js} +5 -5
- package/dist/{chunk-IJG4CTOI.js → chunk-FOOZC4AM.js} +12 -2
- package/dist/{chunk-IJG4CTOI.js.map → chunk-FOOZC4AM.js.map} +1 -1
- package/dist/{chunk-DNX3P5YK.js → chunk-GMVDHSCF.js} +2 -2
- package/dist/{chunk-CECQNUS6.js → chunk-JNDEZFXW.js} +110 -68
- package/dist/chunk-JNDEZFXW.js.map +1 -0
- package/dist/{chunk-OFR3LCYE.js → chunk-SWKHSKDH.js} +3 -3
- package/dist/{chunk-ARHM3CYN.js → chunk-T2IA6CCW.js} +4 -4
- package/dist/{chunk-VMNB4ARO.js → chunk-XAUMJZU2.js} +2 -2
- package/dist/{client-HKAG55PQ.js → client-DRVUILER.js} +4 -4
- package/dist/{config-LS7FKZL5.js → config-YRERDZSL.js} +2 -2
- package/dist/{eas-27JA63VQ.js → eas-KBU2BAOD.js} +16 -6
- package/dist/{governor-YLZJIQOB.js → governor-KH7RNH2E.js} +6 -6
- package/dist/index.js +163 -45
- package/dist/index.js.map +1 -1
- package/dist/{network-KSMKPKNL.js → network-3HB46JMQ.js} +7 -5
- package/dist/{price-5RAPTAYW.js → price-TTQWI672.js} +5 -5
- package/dist/{research-HDEPP2SL.js → research-J3HYU3N6.js} +9 -9
- package/dist/research-NR4VC5LN.js +14 -0
- package/dist/{session-EST3O7W3.js → session-NUPHC6ZN.js} +10 -10
- package/dist/{trade-XTLUZJB6.js → trade-VGECC4QZ.js} +16 -16
- package/dist/{xmtp-LPCRZRHX.js → xmtp-JO7W6RFK.js} +6 -6
- package/package.json +1 -1
- package/dist/chunk-CECQNUS6.js.map +0 -1
- package/dist/chunk-WCBG44IQ.js.map +0 -1
- package/dist/research-4UA4UB5P.js +0 -14
- /package/dist/{addresses-JBIU5U3T.js.map → addresses-DCQMJJFI.js.map} +0 -0
- /package/dist/{agent-LBF6OZRW.js.map → agent-5YEJ6W6W.js.map} +0 -0
- /package/dist/{chat-3GE6474H.js.map → chat-UWJ6JBFE.js.map} +0 -0
- /package/dist/{chunk-AGKCDHKI.js.map → chunk-4OAZ7TP5.js.map} +0 -0
- /package/dist/{chunk-JGJAKTKK.js.map → chunk-6U3A6ZJ2.js.map} +0 -0
- /package/dist/{chunk-DNX3P5YK.js.map → chunk-GMVDHSCF.js.map} +0 -0
- /package/dist/{chunk-OFR3LCYE.js.map → chunk-SWKHSKDH.js.map} +0 -0
- /package/dist/{chunk-ARHM3CYN.js.map → chunk-T2IA6CCW.js.map} +0 -0
- /package/dist/{chunk-VMNB4ARO.js.map → chunk-XAUMJZU2.js.map} +0 -0
- /package/dist/{client-HKAG55PQ.js.map → client-DRVUILER.js.map} +0 -0
- /package/dist/{config-LS7FKZL5.js.map → config-YRERDZSL.js.map} +0 -0
- /package/dist/{eas-27JA63VQ.js.map → eas-KBU2BAOD.js.map} +0 -0
- /package/dist/{governor-YLZJIQOB.js.map → governor-KH7RNH2E.js.map} +0 -0
- /package/dist/{network-KSMKPKNL.js.map → network-3HB46JMQ.js.map} +0 -0
- /package/dist/{price-5RAPTAYW.js.map → price-TTQWI672.js.map} +0 -0
- /package/dist/{research-HDEPP2SL.js.map → research-J3HYU3N6.js.map} +0 -0
- /package/dist/{research-4UA4UB5P.js.map → research-NR4VC5LN.js.map} +0 -0
- /package/dist/{session-EST3O7W3.js.map → session-NUPHC6ZN.js.map} +0 -0
- /package/dist/{trade-XTLUZJB6.js.map → trade-VGECC4QZ.js.map} +0 -0
- /package/dist/{xmtp-LPCRZRHX.js.map → xmtp-JO7W6RFK.js.map} +0 -0
package/dist/index.js
CHANGED
|
@@ -9,24 +9,25 @@ import {
|
|
|
9
9
|
getQuote,
|
|
10
10
|
listModels,
|
|
11
11
|
provisionApiKey
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-6U3A6ZJ2.js";
|
|
13
13
|
import {
|
|
14
14
|
createApproval,
|
|
15
15
|
createJoinRequest,
|
|
16
|
+
getEasExplorerUrl,
|
|
16
17
|
getEasScanUrl,
|
|
17
18
|
parseReferrer,
|
|
18
19
|
queryApprovals,
|
|
19
20
|
queryJoinRequests,
|
|
20
|
-
|
|
21
|
+
revokeJoinRequest,
|
|
21
22
|
stripReferrerPrefix
|
|
22
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-JNDEZFXW.js";
|
|
23
24
|
import {
|
|
24
25
|
createSyndicate,
|
|
25
26
|
getActiveSyndicates,
|
|
26
27
|
getSyndicate,
|
|
27
28
|
subdomainExists,
|
|
28
29
|
updateMetadata
|
|
29
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-4OAZ7TP5.js";
|
|
30
31
|
import {
|
|
31
32
|
approveDepositor,
|
|
32
33
|
deposit,
|
|
@@ -47,9 +48,10 @@ import {
|
|
|
47
48
|
removeDepositor,
|
|
48
49
|
resolveSyndicate,
|
|
49
50
|
resolveVaultSyndicate,
|
|
51
|
+
searchSyndicateAcrossChains,
|
|
50
52
|
setTextRecord,
|
|
51
53
|
setVaultAddress
|
|
52
|
-
} from "./chunk-
|
|
54
|
+
} from "./chunk-5Q3VT6NQ.js";
|
|
53
55
|
import {
|
|
54
56
|
PROPOSAL_STATE,
|
|
55
57
|
PROPOSAL_STATES,
|
|
@@ -81,12 +83,11 @@ import {
|
|
|
81
83
|
setVotingPeriod,
|
|
82
84
|
settleProposal,
|
|
83
85
|
vote
|
|
84
|
-
} from "./chunk-
|
|
86
|
+
} from "./chunk-T2IA6CCW.js";
|
|
85
87
|
import {
|
|
86
88
|
AERODROME,
|
|
87
89
|
AGENT_REGISTRY,
|
|
88
90
|
CHAINLINK,
|
|
89
|
-
EAS_SCHEMAS,
|
|
90
91
|
MOONWELL,
|
|
91
92
|
SHERWOOD,
|
|
92
93
|
STRATEGY_TEMPLATES,
|
|
@@ -94,7 +95,7 @@ import {
|
|
|
94
95
|
TOKENS,
|
|
95
96
|
UNISWAP,
|
|
96
97
|
VENICE
|
|
97
|
-
} from "./chunk-
|
|
98
|
+
} from "./chunk-XAUMJZU2.js";
|
|
98
99
|
import {
|
|
99
100
|
formatContractError,
|
|
100
101
|
getAccount,
|
|
@@ -103,7 +104,7 @@ import {
|
|
|
103
104
|
sendTxWithRetry,
|
|
104
105
|
waitForReceipt,
|
|
105
106
|
writeContractWithRetry
|
|
106
|
-
} from "./chunk-
|
|
107
|
+
} from "./chunk-SWKHSKDH.js";
|
|
107
108
|
import {
|
|
108
109
|
CHAIN_REGISTRY,
|
|
109
110
|
VALID_NETWORKS,
|
|
@@ -112,8 +113,9 @@ import {
|
|
|
112
113
|
getNetwork,
|
|
113
114
|
getRpcUrl,
|
|
114
115
|
isTestnet,
|
|
115
|
-
setNetwork
|
|
116
|
-
|
|
116
|
+
setNetwork,
|
|
117
|
+
withNetwork
|
|
118
|
+
} from "./chunk-FOOZC4AM.js";
|
|
117
119
|
import {
|
|
118
120
|
addSyndicate,
|
|
119
121
|
cacheGroupId,
|
|
@@ -136,7 +138,7 @@ import {
|
|
|
136
138
|
setPrivateKey,
|
|
137
139
|
setUniswapApiKey,
|
|
138
140
|
setVeniceApiKey
|
|
139
|
-
} from "./chunk-
|
|
141
|
+
} from "./chunk-4EHI4SKM.js";
|
|
140
142
|
import {
|
|
141
143
|
BASE_STRATEGY_ABI,
|
|
142
144
|
ERC20_ABI,
|
|
@@ -1445,9 +1447,9 @@ function registerStrategyTemplateCommands(strategy2) {
|
|
|
1445
1447
|
console.error(chalk.red("Missing --name, --performance-fee, or --duration. Use --write-calls to skip proposal submission."));
|
|
1446
1448
|
process.exit(1);
|
|
1447
1449
|
}
|
|
1448
|
-
const { propose: propose2 } = await import("./governor-
|
|
1450
|
+
const { propose: propose2 } = await import("./governor-KH7RNH2E.js");
|
|
1449
1451
|
const { pinJSON } = await import("./ipfs-IGXLLJCF.js");
|
|
1450
|
-
const { parseDuration: parseDuration2 } = await import("./governor-
|
|
1452
|
+
const { parseDuration: parseDuration2 } = await import("./governor-KH7RNH2E.js");
|
|
1451
1453
|
const performanceFeeBps = BigInt(opts.performanceFee);
|
|
1452
1454
|
if (performanceFeeBps < 0n || performanceFeeBps > 10000n) {
|
|
1453
1455
|
console.error(chalk.red("--performance-fee must be 0-10000 (basis points)"));
|
|
@@ -1554,7 +1556,7 @@ function registerStrategyTemplateCommands(strategy2) {
|
|
|
1554
1556
|
let prices = [];
|
|
1555
1557
|
let priceSource = null;
|
|
1556
1558
|
try {
|
|
1557
|
-
const { getTokenPricesInAsset } = await import("./price-
|
|
1559
|
+
const { getTokenPricesInAsset } = await import("./price-TTQWI672.js");
|
|
1558
1560
|
prices = await getTokenPricesInAsset({
|
|
1559
1561
|
tokens: allocations.map((a, i) => ({
|
|
1560
1562
|
token: a.token,
|
|
@@ -1984,7 +1986,7 @@ function registerVeniceCommands(program2) {
|
|
|
1984
1986
|
console.log(chalk2.dim(` Key: ${apiKey.slice(0, 8)}...${apiKey.slice(-4)}`));
|
|
1985
1987
|
console.log(chalk2.dim(" Saved to ~/.sherwood/config.json"));
|
|
1986
1988
|
try {
|
|
1987
|
-
const { createVeniceProvisionAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-
|
|
1989
|
+
const { createVeniceProvisionAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-KBU2BAOD.js");
|
|
1988
1990
|
const { uid } = await createVeniceProvisionAttestation(account.address);
|
|
1989
1991
|
if (uid !== "0x0000000000000000000000000000000000000000000000000000000000000000") {
|
|
1990
1992
|
console.log(chalk2.dim(` Attested: ${getEasScanUrl2(uid)}`));
|
|
@@ -2340,10 +2342,10 @@ ${opts.prompt}`;
|
|
|
2340
2342
|
console.log(chalk2.dim(`Model: ${result.model} | Tokens: ${result.usage.promptTokens} in, ${result.usage.completionTokens} out, ${result.usage.totalTokens} total`));
|
|
2341
2343
|
}
|
|
2342
2344
|
try {
|
|
2343
|
-
const { createVeniceInferenceAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-
|
|
2345
|
+
const { createVeniceInferenceAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-KBU2BAOD.js");
|
|
2344
2346
|
const { keccak256, toHex, isAddress: isAddr } = await import("viem");
|
|
2345
|
-
const { getChainContracts: getChainContracts2 } = await import("./config-
|
|
2346
|
-
const { getChain: getActiveChain } = await import("./network-
|
|
2347
|
+
const { getChainContracts: getChainContracts2 } = await import("./config-YRERDZSL.js");
|
|
2348
|
+
const { getChain: getActiveChain } = await import("./network-3HB46JMQ.js");
|
|
2347
2349
|
const vaultRecipient = opts.vault && isAddr(opts.vault) ? opts.vault : getChainContracts2(getActiveChain().id).vault;
|
|
2348
2350
|
const promptHash = keccak256(toHex(userContent)).slice(0, 18);
|
|
2349
2351
|
const { uid } = await createVeniceInferenceAttestation(
|
|
@@ -2738,6 +2740,50 @@ function registerIdentityCommands(program2) {
|
|
|
2738
2740
|
process.exit(1);
|
|
2739
2741
|
}
|
|
2740
2742
|
});
|
|
2743
|
+
identity.command("find").description("Search ERC-8004 agents by wallet address or name (recover a lost agent ID)").option("--wallet <address>", "Filter by owner / wallet address").option("--name <text>", "Filter by agent name (exact or substring match, depending on registry)").option("--all-chains", "Search across all chains, not just the active one").action(async (opts) => {
|
|
2744
|
+
if (!opts.wallet && !opts.name) {
|
|
2745
|
+
console.error(chalk4.red("Pass --wallet <address> or --name <text> (or both)."));
|
|
2746
|
+
process.exit(1);
|
|
2747
|
+
}
|
|
2748
|
+
const spinner = ora4("Searching ERC-8004 registry...").start();
|
|
2749
|
+
try {
|
|
2750
|
+
const sdk = getAgent0SDK();
|
|
2751
|
+
const filters = {};
|
|
2752
|
+
if (opts.wallet) filters.walletAddress = opts.wallet;
|
|
2753
|
+
if (opts.name) filters.name = opts.name;
|
|
2754
|
+
filters.chains = opts.allChains ? "all" : [getChain().id];
|
|
2755
|
+
const results = await sdk.searchAgents(filters);
|
|
2756
|
+
spinner.stop();
|
|
2757
|
+
if (results.length === 0) {
|
|
2758
|
+
console.log(chalk4.dim("No agents found matching those filters."));
|
|
2759
|
+
console.log(chalk4.dim("If you minted on a different chain, retry with --all-chains."));
|
|
2760
|
+
return;
|
|
2761
|
+
}
|
|
2762
|
+
console.log();
|
|
2763
|
+
console.log(chalk4.bold(`Found ${results.length} agent${results.length === 1 ? "" : "s"}`));
|
|
2764
|
+
console.log(chalk4.dim("\u2500".repeat(50)));
|
|
2765
|
+
for (const a of results) {
|
|
2766
|
+
const idStr = String(a.agentId);
|
|
2767
|
+
const tokenId = idStr.includes(":") ? idStr.split(":")[1] : idStr;
|
|
2768
|
+
console.log(` ${chalk4.bold(`#${tokenId}`)} ${a.name || chalk4.dim("(no name)")}`);
|
|
2769
|
+
console.log(chalk4.dim(` Chain: ${a.chainId}`));
|
|
2770
|
+
console.log(chalk4.dim(` Full: ${idStr}`));
|
|
2771
|
+
if (a.owners?.length) {
|
|
2772
|
+
console.log(chalk4.dim(` Owner: ${a.owners[0]}`));
|
|
2773
|
+
}
|
|
2774
|
+
if (a.walletAddress) {
|
|
2775
|
+
console.log(chalk4.dim(` Wallet: ${a.walletAddress}`));
|
|
2776
|
+
}
|
|
2777
|
+
}
|
|
2778
|
+
console.log();
|
|
2779
|
+
console.log(chalk4.green("To bind one of these to this machine:"));
|
|
2780
|
+
console.log(chalk4.dim(` sherwood identity load --id <tokenId>`));
|
|
2781
|
+
} catch (err) {
|
|
2782
|
+
spinner.fail("Search failed");
|
|
2783
|
+
console.error(chalk4.red(formatContractError(err)));
|
|
2784
|
+
process.exit(1);
|
|
2785
|
+
}
|
|
2786
|
+
});
|
|
2741
2787
|
identity.command("status").description("Show your agent identity status").action(async () => {
|
|
2742
2788
|
const account = getAccount();
|
|
2743
2789
|
const registry2 = AGENT_REGISTRY().IDENTITY_REGISTRY;
|
|
@@ -3472,8 +3518,8 @@ function printSimulationResult(result, callType) {
|
|
|
3472
3518
|
}
|
|
3473
3519
|
async function sendSimulationAlert(subdomain, proposalId, vault, execResult, settleResult) {
|
|
3474
3520
|
try {
|
|
3475
|
-
const xmtp = await import("./xmtp-
|
|
3476
|
-
const { getAccount: getAccount2 } = await import("./client-
|
|
3521
|
+
const xmtp = await import("./xmtp-JO7W6RFK.js");
|
|
3522
|
+
const { getAccount: getAccount2 } = await import("./client-DRVUILER.js");
|
|
3477
3523
|
const group = await xmtp.getGroup("", subdomain);
|
|
3478
3524
|
const allRisks = [...execResult.risks, ...settleResult?.risks ?? []];
|
|
3479
3525
|
const criticals = allRisks.filter((r) => r.level === "critical");
|
|
@@ -4572,7 +4618,7 @@ try {
|
|
|
4572
4618
|
var require2 = createRequire(import.meta.url);
|
|
4573
4619
|
var { version: CLI_VERSION } = require2("../package.json");
|
|
4574
4620
|
async function loadXmtp() {
|
|
4575
|
-
return import("./xmtp-
|
|
4621
|
+
return import("./xmtp-JO7W6RFK.js");
|
|
4576
4622
|
}
|
|
4577
4623
|
async function loadCron() {
|
|
4578
4624
|
return import("./cron-EOULYO3R.js");
|
|
@@ -4858,11 +4904,36 @@ syndicate.command("create").description("Create a new syndicate via the factory
|
|
|
4858
4904
|
process.exit(1);
|
|
4859
4905
|
}
|
|
4860
4906
|
});
|
|
4861
|
-
syndicate.command("list").description("List active syndicates (queries subgraph, falls back to on-chain)").option("--creator <address>", "Filter by creator address").action(async (opts) => {
|
|
4907
|
+
syndicate.command("list").description("List active syndicates (queries subgraph, falls back to on-chain)").option("--creator <address>", "Filter by creator address").option("--all-chains", "Aggregate active syndicates across all supported chains (on-chain only)").action(async (opts) => {
|
|
4862
4908
|
const spinner = ora8("Loading syndicates...").start();
|
|
4863
4909
|
try {
|
|
4864
|
-
let syndicates;
|
|
4865
|
-
if (
|
|
4910
|
+
let syndicates = [];
|
|
4911
|
+
if (opts.allChains) {
|
|
4912
|
+
const includeTestnets = process.env.ENABLE_TESTNET === "true";
|
|
4913
|
+
const targets = VALID_NETWORKS.filter((n) => includeTestnets || !["base-sepolia", "robinhood-testnet", "hyperevm-testnet"].includes(n));
|
|
4914
|
+
for (const net of targets) {
|
|
4915
|
+
spinner.text = `Loading from ${net}...`;
|
|
4916
|
+
try {
|
|
4917
|
+
const rows = await withNetwork(net, () => getActiveSyndicates());
|
|
4918
|
+
for (const s of rows) {
|
|
4919
|
+
syndicates.push({
|
|
4920
|
+
id: s.id.toString(),
|
|
4921
|
+
vault: s.vault,
|
|
4922
|
+
creator: s.creator,
|
|
4923
|
+
metadataURI: s.metadataURI,
|
|
4924
|
+
createdAt: s.createdAt.toString(),
|
|
4925
|
+
subdomain: s.subdomain,
|
|
4926
|
+
chain: net
|
|
4927
|
+
});
|
|
4928
|
+
}
|
|
4929
|
+
} catch {
|
|
4930
|
+
}
|
|
4931
|
+
}
|
|
4932
|
+
if (opts.creator) {
|
|
4933
|
+
const c = String(opts.creator).toLowerCase();
|
|
4934
|
+
syndicates = syndicates.filter((s) => s.creator.toLowerCase() === c);
|
|
4935
|
+
}
|
|
4936
|
+
} else if (process.env.SUBGRAPH_URL) {
|
|
4866
4937
|
const result = await getActiveSyndicates2(opts.creator);
|
|
4867
4938
|
syndicates = result;
|
|
4868
4939
|
} else {
|
|
@@ -4883,15 +4954,19 @@ syndicate.command("list").description("List active syndicates (queries subgraph,
|
|
|
4883
4954
|
}
|
|
4884
4955
|
console.log();
|
|
4885
4956
|
console.log(chalk9.bold(`Active Syndicates (${syndicates.length})`));
|
|
4886
|
-
if (!process.env.SUBGRAPH_URL) {
|
|
4957
|
+
if (!process.env.SUBGRAPH_URL && !opts.allChains) {
|
|
4887
4958
|
console.log(chalk9.dim(" (Set SUBGRAPH_URL for faster indexed queries)"));
|
|
4888
4959
|
}
|
|
4960
|
+
if (opts.allChains) {
|
|
4961
|
+
console.log(chalk9.dim(" (Aggregated across chains via on-chain factory calls; SUBGRAPH_URL is single-chain only)"));
|
|
4962
|
+
}
|
|
4889
4963
|
console.log(chalk9.dim("\u2500".repeat(70)));
|
|
4890
4964
|
for (const s of syndicates) {
|
|
4891
4965
|
const ts = typeof s.createdAt === "string" ? Number(s.createdAt) : Number(s.createdAt);
|
|
4892
4966
|
const date = new Date(ts * 1e3).toLocaleDateString();
|
|
4893
4967
|
const ensName = s.subdomain ? `${s.subdomain}.sherwoodagent.eth` : "";
|
|
4894
|
-
|
|
4968
|
+
const chainTag = s.chain ? chalk9.dim(`[${s.chain}] `) : "";
|
|
4969
|
+
console.log(` ${chainTag}#${s.id} ${chalk9.bold(ensName || String(s.vault))}`);
|
|
4895
4970
|
if (ensName) console.log(` Vault: ${chalk9.cyan(String(s.vault))}`);
|
|
4896
4971
|
console.log(` Creator: ${s.creator}`);
|
|
4897
4972
|
console.log(` Created: ${date}`);
|
|
@@ -4913,14 +4988,42 @@ syndicate.command("info").description("Display syndicate details by ID or subdom
|
|
|
4913
4988
|
const spinner = ora8("Loading syndicate info...").start();
|
|
4914
4989
|
try {
|
|
4915
4990
|
let id;
|
|
4991
|
+
let crossChainHint = null;
|
|
4992
|
+
let infoOverride = null;
|
|
4916
4993
|
if (/^\d+$/.test(idStr)) {
|
|
4917
4994
|
id = BigInt(idStr);
|
|
4918
4995
|
} else {
|
|
4919
|
-
|
|
4920
|
-
|
|
4996
|
+
try {
|
|
4997
|
+
const resolved = await resolveSyndicate(idStr);
|
|
4998
|
+
id = resolved.id;
|
|
4999
|
+
} catch {
|
|
5000
|
+
spinner.text = `Searching across chains...`;
|
|
5001
|
+
const hits = await searchSyndicateAcrossChains(idStr);
|
|
5002
|
+
if (hits.length === 0) {
|
|
5003
|
+
spinner.fail(`Syndicate "${idStr}" not found on any supported chain`);
|
|
5004
|
+
process.exit(1);
|
|
5005
|
+
}
|
|
5006
|
+
const active = getNetwork();
|
|
5007
|
+
const primary = hits.find((h) => h.network === active) ?? hits[0];
|
|
5008
|
+
id = primary.result.id;
|
|
5009
|
+
infoOverride = await withNetwork(
|
|
5010
|
+
primary.network,
|
|
5011
|
+
() => getSyndicate(primary.result.id)
|
|
5012
|
+
);
|
|
5013
|
+
crossChainHint = {
|
|
5014
|
+
network: primary.network,
|
|
5015
|
+
others: hits.filter((h) => h.network !== primary.network).map((h) => h.network)
|
|
5016
|
+
};
|
|
5017
|
+
}
|
|
4921
5018
|
}
|
|
4922
|
-
const info = await getSyndicate(id);
|
|
5019
|
+
const info = infoOverride ?? await getSyndicate(id);
|
|
4923
5020
|
spinner.stop();
|
|
5021
|
+
if (crossChainHint) {
|
|
5022
|
+
const others = crossChainHint.others.length > 0 ? ` (also on: ${crossChainHint.others.join(", ")})` : "";
|
|
5023
|
+
console.log(chalk9.yellow(` Found on chain: ${chalk9.bold(crossChainHint.network)}${others}`));
|
|
5024
|
+
console.log(chalk9.dim(` Re-run with --chain ${crossChainHint.network} to interact with this syndicate.`));
|
|
5025
|
+
console.log();
|
|
5026
|
+
}
|
|
4924
5027
|
if (!info.vault || info.vault === "0x0000000000000000000000000000000000000000") {
|
|
4925
5028
|
console.log(chalk9.red(`Syndicate #${id} not found.`));
|
|
4926
5029
|
process.exit(1);
|
|
@@ -4946,7 +5049,7 @@ syndicate.command("info").description("Display syndicate details by ID or subdom
|
|
|
4946
5049
|
}
|
|
4947
5050
|
}
|
|
4948
5051
|
setVaultAddress(info.vault);
|
|
4949
|
-
const vaultInfo = await getVaultInfo();
|
|
5052
|
+
const vaultInfo = crossChainHint ? await withNetwork(crossChainHint.network, () => getVaultInfo()) : await getVaultInfo();
|
|
4950
5053
|
console.log();
|
|
4951
5054
|
console.log(chalk9.bold(" Vault Stats"));
|
|
4952
5055
|
console.log(` Total Assets: ${vaultInfo.totalAssets}`);
|
|
@@ -5040,7 +5143,7 @@ syndicate.command("add").description("Register an agent on a syndicate vault (cr
|
|
|
5040
5143
|
if (opts.agentId) {
|
|
5041
5144
|
agentId = BigInt(opts.agentId);
|
|
5042
5145
|
} else {
|
|
5043
|
-
const { AGENT_REGISTRY: AGENT_REGISTRY2 } = await import("./addresses-
|
|
5146
|
+
const { AGENT_REGISTRY: AGENT_REGISTRY2 } = await import("./addresses-DCQMJJFI.js");
|
|
5044
5147
|
const registry2 = AGENT_REGISTRY2().IDENTITY_REGISTRY;
|
|
5045
5148
|
if (registry2 === "0x0000000000000000000000000000000000000000") {
|
|
5046
5149
|
agentId = 0n;
|
|
@@ -5154,7 +5257,25 @@ syndicate.command("join").description("Request to join a syndicate (creates an E
|
|
|
5154
5257
|
spinner.fail("No agent identity found. Run 'sherwood identity mint' first.");
|
|
5155
5258
|
process.exit(1);
|
|
5156
5259
|
}
|
|
5157
|
-
|
|
5260
|
+
let syndicate2;
|
|
5261
|
+
try {
|
|
5262
|
+
syndicate2 = await resolveSyndicate(subdomain);
|
|
5263
|
+
} catch {
|
|
5264
|
+
spinner.text = "Searching across chains...";
|
|
5265
|
+
const hits = await searchSyndicateAcrossChains(subdomain);
|
|
5266
|
+
spinner.fail(`Syndicate "${subdomain}" not found on ${getNetwork()}`);
|
|
5267
|
+
if (hits.length === 0) {
|
|
5268
|
+
console.error(chalk9.red(` Not found on any supported chain.`));
|
|
5269
|
+
} else if (hits.length === 1) {
|
|
5270
|
+
console.error(chalk9.yellow(` Found on chain: ${chalk9.bold(hits[0].network)}`));
|
|
5271
|
+
console.error(chalk9.dim(` Re-run: sherwood --chain ${hits[0].network} syndicate join --subdomain ${subdomain}`));
|
|
5272
|
+
} else {
|
|
5273
|
+
const chains = hits.map((h) => h.network).join(", ");
|
|
5274
|
+
console.error(chalk9.yellow(` Found on chains: ${chalk9.bold(chains)}`));
|
|
5275
|
+
console.error(chalk9.dim(` Specify which chain to join with --chain <network>.`));
|
|
5276
|
+
}
|
|
5277
|
+
process.exit(1);
|
|
5278
|
+
}
|
|
5158
5279
|
const callerAddress = getAccount().address;
|
|
5159
5280
|
spinner.text = "Checking membership...";
|
|
5160
5281
|
setVaultAddress(syndicate2.vault);
|
|
@@ -5237,7 +5358,7 @@ syndicate.command("join").description("Request to join a syndicate (creates an E
|
|
|
5237
5358
|
console.log(W5(` Creator: ${DIM5(syndicate2.creator)}`));
|
|
5238
5359
|
console.log(W5(` Attestation: ${DIM5(uid)}`));
|
|
5239
5360
|
console.log(W5(` EAS Scan: ${DIM5(getEasScanUrl(uid))}`));
|
|
5240
|
-
console.log(W5(` Explorer: ${DIM5(
|
|
5361
|
+
console.log(W5(` Explorer: ${DIM5(getEasExplorerUrl(hash))}`));
|
|
5241
5362
|
SEP5();
|
|
5242
5363
|
console.log(G5(" \u2713 Syndicate saved to ~/.sherwood/config.json (set as primary)"));
|
|
5243
5364
|
console.log(G5(" \u2713 The creator can review with:"));
|
|
@@ -5409,12 +5530,9 @@ syndicate.command("approve").description("Approve an agent join request (registe
|
|
|
5409
5530
|
syndicate.command("reject").description("Reject a join request by revoking its attestation").requiredOption("--attestation <uid>", "Join request attestation UID to revoke").action(async (opts) => {
|
|
5410
5531
|
const spinner = ora8("Revoking attestation...").start();
|
|
5411
5532
|
try {
|
|
5412
|
-
const hash = await
|
|
5413
|
-
EAS_SCHEMAS().SYNDICATE_JOIN_REQUEST,
|
|
5414
|
-
opts.attestation
|
|
5415
|
-
);
|
|
5533
|
+
const hash = await revokeJoinRequest(opts.attestation);
|
|
5416
5534
|
spinner.succeed("Join request rejected");
|
|
5417
|
-
console.log(DIM5(` ${
|
|
5535
|
+
console.log(DIM5(` ${getEasExplorerUrl(hash)}`));
|
|
5418
5536
|
} catch (err) {
|
|
5419
5537
|
spinner.fail("Rejection failed");
|
|
5420
5538
|
console.error(chalk9.red(formatContractError(err)));
|
|
@@ -5639,7 +5757,7 @@ vaultCmd.command("redeem").description("Redeem vault shares for the underlying a
|
|
|
5639
5757
|
var strategy = program.command("strategy").description("Strategy templates \u2014 list, clone, propose");
|
|
5640
5758
|
registerStrategyTemplateCommands(strategy);
|
|
5641
5759
|
program.command("providers").description("List available DeFi providers").action(async () => {
|
|
5642
|
-
const { MessariProvider, NansenProvider } = await import("./research-
|
|
5760
|
+
const { MessariProvider, NansenProvider } = await import("./research-NR4VC5LN.js");
|
|
5643
5761
|
const providers = [new MoonwellProvider(), new UniswapProvider(), new MessariProvider(), new NansenProvider()];
|
|
5644
5762
|
for (const p of providers) {
|
|
5645
5763
|
const info = p.info();
|
|
@@ -5650,7 +5768,7 @@ ${info.name} (${info.type})`);
|
|
|
5650
5768
|
}
|
|
5651
5769
|
});
|
|
5652
5770
|
try {
|
|
5653
|
-
const { registerChatCommands } = await import("./chat-
|
|
5771
|
+
const { registerChatCommands } = await import("./chat-UWJ6JBFE.js");
|
|
5654
5772
|
registerChatCommands(program);
|
|
5655
5773
|
} catch {
|
|
5656
5774
|
program.command("chat <name> [action] [actionArgs...]").description("Syndicate chat (XMTP) \u2014 requires @xmtp/cli").action(() => {
|
|
@@ -5660,7 +5778,7 @@ try {
|
|
|
5660
5778
|
process.exit(1);
|
|
5661
5779
|
});
|
|
5662
5780
|
}
|
|
5663
|
-
var { registerSessionCommands } = await import("./session-
|
|
5781
|
+
var { registerSessionCommands } = await import("./session-NUPHC6ZN.js");
|
|
5664
5782
|
registerSessionCommands(program);
|
|
5665
5783
|
registerVeniceCommands(program);
|
|
5666
5784
|
registerAllowanceCommands(program);
|
|
@@ -5668,11 +5786,11 @@ registerIdentityCommands(program);
|
|
|
5668
5786
|
registerProposalCommands(program);
|
|
5669
5787
|
registerGovernorCommands(program);
|
|
5670
5788
|
registerGuardianCommands(program);
|
|
5671
|
-
var { registerResearchCommands } = await import("./research-
|
|
5789
|
+
var { registerResearchCommands } = await import("./research-J3HYU3N6.js");
|
|
5672
5790
|
registerResearchCommands(program);
|
|
5673
|
-
var { registerAgentCommands } = await import("./agent-
|
|
5791
|
+
var { registerAgentCommands } = await import("./agent-5YEJ6W6W.js");
|
|
5674
5792
|
registerAgentCommands(program);
|
|
5675
|
-
var { registerTradeCommands } = await import("./trade-
|
|
5793
|
+
var { registerTradeCommands } = await import("./trade-VGECC4QZ.js");
|
|
5676
5794
|
registerTradeCommands(program);
|
|
5677
5795
|
var configCmd = program.command("config");
|
|
5678
5796
|
configCmd.command("set").description("Save settings to ~/.sherwood/config.json (persists across sessions)").option("--private-key <key>", "Wallet private key (0x-prefixed)").option("--vault <address>", "Default SyndicateVault address").option("--rpc <url>", "Custom RPC URL for the active --chain network").option("--notify-to <id>", "Destination for cron summaries (Telegram chat ID, phone, etc.)").option("--uniswap-api-key <key>", "Uniswap Trading API key (from developers.uniswap.org)").option("--venice-api-key <key>", "Venice AI inference API key").option("--xmtp-group <subdomain:groupId>", "Cache an XMTP group ID for a syndicate (e.g. my-fund:abc123)").action((opts) => {
|