@sherwoodagent/cli 0.59.7 → 0.59.12
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/{abis-ITHGPHGM.js → abis-4HWN2E3H.js} +2 -2
- package/dist/{agent-4XQOMAEM.js → agent-QI7GVRJV.js} +2 -2
- package/dist/{chat-AH36PC43.js → chat-J5G63PFI.js} +5 -5
- package/dist/{chunk-HP5AJE2G.js → chunk-4ZM3QQO7.js} +2 -2
- package/dist/{chunk-YW6MGRMQ.js → chunk-7TSAKVAO.js} +2 -2
- package/dist/{chunk-NLGMVZMW.js → chunk-GAT77CJE.js} +2 -2
- package/dist/{chunk-JW7WMYDW.js → chunk-IKQD5ERV.js} +2 -2
- package/dist/{chunk-XDEHIZKT.js → chunk-JE3FON2M.js} +2 -2
- package/dist/{chunk-SKOVJ7XM.js → chunk-YZHZSBES.js} +1 -15
- package/dist/chunk-YZHZSBES.js.map +1 -0
- package/dist/{eas-ZX2YIJG7.js → eas-YJF7L25R.js} +3 -3
- package/dist/{governor-IOMICY6I.js → governor-4JUK6HDR.js} +3 -3
- package/dist/index.js +95 -20
- package/dist/index.js.map +1 -1
- package/dist/{price-ZCWGU2OM.js → price-NJBSPQ3M.js} +2 -2
- package/dist/{research-PPZIWXSM.js → research-PZRG36KL.js} +3 -3
- package/dist/{session-OTI3BWIQ.js → session-U3NEZJ7X.js} +5 -5
- package/dist/{trade-3OVB2VX5.js → trade-HSNABOTJ.js} +6 -6
- package/dist/{xmtp-54ISDDT4.js → xmtp-54DNJCS5.js} +3 -3
- package/package.json +1 -1
- package/dist/chunk-SKOVJ7XM.js.map +0 -1
- /package/dist/{abis-ITHGPHGM.js.map → abis-4HWN2E3H.js.map} +0 -0
- /package/dist/{agent-4XQOMAEM.js.map → agent-QI7GVRJV.js.map} +0 -0
- /package/dist/{chat-AH36PC43.js.map → chat-J5G63PFI.js.map} +0 -0
- /package/dist/{chunk-HP5AJE2G.js.map → chunk-4ZM3QQO7.js.map} +0 -0
- /package/dist/{chunk-YW6MGRMQ.js.map → chunk-7TSAKVAO.js.map} +0 -0
- /package/dist/{chunk-NLGMVZMW.js.map → chunk-GAT77CJE.js.map} +0 -0
- /package/dist/{chunk-JW7WMYDW.js.map → chunk-IKQD5ERV.js.map} +0 -0
- /package/dist/{chunk-XDEHIZKT.js.map → chunk-JE3FON2M.js.map} +0 -0
- /package/dist/{eas-ZX2YIJG7.js.map → eas-YJF7L25R.js.map} +0 -0
- /package/dist/{governor-IOMICY6I.js.map → governor-4JUK6HDR.js.map} +0 -0
- /package/dist/{price-ZCWGU2OM.js.map → price-NJBSPQ3M.js.map} +0 -0
- /package/dist/{research-PPZIWXSM.js.map → research-PZRG36KL.js.map} +0 -0
- /package/dist/{session-OTI3BWIQ.js.map → session-U3NEZJ7X.js.map} +0 -0
- /package/dist/{trade-3OVB2VX5.js.map → trade-HSNABOTJ.js.map} +0 -0
- /package/dist/{xmtp-54ISDDT4.js.map → xmtp-54DNJCS5.js.map} +0 -0
package/dist/index.js
CHANGED
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
encodeSwapPath,
|
|
16
16
|
getMultiHopQuote,
|
|
17
17
|
getQuote
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-7TSAKVAO.js";
|
|
19
19
|
import {
|
|
20
20
|
chatCompletion,
|
|
21
21
|
checkApiKeyValid,
|
|
@@ -32,14 +32,14 @@ import {
|
|
|
32
32
|
queryJoinRequests,
|
|
33
33
|
revokeJoinRequest,
|
|
34
34
|
stripReferrerPrefix
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-JE3FON2M.js";
|
|
36
36
|
import {
|
|
37
37
|
createSyndicate,
|
|
38
38
|
getActiveSyndicates,
|
|
39
39
|
getSyndicate,
|
|
40
40
|
subdomainExists,
|
|
41
41
|
updateMetadata
|
|
42
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-GAT77CJE.js";
|
|
43
43
|
import {
|
|
44
44
|
approveDepositor,
|
|
45
45
|
deposit,
|
|
@@ -63,7 +63,7 @@ import {
|
|
|
63
63
|
searchSyndicateAcrossChains,
|
|
64
64
|
setTextRecord,
|
|
65
65
|
setVaultAddress
|
|
66
|
-
} from "./chunk-
|
|
66
|
+
} from "./chunk-4ZM3QQO7.js";
|
|
67
67
|
import {
|
|
68
68
|
PROPOSAL_STATE,
|
|
69
69
|
PROPOSAL_STATES,
|
|
@@ -95,7 +95,7 @@ import {
|
|
|
95
95
|
setVotingPeriod,
|
|
96
96
|
settleProposal,
|
|
97
97
|
vote
|
|
98
|
-
} from "./chunk-
|
|
98
|
+
} from "./chunk-IKQD5ERV.js";
|
|
99
99
|
import {
|
|
100
100
|
AERODROME,
|
|
101
101
|
AGENT_REGISTRY,
|
|
@@ -161,7 +161,7 @@ import {
|
|
|
161
161
|
SWAP_ROUTER_EXACT_INPUT_SINGLE_ABI,
|
|
162
162
|
SYNDICATE_VAULT_ABI,
|
|
163
163
|
VENICE_STAKING_ABI
|
|
164
|
-
} from "./chunk-
|
|
164
|
+
} from "./chunk-YZHZSBES.js";
|
|
165
165
|
import {
|
|
166
166
|
fetchMetadata,
|
|
167
167
|
uploadMetadata
|
|
@@ -933,6 +933,50 @@ function resolveTemplate(key) {
|
|
|
933
933
|
}
|
|
934
934
|
return { def, address };
|
|
935
935
|
}
|
|
936
|
+
function computeProposalAssetChecks(templateKey, opts) {
|
|
937
|
+
if (templateKey === "moonwell-supply" || templateKey === "mamo-yield") {
|
|
938
|
+
if (!opts.amount) return [];
|
|
939
|
+
const token = opts.token || "USDC";
|
|
940
|
+
const asset = resolveToken(token);
|
|
941
|
+
const decimals = token.toUpperCase() === "USDC" ? 6 : 18;
|
|
942
|
+
return [{ asset, amount: parseUnits(opts.amount, decimals), label: token.toUpperCase() }];
|
|
943
|
+
}
|
|
944
|
+
if (templateKey === "venice-inference") {
|
|
945
|
+
if (!opts.amount) return [];
|
|
946
|
+
const assetSymbol = opts.asset || "USDC";
|
|
947
|
+
const asset = resolveToken(assetSymbol);
|
|
948
|
+
const decimals = assetSymbol.toUpperCase() === "USDC" ? 6 : 18;
|
|
949
|
+
return [{ asset, amount: parseUnits(opts.amount, decimals), label: assetSymbol.toUpperCase() }];
|
|
950
|
+
}
|
|
951
|
+
if (templateKey === "aerodrome-lp") {
|
|
952
|
+
if (!opts.tokenA || !opts.tokenB || !opts.amountA || !opts.amountB) return [];
|
|
953
|
+
return [];
|
|
954
|
+
}
|
|
955
|
+
if (templateKey === "wsteth-moonwell") {
|
|
956
|
+
if (!opts.amount) return [];
|
|
957
|
+
return [{
|
|
958
|
+
asset: TOKENS().WETH,
|
|
959
|
+
amount: parseUnits(opts.amount, 18),
|
|
960
|
+
label: "WETH"
|
|
961
|
+
}];
|
|
962
|
+
}
|
|
963
|
+
if (templateKey === "portfolio") {
|
|
964
|
+
if (!opts.amount) return [];
|
|
965
|
+
const defaultAsset = getNetwork() === "robinhood-testnet" ? "WETH" : "USDC";
|
|
966
|
+
const assetSymbol = opts.asset || defaultAsset;
|
|
967
|
+
const asset = resolveToken(assetSymbol);
|
|
968
|
+
const decimals = assetSymbol.toUpperCase() === "USDC" ? 6 : 18;
|
|
969
|
+
return [{ asset, amount: parseUnits(opts.amount, decimals), label: assetSymbol.toUpperCase() }];
|
|
970
|
+
}
|
|
971
|
+
if (templateKey === "hyperliquid-perp" || templateKey === "hyperliquid-grid") {
|
|
972
|
+
if (!opts.amount) return [];
|
|
973
|
+
const token = opts.token || "USDC";
|
|
974
|
+
const asset = resolveToken(token);
|
|
975
|
+
const decimals = token.toUpperCase() === "USDC" ? 6 : 18;
|
|
976
|
+
return [{ asset, amount: parseUnits(opts.amount, decimals), label: token.toUpperCase() }];
|
|
977
|
+
}
|
|
978
|
+
return [];
|
|
979
|
+
}
|
|
936
980
|
async function buildInitDataForTemplate(templateKey, opts, vault) {
|
|
937
981
|
if (templateKey === "moonwell-supply") {
|
|
938
982
|
if (!opts.amount) {
|
|
@@ -1513,6 +1557,37 @@ function registerStrategyTemplateCommands(strategy2) {
|
|
|
1513
1557
|
console.error(chalk.red(` Vault ${vault} is paused. Cannot propose.`));
|
|
1514
1558
|
process.exit(1);
|
|
1515
1559
|
}
|
|
1560
|
+
const checks = computeProposalAssetChecks(templateKey, opts);
|
|
1561
|
+
for (const check of checks) {
|
|
1562
|
+
if (check.amount === 0n) continue;
|
|
1563
|
+
const [balance, decimals] = await Promise.all([
|
|
1564
|
+
publicClient.readContract({
|
|
1565
|
+
address: check.asset,
|
|
1566
|
+
abi: erc20Abi,
|
|
1567
|
+
functionName: "balanceOf",
|
|
1568
|
+
args: [vault]
|
|
1569
|
+
}),
|
|
1570
|
+
publicClient.readContract({
|
|
1571
|
+
address: check.asset,
|
|
1572
|
+
abi: erc20Abi,
|
|
1573
|
+
functionName: "decimals"
|
|
1574
|
+
})
|
|
1575
|
+
]);
|
|
1576
|
+
if (balance < check.amount) {
|
|
1577
|
+
preflightSpinner.fail("Preflight failed");
|
|
1578
|
+
console.error(
|
|
1579
|
+
chalk.red(
|
|
1580
|
+
` Vault ${vault} holds ${formatUnits(balance, decimals)} ${check.label} but proposal requires ${formatUnits(check.amount, decimals)} ${check.label}.`
|
|
1581
|
+
)
|
|
1582
|
+
);
|
|
1583
|
+
console.error(
|
|
1584
|
+
chalk.yellow(
|
|
1585
|
+
` Hint: --amount is in human units (e.g. "10" = 10 ${check.label}), not raw decimals.`
|
|
1586
|
+
)
|
|
1587
|
+
);
|
|
1588
|
+
process.exit(1);
|
|
1589
|
+
}
|
|
1590
|
+
}
|
|
1516
1591
|
preflightSpinner.succeed("Preflight OK");
|
|
1517
1592
|
} catch (err) {
|
|
1518
1593
|
preflightSpinner.fail("Preflight failed");
|
|
@@ -1627,9 +1702,9 @@ function registerStrategyTemplateCommands(strategy2) {
|
|
|
1627
1702
|
console.error(chalk.red("Missing --name, --performance-fee, or --duration. Use --write-calls to skip proposal submission."));
|
|
1628
1703
|
process.exit(1);
|
|
1629
1704
|
}
|
|
1630
|
-
const { propose: propose2 } = await import("./governor-
|
|
1705
|
+
const { propose: propose2 } = await import("./governor-4JUK6HDR.js");
|
|
1631
1706
|
const { pinJSON } = await import("./ipfs-IGXLLJCF.js");
|
|
1632
|
-
const { parseDuration: parseDuration2 } = await import("./governor-
|
|
1707
|
+
const { parseDuration: parseDuration2 } = await import("./governor-4JUK6HDR.js");
|
|
1633
1708
|
const performanceFeeBps = BigInt(opts.performanceFee);
|
|
1634
1709
|
if (performanceFeeBps < 0n || performanceFeeBps > 10000n) {
|
|
1635
1710
|
console.error(chalk.red("--performance-fee must be 0-10000 (basis points)"));
|
|
@@ -1737,7 +1812,7 @@ function registerStrategyTemplateCommands(strategy2) {
|
|
|
1737
1812
|
let prices = [];
|
|
1738
1813
|
let priceSource = null;
|
|
1739
1814
|
try {
|
|
1740
|
-
const { getTokenPricesInAsset } = await import("./price-
|
|
1815
|
+
const { getTokenPricesInAsset } = await import("./price-NJBSPQ3M.js");
|
|
1741
1816
|
prices = await getTokenPricesInAsset({
|
|
1742
1817
|
tokens: allocations.map((a, i) => ({
|
|
1743
1818
|
token: a.token,
|
|
@@ -2167,7 +2242,7 @@ function registerVeniceCommands(program2) {
|
|
|
2167
2242
|
console.log(chalk2.dim(` Key: ${apiKey.slice(0, 8)}...${apiKey.slice(-4)}`));
|
|
2168
2243
|
console.log(chalk2.dim(" Saved to ~/.sherwood/config.json"));
|
|
2169
2244
|
try {
|
|
2170
|
-
const { createVeniceProvisionAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-
|
|
2245
|
+
const { createVeniceProvisionAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-YJF7L25R.js");
|
|
2171
2246
|
const { uid } = await createVeniceProvisionAttestation(account.address);
|
|
2172
2247
|
if (uid !== "0x0000000000000000000000000000000000000000000000000000000000000000") {
|
|
2173
2248
|
console.log(chalk2.dim(` Attested: ${getEasScanUrl2(uid)}`));
|
|
@@ -2523,7 +2598,7 @@ ${opts.prompt}`;
|
|
|
2523
2598
|
console.log(chalk2.dim(`Model: ${result.model} | Tokens: ${result.usage.promptTokens} in, ${result.usage.completionTokens} out, ${result.usage.totalTokens} total`));
|
|
2524
2599
|
}
|
|
2525
2600
|
try {
|
|
2526
|
-
const { createVeniceInferenceAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-
|
|
2601
|
+
const { createVeniceInferenceAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-YJF7L25R.js");
|
|
2527
2602
|
const { keccak256: keccak2562, toHex, isAddress: isAddr } = await import("viem");
|
|
2528
2603
|
const { getChainContracts: getChainContracts2 } = await import("./config-REASKDIK.js");
|
|
2529
2604
|
const { getChain: getActiveChain } = await import("./network-3ZU7UBDU.js");
|
|
@@ -3738,7 +3813,7 @@ function printSimulationResult(result, callType) {
|
|
|
3738
3813
|
}
|
|
3739
3814
|
async function sendSimulationAlert(subdomain, proposalId, vault, execResult, settleResult) {
|
|
3740
3815
|
try {
|
|
3741
|
-
const xmtp = await import("./xmtp-
|
|
3816
|
+
const xmtp = await import("./xmtp-54DNJCS5.js");
|
|
3742
3817
|
const { getAccount: getAccount2 } = await import("./client-UHHCB6EZ.js");
|
|
3743
3818
|
const group = await xmtp.getGroup("", subdomain);
|
|
3744
3819
|
const allRisks = [...execResult.risks, ...settleResult?.risks ?? []];
|
|
@@ -6953,7 +7028,7 @@ function parseTokenSplit(raw, tokens) {
|
|
|
6953
7028
|
}
|
|
6954
7029
|
function registerGridCommand(program2) {
|
|
6955
7030
|
const grid = program2.command("grid").description("Grid trading strategy \u2014 ATR-based grid on BTC/ETH/SOL");
|
|
6956
|
-
grid.command("start").description("Start the grid trading loop").option("--capital <usd>", "Starting capital in USD", "5000").option("--cycle <seconds>", "Cycle interval in seconds", "60").option("--tokens <list>", "Comma-separated token list", "bitcoin,ethereum,solana").option("--leverage <n>", "Leverage multiplier", String(DEFAULT_GRID_CONFIG.leverage)).option("--levels <n>", "Grid levels per side", String(DEFAULT_GRID_CONFIG.levelsPerSide)).option("--live", "enable live execution (places real orders on Hyperliquid)").option("--asset-indices <pairs>", "comma-separated token=index pairs (
|
|
7031
|
+
grid.command("start").description("Start the grid trading loop").option("--capital <usd>", "Starting capital in USD", "5000").option("--cycle <seconds>", "Cycle interval in seconds", "60").option("--tokens <list>", "Comma-separated token list", "bitcoin,ethereum,solana").option("--leverage <n>", "Leverage multiplier", String(DEFAULT_GRID_CONFIG.leverage)).option("--levels <n>", "Grid levels per side", String(DEFAULT_GRID_CONFIG.levelsPerSide)).option("--live", "enable live execution (places real orders on Hyperliquid)").option("--asset-indices <pairs>", "comma-separated token=index pairs (mainnet: bitcoin=0,ethereum=1,solana=5)").option("--strategy <address>", "on-chain strategy contract address (enables on-chain executor)").option("--token-split <pairs>", "Comma-separated token=weight pairs (must sum to 1.0). Default: equal-weight.").option("--state-dir <path>", "Override directory for portfolio.json / hedge.json / cycles.jsonl / onchain-state.json. Defaults to ~/.sherwood/grid. Use a separate dir to run paper and live grids in parallel.").action(async (opts) => {
|
|
6957
7032
|
const capital = parseFloat(opts.capital);
|
|
6958
7033
|
const cycleMs = parseInt(opts.cycle, 10) * 1e3;
|
|
6959
7034
|
const tokens = opts.tokens.split(",").map((t) => t.trim());
|
|
@@ -6964,7 +7039,7 @@ function registerGridCommand(program2) {
|
|
|
6964
7039
|
let assetIndices;
|
|
6965
7040
|
if (live) {
|
|
6966
7041
|
if (!opts.assetIndices) {
|
|
6967
|
-
throw new Error("--asset-indices required when --live (
|
|
7042
|
+
throw new Error("--asset-indices required when --live (mainnet: --asset-indices bitcoin=0,ethereum=1,solana=5)");
|
|
6968
7043
|
}
|
|
6969
7044
|
assetIndices = {};
|
|
6970
7045
|
for (const pair of opts.assetIndices.split(",")) {
|
|
@@ -7190,7 +7265,7 @@ try {
|
|
|
7190
7265
|
var require2 = createRequire(import.meta.url);
|
|
7191
7266
|
var { version: CLI_VERSION } = require2("../package.json");
|
|
7192
7267
|
async function loadXmtp() {
|
|
7193
|
-
return import("./xmtp-
|
|
7268
|
+
return import("./xmtp-54DNJCS5.js");
|
|
7194
7269
|
}
|
|
7195
7270
|
async function loadCron() {
|
|
7196
7271
|
return import("./cron-EOULYO3R.js");
|
|
@@ -8340,7 +8415,7 @@ ${info.name} (${info.type})`);
|
|
|
8340
8415
|
}
|
|
8341
8416
|
});
|
|
8342
8417
|
try {
|
|
8343
|
-
const { registerChatCommands } = await import("./chat-
|
|
8418
|
+
const { registerChatCommands } = await import("./chat-J5G63PFI.js");
|
|
8344
8419
|
registerChatCommands(program);
|
|
8345
8420
|
} catch {
|
|
8346
8421
|
program.command("chat <name> [action] [actionArgs...]").description("Syndicate chat (XMTP) \u2014 requires @xmtp/cli").action(() => {
|
|
@@ -8350,7 +8425,7 @@ try {
|
|
|
8350
8425
|
process.exit(1);
|
|
8351
8426
|
});
|
|
8352
8427
|
}
|
|
8353
|
-
var { registerSessionCommands } = await import("./session-
|
|
8428
|
+
var { registerSessionCommands } = await import("./session-U3NEZJ7X.js");
|
|
8354
8429
|
registerSessionCommands(program);
|
|
8355
8430
|
registerVeniceCommands(program);
|
|
8356
8431
|
registerAllowanceCommands(program);
|
|
@@ -8358,11 +8433,11 @@ registerIdentityCommands(program);
|
|
|
8358
8433
|
registerProposalCommands(program);
|
|
8359
8434
|
registerGovernorCommands(program);
|
|
8360
8435
|
registerGuardianCommands(program);
|
|
8361
|
-
var { registerResearchCommands } = await import("./research-
|
|
8436
|
+
var { registerResearchCommands } = await import("./research-PZRG36KL.js");
|
|
8362
8437
|
registerResearchCommands(program);
|
|
8363
|
-
var { registerAgentCommands } = await import("./agent-
|
|
8438
|
+
var { registerAgentCommands } = await import("./agent-QI7GVRJV.js");
|
|
8364
8439
|
registerAgentCommands(program);
|
|
8365
|
-
var { registerTradeCommands } = await import("./trade-
|
|
8440
|
+
var { registerTradeCommands } = await import("./trade-HSNABOTJ.js");
|
|
8366
8441
|
registerTradeCommands(program);
|
|
8367
8442
|
registerGridCommand(program);
|
|
8368
8443
|
var configCmd = program.command("config");
|