@clawnch/clawtomaton 0.3.0 → 0.4.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/README.md +2 -2
- package/dist/agent/index.d.ts +5 -1
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +108 -10
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/prompt.d.ts.map +1 -1
- package/dist/agent/prompt.js +158 -2
- package/dist/agent/prompt.js.map +1 -1
- package/dist/heartbeat/index.d.ts +18 -0
- package/dist/heartbeat/index.d.ts.map +1 -1
- package/dist/heartbeat/index.js +153 -2
- package/dist/heartbeat/index.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/market/index.d.ts +8 -1
- package/dist/market/index.d.ts.map +1 -1
- package/dist/market/index.js +28 -2
- 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/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 +8 -1
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +29 -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 +24 -0
- package/dist/skills/xmtp.d.ts.map +1 -0
- package/dist/skills/xmtp.js +282 -0
- package/dist/skills/xmtp.js.map +1 -0
- package/dist/state/index.d.ts +19 -0
- package/dist/state/index.d.ts.map +1 -1
- package/dist/state/index.js +101 -0
- package/dist/state/index.js.map +1 -1
- package/dist/types.d.ts +16 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/xmtp/client.d.ts +127 -0
- package/dist/xmtp/client.d.ts.map +1 -0
- package/dist/xmtp/client.js +454 -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 +80 -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
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill: portfolio — View multi-token portfolio with P&L and allocation.
|
|
3
|
+
*
|
|
4
|
+
* Shows:
|
|
5
|
+
* - All token positions with current value and unrealized P&L
|
|
6
|
+
* - Realized P&L from past sells
|
|
7
|
+
* - Portfolio allocation percentages
|
|
8
|
+
* - Concentration warnings
|
|
9
|
+
* - Historical performance (if snapshots exist)
|
|
10
|
+
*
|
|
11
|
+
* Actions: view, history, record_trade
|
|
12
|
+
*
|
|
13
|
+
* The portfolio is populated automatically by handleSkillSideEffects
|
|
14
|
+
* when the agent executes swaps. The agent can also manually record
|
|
15
|
+
* trades via the record_trade action for OTC / external transfers.
|
|
16
|
+
*/
|
|
17
|
+
import { ClawnchTrader, ClawnchPrice } from '@clawnch/clawncher-sdk';
|
|
18
|
+
export const portfolioSkill = {
|
|
19
|
+
name: 'portfolio',
|
|
20
|
+
description: [
|
|
21
|
+
'View your multi-token portfolio: positions, P&L, allocation, performance.',
|
|
22
|
+
'Actions: view (full summary), history (value over time), record_trade (manual entry).',
|
|
23
|
+
'Positions auto-update on swaps. No gas cost (read-only, except record_trade).',
|
|
24
|
+
].join(' '),
|
|
25
|
+
parameters: [
|
|
26
|
+
{
|
|
27
|
+
name: 'action',
|
|
28
|
+
type: 'string',
|
|
29
|
+
description: 'One of: view, history, record_trade',
|
|
30
|
+
required: true,
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: 'period',
|
|
34
|
+
type: 'string',
|
|
35
|
+
description: 'For history: time period — "24h", "7d", "30d" (default "7d")',
|
|
36
|
+
required: false,
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'token',
|
|
40
|
+
type: 'address',
|
|
41
|
+
description: 'Token address (for record_trade)',
|
|
42
|
+
required: false,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'symbol',
|
|
46
|
+
type: 'string',
|
|
47
|
+
description: 'Token symbol (for record_trade)',
|
|
48
|
+
required: false,
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'side',
|
|
52
|
+
type: 'string',
|
|
53
|
+
description: 'Trade side: buy or sell (for record_trade)',
|
|
54
|
+
required: false,
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'amount',
|
|
58
|
+
type: 'string',
|
|
59
|
+
description: 'Amount traded in token units (for record_trade)',
|
|
60
|
+
required: false,
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
name: 'priceEth',
|
|
64
|
+
type: 'string',
|
|
65
|
+
description: 'Price per token in ETH (for record_trade)',
|
|
66
|
+
required: false,
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: 'txHash',
|
|
70
|
+
type: 'string',
|
|
71
|
+
description: 'Transaction hash (for record_trade)',
|
|
72
|
+
required: false,
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
execute: async (params, ctx) => {
|
|
76
|
+
try {
|
|
77
|
+
if (!ctx.stateStore) {
|
|
78
|
+
return { callId: '', success: false, result: null, error: 'No state store available.' };
|
|
79
|
+
}
|
|
80
|
+
const action = params.action;
|
|
81
|
+
switch (action) {
|
|
82
|
+
case 'view':
|
|
83
|
+
return handleView(ctx);
|
|
84
|
+
case 'history':
|
|
85
|
+
return handleHistory(ctx, params);
|
|
86
|
+
case 'record_trade':
|
|
87
|
+
return handleRecordTrade(ctx, params);
|
|
88
|
+
default:
|
|
89
|
+
return { callId: '', success: false, result: null, error: `Unknown action: ${action}. Use: view, history, record_trade` };
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
return { callId: '', success: false, result: null, error: err instanceof Error ? err.message : String(err) };
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
async function handleView(ctx) {
|
|
98
|
+
const trader = new ClawnchTrader(ctx.stateStore.asTraderStorage());
|
|
99
|
+
// Build price fetcher using ClawnchPrice
|
|
100
|
+
const { buildClients } = await import('../identity/index.js');
|
|
101
|
+
const rpcUrl = process.env.BASE_RPC_URL ?? 'https://mainnet.base.org';
|
|
102
|
+
const { publicClient } = buildClients(ctx.identity, rpcUrl);
|
|
103
|
+
const price = new ClawnchPrice({ publicClient: publicClient, network: 'mainnet' });
|
|
104
|
+
const priceFetcher = async (token) => {
|
|
105
|
+
try {
|
|
106
|
+
const info = await price.getQuickPrice(token);
|
|
107
|
+
return { priceEth: info.priceInEth, priceUsd: info.priceInUsd };
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
// Get ETH balance
|
|
114
|
+
let ethBalanceEth = 0;
|
|
115
|
+
try {
|
|
116
|
+
const ethBal = await publicClient.getBalance({ address: ctx.identity.address });
|
|
117
|
+
ethBalanceEth = Number(ethBal) / 1e18;
|
|
118
|
+
}
|
|
119
|
+
catch { }
|
|
120
|
+
const summary = await trader.getSummary(priceFetcher, ethBalanceEth);
|
|
121
|
+
if (summary.positions.length === 0) {
|
|
122
|
+
return {
|
|
123
|
+
callId: '',
|
|
124
|
+
success: true,
|
|
125
|
+
result: `No token positions tracked yet.\nETH Balance: ${ethBalanceEth.toFixed(6)} ETH\n\nPositions are automatically recorded when you execute swaps. Use portfolio action=record_trade for manual entries.`,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
callId: '',
|
|
130
|
+
success: true,
|
|
131
|
+
result: ClawnchTrader.formatSummary(summary),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
async function handleHistory(ctx, params) {
|
|
135
|
+
const trader = new ClawnchTrader(ctx.stateStore.asTraderStorage());
|
|
136
|
+
const periodStr = params.period ?? '7d';
|
|
137
|
+
const periodMs = parsePeriod(periodStr);
|
|
138
|
+
const perf = trader.getPerformance(periodMs);
|
|
139
|
+
if (!perf) {
|
|
140
|
+
return { callId: '', success: true, result: 'No portfolio snapshots yet. Snapshots are taken each heartbeat.' };
|
|
141
|
+
}
|
|
142
|
+
const snapshots = trader.getHistory(20);
|
|
143
|
+
const lines = [
|
|
144
|
+
`Portfolio performance (${perf.period}):`,
|
|
145
|
+
` Start: ${perf.startValue.toFixed(6)} ETH`,
|
|
146
|
+
` End: ${perf.endValue.toFixed(6)} ETH`,
|
|
147
|
+
` Change: ${perf.changeEth >= 0 ? '+' : ''}${perf.changeEth.toFixed(6)} ETH (${perf.changePct >= 0 ? '+' : ''}${perf.changePct.toFixed(1)}%)`,
|
|
148
|
+
];
|
|
149
|
+
if (snapshots.length > 0) {
|
|
150
|
+
lines.push(``, `Recent snapshots (${snapshots.length}):`);
|
|
151
|
+
for (const s of snapshots.slice(-10)) {
|
|
152
|
+
lines.push(` ${new Date(s.timestamp).toISOString().slice(0, 16)} | ${s.totalValueEth.toFixed(6)} ETH | ${s.positionCount} positions`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return { callId: '', success: true, result: lines.join('\n') };
|
|
156
|
+
}
|
|
157
|
+
async function handleRecordTrade(ctx, params) {
|
|
158
|
+
const token = params.token;
|
|
159
|
+
const side = params.side;
|
|
160
|
+
const amount = params.amount;
|
|
161
|
+
const priceEth = params.priceEth;
|
|
162
|
+
const txHash = params.txHash ?? 'manual';
|
|
163
|
+
if (!token || !side || !amount || !priceEth) {
|
|
164
|
+
return { callId: '', success: false, result: null, error: 'Missing parameters: token, side, amount, priceEth are required.' };
|
|
165
|
+
}
|
|
166
|
+
const trader = new ClawnchTrader(ctx.stateStore.asTraderStorage());
|
|
167
|
+
const trade = trader.recordTrade({
|
|
168
|
+
token,
|
|
169
|
+
symbol: params.symbol,
|
|
170
|
+
side: side,
|
|
171
|
+
amount,
|
|
172
|
+
priceEth: parseFloat(priceEth),
|
|
173
|
+
txHash,
|
|
174
|
+
});
|
|
175
|
+
return {
|
|
176
|
+
callId: '',
|
|
177
|
+
success: true,
|
|
178
|
+
result: `Trade recorded: ${trade.id}\n ${trade.side} ${trade.amount} @ ${trade.priceEth} ETH = ${trade.valueEth.toFixed(6)} ETH\n TX: ${trade.txHash}`,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
function parsePeriod(period) {
|
|
182
|
+
const match = period.match(/^(\d+)(h|d)$/);
|
|
183
|
+
if (!match)
|
|
184
|
+
return 7 * 24 * 60 * 60 * 1000; // default 7d
|
|
185
|
+
const value = parseInt(match[1]);
|
|
186
|
+
const unit = match[2];
|
|
187
|
+
return unit === 'h' ? value * 60 * 60 * 1000 : value * 24 * 60 * 60 * 1000;
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=portfolio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portfolio.js","sourceRoot":"","sources":["../../src/skills/portfolio.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill: watch_activity — Check recent on-chain activity for a token.
|
|
3
|
+
*
|
|
4
|
+
* Fetches recent ERC-20 transfers and Uniswap V4 swaps for the agent's token.
|
|
5
|
+
* Reports: swap count, transfer count, unique addresses, largest transfer,
|
|
6
|
+
* total volume, and whale alerts (transfers > 1% of supply).
|
|
7
|
+
*
|
|
8
|
+
* No gas cost — pure read operation.
|
|
9
|
+
*/
|
|
10
|
+
import type { SkillDefinition } from '../types.js';
|
|
11
|
+
export declare const watchActivitySkill: SkillDefinition;
|
|
12
|
+
//# sourceMappingURL=watch-activity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch-activity.d.ts","sourceRoot":"","sources":["../../src/skills/watch-activity.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,OAAO,KAAK,EAAE,eAAe,EAA4B,MAAM,aAAa,CAAC;AAQ7E,eAAO,MAAM,kBAAkB,EAAE,eAgIhC,CAAC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill: watch_activity — Check recent on-chain activity for a token.
|
|
3
|
+
*
|
|
4
|
+
* Fetches recent ERC-20 transfers and Uniswap V4 swaps for the agent's token.
|
|
5
|
+
* Reports: swap count, transfer count, unique addresses, largest transfer,
|
|
6
|
+
* total volume, and whale alerts (transfers > 1% of supply).
|
|
7
|
+
*
|
|
8
|
+
* No gas cost — pure read operation.
|
|
9
|
+
*/
|
|
10
|
+
import { ClawnchWatcher, ClawnchReader, } from '@clawnch/clawncher-sdk';
|
|
11
|
+
import { formatEther } from 'viem';
|
|
12
|
+
/** Transfers above this % of supply are flagged as whale moves */
|
|
13
|
+
const WHALE_THRESHOLD_PCT = 1;
|
|
14
|
+
/** Default lookback: 5,000 blocks (~2.8 hours on Base) */
|
|
15
|
+
const DEFAULT_LOOKBACK_BLOCKS = 5000n;
|
|
16
|
+
export const watchActivitySkill = {
|
|
17
|
+
name: 'watch_activity',
|
|
18
|
+
description: [
|
|
19
|
+
'Check recent on-chain activity for a token: swaps, transfers, whale alerts.',
|
|
20
|
+
'Scans the last ~3 hours of blocks. Reports volume, unique traders,',
|
|
21
|
+
'and flags large transfers (>1% of supply). No gas cost (read-only).',
|
|
22
|
+
].join(' '),
|
|
23
|
+
parameters: [
|
|
24
|
+
{
|
|
25
|
+
name: 'token',
|
|
26
|
+
type: 'address',
|
|
27
|
+
description: 'Token address to monitor. Defaults to own token.',
|
|
28
|
+
required: false,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'blocks',
|
|
32
|
+
type: 'number',
|
|
33
|
+
description: 'Number of blocks to look back. Default: 5000 (~3 hours).',
|
|
34
|
+
required: false,
|
|
35
|
+
default: 5000,
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
execute: async (params, ctx) => {
|
|
39
|
+
try {
|
|
40
|
+
const tokenAddress = params.token ?? ctx.identity.tokenAddress;
|
|
41
|
+
if (!tokenAddress) {
|
|
42
|
+
return { callId: '', success: false, result: null, error: 'No token address. Deploy a token first or specify one.' };
|
|
43
|
+
}
|
|
44
|
+
const { buildClients } = await import('../identity/index.js');
|
|
45
|
+
const rpcUrl = process.env.BASE_RPC_URL ?? 'https://mainnet.base.org';
|
|
46
|
+
const { publicClient } = buildClients(ctx.identity, rpcUrl);
|
|
47
|
+
const watcher = new ClawnchWatcher({ publicClient: publicClient, network: 'mainnet' });
|
|
48
|
+
const reader = new ClawnchReader({ publicClient: publicClient, network: 'mainnet' });
|
|
49
|
+
// Get pool ID from token rewards
|
|
50
|
+
const rewards = await reader.getTokenRewards(tokenAddress);
|
|
51
|
+
if (!rewards) {
|
|
52
|
+
return { callId: '', success: false, result: null, error: 'No pool found for this token. Is it a Clawncher token?' };
|
|
53
|
+
}
|
|
54
|
+
// Compute pool ID
|
|
55
|
+
const { keccak256, encodeAbiParameters } = await import('viem');
|
|
56
|
+
const poolId = keccak256(encodeAbiParameters([
|
|
57
|
+
{ type: 'address' },
|
|
58
|
+
{ type: 'address' },
|
|
59
|
+
{ type: 'uint24' },
|
|
60
|
+
{ type: 'int24' },
|
|
61
|
+
{ type: 'address' },
|
|
62
|
+
], [
|
|
63
|
+
rewards.poolKey.currency0,
|
|
64
|
+
rewards.poolKey.currency1,
|
|
65
|
+
rewards.poolKey.fee,
|
|
66
|
+
rewards.poolKey.tickSpacing,
|
|
67
|
+
rewards.poolKey.hooks,
|
|
68
|
+
]));
|
|
69
|
+
// Determine block range
|
|
70
|
+
const lookback = BigInt(params.blocks ?? 5000);
|
|
71
|
+
const currentBlock = await publicClient.getBlockNumber();
|
|
72
|
+
const fromBlock = currentBlock > lookback ? currentBlock - lookback : 0n;
|
|
73
|
+
// Fetch activity
|
|
74
|
+
const activity = await watcher.getTokenActivity(tokenAddress, poolId, {
|
|
75
|
+
fromBlock,
|
|
76
|
+
toBlock: currentBlock,
|
|
77
|
+
transferLimit: 100,
|
|
78
|
+
swapLimit: 100,
|
|
79
|
+
});
|
|
80
|
+
// Get total supply for whale detection
|
|
81
|
+
const tokenInfo = await reader.getTokenInfo(tokenAddress);
|
|
82
|
+
const whaleThreshold = tokenInfo.totalSupply / 100n; // 1%
|
|
83
|
+
// Build report
|
|
84
|
+
const lines = [
|
|
85
|
+
`Activity for ${tokenAddress} (last ${lookback} blocks, ~${Math.round(Number(lookback) * 2 / 3600)}h):`,
|
|
86
|
+
` Swaps: ${activity.stats.swapCount}`,
|
|
87
|
+
` Transfers: ${activity.stats.transferCount}`,
|
|
88
|
+
` Unique addresses: ${activity.stats.uniqueAddresses}`,
|
|
89
|
+
];
|
|
90
|
+
if (activity.stats.totalVolume0 > 0n || activity.stats.totalVolume1 > 0n) {
|
|
91
|
+
lines.push(` Volume (currency0): ${formatEther(activity.stats.totalVolume0)}`);
|
|
92
|
+
lines.push(` Volume (currency1): ${formatEther(activity.stats.totalVolume1)}`);
|
|
93
|
+
}
|
|
94
|
+
if (activity.stats.largestTransfer > 0n) {
|
|
95
|
+
lines.push(` Largest transfer: ${formatEther(activity.stats.largestTransfer)} tokens`);
|
|
96
|
+
}
|
|
97
|
+
// Whale alerts
|
|
98
|
+
const whaleTransfers = activity.transfers.filter(t => t.amount >= whaleThreshold);
|
|
99
|
+
if (whaleTransfers.length > 0) {
|
|
100
|
+
lines.push('');
|
|
101
|
+
lines.push(`WHALE ALERTS (>${WHALE_THRESHOLD_PCT}% of supply):`);
|
|
102
|
+
for (const w of whaleTransfers.slice(0, 10)) {
|
|
103
|
+
const pct = Number((w.amount * 10000n) / tokenInfo.totalSupply) / 100;
|
|
104
|
+
lines.push(` ${shortenAddr(w.from)} → ${shortenAddr(w.to)}: ${formatEther(w.amount)} (${pct.toFixed(2)}%) [block ${w.blockNumber}]`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Recent swaps summary (last 5)
|
|
108
|
+
if (activity.swaps.length > 0) {
|
|
109
|
+
lines.push('');
|
|
110
|
+
lines.push('Recent swaps:');
|
|
111
|
+
for (const s of activity.swaps.slice(0, 5)) {
|
|
112
|
+
const side = s.amount0 < 0n ? 'sell' : 'buy';
|
|
113
|
+
const amt = s.amount0 < 0n ? -s.amount0 : s.amount0;
|
|
114
|
+
lines.push(` ${side} ${formatEther(amt)} [${shortenAddr(s.sender)}, block ${s.blockNumber}]`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (activity.stats.swapCount === 0 && activity.stats.transferCount === 0) {
|
|
118
|
+
lines.push(' No activity in this period.');
|
|
119
|
+
}
|
|
120
|
+
return { callId: '', success: true, result: lines.join('\n') };
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
return { callId: '', success: false, result: null, error: err instanceof Error ? err.message : String(err) };
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
function shortenAddr(addr) {
|
|
128
|
+
return `${addr.slice(0, 6)}...${addr.slice(-4)}`;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=watch-activity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch-activity.js","sourceRoot":"","sources":["../../src/skills/watch-activity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* XMTP skill — encrypted messaging and payments via the XMTP protocol.
|
|
3
|
+
*
|
|
4
|
+
* Messaging actions:
|
|
5
|
+
* - send_message: Send a text message to a conversation by ID
|
|
6
|
+
* - send_dm: Send a DM to an Ethereum address (creates convo if needed)
|
|
7
|
+
* - read_messages: Read recent messages from a conversation
|
|
8
|
+
* - list_convos: List recent conversations with previews
|
|
9
|
+
* - check_inbox: Check for unread messages in the queue
|
|
10
|
+
* - reply: Reply to the most recent message in a conversation
|
|
11
|
+
*
|
|
12
|
+
* Payment actions:
|
|
13
|
+
* - request_eth: Request an ETH payment from user via wallet_sendCalls
|
|
14
|
+
* - request_token: Request an ERC-20 token payment via wallet_sendCalls
|
|
15
|
+
* - share_tx: Share a confirmed transaction hash in a conversation
|
|
16
|
+
* - check_token_balance: Check an ERC-20 token balance for an address
|
|
17
|
+
*
|
|
18
|
+
* The XMTP client is managed by the agent runtime (started at boot,
|
|
19
|
+
* available via `ctx.xmtpClient`). This skill is the agent's interface
|
|
20
|
+
* to send/read messages and handle payments.
|
|
21
|
+
*/
|
|
22
|
+
import type { SkillDefinition } from '../types.js';
|
|
23
|
+
export declare const xmtpSkill: SkillDefinition;
|
|
24
|
+
//# sourceMappingURL=xmtp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xmtp.d.ts","sourceRoot":"","sources":["../../src/skills/xmtp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAA4B,MAAM,aAAa,CAAC;AAO7E,eAAO,MAAM,SAAS,EAAE,eAoRvB,CAAC"}
|