@sherwoodagent/cli 0.14.1 → 0.14.3
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-LFH2SA46.js → chat-VDYE5MV4.js} +7 -7
- package/dist/chunk-CCOGGRA5.js +54 -0
- package/dist/chunk-CCOGGRA5.js.map +1 -0
- package/dist/{chunk-KAZRNDZQ.js → chunk-F275BM3F.js} +2 -2
- package/dist/{chunk-FWJBUK57.js → chunk-GH3F42AO.js} +3 -3
- package/dist/{chunk-7CN3TSAA.js → chunk-MJMWA4LY.js} +2 -2
- package/dist/{chunk-AC4QMJKC.js → chunk-SQWLOFHS.js} +2 -2
- package/dist/{chunk-IIDZ2TK5.js → chunk-TWX6FSCM.js} +6 -8
- package/dist/chunk-TWX6FSCM.js.map +1 -0
- package/dist/{chunk-ADPAZUTB.js → chunk-UKPICG5X.js} +20 -9
- package/dist/chunk-UKPICG5X.js.map +1 -0
- package/dist/{chunk-2N7B5N7D.js → chunk-YENI5RLE.js} +6 -4
- package/dist/chunk-YENI5RLE.js.map +1 -0
- package/dist/{config-U74QT4SC.js → config-LW4Q6NK5.js} +2 -2
- package/dist/{eas-XWLMRKJU.js → eas-AOY2MLIS.js} +6 -6
- package/dist/index.js +67 -32
- package/dist/index.js.map +1 -1
- package/dist/{ipfs-LUJHZGKF.js → ipfs-6XVOOHSR.js} +2 -2
- package/dist/{network-ROF3SSAA.js → network-C32G5D3J.js} +3 -3
- package/dist/{research-QXGYAJUL.js → research-CJ2JA24Q.js} +8 -8
- package/dist/research-DNR46NSK.js +14 -0
- package/dist/{session-ECETX4MM.js → session-GZVBQCSP.js} +12 -11
- package/dist/session-GZVBQCSP.js.map +1 -0
- package/dist/{xmtp-EKFDS5Y3.js → xmtp-2RDICHX6.js} +7 -7
- package/dist/{xmtp-EKFDS5Y3.js.map → xmtp-2RDICHX6.js.map} +1 -1
- package/package.json +1 -1
- package/dist/chunk-2N7B5N7D.js.map +0 -1
- package/dist/chunk-ADPAZUTB.js.map +0 -1
- package/dist/chunk-IIDZ2TK5.js.map +0 -1
- package/dist/chunk-LEQLX7XF.js +0 -75
- package/dist/chunk-LEQLX7XF.js.map +0 -1
- package/dist/research-HEZP7VPY.js +0 -14
- package/dist/session-ECETX4MM.js.map +0 -1
- /package/dist/{chat-LFH2SA46.js.map → chat-VDYE5MV4.js.map} +0 -0
- /package/dist/{chunk-KAZRNDZQ.js.map → chunk-F275BM3F.js.map} +0 -0
- /package/dist/{chunk-FWJBUK57.js.map → chunk-GH3F42AO.js.map} +0 -0
- /package/dist/{chunk-7CN3TSAA.js.map → chunk-MJMWA4LY.js.map} +0 -0
- /package/dist/{chunk-AC4QMJKC.js.map → chunk-SQWLOFHS.js.map} +0 -0
- /package/dist/{config-U74QT4SC.js.map → config-LW4Q6NK5.js.map} +0 -0
- /package/dist/{eas-XWLMRKJU.js.map → eas-AOY2MLIS.js.map} +0 -0
- /package/dist/{ipfs-LUJHZGKF.js.map → ipfs-6XVOOHSR.js.map} +0 -0
- /package/dist/{network-ROF3SSAA.js.map → network-C32G5D3J.js.map} +0 -0
- /package/dist/{research-QXGYAJUL.js.map → research-CJ2JA24Q.js.map} +0 -0
- /package/dist/{research-HEZP7VPY.js.map → research-DNR46NSK.js.map} +0 -0
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
fetchMetadata,
|
|
4
4
|
uploadMetadata
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-CCOGGRA5.js";
|
|
6
6
|
import {
|
|
7
7
|
createApproval,
|
|
8
8
|
createJoinRequest,
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
queryApprovals,
|
|
11
11
|
queryJoinRequests,
|
|
12
12
|
revokeAttestation
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-YENI5RLE.js";
|
|
14
14
|
import {
|
|
15
15
|
approveDepositor,
|
|
16
16
|
deposit,
|
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
resolveVaultSyndicate,
|
|
27
27
|
setTextRecord,
|
|
28
28
|
setVaultAddress
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-UKPICG5X.js";
|
|
30
30
|
import {
|
|
31
31
|
AGENT_REGISTRY,
|
|
32
32
|
EAS_SCHEMAS,
|
|
@@ -42,12 +42,12 @@ import {
|
|
|
42
42
|
UNISWAP_QUOTER_V2_ABI,
|
|
43
43
|
VENICE,
|
|
44
44
|
VENICE_STAKING_ABI
|
|
45
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-SQWLOFHS.js";
|
|
46
46
|
import {
|
|
47
47
|
getAccount,
|
|
48
48
|
getPublicClient,
|
|
49
49
|
getWalletClient
|
|
50
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-GH3F42AO.js";
|
|
51
51
|
import {
|
|
52
52
|
VALID_NETWORKS,
|
|
53
53
|
getChain,
|
|
@@ -56,7 +56,7 @@ import {
|
|
|
56
56
|
getRpcUrl,
|
|
57
57
|
isTestnet,
|
|
58
58
|
setNetwork
|
|
59
|
-
} from "./chunk-
|
|
59
|
+
} from "./chunk-MJMWA4LY.js";
|
|
60
60
|
import {
|
|
61
61
|
cacheGroupId,
|
|
62
62
|
getAgentId,
|
|
@@ -70,12 +70,13 @@ import {
|
|
|
70
70
|
setNotifyTo,
|
|
71
71
|
setPrivateKey,
|
|
72
72
|
setVeniceApiKey
|
|
73
|
-
} from "./chunk-
|
|
73
|
+
} from "./chunk-TWX6FSCM.js";
|
|
74
74
|
|
|
75
75
|
// src/index.ts
|
|
76
76
|
import { config as loadDotenv } from "dotenv";
|
|
77
|
+
import { createRequire } from "module";
|
|
77
78
|
import { Command, Option } from "commander";
|
|
78
|
-
import { parseUnits as parseUnits8 } from "viem";
|
|
79
|
+
import { parseUnits as parseUnits8, isAddress as isAddress5 } from "viem";
|
|
79
80
|
import chalk7 from "chalk";
|
|
80
81
|
import ora7 from "ora";
|
|
81
82
|
import { input, confirm, select } from "@inquirer/prompts";
|
|
@@ -572,7 +573,8 @@ async function getActiveSyndicates() {
|
|
|
572
573
|
}
|
|
573
574
|
async function updateMetadata(syndicateId, metadataURI) {
|
|
574
575
|
const wallet = getWalletClient();
|
|
575
|
-
|
|
576
|
+
const client = getPublicClient();
|
|
577
|
+
const hash = await wallet.writeContract({
|
|
576
578
|
account: getAccount(),
|
|
577
579
|
chain: getChain(),
|
|
578
580
|
address: getFactoryAddress(),
|
|
@@ -580,6 +582,8 @@ async function updateMetadata(syndicateId, metadataURI) {
|
|
|
580
582
|
functionName: "updateMetadata",
|
|
581
583
|
args: [syndicateId, metadataURI]
|
|
582
584
|
});
|
|
585
|
+
await client.waitForTransactionReceipt({ hash });
|
|
586
|
+
return hash;
|
|
583
587
|
}
|
|
584
588
|
|
|
585
589
|
// src/lib/subgraph.ts
|
|
@@ -613,10 +617,27 @@ async function query(graphql, variables) {
|
|
|
613
617
|
return result.data;
|
|
614
618
|
}
|
|
615
619
|
async function getActiveSyndicates2(creator) {
|
|
616
|
-
|
|
620
|
+
if (creator) {
|
|
621
|
+
const data2 = await query(
|
|
622
|
+
`query($creator: String!) {
|
|
623
|
+
syndicates(where: { active: true, creator: $creator }, orderBy: createdAt, orderDirection: desc, first: 100) {
|
|
624
|
+
id
|
|
625
|
+
vault
|
|
626
|
+
creator
|
|
627
|
+
metadataURI
|
|
628
|
+
createdAt
|
|
629
|
+
active
|
|
630
|
+
totalDeposits
|
|
631
|
+
totalWithdrawals
|
|
632
|
+
}
|
|
633
|
+
}`,
|
|
634
|
+
{ creator: creator.toLowerCase() }
|
|
635
|
+
);
|
|
636
|
+
return data2.syndicates;
|
|
637
|
+
}
|
|
617
638
|
const data = await query(`
|
|
618
639
|
{
|
|
619
|
-
syndicates(
|
|
640
|
+
syndicates(where: { active: true }, orderBy: createdAt, orderDirection: desc, first: 100) {
|
|
620
641
|
id
|
|
621
642
|
vault
|
|
622
643
|
creator
|
|
@@ -1978,8 +1999,8 @@ function formatDurationLong(seconds) {
|
|
|
1978
1999
|
if (s >= 60) return `${(s / 60).toFixed(0)} min`;
|
|
1979
2000
|
return `${s}s`;
|
|
1980
2001
|
}
|
|
1981
|
-
function formatShares(raw) {
|
|
1982
|
-
const num = Number(raw) /
|
|
2002
|
+
function formatShares(raw, decimals = 6) {
|
|
2003
|
+
const num = Number(raw) / 10 ** decimals;
|
|
1983
2004
|
return num.toLocaleString("en-US", { minimumFractionDigits: 0, maximumFractionDigits: 2 });
|
|
1984
2005
|
}
|
|
1985
2006
|
function formatUSDC(raw) {
|
|
@@ -2401,7 +2422,7 @@ function registerGovernorCommands(program2) {
|
|
|
2401
2422
|
const spinner = ora6("Setting voting period...").start();
|
|
2402
2423
|
try {
|
|
2403
2424
|
const hash = await setVotingPeriod(parseBigIntArg(opts.seconds, "seconds"));
|
|
2404
|
-
spinner.succeed(G2(`Voting period
|
|
2425
|
+
spinner.succeed(G2(`Voting period change queued (${opts.seconds}s). Finalize after the timelock delay with \`sherwood governor finalize-param\`.`));
|
|
2405
2426
|
console.log(DIM2(` ${getExplorerUrl(hash)}`));
|
|
2406
2427
|
} catch (err) {
|
|
2407
2428
|
spinner.fail("Failed to set voting period");
|
|
@@ -2413,7 +2434,7 @@ function registerGovernorCommands(program2) {
|
|
|
2413
2434
|
const spinner = ora6("Setting execution window...").start();
|
|
2414
2435
|
try {
|
|
2415
2436
|
const hash = await setExecutionWindow(parseBigIntArg(opts.seconds, "seconds"));
|
|
2416
|
-
spinner.succeed(G2(`Execution window
|
|
2437
|
+
spinner.succeed(G2(`Execution window change queued (${opts.seconds}s). Finalize after the timelock delay with \`sherwood governor finalize-param\`.`));
|
|
2417
2438
|
console.log(DIM2(` ${getExplorerUrl(hash)}`));
|
|
2418
2439
|
} catch (err) {
|
|
2419
2440
|
spinner.fail("Failed to set execution window");
|
|
@@ -2425,7 +2446,7 @@ function registerGovernorCommands(program2) {
|
|
|
2425
2446
|
const spinner = ora6("Setting veto threshold...").start();
|
|
2426
2447
|
try {
|
|
2427
2448
|
const hash = await setVetoThresholdBps(parseBigIntArg(opts.bps, "bps"));
|
|
2428
|
-
spinner.succeed(G2(`Veto threshold
|
|
2449
|
+
spinner.succeed(G2(`Veto threshold change queued (${Number(opts.bps) / 100}%). Finalize after the timelock delay with \`sherwood governor finalize-param\`.`));
|
|
2429
2450
|
console.log(DIM2(` ${getExplorerUrl(hash)}`));
|
|
2430
2451
|
} catch (err) {
|
|
2431
2452
|
spinner.fail("Failed to set veto threshold");
|
|
@@ -2437,7 +2458,7 @@ function registerGovernorCommands(program2) {
|
|
|
2437
2458
|
const spinner = ora6("Setting max fee...").start();
|
|
2438
2459
|
try {
|
|
2439
2460
|
const hash = await setMaxPerformanceFeeBps(parseBigIntArg(opts.bps, "bps"));
|
|
2440
|
-
spinner.succeed(G2(`Max performance fee
|
|
2461
|
+
spinner.succeed(G2(`Max performance fee change queued (${Number(opts.bps) / 100}%). Finalize after the timelock delay with \`sherwood governor finalize-param\`.`));
|
|
2441
2462
|
console.log(DIM2(` ${getExplorerUrl(hash)}`));
|
|
2442
2463
|
} catch (err) {
|
|
2443
2464
|
spinner.fail("Failed to set max fee");
|
|
@@ -2449,7 +2470,7 @@ function registerGovernorCommands(program2) {
|
|
|
2449
2470
|
const spinner = ora6("Setting max duration...").start();
|
|
2450
2471
|
try {
|
|
2451
2472
|
const hash = await setMaxStrategyDuration(parseBigIntArg(opts.seconds, "seconds"));
|
|
2452
|
-
spinner.succeed(G2(`Max strategy duration
|
|
2473
|
+
spinner.succeed(G2(`Max strategy duration change queued (${opts.seconds}s). Finalize after the timelock delay with \`sherwood governor finalize-param\`.`));
|
|
2453
2474
|
console.log(DIM2(` ${getExplorerUrl(hash)}`));
|
|
2454
2475
|
} catch (err) {
|
|
2455
2476
|
spinner.fail("Failed to set max duration");
|
|
@@ -2461,7 +2482,7 @@ function registerGovernorCommands(program2) {
|
|
|
2461
2482
|
const spinner = ora6("Setting cooldown...").start();
|
|
2462
2483
|
try {
|
|
2463
2484
|
const hash = await setCooldownPeriod(parseBigIntArg(opts.seconds, "seconds"));
|
|
2464
|
-
spinner.succeed(G2(`Cooldown period
|
|
2485
|
+
spinner.succeed(G2(`Cooldown period change queued (${opts.seconds}s). Finalize after the timelock delay with \`sherwood governor finalize-param\`.`));
|
|
2465
2486
|
console.log(DIM2(` ${getExplorerUrl(hash)}`));
|
|
2466
2487
|
} catch (err) {
|
|
2467
2488
|
spinner.fail("Failed to set cooldown");
|
|
@@ -2473,7 +2494,7 @@ function registerGovernorCommands(program2) {
|
|
|
2473
2494
|
const spinner = ora6("Setting protocol fee...").start();
|
|
2474
2495
|
try {
|
|
2475
2496
|
const hash = await setProtocolFeeBps(parseBigIntArg(opts.bps, "bps"));
|
|
2476
|
-
spinner.succeed(G2(`Protocol fee
|
|
2497
|
+
spinner.succeed(G2(`Protocol fee change queued (${Number(opts.bps) / 100}%). Finalize after the timelock delay with \`sherwood governor finalize-param\`.`));
|
|
2477
2498
|
console.log(DIM2(` ${getExplorerUrl(hash)}`));
|
|
2478
2499
|
} catch (err) {
|
|
2479
2500
|
spinner.fail("Failed to set protocol fee");
|
|
@@ -2488,8 +2509,10 @@ try {
|
|
|
2488
2509
|
loadDotenv();
|
|
2489
2510
|
} catch {
|
|
2490
2511
|
}
|
|
2512
|
+
var require2 = createRequire(import.meta.url);
|
|
2513
|
+
var { version: CLI_VERSION } = require2("../package.json");
|
|
2491
2514
|
async function loadXmtp() {
|
|
2492
|
-
return import("./xmtp-
|
|
2515
|
+
return import("./xmtp-2RDICHX6.js");
|
|
2493
2516
|
}
|
|
2494
2517
|
async function loadCron() {
|
|
2495
2518
|
return import("./cron-RG46PYWA.js");
|
|
@@ -2500,18 +2523,26 @@ var DIM3 = chalk7.gray;
|
|
|
2500
2523
|
var BOLD3 = chalk7.white.bold;
|
|
2501
2524
|
var LABEL3 = chalk7.green.bold;
|
|
2502
2525
|
var SEP3 = () => console.log(DIM3("\u2500".repeat(60)));
|
|
2526
|
+
function validateAddress(value, name) {
|
|
2527
|
+
if (!isAddress5(value)) {
|
|
2528
|
+
console.error(chalk7.red(`Invalid ${name} address: ${value}`));
|
|
2529
|
+
process.exit(1);
|
|
2530
|
+
}
|
|
2531
|
+
return value;
|
|
2532
|
+
}
|
|
2503
2533
|
function resolveVault(opts) {
|
|
2504
2534
|
if (opts.vault) {
|
|
2505
|
-
setVaultAddress(opts.vault);
|
|
2535
|
+
setVaultAddress(validateAddress(opts.vault, "vault"));
|
|
2506
2536
|
}
|
|
2507
2537
|
}
|
|
2508
2538
|
var program = new Command();
|
|
2509
|
-
program.name("sherwood").description("CLI for agent-managed investment syndicates").version(
|
|
2539
|
+
program.name("sherwood").description("CLI for agent-managed investment syndicates").version(CLI_VERSION).addOption(
|
|
2510
2540
|
new Option("--chain <network>", "Target network").choices(VALID_NETWORKS).default("base")
|
|
2511
2541
|
).option("--testnet", "Alias for --chain base-sepolia (deprecated)", false).hook("preAction", (thisCommand) => {
|
|
2512
2542
|
const opts = thisCommand.optsWithGlobals();
|
|
2513
2543
|
let network = opts.chain;
|
|
2514
2544
|
if (opts.testnet) {
|
|
2545
|
+
process.env.ENABLE_TESTNET = "true";
|
|
2515
2546
|
if (network !== "base") {
|
|
2516
2547
|
console.warn(
|
|
2517
2548
|
chalk7.yellow("[warn] --testnet ignored, --chain takes precedence")
|
|
@@ -2826,7 +2857,8 @@ syndicate.command("approve-depositor").description("Approve an address to deposi
|
|
|
2826
2857
|
resolveVault(opts);
|
|
2827
2858
|
const spinner = ora7("Approving depositor...").start();
|
|
2828
2859
|
try {
|
|
2829
|
-
const
|
|
2860
|
+
const depositor = validateAddress(opts.depositor, "depositor");
|
|
2861
|
+
const hash = await approveDepositor(depositor);
|
|
2830
2862
|
spinner.succeed(`Depositor approved: ${hash}`);
|
|
2831
2863
|
console.log(chalk7.dim(` ${getExplorerUrl(hash)}`));
|
|
2832
2864
|
} catch (err) {
|
|
@@ -2839,7 +2871,8 @@ syndicate.command("remove-depositor").description("Remove an address from the de
|
|
|
2839
2871
|
resolveVault(opts);
|
|
2840
2872
|
const spinner = ora7("Removing depositor...").start();
|
|
2841
2873
|
try {
|
|
2842
|
-
const
|
|
2874
|
+
const depositor = validateAddress(opts.depositor, "depositor");
|
|
2875
|
+
const hash = await removeDepositor(depositor);
|
|
2843
2876
|
spinner.succeed(`Depositor removed: ${hash}`);
|
|
2844
2877
|
console.log(chalk7.dim(` ${getExplorerUrl(hash)}`));
|
|
2845
2878
|
} catch (err) {
|
|
@@ -2859,10 +2892,11 @@ syndicate.command("add").description("Register an agent on a syndicate vault (cr
|
|
|
2859
2892
|
spinner.fail("Only the syndicate creator can add agents");
|
|
2860
2893
|
process.exit(1);
|
|
2861
2894
|
}
|
|
2895
|
+
const agentWallet = validateAddress(opts.wallet, "wallet");
|
|
2862
2896
|
spinner.text = "Registering agent...";
|
|
2863
2897
|
const hash = await registerAgent(
|
|
2864
2898
|
BigInt(opts.agentId),
|
|
2865
|
-
|
|
2899
|
+
agentWallet
|
|
2866
2900
|
);
|
|
2867
2901
|
spinner.succeed(`Agent registered: ${hash}`);
|
|
2868
2902
|
console.log(chalk7.dim(` ${getExplorerUrl(hash)}`));
|
|
@@ -3054,6 +3088,7 @@ syndicate.command("approve").description("Approve an agent join request (registe
|
|
|
3054
3088
|
resolveVault(opts);
|
|
3055
3089
|
}
|
|
3056
3090
|
const vaultAddress = getVaultAddress();
|
|
3091
|
+
const agentWallet = validateAddress(opts.wallet, "wallet");
|
|
3057
3092
|
const { creator, subdomain, id: syndicateId } = await resolveVaultSyndicate(vaultAddress);
|
|
3058
3093
|
const callerAddress = getAccount().address.toLowerCase();
|
|
3059
3094
|
if (creator.toLowerCase() !== callerAddress) {
|
|
@@ -3065,7 +3100,7 @@ syndicate.command("approve").description("Approve an agent join request (registe
|
|
|
3065
3100
|
try {
|
|
3066
3101
|
const regHash = await registerAgent(
|
|
3067
3102
|
BigInt(opts.agentId),
|
|
3068
|
-
|
|
3103
|
+
agentWallet
|
|
3069
3104
|
);
|
|
3070
3105
|
agentWasRegistered = true;
|
|
3071
3106
|
console.log(DIM3(` Agent registered: ${getExplorerUrl(regHash)}`));
|
|
@@ -3095,7 +3130,7 @@ syndicate.command("approve").description("Approve an agent join request (registe
|
|
|
3095
3130
|
syndicateId,
|
|
3096
3131
|
BigInt(opts.agentId),
|
|
3097
3132
|
vaultAddress,
|
|
3098
|
-
|
|
3133
|
+
agentWallet
|
|
3099
3134
|
);
|
|
3100
3135
|
approvalUid = result.uid;
|
|
3101
3136
|
}
|
|
@@ -3278,7 +3313,7 @@ strategy.command("run").description("Execute the levered swap strategy").option(
|
|
|
3278
3313
|
await runLeveredSwap(opts);
|
|
3279
3314
|
});
|
|
3280
3315
|
program.command("providers").description("List available DeFi providers").action(async () => {
|
|
3281
|
-
const { MessariProvider, NansenProvider } = await import("./research-
|
|
3316
|
+
const { MessariProvider, NansenProvider } = await import("./research-DNR46NSK.js");
|
|
3282
3317
|
const providers = [new MoonwellProvider(), new UniswapProvider(), new MessariProvider(), new NansenProvider()];
|
|
3283
3318
|
for (const p of providers) {
|
|
3284
3319
|
const info = p.info();
|
|
@@ -3289,7 +3324,7 @@ ${info.name} (${info.type})`);
|
|
|
3289
3324
|
}
|
|
3290
3325
|
});
|
|
3291
3326
|
try {
|
|
3292
|
-
const { registerChatCommands } = await import("./chat-
|
|
3327
|
+
const { registerChatCommands } = await import("./chat-VDYE5MV4.js");
|
|
3293
3328
|
registerChatCommands(program);
|
|
3294
3329
|
} catch {
|
|
3295
3330
|
program.command("chat <name> [action] [actionArgs...]").description("Syndicate chat (XMTP) \u2014 requires @xmtp/cli").action(() => {
|
|
@@ -3299,14 +3334,14 @@ try {
|
|
|
3299
3334
|
process.exit(1);
|
|
3300
3335
|
});
|
|
3301
3336
|
}
|
|
3302
|
-
var { registerSessionCommands } = await import("./session-
|
|
3337
|
+
var { registerSessionCommands } = await import("./session-GZVBQCSP.js");
|
|
3303
3338
|
registerSessionCommands(program);
|
|
3304
3339
|
registerVeniceCommands(program);
|
|
3305
3340
|
registerAllowanceCommands(program);
|
|
3306
3341
|
registerIdentityCommands(program);
|
|
3307
3342
|
registerProposalCommands(program);
|
|
3308
3343
|
registerGovernorCommands(program);
|
|
3309
|
-
var { registerResearchCommands } = await import("./research-
|
|
3344
|
+
var { registerResearchCommands } = await import("./research-CJ2JA24Q.js");
|
|
3310
3345
|
registerResearchCommands(program);
|
|
3311
3346
|
var configCmd = program.command("config");
|
|
3312
3347
|
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.)").action((opts) => {
|