botanary 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 +186 -9
- package/dist/bin/botanary.js +13 -3
- package/dist/bin/botanary.js.map +1 -1
- package/dist/package.json +2 -2
- package/dist/src/app-url.js +32 -0
- package/dist/src/app-url.js.map +1 -0
- package/dist/src/cli.js +113 -23
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/agent.js +190 -49
- package/dist/src/commands/agent.js.map +1 -1
- package/dist/src/commands/mcp.js +136 -5
- package/dist/src/commands/mcp.js.map +1 -1
- package/dist/src/commands/system.js +109 -12
- package/dist/src/commands/system.js.map +1 -1
- package/dist/src/commands/utilities.js +44 -0
- package/dist/src/commands/utilities.js.map +1 -0
- package/dist/src/commands/wallet.js +332 -94
- package/dist/src/commands/wallet.js.map +1 -1
- package/dist/src/completion.js +69 -0
- package/dist/src/completion.js.map +1 -0
- package/dist/src/config-store.js +52 -0
- package/dist/src/config-store.js.map +1 -0
- package/dist/src/context.js +14 -4
- package/dist/src/context.js.map +1 -1
- package/dist/src/errors.js +116 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/help/examples.js +357 -0
- package/dist/src/help/examples.js.map +1 -0
- package/dist/src/help/format.js +144 -0
- package/dist/src/help/format.js.map +1 -0
- package/dist/src/help/groups.js +39 -0
- package/dist/src/help/groups.js.map +1 -0
- package/dist/src/mcp-snippets.js +6 -0
- package/dist/src/mcp-snippets.js.map +1 -1
- package/dist/src/outcome.js +63 -0
- package/dist/src/outcome.js.map +1 -0
- package/dist/src/parser.js +18 -39
- package/dist/src/parser.js.map +1 -1
- package/dist/src/progress.js +37 -0
- package/dist/src/progress.js.map +1 -0
- package/dist/src/prompt-doc.js +92 -0
- package/dist/src/prompt-doc.js.map +1 -0
- package/dist/src/render/accounts.js +21 -0
- package/dist/src/render/accounts.js.map +1 -0
- package/dist/src/render/activity.js +34 -0
- package/dist/src/render/activity.js.map +1 -0
- package/dist/src/render/agents.js +42 -0
- package/dist/src/render/agents.js.map +1 -0
- package/dist/src/render/balance.js +68 -0
- package/dist/src/render/balance.js.map +1 -0
- package/dist/src/render/chains.js +52 -0
- package/dist/src/render/chains.js.map +1 -0
- package/dist/src/render/gas.js +34 -0
- package/dist/src/render/gas.js.map +1 -0
- package/dist/src/render/grant.js +34 -0
- package/dist/src/render/grant.js.map +1 -0
- package/dist/src/render/kv.js +60 -0
- package/dist/src/render/kv.js.map +1 -0
- package/dist/src/render/mandates.js +111 -0
- package/dist/src/render/mandates.js.map +1 -0
- package/dist/src/render/print.js +18 -0
- package/dist/src/render/print.js.map +1 -0
- package/dist/src/repl.js +114 -10
- package/dist/src/repl.js.map +1 -1
- package/dist/src/review.js +52 -0
- package/dist/src/review.js.map +1 -0
- package/dist/src/settings.js +88 -0
- package/dist/src/settings.js.map +1 -0
- package/dist/src/update-check.js +85 -0
- package/dist/src/update-check.js.map +1 -0
- package/dist/src/validate.js +92 -0
- package/dist/src/validate.js.map +1 -0
- package/package.json +2 -2
|
@@ -1,16 +1,24 @@
|
|
|
1
1
|
import * as clack from '@clack/prompts';
|
|
2
|
-
import { fetchComposite, walletApiGet, runLogin, openBrowser, portfolioFreshness, walletSend, resolveMandateForSend, signUnderMandateReal, createSignRequestReal, getSignRequestReal, preflightReal, scopedToAccount, } from 'botanary-mcp';
|
|
2
|
+
import { fetchComposite, walletApiGet, runLogin, openBrowser, portfolioFreshness, walletSend, resolveMandateForSend, signUnderMandateReal, createSignRequestReal, getSignRequestReal, preflightReal, scopedToAccount, GET_ROUTES, } from 'botanary-mcp';
|
|
3
3
|
import { colors, glyphs } from '../render/colors.js';
|
|
4
4
|
import { renderTable } from '../render/table.js';
|
|
5
5
|
import { redactForDisplay } from '../render/redact.js';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
6
|
+
import { group } from '../help/groups.js';
|
|
7
|
+
import { printResult } from '../render/print.js';
|
|
8
|
+
import { renderBalance } from '../render/balance.js';
|
|
9
|
+
import { renderActivity } from '../render/activity.js';
|
|
10
|
+
import { renderMandates } from '../render/mandates.js';
|
|
11
|
+
import { renderAgents } from '../render/agents.js';
|
|
12
|
+
import { renderChains } from '../render/chains.js';
|
|
13
|
+
import { renderGas } from '../render/gas.js';
|
|
14
|
+
import { renderAccounts } from '../render/accounts.js';
|
|
15
|
+
import { section } from '../render/kv.js';
|
|
16
|
+
import { step, notify } from '../progress.js';
|
|
17
|
+
import { confirmOrThrow, dryRunPayload, renderReview } from '../review.js';
|
|
18
|
+
import { classifyWalletSend } from '../outcome.js';
|
|
19
|
+
import { assertAddress, assertTierAllows, familyOf, findChain, parseAmount, tokenChoicesFor } from '../validate.js';
|
|
20
|
+
import { CliError, EXIT, invalidArgs, notLoggedIn } from '../errors.js';
|
|
21
|
+
import { appUrl } from '../app-url.js';
|
|
14
22
|
/** A WalletSession carries `sessionToken` - redact it in any printed output unless --reveal, the same
|
|
15
23
|
* redact-by-default rule the design spec commits to everywhere. Anything that prints a session (status,
|
|
16
24
|
* accounts use) must route through this rather than printResult directly. */
|
|
@@ -22,14 +30,14 @@ function printSessionResult(ctx, data) {
|
|
|
22
30
|
async function requireWalletToken(ctx) {
|
|
23
31
|
const session = await ctx.runtime.walletSession();
|
|
24
32
|
if (!session) {
|
|
25
|
-
throw
|
|
33
|
+
throw notLoggedIn();
|
|
26
34
|
}
|
|
27
35
|
return session.sessionToken;
|
|
28
36
|
}
|
|
29
37
|
export function registerWalletCommands(program) {
|
|
30
|
-
program
|
|
38
|
+
group(program
|
|
31
39
|
.command('login')
|
|
32
|
-
.description('
|
|
40
|
+
.description('Log in as the account owner, in your browser')
|
|
33
41
|
.action(async () => {
|
|
34
42
|
const ctx = program.opts().__ctx;
|
|
35
43
|
const result = await runLogin({
|
|
@@ -38,23 +46,41 @@ export function registerWalletCommands(program) {
|
|
|
38
46
|
openBrowser,
|
|
39
47
|
now: () => Date.now(),
|
|
40
48
|
sleep: (ms) => new Promise((r) => setTimeout(r, ms)),
|
|
49
|
+
// The whole point of the 0.6.0 callback: say the code and the URL NOW, not when the flow ends
|
|
50
|
+
// up to ten minutes later. Without this, an owner whose browser did not open sat in front of a
|
|
51
|
+
// blank terminal holding the one thing they needed hostage until it expired.
|
|
52
|
+
onPrompt: ({ userCode, url, browserOpened }) => {
|
|
53
|
+
notify(ctx, glyphs.info(`Your code: ${colors.bold(userCode)}`));
|
|
54
|
+
notify(ctx, browserOpened
|
|
55
|
+
? colors.dim(` Opened your browser to approve: ${url}`)
|
|
56
|
+
: colors.warning(` Could not open a browser - open this URL to approve: ${url}`));
|
|
57
|
+
},
|
|
41
58
|
});
|
|
42
59
|
if (result.status === 'authorized') {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
60
|
+
if (ctx.json) {
|
|
61
|
+
console.log(JSON.stringify({ status: 'authorized', session: result.session ?? null }));
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
console.log(glyphs.success(`Logged in${result.session ? ` (account ${result.session.accountId ?? 'default'})` : ''}`));
|
|
65
|
+
}
|
|
66
|
+
return;
|
|
47
67
|
}
|
|
48
|
-
|
|
49
|
-
|
|
68
|
+
throw new CliError(`Login ${result.status}.`, `login_${result.status}`, EXIT.notAuthenticated, result.status === 'expired' ? 'Run `botanary login` again.' : 'Approve the request in your browser next time.');
|
|
69
|
+
}), 'Wallet');
|
|
70
|
+
group(program
|
|
50
71
|
.command('logout')
|
|
51
|
-
.description('
|
|
72
|
+
.description('Revoke and clear the stored owner session')
|
|
52
73
|
.action(async () => {
|
|
53
74
|
const ctx = program.opts().__ctx;
|
|
54
|
-
await ctx.runtime.walletLogout();
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
75
|
+
await step(ctx, 'Logging out', () => ctx.runtime.walletLogout());
|
|
76
|
+
if (ctx.json) {
|
|
77
|
+
console.log(JSON.stringify({ status: 'logged_out' }));
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
console.log(glyphs.success('Logged out.'));
|
|
81
|
+
}
|
|
82
|
+
}), 'Wallet');
|
|
83
|
+
group(program
|
|
58
84
|
.command('status')
|
|
59
85
|
.description('Owner session and this machine\'s agent binding, side by side')
|
|
60
86
|
.action(async () => {
|
|
@@ -68,54 +94,182 @@ export function registerWalletCommands(program) {
|
|
|
68
94
|
if (ctx.json)
|
|
69
95
|
return printSessionResult(ctx, { session, hasAgent });
|
|
70
96
|
console.log(renderTable(rows));
|
|
71
|
-
});
|
|
72
|
-
program
|
|
97
|
+
}), 'Wallet');
|
|
98
|
+
group(program
|
|
99
|
+
.command('whoami')
|
|
100
|
+
.description('Who Botanary says you are, in both lanes')
|
|
101
|
+
.action(async () => {
|
|
102
|
+
const ctx = program.opts().__ctx;
|
|
103
|
+
const session = await ctx.runtime.walletSession();
|
|
104
|
+
const hasAgent = await ctx.runtime.store.hasIdentity();
|
|
105
|
+
// An unclaimed agent identity makes GET /agents/me fail, and that is an ANSWER, not an error: it
|
|
106
|
+
// is exactly what "this machine is not a connected agent" looks like. Never let it fail whoami.
|
|
107
|
+
let agent = null;
|
|
108
|
+
let agentError = null;
|
|
109
|
+
if (hasAgent) {
|
|
110
|
+
try {
|
|
111
|
+
agent = await step(ctx, 'Asking Botanary about this agent', () => ctx.runtime.me());
|
|
112
|
+
}
|
|
113
|
+
catch (e) {
|
|
114
|
+
agentError = e instanceof Error ? e.message : String(e);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const payload = { session, hasAgent, agent, agentError };
|
|
118
|
+
if (ctx.json)
|
|
119
|
+
return printSessionResult(ctx, payload);
|
|
120
|
+
const rows = [
|
|
121
|
+
['owner', session ? colors.success(`logged in (account ${session.accountId ?? 'default'})`) : colors.muted('not logged in')],
|
|
122
|
+
['agent key', hasAgent ? colors.success('present on this machine') : colors.muted('none on this machine')],
|
|
123
|
+
[
|
|
124
|
+
'agent status',
|
|
125
|
+
agent
|
|
126
|
+
? colors.success(`connected as "${agent.name ?? 'unnamed'}" on account ${agent.accountId ?? '-'}`)
|
|
127
|
+
: colors.muted(agentError ? `not a connected agent (${agentError})` : 'not paired'),
|
|
128
|
+
],
|
|
129
|
+
];
|
|
130
|
+
console.log(renderTable(rows));
|
|
131
|
+
}), 'Wallet');
|
|
132
|
+
group(program
|
|
133
|
+
.command('chains')
|
|
134
|
+
.description('Every chain this backend serves, and what each can do')
|
|
135
|
+
.action(async () => {
|
|
136
|
+
const ctx = program.opts().__ctx;
|
|
137
|
+
const token = await requireWalletToken(ctx);
|
|
138
|
+
const chains = await step(ctx, 'Reading chains', () => ctx.runtime.api.get('/v1/chains', token));
|
|
139
|
+
printResult(ctx, chains, renderChains);
|
|
140
|
+
}), 'Wallet');
|
|
141
|
+
group(program
|
|
142
|
+
.command('gas')
|
|
143
|
+
.description('Gas methods available for this account on a chain')
|
|
144
|
+
.option('--chain-id <chainId>', 'Chain to check - see `botanary chains`')
|
|
145
|
+
.action(async (opts) => {
|
|
146
|
+
const ctx = program.opts().__ctx;
|
|
147
|
+
const token = await requireWalletToken(ctx);
|
|
148
|
+
const chains = await step(ctx, 'Reading chains', () => ctx.runtime.api.get('/v1/chains', token));
|
|
149
|
+
const chain = findChain(chains, opts.chainId ?? ctx.chain);
|
|
150
|
+
// EVM chains are chainId-keyed and non-EVM chains are key-keyed, and GET /gas/methods takes
|
|
151
|
+
// whichever applies - never both, and never a chainId invented for a chain that has none.
|
|
152
|
+
const query = chain.chainId === null ? `key=${encodeURIComponent(chain.key)}` : `chainId=${chain.chainId}`;
|
|
153
|
+
const methods = await step(ctx, 'Reading gas methods', () => ctx.runtime.api.get(`/v1/gas/methods?${query}`, token));
|
|
154
|
+
printResult(ctx, methods, (data) => renderGas(data, `${chain.name} (${chain.key})`));
|
|
155
|
+
}), 'Wallet');
|
|
156
|
+
group(program
|
|
73
157
|
.command('balance')
|
|
74
|
-
.description('
|
|
158
|
+
.description('What this account holds, across every chain')
|
|
75
159
|
.action(async () => {
|
|
76
160
|
const ctx = program.opts().__ctx;
|
|
77
161
|
const token = await requireWalletToken(ctx);
|
|
78
|
-
const result = await fetchComposite(ctx.runtime.api, token, [
|
|
162
|
+
const result = await step(ctx, 'Reading balances', () => fetchComposite(ctx.runtime.api, token, [
|
|
79
163
|
{ key: 'balance', path: '/v1/balance' },
|
|
80
164
|
{ key: 'chains', path: '/v1/chains' },
|
|
81
|
-
]);
|
|
165
|
+
]));
|
|
82
166
|
const freshness = portfolioFreshness(result.data.balance);
|
|
83
|
-
printResult(ctx, { ...result.data, freshness });
|
|
84
|
-
});
|
|
85
|
-
program
|
|
167
|
+
printResult(ctx, { ...result.data, freshness }, (data) => renderBalance(data, { verbose: ctx.verbose }));
|
|
168
|
+
}), 'Wallet');
|
|
169
|
+
group(program
|
|
86
170
|
.command('send')
|
|
87
|
-
.description('Send tokens from
|
|
88
|
-
.option('--recipient <address>')
|
|
89
|
-
.option('--amount <amount>')
|
|
90
|
-
.option('--token <symbol>')
|
|
91
|
-
.option('--chain-id <chainId>')
|
|
171
|
+
.description('Send tokens from an account you own')
|
|
172
|
+
.option('--recipient <address>', 'Destination address (0x... on EVM)')
|
|
173
|
+
.option('--amount <amount>', 'Amount in display units, e.g. 25')
|
|
174
|
+
.option('--token <symbol>', 'Token symbol, e.g. USDC')
|
|
175
|
+
.option('--chain-id <chainId>', 'Chain to send on - see `botanary chains`')
|
|
92
176
|
.action(async (opts) => {
|
|
93
177
|
const ctx = program.opts().__ctx;
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
(
|
|
178
|
+
const walletToken = await requireWalletToken(ctx);
|
|
179
|
+
// Validate required inputs before making network calls. If chain-id is not specified and we're
|
|
180
|
+
// not in interactive mode, fail immediately with missing input - do not fetch chains first.
|
|
181
|
+
let amountRaw = opts.amount;
|
|
182
|
+
let tokenSymbol = opts.token;
|
|
183
|
+
let recipient = opts.recipient;
|
|
184
|
+
const chainId = opts.chainId ?? ctx.chain;
|
|
185
|
+
if (!ctx.interactive && (!chainId || !amountRaw || !tokenSymbol || !recipient)) {
|
|
186
|
+
throw invalidArgs('Missing required input', 'Use --amount, --token, --recipient, and --chain-id, or run in an interactive terminal.');
|
|
103
187
|
}
|
|
104
|
-
|
|
105
|
-
|
|
188
|
+
const chains = await step(ctx, 'Reading chains', () => ctx.runtime.api.get('/v1/chains', walletToken));
|
|
189
|
+
const chain = findChain(chains, chainId);
|
|
190
|
+
assertTierAllows(chain, 'send');
|
|
191
|
+
const family = familyOf(chain.namespace);
|
|
192
|
+
if (ctx.interactive && (!amountRaw || !tokenSymbol || !recipient)) {
|
|
193
|
+
const balance = await step(ctx, 'Reading balances', () => ctx.runtime.api.get('/v1/balance', walletToken));
|
|
194
|
+
const choices = tokenChoicesFor(balance, chain.chainRef);
|
|
195
|
+
const answers = await clack.group({
|
|
196
|
+
amount: () => clack.text({
|
|
197
|
+
message: 'Amount?',
|
|
198
|
+
placeholder: '25',
|
|
199
|
+
initialValue: amountRaw,
|
|
200
|
+
// Validate at the prompt too, so a typo is caught where it was made rather than three
|
|
201
|
+
// steps later inside a build call.
|
|
202
|
+
validate: (value) => {
|
|
203
|
+
const parsed = Number(String(value).trim());
|
|
204
|
+
return Number.isFinite(parsed) && parsed > 0 ? undefined : 'A positive number, e.g. 25';
|
|
205
|
+
},
|
|
206
|
+
}),
|
|
207
|
+
token: () => choices.length
|
|
208
|
+
? clack.select({
|
|
209
|
+
message: `Token? (held on ${chain.name})`,
|
|
210
|
+
options: choices.map((choice) => ({ value: choice.symbol, label: `${choice.symbol} (${choice.amount})` })),
|
|
211
|
+
})
|
|
212
|
+
: clack.text({ message: 'Token?', placeholder: 'USDC', initialValue: tokenSymbol }),
|
|
213
|
+
recipient: () => clack.text({
|
|
214
|
+
message: 'To?',
|
|
215
|
+
placeholder: family === 'evm' ? '0xAb12...9F3' : 'address',
|
|
216
|
+
initialValue: recipient,
|
|
217
|
+
}),
|
|
218
|
+
}, {
|
|
219
|
+
onCancel: () => {
|
|
220
|
+
clack.cancel('Cancelled.');
|
|
221
|
+
process.exit(0);
|
|
222
|
+
},
|
|
223
|
+
});
|
|
224
|
+
amountRaw = answers.amount;
|
|
225
|
+
tokenSymbol = answers.token;
|
|
226
|
+
recipient = answers.recipient;
|
|
106
227
|
}
|
|
107
|
-
const
|
|
228
|
+
const amount = parseAmount(amountRaw);
|
|
229
|
+
if (!tokenSymbol)
|
|
230
|
+
throw invalidArgs('--token is required.', 'A token symbol, e.g. USDC. See `botanary balance`.');
|
|
231
|
+
const to = assertAddress(recipient, family);
|
|
108
232
|
const input = {
|
|
109
|
-
recipient,
|
|
110
|
-
amount
|
|
233
|
+
recipient: to,
|
|
234
|
+
amount,
|
|
111
235
|
tokenSymbol,
|
|
112
|
-
chainId:
|
|
113
|
-
chainKey:
|
|
236
|
+
chainId: chain.chainId ?? Number.NaN,
|
|
237
|
+
chainKey: chain.key,
|
|
114
238
|
};
|
|
115
|
-
const walletToken = await requireWalletToken(ctx);
|
|
116
239
|
const session = await ctx.runtime.walletSession();
|
|
117
|
-
const mandate = await resolveMandateForSend(ctx.runtime, input);
|
|
118
|
-
const
|
|
240
|
+
const mandate = await step(ctx, 'Checking mandates', () => resolveMandateForSend(ctx.runtime, input));
|
|
241
|
+
const lane = mandate.accountId !== null && mandate.accountId === (session?.accountId ?? '') && mandate.inBounds
|
|
242
|
+
? 'mandate'
|
|
243
|
+
: 'browser';
|
|
244
|
+
const rows = [
|
|
245
|
+
{ label: 'amount', value: `${amount} ${tokenSymbol}` },
|
|
246
|
+
{ label: 'to', value: to },
|
|
247
|
+
{ label: 'chain', value: `${chain.name} (${chain.key}, ${chain.tier})` },
|
|
248
|
+
{
|
|
249
|
+
label: 'signed by',
|
|
250
|
+
value: lane === 'mandate'
|
|
251
|
+
? "this machine's mandate, locally, with no browser"
|
|
252
|
+
: 'you, in your browser',
|
|
253
|
+
},
|
|
254
|
+
];
|
|
255
|
+
const warnings = [];
|
|
256
|
+
// The backend's own reason, not re-authored here: it is the only sentence that can honestly say
|
|
257
|
+
// WHY the mandate lane was not taken.
|
|
258
|
+
if (lane === 'browser' && mandate.accountId !== null && mandate.accountId !== (session?.accountId ?? '')) {
|
|
259
|
+
warnings.push(`Mandate is bound to account ${mandate.accountId}, but you are logged into account ${session?.accountId ?? 'default'}.`);
|
|
260
|
+
}
|
|
261
|
+
else if (lane === 'browser' && mandate.accountId !== null && mandate.reason) {
|
|
262
|
+
warnings.push(mandate.reason);
|
|
263
|
+
}
|
|
264
|
+
if (chain.testnet)
|
|
265
|
+
warnings.push('This is a testnet chain.');
|
|
266
|
+
if (ctx.dryRun) {
|
|
267
|
+
const payload = dryRunPayload('Review this payment', rows, warnings);
|
|
268
|
+
printResult(ctx, payload, () => `${renderReview('Dry run - nothing will be sent', rows, warnings)}`);
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
await confirmOrThrow(ctx, 'Review this payment', rows, warnings);
|
|
272
|
+
const result = await step(ctx, lane === 'mandate' ? 'Signing under your mandate' : 'Waiting for your approval', () => walletSend({
|
|
119
273
|
mandateAccountId: mandate.accountId,
|
|
120
274
|
mandateInBounds: mandate.inBounds,
|
|
121
275
|
mandateBoundsReason: mandate.reason,
|
|
@@ -127,97 +281,181 @@ export function registerWalletCommands(program) {
|
|
|
127
281
|
now: () => Date.now(),
|
|
128
282
|
sleep: (ms) => new Promise((r) => setTimeout(r, ms)),
|
|
129
283
|
preflight: preflightReal(ctx.runtime, walletToken),
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
284
|
+
// Same reason as login's onPrompt: the approval URL is useless once the wait is over.
|
|
285
|
+
onHandoff: ({ url, browserOpened }) => {
|
|
286
|
+
notify(ctx, browserOpened
|
|
287
|
+
? glyphs.info(`Opened your browser to approve: ${url}`)
|
|
288
|
+
: glyphs.warning(`Could not open a browser - approve here: ${url}`));
|
|
289
|
+
},
|
|
290
|
+
}, input));
|
|
291
|
+
const outcome = classifyWalletSend(result);
|
|
292
|
+
ctx.outcome.exit = outcome.exit;
|
|
293
|
+
printResult(ctx, result, () => {
|
|
294
|
+
const lines = [typeof result.text === 'string' ? result.text : JSON.stringify(result)];
|
|
295
|
+
if (outcome.note)
|
|
296
|
+
lines.push(colors.dim(outcome.note));
|
|
297
|
+
return lines.join('\n');
|
|
298
|
+
});
|
|
299
|
+
}), 'Wallet');
|
|
300
|
+
group(program
|
|
134
301
|
.command('activity')
|
|
135
|
-
.description('
|
|
302
|
+
.description('Recent sends, swaps and yield transactions')
|
|
136
303
|
.action(async () => {
|
|
137
304
|
const ctx = program.opts().__ctx;
|
|
138
305
|
const token = await requireWalletToken(ctx);
|
|
139
306
|
const session = await ctx.runtime.walletSession();
|
|
140
|
-
const result = await fetchComposite(ctx.runtime.api, token, [
|
|
307
|
+
const result = await step(ctx, 'Reading activity', () => fetchComposite(ctx.runtime.api, token, [
|
|
141
308
|
{ key: 'history', path: scopedToAccount('/v1/history', session?.accountId ?? null) },
|
|
142
|
-
]);
|
|
143
|
-
printResult(ctx, result.data);
|
|
144
|
-
});
|
|
145
|
-
program
|
|
309
|
+
]));
|
|
310
|
+
printResult(ctx, result.data, renderActivity);
|
|
311
|
+
}), 'Wallet');
|
|
312
|
+
group(program
|
|
146
313
|
.command('markets')
|
|
147
|
-
.description('Public market data
|
|
314
|
+
.description('Public market data: prices and symbols')
|
|
148
315
|
.action(async () => {
|
|
149
316
|
const ctx = program.opts().__ctx;
|
|
150
317
|
const token = await requireWalletToken(ctx);
|
|
151
|
-
const result = await fetchComposite(ctx.runtime.api, token, [{ key: 'tokens', path: '/v1/markets/tokens' }]);
|
|
318
|
+
const result = await step(ctx, 'Reading markets', () => fetchComposite(ctx.runtime.api, token, [{ key: 'tokens', path: '/v1/markets/tokens' }]));
|
|
152
319
|
printResult(ctx, result.data);
|
|
153
|
-
});
|
|
154
|
-
program
|
|
320
|
+
}), 'Wallet');
|
|
321
|
+
group(program
|
|
155
322
|
.command('yield')
|
|
156
|
-
.description('Yield pools, a shortlist, and this account\'s
|
|
323
|
+
.description('Yield pools, a shortlist, and this account\'s positions')
|
|
157
324
|
.action(async () => {
|
|
158
325
|
const ctx = program.opts().__ctx;
|
|
159
326
|
const token = await requireWalletToken(ctx);
|
|
160
327
|
const session = await ctx.runtime.walletSession();
|
|
161
|
-
const result = await fetchComposite(ctx.runtime.api, token, [
|
|
328
|
+
const result = await step(ctx, 'Reading yield', () => fetchComposite(ctx.runtime.api, token, [
|
|
162
329
|
{ key: 'pools', path: '/v1/yield/pools' },
|
|
163
330
|
{ key: 'shortlist', path: '/v1/yield/shortlist' },
|
|
164
331
|
{ key: 'positions', path: scopedToAccount('/v1/farm/positions', session?.accountId ?? null) },
|
|
165
|
-
]);
|
|
332
|
+
]));
|
|
166
333
|
printResult(ctx, {
|
|
167
334
|
...result.data,
|
|
168
335
|
scopeCaveats: 'shortlist is ranked off your own holdings server-side and is not scoped by accounts use.',
|
|
169
336
|
});
|
|
170
|
-
});
|
|
171
|
-
program
|
|
337
|
+
}), 'Wallet');
|
|
338
|
+
const mandates = group(program
|
|
172
339
|
.command('mandates')
|
|
173
|
-
.description(
|
|
340
|
+
.description('What the agent lane may spend unattended (testnet only)')
|
|
174
341
|
.action(async () => {
|
|
175
342
|
const ctx = program.opts().__ctx;
|
|
176
343
|
const token = await requireWalletToken(ctx);
|
|
177
344
|
const session = await ctx.runtime.walletSession();
|
|
178
|
-
const result = await fetchComposite(ctx.runtime.api, token, [
|
|
345
|
+
const result = await step(ctx, 'Reading mandates', () => fetchComposite(ctx.runtime.api, token, [
|
|
179
346
|
{ key: 'delegations', path: scopedToAccount('/v1/delegations', session?.accountId ?? null) },
|
|
180
347
|
{ key: 'mandates', path: scopedToAccount('/v1/mandates', session?.accountId ?? null) },
|
|
181
|
-
]);
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
348
|
+
]));
|
|
349
|
+
printResult(ctx, result.data, renderMandates);
|
|
350
|
+
}), 'Wallet');
|
|
351
|
+
mandates
|
|
352
|
+
.command('suggest')
|
|
353
|
+
.description('Suggest a bounded mandate for each agent that has none')
|
|
354
|
+
.action(async () => {
|
|
355
|
+
const ctx = program.opts().__ctx;
|
|
356
|
+
const token = await requireWalletToken(ctx);
|
|
357
|
+
const session = await ctx.runtime.walletSession();
|
|
358
|
+
const result = await step(ctx, 'Reading agents and mandates', () => fetchComposite(ctx.runtime.api, token, [
|
|
359
|
+
{ key: 'agents', path: scopedToAccount('/v1/agents', session?.accountId ?? null) },
|
|
360
|
+
{ key: 'delegations', path: scopedToAccount('/v1/delegations', session?.accountId ?? null) },
|
|
361
|
+
]));
|
|
362
|
+
const agents = Array.isArray(result.data.agents) ? result.data.agents : [];
|
|
363
|
+
const delegations = Array.isArray(result.data.delegations) ? result.data.delegations : [];
|
|
364
|
+
const granted = new Set(delegations.map((d) => String(d.delegateeAddress ?? '').toLowerCase()));
|
|
365
|
+
const suggestions = agents
|
|
366
|
+
.filter((agent) => !granted.has(String(agent.address ?? '').toLowerCase()))
|
|
367
|
+
.map((agent) => ({
|
|
368
|
+
agentId: String(agent.id ?? ''),
|
|
369
|
+
agentName: String(agent.name ?? 'unnamed'),
|
|
370
|
+
// NEVER defaulted: naming a chain the backend did not state would invent the single most
|
|
371
|
+
// consequential fact in a spending suggestion - WHERE the authority would exist.
|
|
372
|
+
chainId: typeof agent.chainId === 'number' ? agent.chainId : null,
|
|
373
|
+
rationale: 'This agent is connected but has no mandate, so it can do nothing unattended.',
|
|
374
|
+
grantUrl: `${appUrl(ctx.runtime.apiBaseUrl, 'mandates')}?agent=${encodeURIComponent(String(agent.id ?? ''))}`,
|
|
375
|
+
}));
|
|
376
|
+
const payload = {
|
|
377
|
+
suggestions,
|
|
378
|
+
note: agents.length === 0
|
|
379
|
+
? 'No agents are connected to this account yet. Run `botanary agent pair` on the machine you want to connect.'
|
|
380
|
+
: 'Suggestions only. Granting happens in Botanary, and never widens an existing grant.',
|
|
381
|
+
};
|
|
382
|
+
printResult(ctx, payload, () => suggestions.length
|
|
383
|
+
? [
|
|
384
|
+
section('Suggested mandates'),
|
|
385
|
+
...suggestions.map((s) => ` ${s.agentName} (${s.agentId})\n ${s.rationale}\n ${s.grantUrl}`),
|
|
386
|
+
colors.dim(` ${payload.note}`),
|
|
387
|
+
].join('\n')
|
|
388
|
+
: `${section('Suggested mandates')}\n${colors.muted(` ${payload.note}`)}`);
|
|
185
389
|
});
|
|
186
|
-
program
|
|
390
|
+
group(program
|
|
187
391
|
.command('agents')
|
|
188
|
-
.description('Connected agents and any pending approval requests
|
|
392
|
+
.description('Connected agents and any pending approval requests')
|
|
189
393
|
.action(async () => {
|
|
190
394
|
const ctx = program.opts().__ctx;
|
|
191
395
|
const token = await requireWalletToken(ctx);
|
|
192
396
|
const session = await ctx.runtime.walletSession();
|
|
193
|
-
const result = await fetchComposite(ctx.runtime.api, token, [
|
|
397
|
+
const result = await step(ctx, 'Reading agents', () => fetchComposite(ctx.runtime.api, token, [
|
|
194
398
|
{ key: 'agents', path: scopedToAccount('/v1/agents', session?.accountId ?? null) },
|
|
195
399
|
{ key: 'requests', path: scopedToAccount('/v1/agents/requests', session?.accountId ?? null) },
|
|
196
|
-
]);
|
|
197
|
-
printResult(ctx, result.data);
|
|
400
|
+
]));
|
|
401
|
+
printResult(ctx, result.data, renderAgents);
|
|
402
|
+
}), 'Wallet');
|
|
403
|
+
group(program
|
|
404
|
+
.command('open [target]')
|
|
405
|
+
.description('Open Botanary in your browser')
|
|
406
|
+
.action(async (target) => {
|
|
407
|
+
const ctx = program.opts().__ctx;
|
|
408
|
+
const url = appUrl(ctx.runtime.apiBaseUrl, target);
|
|
409
|
+
const opened = await openBrowser(url);
|
|
410
|
+
printResult(ctx, { url, opened }, () => opened ? glyphs.success(`Opened ${url}`) : glyphs.warning(`Could not open a browser - go to ${url}`));
|
|
411
|
+
}), 'Wallet');
|
|
412
|
+
const accounts = group(program
|
|
413
|
+
.command('accounts')
|
|
414
|
+
.description('Manage which owner account subsequent commands use'), 'Wallet');
|
|
415
|
+
accounts
|
|
416
|
+
.command('list')
|
|
417
|
+
.description('Every account this login can see')
|
|
418
|
+
.action(async () => {
|
|
419
|
+
const ctx = program.opts().__ctx;
|
|
420
|
+
const token = await requireWalletToken(ctx);
|
|
421
|
+
const session = await ctx.runtime.walletSession();
|
|
422
|
+
const list = await step(ctx, 'Reading accounts', () => ctx.runtime.api.get('/v1/accounts', token));
|
|
423
|
+
printResult(ctx, list, (data) => renderAccounts(data, session?.accountId ?? null));
|
|
198
424
|
});
|
|
199
|
-
const accounts = program.command('accounts').description('Manage which owner account subsequent commands use');
|
|
200
425
|
accounts
|
|
201
426
|
.command('use <accountId>')
|
|
202
427
|
.description('Switch the active account (wallet_use_account)')
|
|
203
428
|
.action(async (accountId) => {
|
|
204
429
|
const ctx = program.opts().__ctx;
|
|
205
430
|
const token = await requireWalletToken(ctx);
|
|
206
|
-
const list = await ctx.runtime.api.get('/v1/accounts', token);
|
|
431
|
+
const list = await step(ctx, 'Switching account', () => ctx.runtime.api.get('/v1/accounts', token));
|
|
207
432
|
if (!Array.isArray(list) || !list.some((a) => a.id === accountId)) {
|
|
208
|
-
throw
|
|
433
|
+
throw invalidArgs(`No such account id: ${accountId}`, 'Use `botanary accounts list` to see your account ids.');
|
|
209
434
|
}
|
|
210
435
|
const session = await ctx.runtime.walletSessionStore.switchAccount(accountId);
|
|
211
436
|
printSessionResult(ctx, { session });
|
|
212
437
|
});
|
|
213
|
-
program
|
|
214
|
-
.command('api
|
|
215
|
-
.description('Read any GET endpoint
|
|
216
|
-
.
|
|
438
|
+
group(program
|
|
439
|
+
.command('api [path]')
|
|
440
|
+
.description('Read any documented GET endpoint as the owner')
|
|
441
|
+
.option('--list [filter]', 'List the documented GET routes instead of calling one')
|
|
442
|
+
.action(async (path, opts) => {
|
|
217
443
|
const ctx = program.opts().__ctx;
|
|
444
|
+
if (opts.list !== undefined) {
|
|
445
|
+
const filter = typeof opts.list === 'string' ? opts.list.toLowerCase() : '';
|
|
446
|
+
const routes = GET_ROUTES.filter((route) => route.toLowerCase().includes(filter));
|
|
447
|
+
printResult(ctx, routes, () => [
|
|
448
|
+
section(`Documented GET routes${filter ? ` matching "${filter}"` : ''}`),
|
|
449
|
+
...routes.map((route) => ` ${route}`),
|
|
450
|
+
colors.dim(` ${routes.length} of ${GET_ROUTES.length}. Call one with \`botanary api <path>\`.`),
|
|
451
|
+
].join('\n'));
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
if (!path)
|
|
455
|
+
throw invalidArgs('A path is required.', 'e.g. `botanary api /chains`, or `botanary api --list`.');
|
|
218
456
|
const token = await requireWalletToken(ctx);
|
|
219
|
-
const result = await walletApiGet({ api: ctx.runtime.api, token }, path, 'GET');
|
|
457
|
+
const result = await step(ctx, `GET ${path}`, () => walletApiGet({ api: ctx.runtime.api, token }, path, 'GET'));
|
|
220
458
|
printResult(ctx, result);
|
|
221
|
-
});
|
|
459
|
+
}), 'Wallet');
|
|
222
460
|
}
|
|
223
461
|
//# sourceMappingURL=wallet.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../src/commands/wallet.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../src/commands/wallet.ts"],"names":[],"mappings":"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"}
|