@visa/cli 4.1.0-rc.65 → 4.1.0-rc.67
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/dist/checkout-engine/cli-engine.d.ts +14 -0
- package/dist/checkout-engine/cli-engine.js +45 -3
- package/dist/cli.js +323 -294
- package/dist/mcp-server/index.js +251 -226
- package/dist/skills/pair-visa-agent/SKILL.md +66 -20
- package/native/bin/win32-x64/visa-keychain-win.exe +0 -0
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -6,7 +6,7 @@ allowed-tools: Bash(visa:*) Bash(visa-cli:*) Bash(node:*) Bash(npm:*) Bash(npx:*
|
|
|
6
6
|
metadata:
|
|
7
7
|
author: visa
|
|
8
8
|
homepage: https://visacli.sh/agents
|
|
9
|
-
version: '0.6.
|
|
9
|
+
version: '0.6.7'
|
|
10
10
|
# OpenClaw-namespaced extension (agentskills.io keeps `metadata` free-form, so
|
|
11
11
|
# non-standard runtime config lives here — `user-invocable` is not a standard
|
|
12
12
|
# top-level field). OpenClaw auto-installs `install[]` when `requires.bins` are
|
|
@@ -165,15 +165,20 @@ possible (re-pairing an existing identity silently dead-ends). Do this instead:
|
|
|
165
165
|
Read the name from the response. Do **not** start another hand-off. `--new` /
|
|
166
166
|
`force:true` exists only if they explicitly want a _second, separate_ agent.
|
|
167
167
|
2. **Report status honestly — "connected" is five separate things**, not one. Never
|
|
168
|
-
imply the agent can spend just because it's connected
|
|
168
|
+
imply the agent can spend just because it's connected. Don't guess from prose —
|
|
169
|
+
read it live from tools: `agent_capabilities` returns the DERIVED capability map
|
|
170
|
+
(the identity + wallet + mail base plus card/tap/subway availability),
|
|
171
|
+
`get_status` reports enrollment / account / version, and `agent_login` establishes
|
|
172
|
+
or confirms the account session that spending grants require.
|
|
169
173
|
- **Identity** — connected (`.visa` name bound to _this user's_ account). ✓ once `already_connected`.
|
|
170
|
-
- **Spending** — a _separate human approval_, and there are two rails
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
174
|
+
- **Spending** — a _separate human approval_, and there are two rails, each
|
|
175
|
+
approved on the **v4 agent dashboard** (`app.visacli.sh/agent/enroll`) — not any
|
|
176
|
+
account-settings page (that legacy surface is retired). The Turnkey
|
|
177
|
+
**wallet:x402** rail (stablecoin) is approved with the owner's **sign-in session**
|
|
178
|
+
(the Google/email auth-proxy) — **no passkey**. The **card:vic** rail is approved
|
|
179
|
+
with a **passkey**. You **cannot** self-grant either; there is no
|
|
180
|
+
`visa agent add-rail` command, and never self-mint a wallet with `wallet_init` on
|
|
181
|
+
mainnet — it throws until the owner's delegation lands.
|
|
177
182
|
- **Mesh (`.visa` messaging)** — with `SUBWAY_MESH=visa`, a returning device now
|
|
178
183
|
registers on `pair`; if `meshRegistered` is false, `visa register <name>` joins it.
|
|
179
184
|
- **Trusted (TAP)** — follows spend/provisioning; don't promise it before then.
|
|
@@ -193,24 +198,40 @@ never self-mints it. On mainnet (production) `wallet_init` throws
|
|
|
193
198
|
setup step. Follow this sequence:
|
|
194
199
|
|
|
195
200
|
- [ ] **Pair** the identity (the flow above). Identity only — no wallet yet.
|
|
201
|
+
- [ ] **Sign in the account session FIRST.** Wallet delegation is an account
|
|
202
|
+
operation, so this runtime needs a live owner session before `grant-wallet`:
|
|
203
|
+
`agent_login` (MCP) or `visa agent login` (CLI). Without a session the grant has
|
|
204
|
+
no account to delegate from.
|
|
196
205
|
- [ ] **Resolve the next step** with `setup_agent` (`{"rail":"wallet"}`), or drive the
|
|
197
|
-
raw `visa agent grant-wallet <agentId>` ceremony. `setup_agent`
|
|
198
|
-
|
|
199
|
-
self-mint.
|
|
200
|
-
- [ ] **Owner approves the wallet.** The human
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
and writes the delegated Turnkey credential
|
|
204
|
-
You cannot approve on their behalf.
|
|
206
|
+
raw `visa agent grant-wallet <agentId>` ceremony. `setup_agent` sequences
|
|
207
|
+
identity → wallet → policy → ready and points at the owner-approval grant — it
|
|
208
|
+
does not tell you to self-mint.
|
|
209
|
+
- [ ] **Owner approves the wallet.** The human confirms the wallet grant on the **v4
|
|
210
|
+
agent dashboard** (`app.visacli.sh/agent/enroll`), approving with their **sign-in
|
|
211
|
+
session — no passkey** — and confirming the caps. That approval registers the
|
|
212
|
+
delegated Turnkey signer + caps and writes the delegated Turnkey credential
|
|
213
|
+
(`turnkey.json`) to this runtime. You cannot approve on their behalf.
|
|
205
214
|
- [ ] **Confirm the real wallet** with `wallet_status` (or `visa wallet show`). Only a
|
|
206
215
|
provisioned/delegated credential — not the served tool list — means the wallet is
|
|
207
216
|
usable; `agent_capabilities.wallet.available` reflects this.
|
|
217
|
+
- [ ] **Set the spend policy** with `wallet_policy_set` — per-transaction / daily /
|
|
218
|
+
session USD caps (plus optional network and merchant allow/deny lists) that refuse
|
|
219
|
+
any x402 payment BEFORE it is signed. This is the `policy` step in the
|
|
220
|
+
`setup_agent` chain, between a delegated wallet and spending.
|
|
208
221
|
- [ ] **Spend** with `wallet_pay` (x402), enforced by the owner-approved local policy
|
|
209
222
|
caps. Never raise a human-approved limit yourself.
|
|
210
223
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
224
|
+
Once the wallet is delegated and a policy is set, these are the served wallet tools this
|
|
225
|
+
agent can actually call: `wallet_discover` (search the public x402 Bazaar),
|
|
226
|
+
`wallet_probe` (read a challenge without paying), `wallet_pay` / `wallet_directory_pay`
|
|
227
|
+
(pay, policy-enforced), `wallet_history` / `wallet_reconcile` (local ledger + resolve
|
|
228
|
+
`reconciling` holds), `wallet_fund` (funding address + faucet), and `wallet_export`
|
|
229
|
+
(export key material — dangerous). All spending is gated by the owner-approved local
|
|
230
|
+
policy caps.
|
|
231
|
+
|
|
232
|
+
Card checkout is a separate upgrade on top of this Turnkey-only base — approve a card on
|
|
233
|
+
the **v4 agent dashboard** (`app.visacli.sh/agent/enroll`) with a **passkey**, then
|
|
234
|
+
`start_card_mandate` / `pay_merchant` draw against it. Neither rail is enabled by pairing.
|
|
214
235
|
|
|
215
236
|
## Core flow
|
|
216
237
|
|
|
@@ -300,6 +321,31 @@ a reachable `SUBWAY_RELAY_MULTIADDR`. If those tools or the relay are unavailabl
|
|
|
300
321
|
that clearly and stop. Do not imply that identity pairing alone granted directory or
|
|
301
322
|
messaging authority, and do not improvise another transport.
|
|
302
323
|
|
|
324
|
+
## Optional agent mailbox (separate from pairing)
|
|
325
|
+
|
|
326
|
+
Pairing does not provision an email address or inbox. If the agent needs a
|
|
327
|
+
mailbox — e.g. to receive a merchant's account-signup or one-time-code email —
|
|
328
|
+
connect one explicitly, from the paired runtime, with the raw CLI:
|
|
329
|
+
|
|
330
|
+
```
|
|
331
|
+
visa agent mail-connect <agentId>
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
This is CLI-only; no pairing step or MCP tool connects a mailbox. It requires an
|
|
335
|
+
already-paired stable-agent identity on this runtime — it reads the local agent
|
|
336
|
+
record and proves the Ed25519 identity to the service. It issues the stable
|
|
337
|
+
agent mailbox if one does not exist, then stores an inbox-scoped credential in an
|
|
338
|
+
owner-only `0600` runtime file so this runtime can read that one inbox.
|
|
339
|
+
|
|
340
|
+
Be honest about scope. A mailbox grants an email address and the ability to read
|
|
341
|
+
that inbox — nothing more. It is **not** identity, a wallet, spend authority, a
|
|
342
|
+
card, or a `.visa` name, and it never authorizes a payment. Do not claim pairing
|
|
343
|
+
set up mail. Once connected, the MCP `wallet_mail_status`, `wallet_mail_read`,
|
|
344
|
+
and `wallet_mail_await_otp` tools read the inbox (e.g. to await a sender-checked
|
|
345
|
+
one-time code); without the scoped credential those reads fail closed. Keep the
|
|
346
|
+
org-wide AgentMail key off the runtime — provisioning happens only through
|
|
347
|
+
`mail-connect` under operator control.
|
|
348
|
+
|
|
303
349
|
## Optional checkout profile (separate from pairing)
|
|
304
350
|
|
|
305
351
|
Pairing does not enable card checkout. If the operator has separately provisioned card
|
|
Binary file
|
package/package.json
CHANGED
package/server.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
|
|
3
3
|
"name": "io.github.visa-crypto-labs/visa-cli",
|
|
4
|
-
"version": "4.1.0-rc.
|
|
4
|
+
"version": "4.1.0-rc.67",
|
|
5
5
|
"title": "Visa CLI",
|
|
6
6
|
"description": "Pair a human-approved agent identity, configure payment capabilities separately, and discover and pay x402 services from your AI coding assistant.",
|
|
7
7
|
"websiteUrl": "https://github.com/Visa-Crypto-Labs/Visa-mono/tree/main/packages/cli#readme",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
{
|
|
10
10
|
"registryType": "npm",
|
|
11
11
|
"identifier": "@visa/cli",
|
|
12
|
-
"version": "4.1.0-rc.
|
|
12
|
+
"version": "4.1.0-rc.67",
|
|
13
13
|
"transport": {
|
|
14
14
|
"type": "stdio"
|
|
15
15
|
},
|