@visa/cli 4.1.0-rc.2 → 4.1.0-rc.200

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 (76) hide show
  1. package/README.md +200 -226
  2. package/dist/checkout-engine/adapters/generic.d.ts +88 -0
  3. package/dist/checkout-engine/adapters/generic.js +526 -0
  4. package/dist/checkout-engine/adapters/index.d.ts +10 -0
  5. package/dist/checkout-engine/adapters/index.js +24 -0
  6. package/dist/checkout-engine/adapters/shopify.d.ts +55 -0
  7. package/dist/checkout-engine/adapters/shopify.js +514 -0
  8. package/dist/checkout-engine/adapters/stripe-like.d.ts +10 -0
  9. package/dist/checkout-engine/adapters/stripe-like.js +21 -0
  10. package/dist/checkout-engine/amount.d.ts +15 -0
  11. package/dist/checkout-engine/amount.js +72 -0
  12. package/dist/checkout-engine/browser-launch.d.ts +46 -0
  13. package/dist/checkout-engine/browser-launch.js +81 -0
  14. package/dist/checkout-engine/ceremony.d.ts +64 -0
  15. package/dist/checkout-engine/ceremony.js +261 -0
  16. package/dist/checkout-engine/cli-engine.d.ts +315 -0
  17. package/dist/checkout-engine/cli-engine.js +996 -0
  18. package/dist/checkout-engine/confirmed-merchants.d.ts +31 -0
  19. package/dist/checkout-engine/confirmed-merchants.js +165 -0
  20. package/dist/checkout-engine/detect.d.ts +61 -0
  21. package/dist/checkout-engine/detect.js +398 -0
  22. package/dist/checkout-engine/evidence.d.ts +25 -0
  23. package/dist/checkout-engine/evidence.js +104 -0
  24. package/dist/checkout-engine/executor.d.ts +215 -0
  25. package/dist/checkout-engine/executor.js +1520 -0
  26. package/dist/checkout-engine/hosted-approval.d.ts +195 -0
  27. package/dist/checkout-engine/hosted-approval.js +498 -0
  28. package/dist/checkout-engine/index.d.ts +9 -0
  29. package/dist/checkout-engine/index.js +11 -0
  30. package/dist/checkout-engine/instrument.d.ts +61 -0
  31. package/dist/checkout-engine/instrument.js +87 -0
  32. package/dist/checkout-engine/known-merchants.d.ts +10 -0
  33. package/dist/checkout-engine/known-merchants.js +38 -0
  34. package/dist/checkout-engine/live-fill-approval.d.ts +37 -0
  35. package/dist/checkout-engine/live-fill-approval.js +76 -0
  36. package/dist/checkout-engine/mandate/card-mandate.d.ts +121 -0
  37. package/dist/checkout-engine/mandate/card-mandate.js +227 -0
  38. package/dist/checkout-engine/mandate/mandate-ledger.d.ts +178 -0
  39. package/dist/checkout-engine/mandate/mandate-ledger.js +395 -0
  40. package/dist/checkout-engine/mandate.d.ts +25 -0
  41. package/dist/checkout-engine/mandate.js +100 -0
  42. package/dist/checkout-engine/outcome.d.ts +30 -0
  43. package/dist/checkout-engine/outcome.js +225 -0
  44. package/dist/checkout-engine/owner-only-file.d.ts +19 -0
  45. package/dist/checkout-engine/owner-only-file.js +41 -0
  46. package/dist/checkout-engine/package.json +3 -0
  47. package/dist/checkout-engine/receipt-dir.d.ts +6 -0
  48. package/dist/checkout-engine/receipt-dir.js +8 -0
  49. package/dist/checkout-engine/receipt.d.ts +121 -0
  50. package/dist/checkout-engine/receipt.js +138 -0
  51. package/dist/checkout-engine/trace-handles.d.ts +8 -0
  52. package/dist/checkout-engine/trace-handles.js +12 -0
  53. package/dist/checkout-engine/types.d.ts +52 -0
  54. package/dist/checkout-engine/types.js +2 -0
  55. package/dist/checkout-engine/unresolved-charges.d.ts +34 -0
  56. package/dist/checkout-engine/unresolved-charges.js +125 -0
  57. package/dist/checkout-engine/vgs-gateway/server-mint-client.d.ts +101 -0
  58. package/dist/checkout-engine/vgs-gateway/server-mint-client.js +218 -0
  59. package/dist/checkout-engine/vgs-live-instrument.d.ts +144 -0
  60. package/dist/checkout-engine/vgs-live-instrument.js +229 -0
  61. package/dist/checkout-engine/vic-confirmation.d.ts +52 -0
  62. package/dist/checkout-engine/vic-confirmation.js +45 -0
  63. package/dist/checkout-engine/web-bot-auth.d.ts +92 -0
  64. package/dist/checkout-engine/web-bot-auth.js +159 -0
  65. package/dist/cli.js +721 -445
  66. package/dist/mcp-apps/ucp-checkout.html +280 -0
  67. package/dist/mcp-server/index.js +573 -175
  68. package/dist/skills/pair-visa-agent/RUNTIMES.md +93 -0
  69. package/dist/skills/pair-visa-agent/SKILL.md +557 -0
  70. package/dist/skills/pair-visa-agent/scripts/setup.mjs +48 -0
  71. package/dist/subway-direct.mjs +1 -0
  72. package/install.ps1 +5 -43
  73. package/install.sh +5 -37
  74. package/native/bin/win32-x64/visa-keychain-win.exe +0 -0
  75. package/package.json +33 -25
  76. package/server.json +4 -4
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env node
2
+ // Portable provisioner for the pair-visa-agent skill.
3
+ //
4
+ // Ensures the `visa` CLI is installed so ANY Agent Skills runtime can pair —
5
+ // not just OpenClaw (whose `metadata.openclaw.install` auto-runs). Hermes,
6
+ // Claude Code, and any other agentskills.io-compatible runtime run this bundled
7
+ // script per the standard's `scripts/` execution stage.
8
+ //
9
+ // Safe to run repeatedly: it no-ops when `visa` already resolves. Pinned to @rc
10
+ // because the v4 agent surface is prerelease (the @latest tag predates the
11
+ // `visa agent` commands); drop the tag once 4.1.0 is promoted to latest.
12
+
13
+ import { execSync } from 'node:child_process'
14
+
15
+ function resolves(cmd) {
16
+ try {
17
+ execSync(`${cmd} --version`, { stdio: 'ignore' })
18
+ return true
19
+ } catch {
20
+ return false
21
+ }
22
+ }
23
+
24
+ if (resolves('visa') || resolves('visa-cli')) {
25
+ console.log('✓ visa CLI already installed — nothing to do. Run the pairing flow in SKILL.md.')
26
+ process.exit(0)
27
+ }
28
+
29
+ console.log('Installing @visa/cli@rc (the v4 agent surface is prerelease)…')
30
+ try {
31
+ execSync('npm install -g @visa/cli@rc', { stdio: 'inherit' })
32
+ } catch {
33
+ console.error(
34
+ 'Global install failed. Try `npm install -g @visa/cli@rc` manually (may need sudo, or set a\n' +
35
+ 'user-writable npm prefix: `npm config set prefix ~/.npm-global` and add its `bin` to PATH).'
36
+ )
37
+ process.exit(1)
38
+ }
39
+
40
+ if (!resolves('visa') && !resolves('visa-cli')) {
41
+ console.error(
42
+ 'Installed, but `visa` is not on PATH. Ensure your npm global bin dir is on PATH\n' +
43
+ '(`npm bin -g` shows it), then re-run this script.'
44
+ )
45
+ process.exit(1)
46
+ }
47
+
48
+ console.log('✓ visa CLI ready. Now run the pairing flow in SKILL.md.')
@@ -0,0 +1 @@
1
+ import{createLibp2p as x}from"libp2p";import{tcp as A}from"@libp2p/tcp";import{noise as E}from"@chainsafe/libp2p-noise";import{yamux as U}from"@chainsafe/libp2p-yamux";import{generateKeyPairFromSeed as b}from"@libp2p/crypto/keys";import{multiaddr as q}from"@multiformats/multiaddr";import{toString as D}from"uint8arrays/to-string";var m=new TextEncoder,R=new TextDecoder;function y(r,e){let n=typeof e=="bigint"?e:BigInt(e);for(;n>0x7fn;)r.push(Number(n&0x7fn|0x80n)),n>>=7n;r.push(Number(n))}function d(r,e){let n=0n,t=0n,o=e;for(;;){let s=r[o++];if(n|=BigInt(s&127)<<t,(s&128)===0)break;t+=7n}return[n,o]}function g(r,e){return r<<3|e}function f(r,e,n){r.push(g(e,2)),y(r,n.length);for(let t of n)r.push(t)}function M(r,e){let n=[];return f(n,1,m.encode(r)),e&&e.length>0&&f(n,2,m.encode(e)),Uint8Array.from(n)}function O(r,e,n){let t=[];return n!==0n&&(t.push(g(1,0)),y(t,n)),f(t,2,M(r,e)),Uint8Array.from(t)}function T(r){let e=[];return f(e,1,m.encode(r)),Uint8Array.from(e)}function P(r,e){let n=[];return e!==0n&&(n.push(g(1,0)),y(n,e)),f(n,3,T(r)),Uint8Array.from(n)}var S="Name not found";function L(r){let e=0,n={success:!1,error:""};for(;e<r.length;){let[t,o]=d(r,e);e=o;let s=Number(t)>>3,i=Number(t)&7;if(s===1&&i===0){let[u,l]=d(r,e);e=l,n.success=u!==0n}else if(s===2&&i===2){let[u,l]=d(r,e),a=l,c=a+Number(u);n.error=R.decode(r.subarray(a,c)),e=c}else e=h(r,e,i)}return n}function F(r){let e=0,n={peerId:new Uint8Array(0),error:""};for(;e<r.length;){let[t,o]=d(r,e);e=o;let s=Number(t)>>3,i=Number(t)&7;if(s===1&&i===2){let[u,l]=d(r,e),a=l,c=a+Number(u);n.peerId=r.subarray(a,c),e=c}else if(s===2&&i===2){let[u,l]=d(r,e),a=l,c=a+Number(u);n.error=R.decode(r.subarray(a,c)),e=c}else e=h(r,e,i)}return n}function h(r,e,n){if(n===0)return d(r,e)[1];if(n===2){let[t,o]=d(r,e);return o+Number(t)}if(n===5)return e+4;if(n===1)return e+8;throw new Error(`unsupported wire type ${n}`)}function v(r){let e=0,n={requestId:0n};for(;e<r.length;){let[t,o]=d(r,e);e=o;let s=Number(t)>>3,i=Number(t)&7;if(s===1&&i===0){let[u,l]=d(r,e);e=l,n.requestId=u}else if(s===13&&i===2){let[u,l]=d(r,e),a=l,c=a+Number(u);n.registerNameResponse=L(r.subarray(a,c)),e=c}else if(s===14&&i===2){let[u,l]=d(r,e),a=l,c=a+Number(u);n.resolveNameResponse=F(r.subarray(a,c)),e=c}else e=h(r,e,i)}return n}function B(r){let e=new Uint8Array(4+r.length);return new DataView(e.buffer).setUint32(0,r.length,!1),e.set(r,4),e}function w(r){return new DataView(r.buffer,r.byteOffset,4).getUint32(0,!1)}function V(r){if(r.length<4)return{success:!1,error:"short reply (no length prefix)"};let e=w(r.subarray(0,4));return r.length<4+e?{success:!1,error:`truncated frame (have ${r.length-4}, need ${e})`}:v(r.subarray(4,4+e)).registerNameResponse??{success:!1,error:"reply carried no register_name_response"}}function $(r){if(r.length<4)return{peerId:new Uint8Array(0),error:"short reply (no length prefix)"};let e=w(r.subarray(0,4));return r.length<4+e?{peerId:new Uint8Array(0),error:`truncated frame (have ${r.length-4}, need ${e})`}:v(r.subarray(4,4+e)).resolveNameResponse??{peerId:new Uint8Array(0),error:"reply carried no resolve_name_response"}}var k="/subway/p2p/1.0.0",Y=15e3,z=15e3,N=1<<20;function p(r){let e=r.reduce((o,s)=>o+s.length,0),n=new Uint8Array(e),t=0;for(let o of r)n.set(o,t),t+=o.length;return n}async function K(r){let e=[],n=0,t=-1;for await(let o of r){let s=o instanceof Uint8Array?o:o.subarray();if(e.push(s),n+=s.length,n>N)throw new Error("subway: reply exceeded max size");if(t<0&&n>=4&&(t=4+w(p(e).subarray(0,4)),t>N))throw new Error("subway: declared frame exceeds max size");if(t>=0&&n>=t)return p(e).subarray(0,t)}return p(e)}async function _(r){return x({...r?{privateKey:await b("Ed25519",r)}:{},transports:[A()],connectionEncrypters:[E()],streamMuxers:[U()],connectionGater:{denyDialMultiaddr:async()=>!1}})}async function I(r,e,n){let t=await r.dialProtocol(q(e),k,{signal:AbortSignal.timeout(Y)});t.send(B(n));let o;return Promise.race([K(t),new Promise((s,i)=>{o=setTimeout(()=>i(new Error("subway: request timed out")),z)})]).finally(()=>clearTimeout(o))}async function C(r){let e=await _(r.seed);try{let n=await I(e,r.relayMultiaddr,O(r.name,r.binding,r.requestId??1n)),t=V(n);return{success:t.success,error:t.error,peerId:e.peerId.toString()}}finally{await e.stop()}}async function G(r){let e=await _(r.seed);try{let n=await I(e,r.relayMultiaddr,P(r.name,r.requestId??1n)),t=$(n);if(t.peerId.length===0){let o=t.error||"name not found";return{outcome:o===S?"not_found":"lookup_failed",found:!1,peerId:"",error:o}}return{outcome:"found",found:!0,peerId:D(t.peerId,"base58btc"),error:""}}finally{await e.stop()}}export{C as registerDirect,G as resolveDirect};
package/install.ps1 CHANGED
@@ -108,8 +108,8 @@ try {
108
108
  }
109
109
 
110
110
  $major = [int]$nodeMatch.Groups['major'].Value
111
- if ($major -lt 18) {
112
- Write-Host " Node.js $nodeVersion is too old. Version 18+ required." -ForegroundColor Red
111
+ if ($major -lt 20) {
112
+ Write-Host " Node.js $nodeVersion is too old. Version 20+ required." -ForegroundColor Red
113
113
  Write-Host " Install from https://nodejs.org/ and try again." -ForegroundColor Yellow
114
114
  Wait-BeforeExit
115
115
  exit 1
@@ -168,7 +168,6 @@ if ($npmExitCode -ne 0) {
168
168
  # Verify
169
169
  $cliCommandNames = Get-InstalledCliCommands
170
170
  $verifiedCommand = $null
171
- $verifiedCommandPath = $null
172
171
  $visaVersion = $null
173
172
 
174
173
  foreach ($commandName in $cliCommandNames) {
@@ -177,12 +176,9 @@ foreach ($commandName in $cliCommandNames) {
177
176
  continue
178
177
  }
179
178
 
180
- # Capture the resolved executable path so the setup hand-off below runs
181
- # exactly the binary verified here, not a fresh PATH lookup.
182
179
  $versionOutput = (& $commandInfo.Source --version 2>$null | Select-Object -First 1)
183
180
  if ($LASTEXITCODE -eq 0 -and $versionOutput) {
184
181
  $verifiedCommand = $commandName
185
- $verifiedCommandPath = $commandInfo.Source
186
182
  $visaVersion = $versionOutput.Trim()
187
183
  break
188
184
  }
@@ -191,46 +187,12 @@ foreach ($commandName in $cliCommandNames) {
191
187
  Write-Host ""
192
188
  if ($verifiedCommand) {
193
189
  Write-Host " Visa CLI $visaVersion installed." -ForegroundColor Green
194
-
195
- # Hand off straight into setup so install -> setup -> signed-in is one
196
- # uninterrupted flow. Hardening:
197
- # * Auto-launch only on an interactive console with input/output/error
198
- # all attached - setup must prompt and open a browser. Redirected
199
- # streams and CI fall back to printing the next step.
200
- # * Invoke $verifiedCommandPath (the path verified just above), not a
201
- # bare command name re-resolved through PATH.
202
- # * Pass only the literal "setup" argument - nothing caller-controlled.
203
- if ($Host.Name -eq 'ConsoleHost' -and -not [Console]::IsInputRedirected -and -not [Console]::IsOutputRedirected -and -not [Console]::IsErrorRedirected -and -not $env:CI) {
204
- Write-Host ""
205
- Write-Host " Continuing to setup..." -ForegroundColor Cyan
206
- Write-Host ""
207
- try {
208
- $setupProcess = Start-Process -FilePath $verifiedCommandPath -ArgumentList @('setup') -Wait -NoNewWindow -PassThru -ErrorAction Stop
209
- } catch {
210
- Write-Host ""
211
- Write-Host " Setup could not start. Visa CLI is installed." -ForegroundColor Yellow
212
- Write-Host " PowerShell error: $($_.Exception.Message)" -ForegroundColor Yellow
213
- Write-Host " run '$verifiedCommand setup' when you're ready to finish." -ForegroundColor Yellow
214
- Wait-BeforeExit
215
- exit 1
216
- }
217
- if ($setupProcess.ExitCode -ne 0) {
218
- Write-Host ""
219
- Write-Host " Setup exited before completion. Visa CLI is installed." -ForegroundColor Yellow
220
- Write-Host " run '$verifiedCommand setup' when you're ready to finish." -ForegroundColor Yellow
221
- Wait-BeforeExit
222
- exit 1
223
- }
224
- exit 0
225
- } else {
226
- Write-Host " Run '$verifiedCommand setup' to get started." -ForegroundColor Cyan
227
- Write-Host " After setup, run /mcp inside Claude Code, not PowerShell, if Claude Code was already open." -ForegroundColor Cyan
228
- }
190
+ Write-Host " Connect an AI client with: $verifiedCommand connect <client>" -ForegroundColor Cyan
191
+ Write-Host " Then ask your agent to call enroll_agent." -ForegroundColor Cyan
229
192
  Write-Host ""
230
193
  } else {
231
194
  $primaryCommand = $cliCommandNames | Select-Object -First 1
232
195
  Write-Host " Installed but '$primaryCommand' was not runnable from PATH yet." -ForegroundColor Yellow
233
- Write-Host " Close and reopen PowerShell, then run: $primaryCommand setup" -ForegroundColor Yellow
234
- Write-Host " Run /mcp inside Claude Code after setup if you need to reconnect the MCP server." -ForegroundColor Yellow
196
+ Write-Host " Close and reopen PowerShell, then run: $primaryCommand connect <client>" -ForegroundColor Yellow
235
197
  Write-Host ""
236
198
  }
package/install.sh CHANGED
@@ -10,8 +10,8 @@
10
10
  _visa_install() {
11
11
  set -euo pipefail
12
12
 
13
- REQUIRED_NODE_MAJOR=18
14
- PACKAGE="@visa/cli"
13
+ REQUIRED_NODE_MAJOR=20
14
+ PACKAGE="@visa/cli@rc"
15
15
 
16
16
  # ── colours (disabled when piped) ─────────────────────────────────────────────
17
17
  if [ -t 1 ]; then
@@ -99,9 +99,6 @@ fi
99
99
  echo "$NPM_OUTPUT"
100
100
 
101
101
  # ── verify ────────────────────────────────────────────────────────────────────
102
- # Capture the absolute path resolved here so the setup hand-off below invokes
103
- # exactly the binary we just verified, instead of re-resolving "visa-cli"
104
- # through $PATH a second time.
105
102
  VISA_BIN=""
106
103
  VISA_VERSION=""
107
104
  if VISA_BIN="$(command -v visa-cli 2>/dev/null)"; then
@@ -111,40 +108,11 @@ fi
111
108
  echo ""
112
109
  if [ -n "$VISA_VERSION" ]; then
113
110
  ok "Visa CLI ${VISA_VERSION} installed."
114
- # Hand off straight into setup so install -> setup -> signed-in is one
115
- # uninterrupted flow. Hardening:
116
- # * Auto-launch only when output streams are real terminals and setup can
117
- # read from either stdin or /dev/tty. That keeps `curl ... | bash` usable:
118
- # the script arrives on stdin, while setup prompts still read from the
119
- # user's terminal. CI and redirected output print the next step instead.
120
- # * Invoke "$VISA_BIN" (the path verified just above), never a bare
121
- # "visa-cli" re-resolved through $PATH at call time.
122
- # * Pass only the literal "setup" argument — "$@" is never forwarded — so
123
- # nothing the script's caller controls reaches the installed binary.
124
- if [ -t 1 ] && [ -t 2 ] && { [ -t 0 ] || [ -r /dev/tty ]; }; then
125
- echo ""
126
- info "Continuing to setup..."
127
- echo ""
128
- SETUP_EXIT=0
129
- if [ -t 0 ]; then
130
- "$VISA_BIN" setup || SETUP_EXIT=$?
131
- else
132
- "$VISA_BIN" setup </dev/tty || SETUP_EXIT=$?
133
- fi
134
- if [ "$SETUP_EXIT" -ne 0 ]; then
135
- echo ""
136
- warn "Setup exited before completion. Visa CLI is installed."
137
- warn "run 'visa-cli setup' when you're ready to finish."
138
- exit 1
139
- fi
140
- exit 0
141
- else
142
- info "Run 'visa-cli setup' to get started."
143
- info "After setup, run /mcp inside Claude Code, not Terminal, if Claude Code was already open."
144
- fi
111
+ info "Connect an AI client with: visa-cli connect <client>"
112
+ info "Then ask your agent to call enroll_agent."
145
113
  else
146
114
  warn "Installed, but 'visa-cli' was not found on PATH."
147
- warn "You may need to restart your shell, then run: visa-cli setup"
115
+ warn "Restart your shell, then run: visa-cli connect <client>"
148
116
  fi
149
117
  echo ""
150
118
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@visa/cli",
3
- "version": "4.1.0-rc.2",
4
- "description": "AI-powered payments for Claude Code",
3
+ "version": "4.1.0-rc.200",
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",
7
7
  "visa": "./bin/visa-cli.js"
@@ -9,7 +9,7 @@
9
9
  "scripts": {
10
10
  "sync:server-json": "node scripts/sync-server-json.mjs",
11
11
  "check:server-json": "node scripts/sync-server-json.mjs --check",
12
- "prebuild": "node scripts/sync-server-json.mjs && pnpm --filter @visa/money build && pnpm --filter @visa/crypto build && pnpm --filter subway-sdk build && pnpm --filter @visa-cli/tools build && pnpm --filter @visa/identity build && pnpm --filter @visa/wallet build && pnpm --filter @visa/wallet-tools build",
12
+ "prebuild": "node scripts/sync-server-json.mjs && pnpm --filter @visa/shared build && pnpm --filter @visa/observability build && pnpm --filter @visa/money build && pnpm --filter @visa/crypto build && pnpm --filter subway-sdk build && pnpm --filter @visa-cli/tools build && pnpm --filter @visa/identity build && pnpm --filter @visa/wallet build && pnpm --filter @visa/agent-mail build && pnpm --filter @visa/wallet-tools build && pnpm --filter @visa/checkout-engine build",
13
13
  "build": "tsc --noEmit && node esbuild.config.js",
14
14
  "prepack": "node scripts/sync-server-json.mjs --check",
15
15
  "dev": "tsc --watch",
@@ -20,9 +20,9 @@
20
20
  "test:unit:watch": "jest --config jest.config.js --watch",
21
21
  "test:unit:coverage": "jest --config jest.config.js --coverage",
22
22
  "test:smoke": "VISA_AUTH_URL=https://auth.visacli.sh jest --config jest.smoke.config.js",
23
+ "test:packed": "node scripts/packed-cli-smoke.mjs",
23
24
  "test:integration": "jest --config jest.integration.config.js",
24
25
  "test:e2e": "jest --config jest.e2e.config.js",
25
- "test:catalog-e2e": "jest --config jest.catalog-e2e.config.js",
26
26
  "test:all": "npm run test:unit && npm run test:integration && npm run test:e2e",
27
27
  "prepublishOnly": "npm run build && npm test",
28
28
  "lint": "eslint src/**/*.ts",
@@ -42,45 +42,54 @@
42
42
  "author": "Visa Crypto Labs",
43
43
  "license": "SEE LICENSE IN LICENSE",
44
44
  "dependencies": {
45
- "@modelcontextprotocol/sdk": "^1.0.0",
45
+ "@modelcontextprotocol/core": "2.0.0",
46
+ "@modelcontextprotocol/ext-apps": "1.7.5",
47
+ "@modelcontextprotocol/server": "2.0.0",
48
+ "@ucp-js/sdk": "0.4.4",
46
49
  "commander": "^12.1.0",
47
- "zod": "^3.23.0"
50
+ "punycode": "^2.3.1",
51
+ "zod": "^3.25.76"
48
52
  },
49
53
  "optionalDependencies": {
50
- "libp2p": "^3.3.4",
51
- "@libp2p/tcp": "^11.0.22",
52
- "@libp2p/crypto": "^5.1.20",
53
54
  "@chainsafe/libp2p-noise": "^17.0.0",
54
55
  "@chainsafe/libp2p-yamux": "^8.0.1",
56
+ "@libp2p/crypto": "^5.1.22",
57
+ "@libp2p/tcp": "^11.0.26",
55
58
  "@multiformats/multiaddr": "^13.0.3",
59
+ "libp2p": "^3.3.8",
60
+ "playwright-core": "^1.48.2",
56
61
  "uint8arrays": "^6.1.1"
57
62
  },
58
63
  "devDependencies": {
64
+ "@changesets/changelog-git": "^0.2.1",
65
+ "@types/express": "^5.0.0",
66
+ "@changesets/cli": "^2.31.1",
67
+ "@types/jest": "^30.0.0",
68
+ "@types/node": "^26.1.0",
69
+ "@typescript-eslint/eslint-plugin": "^8.65.0",
70
+ "@typescript-eslint/parser": "^8.65.0",
71
+ "@visa-cli/tools": "workspace:*",
72
+ "@visa/agent-mail": "workspace:*",
73
+ "@visa/checkout-engine": "workspace:*",
59
74
  "@visa/crypto": "workspace:*",
60
- "subway-sdk": "workspace:*",
75
+ "@visa/identity": "workspace:*",
61
76
  "@visa/money": "workspace:*",
77
+ "@visa/observability": "workspace:*",
78
+ "@visa/shared": "workspace:*",
62
79
  "@visa/wallet": "workspace:*",
63
80
  "@visa/wallet-tools": "workspace:*",
64
- "@visa/observability": "workspace:*",
65
- "@visa-cli/tools": "workspace:*",
66
- "@changesets/changelog-git": "^0.2.1",
67
- "@changesets/cli": "^2.31.0",
68
- "@types/jest": "^30.0.0",
69
- "@types/node": "^26.1.0",
70
- "@typescript-eslint/eslint-plugin": "^8.63.0",
71
- "@typescript-eslint/parser": "^8.63.0",
72
- "@types/express": "^5.0.0",
73
81
  "esbuild": "^0.28.1",
74
- "express": "^4.21.0",
75
82
  "eslint": "^10.0.2",
76
83
  "eslint-config-prettier": "^10.1.8",
84
+ "express": "^4.21.0",
77
85
  "jest": "^29.7.0",
78
- "prettier": "^3.9.4",
79
- "ts-jest": "^29.4.11",
86
+ "prettier": "^3.9.6",
87
+ "subway-sdk": "workspace:*",
88
+ "ts-jest": "^29.4.12",
80
89
  "typescript": "^5.7.0"
81
90
  },
82
91
  "engines": {
83
- "node": ">=18.0.0"
92
+ "node": ">=20.0.0"
84
93
  },
85
94
  "mcpName": "io.github.visa-crypto-labs/visa-cli",
86
95
  "files": [
@@ -93,7 +102,6 @@
93
102
  "native/build-win.bat",
94
103
  "native/bin/win32-x64/visa-keychain-win.exe",
95
104
  "server.json",
96
- "README.md",
97
- "LICENSE"
105
+ "README.md"
98
106
  ]
99
107
  }
package/server.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
- "$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
2
+ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
3
  "name": "io.github.visa-crypto-labs/visa-cli",
4
- "version": "4.1.0-rc.2",
4
+ "version": "4.1.0-rc.200",
5
5
  "title": "Visa CLI",
6
- "description": "AI-powered payments and creative tools for coding agents. Generate images, music, video, query crypto prices, and make purchases all from your AI coding assistant.",
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",
8
8
  "packages": [
9
9
  {
10
10
  "registryType": "npm",
11
11
  "identifier": "@visa/cli",
12
- "version": "4.1.0-rc.2",
12
+ "version": "4.1.0-rc.200",
13
13
  "transport": {
14
14
  "type": "stdio"
15
15
  },