minara 0.4.2 → 0.4.4

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
@@ -48,14 +48,14 @@ minara login
48
48
  # Check your account
49
49
  minara account
50
50
 
51
- # View deposit addresses
52
- minara deposit
51
+ # Receive / deposit
52
+ minara receive
53
53
 
54
- # Chat with Minara AI (interactive REPL)
55
- minara chat
54
+ # Quick AI question
55
+ minara ask "What's the best DeFi yield right now?"
56
56
 
57
- # Or send a single question
58
- minara chat "What's the best DeFi yield right now?"
57
+ # Deep AI research
58
+ minara research "Analyze ETH outlook for next quarter"
59
59
 
60
60
  # Swap tokens (chain auto-detected from token)
61
61
  minara swap -t '$BONK' -s buy -a 100
@@ -88,7 +88,8 @@ minara login -e user@mail.com # Email verification code
88
88
  | `minara assets` | Full overview: spot holdings + perps account |
89
89
  | `minara assets spot` | Spot wallet: portfolio value, cost, PnL, holdings |
90
90
  | `minara assets perps` | Perps account: equity, margin, positions |
91
- | `minara deposit` | Deposit to spot, perps, or buy crypto with credit card |
91
+ | `minara receive` | Deposit / receive to spot, perps, or buy with credit card |
92
+ | `minara deposit` | Same as `receive` |
92
93
  | `minara deposit buy` | Buy crypto with credit card via MoonPay |
93
94
  | `minara withdraw` | Withdraw tokens to an external wallet |
94
95
 
@@ -97,9 +98,9 @@ minara balance # Quick total: Spot + Perps available balance
97
98
  minara assets # Full overview (spot + perps)
98
99
  minara assets spot # Spot wallet with PnL breakdown
99
100
  minara assets perps # Perps equity, margin, positions
100
- minara deposit # Interactive: Spot / Perps / Buy with credit card
101
- minara deposit spot # Show spot wallet deposit addresses (EVM + Solana)
102
- minara deposit perps # Perps: show Arbitrum deposit address, or transfer from Spot → Perps
101
+ minara receive # Interactive: Spot / Perps / Buy with credit card
102
+ minara receive spot # Show spot wallet deposit addresses (EVM + Solana)
103
+ minara receive perps # Perps: show Arbitrum deposit address, or transfer from Spot → Perps
103
104
  minara deposit buy # Buy crypto with credit card via MoonPay (opens browser)
104
105
  minara withdraw -c solana -t '$SOL' -a 10 --to <address>
105
106
  minara withdraw # Interactive mode (accepts ticker or address)
@@ -107,18 +108,28 @@ minara withdraw # Interactive mode (accepts ticker or address)
107
108
 
108
109
  ### Spot Trading
109
110
 
110
- | Command | Description |
111
- | ----------------- | ---------------------------------- |
112
- | `minara swap` | Swap tokens (chain auto-detected) |
113
- | `minara transfer` | Transfer tokens to another address |
111
+ | Command | Description |
112
+ | ----------------- | ---------------------------------------------------- |
113
+ | `minara swap` | Swap tokens (chain auto-detected) |
114
+ | `minara send` | Send / transfer tokens to another address |
115
+ | `minara transfer` | Same as `send` |
114
116
 
115
117
  ```bash
116
118
  minara swap # Interactive: side → token → amount
117
119
  minara swap -s buy -t '$BONK' -a 100 # Buy by ticker (chain auto-detected)
118
120
  minara swap -s sell -t '$NVDAx' -a all # Sell entire balance
119
121
  minara swap --dry-run # Simulate without executing
122
+
123
+ # Send tokens
124
+ minara send -c solana -t '$SOL' -a 5 --to <address> # Send SOL on Solana
125
+ minara send -c base -t '$USDC' -a 200 --to <address> # Send USDC on Base
126
+ minara send -c ethereum -t '$ETH' -a 0.1 --to <addr> # Send ETH on Ethereum
127
+ minara send # Interactive mode
128
+ minara transfer -c solana -t '$SOL' -a 5 --to <address> # Same as send
120
129
  ```
121
130
 
131
+ > **`send` vs `withdraw`:** `send` is an alias for `transfer` — both transfer tokens to another address. `withdraw` is a separate command that moves tokens from your Minara wallet to an external address (shows your current assets before prompting).
132
+ >
122
133
  > **Chain abstraction:** The chain is automatically detected from the token. If a token exists on multiple chains (e.g. USDC), you'll be prompted to pick one, sorted by gas cost (lowest first). Sell mode supports `all` to sell full balance, and caps amounts exceeding your balance.
123
134
  >
124
135
  > **Token input:** All token fields (`-t`) accept a `$TICKER` (e.g. `$BONK`), a token name, or a contract address.
@@ -193,24 +204,37 @@ minara limit-order cancel abc123 # Cancel order by ID
193
204
 
194
205
  ### AI Chat
195
206
 
196
- | Command | Description |
197
- | -------------------------------- | --------------------------------------------- |
198
- | `minara chat` | Enter interactive REPL (Python/Node.js-style) |
199
- | `minara chat [message]` | Send a single message and exit |
200
- | `minara chat --list` | List all your conversations |
201
- | `minara chat --history <chatId>` | View messages in a conversation |
202
- | `minara chat -c <chatId>` | Continue an existing conversation |
207
+ | Command | Description |
208
+ | -------------------------------- | ------------------------------------------------- |
209
+ | `minara ask [message]` | Quick AI chat (fast mode) |
210
+ | `minara research [message]` | Deep AI research (quality mode) |
211
+ | `minara chat` | Enter interactive REPL (Python/Node.js-style) |
212
+ | `minara chat [message]` | Send a single message and exit |
213
+ | `minara chat --list` | List all your conversations |
214
+ | `minara chat --history <chatId>` | View messages in a conversation |
215
+ | `minara chat -c <chatId>` | Continue an existing conversation |
203
216
 
204
217
  ```bash
218
+ # Quick questions (fast mode)
219
+ minara ask "What is the current BTC price?"
220
+ minara ask "Is SOL a good buy right now?"
221
+
222
+ # Deep research (quality mode)
223
+ minara research "Analyze ETH outlook for next quarter"
224
+ minara research "Compare Layer 2 rollup ecosystems"
225
+
226
+ # Full chat with all options
205
227
  minara chat # Enter interactive REPL mode
206
228
  minara chat "What is the current BTC price?" # Single question, streamed answer
207
- minara chat --quality "Analyze ETH outlook" # Quality mode (default: fast)
229
+ minara chat --quality "Analyze ETH outlook" # Quality mode (same as research)
208
230
  minara chat --thinking "Analyze ETH outlook" # Enable reasoning mode
209
231
  minara chat -c <chatId> # Continue a specific chat in REPL
210
232
  minara chat --list # List past conversations
211
233
  minara chat --history <chatId> # Replay a specific conversation
212
234
  ```
213
235
 
236
+ > **`ask` vs `research` vs `chat`:** `ask` is a shortcut for `chat` in fast mode — quick questions, real-time prices, brief answers. `research` is a shortcut for `chat --quality` — deeper analysis, longer responses, more thorough reasoning. `chat` gives you the full feature set including interactive REPL, conversation history, and all mode flags.
237
+
214
238
  **Interactive REPL mode** — When launched without a message argument, the chat enters an interactive session:
215
239
 
216
240
  ```
@@ -327,7 +351,7 @@ Minara CLI supports macOS Touch ID to protect all fund-related operations. When
327
351
  minara config # Select "Touch ID" to enable / disable
328
352
  ```
329
353
 
330
- **Protected operations:** `withdraw`, `transfer`, `swap`, `deposit` (Spot→Perps transfer), `perps deposit`, `perps withdraw`, `perps order`, `perps close`, `limit-order create`
354
+ **Protected operations:** `withdraw`, `send` / `transfer`, `swap`, `receive` / `deposit` (Spot→Perps transfer), `perps deposit`, `perps withdraw`, `perps order`, `perps close`, `limit-order create`
331
355
 
332
356
  > **Note:** Touch ID requires macOS with Touch ID hardware. The `--yes` flag skips the initial confirmation prompt but does **not** bypass transaction confirmation or Touch ID.
333
357
 
@@ -3,10 +3,21 @@ import chalk from 'chalk';
3
3
  import { getCurrentUser } from '../api/auth.js';
4
4
  import { requireAuth } from '../config.js';
5
5
  import { spinner, unwrapApi, wrapAction } from '../utils.js';
6
+ // Wallets to show by default (user-facing addresses)
7
+ const DEFAULT_WALLETS = new Set([
8
+ 'abstraction-evm',
9
+ 'abstraction-solana',
10
+ 'perpetual-evm',
11
+ ]);
12
+ // Descriptions for specific wallet types
13
+ const WALLET_DESCRIPTIONS = {
14
+ 'perpetual-evm': 'Only supports USDC deposits on Arbitrum',
15
+ };
6
16
  export const accountCommand = new Command('account')
7
17
  .alias('me')
8
18
  .description('View your Minara account info')
9
- .action(wrapAction(async () => {
19
+ .option('--show-all', 'Show all wallets including internal addresses')
20
+ .action(wrapAction(async (opts) => {
10
21
  const creds = requireAuth();
11
22
  const spin = spinner('Fetching account info…');
12
23
  const res = await getCurrentUser(creds.accessToken);
@@ -26,8 +37,18 @@ export const accountCommand = new Command('account')
26
37
  console.log(` Invite Code : ${u.invitationCode}`);
27
38
  if (u.wallets && Object.keys(u.wallets).length > 0) {
28
39
  console.log(` Wallets:`);
40
+ const showAll = opts.showAll === true;
29
41
  for (const [type, addr] of Object.entries(u.wallets)) {
30
- console.log(` ${chalk.dim(type)} : ${addr}`);
42
+ // Filter wallets: only show default wallets unless --show-all is used
43
+ if (showAll || DEFAULT_WALLETS.has(type)) {
44
+ const description = WALLET_DESCRIPTIONS[type];
45
+ if (description) {
46
+ console.log(` ${chalk.dim(type)} : ${addr} ${chalk.dim(`(${description})`)}`);
47
+ }
48
+ else {
49
+ console.log(` ${chalk.dim(type)} : ${addr}`);
50
+ }
51
+ }
31
52
  }
32
53
  }
33
54
  if (u.accounts && Object.keys(u.accounts).length > 0) {
@@ -1,2 +1,4 @@
1
1
  import { Command } from 'commander';
2
2
  export declare const chatCommand: Command;
3
+ export declare const askCommand: Command;
4
+ export declare const researchCommand: Command;
@@ -75,15 +75,7 @@ async function* parseSSE(response) {
75
75
  reader.releaseLock();
76
76
  }
77
77
  }
78
- export const chatCommand = new Command('chat')
79
- .description('Chat with Minara AI assistant (interactive REPL when no message given)')
80
- .argument('[message]', 'Send a single message and exit')
81
- .option('-c, --chat-id <id>', 'Continue existing chat')
82
- .option('--list', 'List past chats')
83
- .option('--history <chatId>', 'Show chat history')
84
- .option('--thinking', 'Enable thinking/degen mode')
85
- .option('--quality', 'Use quality mode instead of the default fast mode')
86
- .action(wrapAction(async (messageArg, opts) => {
78
+ async function chatAction(messageArg, opts) {
87
79
  const creds = requireAuth();
88
80
  // ── List chats ───────────────────────────────────────────────────────
89
81
  if (opts?.list) {
@@ -268,4 +260,29 @@ export const chatCommand = new Command('chat')
268
260
  }
269
261
  await sendAndPrintWithPause(userMsg);
270
262
  }
263
+ }
264
+ export const chatCommand = new Command('chat')
265
+ .description('Chat with Minara AI assistant (interactive REPL when no message given)')
266
+ .argument('[message]', 'Send a single message and exit')
267
+ .option('-c, --chat-id <id>', 'Continue existing chat')
268
+ .option('--list', 'List past chats')
269
+ .option('--history <chatId>', 'Show chat history')
270
+ .option('--thinking', 'Enable thinking/degen mode')
271
+ .option('--quality', 'Use quality mode instead of the default fast mode')
272
+ .action(wrapAction(chatAction));
273
+ export const askCommand = new Command('ask')
274
+ .description('Quick AI chat (fast mode) — alias for chat')
275
+ .argument('[message]', 'Send a single message and exit')
276
+ .option('-c, --chat-id <id>', 'Continue existing chat')
277
+ .option('--thinking', 'Enable thinking/degen mode')
278
+ .action(wrapAction(async (messageArg, opts) => {
279
+ await chatAction(messageArg, { ...opts, quality: false });
280
+ }));
281
+ export const researchCommand = new Command('research')
282
+ .description('Deep AI research (quality mode) — alias for chat --quality')
283
+ .argument('[message]', 'Send a single message and exit')
284
+ .option('-c, --chat-id <id>', 'Continue existing chat')
285
+ .option('--thinking', 'Enable thinking/degen mode')
286
+ .action(wrapAction(async (messageArg, opts) => {
287
+ await chatAction(messageArg, { ...opts, quality: true });
271
288
  }));
@@ -184,7 +184,8 @@ const buyCmd = new Command('buy')
184
184
  await moonPayOnRamp(creds.accessToken);
185
185
  }));
186
186
  export const depositCommand = new Command('deposit')
187
- .description('Deposit to spot wallet or perps account, or buy with credit card')
187
+ .alias('receive')
188
+ .description('Deposit / receive to spot wallet or perps account, or buy with credit card')
188
189
  .addCommand(spotCmd)
189
190
  .addCommand(perpsCmd)
190
191
  .addCommand(buyCmd)
@@ -6,7 +6,8 @@ import { success, spinner, assertApiOk, selectChain, wrapAction, requireTransact
6
6
  import { requireTouchId } from '../touchid.js';
7
7
  import { printTxResult } from '../formatters.js';
8
8
  export const transferCommand = new Command('transfer')
9
- .description('Transfer tokens to another address')
9
+ .alias('send')
10
+ .description('Transfer / send tokens to another address')
10
11
  .option('-c, --chain <chain>', 'Blockchain')
11
12
  .option('-t, --token <address|ticker>', 'Token contract address or ticker symbol')
12
13
  .option('-a, --amount <amount>', 'Token amount to send')
package/dist/index.js CHANGED
@@ -19,7 +19,7 @@ import { transferCommand } from './commands/transfer.js';
19
19
  import { perpsCommand } from './commands/perps.js';
20
20
  import { limitOrderCommand } from './commands/limit-order.js';
21
21
  // AI, Market, Premium, Config
22
- import { chatCommand } from './commands/chat.js';
22
+ import { chatCommand, askCommand, researchCommand } from './commands/chat.js';
23
23
  import { discoverCommand } from './commands/discover.js';
24
24
  import { premiumCommand } from './commands/premium.js';
25
25
  import { configCommand } from './commands/config.js';
@@ -58,6 +58,8 @@ program.addCommand(perpsCommand);
58
58
  program.addCommand(limitOrderCommand);
59
59
  // ── AI Chat ──────────────────────────────────────────────────────────────
60
60
  program.addCommand(chatCommand);
61
+ program.addCommand(askCommand);
62
+ program.addCommand(researchCommand);
61
63
  // ── Market ───────────────────────────────────────────────────────────────
62
64
  program.addCommand(discoverCommand);
63
65
  // ── Premium ─────────────────────────────────────────────────────────────
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "minara",
3
- "version": "0.4.2",
3
+ "version": "0.4.4",
4
4
  "description": "CLI client for Minara.ai — login, trade, deposit/withdraw, chat and more from your terminal.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",