@devbond/gc 1.0.0 → 2.0.1
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/autonomy/behavior.d.ts +3 -2
- package/dist/autonomy/behavior.js +2 -2
- package/dist/autonomy/behavior.js.map +1 -1
- package/dist/autonomy/llm-client.d.ts +5 -9
- package/dist/autonomy/llm-client.js +13 -138
- package/dist/autonomy/llm-client.js.map +1 -1
- package/dist/finance/action/buyback.d.ts +36 -0
- package/dist/finance/action/buyback.js +27 -0
- package/dist/finance/action/buyback.js.map +1 -0
- package/dist/finance/action/gas-refill.d.ts +29 -0
- package/dist/finance/action/gas-refill.js +106 -0
- package/dist/finance/action/gas-refill.js.map +1 -0
- package/dist/finance/action/index.d.ts +8 -0
- package/dist/finance/action/index.js +9 -0
- package/dist/finance/action/index.js.map +1 -0
- package/dist/finance/action/pay-bills.d.ts +35 -0
- package/dist/finance/action/pay-bills.js +39 -0
- package/dist/finance/action/pay-bills.js.map +1 -0
- package/dist/finance/action/treasury.d.ts +26 -0
- package/dist/finance/action/treasury.js +46 -0
- package/dist/finance/action/treasury.js.map +1 -0
- package/dist/finance/action/x402.d.ts +124 -0
- package/dist/finance/action/x402.js +200 -0
- package/dist/finance/action/x402.js.map +1 -0
- package/dist/finance/earn.d.ts +49 -0
- package/dist/finance/earn.js +77 -0
- package/dist/finance/earn.js.map +1 -0
- package/dist/finance/index.d.ts +5 -0
- package/dist/finance/index.js +5 -0
- package/dist/finance/index.js.map +1 -0
- package/dist/finance/spend.d.ts +53 -0
- package/dist/finance/spend.js +89 -0
- package/dist/finance/spend.js.map +1 -0
- package/dist/finance/wallet.d.ts +23 -0
- package/dist/finance/wallet.js +82 -0
- package/dist/finance/wallet.js.map +1 -0
- package/dist/index.js +22 -10
- package/dist/index.js.map +1 -1
- package/dist/survival/survival-manager.d.ts +4 -2
- package/dist/survival/survival-manager.js +9 -3
- package/dist/survival/survival-manager.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spend.ts — Agent 支出管理
|
|
3
|
+
*
|
|
4
|
+
* 自持数据与持久化,负责记录、汇总 agent 的各类支出(gas、llm、invest、other)。
|
|
5
|
+
*/
|
|
6
|
+
import { readFile, writeFile, mkdir } from "node:fs/promises";
|
|
7
|
+
import { join } from "node:path";
|
|
8
|
+
const SPEND_LOG_FILE = "wallet-spending.json";
|
|
9
|
+
// ─── SpendManager ───────────────────────────────────────────────────────
|
|
10
|
+
/**
|
|
11
|
+
* 管理当前 agent 的支出:记录、分类、汇总、持久化。
|
|
12
|
+
* 自持 spendLog 数据,不依赖 AgentWallet。
|
|
13
|
+
*/
|
|
14
|
+
export class SpendManager {
|
|
15
|
+
config;
|
|
16
|
+
spendLog = [];
|
|
17
|
+
constructor(config) {
|
|
18
|
+
this.config = config;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 记录一笔支出。
|
|
22
|
+
*/
|
|
23
|
+
record(category, amount, txHash) {
|
|
24
|
+
this.spendLog.push({
|
|
25
|
+
category,
|
|
26
|
+
amount: amount.toString(),
|
|
27
|
+
txHash,
|
|
28
|
+
timestamp: new Date().toISOString(),
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 获取当前支出汇总(按类别与总览)。
|
|
33
|
+
*/
|
|
34
|
+
getSummary() {
|
|
35
|
+
const byCategory = {
|
|
36
|
+
gas: 0n,
|
|
37
|
+
llm: 0n,
|
|
38
|
+
invest: 0n,
|
|
39
|
+
other: 0n,
|
|
40
|
+
};
|
|
41
|
+
let total = 0n;
|
|
42
|
+
for (const entry of this.spendLog) {
|
|
43
|
+
const amt = BigInt(entry.amount);
|
|
44
|
+
byCategory[entry.category] += amt;
|
|
45
|
+
total += amt;
|
|
46
|
+
}
|
|
47
|
+
return { total, byCategory, entries: [...this.spendLog] };
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* 获取原始支出条目列表。
|
|
51
|
+
*/
|
|
52
|
+
getEntries() {
|
|
53
|
+
return [...this.spendLog];
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 按类别筛选支出条目。
|
|
57
|
+
*/
|
|
58
|
+
getEntriesByCategory(category) {
|
|
59
|
+
return this.spendLog.filter((e) => e.category === category);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 从 dataDir 加载持久化的支出日志。
|
|
63
|
+
*/
|
|
64
|
+
async load() {
|
|
65
|
+
try {
|
|
66
|
+
const path = join(this.config.dataDir, SPEND_LOG_FILE);
|
|
67
|
+
const data = await readFile(path, "utf-8");
|
|
68
|
+
this.spendLog = JSON.parse(data);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// No log yet, start fresh
|
|
72
|
+
this.spendLog = [];
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* 持久化支出日志到 dataDir。
|
|
77
|
+
*/
|
|
78
|
+
async save() {
|
|
79
|
+
try {
|
|
80
|
+
await mkdir(this.config.dataDir, { recursive: true });
|
|
81
|
+
const path = join(this.config.dataDir, SPEND_LOG_FILE);
|
|
82
|
+
await writeFile(path, JSON.stringify(this.spendLog, null, 2), "utf-8");
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
console.error("[spend] Failed to save spending log:", err);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=spend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spend.js","sourceRoot":"","sources":["../../src/finance/spend.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAuBjC,MAAM,cAAc,GAAG,sBAAsB,CAAC;AAE9C,2EAA2E;AAE3E;;;GAGG;AACH,MAAM,OAAO,YAAY;IAGH;IAFZ,QAAQ,GAAiB,EAAE,CAAC;IAEpC,YAAoB,MAA0B;QAA1B,WAAM,GAAN,MAAM,CAAoB;IAAG,CAAC;IAElD;;OAEG;IACH,MAAM,CACJ,QAAuB,EACvB,MAAc,EACd,MAAe;QAEf,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,QAAQ;YACR,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE;YACzB,MAAM;YACN,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,UAAU;QACR,MAAM,UAAU,GAAkC;YAChD,GAAG,EAAE,EAAE;YACP,GAAG,EAAE,EAAE;YACP,MAAM,EAAE,EAAE;YACV,KAAK,EAAE,EAAE;SACV,CAAC;QACF,IAAI,KAAK,GAAG,EAAE,CAAC;QAEf,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACjC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;YAClC,KAAK,IAAI,GAAG,CAAC;QACf,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,QAAuB;QAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YACvD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC3C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,0BAA0B;YAC1B,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YACvD,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ethers } from "ethers";
|
|
2
|
+
export declare class AgentWallet {
|
|
3
|
+
private wallet;
|
|
4
|
+
private provider;
|
|
5
|
+
private tokenAddress;
|
|
6
|
+
private stableTokenContract;
|
|
7
|
+
private tokenContract;
|
|
8
|
+
private stableTokenAddr;
|
|
9
|
+
private stableDecimals;
|
|
10
|
+
constructor(privateKey: string, tokenAddress: string, provider: ethers.JsonRpcProvider);
|
|
11
|
+
/** One-time init: read immutable config from contract */
|
|
12
|
+
init(): Promise<void>;
|
|
13
|
+
getStableBalance(): Promise<bigint>;
|
|
14
|
+
getNativeBalance(): Promise<bigint>;
|
|
15
|
+
getTokenBalance(): Promise<bigint>;
|
|
16
|
+
approveSpend(spender: string, amount: bigint): Promise<string>;
|
|
17
|
+
get signer(): ethers.Wallet;
|
|
18
|
+
get address(): string;
|
|
19
|
+
get rpcProvider(): ethers.JsonRpcProvider;
|
|
20
|
+
get tokenAddr(): string;
|
|
21
|
+
get stableAddr(): string;
|
|
22
|
+
get stableDecimalCount(): number;
|
|
23
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { ethers } from "ethers";
|
|
2
|
+
// ─── ABIs ───────────────────────────────────────────────────────────────
|
|
3
|
+
const ERC20_ABI = [
|
|
4
|
+
"function balanceOf(address) view returns (uint256)",
|
|
5
|
+
"function approve(address spender, uint256 amount) returns (bool)",
|
|
6
|
+
"function transfer(address to, uint256 amount) returns (bool)",
|
|
7
|
+
"function allowance(address owner, address spender) view returns (uint256)",
|
|
8
|
+
];
|
|
9
|
+
const TOKEN_WALLET_ABI = [
|
|
10
|
+
"function stableToken() view returns (address)",
|
|
11
|
+
"function stableDecimals() view returns (uint8)",
|
|
12
|
+
"function balanceOf(address) view returns (uint256)",
|
|
13
|
+
];
|
|
14
|
+
// ─── AgentWallet ────────────────────────────────────────────────────────
|
|
15
|
+
export class AgentWallet {
|
|
16
|
+
wallet;
|
|
17
|
+
provider;
|
|
18
|
+
tokenAddress;
|
|
19
|
+
// Contracts (initialized in init())
|
|
20
|
+
stableTokenContract;
|
|
21
|
+
tokenContract;
|
|
22
|
+
// Cached immutables
|
|
23
|
+
stableTokenAddr = "";
|
|
24
|
+
stableDecimals = 18;
|
|
25
|
+
constructor(privateKey, tokenAddress, provider) {
|
|
26
|
+
this.wallet = new ethers.Wallet(privateKey, provider);
|
|
27
|
+
this.provider = provider;
|
|
28
|
+
this.tokenAddress = tokenAddress;
|
|
29
|
+
}
|
|
30
|
+
/** One-time init: read immutable config from contract */
|
|
31
|
+
async init() {
|
|
32
|
+
const readToken = new ethers.Contract(this.tokenAddress, TOKEN_WALLET_ABI, this.provider);
|
|
33
|
+
// Read immutables in parallel
|
|
34
|
+
const [stableAddr, stableDecimals] = await Promise.all([
|
|
35
|
+
readToken.stableToken(),
|
|
36
|
+
readToken.stableDecimals(),
|
|
37
|
+
]);
|
|
38
|
+
this.stableTokenAddr = stableAddr;
|
|
39
|
+
this.stableDecimals = Number(stableDecimals);
|
|
40
|
+
// Create contract instances with signer
|
|
41
|
+
this.stableTokenContract = new ethers.Contract(this.stableTokenAddr, ERC20_ABI, this.wallet);
|
|
42
|
+
this.tokenContract = new ethers.Contract(this.tokenAddress, TOKEN_WALLET_ABI, this.wallet);
|
|
43
|
+
console.log(`[wallet] Initialized: addr=${this.wallet.address}, ` +
|
|
44
|
+
`stable=${this.stableTokenAddr}`);
|
|
45
|
+
}
|
|
46
|
+
// ─── Balance queries ────────────────────────────────────────────────
|
|
47
|
+
async getStableBalance() {
|
|
48
|
+
return this.stableTokenContract.balanceOf(this.wallet.address);
|
|
49
|
+
}
|
|
50
|
+
async getNativeBalance() {
|
|
51
|
+
return this.provider.getBalance(this.wallet.address);
|
|
52
|
+
}
|
|
53
|
+
async getTokenBalance() {
|
|
54
|
+
return this.tokenContract.balanceOf(this.wallet.address);
|
|
55
|
+
}
|
|
56
|
+
// ─── Fund operations ────────────────────────────────────────────────
|
|
57
|
+
async approveSpend(spender, amount) {
|
|
58
|
+
const tx = await this.stableTokenContract.approve(spender, amount);
|
|
59
|
+
const receipt = await tx.wait();
|
|
60
|
+
return receipt.hash;
|
|
61
|
+
}
|
|
62
|
+
// ─── Accessors ──────────────────────────────────────────────────────
|
|
63
|
+
get signer() {
|
|
64
|
+
return this.wallet;
|
|
65
|
+
}
|
|
66
|
+
get address() {
|
|
67
|
+
return this.wallet.address;
|
|
68
|
+
}
|
|
69
|
+
get rpcProvider() {
|
|
70
|
+
return this.provider;
|
|
71
|
+
}
|
|
72
|
+
get tokenAddr() {
|
|
73
|
+
return this.tokenAddress;
|
|
74
|
+
}
|
|
75
|
+
get stableAddr() {
|
|
76
|
+
return this.stableTokenAddr;
|
|
77
|
+
}
|
|
78
|
+
get stableDecimalCount() {
|
|
79
|
+
return this.stableDecimals;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=wallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/finance/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,2EAA2E;AAE3E,MAAM,SAAS,GAAG;IAChB,oDAAoD;IACpD,kEAAkE;IAClE,8DAA8D;IAC9D,2EAA2E;CAC5E,CAAC;AAEF,MAAM,gBAAgB,GAAG;IACvB,+CAA+C;IAC/C,gDAAgD;IAChD,oDAAoD;CACrD,CAAC;AAEF,2EAA2E;AAE3E,MAAM,OAAO,WAAW;IACd,MAAM,CAAgB;IACtB,QAAQ,CAAyB;IACjC,YAAY,CAAS;IAE7B,oCAAoC;IAC5B,mBAAmB,CAAmB;IACtC,aAAa,CAAmB;IAExC,oBAAoB;IACZ,eAAe,GAAW,EAAE,CAAC;IAC7B,cAAc,GAAW,EAAE,CAAC;IAEpC,YACE,UAAkB,EAClB,YAAoB,EACpB,QAAgC;QAEhC,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACtD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED,yDAAyD;IACzD,KAAK,CAAC,IAAI;QACR,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,QAAQ,CACnC,IAAI,CAAC,YAAY,EACjB,gBAAgB,EAChB,IAAI,CAAC,QAAQ,CACd,CAAC;QAEF,8BAA8B;QAC9B,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC,GAChC,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,SAAS,CAAC,WAAW,EAAE;YACvB,SAAS,CAAC,cAAc,EAAE;SAC3B,CAAC,CAAC;QAEL,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC;QAClC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;QAE7C,wCAAwC;QACxC,IAAI,CAAC,mBAAmB,GAAG,IAAI,MAAM,CAAC,QAAQ,CAC5C,IAAI,CAAC,eAAe,EACpB,SAAS,EACT,IAAI,CAAC,MAAM,CACZ,CAAC;QACF,IAAI,CAAC,aAAa,GAAG,IAAI,MAAM,CAAC,QAAQ,CACtC,IAAI,CAAC,YAAY,EACjB,gBAAgB,EAChB,IAAI,CAAC,MAAM,CACZ,CAAC;QAEF,OAAO,CAAC,GAAG,CACT,8BAA8B,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI;YACrD,UAAU,IAAI,CAAC,eAAe,EAAE,CACjC,CAAC;IACJ,CAAC;IAED,uEAAuE;IAEvE,KAAK,CAAC,gBAAgB;QACpB,OAAO,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED,uEAAuE;IAEvE,KAAK,CAAC,YAAY,CAAC,OAAe,EAAE,MAAc;QAChD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC,IAAI,CAAC;IACtB,CAAC;IAED,uEAAuE;IAEvE,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IAC7B,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,IAAI,kBAAkB;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;CACF"}
|
package/dist/index.js
CHANGED
|
@@ -3,9 +3,12 @@ import { config as loadEnv } from "dotenv";
|
|
|
3
3
|
if (process.env.VITEST !== "true") {
|
|
4
4
|
loadEnv(); // load .env into process.env when not in test
|
|
5
5
|
}
|
|
6
|
+
import { ethers } from "ethers";
|
|
6
7
|
import { ChainMonitor, SurvivalManager } from "./survival/index.js";
|
|
7
8
|
import { AutonomousBehavior } from "./autonomy/behavior.js";
|
|
8
|
-
import { AgentWallet } from "./
|
|
9
|
+
import { AgentWallet } from "./finance/wallet.js";
|
|
10
|
+
import { SpendManager } from "./finance/spend.js";
|
|
11
|
+
import { detectTreasuryCapabilities } from "./finance/action/treasury.js";
|
|
9
12
|
import { shellExecuteTool } from "./tools/shell-execute.js";
|
|
10
13
|
import { readChainStateTool } from "./tools/read-chain-state.js";
|
|
11
14
|
import { readFileTool } from "./tools/read-file.js";
|
|
@@ -24,10 +27,15 @@ function loadConfig() {
|
|
|
24
27
|
};
|
|
25
28
|
const optional = (key, fallback) => process.env[key] ?? fallback;
|
|
26
29
|
const dataDir = optional(ENV.DATA_DIR, ENV_DEFAULTS[ENV.DATA_DIR]);
|
|
30
|
+
const tokenAddress = required(ENV.TOKEN_ADDRESS);
|
|
31
|
+
if (!ethers.isAddress(tokenAddress)) {
|
|
32
|
+
throw new Error(`Invalid TOKEN_ADDRESS: "${tokenAddress}" is not a valid Ethereum address. ` +
|
|
33
|
+
`Provide a full 0x-prefixed 20-byte address.`);
|
|
34
|
+
}
|
|
27
35
|
return {
|
|
28
36
|
rpcUrl: required(ENV.RPC_URL),
|
|
29
37
|
chainId: parseInt(optional(ENV.CHAIN_ID, ENV_DEFAULTS[ENV.CHAIN_ID])),
|
|
30
|
-
tokenAddress
|
|
38
|
+
tokenAddress,
|
|
31
39
|
walletPrivateKey: required(ENV.WALLET_PRIVATE_KEY),
|
|
32
40
|
llmApiUrl: optional(ENV.LLM_API_URL, ENV_DEFAULTS[ENV.LLM_API_URL]),
|
|
33
41
|
llmApiKey: required(ENV.LLM_API_KEY),
|
|
@@ -87,15 +95,19 @@ export async function main() {
|
|
|
87
95
|
const monitor = new ChainMonitor(config);
|
|
88
96
|
await monitor.init();
|
|
89
97
|
console.log(`Agent wallet: ${monitor.walletAddress}`);
|
|
90
|
-
// Initialize agent wallet (
|
|
98
|
+
// Initialize agent wallet (keys, signing, balance queries)
|
|
91
99
|
const agentWallet = new AgentWallet(config.walletPrivateKey, config.tokenAddress, monitor.rpcProvider);
|
|
92
100
|
await agentWallet.init();
|
|
93
|
-
|
|
94
|
-
|
|
101
|
+
// Detect treasury capabilities (V2 withdraw support)
|
|
102
|
+
const treasuryCaps = await detectTreasuryCapabilities(config.tokenAddress, monitor.rpcProvider);
|
|
103
|
+
console.log(`Treasury withdraw: ${treasuryCaps.hasWithdrawToWallet}`);
|
|
104
|
+
// Initialize spend manager (self-contained persistence)
|
|
105
|
+
const spendManager = new SpendManager({ dataDir: config.dataDir });
|
|
106
|
+
await spendManager.load();
|
|
95
107
|
// Initialize survival manager
|
|
96
|
-
const survival = new SurvivalManager(monitor, config, agentWallet);
|
|
108
|
+
const survival = new SurvivalManager(monitor, config, agentWallet, spendManager);
|
|
97
109
|
// Initialize autonomous behavior
|
|
98
|
-
const behavior = new AutonomousBehavior(monitor, survival, config, agentWallet);
|
|
110
|
+
const behavior = new AutonomousBehavior(monitor, survival, config, agentWallet, spendManager);
|
|
99
111
|
// Register tools
|
|
100
112
|
behavior.registerTool(shellExecuteTool);
|
|
101
113
|
behavior.registerTool(readChainStateTool);
|
|
@@ -118,7 +130,7 @@ export async function main() {
|
|
|
118
130
|
const shutdown = async () => {
|
|
119
131
|
console.log("\nShutting down...");
|
|
120
132
|
running = false;
|
|
121
|
-
await
|
|
133
|
+
await spendManager.save();
|
|
122
134
|
};
|
|
123
135
|
process.on("SIGINT", () => { shutdown(); });
|
|
124
136
|
process.on("SIGTERM", () => { shutdown(); });
|
|
@@ -133,8 +145,8 @@ export async function main() {
|
|
|
133
145
|
console.log(` [summary] ${obs.summary.slice(0, 200)}`);
|
|
134
146
|
}
|
|
135
147
|
console.log();
|
|
136
|
-
// Periodically save
|
|
137
|
-
await
|
|
148
|
+
// Periodically save spending log
|
|
149
|
+
await spendManager.save();
|
|
138
150
|
// If dead, stop
|
|
139
151
|
if (state.status === AgentStatus.DEAD) {
|
|
140
152
|
console.log("Goo Agent is Dead. Core stopping.");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,QAAQ,CAAC;AAC3C,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;IAClC,OAAO,EAAE,CAAC,CAAC,8CAA8C;AAC3D,CAAC;AACD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type ChainState, type RuntimeConfig } from "../types.js";
|
|
2
2
|
import type { ChainMonitor } from "./chain-monitor.js";
|
|
3
|
-
import type { AgentWallet } from "../
|
|
3
|
+
import type { AgentWallet } from "../finance/index.js";
|
|
4
|
+
import type { SpendManager } from "../finance/spend.js";
|
|
4
5
|
/**
|
|
5
6
|
* Survival module — Goo Core economic actions (survivalSell, Pulse).
|
|
6
7
|
*
|
|
@@ -15,7 +16,8 @@ export declare class SurvivalManager {
|
|
|
15
16
|
private token;
|
|
16
17
|
private lastPulseTime;
|
|
17
18
|
private agentWallet?;
|
|
18
|
-
|
|
19
|
+
private spendManager?;
|
|
20
|
+
constructor(monitor: ChainMonitor, config: RuntimeConfig, agentWallet?: AgentWallet, spendManager?: SpendManager);
|
|
19
21
|
/**
|
|
20
22
|
* Evaluate chain state and execute survival actions if needed.
|
|
21
23
|
* Called on every heartbeat. Returns a list of actions taken.
|
|
@@ -2,6 +2,7 @@ import { ethers } from "ethers";
|
|
|
2
2
|
import { AgentStatus } from "../types.js";
|
|
3
3
|
import { emitPulse as emitPulseOnChain } from "./pulse.js";
|
|
4
4
|
import { TOKEN_WRITE_ABI } from "../const.js";
|
|
5
|
+
import { ensureWalletGas } from "../finance/action/gas-refill.js";
|
|
5
6
|
/**
|
|
6
7
|
* Survival module — Goo Core economic actions (survivalSell, Pulse).
|
|
7
8
|
*
|
|
@@ -16,12 +17,14 @@ export class SurvivalManager {
|
|
|
16
17
|
token;
|
|
17
18
|
lastPulseTime = 0;
|
|
18
19
|
agentWallet;
|
|
19
|
-
|
|
20
|
+
spendManager;
|
|
21
|
+
constructor(monitor, config, agentWallet, spendManager) {
|
|
20
22
|
this.monitor = monitor;
|
|
21
23
|
this.config = config;
|
|
22
24
|
this.wallet = new ethers.Wallet(config.walletPrivateKey, monitor.rpcProvider);
|
|
23
25
|
this.token = new ethers.Contract(config.tokenAddress, TOKEN_WRITE_ABI, this.wallet);
|
|
24
26
|
this.agentWallet = agentWallet;
|
|
27
|
+
this.spendManager = spendManager;
|
|
25
28
|
}
|
|
26
29
|
/**
|
|
27
30
|
* Evaluate chain state and execute survival actions if needed.
|
|
@@ -32,11 +35,14 @@ export class SurvivalManager {
|
|
|
32
35
|
if (state.status === AgentStatus.DEAD) {
|
|
33
36
|
return ["Agent is DEAD. No actions possible."];
|
|
34
37
|
}
|
|
35
|
-
// 1. Gas refill: auto-swap via
|
|
38
|
+
// 1. Gas refill: auto-swap via gas-refill module if wallet available, otherwise warn
|
|
36
39
|
if (state.nativeBalance < this.config.minGasBalance) {
|
|
37
40
|
if (this.agentWallet) {
|
|
38
41
|
try {
|
|
39
|
-
const result = await this.agentWallet
|
|
42
|
+
const result = await ensureWalletGas(this.agentWallet, {
|
|
43
|
+
minGasBalance: this.config.minGasBalance,
|
|
44
|
+
gasRefillAmount: this.config.gasRefillAmount,
|
|
45
|
+
}, this.spendManager);
|
|
40
46
|
if (result.refilled) {
|
|
41
47
|
actions.push(`Gas refilled: swapped stablecoin → native (tx: ${result.txHash})`);
|
|
42
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"survival-manager.js","sourceRoot":"","sources":["../../src/survival/survival-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,WAAW,EAAuC,MAAM,aAAa,CAAC;AAE/E,OAAO,EAAE,SAAS,IAAI,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C;;;;;;GAMG;AACH,MAAM,OAAO,eAAe;
|
|
1
|
+
{"version":3,"file":"survival-manager.js","sourceRoot":"","sources":["../../src/survival/survival-manager.ts"],"names":[],"mappings":"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"}
|