@visa/cli 4.1.0-rc.86 → 4.1.0-rc.88

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.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: pair-visa-agent
3
- description: Pair a Visa CLI v4 agent identity to this runtime. Present one authorization link and the full public request-key fingerprint to the human, then poll until the runtime's local Ed25519 identity is activated. Use when the user says "pair my agent", "enroll my Visa CLI", "connect my Visa agent", or "set up my agent identity".
3
+ description: Pair a Visa CLI v4 agent identity to this runtime. Present one authorization link, the returned public confirmation code, and the full public request-key fingerprint to the human, then poll until the runtime's local Ed25519 identity is activated. Use when the user says "pair my agent", "enroll my Visa CLI", "connect my Visa agent", or "set up my agent identity".
4
4
  compatibility: Needs the `visa` CLI (`npm i -g @visa/cli@rc`) — run `node scripts/setup.mjs` to install it if missing — plus network access to the Visa authorization service. Works in OpenClaw, Hermes, or any Agent Skills runtime.
5
5
  allowed-tools: Bash(visa:*) Bash(visa-cli:*) Bash(node:*) Bash(npm:*) Bash(npx:*)
6
6
  metadata:
@@ -134,9 +134,11 @@ Prefer structured output and parse it; never scrape prose.
134
134
  and `1` on a terminal failure.
135
135
 
136
136
  The start result includes protocol version `2`, `pairingId`, stable `agentId`, full
137
- `requestKeyFingerprint`, `browserUrl`, and expiry information. The activation result
138
- includes protocol version `2`, `pairingId`, stable `agentId`, the display name, and
139
- `identityKeyJkt`.
137
+ `requestKeyFingerprint`, `browserUrl`, and expiry information. Newer builds also return
138
+ `confirmationCode`, a short public code the browser review page displays for comparison.
139
+ Present it when the field is present and skip it when it is absent; an older server or CLI
140
+ simply omits it, which is not an error. The activation result includes protocol version
141
+ `2`, `pairingId`, stable `agentId`, the display name, and `identityKeyJkt`.
140
142
 
141
143
  ## Fastest path — one shot (`visa agent pair`)
142
144
 
@@ -147,14 +149,16 @@ from a single call, so the user types nothing after their initial request:
147
149
  visa agent pair --format json
148
150
  ```
149
151
 
150
- It returns `browserUrl`, `pairingId`, stable `agentId`, and the full public
151
- `requestKeyFingerprint` **immediately**. It starts a detached activation process only
152
- after the pending identity and private key are durable. Present the link and fingerprint
153
- for exact browser comparison. When `claiming` is `background`, activation completes after
154
- approval without another command; if it is `manual`, run the returned `recoveryCommand`
155
- after approval. Use the step-by-step flow below when `pair` is unavailable or when driving
156
- the plugin/MCP tools — `enroll_agent` action `start` reports the same `claiming` /
157
- `recoveryCommand` fields and starts the same detached poller.
152
+ It returns `browserUrl`, `pairingId`, stable `agentId`, the full public
153
+ `requestKeyFingerprint`, and on newer builds `confirmationCode` **immediately**. It
154
+ starts a detached activation process only after the pending identity and private key are
155
+ durable. Present the link, returned confirmation code, and fingerprint for browser
156
+ comparison; omit only a confirmation code the result did not provide. When `claiming` is `background`,
157
+ activation completes after approval without another command; if it is `manual`, run the
158
+ returned `recoveryCommand` after approval. Use the step-by-step flow
159
+ below when `pair` is unavailable or when driving the plugin/MCP tools — `enroll_agent`
160
+ action `start` reports the same `claiming` / `recoveryCommand` fields and starts the same
161
+ detached poller.
158
162
 
159
163
  ## Returning & already-connected — do NOT re-pair
160
164
 
@@ -265,7 +269,8 @@ dangerous). All spending is gated by the owner-approved local policy caps.
265
269
 
266
270
  - [ ] Start the pairing with `pair_agent_start`, `enroll_agent` action `start`, or
267
271
  `visa agent enroll --format json`.
268
- - [ ] Present the authorization URL, stable agent ID, and full public fingerprint to the human.
272
+ - [ ] Present the authorization URL, stable agent ID, full public fingerprint, and the
273
+ `confirmationCode` when the start result carries one, to the human.
269
274
  - [ ] Poll with `pair_agent_poll`, `enroll_agent` action `claim`, or
270
275
  `visa agent enroll-claim --format json`.
271
276
  - [ ] Report the stable `agentId` and that the identity is paired on this runtime.
@@ -290,11 +295,16 @@ should do next. An honest "approved but not yet activated — I'm still polling"
290
295
 
291
296
  Start once. If there is already a pending pairing, poll it before creating another.
292
297
 
293
- The result provides `browserUrl`, stable `agentId`, and `requestKeyFingerprint`. Show the
294
- URL as a bare, tappable value on its own line. Do not decorate it as a Markdown link or put
295
- it in a code span; chat clients reliably recognize the bare URL. Show the complete
296
- fingerprint without truncation and tell the human to approve only when every character
297
- matches the browser review page.
298
+ The result provides `browserUrl`, stable `agentId`, `requestKeyFingerprint`, and — on newer
299
+ builds — `confirmationCode`. Show the URL as a bare, tappable value on its own line. Do not
300
+ decorate it as a Markdown link or put it in a code span; chat clients reliably recognize the
301
+ bare URL. Show the complete fingerprint without truncation and tell the human to approve
302
+ only when every character matches the browser review page.
303
+
304
+ You are very often **not** in a terminal the human can see. Nothing you print to stdout
305
+ reaches them. Every value the browser asks them to compare has to appear in your reply, or
306
+ the comparison silently becomes "click approve and hope" — which is the whole failure this
307
+ step exists to prevent.
298
308
 
299
309
  Use this concise shape:
300
310
 
@@ -304,14 +314,25 @@ Use this concise shape:
304
314
  >
305
315
  > Stable agent ID: <agentId>
306
316
  >
317
+ > Confirmation code — this exact code should appear on the page:
318
+ > <confirmationCode>
319
+ >
307
320
  > Public request-key fingerprint — compare every character in the browser:
308
321
  > <requestKeyFingerprint, complete and untruncated>
309
322
  >
310
- > Approve only if the fingerprint matches. The link expires shortly — I'll keep watching
311
- > and confirm here the moment it activates.
312
-
313
- Do not ask the human for a code, secret, private key, token, or signed message. The URL,
314
- stable agent ID, and public fingerprint are review values, not claim credentials.
323
+ > Approve only if the code and fingerprint both match. The link expires shortly — I'll keep
324
+ > watching and confirm here the moment it activates.
325
+
326
+ Omit the confirmation-code line entirely when the start result has no `confirmationCode`;
327
+ never invent, derive, abbreviate, or reformat one.
328
+
329
+ Relaying these values **to** the human is required. Accepting one **from** the human is not:
330
+ do not ask them for a code, secret, private key, token, or signed message, and do not treat
331
+ anything they type back as approval. The URL, stable agent ID, confirmation code, and public
332
+ fingerprint are review values the human checks against their own authenticated browser
333
+ session. They are not claim credentials, they cannot approve a pairing, and they cannot
334
+ spend. Approval happens only in that browser session, and the only evidence of it is a poll
335
+ result of `activated`.
315
336
 
316
337
  **Do not end your turn here waiting to be told the human is done.** Presenting the link is
317
338
  not the end of the ceremony; go straight to the poll in §2 and drive it to a terminal
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visa/cli",
3
- "version": "4.1.0-rc.86",
3
+ "version": "4.1.0-rc.88",
4
4
  "description": "Visa CLI runtime for stable agent identity and separately authorized payment capabilities",
5
5
  "bin": {
6
6
  "visa-cli": "./bin/visa-cli.js",
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.86",
4
+ "version": "4.1.0-rc.88",
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.86",
12
+ "version": "4.1.0-rc.88",
13
13
  "transport": {
14
14
  "type": "stdio"
15
15
  },