tollkit-wallet 0.1.0 → 0.2.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 CHANGED
@@ -56,7 +56,7 @@ The agent has no tool for this.
56
56
  }
57
57
  ```
58
58
 
59
- Tools: `wallet_status`, `wallet_balances`, `swap_quote`, `swap`, `pay_fetch`, `seller_check`, `receipts`. There is no tool for changing limits, approvals or keys.
59
+ Tools: `wallet_status`, `wallet_balances`, `swap_quote`, `swap`, `pay_fetch`, `seller_check`, `receipts`, `autopilot_propose`, `autopilot_rules`, `autopilot_cancel`, `paper_swap`, `paper_status`. There is no tool for changing limits, approvals or keys.
60
60
 
61
61
  ## Use with Coinbase AgentKit
62
62
 
@@ -101,3 +101,34 @@ const r = await w.pay("https://api.example.com/paid-endpoint");
101
101
  Swap quotes come through api.tollkit.dev. It holds the 0x and Jupiter API keys and adds the fee, and it only ever sees public data and signed transactions.
102
102
 
103
103
  If you lose the password, the funds can't be recovered.
104
+
105
+
106
+ ## Autopilot (limit orders, stop-loss, take-profit, trailing stops, recurring buys)
107
+
108
+ Tell the wallet what to do in plain English, check the summary, and turn it on:
109
+
110
+ ```
111
+ tollkit-wallet rule add "buy $25 of SOL every Monday; sell half my ETH if it rises 10% and sell all ETH if it falls 8%"
112
+ tollkit-wallet rules # what's on, prices now, fills
113
+ tollkit-wallet rule pause <id> # or: rule on <id>, rule cancel <id>
114
+ ```
115
+
116
+ Or use the **Autopilot** tab in the dashboard (`tollkit-wallet ui`). Rule types: limit buy, limit sell, take-profit, stop-loss, trailing stop, and recurring buys (hourly, daily, weekly or a set weekday, with an optional count and maximum price). A take-profit and a stop-loss on the same token are linked: when one fills, the other cancels.
117
+
118
+ - Every fill goes through the same limits, approvals and receipts as any swap, and pays the same 0.5% fee.
119
+ - Rules an agent suggests (`autopilot_propose`) wait for you to turn them on, unless you tick "Let agents turn on autopilot rules without asking me" in Limits (or `budget agent_rules=auto`).
120
+ - The autopilot runs while the wallet runs: keep the dashboard open, or run `tollkit-wallet autopilot` on a computer or small server that stays on. Only one copy runs rules at a time.
121
+ - Limit orders fill only at their price or better (within 1% for fees and spread). Stops always sell. When selling all of a chain's coin, a little is kept for network fees.
122
+
123
+ ## Paper trading
124
+
125
+ Practise with pretend money at real live prices, fees included, under the same limits:
126
+
127
+ ```
128
+ tollkit-wallet paper reset 1000 # $1,000 pretend USDC on each chain
129
+ tollkit-wallet paper swap base 100 USDC ETH
130
+ tollkit-wallet autopilot --paper # run your rules on pretend money
131
+ tollkit-wallet paper # balances, fills, fees
132
+ ```
133
+
134
+ Agents get `paper_swap` and `paper_status`. Nothing is signed or sent.
package/dist/actions.d.ts CHANGED
@@ -62,6 +62,110 @@ export declare const ReceiptArgs: z.ZodObject<{
62
62
  limit?: number | undefined;
63
63
  }>;
64
64
  export declare const NoArgs: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
65
+ export declare const ProposeArgs: z.ZodObject<{
66
+ text: z.ZodOptional<z.ZodString>;
67
+ rules: z.ZodOptional<z.ZodArray<z.ZodObject<{
68
+ kind: z.ZodEnum<["limit_buy", "limit_sell", "stop_loss", "take_profit", "trailing_stop", "dca"]>;
69
+ chain: z.ZodEnum<["base", "ethereum", "solana"]>;
70
+ token: z.ZodString;
71
+ name: z.ZodOptional<z.ZodString>;
72
+ amount_usd: z.ZodOptional<z.ZodNumber>;
73
+ sell_percent: z.ZodOptional<z.ZodNumber>;
74
+ sell_amount: z.ZodOptional<z.ZodString>;
75
+ trigger_price: z.ZodOptional<z.ZodNumber>;
76
+ trail_pct: z.ZodOptional<z.ZodNumber>;
77
+ every: z.ZodOptional<z.ZodEnum<["hour", "day", "week"]>>;
78
+ weekday: z.ZodOptional<z.ZodNumber>;
79
+ times: z.ZodOptional<z.ZodNumber>;
80
+ max_price: z.ZodOptional<z.ZodNumber>;
81
+ group: z.ZodOptional<z.ZodString>;
82
+ expires_at: z.ZodOptional<z.ZodString>;
83
+ }, "strip", z.ZodTypeAny, {
84
+ chain: "base" | "ethereum" | "solana";
85
+ kind: "limit_buy" | "limit_sell" | "stop_loss" | "take_profit" | "trailing_stop" | "dca";
86
+ token: string;
87
+ every?: "hour" | "day" | "week" | undefined;
88
+ name?: string | undefined;
89
+ sell_amount?: string | undefined;
90
+ amount_usd?: number | undefined;
91
+ sell_percent?: number | undefined;
92
+ trigger_price?: number | undefined;
93
+ trail_pct?: number | undefined;
94
+ weekday?: number | undefined;
95
+ times?: number | undefined;
96
+ max_price?: number | undefined;
97
+ group?: string | undefined;
98
+ expires_at?: string | undefined;
99
+ }, {
100
+ chain: "base" | "ethereum" | "solana";
101
+ kind: "limit_buy" | "limit_sell" | "stop_loss" | "take_profit" | "trailing_stop" | "dca";
102
+ token: string;
103
+ every?: "hour" | "day" | "week" | undefined;
104
+ name?: string | undefined;
105
+ sell_amount?: string | undefined;
106
+ amount_usd?: number | undefined;
107
+ sell_percent?: number | undefined;
108
+ trigger_price?: number | undefined;
109
+ trail_pct?: number | undefined;
110
+ weekday?: number | undefined;
111
+ times?: number | undefined;
112
+ max_price?: number | undefined;
113
+ group?: string | undefined;
114
+ expires_at?: string | undefined;
115
+ }>, "many">>;
116
+ }, "strip", z.ZodTypeAny, {
117
+ rules?: {
118
+ chain: "base" | "ethereum" | "solana";
119
+ kind: "limit_buy" | "limit_sell" | "stop_loss" | "take_profit" | "trailing_stop" | "dca";
120
+ token: string;
121
+ every?: "hour" | "day" | "week" | undefined;
122
+ name?: string | undefined;
123
+ sell_amount?: string | undefined;
124
+ amount_usd?: number | undefined;
125
+ sell_percent?: number | undefined;
126
+ trigger_price?: number | undefined;
127
+ trail_pct?: number | undefined;
128
+ weekday?: number | undefined;
129
+ times?: number | undefined;
130
+ max_price?: number | undefined;
131
+ group?: string | undefined;
132
+ expires_at?: string | undefined;
133
+ }[] | undefined;
134
+ text?: string | undefined;
135
+ }, {
136
+ rules?: {
137
+ chain: "base" | "ethereum" | "solana";
138
+ kind: "limit_buy" | "limit_sell" | "stop_loss" | "take_profit" | "trailing_stop" | "dca";
139
+ token: string;
140
+ every?: "hour" | "day" | "week" | undefined;
141
+ name?: string | undefined;
142
+ sell_amount?: string | undefined;
143
+ amount_usd?: number | undefined;
144
+ sell_percent?: number | undefined;
145
+ trigger_price?: number | undefined;
146
+ trail_pct?: number | undefined;
147
+ weekday?: number | undefined;
148
+ times?: number | undefined;
149
+ max_price?: number | undefined;
150
+ group?: string | undefined;
151
+ expires_at?: string | undefined;
152
+ }[] | undefined;
153
+ text?: string | undefined;
154
+ }>;
155
+ export declare const RulesListArgs: z.ZodObject<{
156
+ status: z.ZodOptional<z.ZodEnum<["proposed", "active", "paused", "done", "cancelled", "expired", "error"]>>;
157
+ }, "strip", z.ZodTypeAny, {
158
+ status?: "done" | "error" | "proposed" | "active" | "paused" | "cancelled" | "expired" | undefined;
159
+ }, {
160
+ status?: "done" | "error" | "proposed" | "active" | "paused" | "cancelled" | "expired" | undefined;
161
+ }>;
162
+ export declare const RuleIdArgs: z.ZodObject<{
163
+ id: z.ZodString;
164
+ }, "strip", z.ZodTypeAny, {
165
+ id: string;
166
+ }, {
167
+ id: string;
168
+ }>;
65
169
  export interface WalletAction<S extends z.ZodTypeAny = z.ZodTypeAny> {
66
170
  name: string;
67
171
  description: string;
@@ -138,4 +242,123 @@ export declare const ACTIONS: readonly [WalletAction<z.ZodObject<{}, "strip", z.
138
242
  }, {
139
243
  since?: string | undefined;
140
244
  limit?: number | undefined;
141
- }>>];
245
+ }>>, WalletAction<z.ZodObject<{
246
+ text: z.ZodOptional<z.ZodString>;
247
+ rules: z.ZodOptional<z.ZodArray<z.ZodObject<{
248
+ kind: z.ZodEnum<["limit_buy", "limit_sell", "stop_loss", "take_profit", "trailing_stop", "dca"]>;
249
+ chain: z.ZodEnum<["base", "ethereum", "solana"]>;
250
+ token: z.ZodString;
251
+ name: z.ZodOptional<z.ZodString>;
252
+ amount_usd: z.ZodOptional<z.ZodNumber>;
253
+ sell_percent: z.ZodOptional<z.ZodNumber>;
254
+ sell_amount: z.ZodOptional<z.ZodString>;
255
+ trigger_price: z.ZodOptional<z.ZodNumber>;
256
+ trail_pct: z.ZodOptional<z.ZodNumber>;
257
+ every: z.ZodOptional<z.ZodEnum<["hour", "day", "week"]>>;
258
+ weekday: z.ZodOptional<z.ZodNumber>;
259
+ times: z.ZodOptional<z.ZodNumber>;
260
+ max_price: z.ZodOptional<z.ZodNumber>;
261
+ group: z.ZodOptional<z.ZodString>;
262
+ expires_at: z.ZodOptional<z.ZodString>;
263
+ }, "strip", z.ZodTypeAny, {
264
+ chain: "base" | "ethereum" | "solana";
265
+ kind: "limit_buy" | "limit_sell" | "stop_loss" | "take_profit" | "trailing_stop" | "dca";
266
+ token: string;
267
+ every?: "hour" | "day" | "week" | undefined;
268
+ name?: string | undefined;
269
+ sell_amount?: string | undefined;
270
+ amount_usd?: number | undefined;
271
+ sell_percent?: number | undefined;
272
+ trigger_price?: number | undefined;
273
+ trail_pct?: number | undefined;
274
+ weekday?: number | undefined;
275
+ times?: number | undefined;
276
+ max_price?: number | undefined;
277
+ group?: string | undefined;
278
+ expires_at?: string | undefined;
279
+ }, {
280
+ chain: "base" | "ethereum" | "solana";
281
+ kind: "limit_buy" | "limit_sell" | "stop_loss" | "take_profit" | "trailing_stop" | "dca";
282
+ token: string;
283
+ every?: "hour" | "day" | "week" | undefined;
284
+ name?: string | undefined;
285
+ sell_amount?: string | undefined;
286
+ amount_usd?: number | undefined;
287
+ sell_percent?: number | undefined;
288
+ trigger_price?: number | undefined;
289
+ trail_pct?: number | undefined;
290
+ weekday?: number | undefined;
291
+ times?: number | undefined;
292
+ max_price?: number | undefined;
293
+ group?: string | undefined;
294
+ expires_at?: string | undefined;
295
+ }>, "many">>;
296
+ }, "strip", z.ZodTypeAny, {
297
+ rules?: {
298
+ chain: "base" | "ethereum" | "solana";
299
+ kind: "limit_buy" | "limit_sell" | "stop_loss" | "take_profit" | "trailing_stop" | "dca";
300
+ token: string;
301
+ every?: "hour" | "day" | "week" | undefined;
302
+ name?: string | undefined;
303
+ sell_amount?: string | undefined;
304
+ amount_usd?: number | undefined;
305
+ sell_percent?: number | undefined;
306
+ trigger_price?: number | undefined;
307
+ trail_pct?: number | undefined;
308
+ weekday?: number | undefined;
309
+ times?: number | undefined;
310
+ max_price?: number | undefined;
311
+ group?: string | undefined;
312
+ expires_at?: string | undefined;
313
+ }[] | undefined;
314
+ text?: string | undefined;
315
+ }, {
316
+ rules?: {
317
+ chain: "base" | "ethereum" | "solana";
318
+ kind: "limit_buy" | "limit_sell" | "stop_loss" | "take_profit" | "trailing_stop" | "dca";
319
+ token: string;
320
+ every?: "hour" | "day" | "week" | undefined;
321
+ name?: string | undefined;
322
+ sell_amount?: string | undefined;
323
+ amount_usd?: number | undefined;
324
+ sell_percent?: number | undefined;
325
+ trigger_price?: number | undefined;
326
+ trail_pct?: number | undefined;
327
+ weekday?: number | undefined;
328
+ times?: number | undefined;
329
+ max_price?: number | undefined;
330
+ group?: string | undefined;
331
+ expires_at?: string | undefined;
332
+ }[] | undefined;
333
+ text?: string | undefined;
334
+ }>>, WalletAction<z.ZodObject<{
335
+ status: z.ZodOptional<z.ZodEnum<["proposed", "active", "paused", "done", "cancelled", "expired", "error"]>>;
336
+ }, "strip", z.ZodTypeAny, {
337
+ status?: "done" | "error" | "proposed" | "active" | "paused" | "cancelled" | "expired" | undefined;
338
+ }, {
339
+ status?: "done" | "error" | "proposed" | "active" | "paused" | "cancelled" | "expired" | undefined;
340
+ }>>, WalletAction<z.ZodObject<{
341
+ id: z.ZodString;
342
+ }, "strip", z.ZodTypeAny, {
343
+ id: string;
344
+ }, {
345
+ id: string;
346
+ }>>, WalletAction<z.ZodObject<{
347
+ chain: z.ZodEnum<["base", "ethereum", "solana"]>;
348
+ sell: z.ZodString;
349
+ buy: z.ZodString;
350
+ amount: z.ZodString;
351
+ slippage_bps: z.ZodOptional<z.ZodNumber>;
352
+ }, "strip", z.ZodTypeAny, {
353
+ chain: "base" | "ethereum" | "solana";
354
+ amount: string;
355
+ sell: string;
356
+ buy: string;
357
+ slippage_bps?: number | undefined;
358
+ }, {
359
+ chain: "base" | "ethereum" | "solana";
360
+ amount: string;
361
+ sell: string;
362
+ buy: string;
363
+ slippage_bps?: number | undefined;
364
+ }>>, WalletAction<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>>];
package/dist/actions.js CHANGED
@@ -7,6 +7,9 @@
7
7
  import { z } from "zod";
8
8
  import { resolveToken, toAtomic } from "./tokens.js";
9
9
  import { checkSeller } from "./seller.js";
10
+ import { RuleInput, describeRule, ruleProblem } from "./rules.js";
11
+ import { parseStrategy } from "./parse.js";
12
+ import { PriceFeed } from "./prices.js";
10
13
  const MAX_BODY = 50_000;
11
14
  export const SwapArgs = z.object({
12
15
  chain: z.enum(["base", "ethereum", "solana"]).describe("Chain to trade on"),
@@ -27,6 +30,12 @@ export const ReceiptArgs = z.object({
27
30
  limit: z.number().int().min(1).max(500).optional(),
28
31
  });
29
32
  export const NoArgs = z.object({});
33
+ export const ProposeArgs = z.object({
34
+ text: z.string().max(2000).optional().describe("Plain-English strategy"),
35
+ rules: z.array(RuleInput).max(10).optional().describe("Exact rules instead of text"),
36
+ });
37
+ export const RulesListArgs = z.object({ status: z.enum(["proposed", "active", "paused", "done", "cancelled", "expired", "error"]).optional() });
38
+ export const RuleIdArgs = z.object({ id: z.string().min(4).max(40) });
30
39
  async function swapRequest(w, a) {
31
40
  const chain = a.chain;
32
41
  const [sell, buy] = await Promise.all([resolveToken(chain, a.sell), resolveToken(chain, a.buy)]);
@@ -76,5 +85,59 @@ export const ACTIONS = [
76
85
  def({ name: "receipts", spends: false, schema: ReceiptArgs,
77
86
  description: "Recent trades, payments and withdrawals with amounts, fees and transaction hashes.",
78
87
  run: async (w, a) => w.receipts(a.since).slice(-(a.limit ?? 50)) }),
88
+ def({ name: "autopilot_propose", spends: false, schema: ProposeArgs,
89
+ description: "Set up autopilot rules: limit buy/sell, stop-loss, take-profit, trailing stop, recurring buy (DCA). Give plain English in `text` (e.g. \"buy $25 of SOL every Monday; sell half my ETH if it rises 10% and all if it falls 8%\") or exact `rules`. Unless the owner allows auto, rules wait for the owner to turn them on in the dashboard; fills follow the owner's limits.",
90
+ run: async (w, a) => proposeRules(w, a) }),
91
+ def({ name: "autopilot_rules", spends: false, schema: RulesListArgs,
92
+ description: "The autopilot's rules with a plain description of each, status, last price seen, fills and any error.",
93
+ run: async (w, a) => w.rules().list().filter((r) => !a.status || r.status === a.status).map(showRule) }),
94
+ def({ name: "autopilot_cancel", spends: false, schema: RuleIdArgs,
95
+ description: "Cancel an autopilot rule so it never trades.",
96
+ run: async (w, a) => { try {
97
+ return showRule(await w.rules().setStatus(a.id, "cancelled"));
98
+ }
99
+ catch (e) {
100
+ return bad(e);
101
+ } } }),
102
+ def({ name: "paper_swap", spends: false, schema: SwapArgs,
103
+ description: "Practice a swap with pretend money at the real live quote (fees included). Same limits as real trades; nothing is signed or sent.",
104
+ run: async (w, a) => { try {
105
+ const { req, sell, buy } = await swapRequest(w, a);
106
+ return { ...(await w.paper().swap(req)), sell, buy, paper: true };
107
+ }
108
+ catch (e) {
109
+ return bad(e);
110
+ } } }),
111
+ def({ name: "paper_status", spends: false, schema: NoArgs,
112
+ description: "Paper-trading balances, number of practice fills and fees they would have cost.",
113
+ run: async (w) => w.paper().summary() }),
79
114
  ];
115
+ function showRule(r) {
116
+ const last = r.state.fills.at(-1);
117
+ return { id: r.id, status: r.status, description: describeRule(r), created_by: r.created_by, last_price: r.state.last_price, fills: r.state.fills.filter((f) => f.ok).length, last_fill: last, error: r.state.last_error, rule: { ...r, state: undefined } };
118
+ }
119
+ async function proposeRules(w, a) {
120
+ let drafts = [...(a.rules ?? [])], unparsed = [];
121
+ if (a.text) {
122
+ const feed = new PriceFeed();
123
+ await feed.refresh();
124
+ const pr = parseStrategy(a.text, (t) => feed.snapshot().prices[t.toUpperCase()]?.usd);
125
+ drafts = drafts.concat(pr.rules);
126
+ unparsed = pr.unparsed;
127
+ }
128
+ if (!drafts.length)
129
+ return { ok: false, refused: { code: "nothing_understood", reason: "No rules were understood. Try e.g. \"buy $25 of SOL every Monday\" or pass `rules`." }, unparsed };
130
+ for (const d of drafts) {
131
+ const why = ruleProblem(d);
132
+ if (why)
133
+ return { ok: false, refused: { code: "bad_rule", reason: `${describeRule(d)}: ${why}` }, unparsed };
134
+ }
135
+ const store = w.rules(), auto = w.policy.agent_rules === "auto", made = [];
136
+ for (const d of drafts)
137
+ made.push(showRule(await store.add(d, "agent", auto)));
138
+ return {
139
+ ok: true, rules: made, unparsed,
140
+ note: auto ? "These rules are on. The autopilot runs while the wallet's dashboard or `tollkit-wallet autopilot` is running." : "These rules are waiting for the owner to turn them on in the dashboard (Autopilot tab) or with `tollkit-wallet rule on <id>`.",
141
+ };
142
+ }
80
143
  //# sourceMappingURL=actions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { type Chain } from "./chains.js";
2
+ import { RuleStore, type Rule } from "./rules.js";
3
+ import { resolveToken, type Token } from "./tokens.js";
4
+ import type { Price } from "./prices.js";
5
+ import type { SwapRequest } from "./swap.js";
6
+ import type { SwapResult } from "./wallet.js";
7
+ export interface Executor {
8
+ mode: "live" | "paper";
9
+ swap(req: SwapRequest): Promise<SwapResult>;
10
+ quote(req: SwapRequest): Promise<SwapResult>;
11
+ balance(chain: Chain, token: Token): Promise<bigint>;
12
+ slippageBps: number;
13
+ }
14
+ export interface PriceSource {
15
+ snapshot(): {
16
+ prices: Record<string, Price>;
17
+ };
18
+ }
19
+ export interface AutopilotOptions {
20
+ dir?: string;
21
+ intervalMs?: number;
22
+ now?: () => number;
23
+ leaseId?: string;
24
+ resolve?: typeof resolveToken;
25
+ onEvent?: (e: AutopilotEvent) => void;
26
+ }
27
+ export interface AutopilotEvent {
28
+ type: "filled" | "failed" | "skipped" | "expired" | "cancelled";
29
+ rule: Rule;
30
+ detail: string;
31
+ }
32
+ export declare class Autopilot {
33
+ readonly store: RuleStore;
34
+ private readonly exec;
35
+ private readonly prices;
36
+ private readonly o;
37
+ private timer;
38
+ private running;
39
+ private readonly leaseFile;
40
+ private readonly leaseId;
41
+ private quotePrices;
42
+ private tokens;
43
+ lastTick: string | null;
44
+ holdsLease: boolean;
45
+ constructor(store: RuleStore, exec: Executor, prices: PriceSource, o?: AutopilotOptions);
46
+ private now;
47
+ private interval;
48
+ start(): void;
49
+ stop(): void;
50
+ /** Only one process runs rules. A lease older than 3 intervals is free to take. */
51
+ private takeLease;
52
+ private releaseLease;
53
+ /** Who is running the autopilot, if anyone. */
54
+ static status(dir?: string, now?: number, intervalMs?: number): {
55
+ running: boolean;
56
+ mode?: string;
57
+ pid?: number;
58
+ };
59
+ private token;
60
+ /** USD price of one token: Coinbase feed for ETH/SOL, otherwise a live quote for 1 token -> USDC (cached a minute). */
61
+ price(chain: Chain, t: Token): Promise<number | undefined>;
62
+ tick(): Promise<void>;
63
+ private consider;
64
+ private fire;
65
+ /** Back off after a failure. Stops retry fast; anything else slows down and stops after 5 tries. */
66
+ private fail;
67
+ private finish;
68
+ private record;
69
+ }
70
+ /** Token balances for live sells (native coin or token), straight from public RPCs. */
71
+ export declare function liveBalance(addresses: {
72
+ evm: string;
73
+ solana: string;
74
+ }, chain: Chain, t: Token, rpc?: string, f?: typeof fetch): Promise<bigint>;