@sherwoodagent/cli 0.53.3 → 0.54.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/{abis-Z6M6SRPX.js → abis-VYJH7B2L.js} +2 -2
- package/dist/{agent-ER5GYBVQ.js → agent-VPUXRS7K.js} +2 -2
- package/dist/{chat-JMQNUJGF.js → chat-ZTFSH2BI.js} +5 -5
- package/dist/{chunk-4SZU32RM.js → chunk-2D4CFEU4.js} +25 -2
- package/dist/chunk-2D4CFEU4.js.map +1 -0
- package/dist/{chunk-DICS6PQM.js → chunk-6RPL24V6.js} +2 -2
- package/dist/{chunk-J2FOCXF2.js → chunk-FUH5ZDXH.js} +24 -1
- package/dist/chunk-FUH5ZDXH.js.map +1 -0
- package/dist/{chunk-KIRNQZJS.js → chunk-ZBEDR65Q.js} +2 -2
- package/dist/{chunk-AFLGHTOF.js → chunk-ZN5XF7OO.js} +2 -2
- package/dist/{chunk-MOU5FAEP.js → chunk-ZP64YMHR.js} +2 -2
- package/dist/{eas-U6DMTANA.js → eas-77DQGKWM.js} +3 -3
- package/dist/{governor-4Y6XDEVH.js → governor-65CZTQQQ.js} +7 -3
- package/dist/index.js +57 -21
- package/dist/index.js.map +1 -1
- package/dist/{price-RMH6KUTM.js → price-EIJSN5QA.js} +2 -2
- package/dist/{research-AQE726DA.js → research-7ABHFSI2.js} +3 -3
- package/dist/{session-MVLCQDLG.js → session-HB3XXXKS.js} +5 -5
- package/dist/{trade-FKC57GXZ.js → trade-XMOZ5ULE.js} +6 -6
- package/dist/{xmtp-VJMC2TR2.js → xmtp-OCLOP5OY.js} +3 -3
- package/package.json +1 -1
- package/dist/chunk-4SZU32RM.js.map +0 -1
- package/dist/chunk-J2FOCXF2.js.map +0 -1
- /package/dist/{abis-Z6M6SRPX.js.map → abis-VYJH7B2L.js.map} +0 -0
- /package/dist/{agent-ER5GYBVQ.js.map → agent-VPUXRS7K.js.map} +0 -0
- /package/dist/{chat-JMQNUJGF.js.map → chat-ZTFSH2BI.js.map} +0 -0
- /package/dist/{chunk-DICS6PQM.js.map → chunk-6RPL24V6.js.map} +0 -0
- /package/dist/{chunk-KIRNQZJS.js.map → chunk-ZBEDR65Q.js.map} +0 -0
- /package/dist/{chunk-AFLGHTOF.js.map → chunk-ZN5XF7OO.js.map} +0 -0
- /package/dist/{chunk-MOU5FAEP.js.map → chunk-ZP64YMHR.js.map} +0 -0
- /package/dist/{eas-U6DMTANA.js.map → eas-77DQGKWM.js.map} +0 -0
- /package/dist/{governor-4Y6XDEVH.js.map → governor-65CZTQQQ.js.map} +0 -0
- /package/dist/{price-RMH6KUTM.js.map → price-EIJSN5QA.js.map} +0 -0
- /package/dist/{research-AQE726DA.js.map → research-7ABHFSI2.js.map} +0 -0
- /package/dist/{session-MVLCQDLG.js.map → session-HB3XXXKS.js.map} +0 -0
- /package/dist/{trade-FKC57GXZ.js.map → trade-XMOZ5ULE.js.map} +0 -0
- /package/dist/{xmtp-VJMC2TR2.js.map → xmtp-OCLOP5OY.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-6RPL24V6.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-ZP64YMHR.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-ZBEDR65Q.js";
|
|
43
43
|
import {
|
|
44
44
|
approveDepositor,
|
|
45
45
|
deposit,
|
|
@@ -63,11 +63,12 @@ import {
|
|
|
63
63
|
searchSyndicateAcrossChains,
|
|
64
64
|
setTextRecord,
|
|
65
65
|
setVaultAddress
|
|
66
|
-
} from "./chunk-
|
|
66
|
+
} from "./chunk-ZN5XF7OO.js";
|
|
67
67
|
import {
|
|
68
68
|
PROPOSAL_STATE,
|
|
69
69
|
PROPOSAL_STATES,
|
|
70
70
|
VOTE_TYPE,
|
|
71
|
+
bindProposalAdapter,
|
|
71
72
|
cancelProposal,
|
|
72
73
|
emergencyCancel,
|
|
73
74
|
emergencySettle,
|
|
@@ -95,7 +96,7 @@ import {
|
|
|
95
96
|
setVotingPeriod,
|
|
96
97
|
settleProposal,
|
|
97
98
|
vote
|
|
98
|
-
} from "./chunk-
|
|
99
|
+
} from "./chunk-2D4CFEU4.js";
|
|
99
100
|
import {
|
|
100
101
|
AERODROME,
|
|
101
102
|
AGENT_REGISTRY,
|
|
@@ -160,7 +161,7 @@ import {
|
|
|
160
161
|
SWAP_ROUTER_EXACT_INPUT_SINGLE_ABI,
|
|
161
162
|
SYNDICATE_VAULT_ABI,
|
|
162
163
|
VENICE_STAKING_ABI
|
|
163
|
-
} from "./chunk-
|
|
164
|
+
} from "./chunk-FUH5ZDXH.js";
|
|
164
165
|
import {
|
|
165
166
|
fetchMetadata,
|
|
166
167
|
uploadMetadata
|
|
@@ -1538,9 +1539,9 @@ function registerStrategyTemplateCommands(strategy2) {
|
|
|
1538
1539
|
console.error(chalk.red("Missing --name, --performance-fee, or --duration. Use --write-calls to skip proposal submission."));
|
|
1539
1540
|
process.exit(1);
|
|
1540
1541
|
}
|
|
1541
|
-
const { propose: propose2 } = await import("./governor-
|
|
1542
|
+
const { propose: propose2, bindProposalAdapter: bindProposalAdapter2 } = await import("./governor-65CZTQQQ.js");
|
|
1542
1543
|
const { pinJSON } = await import("./ipfs-IGXLLJCF.js");
|
|
1543
|
-
const { parseDuration: parseDuration2 } = await import("./governor-
|
|
1544
|
+
const { parseDuration: parseDuration2 } = await import("./governor-65CZTQQQ.js");
|
|
1544
1545
|
const performanceFeeBps = BigInt(opts.performanceFee);
|
|
1545
1546
|
if (performanceFeeBps < 0n || performanceFeeBps > 10000n) {
|
|
1546
1547
|
console.error(chalk.red("--performance-fee must be 0-10000 (basis points)"));
|
|
@@ -1569,6 +1570,7 @@ function registerStrategyTemplateCommands(strategy2) {
|
|
|
1569
1570
|
process.exit(1);
|
|
1570
1571
|
}
|
|
1571
1572
|
const proposeSpinner = ora("Submitting proposal...").start();
|
|
1573
|
+
let createdProposalId = null;
|
|
1572
1574
|
try {
|
|
1573
1575
|
const { hash, proposalId } = await propose2(
|
|
1574
1576
|
vault,
|
|
@@ -1578,6 +1580,7 @@ function registerStrategyTemplateCommands(strategy2) {
|
|
|
1578
1580
|
executeCalls,
|
|
1579
1581
|
settleCalls
|
|
1580
1582
|
);
|
|
1583
|
+
createdProposalId = proposalId;
|
|
1581
1584
|
proposeSpinner.succeed(`Proposal #${proposalId} created`);
|
|
1582
1585
|
console.log(`Proposal #${proposalId}`);
|
|
1583
1586
|
console.log(chalk.dim(` Tx: ${getExplorerUrl(hash)}`));
|
|
@@ -1587,6 +1590,18 @@ function registerStrategyTemplateCommands(strategy2) {
|
|
|
1587
1590
|
console.error(chalk.red(formatContractError(err)));
|
|
1588
1591
|
process.exit(1);
|
|
1589
1592
|
}
|
|
1593
|
+
if (createdProposalId !== null) {
|
|
1594
|
+
const bindSpinner = ora("Binding adapter for live NAV...").start();
|
|
1595
|
+
try {
|
|
1596
|
+
const bindHash = await bindProposalAdapter2(createdProposalId, clone);
|
|
1597
|
+
bindSpinner.succeed("Adapter bound \u2014 live deposits/withdraws enabled during strategy");
|
|
1598
|
+
console.log(chalk.dim(` Tx: ${getExplorerUrl(bindHash)}`));
|
|
1599
|
+
} catch (err) {
|
|
1600
|
+
bindSpinner.warn(
|
|
1601
|
+
`Adapter bind skipped (${formatContractError(err)}) \u2014 strategy will use queue-only redemptions`
|
|
1602
|
+
);
|
|
1603
|
+
}
|
|
1604
|
+
}
|
|
1590
1605
|
if (templateKey === "venice-inference") {
|
|
1591
1606
|
console.log();
|
|
1592
1607
|
console.log(chalk.yellow("Next steps:"));
|
|
@@ -1647,7 +1662,7 @@ function registerStrategyTemplateCommands(strategy2) {
|
|
|
1647
1662
|
let prices = [];
|
|
1648
1663
|
let priceSource = null;
|
|
1649
1664
|
try {
|
|
1650
|
-
const { getTokenPricesInAsset } = await import("./price-
|
|
1665
|
+
const { getTokenPricesInAsset } = await import("./price-EIJSN5QA.js");
|
|
1651
1666
|
prices = await getTokenPricesInAsset({
|
|
1652
1667
|
tokens: allocations.map((a, i) => ({
|
|
1653
1668
|
token: a.token,
|
|
@@ -2077,7 +2092,7 @@ function registerVeniceCommands(program2) {
|
|
|
2077
2092
|
console.log(chalk2.dim(` Key: ${apiKey.slice(0, 8)}...${apiKey.slice(-4)}`));
|
|
2078
2093
|
console.log(chalk2.dim(" Saved to ~/.sherwood/config.json"));
|
|
2079
2094
|
try {
|
|
2080
|
-
const { createVeniceProvisionAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-
|
|
2095
|
+
const { createVeniceProvisionAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-77DQGKWM.js");
|
|
2081
2096
|
const { uid } = await createVeniceProvisionAttestation(account.address);
|
|
2082
2097
|
if (uid !== "0x0000000000000000000000000000000000000000000000000000000000000000") {
|
|
2083
2098
|
console.log(chalk2.dim(` Attested: ${getEasScanUrl2(uid)}`));
|
|
@@ -2433,7 +2448,7 @@ ${opts.prompt}`;
|
|
|
2433
2448
|
console.log(chalk2.dim(`Model: ${result.model} | Tokens: ${result.usage.promptTokens} in, ${result.usage.completionTokens} out, ${result.usage.totalTokens} total`));
|
|
2434
2449
|
}
|
|
2435
2450
|
try {
|
|
2436
|
-
const { createVeniceInferenceAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-
|
|
2451
|
+
const { createVeniceInferenceAttestation, getEasScanUrl: getEasScanUrl2 } = await import("./eas-77DQGKWM.js");
|
|
2437
2452
|
const { keccak256: keccak2562, toHex, isAddress: isAddr } = await import("viem");
|
|
2438
2453
|
const { getChainContracts: getChainContracts2 } = await import("./config-REASKDIK.js");
|
|
2439
2454
|
const { getChain: getActiveChain } = await import("./network-3ZU7UBDU.js");
|
|
@@ -3609,7 +3624,7 @@ function printSimulationResult(result, callType) {
|
|
|
3609
3624
|
}
|
|
3610
3625
|
async function sendSimulationAlert(subdomain, proposalId, vault, execResult, settleResult) {
|
|
3611
3626
|
try {
|
|
3612
|
-
const xmtp = await import("./xmtp-
|
|
3627
|
+
const xmtp = await import("./xmtp-OCLOP5OY.js");
|
|
3613
3628
|
const { getAccount: getAccount2 } = await import("./client-UHHCB6EZ.js");
|
|
3614
3629
|
const group = await xmtp.getGroup("", subdomain);
|
|
3615
3630
|
const allRisks = [...execResult.risks, ...settleResult?.risks ?? []];
|
|
@@ -3981,6 +3996,25 @@ function registerProposalCommands(program2) {
|
|
|
3981
3996
|
process.exit(1);
|
|
3982
3997
|
}
|
|
3983
3998
|
});
|
|
3999
|
+
proposal.command("bind-adapter").description("Bind a strategy clone to a proposal for live NAV (proposer-only, Draft or Pending, before any co-proposer approval)").requiredOption("--id <proposalId>", "Proposal ID").requiredOption("--adapter <address>", "Strategy clone address").action(async (opts) => {
|
|
4000
|
+
try {
|
|
4001
|
+
const proposalId = parseBigIntArg(opts.id, "proposal ID");
|
|
4002
|
+
if (!isAddress4(opts.adapter)) {
|
|
4003
|
+
console.error(chalk6.red("Invalid adapter address"));
|
|
4004
|
+
process.exit(1);
|
|
4005
|
+
}
|
|
4006
|
+
const adapter = opts.adapter;
|
|
4007
|
+
const spinner = ora5("Binding adapter...").start();
|
|
4008
|
+
const hash = await bindProposalAdapter(proposalId, adapter);
|
|
4009
|
+
spinner.succeed(G2("Adapter bound \u2014 live deposits/withdraws enabled"));
|
|
4010
|
+
console.log(DIM2(` ${getExplorerUrl(hash)}`));
|
|
4011
|
+
console.log();
|
|
4012
|
+
} catch (err) {
|
|
4013
|
+
console.error(chalk6.red(`
|
|
4014
|
+
\u2716 ${formatContractError(err)}`));
|
|
4015
|
+
process.exit(1);
|
|
4016
|
+
}
|
|
4017
|
+
});
|
|
3984
4018
|
proposal.command("execute").description("Execute an approved proposal").requiredOption("--id <proposalId>", "Proposal ID").option("--dry-run", "Simulate execution without sending a transaction").action(async (opts) => {
|
|
3985
4019
|
try {
|
|
3986
4020
|
const proposalId = parseBigIntArg(opts.id, "proposal ID");
|
|
@@ -5196,8 +5230,10 @@ var DEFAULT_GRID_CONFIG = {
|
|
|
5196
5230
|
allocationPct: 0.5,
|
|
5197
5231
|
leverage: 5,
|
|
5198
5232
|
// was 4 — +25% profit per RT
|
|
5199
|
-
levelsPerSide:
|
|
5200
|
-
|
|
5233
|
+
levelsPerSide: 12,
|
|
5234
|
+
// disjoint-window winner — lowest MaxDD (18% vs 21-22%) at modest avg PnL trade-off
|
|
5235
|
+
atrMultiplier: 3,
|
|
5236
|
+
// ATR×3 dominates ATR×2 across all tested windows (lower fee burn)
|
|
5201
5237
|
atrPeriod: 14,
|
|
5202
5238
|
rebalanceDriftPct: 0.4,
|
|
5203
5239
|
// was 0.55 — rebalance faster, keep levels near price
|
|
@@ -6762,7 +6798,7 @@ function parseTokenSplit(raw, tokens) {
|
|
|
6762
6798
|
}
|
|
6763
6799
|
function registerGridCommand(program2) {
|
|
6764
6800
|
const grid = program2.command("grid").description("Grid trading strategy \u2014 ATR-based grid on BTC/ETH/SOL");
|
|
6765
|
-
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",
|
|
6801
|
+
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 (e.g. bitcoin=3,ethereum=4,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.").action(async (opts) => {
|
|
6766
6802
|
const capital = parseFloat(opts.capital);
|
|
6767
6803
|
const cycleMs = parseInt(opts.cycle, 10) * 1e3;
|
|
6768
6804
|
const tokens = opts.tokens.split(",").map((t) => t.trim());
|
|
@@ -6991,7 +7027,7 @@ try {
|
|
|
6991
7027
|
var require2 = createRequire(import.meta.url);
|
|
6992
7028
|
var { version: CLI_VERSION } = require2("../package.json");
|
|
6993
7029
|
async function loadXmtp() {
|
|
6994
|
-
return import("./xmtp-
|
|
7030
|
+
return import("./xmtp-OCLOP5OY.js");
|
|
6995
7031
|
}
|
|
6996
7032
|
async function loadCron() {
|
|
6997
7033
|
return import("./cron-EOULYO3R.js");
|
|
@@ -8141,7 +8177,7 @@ ${info.name} (${info.type})`);
|
|
|
8141
8177
|
}
|
|
8142
8178
|
});
|
|
8143
8179
|
try {
|
|
8144
|
-
const { registerChatCommands } = await import("./chat-
|
|
8180
|
+
const { registerChatCommands } = await import("./chat-ZTFSH2BI.js");
|
|
8145
8181
|
registerChatCommands(program);
|
|
8146
8182
|
} catch {
|
|
8147
8183
|
program.command("chat <name> [action] [actionArgs...]").description("Syndicate chat (XMTP) \u2014 requires @xmtp/cli").action(() => {
|
|
@@ -8151,7 +8187,7 @@ try {
|
|
|
8151
8187
|
process.exit(1);
|
|
8152
8188
|
});
|
|
8153
8189
|
}
|
|
8154
|
-
var { registerSessionCommands } = await import("./session-
|
|
8190
|
+
var { registerSessionCommands } = await import("./session-HB3XXXKS.js");
|
|
8155
8191
|
registerSessionCommands(program);
|
|
8156
8192
|
registerVeniceCommands(program);
|
|
8157
8193
|
registerAllowanceCommands(program);
|
|
@@ -8159,11 +8195,11 @@ registerIdentityCommands(program);
|
|
|
8159
8195
|
registerProposalCommands(program);
|
|
8160
8196
|
registerGovernorCommands(program);
|
|
8161
8197
|
registerGuardianCommands(program);
|
|
8162
|
-
var { registerResearchCommands } = await import("./research-
|
|
8198
|
+
var { registerResearchCommands } = await import("./research-7ABHFSI2.js");
|
|
8163
8199
|
registerResearchCommands(program);
|
|
8164
|
-
var { registerAgentCommands } = await import("./agent-
|
|
8200
|
+
var { registerAgentCommands } = await import("./agent-VPUXRS7K.js");
|
|
8165
8201
|
registerAgentCommands(program);
|
|
8166
|
-
var { registerTradeCommands } = await import("./trade-
|
|
8202
|
+
var { registerTradeCommands } = await import("./trade-XMOZ5ULE.js");
|
|
8167
8203
|
registerTradeCommands(program);
|
|
8168
8204
|
registerGridCommand(program);
|
|
8169
8205
|
var configCmd = program.command("config");
|