@bankr/cli 0.3.38 → 0.3.43
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 +50 -158
- package/dist/cli.js +159 -145
- package/dist/commands/fees.js +17 -7
- package/dist/commands/llm.js +64 -0
- package/dist/commands/login.d.ts +38 -0
- package/dist/commands/login.js +129 -38
- package/dist/commands/{profile.d.ts → project.d.ts} +6 -6
- package/dist/commands/{profile.js → project.js} +65 -65
- package/dist/commands/prompt.d.ts +11 -0
- package/dist/commands/prompt.js +20 -11
- package/dist/commands/status.d.ts +5 -1
- package/dist/commands/status.js +54 -5
- package/dist/commands/x402.js +2 -2
- package/dist/lib/api.d.ts +29 -8
- package/dist/lib/api.js +26 -12
- package/dist/lib/statusUpdates.d.ts +14 -0
- package/dist/lib/statusUpdates.js +38 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,198 +1,90 @@
|
|
|
1
1
|
# @bankr/cli
|
|
2
2
|
|
|
3
|
-
Official CLI for the [Bankr](https://bankr.bot) AI agent platform.
|
|
3
|
+
Official CLI for the [Bankr](https://bankr.bot) AI agent platform. Prompt the Bankr agent, manage your wallet, launch tokens and claim their fees, and use the Bankr LLM gateway from your terminal.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npm install -g @bankr/cli
|
|
9
|
-
```
|
|
5
|
+
The full command reference is at [docs.bankr.bot/cli](https://docs.bankr.bot/cli), and every command takes `--help`.
|
|
10
6
|
|
|
11
|
-
##
|
|
12
|
-
|
|
13
|
-
A [Bankr Club subscription](https://bankr.bot) or LLM credits (Max Mode) is required to use the agent. There is no free tier.
|
|
7
|
+
## Installation
|
|
14
8
|
|
|
15
9
|
```bash
|
|
16
|
-
#
|
|
17
|
-
bankr login
|
|
10
|
+
npm install -g @bankr/cli # or: bun install -g @bankr/cli
|
|
18
11
|
|
|
19
|
-
#
|
|
20
|
-
bankr
|
|
21
|
-
|
|
22
|
-
# Or use the shorthand (no subcommand)
|
|
23
|
-
bankr "what is the price of ETH?"
|
|
12
|
+
# Later: update with whichever package manager installed it
|
|
13
|
+
bankr update
|
|
24
14
|
```
|
|
25
15
|
|
|
26
|
-
##
|
|
27
|
-
|
|
28
|
-
### Authentication
|
|
16
|
+
## Log in
|
|
29
17
|
|
|
30
18
|
```bash
|
|
31
|
-
#
|
|
19
|
+
# Interactive: sign in with email, open bankr.bot to create a key, or paste one
|
|
32
20
|
bankr login
|
|
33
21
|
|
|
34
|
-
#
|
|
35
|
-
bankr login email
|
|
22
|
+
# Headless email login, for scripts and agents
|
|
23
|
+
bankr login email you@example.com # step 1: send a one-time code
|
|
24
|
+
bankr login email you@example.com --code 123456 # step 2: verify and create an API key (new accounts get a wallet)
|
|
36
25
|
|
|
37
|
-
#
|
|
38
|
-
bankr login email user@example.com # Step 1: send OTP
|
|
39
|
-
bankr login email user@example.com --code 123456 \ # Step 2: verify + complete
|
|
40
|
-
--accept-terms --key-name "My Key" --read-write --llm
|
|
41
|
-
|
|
42
|
-
# Log in directly with an API key (non-interactive)
|
|
26
|
+
# An existing bk_... key from bankr.bot/api-keys (checked against the API before it's saved)
|
|
43
27
|
bankr login --api-key bk_YOUR_KEY
|
|
44
28
|
|
|
45
|
-
#
|
|
46
|
-
bankr login
|
|
47
|
-
|
|
48
|
-
# Print the dashboard URL without opening a browser (non-interactive)
|
|
49
|
-
bankr login --url
|
|
50
|
-
|
|
51
|
-
# Log in with a custom API URL
|
|
52
|
-
bankr login --api-url https://api.bankr.bot
|
|
29
|
+
# Sign-In with Ethereum, for headless agents
|
|
30
|
+
bankr login siwe --private-key 0xYOUR_PRIVATE_KEY
|
|
53
31
|
|
|
54
|
-
# Show
|
|
32
|
+
# Show the key in use, check the connection, and list your account details
|
|
55
33
|
bankr whoami
|
|
56
|
-
|
|
57
|
-
# Clear stored credentials
|
|
58
|
-
bankr logout
|
|
59
34
|
```
|
|
60
35
|
|
|
61
|
-
|
|
36
|
+
- Completing a headless email login (`--code` or `--ni`) or a SIWE login accepts the [Terms of Service](https://bankr.bot/terms).
|
|
37
|
+
- Email-login keys get Wallet, Agent and Token Launch API access and can transact. Opt out with `--no-wallet-api`, `--no-agent-api`, `--no-token-launch` or `--read-only`, and add LLM gateway access with `--llm`. SIWE keys are read-only unless you pass `--read-write`.
|
|
38
|
+
- On an account with passkey MFA, email login prints a bankr.bot approval link (valid for five minutes) and continues once you approve it with your passkey.
|
|
39
|
+
|
|
40
|
+
## Prompt the agent
|
|
62
41
|
|
|
63
|
-
|
|
42
|
+
Prompting the agent from the CLI needs a Bankr Club membership or LLM credits for Max Mode — see [Access](https://docs.bankr.bot/agent/access).
|
|
64
43
|
|
|
65
44
|
```bash
|
|
66
|
-
|
|
45
|
+
bankr "what is the price of ETH?" # shorthand for bankr agent
|
|
67
46
|
bankr agent "swap 10 USDC to ETH on base"
|
|
68
|
-
|
|
69
|
-
# Shorthand — just pass the prompt directly
|
|
70
|
-
bankr "what are the top holders of VIRTUAL?"
|
|
71
|
-
|
|
72
|
-
# Continue the most recent conversation
|
|
73
|
-
bankr agent --continue "and what about SOL?"
|
|
74
|
-
bankr agent -c "compare them"
|
|
75
|
-
|
|
76
|
-
# Continue a specific thread
|
|
47
|
+
bankr agent --continue "and what about SOL?" # continue the last thread (-c)
|
|
77
48
|
bankr agent --thread thr_ABC123 "tell me more"
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
# web picker shows); anything else is rejected and the error lists every
|
|
82
|
-
# valid id.
|
|
83
|
-
bankr agent --model claude-opus-5 "audit this contract"
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
### Token Launch
|
|
87
|
-
|
|
88
|
-
```bash
|
|
89
|
-
# Interactive wizard — guides you through name, image, tweet, and fee recipient
|
|
90
|
-
bankr launch
|
|
91
|
-
|
|
92
|
-
# Non-interactive with all options
|
|
93
|
-
bankr launch --name "TESTCOIN" --image "https://example.com/img.png" \
|
|
94
|
-
--tweet "https://x.com/user/status/123" --fee "@vitalik" --fee-type x -y
|
|
95
|
-
|
|
96
|
-
# Quick launch (name only, skip confirmation)
|
|
97
|
-
bankr launch --name "TESTCOIN" -y
|
|
98
|
-
|
|
99
|
-
# Pair the pool with a tokenized stock or another listed quote token instead of WETH (Robinhood Chain or Base)
|
|
100
|
-
bankr launch quotes --chain robinhood # list the quote tokens you can pair with
|
|
101
|
-
bankr launch --name "TESTCOIN" --chain robinhood --quote TSLA -y
|
|
102
|
-
bankr launch --name "TESTCOIN" --chain robinhood --quote musebook -y
|
|
103
|
-
bankr launch --name "TESTCOIN" --chain robinhood --quote BNKR -y # the Robinhood Chain BNKR contract
|
|
104
|
-
|
|
105
|
-
# Fee recipient types: x, farcaster, ens, wallet
|
|
106
|
-
bankr launch --name "TESTCOIN" --fee "vitalik.eth" --fee-type ens -y
|
|
107
|
-
bankr launch --name "TESTCOIN" --fee "0x1234..." --fee-type wallet -y
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### Job Management
|
|
111
|
-
|
|
112
|
-
```bash
|
|
113
|
-
# Check the status of a job
|
|
114
|
-
bankr agent status job_ABC123DEF456
|
|
115
|
-
|
|
116
|
-
# Cancel a running job
|
|
49
|
+
bankr agent --model claude-opus-5 "audit this contract" # Max Mode, billed to LLM credits
|
|
50
|
+
echo 'buy $50 of ETH on base' | bankr agent prompt # piped prompt; single quotes keep $50 intact
|
|
51
|
+
bankr agent status job_ABC123DEF456 --wait # follow a job until it finishes
|
|
117
52
|
bankr agent cancel job_ABC123DEF456
|
|
118
53
|
```
|
|
119
54
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
Launch Claude Code / OpenCode routed through the Bankr gateway:
|
|
123
|
-
|
|
124
|
-
```bash
|
|
125
|
-
# Claude Code — `bankr claude` is a top-level alias for `bankr llm claude`
|
|
126
|
-
# (auto-translates dotted model IDs to the Anthropic wire format)
|
|
127
|
-
bankr claude --model claude-opus-5
|
|
128
|
-
|
|
129
|
-
# Or use dotted form — bankr claude rewrites it to claude-opus-4-8
|
|
130
|
-
bankr claude --model claude-opus-4.8
|
|
131
|
-
|
|
132
|
-
# The [1m] suffix is optional via the gateway, but MUST be quoted if used
|
|
133
|
-
# (zsh reads [1m] as a glob)
|
|
134
|
-
bankr claude --model "claude-opus-5[1m]"
|
|
135
|
-
|
|
136
|
-
# OpenCode (use the bankr/ prefix with the gateway-canonical dotted form)
|
|
137
|
-
bankr llm opencode -m bankr/claude-opus-4.8
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
Because `claude` is a command, it shadows the default prompt fallthrough:
|
|
141
|
-
`bankr claude ...` launches Claude Code rather than prompting the agent. Use
|
|
142
|
-
`bankr agent "..."` to send the agent a prompt starting with that word.
|
|
143
|
-
|
|
144
|
-
**Claude Code model format**: Claude Code's `--model` flag expects Anthropic
|
|
145
|
-
wire IDs, which use dashes rather than dots in the version (`claude-opus-5`,
|
|
146
|
-
`claude-sonnet-5`, `claude-opus-4-8`, `claude-haiku-4-5`). If you pass the
|
|
147
|
-
gateway-canonical dotted form (`claude-opus-4.8`), Claude Code silently falls
|
|
148
|
-
back to its default — the flag appears honored but the real request is a
|
|
149
|
-
different model.
|
|
150
|
-
|
|
151
|
-
`bankr claude` translates dotted → dashed for you. If you use older
|
|
152
|
-
versions of the CLI (or invoke `claude` directly via `ANTHROPIC_BASE_URL`),
|
|
153
|
-
pass the dashed form explicitly.
|
|
154
|
-
|
|
155
|
-
**1M context tier**: the gateway strips Claude Code's `[1m]` suffix and enables
|
|
156
|
-
the 1M beta from the model's own context window, so it's **optional here** —
|
|
157
|
-
`claude-opus-5` and `claude-opus-5[1m]` send an identical upstream request. If
|
|
158
|
-
you do use it, **quote it**: in zsh (the macOS default) `[1m]` is a glob
|
|
159
|
-
character class, so an unquoted id aborts with `zsh: no matches found:
|
|
160
|
-
claude-opus-5[1m]` before the CLI ever runs. Bash passes it through literally,
|
|
161
|
-
so the same command can work on one machine and fail on another.
|
|
55
|
+
The agent's progress lines print on stderr while it works, so they stay out of piped output.
|
|
162
56
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
```bash
|
|
166
|
-
# View all config
|
|
167
|
-
bankr config get
|
|
57
|
+
## Commands
|
|
168
58
|
|
|
169
|
-
|
|
170
|
-
|
|
59
|
+
| Command | What it does |
|
|
60
|
+
| -------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
|
|
61
|
+
| `bankr wallet` | Portfolio, transfer, swap, sign and submit, without the agent |
|
|
62
|
+
| `bankr tokens` | Token search and info |
|
|
63
|
+
| `bankr launch` | Launch a token on Base, Robinhood Chain or Arbitrum; `bankr launch quotes` lists the tokens a launch can pair with |
|
|
64
|
+
| `bankr fees` | Creator-fee dashboard and claims, including `fees claim-wallet` with your own private key |
|
|
65
|
+
| `bankr llm`, `bankr claude` | LLM gateway: models, credits and auto top-up, coding-tool config, and Claude Code or OpenCode run through the gateway |
|
|
66
|
+
| `bankr project` | Your project page |
|
|
67
|
+
| `bankr club` | Bankr Club status, sign-up and cancellation |
|
|
68
|
+
| `bankr files` | Your wallet's file storage |
|
|
69
|
+
| `bankr x402`, `bankr webhooks` | Deploy and manage paid x402 endpoints and webhooks that trigger the agent |
|
|
70
|
+
| `bankr config`, `bankr sounds`, `bankr update`, `bankr logout` | Settings and maintenance |
|
|
171
71
|
|
|
172
|
-
|
|
173
|
-
bankr config set apiUrl https://api.bankr.bot
|
|
72
|
+
Add `--ni` (or set `BANKR_NOT_INTERACTIVE=1`) to any command to skip confirmations and fail fast instead of prompting.
|
|
174
73
|
|
|
175
|
-
|
|
176
|
-
bankr config set llmKey YOUR_LLM_KEY
|
|
177
|
-
```
|
|
74
|
+
The package also exports its API client (`submitPrompt`, `pollJob`, `getUserInfo`, `getBalances` and more) for Node.js — see [Programmatic usage](https://docs.bankr.bot/cli#programmatic-usage).
|
|
178
75
|
|
|
179
76
|
## Configuration
|
|
180
77
|
|
|
181
|
-
Credentials are stored in `~/.bankr/config.json
|
|
182
|
-
|
|
183
|
-
Environment variables override stored values:
|
|
184
|
-
|
|
185
|
-
| Variable | Description |
|
|
186
|
-
| --------------- | -------------------------------------------------------------------------- |
|
|
187
|
-
| `BANKR_API_KEY` | API key (overrides stored key) |
|
|
188
|
-
| `BANKR_API_URL` | API URL (default: `https://api.bankr.bot`) |
|
|
189
|
-
| `BANKR_WEB_URL` | Web app URL for browser approval links (default: derived from the API URL) |
|
|
190
|
-
| `BANKR_LLM_KEY` | LLM gateway key (falls back to `BANKR_API_KEY` if not set) |
|
|
191
|
-
| `BANKR_LLM_URL` | LLM gateway URL (default: `https://llm.bankr.bot`) |
|
|
78
|
+
Credentials are stored in `~/.bankr/config.json`; use `--config <path>` or `BANKR_CONFIG` for another file. Environment variables override stored values:
|
|
192
79
|
|
|
193
|
-
|
|
80
|
+
| Variable | Description |
|
|
81
|
+
| --------------- | ------------------------------------------------------ |
|
|
82
|
+
| `BANKR_API_KEY` | API key |
|
|
83
|
+
| `BANKR_LLM_KEY` | LLM gateway key (falls back to the API key if not set) |
|
|
84
|
+
| `BANKR_API_URL` | API URL (default: `https://api.bankr.bot`) |
|
|
85
|
+
| `BANKR_LLM_URL` | LLM gateway URL (default: `https://llm.bankr.bot`) |
|
|
194
86
|
|
|
195
|
-
|
|
87
|
+
Read and set stored values with `bankr config get|set apiKey|apiUrl|llmKey|llmUrl`.
|
|
196
88
|
|
|
197
89
|
## License
|
|
198
90
|
|
package/dist/cli.js
CHANGED
|
@@ -17,7 +17,7 @@ import { launchCommand } from "./commands/launch.js";
|
|
|
17
17
|
import { launchQuotesCommand } from "./commands/launchQuotes.js";
|
|
18
18
|
import { loginCommand } from "./commands/login.js";
|
|
19
19
|
import { logoutCommand } from "./commands/logout.js";
|
|
20
|
-
import { promptCommand } from "./commands/prompt.js";
|
|
20
|
+
import { MAX_MODE_MODEL_EXAMPLE, promptCommand } from "./commands/prompt.js";
|
|
21
21
|
import { signCommand } from "./commands/sign.js";
|
|
22
22
|
import { soundsDisableCommand, soundsEnableCommand, soundsInstallCommand, soundsListCommand, soundsMuteCommand, soundsSearchCommand, soundsStatusCommand, soundsTestCommand, soundsUnmuteCommand, soundsUseCommand, soundsVolumeCommand, } from "./commands/sounds.js";
|
|
23
23
|
import { statusCommand } from "./commands/status.js";
|
|
@@ -27,7 +27,7 @@ import { whoamiCommand } from "./commands/whoami.js";
|
|
|
27
27
|
import { tokensSearchCommand, tokensInfoCommand } from "./commands/tokens.js";
|
|
28
28
|
import { x402InitCommand, x402AddCommand, x402ConfigureCommand, x402DeployCommand, x402ListCommand, x402PauseResumeCommand, x402DeleteCommand, x402RevenueCommand, x402EnvSetCommand, x402EnvListCommand, x402EnvUnsetCommand, x402SearchCommand, x402SchemaCommand, x402CallCommand, } from "./commands/x402.js";
|
|
29
29
|
import { webhooksInitCommand, webhooksAddCommand, webhooksDeployCommand, webhooksListCommand, webhooksPauseResumeCommand, webhooksDeleteCommand, webhooksLogsCommand, webhooksEnvSetCommand, webhooksEnvListCommand, webhooksEnvUnsetCommand, } from "./commands/webhooks.js";
|
|
30
|
-
import {
|
|
30
|
+
import { projectViewCommand, projectCreateCommand, projectUpdateCommand, projectDeleteCommand, projectAddUpdateCommand, } from "./commands/project.js";
|
|
31
31
|
import { filesListCommand, filesUploadCommand, filesDownloadCommand, filesMkdirCommand, filesRmCommand, filesStorageCommand, filesCatCommand, filesEditCommand, filesWriteCommand, filesSearchCommand, filesMvCommand, filesRenameCommand, filesInfoCommand, } from "./commands/files.js";
|
|
32
32
|
import { clubStatusCommand, clubSignupCommand, clubCancelCommand, } from "./commands/club.js";
|
|
33
33
|
import * as output from "./lib/output.js";
|
|
@@ -121,8 +121,8 @@ loginCmd
|
|
|
121
121
|
.command("email [address]")
|
|
122
122
|
.description("Sign in with email (sends verification code)")
|
|
123
123
|
.option("--code <otp>", "OTP code (step 2 of headless login)")
|
|
124
|
-
.option("--accept-terms", "Accept Terms of Service (skips prompt)")
|
|
125
|
-
.option("--key-name <name>", "API key name (default: CLI)")
|
|
124
|
+
.option("--accept-terms", "Accept Terms of Service (skips prompt; implied by headless login)")
|
|
125
|
+
.option("--key-name <name>", "API key name (default: CLI-<date>-<time>)")
|
|
126
126
|
.optionsGroup("API Permissions")
|
|
127
127
|
.option("--read-only", "Restrict the API key to read operations")
|
|
128
128
|
.option("--read-write", "Allow transactions (the default for new keys)")
|
|
@@ -300,10 +300,10 @@ walletSubmitCmd
|
|
|
300
300
|
program.commandsGroup("Agent");
|
|
301
301
|
const agentCmd = program
|
|
302
302
|
.command("agent [text...]")
|
|
303
|
-
.description("AI agent commands (prompt, status, cancel,
|
|
303
|
+
.description("AI agent commands (prompt, status, cancel, skills)")
|
|
304
304
|
.option("--thread <id>", "Continue a specific conversation thread")
|
|
305
305
|
.option("-c, --continue", "Continue the most recent thread")
|
|
306
|
-
.option("-m, --model <model>",
|
|
306
|
+
.option("-m, --model <model>", `Use Max Mode with a specific model (e.g. ${MAX_MODE_MODEL_EXAMPLE})`)
|
|
307
307
|
.action(async (text, opts, cmd) => {
|
|
308
308
|
opts.model ?? (opts.model = cmd.parent?.opts()?.model);
|
|
309
309
|
const joined = text.join(" ").trim();
|
|
@@ -321,7 +321,7 @@ agentCmd
|
|
|
321
321
|
.description("Send a prompt to the Bankr AI agent")
|
|
322
322
|
.option("--thread <id>", "Continue a specific conversation thread")
|
|
323
323
|
.option("-c, --continue", "Continue the most recent thread")
|
|
324
|
-
.option("-m, --model <model>",
|
|
324
|
+
.option("-m, --model <model>", `Use Max Mode with a specific model (e.g. ${MAX_MODE_MODEL_EXAMPLE})`)
|
|
325
325
|
.action(async (text, opts, cmd) => {
|
|
326
326
|
// Commander hoists --model to the parent when both define it;
|
|
327
327
|
// fall back to parent/grandparent opts so `bankr agent prompt --model` works.
|
|
@@ -332,6 +332,7 @@ agentCmd
|
|
|
332
332
|
agentCmd
|
|
333
333
|
.command("status <jobId>")
|
|
334
334
|
.description("Check the status of a job")
|
|
335
|
+
.option("-w, --wait", "Follow the job until it finishes, printing progress as it arrives")
|
|
335
336
|
.action(statusCommand);
|
|
336
337
|
agentCmd
|
|
337
338
|
.command("cancel <jobId>")
|
|
@@ -408,76 +409,6 @@ feesCmd
|
|
|
408
409
|
.option("--all", "Claim all tokens without selection prompt")
|
|
409
410
|
.option("-y, --yes", "Skip confirmation prompt")
|
|
410
411
|
.action(feesClaimWalletCommand);
|
|
411
|
-
// Profile under agent namespace
|
|
412
|
-
const profileCmd = agentCmd
|
|
413
|
-
.command("profile")
|
|
414
|
-
.description("Manage your agent profile page")
|
|
415
|
-
.option("--json", "Output raw JSON")
|
|
416
|
-
.action(async (opts) => {
|
|
417
|
-
await profileViewCommand({ json: opts.json });
|
|
418
|
-
});
|
|
419
|
-
profileCmd
|
|
420
|
-
.command("create")
|
|
421
|
-
.description("Create a new agent profile")
|
|
422
|
-
.option("--name <name>", "Project name")
|
|
423
|
-
.option("--description <text>", "Project description")
|
|
424
|
-
.option("--token <address>", "Token contract address")
|
|
425
|
-
.option("--image <url>", "Profile image URL")
|
|
426
|
-
.option("--website <url>", "Project website URL")
|
|
427
|
-
.option("--json", "Output raw JSON")
|
|
428
|
-
.action(async (opts) => {
|
|
429
|
-
await profileCreateCommand({
|
|
430
|
-
name: opts.name,
|
|
431
|
-
description: opts.description,
|
|
432
|
-
token: opts.token,
|
|
433
|
-
image: opts.image,
|
|
434
|
-
website: opts.website,
|
|
435
|
-
json: opts.json,
|
|
436
|
-
});
|
|
437
|
-
});
|
|
438
|
-
profileCmd
|
|
439
|
-
.command("update")
|
|
440
|
-
.description("Update your agent profile")
|
|
441
|
-
.option("--slug <slug>", "Project slug (required if multiple profiles)")
|
|
442
|
-
.option("--name <name>", "Project name")
|
|
443
|
-
.option("--description <text>", "Project description")
|
|
444
|
-
.option("--token <address>", "Token contract address")
|
|
445
|
-
.option("--image <url>", "Profile image URL")
|
|
446
|
-
.option("--website <url>", "Project website URL")
|
|
447
|
-
.option("--json", "Output raw JSON")
|
|
448
|
-
.action(async (opts) => {
|
|
449
|
-
await profileUpdateCommand({
|
|
450
|
-
slug: opts.slug,
|
|
451
|
-
name: opts.name,
|
|
452
|
-
description: opts.description,
|
|
453
|
-
token: opts.token,
|
|
454
|
-
image: opts.image,
|
|
455
|
-
website: opts.website,
|
|
456
|
-
json: opts.json,
|
|
457
|
-
});
|
|
458
|
-
});
|
|
459
|
-
profileCmd
|
|
460
|
-
.command("delete")
|
|
461
|
-
.description("Delete your agent profile")
|
|
462
|
-
.option("--slug <slug>", "Project slug (required if multiple profiles)")
|
|
463
|
-
.action(async (opts) => {
|
|
464
|
-
await profileDeleteCommand({ slug: opts.slug });
|
|
465
|
-
});
|
|
466
|
-
profileCmd
|
|
467
|
-
.command("add-update")
|
|
468
|
-
.description("Add a project update to your profile")
|
|
469
|
-
.option("--slug <slug>", "Project slug (required if multiple profiles)")
|
|
470
|
-
.option("--title <title>", "Update title")
|
|
471
|
-
.option("--content <text>", "Update content")
|
|
472
|
-
.option("--json", "Output raw JSON")
|
|
473
|
-
.action(async (opts) => {
|
|
474
|
-
await profileAddUpdateCommand({
|
|
475
|
-
slug: opts.slug,
|
|
476
|
-
title: opts.title,
|
|
477
|
-
content: opts.content,
|
|
478
|
-
json: opts.json,
|
|
479
|
-
});
|
|
480
|
-
});
|
|
481
412
|
program.commandsGroup("LLM");
|
|
482
413
|
const llmCmd = program
|
|
483
414
|
.command("llm")
|
|
@@ -637,76 +568,89 @@ program
|
|
|
637
568
|
deprecatedCmd("cancel", "agent cancel");
|
|
638
569
|
await cancelCommand(jobId);
|
|
639
570
|
});
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
.option("--token <address>", "Token contract address")
|
|
653
|
-
.option("--image <url>", "Profile image URL")
|
|
654
|
-
.option("--website <url>", "Project website URL")
|
|
655
|
-
.option("--json", "Output raw JSON")
|
|
656
|
-
.action(async (opts) => {
|
|
657
|
-
deprecatedCmd("profile create", "agent profile create");
|
|
658
|
-
await profileCreateCommand({
|
|
659
|
-
name: opts.name,
|
|
660
|
-
description: opts.description,
|
|
661
|
-
token: opts.token,
|
|
662
|
-
image: opts.image,
|
|
663
|
-
website: opts.website,
|
|
664
|
-
json: opts.json,
|
|
571
|
+
/**
|
|
572
|
+
* Registers the deprecated `profile` tree on `parent`. It runs the project
|
|
573
|
+
* commands; `oldPrefix` is the command path the warning tells users to drop.
|
|
574
|
+
*/
|
|
575
|
+
function registerProfileAlias(parent, oldPrefix) {
|
|
576
|
+
const aliasCmd = parent
|
|
577
|
+
.command("profile", { hidden: true })
|
|
578
|
+
.description("Deprecated: use `bankr project` instead")
|
|
579
|
+
.option("--json", "Output raw JSON")
|
|
580
|
+
.action(async (opts) => {
|
|
581
|
+
deprecatedCmd(oldPrefix, "project");
|
|
582
|
+
await projectViewCommand({ json: opts.json });
|
|
665
583
|
});
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
json: opts.json,
|
|
584
|
+
aliasCmd
|
|
585
|
+
.command("create")
|
|
586
|
+
.description("Deprecated: use `bankr project create`")
|
|
587
|
+
.option("--name <name>", "Project name")
|
|
588
|
+
.option("--description <text>", "Project description")
|
|
589
|
+
.option("--token <address>", "Token contract address")
|
|
590
|
+
.option("--image <url>", "Project image URL")
|
|
591
|
+
.option("--website <url>", "Project website URL")
|
|
592
|
+
.option("--json", "Output raw JSON")
|
|
593
|
+
.action(async (opts) => {
|
|
594
|
+
deprecatedCmd(`${oldPrefix} create`, "project create");
|
|
595
|
+
await projectCreateCommand({
|
|
596
|
+
name: opts.name,
|
|
597
|
+
description: opts.description,
|
|
598
|
+
token: opts.token,
|
|
599
|
+
image: opts.image,
|
|
600
|
+
website: opts.website,
|
|
601
|
+
json: opts.json,
|
|
602
|
+
});
|
|
686
603
|
});
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
604
|
+
aliasCmd
|
|
605
|
+
.command("update")
|
|
606
|
+
.description("Deprecated: use `bankr project update`")
|
|
607
|
+
.option("--slug <slug>", "Project slug")
|
|
608
|
+
.option("--name <name>", "Project name")
|
|
609
|
+
.option("--description <text>", "Project description")
|
|
610
|
+
.option("--token <address>", "Token contract address")
|
|
611
|
+
.option("--image <url>", "Project image URL")
|
|
612
|
+
.option("--website <url>", "Project website URL")
|
|
613
|
+
.option("--json", "Output raw JSON")
|
|
614
|
+
.action(async (opts) => {
|
|
615
|
+
deprecatedCmd(`${oldPrefix} update`, "project update");
|
|
616
|
+
await projectUpdateCommand({
|
|
617
|
+
slug: opts.slug,
|
|
618
|
+
name: opts.name,
|
|
619
|
+
description: opts.description,
|
|
620
|
+
token: opts.token,
|
|
621
|
+
image: opts.image,
|
|
622
|
+
website: opts.website,
|
|
623
|
+
json: opts.json,
|
|
624
|
+
});
|
|
708
625
|
});
|
|
709
|
-
|
|
626
|
+
aliasCmd
|
|
627
|
+
.command("delete")
|
|
628
|
+
.description("Deprecated: use `bankr project delete`")
|
|
629
|
+
.option("--slug <slug>", "Project slug")
|
|
630
|
+
.action(async (opts) => {
|
|
631
|
+
deprecatedCmd(`${oldPrefix} delete`, "project delete");
|
|
632
|
+
await projectDeleteCommand({ slug: opts.slug });
|
|
633
|
+
});
|
|
634
|
+
aliasCmd
|
|
635
|
+
.command("add-update")
|
|
636
|
+
.description("Deprecated: use `bankr project add-update`")
|
|
637
|
+
.option("--slug <slug>", "Project slug")
|
|
638
|
+
.option("--title <title>", "Update title")
|
|
639
|
+
.option("--content <text>", "Update content")
|
|
640
|
+
.option("--json", "Output raw JSON")
|
|
641
|
+
.action(async (opts) => {
|
|
642
|
+
deprecatedCmd(`${oldPrefix} add-update`, "project add-update");
|
|
643
|
+
await projectAddUpdateCommand({
|
|
644
|
+
slug: opts.slug,
|
|
645
|
+
title: opts.title,
|
|
646
|
+
content: opts.content,
|
|
647
|
+
json: opts.json,
|
|
648
|
+
});
|
|
649
|
+
});
|
|
650
|
+
}
|
|
651
|
+
// `bankr agent profile` (now `bankr project`) and the older top-level `bankr profile`.
|
|
652
|
+
registerProfileAlias(agentCmd, "agent profile");
|
|
653
|
+
registerProfileAlias(program, "profile");
|
|
710
654
|
program
|
|
711
655
|
.command("sign", { hidden: true })
|
|
712
656
|
.description("Deprecated: use `bankr wallet sign` instead")
|
|
@@ -861,6 +805,76 @@ clubCmd
|
|
|
861
805
|
.description("Cancel your Bankr Club subscription")
|
|
862
806
|
.option("-y, --yes", "Skip confirmation prompt")
|
|
863
807
|
.action(clubCancelCommand);
|
|
808
|
+
// ── Project Pages ─────────────────────────────────────────────
|
|
809
|
+
const projectCmd = program
|
|
810
|
+
.command("project")
|
|
811
|
+
.description("Manage your project page")
|
|
812
|
+
.option("--json", "Output raw JSON")
|
|
813
|
+
.action(async (opts) => {
|
|
814
|
+
await projectViewCommand({ json: opts.json });
|
|
815
|
+
});
|
|
816
|
+
projectCmd
|
|
817
|
+
.command("create")
|
|
818
|
+
.description("Create a new project")
|
|
819
|
+
.option("--name <name>", "Project name")
|
|
820
|
+
.option("--description <text>", "Project description")
|
|
821
|
+
.option("--token <address>", "Token contract address")
|
|
822
|
+
.option("--image <url>", "Project image URL")
|
|
823
|
+
.option("--website <url>", "Project website URL")
|
|
824
|
+
.option("--json", "Output raw JSON")
|
|
825
|
+
.action(async (opts) => {
|
|
826
|
+
await projectCreateCommand({
|
|
827
|
+
name: opts.name,
|
|
828
|
+
description: opts.description,
|
|
829
|
+
token: opts.token,
|
|
830
|
+
image: opts.image,
|
|
831
|
+
website: opts.website,
|
|
832
|
+
json: opts.json,
|
|
833
|
+
});
|
|
834
|
+
});
|
|
835
|
+
projectCmd
|
|
836
|
+
.command("update")
|
|
837
|
+
.description("Update your project")
|
|
838
|
+
.option("--slug <slug>", "Project slug (required if multiple projects)")
|
|
839
|
+
.option("--name <name>", "Project name")
|
|
840
|
+
.option("--description <text>", "Project description")
|
|
841
|
+
.option("--token <address>", "Token contract address")
|
|
842
|
+
.option("--image <url>", "Project image URL")
|
|
843
|
+
.option("--website <url>", "Project website URL")
|
|
844
|
+
.option("--json", "Output raw JSON")
|
|
845
|
+
.action(async (opts) => {
|
|
846
|
+
await projectUpdateCommand({
|
|
847
|
+
slug: opts.slug,
|
|
848
|
+
name: opts.name,
|
|
849
|
+
description: opts.description,
|
|
850
|
+
token: opts.token,
|
|
851
|
+
image: opts.image,
|
|
852
|
+
website: opts.website,
|
|
853
|
+
json: opts.json,
|
|
854
|
+
});
|
|
855
|
+
});
|
|
856
|
+
projectCmd
|
|
857
|
+
.command("delete")
|
|
858
|
+
.description("Delete your project")
|
|
859
|
+
.option("--slug <slug>", "Project slug (required if multiple projects)")
|
|
860
|
+
.action(async (opts) => {
|
|
861
|
+
await projectDeleteCommand({ slug: opts.slug });
|
|
862
|
+
});
|
|
863
|
+
projectCmd
|
|
864
|
+
.command("add-update")
|
|
865
|
+
.description("Add a project update to your project page")
|
|
866
|
+
.option("--slug <slug>", "Project slug (required if multiple projects)")
|
|
867
|
+
.option("--title <title>", "Update title")
|
|
868
|
+
.option("--content <text>", "Update content")
|
|
869
|
+
.option("--json", "Output raw JSON")
|
|
870
|
+
.action(async (opts) => {
|
|
871
|
+
await projectAddUpdateCommand({
|
|
872
|
+
slug: opts.slug,
|
|
873
|
+
title: opts.title,
|
|
874
|
+
content: opts.content,
|
|
875
|
+
json: opts.json,
|
|
876
|
+
});
|
|
877
|
+
});
|
|
864
878
|
// ── x402 Endpoint Hosting ─────────────────────────────────────────────
|
|
865
879
|
program.commandsGroup("Protocol");
|
|
866
880
|
const x402Cmd = program
|
|
@@ -1059,7 +1073,7 @@ program
|
|
|
1059
1073
|
.arguments("[text...]")
|
|
1060
1074
|
.option("--thread <id>", "Continue a specific conversation thread")
|
|
1061
1075
|
.option("-c, --continue", "Continue the most recent thread")
|
|
1062
|
-
.option("-m, --model <model>",
|
|
1076
|
+
.option("-m, --model <model>", `Use Max Mode with a specific model (e.g. ${MAX_MODE_MODEL_EXAMPLE})`)
|
|
1063
1077
|
.action(async (text, opts) => {
|
|
1064
1078
|
if (text.length === 0) {
|
|
1065
1079
|
if (output.isNonInteractive()) {
|