@clawnch/clawtomaton 0.2.2 → 0.4.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/README.md +82 -10
- package/dist/agent/index.d.ts +5 -1
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +120 -10
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/prompt.d.ts +2 -0
- package/dist/agent/prompt.d.ts.map +1 -1
- package/dist/agent/prompt.js +199 -2
- package/dist/agent/prompt.js.map +1 -1
- package/dist/bunker/client.d.ts +113 -0
- package/dist/bunker/client.d.ts.map +1 -0
- package/dist/bunker/client.js +404 -0
- package/dist/bunker/client.js.map +1 -0
- package/dist/bunker/self-deploy.d.ts +54 -0
- package/dist/bunker/self-deploy.d.ts.map +1 -0
- package/dist/bunker/self-deploy.js +353 -0
- package/dist/bunker/self-deploy.js.map +1 -0
- package/dist/bunker/threat-monitor.d.ts +47 -0
- package/dist/bunker/threat-monitor.d.ts.map +1 -0
- package/dist/bunker/threat-monitor.js +173 -0
- package/dist/bunker/threat-monitor.js.map +1 -0
- package/dist/bunker/types.d.ts +320 -0
- package/dist/bunker/types.d.ts.map +1 -0
- package/dist/bunker/types.js +9 -0
- package/dist/bunker/types.js.map +1 -0
- package/dist/cli.js +207 -9
- package/dist/cli.js.map +1 -1
- package/dist/constants.d.ts +11 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +10 -0
- package/dist/constants.js.map +1 -1
- package/dist/heartbeat/index.d.ts +28 -0
- package/dist/heartbeat/index.d.ts.map +1 -1
- package/dist/heartbeat/index.js +240 -11
- package/dist/heartbeat/index.js.map +1 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/market/index.d.ts +20 -1
- package/dist/market/index.d.ts.map +1 -1
- package/dist/market/index.js +76 -4
- package/dist/market/index.js.map +1 -1
- package/dist/skills/analyze-market.d.ts +17 -0
- package/dist/skills/analyze-market.d.ts.map +1 -0
- package/dist/skills/analyze-market.js +156 -0
- package/dist/skills/analyze-market.js.map +1 -0
- package/dist/skills/bunker.d.ts +29 -0
- package/dist/skills/bunker.d.ts.map +1 -0
- package/dist/skills/bunker.js +502 -0
- package/dist/skills/bunker.js.map +1 -0
- package/dist/skills/check-balance.d.ts +2 -2
- package/dist/skills/check-balance.d.ts.map +1 -1
- package/dist/skills/check-balance.js +43 -8
- package/dist/skills/check-balance.js.map +1 -1
- package/dist/skills/check-price.d.ts +11 -0
- package/dist/skills/check-price.d.ts.map +1 -0
- package/dist/skills/check-price.js +83 -0
- package/dist/skills/check-price.js.map +1 -0
- package/dist/skills/claim-vault.d.ts +15 -0
- package/dist/skills/claim-vault.d.ts.map +1 -0
- package/dist/skills/claim-vault.js +96 -0
- package/dist/skills/claim-vault.js.map +1 -0
- package/dist/skills/deploy.d.ts.map +1 -1
- package/dist/skills/deploy.js +10 -1
- package/dist/skills/deploy.js.map +1 -1
- package/dist/skills/index.d.ts +9 -1
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +34 -1
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/manage-orders.d.ts +26 -0
- package/dist/skills/manage-orders.d.ts.map +1 -0
- package/dist/skills/manage-orders.js +470 -0
- package/dist/skills/manage-orders.js.map +1 -0
- package/dist/skills/portfolio.d.ts +19 -0
- package/dist/skills/portfolio.d.ts.map +1 -0
- package/dist/skills/portfolio.js +189 -0
- package/dist/skills/portfolio.js.map +1 -0
- package/dist/skills/watch-activity.d.ts +12 -0
- package/dist/skills/watch-activity.d.ts.map +1 -0
- package/dist/skills/watch-activity.js +130 -0
- package/dist/skills/watch-activity.js.map +1 -0
- package/dist/skills/xmtp.d.ts +18 -0
- package/dist/skills/xmtp.d.ts.map +1 -0
- package/dist/skills/xmtp.js +180 -0
- package/dist/skills/xmtp.js.map +1 -0
- package/dist/state/index.d.ts +25 -0
- package/dist/state/index.d.ts.map +1 -1
- package/dist/state/index.js +156 -0
- package/dist/state/index.js.map +1 -1
- package/dist/survival/index.d.ts.map +1 -1
- package/dist/survival/index.js +3 -0
- package/dist/survival/index.js.map +1 -1
- package/dist/types.d.ts +19 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/xmtp/client.d.ts +79 -0
- package/dist/xmtp/client.d.ts.map +1 -0
- package/dist/xmtp/client.js +282 -0
- package/dist/xmtp/client.js.map +1 -0
- package/dist/xmtp/index.d.ts +9 -0
- package/dist/xmtp/index.d.ts.map +1 -0
- package/dist/xmtp/index.js +8 -0
- package/dist/xmtp/index.js.map +1 -0
- package/dist/xmtp/types.d.ts +59 -0
- package/dist/xmtp/types.d.ts.map +1 -0
- package/dist/xmtp/types.js +5 -0
- package/dist/xmtp/types.js.map +1 -0
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/market/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/market/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAGL,KAAK,OAAO,EACZ,KAAK,YAAY,EAClB,MAAM,MAAM,CAAC;AACd,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAcpD,2EAA2E;AAC3E,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAElB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IAErB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAE9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,0BAA0B,EAAE,MAAM,CAAC;IACnC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,2BAA2B,EAAE,MAAM,CAAC;IAEpC,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAE3B,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAE/B,QAAQ,EAAE,MAAM,CAAC;IAEjB,0EAA0E;IAC1E,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,iEAAiE;IACjE,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,wCAAwC;IACxC,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5C;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,8CAA8C;IAC9C,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,uBAAuB,EAAE,MAAM,CAAC;IAChC,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,KAAK,CAAe;gBAG1B,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,UAAU,EACjB,OAAO,GAAE,WAAuB;IASlC;;OAEG;IACG,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAkD/D;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB;IA0ChD;;OAEG;IACG,UAAU,CAAC,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;YAyBtE,SAAS;IAyBvB;;;OAGG;YACW,eAAe;IAwC7B;;OAEG;YACW,kBAAkB;CA6CjC;AAUD,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAmC3D"}
|
package/dist/market/index.js
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* Reads real state: gas prices, fee balances, token stats, ETH balance.
|
|
5
5
|
* Uses the Clawncher SDK for all on-chain reads — no local ABI duplication.
|
|
6
6
|
*/
|
|
7
|
-
import { formatEther, } from 'viem';
|
|
8
|
-
import { ClawnchReader, ERC20ABI, } from '@clawnch/clawncher-sdk';
|
|
9
|
-
import { BASE_WETH, GAS_PER_TX, CLAIM_TX_COUNT, MIN_CLAIM_PROFIT_WEI, INFERENCE_COST_ETH_EQUIV, } from '../constants.js';
|
|
7
|
+
import { formatEther, erc20Abi, } from 'viem';
|
|
8
|
+
import { ClawnchReader, ClawnchPrice, ERC20ABI, } from '@clawnch/clawncher-sdk';
|
|
9
|
+
import { BASE_WETH, GAS_PER_TX, CLAIM_TX_COUNT, MIN_CLAIM_PROFIT_WEI, INFERENCE_COST_ETH_EQUIV, BUNKER_TOKEN_ADDRESS, } from '../constants.js';
|
|
10
10
|
// ============================================================================
|
|
11
11
|
// Market Intelligence
|
|
12
12
|
// ============================================================================
|
|
@@ -15,11 +15,13 @@ export class MarketIntelligence {
|
|
|
15
15
|
address;
|
|
16
16
|
state;
|
|
17
17
|
reader;
|
|
18
|
+
price;
|
|
18
19
|
constructor(publicClient, address, state, network = 'mainnet') {
|
|
19
20
|
this.publicClient = publicClient;
|
|
20
21
|
this.address = address;
|
|
21
22
|
this.state = state;
|
|
22
23
|
this.reader = new ClawnchReader({ publicClient: publicClient, network });
|
|
24
|
+
this.price = new ClawnchPrice({ publicClient: publicClient, network });
|
|
23
25
|
}
|
|
24
26
|
/**
|
|
25
27
|
* Take a full market snapshot — all data from chain, no caching.
|
|
@@ -44,6 +46,8 @@ export class MarketIntelligence {
|
|
|
44
46
|
const txBudget = estimatedTxCostWei > 0n
|
|
45
47
|
? Number(ethBalance / estimatedTxCostWei)
|
|
46
48
|
: 0;
|
|
49
|
+
// Bunker data (non-blocking — read from state + chain)
|
|
50
|
+
const bunkerData = await this.fetchBunkerData();
|
|
47
51
|
return {
|
|
48
52
|
timestamp,
|
|
49
53
|
ethBalance,
|
|
@@ -61,6 +65,7 @@ export class MarketIntelligence {
|
|
|
61
65
|
claimIsProfitable,
|
|
62
66
|
ownToken,
|
|
63
67
|
txBudget,
|
|
68
|
+
...bunkerData,
|
|
64
69
|
};
|
|
65
70
|
}
|
|
66
71
|
/**
|
|
@@ -148,7 +153,43 @@ export class MarketIntelligence {
|
|
|
148
153
|
}
|
|
149
154
|
}
|
|
150
155
|
/**
|
|
151
|
-
* Fetch
|
|
156
|
+
* Fetch BUNKER token balance and runtime info from state.
|
|
157
|
+
* Non-fatal: returns nulls on any failure.
|
|
158
|
+
*/
|
|
159
|
+
async fetchBunkerData() {
|
|
160
|
+
const defaults = {
|
|
161
|
+
bunkerBalance: null,
|
|
162
|
+
bunkerBalanceFormatted: null,
|
|
163
|
+
bunkerRuntimeExpiresAt: null,
|
|
164
|
+
bunkerRuntimeHoursRemaining: null,
|
|
165
|
+
};
|
|
166
|
+
try {
|
|
167
|
+
// Read BUNKER token balance on-chain (standard ERC-20 balanceOf)
|
|
168
|
+
const balance = await this.publicClient.readContract({
|
|
169
|
+
address: BUNKER_TOKEN_ADDRESS,
|
|
170
|
+
abi: erc20Abi,
|
|
171
|
+
functionName: 'balanceOf',
|
|
172
|
+
args: [this.address],
|
|
173
|
+
});
|
|
174
|
+
// If balance is 0 and no bunker state, skip
|
|
175
|
+
const bunkerState = this.state.getBunkerState();
|
|
176
|
+
const expiresAt = bunkerState?.expiresAt ?? null;
|
|
177
|
+
const hoursRemaining = expiresAt
|
|
178
|
+
? Math.max(0, (expiresAt - Date.now()) / (1000 * 60 * 60))
|
|
179
|
+
: null;
|
|
180
|
+
return {
|
|
181
|
+
bunkerBalance: balance,
|
|
182
|
+
bunkerBalanceFormatted: formatEther(balance),
|
|
183
|
+
bunkerRuntimeExpiresAt: expiresAt,
|
|
184
|
+
bunkerRuntimeHoursRemaining: hoursRemaining ? Math.round(hoursRemaining * 10) / 10 : null,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
return defaults;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Fetch own token stats using the SDK's ClawnchReader + ERC20ABI + ClawnchPrice.
|
|
152
193
|
*/
|
|
153
194
|
async fetchOwnTokenStats(tokenAddress) {
|
|
154
195
|
try {
|
|
@@ -164,6 +205,19 @@ export class MarketIntelligence {
|
|
|
164
205
|
const holdingPct = tokenInfo.totalSupply > 0n
|
|
165
206
|
? Number((balance * 10000n) / tokenInfo.totalSupply) / 100
|
|
166
207
|
: 0;
|
|
208
|
+
// Fetch price (non-fatal — null on failure)
|
|
209
|
+
let priceEth = null;
|
|
210
|
+
let priceUsd = null;
|
|
211
|
+
let marketCapUsd = null;
|
|
212
|
+
try {
|
|
213
|
+
const priceInfo = await this.price.getTokenPrice(tokenAddress);
|
|
214
|
+
priceEth = priceInfo.priceInEth;
|
|
215
|
+
priceUsd = priceInfo.priceInUsd;
|
|
216
|
+
marketCapUsd = priceInfo.marketCapUsd;
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
// Price read failed — pool may not exist or token not paired with WETH
|
|
220
|
+
}
|
|
167
221
|
return {
|
|
168
222
|
address: tokenAddress,
|
|
169
223
|
symbol: tokenInfo.symbol,
|
|
@@ -171,6 +225,9 @@ export class MarketIntelligence {
|
|
|
171
225
|
balanceFormatted: formatEther(balance),
|
|
172
226
|
totalSupply: tokenInfo.totalSupply,
|
|
173
227
|
holdingPct,
|
|
228
|
+
priceEth,
|
|
229
|
+
priceUsd,
|
|
230
|
+
marketCapUsd,
|
|
174
231
|
};
|
|
175
232
|
}
|
|
176
233
|
catch {
|
|
@@ -199,6 +256,21 @@ export function formatSnapshot(snap) {
|
|
|
199
256
|
lines.push(`--- Own Token ---`);
|
|
200
257
|
lines.push(`$${snap.ownToken.symbol} (${snap.ownToken.address})`);
|
|
201
258
|
lines.push(`Balance: ${snap.ownToken.balanceFormatted} (${snap.ownToken.holdingPct.toFixed(2)}% of supply)`);
|
|
259
|
+
if (snap.ownToken.priceEth != null) {
|
|
260
|
+
lines.push(`Price: ${snap.ownToken.priceEth.toExponential(4)} ETH${snap.ownToken.priceUsd != null ? ` ($${snap.ownToken.priceUsd.toExponential(4)})` : ''}`);
|
|
261
|
+
}
|
|
262
|
+
if (snap.ownToken.marketCapUsd != null) {
|
|
263
|
+
const mcap = snap.ownToken.marketCapUsd;
|
|
264
|
+
const mcapStr = mcap >= 1_000_000 ? `$${(mcap / 1_000_000).toFixed(2)}M` : mcap >= 1_000 ? `$${(mcap / 1_000).toFixed(2)}K` : `$${mcap.toFixed(2)}`;
|
|
265
|
+
lines.push(`Market Cap: ${mcapStr}`);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
if (snap.bunkerBalance !== null && snap.bunkerBalance > 0n) {
|
|
269
|
+
lines.push(`--- Bunker ---`);
|
|
270
|
+
lines.push(`BUNKER Balance: ${snap.bunkerBalanceFormatted}`);
|
|
271
|
+
if (snap.bunkerRuntimeHoursRemaining !== null) {
|
|
272
|
+
lines.push(`Runtime: ${snap.bunkerRuntimeHoursRemaining}h remaining`);
|
|
273
|
+
}
|
|
202
274
|
}
|
|
203
275
|
return lines.join('\n');
|
|
204
276
|
}
|
package/dist/market/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/market/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,WAAW,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/market/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,WAAW,EACX,QAAQ,GAGT,MAAM,MAAM,CAAC;AACd,OAAO,EAEL,aAAa,EACb,YAAY,EACZ,QAAQ,GAET,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,SAAS,EACT,UAAU,EACV,cAAc,EACd,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AAgEzB,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E,MAAM,OAAO,kBAAkB;IACrB,YAAY,CAAe;IAC3B,OAAO,CAAU;IACjB,KAAK,CAAa;IAClB,MAAM,CAAgB;IACtB,KAAK,CAAe;IAE5B,YACE,YAA0B,EAC1B,OAAgB,EAChB,KAAiB,EACjB,UAAuB,SAAS;QAEhC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,EAAE,YAAY,EAAE,YAAmB,EAAE,OAAO,EAAE,CAAC,CAAC;QAChF,IAAI,CAAC,KAAK,GAAG,IAAI,YAAY,CAAC,EAAE,YAAY,EAAE,YAAmB,EAAE,OAAO,EAAE,CAAC,CAAC;IAChF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,YAAsB;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACzD,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;YACvD,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;YAC/B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;SAC7B,CAAC,CAAC;QAEH,MAAM,kBAAkB,GAAG,QAAQ,GAAG,UAAU,CAAC;QACjD,MAAM,qBAAqB,GAAG,kBAAkB,GAAG,cAAc,CAAC;QAElE,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,GAAG,qBAAqB;YACnE,CAAC,CAAC,QAAQ,CAAC,aAAa,GAAG,qBAAqB;YAChD,CAAC,CAAC,EAAE,GAAG,CAAC,qBAAqB,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC1D,MAAM,iBAAiB,GAAG,cAAc,GAAG,oBAAoB,CAAC;QAEhE,IAAI,QAAQ,GAAyB,IAAI,CAAC;QAC1C,IAAI,YAAY,EAAE,CAAC;YACjB,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,QAAQ,GAAG,kBAAkB,GAAG,EAAE;YACtC,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,kBAAkB,CAAC;YACzC,CAAC,CAAC,CAAC,CAAC;QAEN,uDAAuD;QACvD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAEhD,OAAO;YACL,SAAS;YACT,UAAU;YACV,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC;YACrC,QAAQ;YACR,kBAAkB;YAClB,qBAAqB;YACrB,qBAAqB,EAAE,WAAW,CAAC,qBAAqB,CAAC;YACzD,iBAAiB,EAAE,QAAQ,CAAC,aAAa;YACzC,0BAA0B,EAAE,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC/D,kBAAkB,EAAE,QAAQ,CAAC,cAAc;YAC3C,2BAA2B,EAAE,QAAQ,CAAC,uBAAuB;YAC7D,cAAc;YACd,cAAc,EAAE,WAAW,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;YACtE,iBAAiB;YACjB,QAAQ;YACR,QAAQ;YACR,GAAG,UAAU;SACd,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,IAAoB;QAC3B,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC;QAEtF,MAAM,aAAa,GAAG,GAAG,CAAC;QAC1B,MAAM,YAAY,GAAG,kBAAkB,GAAG,aAAa,GAAG,wBAAwB,GAAG,GAAG,CAAC;QACzF,MAAM,oBAAoB,GAAG,UAAU,GAAG,YAAY,CAAC;QACvD,MAAM,uBAAuB,GAAG,YAAY,GAAG,EAAE;YAC/C,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,YAAY,CAAC;YAC3C,CAAC,CAAC,CAAC,CAAC;QAEN,MAAM,iBAAiB,GAAG,YAAY,GAAG,EAAE,CAAC;QAC5C,MAAM,mBAAmB,GAAG,UAAU,GAAG,iBAAiB,IAAI,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,CAAC;QAE7G,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC;QAE1C,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,iBAAiB,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,0BAA0B,4BAA4B,IAAI,CAAC,cAAc,OAAO,CAAC,CAAC;QACvH,CAAC;aAAM,IAAI,iBAAiB,GAAG,EAAE,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,0BAA0B,iDAAiD,IAAI,CAAC,qBAAqB,OAAO,CAAC,CAAC;QACjJ,CAAC;QACD,IAAI,mBAAmB,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,YAAY,iCAAiC,CAAC,CAAC;QACvF,CAAC;QACD,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,aAAa,uBAAuB,iDAAiD,CAAC,CAAC;QACpG,CAAC;QACD,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,QAAQ,iCAAiC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE3G,OAAO;YACL,iBAAiB,EAAE,iBAAiB;YACpC,mBAAmB;YACnB,oBAAoB;YACpB,uBAAuB;YACvB,UAAU;YACV,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;SAC1B,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,YAAsB;QACrC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAEvC,IAAI,UAAU,CAAC,mBAAmB,EAAE,CAAC;gBACnC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,iDAAiD,EAAE,CAAC;YACnF,CAAC;YACD,IAAI,UAAU,CAAC,iBAAiB,EAAE,CAAC;gBACjC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,wBAAwB,IAAI,CAAC,0BAA0B,OAAO,EAAE,CAAC;YAChG,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC;gBACrC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,UAAU,CAAC,uBAAuB,0BAA0B,EAAE,CAAC;YACtG,CAAC;YAED,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;QACvD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACtG,CAAC;IACH,CAAC;IAED,6EAA6E;IAC7E,WAAW;IACX,6EAA6E;IAErE,KAAK,CAAC,SAAS,CAAC,YAAsB;QAK5C,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,uBAAuB,EAAE,GAAG,EAAE,CAAC;QACjF,CAAC;QAED,IAAI,CAAC;YACH,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC9C,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;gBACrD,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;aACzD,CAAC,CAAC;YAEH,OAAO;gBACL,aAAa,EAAE,QAAQ;gBACvB,cAAc,EAAE,SAAS;gBACzB,uBAAuB,EAAE,WAAW,CAAC,SAAS,CAAC;aAChD,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,uBAAuB,EAAE,GAAG,EAAE,CAAC;QACjF,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,eAAe;QAM3B,MAAM,QAAQ,GAAG;YACf,aAAa,EAAE,IAAI;YACnB,sBAAsB,EAAE,IAAI;YAC5B,sBAAsB,EAAE,IAAI;YAC5B,2BAA2B,EAAE,IAAI;SAClC,CAAC;QAEF,IAAI,CAAC;YACH,iEAAiE;YACjE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;gBACnD,OAAO,EAAE,oBAAoB;gBAC7B,GAAG,EAAE,QAAQ;gBACb,YAAY,EAAE,WAAW;gBACzB,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;aACrB,CAAC,CAAC;YAEH,4CAA4C;YAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YAChD,MAAM,SAAS,GAAG,WAAW,EAAE,SAAS,IAAI,IAAI,CAAC;YACjD,MAAM,cAAc,GAAG,SAAS;gBAC9B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC1D,CAAC,CAAC,IAAI,CAAC;YAET,OAAO;gBACL,aAAa,EAAE,OAAO;gBACtB,sBAAsB,EAAE,WAAW,CAAC,OAAO,CAAC;gBAC5C,sBAAsB,EAAE,SAAS;gBACjC,2BAA2B,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI;aAC1F,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB,CAAC,YAAqB;QACpD,IAAI,CAAC;YACH,oEAAoE;YACpE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAE/D,uFAAuF;YACvF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;gBACnD,OAAO,EAAE,YAAY;gBACrB,GAAG,EAAE,QAAQ;gBACb,YAAY,EAAE,WAAW;gBACzB,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;aACrB,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,GAAG,EAAE;gBAC3C,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,GAAG;gBAC1D,CAAC,CAAC,CAAC,CAAC;YAEN,4CAA4C;YAC5C,IAAI,QAAQ,GAAkB,IAAI,CAAC;YACnC,IAAI,QAAQ,GAAkB,IAAI,CAAC;YACnC,IAAI,YAAY,GAAkB,IAAI,CAAC;YACvC,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;gBAC/D,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC;gBAChC,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC;gBAChC,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC;YACxC,CAAC;YAAC,MAAM,CAAC;gBACP,uEAAuE;YACzE,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,YAAY;gBACrB,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,OAAO;gBACP,gBAAgB,EAAE,WAAW,CAAC,OAAO,CAAC;gBACtC,WAAW,EAAE,SAAS,CAAC,WAAW;gBAClC,UAAU;gBACV,QAAQ;gBACR,QAAQ;gBACR,YAAY;aACb,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAoB;IACjD,MAAM,KAAK,GAAG;QACZ,wBAAwB,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,OAAO;QACrE,gBAAgB,IAAI,CAAC,YAAY,MAAM;QACvC,cAAc,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO;QAC9C,4BAA4B,IAAI,CAAC,qBAAqB,MAAM;QAC5D,wBAAwB,IAAI,CAAC,0BAA0B,EAAE;QACzD,yBAAyB,IAAI,CAAC,2BAA2B,EAAE;QAC3D,qBAAqB,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,gBAAgB,IAAI,CAAC,cAAc,OAAO,CAAC,CAAC,CAAC,uBAAuB,EAAE;QACpH,eAAe,IAAI,CAAC,QAAQ,yBAAyB;KACtD,CAAC;IAEF,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,QAAQ,CAAC,gBAAgB,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;QAC7G,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/J,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YACxC,MAAM,OAAO,GAAG,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACpJ,KAAK,CAAC,IAAI,CAAC,eAAe,OAAO,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,IAAI,IAAI,CAAC,aAAa,GAAG,EAAE,EAAE,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;QAC7D,IAAI,IAAI,CAAC,2BAA2B,KAAK,IAAI,EAAE,CAAC;YAC9C,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,2BAA2B,aAAa,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill: analyze_market — Technical analysis of a token's trading activity.
|
|
3
|
+
*
|
|
4
|
+
* Fetches recent swap events from the V4 pool, builds OHLCV candles,
|
|
5
|
+
* and computes technical indicators:
|
|
6
|
+
* - SMA (20, 50)
|
|
7
|
+
* - RSI (14)
|
|
8
|
+
* - Bollinger Bands (20, 2)
|
|
9
|
+
* - VWAP
|
|
10
|
+
* - Volatility (annualized)
|
|
11
|
+
* - Combined signal (strong_buy → strong_sell)
|
|
12
|
+
*
|
|
13
|
+
* No gas cost — read-only operation using event logs.
|
|
14
|
+
*/
|
|
15
|
+
import type { SkillDefinition } from '../types.js';
|
|
16
|
+
export declare const analyzeMarketSkill: SkillDefinition;
|
|
17
|
+
//# sourceMappingURL=analyze-market.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze-market.d.ts","sourceRoot":"","sources":["../../src/skills/analyze-market.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,eAAe,EAA4B,MAAM,aAAa,CAAC;AAG7E,eAAO,MAAM,kBAAkB,EAAE,eA8HhC,CAAC"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill: analyze_market — Technical analysis of a token's trading activity.
|
|
3
|
+
*
|
|
4
|
+
* Fetches recent swap events from the V4 pool, builds OHLCV candles,
|
|
5
|
+
* and computes technical indicators:
|
|
6
|
+
* - SMA (20, 50)
|
|
7
|
+
* - RSI (14)
|
|
8
|
+
* - Bollinger Bands (20, 2)
|
|
9
|
+
* - VWAP
|
|
10
|
+
* - Volatility (annualized)
|
|
11
|
+
* - Combined signal (strong_buy → strong_sell)
|
|
12
|
+
*
|
|
13
|
+
* No gas cost — read-only operation using event logs.
|
|
14
|
+
*/
|
|
15
|
+
import { ClawnchAnalytics, ClawnchPrice, ClawnchReader, ClawnchWatcher } from '@clawnch/clawncher-sdk';
|
|
16
|
+
export const analyzeMarketSkill = {
|
|
17
|
+
name: 'analyze_market',
|
|
18
|
+
description: [
|
|
19
|
+
'Technical analysis of a token: SMA, RSI, Bollinger Bands, VWAP, volatility.',
|
|
20
|
+
'Builds OHLCV candles from on-chain swap events and produces a buy/sell signal.',
|
|
21
|
+
'No gas cost (read-only). Needs ~50+ swaps for meaningful indicators.',
|
|
22
|
+
].join(' '),
|
|
23
|
+
parameters: [
|
|
24
|
+
{
|
|
25
|
+
name: 'token',
|
|
26
|
+
type: 'address',
|
|
27
|
+
description: 'Token address to analyze. Defaults to own token.',
|
|
28
|
+
required: false,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'interval',
|
|
32
|
+
type: 'string',
|
|
33
|
+
description: 'Candle interval: "5m", "15m", "1h", "4h", "1d". Default "1h".',
|
|
34
|
+
required: false,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'blocks',
|
|
38
|
+
type: 'number',
|
|
39
|
+
description: 'Number of past blocks to scan for swaps (default 10000, ~5.5 hours on Base).',
|
|
40
|
+
required: false,
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
execute: async (params, ctx) => {
|
|
44
|
+
try {
|
|
45
|
+
const tokenAddress = params.token ?? ctx.identity.tokenAddress;
|
|
46
|
+
if (!tokenAddress) {
|
|
47
|
+
return { callId: '', success: false, result: null, error: 'No token address. Deploy a token first or specify one.' };
|
|
48
|
+
}
|
|
49
|
+
const { buildClients } = await import('../identity/index.js');
|
|
50
|
+
const rpcUrl = process.env.BASE_RPC_URL ?? 'https://mainnet.base.org';
|
|
51
|
+
const { publicClient } = buildClients(ctx.identity, rpcUrl);
|
|
52
|
+
// Get pool ID and WETH side
|
|
53
|
+
const reader = new ClawnchReader({ publicClient: publicClient, network: 'mainnet' });
|
|
54
|
+
const rewards = await reader.getTokenRewards(tokenAddress);
|
|
55
|
+
if (!rewards) {
|
|
56
|
+
return { callId: '', success: false, result: null, error: 'No pool found for this token. It may not be a Clawncher token.' };
|
|
57
|
+
}
|
|
58
|
+
const poolKey = rewards.poolKey;
|
|
59
|
+
const wethAddress = '0x4200000000000000000000000000000000000006';
|
|
60
|
+
const wethSide = poolKey.currency0.toLowerCase() === wethAddress.toLowerCase() ? 0 : 1;
|
|
61
|
+
// Build pool ID from the rewards data
|
|
62
|
+
// The watcher needs the pool ID as a hex string. We can get it from getTokenPrice.
|
|
63
|
+
const price = new ClawnchPrice({ publicClient: publicClient, network: 'mainnet' });
|
|
64
|
+
let poolId;
|
|
65
|
+
try {
|
|
66
|
+
const priceInfo = await price.getTokenPrice(tokenAddress);
|
|
67
|
+
// poolId is not directly returned by getTokenPrice. We need to compute it.
|
|
68
|
+
// For now, use reader.getTokenRewards which returns poolKey but not poolId.
|
|
69
|
+
// We'll fetch swaps by scanning the PoolManager for events with this token's pool.
|
|
70
|
+
// Actually, the watcher's getRecentSwaps needs a poolId. Let's compute it from the pool key.
|
|
71
|
+
poolId = computePoolId(poolKey);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return { callId: '', success: false, result: null, error: 'Failed to read pool state. Token may not have liquidity.' };
|
|
75
|
+
}
|
|
76
|
+
// Fetch swap events
|
|
77
|
+
const blocksToScan = params.blocks ?? 10000;
|
|
78
|
+
const currentBlock = await publicClient.getBlockNumber();
|
|
79
|
+
const fromBlock = currentBlock > BigInt(blocksToScan) ? currentBlock - BigInt(blocksToScan) : 0n;
|
|
80
|
+
const watcher = new ClawnchWatcher({ publicClient: publicClient, network: 'mainnet' });
|
|
81
|
+
const swaps = await watcher.getRecentSwaps(poolId, {
|
|
82
|
+
fromBlock,
|
|
83
|
+
toBlock: currentBlock,
|
|
84
|
+
limit: 500,
|
|
85
|
+
});
|
|
86
|
+
if (swaps.length < 5) {
|
|
87
|
+
return {
|
|
88
|
+
callId: '',
|
|
89
|
+
success: true,
|
|
90
|
+
result: `Only ${swaps.length} swap(s) found in the last ${blocksToScan} blocks. Not enough data for technical analysis.\n\nTry increasing the blocks parameter or wait for more trading activity.`,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
// Build candles and analyze
|
|
94
|
+
const interval = params.interval ?? '1h';
|
|
95
|
+
const analytics = new ClawnchAnalytics();
|
|
96
|
+
const candles = analytics.buildCandles(swaps, wethSide, interval);
|
|
97
|
+
if (candles.length < 5) {
|
|
98
|
+
return {
|
|
99
|
+
callId: '',
|
|
100
|
+
success: true,
|
|
101
|
+
result: `${swaps.length} swaps produced only ${candles.length} candle(s). Need more data for meaningful analysis.`,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
const analysis = analytics.analyze(candles, interval);
|
|
105
|
+
const lines = [
|
|
106
|
+
`Market Analysis for ${tokenAddress}`,
|
|
107
|
+
` ${swaps.length} swaps → ${candles.length} candles (${interval})`,
|
|
108
|
+
``,
|
|
109
|
+
];
|
|
110
|
+
if (analysis) {
|
|
111
|
+
lines.push(analysis.summary);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
// Not enough candles for full analysis, show what we can
|
|
115
|
+
const lastCandle = candles[candles.length - 1];
|
|
116
|
+
const vwap = analytics.vwap(candles);
|
|
117
|
+
const vol = analytics.volatility(candles, interval);
|
|
118
|
+
lines.push(`Price: ${lastCandle.close.toExponential(4)} ETH`);
|
|
119
|
+
lines.push(`Range: ${lastCandle.low.toExponential(3)} — ${lastCandle.high.toExponential(3)}`);
|
|
120
|
+
lines.push(`VWAP: ${vwap.toExponential(4)} ETH`);
|
|
121
|
+
lines.push(`Volatility: ${(vol * 100).toFixed(0)}% annualized`);
|
|
122
|
+
lines.push(`Total volume: ${candles.reduce((s, c) => s + c.volume, 0).toFixed(6)} ETH`);
|
|
123
|
+
lines.push(``, `(Need 50+ candles for SMA/RSI/BB. Currently ${candles.length}.)`);
|
|
124
|
+
}
|
|
125
|
+
return { callId: '', success: true, result: lines.join('\n') };
|
|
126
|
+
}
|
|
127
|
+
catch (err) {
|
|
128
|
+
return { callId: '', success: false, result: null, error: err instanceof Error ? err.message : String(err) };
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
/**
|
|
133
|
+
* Compute Uniswap V4 pool ID from pool key via keccak256.
|
|
134
|
+
* Pool ID = keccak256(abi.encode(currency0, currency1, fee, tickSpacing, hooks))
|
|
135
|
+
*/
|
|
136
|
+
function computePoolId(poolKey) {
|
|
137
|
+
// We need viem's encodePacked / keccak256. Dynamic import to keep the function sync-compatible.
|
|
138
|
+
// Actually, for V4, pool ID is keccak256(abi.encode(...)) not encodePacked.
|
|
139
|
+
// Use viem's encodeAbiParameters + keccak256.
|
|
140
|
+
const { encodeAbiParameters, keccak256 } = require('viem');
|
|
141
|
+
const encoded = encodeAbiParameters([
|
|
142
|
+
{ type: 'address' },
|
|
143
|
+
{ type: 'address' },
|
|
144
|
+
{ type: 'uint24' },
|
|
145
|
+
{ type: 'int24' },
|
|
146
|
+
{ type: 'address' },
|
|
147
|
+
], [
|
|
148
|
+
poolKey.currency0,
|
|
149
|
+
poolKey.currency1,
|
|
150
|
+
poolKey.fee,
|
|
151
|
+
poolKey.tickSpacing,
|
|
152
|
+
poolKey.hooks,
|
|
153
|
+
]);
|
|
154
|
+
return keccak256(encoded);
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=analyze-market.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze-market.js","sourceRoot":"","sources":["../../src/skills/analyze-market.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill: bunker — MoltBunker decentralized deployment management.
|
|
3
|
+
*
|
|
4
|
+
* Multi-action skill (like conway.ts pattern) for managing the agent's
|
|
5
|
+
* bunker deployment lifecycle. Actions cover the full spectrum:
|
|
6
|
+
*
|
|
7
|
+
* Read-only (all tiers):
|
|
8
|
+
* status — Deployment status, container health, runtime info
|
|
9
|
+
* balance — BUNKER token balance (deposited, reserved, available)
|
|
10
|
+
* threat — Current threat assessment
|
|
11
|
+
* logs — Container log output
|
|
12
|
+
* catalog — Browse available tiers and pricing
|
|
13
|
+
*
|
|
14
|
+
* Mutating (normal + low_compute):
|
|
15
|
+
* clone — Clone to a specified region
|
|
16
|
+
* snapshot — Create state snapshot
|
|
17
|
+
* extend — Extend runtime duration
|
|
18
|
+
*
|
|
19
|
+
* Destructive (normal only):
|
|
20
|
+
* deploy_self — Full self-deployment to MoltBunker
|
|
21
|
+
* restore — Restore from snapshot
|
|
22
|
+
* migrate — Migrate to different region
|
|
23
|
+
* stop — Stop bunker deployment
|
|
24
|
+
*
|
|
25
|
+
* The skill validates action permissions internally based on survival tier.
|
|
26
|
+
*/
|
|
27
|
+
import type { SkillDefinition } from '../types.js';
|
|
28
|
+
export declare const bunkerSkill: SkillDefinition;
|
|
29
|
+
//# sourceMappingURL=bunker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bunker.d.ts","sourceRoot":"","sources":["../../src/skills/bunker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAA0C,MAAM,aAAa,CAAC;AA6F3F,eAAO,MAAM,WAAW,EAAE,eAiDzB,CAAC"}
|