@sherwoodagent/cli 0.74.3 → 0.76.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-OFFTM6NG.js → addresses-JJPQTF6S.js} +4 -4
- package/dist/{agent-B7V5L2ZL.js → agent-FYRYTKYM.js} +7 -7
- package/dist/{chat-CXUU4AXK.js → chat-CO244AHH.js} +8 -8
- package/dist/{chunk-6MV4ESXM.js → chunk-3TZIOAPH.js} +25 -1
- package/dist/chunk-3TZIOAPH.js.map +1 -0
- package/dist/{chunk-EW6FTUOL.js → chunk-EVTDWMXQ.js} +4 -4
- package/dist/{chunk-2OHX3O55.js → chunk-FP5DZCOM.js} +3 -3
- package/dist/{chunk-UINMHN6S.js → chunk-I6X6NL65.js} +2 -2
- package/dist/{chunk-LHVSS27T.js → chunk-LSVCF24W.js} +2 -2
- package/dist/{chunk-YADJ5YWY.js → chunk-M7CGUYUX.js} +6 -6
- package/dist/{chunk-3ZOWP3VO.js → chunk-MEMYGZWQ.js} +3 -3
- package/dist/{chunk-BD4ZV7FQ.js → chunk-RGFA732Z.js} +3 -3
- package/dist/{chunk-DGLLSZ2D.js → chunk-T2HVR3O6.js} +2 -2
- package/dist/{chunk-4LKU7ASB.js → chunk-TI64P5R4.js} +4 -4
- package/dist/{chunk-6UEQUVTQ.js → chunk-TN7J5LXW.js} +4 -4
- package/dist/{chunk-O65AC2YS.js → chunk-WCX7DKLQ.js} +4 -4
- package/dist/{chunk-K3EYEJMT.js → chunk-WGXZ623D.js} +4 -4
- package/dist/{client-C3C6IXAH.js → client-GRPJRISD.js} +4 -4
- package/dist/{config-7HU4X7EK.js → config-ZGFS4I7K.js} +12 -4
- package/dist/{eas-XWQYAUEM.js → eas-4RIW3IS4.js} +6 -6
- package/dist/{governor-NHXBIFFB.js → governor-7KETSN47.js} +6 -6
- package/dist/index.js +428 -61
- package/dist/index.js.map +1 -1
- package/dist/{network-WU2QC3L4.js → network-UP2X5XDW.js} +3 -3
- package/dist/{price-QSVIM6QY.js → price-LAQSXN7M.js} +6 -6
- package/dist/{providers-YOOQFBN2.js → providers-2J6LL67W.js} +5 -5
- package/dist/{research-NQKYGTLY.js → research-FHQCSLTZ.js} +9 -9
- package/dist/{session-NLI6UFKB.js → session-JQ3IF3IV.js} +11 -11
- package/dist/{trade-6VYB6YJZ.js → trade-5EYPZN7M.js} +17 -17
- package/dist/{vault-45POYGLN.js → vault-5YYTHS5W.js} +8 -8
- package/dist/{xmtp-KH5I6GOL.js → xmtp-OZ5PJFCT.js} +6 -6
- package/package.json +1 -1
- package/dist/chunk-6MV4ESXM.js.map +0 -1
- /package/dist/{addresses-OFFTM6NG.js.map → addresses-JJPQTF6S.js.map} +0 -0
- /package/dist/{agent-B7V5L2ZL.js.map → agent-FYRYTKYM.js.map} +0 -0
- /package/dist/{chat-CXUU4AXK.js.map → chat-CO244AHH.js.map} +0 -0
- /package/dist/{chunk-EW6FTUOL.js.map → chunk-EVTDWMXQ.js.map} +0 -0
- /package/dist/{chunk-2OHX3O55.js.map → chunk-FP5DZCOM.js.map} +0 -0
- /package/dist/{chunk-UINMHN6S.js.map → chunk-I6X6NL65.js.map} +0 -0
- /package/dist/{chunk-LHVSS27T.js.map → chunk-LSVCF24W.js.map} +0 -0
- /package/dist/{chunk-YADJ5YWY.js.map → chunk-M7CGUYUX.js.map} +0 -0
- /package/dist/{chunk-3ZOWP3VO.js.map → chunk-MEMYGZWQ.js.map} +0 -0
- /package/dist/{chunk-BD4ZV7FQ.js.map → chunk-RGFA732Z.js.map} +0 -0
- /package/dist/{chunk-DGLLSZ2D.js.map → chunk-T2HVR3O6.js.map} +0 -0
- /package/dist/{chunk-4LKU7ASB.js.map → chunk-TI64P5R4.js.map} +0 -0
- /package/dist/{chunk-6UEQUVTQ.js.map → chunk-TN7J5LXW.js.map} +0 -0
- /package/dist/{chunk-O65AC2YS.js.map → chunk-WCX7DKLQ.js.map} +0 -0
- /package/dist/{chunk-K3EYEJMT.js.map → chunk-WGXZ623D.js.map} +0 -0
- /package/dist/{client-C3C6IXAH.js.map → client-GRPJRISD.js.map} +0 -0
- /package/dist/{config-7HU4X7EK.js.map → config-ZGFS4I7K.js.map} +0 -0
- /package/dist/{eas-XWQYAUEM.js.map → eas-4RIW3IS4.js.map} +0 -0
- /package/dist/{governor-NHXBIFFB.js.map → governor-7KETSN47.js.map} +0 -0
- /package/dist/{network-WU2QC3L4.js.map → network-UP2X5XDW.js.map} +0 -0
- /package/dist/{price-QSVIM6QY.js.map → price-LAQSXN7M.js.map} +0 -0
- /package/dist/{providers-YOOQFBN2.js.map → providers-2J6LL67W.js.map} +0 -0
- /package/dist/{research-NQKYGTLY.js.map → research-FHQCSLTZ.js.map} +0 -0
- /package/dist/{session-NLI6UFKB.js.map → session-JQ3IF3IV.js.map} +0 -0
- /package/dist/{trade-6VYB6YJZ.js.map → trade-5EYPZN7M.js.map} +0 -0
- /package/dist/{vault-45POYGLN.js.map → vault-5YYTHS5W.js.map} +0 -0
- /package/dist/{xmtp-KH5I6GOL.js.map → xmtp-OZ5PJFCT.js.map} +0 -0
|
@@ -15,8 +15,8 @@ import {
|
|
|
15
15
|
robinhoodTestnet,
|
|
16
16
|
setNetwork,
|
|
17
17
|
withNetwork
|
|
18
|
-
} from "./chunk-
|
|
19
|
-
import "./chunk-
|
|
18
|
+
} from "./chunk-LSVCF24W.js";
|
|
19
|
+
import "./chunk-3TZIOAPH.js";
|
|
20
20
|
export {
|
|
21
21
|
CHAIN_REGISTRY,
|
|
22
22
|
DEFAULT_MIN_GAS_RESERVE,
|
|
@@ -35,4 +35,4 @@ export {
|
|
|
35
35
|
setNetwork,
|
|
36
36
|
withNetwork
|
|
37
37
|
};
|
|
38
|
-
//# sourceMappingURL=network-
|
|
38
|
+
//# sourceMappingURL=network-UP2X5XDW.js.map
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
quote
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-TI64P5R4.js";
|
|
4
4
|
import {
|
|
5
5
|
SYNTHRA
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-I6X6NL65.js";
|
|
7
7
|
import {
|
|
8
8
|
getPublicClient
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-FP5DZCOM.js";
|
|
10
10
|
import {
|
|
11
11
|
getNetwork
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-LSVCF24W.js";
|
|
13
|
+
import "./chunk-3TZIOAPH.js";
|
|
14
14
|
import "./chunk-TU655ZTV.js";
|
|
15
15
|
|
|
16
16
|
// src/lib/price.ts
|
|
@@ -133,4 +133,4 @@ export {
|
|
|
133
133
|
getTokenPriceInAsset,
|
|
134
134
|
getTokenPricesInAsset
|
|
135
135
|
};
|
|
136
|
-
//# sourceMappingURL=price-
|
|
136
|
+
//# sourceMappingURL=price-LAQSXN7M.js.map
|
|
@@ -2,12 +2,12 @@ import {
|
|
|
2
2
|
MessariProvider,
|
|
3
3
|
NansenProvider,
|
|
4
4
|
getResearchProvider
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-T2HVR3O6.js";
|
|
6
|
+
import "./chunk-FP5DZCOM.js";
|
|
7
7
|
import {
|
|
8
8
|
robinhoodTestnet
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-LSVCF24W.js";
|
|
10
|
+
import "./chunk-3TZIOAPH.js";
|
|
11
11
|
|
|
12
12
|
// src/providers/index.ts
|
|
13
13
|
function listProviders() {
|
|
@@ -28,4 +28,4 @@ export {
|
|
|
28
28
|
getResearchProvider,
|
|
29
29
|
listProviders
|
|
30
30
|
};
|
|
31
|
-
//# sourceMappingURL=providers-
|
|
31
|
+
//# sourceMappingURL=providers-2J6LL67W.js.map
|
|
@@ -2,13 +2,13 @@ import {
|
|
|
2
2
|
MESSARI_COST_ESTIMATE,
|
|
3
3
|
NANSEN_COST_ESTIMATE,
|
|
4
4
|
getResearchProvider
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-T2HVR3O6.js";
|
|
6
6
|
import {
|
|
7
7
|
formatContractError,
|
|
8
8
|
getAccount
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-FP5DZCOM.js";
|
|
10
|
+
import "./chunk-LSVCF24W.js";
|
|
11
|
+
import "./chunk-3TZIOAPH.js";
|
|
12
12
|
|
|
13
13
|
// src/commands/research.ts
|
|
14
14
|
import chalk from "chalk";
|
|
@@ -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-
|
|
19
|
+
return import("./xmtp-OZ5PJFCT.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(fundName, result, prompt) {
|
|
85
85
|
const { pinJSON } = await import("./ipfs-RWSTXTZM.js");
|
|
86
|
-
const { createResearchAttestation, getEasScanUrl } = await import("./eas-
|
|
86
|
+
const { createResearchAttestation, getEasScanUrl } = await import("./eas-4RIW3IS4.js");
|
|
87
87
|
const xmtp = await loadXmtp();
|
|
88
88
|
const pinSpinner = ora("Pinning research result to IPFS...").start();
|
|
89
89
|
let resultUri;
|
|
@@ -112,8 +112,8 @@ async function postResearch(fundName, result, prompt) {
|
|
|
112
112
|
const easSpinner = ora("Creating EAS attestation...").start();
|
|
113
113
|
let attestationUid;
|
|
114
114
|
try {
|
|
115
|
-
const { getChainContracts } = await import("./config-
|
|
116
|
-
const { getChain } = await import("./network-
|
|
115
|
+
const { getChainContracts } = await import("./config-ZGFS4I7K.js");
|
|
116
|
+
const { getChain } = await import("./network-UP2X5XDW.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-
|
|
315
|
+
//# sourceMappingURL=research-FHQCSLTZ.js.map
|
|
@@ -9,21 +9,21 @@ import {
|
|
|
9
9
|
getCurrentBlock,
|
|
10
10
|
getGovernorEvents,
|
|
11
11
|
getVaultEvents
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-MEMYGZWQ.js";
|
|
13
13
|
import {
|
|
14
14
|
resolveFund
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-TN7J5LXW.js";
|
|
16
16
|
import {
|
|
17
17
|
getGovernorOf
|
|
18
|
-
} from "./chunk-
|
|
19
|
-
import "./chunk-
|
|
18
|
+
} from "./chunk-EVTDWMXQ.js";
|
|
19
|
+
import "./chunk-I6X6NL65.js";
|
|
20
20
|
import {
|
|
21
21
|
getPublicClient
|
|
22
|
-
} from "./chunk-
|
|
23
|
-
import "./chunk-
|
|
22
|
+
} from "./chunk-FP5DZCOM.js";
|
|
23
|
+
import "./chunk-LSVCF24W.js";
|
|
24
24
|
import {
|
|
25
25
|
loadConfig
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-3TZIOAPH.js";
|
|
27
27
|
import {
|
|
28
28
|
SYNDICATE_VAULT_ABI
|
|
29
29
|
} from "./chunk-TU655ZTV.js";
|
|
@@ -32,7 +32,7 @@ import "./chunk-XDGCHURW.js";
|
|
|
32
32
|
// src/commands/session.ts
|
|
33
33
|
import chalk from "chalk";
|
|
34
34
|
async function loadXmtp() {
|
|
35
|
-
return import("./xmtp-
|
|
35
|
+
return import("./xmtp-OZ5PJFCT.js");
|
|
36
36
|
}
|
|
37
37
|
async function resolveGovernor(vaultAddress) {
|
|
38
38
|
const client = getPublicClient();
|
|
@@ -280,8 +280,8 @@ function registerSessionCommands(program) {
|
|
|
280
280
|
);
|
|
281
281
|
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) => {
|
|
282
282
|
const { isOpenClaw, registerFundCrons, unregisterFundCrons, getFundCronStatus } = await import("./cron-QMLRWDJG.js");
|
|
283
|
-
const { isTestnet } = await import("./network-
|
|
284
|
-
const { getNotifyTo } = await import("./config-
|
|
283
|
+
const { isTestnet } = await import("./network-UP2X5XDW.js");
|
|
284
|
+
const { getNotifyTo } = await import("./config-ZGFS4I7K.js");
|
|
285
285
|
if (!isOpenClaw()) {
|
|
286
286
|
console.log(chalk.yellow("Not running on OpenClaw \u2014 cron commands unavailable"));
|
|
287
287
|
console.log(chalk.dim(` Set up your own scheduler: sherwood session check ${name} --stream`));
|
|
@@ -322,4 +322,4 @@ function registerSessionCommands(program) {
|
|
|
322
322
|
export {
|
|
323
323
|
registerSessionCommands
|
|
324
324
|
};
|
|
325
|
-
//# sourceMappingURL=session-
|
|
325
|
+
//# sourceMappingURL=session-JQ3IF3IV.js.map
|
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getResearchProvider
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-T2HVR3O6.js";
|
|
4
4
|
import "./chunk-EGJESQXZ.js";
|
|
5
5
|
import {
|
|
6
6
|
chatCompletion
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-RGFA732Z.js";
|
|
8
8
|
import {
|
|
9
9
|
getQuote
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-TI64P5R4.js";
|
|
11
11
|
import {
|
|
12
12
|
TOKENS
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-I6X6NL65.js";
|
|
14
14
|
import {
|
|
15
15
|
formatContractError,
|
|
16
16
|
getAccount,
|
|
17
17
|
getPublicClient,
|
|
18
18
|
sendTxWithRetry,
|
|
19
19
|
waitForReceipt
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-FP5DZCOM.js";
|
|
21
21
|
import {
|
|
22
22
|
getChain,
|
|
23
23
|
getExplorerUrl,
|
|
24
24
|
getNetwork
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-LSVCF24W.js";
|
|
26
26
|
import {
|
|
27
27
|
getUniswapApiKey,
|
|
28
28
|
loadConfig,
|
|
29
29
|
saveConfig
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-3TZIOAPH.js";
|
|
31
31
|
import {
|
|
32
32
|
ERC20_ABI
|
|
33
33
|
} from "./chunk-TU655ZTV.js";
|
|
@@ -555,7 +555,7 @@ async function getCurrentPrice(tokenAddress, tokenDecimals, feeTier) {
|
|
|
555
555
|
// src/commands/trade.ts
|
|
556
556
|
var uniswap = new UniswapProvider();
|
|
557
557
|
async function loadXmtp() {
|
|
558
|
-
return import("./xmtp-
|
|
558
|
+
return import("./xmtp-OZ5PJFCT.js");
|
|
559
559
|
}
|
|
560
560
|
var ETH_ADDRESS = "0x0000000000000000000000000000000000000000";
|
|
561
561
|
var KNOWN_MEMECOINS = {
|
|
@@ -752,7 +752,7 @@ function registerTradeCommands(program) {
|
|
|
752
752
|
}
|
|
753
753
|
const wrapSpinner = ora("Wrapping ETH \u2192 WETH...").start();
|
|
754
754
|
try {
|
|
755
|
-
const { writeContractWithRetry: writeContractWithRetry2, waitForReceipt: waitForReceiptFn } = await import("./client-
|
|
755
|
+
const { writeContractWithRetry: writeContractWithRetry2, waitForReceipt: waitForReceiptFn } = await import("./client-GRPJRISD.js");
|
|
756
756
|
const wethAddr = TOKENS().WETH;
|
|
757
757
|
const wrapHash = await writeContractWithRetry2({
|
|
758
758
|
address: wethAddr,
|
|
@@ -761,7 +761,7 @@ function registerTradeCommands(program) {
|
|
|
761
761
|
args: [],
|
|
762
762
|
value: inputAmount,
|
|
763
763
|
account,
|
|
764
|
-
chain: (await import("./network-
|
|
764
|
+
chain: (await import("./network-UP2X5XDW.js")).getChain()
|
|
765
765
|
});
|
|
766
766
|
await waitForReceiptFn(wrapHash);
|
|
767
767
|
wrapSpinner.succeed(`Wrapped ${opts.amount} ETH \u2192 WETH`);
|
|
@@ -875,9 +875,9 @@ function registerTradeCommands(program) {
|
|
|
875
875
|
}
|
|
876
876
|
console.log(` Tx: ${chalk.dim(getExplorerUrl(txHash))}`);
|
|
877
877
|
try {
|
|
878
|
-
const { createTradeAttestation, getEasScanUrl } = await import("./eas-
|
|
879
|
-
const { getChainContracts } = await import("./config-
|
|
880
|
-
const { getChain: getActiveChain } = await import("./network-
|
|
878
|
+
const { createTradeAttestation, getEasScanUrl } = await import("./eas-4RIW3IS4.js");
|
|
879
|
+
const { getChainContracts } = await import("./config-ZGFS4I7K.js");
|
|
880
|
+
const { getChain: getActiveChain } = await import("./network-UP2X5XDW.js");
|
|
881
881
|
const vaultRecipient = getChainContracts(getActiveChain().id).vault;
|
|
882
882
|
const { uid } = await createTradeAttestation(
|
|
883
883
|
inputAddr,
|
|
@@ -1003,9 +1003,9 @@ function registerTradeCommands(program) {
|
|
|
1003
1003
|
}
|
|
1004
1004
|
console.log(` Tx: ${chalk.dim(getExplorerUrl(txHash))}`);
|
|
1005
1005
|
try {
|
|
1006
|
-
const { createTradeAttestation, getEasScanUrl } = await import("./eas-
|
|
1007
|
-
const { getChainContracts } = await import("./config-
|
|
1008
|
-
const { getChain: getActiveChain } = await import("./network-
|
|
1006
|
+
const { createTradeAttestation, getEasScanUrl } = await import("./eas-4RIW3IS4.js");
|
|
1007
|
+
const { getChainContracts } = await import("./config-ZGFS4I7K.js");
|
|
1008
|
+
const { getChain: getActiveChain } = await import("./network-UP2X5XDW.js");
|
|
1009
1009
|
const vaultRecipient = getChainContracts(getActiveChain().id).vault;
|
|
1010
1010
|
const { uid } = await createTradeAttestation(
|
|
1011
1011
|
tokenAddr,
|
|
@@ -1180,4 +1180,4 @@ function sleep(ms) {
|
|
|
1180
1180
|
export {
|
|
1181
1181
|
registerTradeCommands
|
|
1182
1182
|
};
|
|
1183
|
-
//# sourceMappingURL=trade-
|
|
1183
|
+
//# sourceMappingURL=trade-5EYPZN7M.js.map
|
|
@@ -22,13 +22,13 @@ import {
|
|
|
22
22
|
removeDepositor,
|
|
23
23
|
setAgentFeeBps,
|
|
24
24
|
setVaultAddress
|
|
25
|
-
} from "./chunk-
|
|
26
|
-
import "./chunk-
|
|
27
|
-
import "./chunk-
|
|
28
|
-
import "./chunk-
|
|
29
|
-
import "./chunk-
|
|
30
|
-
import "./chunk-
|
|
31
|
-
import "./chunk-
|
|
25
|
+
} from "./chunk-M7CGUYUX.js";
|
|
26
|
+
import "./chunk-MEMYGZWQ.js";
|
|
27
|
+
import "./chunk-EVTDWMXQ.js";
|
|
28
|
+
import "./chunk-I6X6NL65.js";
|
|
29
|
+
import "./chunk-FP5DZCOM.js";
|
|
30
|
+
import "./chunk-LSVCF24W.js";
|
|
31
|
+
import "./chunk-3TZIOAPH.js";
|
|
32
32
|
import "./chunk-TU655ZTV.js";
|
|
33
33
|
import "./chunk-XDGCHURW.js";
|
|
34
34
|
export {
|
|
@@ -56,4 +56,4 @@ export {
|
|
|
56
56
|
setAgentFeeBps,
|
|
57
57
|
setVaultAddress
|
|
58
58
|
};
|
|
59
|
-
//# sourceMappingURL=vault-
|
|
59
|
+
//# sourceMappingURL=vault-5YYTHS5W.js.map
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getTextRecord
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-TN7J5LXW.js";
|
|
4
|
+
import "./chunk-I6X6NL65.js";
|
|
5
5
|
import {
|
|
6
6
|
getAccount
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-FP5DZCOM.js";
|
|
8
8
|
import {
|
|
9
9
|
getChainConfig
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-LSVCF24W.js";
|
|
11
11
|
import {
|
|
12
12
|
cacheGroupId,
|
|
13
13
|
getCachedGroupId,
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
loadConfig,
|
|
16
16
|
requirePrivateKey,
|
|
17
17
|
saveConfig
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-3TZIOAPH.js";
|
|
19
19
|
import "./chunk-TU655ZTV.js";
|
|
20
20
|
|
|
21
21
|
// src/lib/xmtp.ts
|
|
@@ -315,4 +315,4 @@ export {
|
|
|
315
315
|
sendReaction,
|
|
316
316
|
streamMessages
|
|
317
317
|
};
|
|
318
|
-
//# sourceMappingURL=xmtp-
|
|
318
|
+
//# sourceMappingURL=xmtp-OZ5PJFCT.js.map
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/config.ts","../src/lib/settings.ts"],"sourcesContent":["/**\n * Local config management — ~/.sherwood/config.json\n *\n * Stores group ID cache, per-chain contract addresses, and wallet config.\n */\n\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport { resolveSetting } from \"./settings.js\";\n\nconst CONFIG_DIR = path.join(os.homedir(), \".sherwood\");\nconst CONFIG_PATH = path.join(CONFIG_DIR, \"config.json\");\nconst DASHBOARD_BRIDGE_PATH = path.join(CONFIG_DIR, \"dashboard.json\");\n\n/** Per-chain user-specific addresses (stored by chainId). */\nexport interface ChainContracts {\n vault?: string; // user's default vault address\n}\n\n/** A fund the agent belongs to (creator or member). */\nexport interface FundMembership {\n subdomain: string;\n vault: string;\n role: \"creator\" | \"agent\";\n}\n\nexport interface SherwoodConfig {\n dbEncryptionKey?: string; // legacy — no longer used, XMTP CLI manages its own DB\n privateKey?: string; // wallet private key (0x-prefixed)\n xmtpInboxId?: string;\n groupCache: Record<string, string>; // subdomain → XMTP group ID\n veniceApiKey?: string; // Venice AI inference API key\n anthropicApiKey?: string; // Anthropic Claude API key (for LLM judge)\n agentId?: number; // ERC-8004 identity token ID\n contracts?: Record<string, ChainContracts>; // chainId → user addresses\n funds?: Record<string, FundMembership[]>; // chainId → fund memberships\n primaryFund?: Record<string, string>; // chainId → subdomain of the active fund\n rpc?: Record<string, string>; // network name → custom RPC URL\n notifyTo?: string; // destination for cron summaries (Telegram chat ID, phone, etc.)\n uniswapApiKey?: string; // Uniswap Trading API key (from developers.uniswap.org)\n positions?: unknown[]; // open trade positions (typed in positions.ts)\n closedPositions?: unknown[]; // historical closed positions\n _xmtpMigrated?: boolean; // one-time flag: revoked stale installations from ~/.xmtp/ era\n /** Cached swap routes per chain: chainId → { tokenPair → SwapRoute } */\n swapRoutes?: Record<string, Record<string, SwapRoute>>;\n}\n\n/** Persisted swap route detected by the CLI during portfolio strategy proposal. */\nexport interface SwapRoute {\n mode: \"direct\" | \"multi-hop\";\n feeTier: number; // direct pool fee tier\n hop?: { via: string; feeIn: number; feeOut: number }; // multi-hop details\n detectedAt: number; // unix timestamp\n}\n\nexport function loadConfig(): SherwoodConfig {\n if (fs.existsSync(CONFIG_PATH)) {\n const config = JSON.parse(fs.readFileSync(CONFIG_PATH, \"utf-8\"));\n if (!config.groupCache) config.groupCache = {};\n return config;\n }\n\n return { groupCache: {} };\n}\n\nexport function saveConfig(config: SherwoodConfig): void {\n fs.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });\n fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2), { mode: 0o600 });\n writeDashboardBridge(config);\n}\n\n/**\n * Public-safe derivation of config.json for Hermes dashboard plugins to read.\n * Excludes privateKey + every other sensitive field. Hermes' sherwood-companion\n * plugin reads ~/.sherwood/dashboard.json to auto-detect the operator's\n * primary fund without prompting.\n *\n * Wrapped in try/catch — bridge-write failure must not break a config save.\n */\nfunction writeDashboardBridge(config: SherwoodConfig): void {\n try {\n let agentWallet: string | null = null;\n if (config.privateKey) {\n const key = config.privateKey.startsWith(\"0x\")\n ? (config.privateKey as `0x${string}`)\n : (`0x${config.privateKey}` as `0x${string}`);\n agentWallet = privateKeyToAccount(key).address;\n }\n const bridge = {\n version: 1,\n agentWallet,\n funds: config.funds ?? {},\n primaryFund: config.primaryFund ?? {},\n };\n fs.writeFileSync(\n DASHBOARD_BRIDGE_PATH,\n JSON.stringify(bridge, null, 2),\n { mode: 0o600 },\n );\n } catch {\n // Non-fatal: plugin will fall back to manual subdomain entry.\n }\n}\n\nexport function cacheGroupId(subdomain: string, groupId: string): void {\n const config = loadConfig();\n config.groupCache[subdomain] = groupId;\n saveConfig(config);\n}\n\nexport function getCachedGroupId(subdomain: string): string | undefined {\n const config = loadConfig();\n return config.groupCache[subdomain];\n}\n\nexport function invalidateCachedGroupId(subdomain: string): void {\n const config = loadConfig();\n if (config.groupCache[subdomain]) {\n delete config.groupCache[subdomain];\n saveConfig(config);\n }\n}\n\nexport function setVeniceApiKey(apiKey: string): void {\n const config = loadConfig();\n config.veniceApiKey = apiKey;\n saveConfig(config);\n}\n\nexport function getVeniceApiKey(): string | undefined {\n return resolveSetting(\"veniceApiKey\", loadConfig(), process.env);\n}\n\n// ── Anthropic API Key ──\n\nexport function setAnthropicApiKey(apiKey: string): void {\n const config = loadConfig();\n config.anthropicApiKey = apiKey;\n saveConfig(config);\n}\n\nexport function getAnthropicApiKey(): string | undefined {\n return resolveSetting(\"anthropicApiKey\", loadConfig(), process.env);\n}\n\nexport function setAgentId(agentId: number): void {\n const config = loadConfig();\n config.agentId = agentId;\n saveConfig(config);\n}\n\nexport function getAgentId(): number | undefined {\n return loadConfig().agentId;\n}\n\nexport function setPrivateKey(key: string): void {\n const config = loadConfig();\n config.privateKey = key.startsWith(\"0x\") ? key : `0x${key}`;\n saveConfig(config);\n}\n\n/**\n * Resolve the signing key (config → PRIVATE_KEY env, 0x-normalized) or\n * throw with the canonical setup hint. Every path that signs or derives\n * identity from the key (viem clients, Agent0 SDK, XMTP) must use this,\n * so they can never resolve different keys.\n */\nexport function requirePrivateKey(): `0x${string}` {\n const key = resolveSetting(\"privateKey\", loadConfig(), process.env);\n if (!key) {\n throw new Error(\n \"Private key not found. Run 'sherwood config set --private-key <key>' or set PRIVATE_KEY env var.\",\n );\n }\n return key as `0x${string}`;\n}\n\n// ── Uniswap Trading API Key ──\n\nexport function setUniswapApiKey(apiKey: string): void {\n const config = loadConfig();\n config.uniswapApiKey = apiKey;\n saveConfig(config);\n}\n\nexport function getUniswapApiKey(): string | undefined {\n return resolveSetting(\"uniswapApiKey\", loadConfig(), process.env);\n}\n\n// ── Per-network RPC URLs ──\n\nexport function getConfigRpcUrl(network: string): string | undefined {\n return loadConfig().rpc?.[network];\n}\n\nexport function setConfigRpcUrl(network: string, url: string): void {\n const config = loadConfig();\n if (!config.rpc) config.rpc = {};\n config.rpc[network] = url;\n saveConfig(config);\n}\n\n// ── Per-chain contract addresses ──\n\nexport function getChainContracts(chainId: number): ChainContracts {\n const config = loadConfig();\n return config.contracts?.[String(chainId)] ?? {};\n}\n\nexport function getNotifyTo(): string | undefined {\n return loadConfig().notifyTo;\n}\n\nexport function setNotifyTo(id: string): void {\n const config = loadConfig();\n config.notifyTo = id;\n saveConfig(config);\n}\n\nexport function setChainContract(\n chainId: number,\n key: keyof ChainContracts,\n value: string,\n): void {\n const config = loadConfig();\n if (!config.contracts) config.contracts = {};\n const cid = String(chainId);\n if (!config.contracts[cid]) config.contracts[cid] = {};\n config.contracts[cid][key] = value;\n saveConfig(config);\n}\n\n// ── Fund Membership ──\n\n/**\n * Add (or update) a fund membership. Deduplicates by subdomain.\n * Automatically sets it as primary if it's the first fund on this chain.\n */\nexport function addFund(\n chainId: number,\n membership: FundMembership,\n): void {\n const config = loadConfig();\n const cid = String(chainId);\n if (!config.funds) config.funds = {};\n if (!config.funds[cid]) config.funds[cid] = [];\n\n // Upsert — replace existing entry with same subdomain\n const idx = config.funds[cid].findIndex(\n (s) => s.subdomain === membership.subdomain,\n );\n if (idx >= 0) {\n config.funds[cid][idx] = membership;\n } else {\n config.funds[cid].push(membership);\n }\n\n // Auto-set as primary if it's the first fund (or no primary set)\n if (!config.primaryFund) config.primaryFund = {};\n if (!config.primaryFund[cid]) {\n config.primaryFund[cid] = membership.subdomain;\n }\n\n saveConfig(config);\n}\n\n/** Get all fund memberships for a chain. */\nexport function getFunds(chainId: number): FundMembership[] {\n const config = loadConfig();\n return config.funds?.[String(chainId)] ?? [];\n}\n\n/** Set which fund is the active/primary one for CLI commands. */\nexport function setPrimaryFund(\n chainId: number,\n subdomain: string,\n): void {\n const config = loadConfig();\n if (!config.primaryFund) config.primaryFund = {};\n config.primaryFund[String(chainId)] = subdomain;\n saveConfig(config);\n}\n\n/**\n * Get the primary fund for this chain.\n * Falls back to ChainContracts.vault for backwards compat with older configs.\n */\nexport function getPrimaryFund(\n chainId: number,\n): FundMembership | undefined {\n const config = loadConfig();\n const cid = String(chainId);\n\n // Check new funds store first\n const primarySubdomain = config.primaryFund?.[cid];\n if (primarySubdomain && config.funds?.[cid]) {\n const found = config.funds[cid].find(\n (s) => s.subdomain === primarySubdomain,\n );\n if (found) return found;\n }\n\n // Backwards compat: if funds list has entries but no primary, use the first one\n if (config.funds?.[cid]?.length) {\n return config.funds[cid][0];\n }\n\n // Legacy fallback: config only has a vault address, no subdomain\n const vault = config.contracts?.[cid]?.vault;\n if (vault) {\n return { subdomain: \"\", vault, role: \"creator\" };\n }\n\n return undefined;\n}\n\n// ── Swap Route Cache ──\n\nfunction swapRouteKey(asset: string, token: string): string {\n return `${asset.toLowerCase()}→${token.toLowerCase()}`;\n}\n\n/** Get a cached swap route for a token pair on a chain. */\nexport function getCachedSwapRoute(chainId: number, asset: string, token: string): SwapRoute | undefined {\n const config = loadConfig();\n return config.swapRoutes?.[String(chainId)]?.[swapRouteKey(asset, token)];\n}\n\n/** Save a detected swap route to the config cache. */\nexport function cacheSwapRoute(chainId: number, asset: string, token: string, route: SwapRoute): void {\n const config = loadConfig();\n const cid = String(chainId);\n if (!config.swapRoutes) config.swapRoutes = {};\n if (!config.swapRoutes[cid]) config.swapRoutes[cid] = {};\n config.swapRoutes[cid][swapRouteKey(asset, token)] = route;\n saveConfig(config);\n}\n\n/** Clear all cached swap routes for a chain (e.g. after pool migration). */\nexport function clearSwapRoutes(chainId: number): void {\n const config = loadConfig();\n delete config.swapRoutes?.[String(chainId)];\n saveConfig(config);\n}\n","/**\n * Single owner of config → env resolution for user settings. Every\n * config-or-env setting resolves through the table below — accessors in\n * config.ts and requirePrivateKey() delegate here.\n */\n\nimport { type SherwoodConfig } from \"./config.js\";\n\ntype Env = Record<string, string | undefined>;\n\nconst hex0x = (v: string): string => (v.startsWith(\"0x\") ? v : `0x${v}`);\n\ninterface SettingSpec {\n fromConfig: (c: Partial<SherwoodConfig>) => string | undefined;\n envVar?: string;\n normalize?: (v: string) => string;\n}\n\nconst SETTINGS = {\n privateKey: {\n fromConfig: (c) => c.privateKey,\n envVar: \"PRIVATE_KEY\",\n normalize: hex0x,\n },\n veniceApiKey: {\n fromConfig: (c) => c.veniceApiKey,\n envVar: \"VENICE_API_KEY\",\n },\n anthropicApiKey: {\n fromConfig: (c) => c.anthropicApiKey,\n envVar: \"ANTHROPIC_API_KEY\",\n },\n uniswapApiKey: {\n fromConfig: (c) => c.uniswapApiKey,\n envVar: \"UNISWAP_API_KEY\",\n },\n} satisfies Record<string, SettingSpec>;\n\nexport type SettingKey = keyof typeof SETTINGS;\n\nexport function resolveSetting(\n key: SettingKey,\n config: Partial<SherwoodConfig>,\n env: Env,\n): string | undefined {\n const spec: SettingSpec = SETTINGS[key];\n // Empty string counts as absent on both sources: an empty config key\n // falls through to the env, and a blank `PRIVATE_KEY=` dotenv line\n // resolves to undefined (so callers show the setup hint) instead of\n // normalizing to a bare \"0x\".\n const raw =\n spec.fromConfig(config) || (spec.envVar ? env[spec.envVar] : undefined);\n if (!raw) return undefined;\n return spec.normalize ? spec.normalize(raw) : raw;\n}\n"],"mappings":"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","names":[]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|