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.
Files changed (73) hide show
  1. package/README.md +186 -9
  2. package/dist/bin/botanary.js +13 -3
  3. package/dist/bin/botanary.js.map +1 -1
  4. package/dist/package.json +2 -2
  5. package/dist/src/app-url.js +32 -0
  6. package/dist/src/app-url.js.map +1 -0
  7. package/dist/src/cli.js +113 -23
  8. package/dist/src/cli.js.map +1 -1
  9. package/dist/src/commands/agent.js +190 -49
  10. package/dist/src/commands/agent.js.map +1 -1
  11. package/dist/src/commands/mcp.js +136 -5
  12. package/dist/src/commands/mcp.js.map +1 -1
  13. package/dist/src/commands/system.js +109 -12
  14. package/dist/src/commands/system.js.map +1 -1
  15. package/dist/src/commands/utilities.js +44 -0
  16. package/dist/src/commands/utilities.js.map +1 -0
  17. package/dist/src/commands/wallet.js +332 -94
  18. package/dist/src/commands/wallet.js.map +1 -1
  19. package/dist/src/completion.js +69 -0
  20. package/dist/src/completion.js.map +1 -0
  21. package/dist/src/config-store.js +52 -0
  22. package/dist/src/config-store.js.map +1 -0
  23. package/dist/src/context.js +14 -4
  24. package/dist/src/context.js.map +1 -1
  25. package/dist/src/errors.js +116 -0
  26. package/dist/src/errors.js.map +1 -0
  27. package/dist/src/help/examples.js +357 -0
  28. package/dist/src/help/examples.js.map +1 -0
  29. package/dist/src/help/format.js +144 -0
  30. package/dist/src/help/format.js.map +1 -0
  31. package/dist/src/help/groups.js +39 -0
  32. package/dist/src/help/groups.js.map +1 -0
  33. package/dist/src/mcp-snippets.js +6 -0
  34. package/dist/src/mcp-snippets.js.map +1 -1
  35. package/dist/src/outcome.js +63 -0
  36. package/dist/src/outcome.js.map +1 -0
  37. package/dist/src/parser.js +18 -39
  38. package/dist/src/parser.js.map +1 -1
  39. package/dist/src/progress.js +37 -0
  40. package/dist/src/progress.js.map +1 -0
  41. package/dist/src/prompt-doc.js +92 -0
  42. package/dist/src/prompt-doc.js.map +1 -0
  43. package/dist/src/render/accounts.js +21 -0
  44. package/dist/src/render/accounts.js.map +1 -0
  45. package/dist/src/render/activity.js +34 -0
  46. package/dist/src/render/activity.js.map +1 -0
  47. package/dist/src/render/agents.js +42 -0
  48. package/dist/src/render/agents.js.map +1 -0
  49. package/dist/src/render/balance.js +68 -0
  50. package/dist/src/render/balance.js.map +1 -0
  51. package/dist/src/render/chains.js +52 -0
  52. package/dist/src/render/chains.js.map +1 -0
  53. package/dist/src/render/gas.js +34 -0
  54. package/dist/src/render/gas.js.map +1 -0
  55. package/dist/src/render/grant.js +34 -0
  56. package/dist/src/render/grant.js.map +1 -0
  57. package/dist/src/render/kv.js +60 -0
  58. package/dist/src/render/kv.js.map +1 -0
  59. package/dist/src/render/mandates.js +111 -0
  60. package/dist/src/render/mandates.js.map +1 -0
  61. package/dist/src/render/print.js +18 -0
  62. package/dist/src/render/print.js.map +1 -0
  63. package/dist/src/repl.js +114 -10
  64. package/dist/src/repl.js.map +1 -1
  65. package/dist/src/review.js +52 -0
  66. package/dist/src/review.js.map +1 -0
  67. package/dist/src/settings.js +88 -0
  68. package/dist/src/settings.js.map +1 -0
  69. package/dist/src/update-check.js +85 -0
  70. package/dist/src/update-check.js.map +1 -0
  71. package/dist/src/validate.js +92 -0
  72. package/dist/src/validate.js.map +1 -0
  73. 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
- function printResult(ctx, data) {
7
- if (ctx.json) {
8
- console.log(JSON.stringify(data));
9
- }
10
- else {
11
- console.log(typeof data === 'string' ? data : JSON.stringify(data, null, 2));
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 new Error('Not logged in - run `botanary login` first.');
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('Owner session: device-style browser login')
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
- console.log(glyphs.success(`Logged in${result.session ? ` (account ${result.session.accountId ?? 'default'})` : ''}`));
44
- }
45
- else {
46
- console.log(glyphs.danger(`Login ${result.status}`));
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
- program
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('Owner session: revoke and clear the stored session')
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
- console.log(glyphs.success('Logged out.'));
56
- });
57
- program
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('Owner\'s balances across chains (wallet_portfolio)')
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 the owner\'s own account (lane arbitration decides who signs)')
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
- let { recipient, amount, token: tokenSymbol, chainId } = opts;
95
- if (!ctx.noInteractive && (!recipient || !amount || !tokenSymbol || !chainId)) {
96
- const answers = await clack.group({
97
- amount: () => clack.text({ message: 'Amount?', placeholder: '25', initialValue: amount }),
98
- token: () => clack.text({ message: 'Token?', placeholder: 'USDC', initialValue: tokenSymbol }),
99
- recipient: () => clack.text({ message: 'To?', placeholder: '0xAb12...9F3', initialValue: recipient }),
100
- chainId: () => clack.text({ message: 'Chain ID?', placeholder: '8453', initialValue: chainId }),
101
- }, { onCancel: () => { clack.cancel('Cancelled.'); process.exit(0); } });
102
- ({ recipient, amount, token: tokenSymbol, chainId } = answers);
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
- if (!recipient || !amount || !tokenSymbol || !chainId) {
105
- throw new Error('Missing required input: --recipient, --amount, --token, --chain-id (or run interactively).');
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 chainIdNum = Number(chainId);
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: Number(amount),
233
+ recipient: to,
234
+ amount,
111
235
  tokenSymbol,
112
- chainId: chainIdNum,
113
- chainKey: String(chainIdNum),
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 result = await walletSend({
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
- }, input);
131
- printResult(ctx, result);
132
- });
133
- program
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('Owner\'s recent sends, swaps, and yield transactions (wallet_activity)')
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 - prices and symbols (wallet_markets)')
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 farm positions (wallet_yield)')
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(`What the agent lane may spend unattended (wallet_mandates). ${colors.warning('Testnet only, pre-mainnet.')}`)
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
- if (!ctx.json)
183
- console.log(glyphs.warning('Mandates are testnet-only and pre-mainnet - nothing here is enforced on mainnet yet.'));
184
- printResult(ctx, result.data);
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 (wallet_agents)')
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 new Error(`No such account id: ${accountId}`);
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 <path>')
215
- .description('Read any GET endpoint in the frozen OpenAPI contract, authenticated as the owner (wallet_api_get)')
216
- .action(async (path) => {
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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"}