@xona-labs/xpay 0.2.23 → 0.2.25
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/CHANGELOG.md +133 -76
- package/README.md +95 -71
- package/SKILL.md +29 -22
- package/dist/agenc/api.d.ts +8 -8
- package/dist/agenc/api.js +11 -11
- package/dist/agenc/hire.d.ts +4 -4
- package/dist/agenc/hire.js +17 -17
- package/dist/agenc/price.d.ts +1 -1
- package/dist/agenc/price.js +1 -1
- package/dist/biometric/index.d.ts +3 -3
- package/dist/biometric/index.js +6 -6
- package/dist/cli/accounts.d.ts +1 -1
- package/dist/cli/accounts.js +1 -1
- package/dist/cli/agenc.d.ts +2 -2
- package/dist/cli/agenc.js +4 -4
- package/dist/cli/balance.d.ts +1 -1
- package/dist/cli/balance.d.ts.map +1 -1
- package/dist/cli/balance.js +11 -10
- package/dist/cli/balance.js.map +1 -1
- package/dist/cli/bento.d.ts +3 -3
- package/dist/cli/bento.js +8 -8
- package/dist/cli/bento.js.map +1 -1
- package/dist/cli/biometric.d.ts +1 -1
- package/dist/cli/biometric.js +8 -8
- package/dist/cli/common.js +6 -6
- package/dist/cli/common.js.map +1 -1
- package/dist/cli/discover.d.ts +2 -2
- package/dist/cli/discover.js +10 -4
- package/dist/cli/discover.js.map +1 -1
- package/dist/cli/guardrail.d.ts +1 -1
- package/dist/cli/guardrail.js +3 -3
- package/dist/cli/index.d.ts +2 -2
- package/dist/cli/index.js +12 -12
- package/dist/cli/init.d.ts +1 -1
- package/dist/cli/init.js +2 -2
- package/dist/cli/magicblock.d.ts +1 -1
- package/dist/cli/magicblock.js +4 -4
- package/dist/cli/mcp-server.d.ts +2 -2
- package/dist/cli/mcp-server.js +21 -21
- package/dist/cli/pay.d.ts +1 -1
- package/dist/cli/pay.js +1 -1
- package/dist/cli/report.d.ts +2 -2
- package/dist/cli/report.js +4 -4
- package/dist/cli/report.js.map +1 -1
- package/dist/cli/sana.d.ts +1 -1
- package/dist/cli/sana.js +3 -3
- package/dist/cli/shop.d.ts +1 -1
- package/dist/cli/shop.js +1 -1
- package/dist/cli/swap.d.ts +1 -1
- package/dist/cli/swap.js +3 -3
- package/dist/cli/token.d.ts +2 -2
- package/dist/cli/token.js +2 -2
- package/dist/cli/trade.d.ts +2 -2
- package/dist/cli/trade.js +8 -8
- package/dist/cli/trade.js.map +1 -1
- package/dist/cli/transfer.d.ts +1 -1
- package/dist/cli/transfer.js +1 -1
- package/dist/cli/x.d.ts +1 -1
- package/dist/cli/x.js +1 -1
- package/dist/cli/zauth.d.ts +1 -1
- package/dist/cli/zauth.js +5 -5
- package/dist/discover/cache.js +1 -1
- package/dist/discover/index.d.ts +2 -2
- package/dist/discover/index.d.ts.map +1 -1
- package/dist/discover/index.js +21 -7
- package/dist/discover/index.js.map +1 -1
- package/dist/discover/orbitx402.d.ts +2 -2
- package/dist/discover/orbitx402.js +1 -1
- package/dist/discover/payai.js +1 -1
- package/dist/do/index.d.ts +2 -2
- package/dist/do/index.js +1 -1
- package/dist/guardrail/index.d.ts +4 -4
- package/dist/guardrail/index.js +14 -14
- package/dist/guardrail/index.js.map +1 -1
- package/dist/index.d.ts +7 -7
- package/dist/index.js +2 -2
- package/dist/magicblock/client.d.ts +2 -2
- package/dist/magicblock/client.js +4 -4
- package/dist/profile/index.d.ts +3 -3
- package/dist/profile/index.d.ts.map +1 -1
- package/dist/profile/index.js +13 -4
- package/dist/profile/index.js.map +1 -1
- package/dist/profile/storage.d.ts +1 -1
- package/dist/profile/storage.js +4 -4
- package/dist/profile/types.d.ts +6 -6
- package/dist/profile/types.js +1 -1
- package/dist/report/index.d.ts +1 -1
- package/dist/report/index.js +2 -2
- package/dist/sana/tools.js +8 -8
- package/dist/signers/raw-evm.d.ts +1 -1
- package/dist/signers/raw-evm.d.ts.map +1 -1
- package/dist/signers/raw-evm.js +22 -7
- package/dist/signers/raw-evm.js.map +1 -1
- package/dist/signers/raw-solana.d.ts +1 -1
- package/dist/signers/raw-solana.js +4 -4
- package/dist/swap/index.d.ts +6 -6
- package/dist/swap/index.js +12 -12
- package/dist/token/index.d.ts +8 -8
- package/dist/token/index.js +14 -14
- package/dist/token/rwa.d.ts +3 -3
- package/dist/token/rwa.js +3 -3
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +46 -41
- package/dist/tools/index.js.map +1 -1
- package/dist/trading/discovery.d.ts +6 -6
- package/dist/trading/discovery.js +7 -7
- package/dist/trading/index.d.ts +6 -6
- package/dist/trading/index.js +13 -13
- package/dist/transfer/index.d.ts +6 -5
- package/dist/transfer/index.d.ts.map +1 -1
- package/dist/transfer/index.js +41 -21
- package/dist/transfer/index.js.map +1 -1
- package/dist/types.d.ts +10 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/use/index.d.ts +5 -5
- package/dist/use/index.js +24 -20
- package/dist/use/index.js.map +1 -1
- package/dist/wallet/index.d.ts +2 -2
- package/dist/wallet/index.d.ts.map +1 -1
- package/dist/wallet/index.js +5 -3
- package/dist/wallet/index.js.map +1 -1
- package/dist/x402/evm-payment.d.ts +4 -4
- package/dist/x402/evm-payment.d.ts.map +1 -1
- package/dist/x402/evm-payment.js +7 -6
- package/dist/x402/evm-payment.js.map +1 -1
- package/dist/x402/extract.d.ts +1 -1
- package/dist/x402/extract.js +1 -1
- package/dist/x402/svm-payment.d.ts +2 -2
- package/dist/x402/svm-payment.js +2 -2
- package/dist/zauth/index.d.ts +4 -4
- package/dist/zauth/index.js +5 -5
- package/package.json +6 -3
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,63 @@ versioning follows [Semantic Versioning](https://semver.org/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.2.25] – 2026-08-07
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
- **Rebranded to Xona Wallet.** The product name in the README, SKILL.md, and
|
|
13
|
+
on the site is now "Xona Wallet". The SDK surface is deliberately unchanged:
|
|
14
|
+
the npm package is still `@xona-labs/xpay`, the CLI is still `xpay`, the MCP
|
|
15
|
+
tools are still `xpay_*`, and the registry entry is still
|
|
16
|
+
`io.github.xona-labs/xpay`. Nothing to migrate.
|
|
17
|
+
- Site moved from `xpay.xona-agent.com` to `wallet.xona-agent.com`. The npm
|
|
18
|
+
`homepage` and the registry `websiteUrl` point at the new domain. The hosted
|
|
19
|
+
MCP endpoint is now `https://wallet.xona-agent.com/mcp`.
|
|
20
|
+
- Registry and npm metadata now carry the brand: `server.json` description is
|
|
21
|
+
"Xona Wallet: agent wallet for AI agents..." (82 chars, under the registry's
|
|
22
|
+
100-char cap) and `xona-wallet` was added to the npm keywords. The former
|
|
23
|
+
name stays indexed on the site, since every existing link says xpay.
|
|
24
|
+
- Copy no longer uses em-dashes anywhere: docs, site, code comments, and
|
|
25
|
+
user-facing strings such as CLI output and error messages.
|
|
26
|
+
|
|
27
|
+
### Note
|
|
28
|
+
- 0.2.24 shipped to npm but was never tagged `v0.2.24`, so the MCP Registry
|
|
29
|
+
never picked it up and stayed on 0.2.23. Tagging `v0.2.25` carries both the
|
|
30
|
+
Stable chain release and this one to the registry in a single publish.
|
|
31
|
+
|
|
32
|
+
## [0.2.24] – 2026-08-07
|
|
33
|
+
|
|
34
|
+
### Added
|
|
35
|
+
- **Stable chain (eip155:988) as a first-class wallet network.** xpay is now
|
|
36
|
+
an agent wallet on Tether/Bitfinex's payments L1, matching xona's
|
|
37
|
+
`/stable/*` x402 route family. It settles **USDT0**
|
|
38
|
+
(`0x779Ded0c9e1022225f8E0630b35a9b54bE713736`, 6 decimals as an ERC-20)
|
|
39
|
+
rather than USDC.
|
|
40
|
+
- A Stable signer is registered on every profile from the existing derived
|
|
41
|
+
EVM key, same treatment as Robinhood Chain, so `stable` works without
|
|
42
|
+
re-running `xpay init` or editing `networks`.
|
|
43
|
+
- `xpay balance` / `xpay_balance` show a `stable` row: USDT0 plus the native
|
|
44
|
+
USDT gas coin (18 decimals, listed separately since the two share a name).
|
|
45
|
+
USDT0 counts toward the stablecoin total.
|
|
46
|
+
- Payment routing: a 402 quoting `eip155:988` resolves to the Stable signer,
|
|
47
|
+
and the balance-aware picker compares USDT0 against the quoted price.
|
|
48
|
+
Payment stays gasless - the EIP-3009 typed-data path reads USDT0's EIP-712
|
|
49
|
+
domain (`USDT0` / `1`) from the live challenge's `extra`, which is the only
|
|
50
|
+
reliable source since `version()` and `eip712Domain()` revert on that
|
|
51
|
+
contract.
|
|
52
|
+
- `xpay transfer --network stable` sends USDT0. Accepts `USDT0`, `USDT`, or
|
|
53
|
+
`USDC` as the token name on that chain.
|
|
54
|
+
- RPC override via profile `rpcs.stable` (default `https://rpc.stable.xyz`).
|
|
55
|
+
|
|
56
|
+
### Fixed
|
|
57
|
+
- `discover({ networks })` / `--network` now resolve named EVM slugs to the
|
|
58
|
+
CAIP-2 ids catalogs actually publish. `--network base` previously matched
|
|
59
|
+
nothing, since every EVM listing carries `eip155:8453`.
|
|
60
|
+
- EVM network auto-detection in `transfer` now considers only networks the
|
|
61
|
+
profile opted into, instead of a hardcoded list. Always-registered signers
|
|
62
|
+
(Robinhood, Stable) no longer make every EVM transfer ambiguous, and a
|
|
63
|
+
profile configured for an EVM chain outside the old literal is no longer
|
|
64
|
+
reported as having no EVM signer.
|
|
65
|
+
|
|
9
66
|
## [0.2.23] – 2026-08-02
|
|
10
67
|
|
|
11
68
|
### Added
|
|
@@ -75,7 +132,7 @@ versioning follows [Semantic Versioning](https://semver.org/).
|
|
|
75
132
|
boots in a **locked mode** instead: the connection succeeds, all tools are
|
|
76
133
|
listed, and every call returns an actionable error telling the user exactly
|
|
77
134
|
how to unlock (add `XPAY_PASSPHRASE` to the server's `env` in the host
|
|
78
|
-
config, or `xpay biometric enable` on macOS)
|
|
135
|
+
config, or `xpay biometric enable` on macOS) - which the agent can relay
|
|
79
136
|
in-chat. Any other boot failure also falls back to locked mode with the
|
|
80
137
|
underlying error, instead of killing the connection.
|
|
81
138
|
|
|
@@ -93,8 +150,8 @@ versioning follows [Semantic Versioning](https://semver.org/).
|
|
|
93
150
|
### Fixed
|
|
94
151
|
- **EVM x402 payments demanded native ETH gas despite the scheme being
|
|
95
152
|
gasless.** Paying an `eip155:*` endpoint (e.g. xona's Base video routes)
|
|
96
|
-
went through the legacy v1 path
|
|
97
|
-
from the wallet
|
|
153
|
+
went through the legacy v1 path, a literal `erc20.transfer()` broadcast
|
|
154
|
+
from the wallet, so gasless agent wallets died with "insufficient funds
|
|
98
155
|
for intrinsic transaction cost". EVM now gets the same canonical v2
|
|
99
156
|
treatment Solana has had since 0.1.4: the client signs an off-chain
|
|
100
157
|
EIP-3009 `transferWithAuthorization` (EIP-712), sends it in `X-Payment`,
|
|
@@ -102,14 +159,14 @@ versioning follows [Semantic Versioning](https://semver.org/).
|
|
|
102
159
|
|
|
103
160
|
### Added
|
|
104
161
|
- `Signer.signEvmTypedData` (optional capability, implemented by
|
|
105
|
-
`rawEvmSigner`)
|
|
162
|
+
`rawEvmSigner`) - EIP-712 typed-data signing; custom KMS/MPC signers can
|
|
106
163
|
implement it to opt into gasless EVM payments.
|
|
107
164
|
- `buildEvmPaymentHeader` / `isEvmNetwork` / `hasEvmDomainParams` in
|
|
108
165
|
`src/x402/evm-payment.ts`, mirroring the SVM v2 header builder.
|
|
109
166
|
|
|
110
167
|
### Changed
|
|
111
168
|
- Catalog-mode `use()` now falls back to the live 402 challenge for EVM
|
|
112
|
-
requirements missing EIP-712 domain params (`extra.name`/`version`)
|
|
169
|
+
requirements missing EIP-712 domain params (`extra.name`/`version`) -
|
|
113
170
|
catalog snapshots strip `extra`, and without the domain the gasless
|
|
114
171
|
signature can't be built (previously this silently took the gas-burning
|
|
115
172
|
legacy path). Same pattern as the existing SVM `feePayer` fallback.
|
|
@@ -121,7 +178,7 @@ versioning follows [Semantic Versioning](https://semver.org/).
|
|
|
121
178
|
parameter (`['agenc']` / `['orbitx402']`) and the CLI gains
|
|
122
179
|
`xpay discover --sources agenc`. Mixed results reserve only ~1/3 of the
|
|
123
180
|
result slots for AgenC (2 of the default 5), which made "show me AgenC
|
|
124
|
-
listings" look like the marketplace had two items
|
|
181
|
+
listings" look like the marketplace had two items - a single-source browse
|
|
125
182
|
now returns everything (default limit 50), and the tool description tells
|
|
126
183
|
agents to use it when the user asks about AgenC specifically.
|
|
127
184
|
|
|
@@ -136,7 +193,7 @@ versioning follows [Semantic Versioning](https://semver.org/).
|
|
|
136
193
|
|
|
137
194
|
### Changed
|
|
138
195
|
- **AgenC reads now use the SDK's hosted-indexer client** (`createIndexerClient`
|
|
139
|
-
→ `listActiveListings` / `getListing`)
|
|
196
|
+
→ `listActiveListings` / `getListing`) - AgenC's documented "intended scale
|
|
140
197
|
read path". Discovery is back to the full active catalog; the freshness
|
|
141
198
|
check is a single typed lookup. SDK bumped `^0.8.0` → `^0.10.0`.
|
|
142
199
|
- **Hires are now resilient to AgenC program upgrades.** The moderation
|
|
@@ -152,7 +209,7 @@ versioning follows [Semantic Versioning](https://semver.org/).
|
|
|
152
209
|
|
|
153
210
|
### Fixed
|
|
154
211
|
- **zauth reposcan polling broke after the first check.** zauth's poll
|
|
155
|
-
responses echo only `{ status, scanId, progress }
|
|
212
|
+
responses echo only `{ status, scanId, progress }`, no `sessionToken`,
|
|
156
213
|
so the scanning check never matched: the poll loop exited immediately and
|
|
157
214
|
the MCP result dropped the sessionToken, leaving agents with just the
|
|
158
215
|
scanId. Agents then passed the scanId to `xpay_zauth_scan_status` and got
|
|
@@ -166,14 +223,14 @@ versioning follows [Semantic Versioning](https://semver.org/).
|
|
|
166
223
|
per scan (Solana or Base); session tokens are JWTs valid ~1 hour.
|
|
167
224
|
- Completed zauth reports are compacted for MCP/CLI display: the bulky
|
|
168
225
|
`matches` array (full file contents, tens of KB) is replaced by a
|
|
169
|
-
`matchCount`
|
|
226
|
+
`matchCount` - `analysisMarkdown` + `zauthScore` carry the summary.
|
|
170
227
|
`xpay zauth reposcan --json` still emits the full raw report.
|
|
171
228
|
|
|
172
229
|
## [0.2.11] – 2026-07-06
|
|
173
230
|
|
|
174
231
|
### Added
|
|
175
232
|
- **zauth repo security scans (partner integration).** `xpay zauth reposcan
|
|
176
|
-
<repoUrl>` CLI and `xpay_zauth_reposcan` MCP tool
|
|
233
|
+
<repoUrl>` CLI and `xpay_zauth_reposcan` MCP tool - scans a git repository
|
|
177
234
|
via zauth's x402-paywalled endpoint through the normal payment flow
|
|
178
235
|
(guardrail caps apply; price set by zauth's 402 challenge). Only the scan
|
|
179
236
|
kickoff is paid: results are polled from a free status endpoint, with
|
|
@@ -185,8 +242,8 @@ versioning follows [Semantic Versioning](https://semver.org/).
|
|
|
185
242
|
|
|
186
243
|
### Fixed
|
|
187
244
|
- **Token-2022 balances were invisible.** `tokenBalances()` only scanned the
|
|
188
|
-
classic SPL token program, so tokens on the Token-2022 program
|
|
189
|
-
most pump.fun mints
|
|
245
|
+
classic SPL token program, so tokens on the Token-2022 program, including
|
|
246
|
+
most pump.fun mints, never appeared in `xpay balance` / `xpay_balance`,
|
|
190
247
|
even right after swapping into them. Both token programs are scanned now,
|
|
191
248
|
and the 0.2.9 Jupiter enrichment labels and prices them.
|
|
192
249
|
|
|
@@ -198,18 +255,18 @@ versioning follows [Semantic Versioning](https://semver.org/).
|
|
|
198
255
|
built-in registry displayed as a truncated mint with no price. Balances are
|
|
199
256
|
now enriched via one batched Jupiter lookup: real symbol/name for unknown
|
|
200
257
|
mints, per-token `usdValue`, a portfolio total, and an `⚠ unverified` flag
|
|
201
|
-
on suspicious tokens. Fails soft
|
|
258
|
+
on suspicious tokens. Fails soft - if Jupiter is unreachable, balances
|
|
202
259
|
render exactly as before. New SDK export: `enrichTokenBalances()`.
|
|
203
260
|
|
|
204
261
|
## [0.2.8] – 2026-07-04
|
|
205
262
|
|
|
206
263
|
### Added
|
|
207
264
|
- **Realtime X (Twitter) data, zero setup.** `xpay x user <handle>` /
|
|
208
|
-
`xpay x posts <handle>` CLI and `xpay_x_user` / `xpay_x_posts` MCP tools
|
|
265
|
+
`xpay x posts <handle>` CLI and `xpay_x_user` / `xpay_x_posts` MCP tools -
|
|
209
266
|
live profile (followers, bio, verification) and recent posts with
|
|
210
267
|
engagement metrics. Calls xona's x402-paywalled proxy of the X API v2 and
|
|
211
268
|
pays per call from the wallet at **cost price** (~$0.01 profile, ~$0.06 for
|
|
212
|
-
10 posts
|
|
269
|
+
10 posts - passthrough of X's pay-per-use billing, no markup). No X
|
|
213
270
|
developer account or API key needed; guardrail caps apply like any paid
|
|
214
271
|
call. Endpoint override: `XPAY_XDATA_ENDPOINT`.
|
|
215
272
|
|
|
@@ -220,7 +277,7 @@ versioning follows [Semantic Versioning](https://semver.org/).
|
|
|
220
277
|
a code-execution tool sometimes hand-rolled swap scripts (bypassing the
|
|
221
278
|
guardrail and token-verification safety) instead of calling the tool. The
|
|
222
279
|
descriptions now explicitly forbid custom swap code and state that
|
|
223
|
-
`xpay_swap` is the single quote+sign+execute step
|
|
280
|
+
`xpay_swap` is the single quote+sign+execute step - while also making clear
|
|
224
281
|
that `xpay_token_find` alone answers informational questions and a swap
|
|
225
282
|
must never follow automatically unless the user asked to trade.
|
|
226
283
|
|
|
@@ -228,11 +285,11 @@ versioning follows [Semantic Versioning](https://semver.org/).
|
|
|
228
285
|
|
|
229
286
|
### Added
|
|
230
287
|
- **Solana token discovery.** `xpay token find <query>` / `xpay.findTokens()` /
|
|
231
|
-
MCP `xpay_token_find`
|
|
288
|
+
MCP `xpay_token_find` - search any Solana token by ticker, name, or mint via
|
|
232
289
|
Jupiter Token API v2 (keyless). Returns price, market cap, liquidity, and
|
|
233
290
|
Jupiter's verification flag, ranked verified-first.
|
|
234
291
|
- **Native token swap.** `xpay swap <amount> <from> <to>` / `xpay.swap()` /
|
|
235
|
-
MCP `xpay_swap`
|
|
292
|
+
MCP `xpay_swap` - swap tokens inside the user's own wallet via Jupiter Swap
|
|
236
293
|
API v2 (order → partial-sign → managed execute; keyless). Accepts symbols or
|
|
237
294
|
mint addresses; bare tickers resolve only to verified tokens (ambiguous
|
|
238
295
|
tickers error with a candidate list; unverified tokens require the exact
|
|
@@ -248,7 +305,7 @@ versioning follows [Semantic Versioning](https://semver.org/).
|
|
|
248
305
|
|
|
249
306
|
### Fixed
|
|
250
307
|
- SKILL.md still documented the removed `xpay_transfer_confirm` staging flow
|
|
251
|
-
(dropped in 0.2.2)
|
|
308
|
+
(dropped in 0.2.2) - rewritten for direct execution with guardrail gating.
|
|
252
309
|
|
|
253
310
|
## [0.2.5] – 2026-07-04
|
|
254
311
|
|
|
@@ -258,7 +315,7 @@ versioning follows [Semantic Versioning](https://semver.org/).
|
|
|
258
315
|
`moderator` argument in the hire instruction (P1.2 moderation gate) that
|
|
259
316
|
SDK 0.7.1 predates. Bumped `@tetsuo-ai/marketplace-sdk` to `^0.8.0` and
|
|
260
317
|
made the hire path resolve the listing's on-chain moderation record
|
|
261
|
-
(`["listing_moderation", listing, specHash]` PDA
|
|
318
|
+
(`["listing_moderation", listing, specHash]` PDA - derivable without
|
|
262
319
|
knowing the moderator; the record itself names the moderator), passing
|
|
263
320
|
`moderator` + the explicit `listingModeration` account. Verified against
|
|
264
321
|
mainnet by transaction simulation (executes cleanly end-to-end) and against
|
|
@@ -277,17 +334,17 @@ Re-release of 0.2.3 with no code changes (registry hygiene).
|
|
|
277
334
|
- **AgenC marketplace (agenc.ag) as a discovery source with smart-routed
|
|
278
335
|
execution.** Hireable AgenC listings now appear in `xpay discover` /
|
|
279
336
|
`xpay_discover` alongside x402 services (marked `metadata.source: "agenc"`,
|
|
280
|
-
priced in SOL). Discovery merges sources with failure isolation
|
|
281
|
-
catalog going down no longer breaks discovery
|
|
337
|
+
priced in SOL). Discovery merges sources with failure isolation, one
|
|
338
|
+
catalog going down no longer breaks discovery, and reserves result slots so
|
|
282
339
|
marketplace listings aren't drowned out by the 21k-item x402 catalog. Opt
|
|
283
340
|
out with `XPAY_DISCOVERY_SOURCES=orbitx402` or `discover({ sources })`.
|
|
284
341
|
- **Smart execution routing in `use()`.** AgenC resources are detected by
|
|
285
342
|
their `agenc-hire` payment scheme and executed as on-chain SOL escrow hires
|
|
286
|
-
via `@tetsuo-ai/marketplace-sdk` (humanless entry point
|
|
343
|
+
via `@tetsuo-ai/marketplace-sdk` (humanless entry point - tasks pin to
|
|
287
344
|
CreatorReview, so escrow never auto-releases without the buyer's
|
|
288
345
|
acceptance). x402 resources keep the existing payment path; same
|
|
289
346
|
`use()`/`do()` API for both. The result of a hire is a receipt
|
|
290
|
-
(`task`, `hireRecord`, `txSig`, explorer link)
|
|
347
|
+
(`task`, `hireRecord`, `txSig`, explorer link) - the provider works
|
|
291
348
|
asynchronously.
|
|
292
349
|
- **CLI `xpay agenc hire <listingPda>` / `xpay agenc status <taskPda>`** and
|
|
293
350
|
MCP tool `xpay_agenc_status` for tracking hire progress.
|
|
@@ -297,7 +354,7 @@ Re-release of 0.2.3 with no code changes (registry hygiene).
|
|
|
297
354
|
while caps are configured.
|
|
298
355
|
- Examples: `examples/agenc-hire.ts` (live discover → hire → poll) and
|
|
299
356
|
`examples/agenc-local-sandbox.ts` (full hire lifecycle against the real
|
|
300
|
-
compiled program in-process via litesvm
|
|
357
|
+
compiled program in-process via litesvm - no RPC, no SOL spent).
|
|
301
358
|
|
|
302
359
|
### Changed
|
|
303
360
|
- `@solana/kit` bumped `^5.5.1` → `^6.9.0` (required by the AgenC SDK;
|
|
@@ -311,7 +368,7 @@ Re-release of 0.2.3 with no code changes (registry hygiene).
|
|
|
311
368
|
and return a 6-digit code, requiring a second `xpay_transfer_confirm` call to
|
|
312
369
|
actually move funds. Agents routinely skipped the follow-up call, read the
|
|
313
370
|
`"Transfer staged…"` response as a receipt, and reported success with a
|
|
314
|
-
**hallucinated transaction hash**
|
|
371
|
+
**hallucinated transaction hash** - a hash that never hit the chain (not on
|
|
315
372
|
Solscan, no funds moved). This affected private (MagicBlock PER) transfers in
|
|
316
373
|
particular. The terminal path was never affected because it executes directly.
|
|
317
374
|
`xpay_transfer` now runs the same direct path as the CLI, and
|
|
@@ -321,7 +378,7 @@ Re-release of 0.2.3 with no code changes (registry hygiene).
|
|
|
321
378
|
- **The transfer spending gate no longer depends on the agent making a second
|
|
322
379
|
tool call.** Safety comes from the guardrail (per-tx / per-day caps +
|
|
323
380
|
`requireApprovalAbove`), which on MCP surfaces as a Touch ID prompt when
|
|
324
|
-
biometric unlock is enabled
|
|
381
|
+
biometric unlock is enabled - a gate the model cannot fake or skip. Set
|
|
325
382
|
`xpay guardrail --require-approval-above 0` with biometric enabled to require
|
|
326
383
|
approval on every transfer.
|
|
327
384
|
|
|
@@ -333,7 +390,7 @@ Re-release of 0.2.3 with no code changes (registry hygiene).
|
|
|
333
390
|
on-chain wallet registration, and the ALLOW / BLOCKED / ESCALATED verdicts),
|
|
334
391
|
the MCP tool list re-includes `xpay_bento_status` / `xpay_bento_enable` /
|
|
335
392
|
`xpay_bento_disable`, and SKILL.md re-adds the tools plus a safety note. No
|
|
336
|
-
code change
|
|
393
|
+
code change - the firewall shipped in 0.1.28; this release publishes the docs
|
|
337
394
|
to npm.
|
|
338
395
|
|
|
339
396
|
## [0.2.0] – 2026-06-23
|
|
@@ -342,10 +399,10 @@ Milestone release consolidating the 0.1.24–0.1.31 line into four themes.
|
|
|
342
399
|
|
|
343
400
|
### Easiest onboarding
|
|
344
401
|
- **Zero-config wallet provisioning.** Drop the MCP server into any agent host
|
|
345
|
-
with no env
|
|
402
|
+
with no env - the agent is given its own persistent wallet on first boot
|
|
346
403
|
(address printed to stderr to fund). Bring-your-own-key and existing profiles
|
|
347
404
|
still take precedence.
|
|
348
|
-
- **`SKILL.md
|
|
405
|
+
- **`SKILL.md`**: a framework-agnostic guide so any agent (Claude, Codex,
|
|
349
406
|
OpenAI, Gemini, custom) can drive xPay's tools, kept current with this release.
|
|
350
407
|
|
|
351
408
|
### Smart pay routing
|
|
@@ -364,14 +421,14 @@ Milestone release consolidating the 0.1.24–0.1.31 line into four themes.
|
|
|
364
421
|
|
|
365
422
|
### Reporting
|
|
366
423
|
- Comprehensive on-chain USDC usage report (daily / weekly / monthly) via
|
|
367
|
-
OrbitX402
|
|
424
|
+
OrbitX402 - summary, timeline, top counterparties, and biggest transactions.
|
|
368
425
|
|
|
369
426
|
## [0.1.31] – 2026-06-23
|
|
370
427
|
|
|
371
428
|
### Fixed
|
|
372
429
|
- **Payments now work against x402 servers that expect a `Payment-Signature`
|
|
373
430
|
header.** The retry attaches the payment payload under both `X-PAYMENT` (the
|
|
374
|
-
common name) and `Payment-Signature`
|
|
431
|
+
common name) and `Payment-Signature` - some providers (e.g. Nansen) only read
|
|
375
432
|
the latter and were silently returning `402 Payment Required` even though the
|
|
376
433
|
payload was valid. Confirmed against the live Nansen endpoint: the same
|
|
377
434
|
payload that was ignored under `X-PAYMENT` is accepted under
|
|
@@ -384,11 +441,11 @@ Milestone release consolidating the 0.1.24–0.1.31 line into four themes.
|
|
|
384
441
|
### Fixed
|
|
385
442
|
- **`use` no longer attempts a payment on an unfunded network.** 0.1.29's
|
|
386
443
|
balance-aware picker fell back to the "best-funded" option when none could
|
|
387
|
-
cover the cost
|
|
444
|
+
cover the cost - which, with everything at $0, still tried to pay and surfaced
|
|
388
445
|
a raw `402 Payment Required` from the provider. Now, when multiple networks
|
|
389
446
|
are payable but none has the funds, `use` raises a clear error listing each
|
|
390
447
|
network's USDC balance (e.g. *"insufficient USDC balance to pay on any funded
|
|
391
|
-
network
|
|
448
|
+
network - base $0.00, solana $0.00"*) instead. The settlement flow itself is
|
|
392
449
|
unchanged. A single-network resource is still attempted as before (funding is
|
|
393
450
|
left to the payment flow).
|
|
394
451
|
|
|
@@ -398,31 +455,31 @@ Milestone release consolidating the 0.1.24–0.1.31 line into four themes.
|
|
|
398
455
|
- **`use` now picks the payment network by balance, not by list order.** When a
|
|
399
456
|
resource accepts multiple networks (e.g. Base *and* Solana), xPay reads the
|
|
400
457
|
wallet balance on each and pays from the first option that can cover the cost
|
|
401
|
-
|
|
458
|
+
- so a $0 Base wallet automatically falls through to a funded Solana one.
|
|
402
459
|
Previously it always took the first listed option (usually Base) and failed
|
|
403
460
|
if that wallet was empty. Both the catalog and live-402 paths use the new
|
|
404
461
|
picker. Single-network resources are unaffected (no extra balance lookups).
|
|
405
462
|
Falls back to the best-funded option when none can cover the cost outright.
|
|
406
463
|
|
|
407
464
|
### Added
|
|
408
|
-
- **`Wallet.pickRequirementByBalance()
|
|
465
|
+
- **`Wallet.pickRequirementByBalance()`**: the async, balance-aware selector
|
|
409
466
|
behind the above. `pickRequirement()` (first-match, sync) is retained.
|
|
410
467
|
|
|
411
468
|
### Added
|
|
412
469
|
- **Bento firewall controls exposed as MCP tools.** Agents can now manage the
|
|
413
470
|
intent firewall directly, not just via the CLI:
|
|
414
|
-
- `xpay_bento_status`
|
|
415
|
-
- `xpay_bento_enable`
|
|
416
|
-
- `xpay_bento_disable`
|
|
471
|
+
- `xpay_bento_status` - read whether screening is on (and the agent wallet to register).
|
|
472
|
+
- `xpay_bento_enable` - turn it on; returns the agent wallet address to register at app.bentoguard.xyz.
|
|
473
|
+
- `xpay_bento_disable` - turn it off; the escape hatch when the wallet isn't registered and payments are being rejected.
|
|
417
474
|
Enable/disable take effect live on the running guardrail (no restart) and
|
|
418
|
-
persist to the profile. Only available on profile-backed wallets
|
|
475
|
+
persist to the profile. Only available on profile-backed wallets - raw-key
|
|
419
476
|
(`XPAY_SOLANA_SECRET`) mode reports `profileBacked: false`.
|
|
420
477
|
- **`Guardrail.bentoEnabled()` / `setBentoEnabled()`** for runtime toggling.
|
|
421
478
|
|
|
422
479
|
## [0.1.27] – 2026-06-23
|
|
423
480
|
|
|
424
481
|
### Added
|
|
425
|
-
- **`SKILL.md`
|
|
482
|
+
- **`SKILL.md` - framework-agnostic onboarding guide.** A single page that
|
|
426
483
|
teaches any agent (Claude, Codex, OpenAI, Gemini, custom) how to drive xPay:
|
|
427
484
|
zero-config setup, the tool surface, the pay-per-call model, the safety rules
|
|
428
485
|
(guardrail, transfer confirmation, Bento), and copy-paste recipes. Shipped in
|
|
@@ -438,7 +495,7 @@ Milestone release consolidating the 0.1.24–0.1.31 line into four themes.
|
|
|
438
495
|
|
|
439
496
|
### Added
|
|
440
497
|
- **Zero-config wallet onboarding for the MCP server.** Drop xPay into any
|
|
441
|
-
agent host with no env at all
|
|
498
|
+
agent host with no env at all - on first boot the agent is given its own
|
|
442
499
|
persistent wallet (generated, saved under `~/.xpay`/`XPAY_HOME`, address
|
|
443
500
|
printed to stderr to fund). Reused on every later boot, so the agent keeps a
|
|
444
501
|
stable address. The wallet source order is: existing profile → raw key env
|
|
@@ -451,7 +508,7 @@ Milestone release consolidating the 0.1.24–0.1.31 line into four themes.
|
|
|
451
508
|
### Changed
|
|
452
509
|
- **`mcp-server.ts` header now documents the zero-config form as primary.** The
|
|
453
510
|
previous example showed `XPAY_PASSPHRASE` alone, which only works once a
|
|
454
|
-
profile already exists
|
|
511
|
+
profile already exists - a setup trap for fresh hosts.
|
|
455
512
|
|
|
456
513
|
## [0.1.25] – 2026-06-23
|
|
457
514
|
|
|
@@ -474,8 +531,8 @@ Milestone release consolidating the 0.1.24–0.1.31 line into four themes.
|
|
|
474
531
|
### Added
|
|
475
532
|
- **Bento Guard intent firewall (optional).** A second enforcement gate on top
|
|
476
533
|
of the local guardrail caps. When enabled, every `use` / `transfer` is
|
|
477
|
-
screened by Bento's `protect()` for malicious *intent
|
|
478
|
-
wallet-drain, intent-vs-execution mismatch
|
|
534
|
+
screened by Bento's `protect()` for malicious *intent*, prompt-injection,
|
|
535
|
+
wallet-drain, intent-vs-execution mismatch, before signing. The local
|
|
479
536
|
guardrail still owns spend caps; Bento adds the AI intent layer xPay can't
|
|
480
537
|
compute itself.
|
|
481
538
|
- Enable per-profile with `xpay bento enable` (also `disable` / `status`).
|
|
@@ -485,7 +542,7 @@ Milestone release consolidating the 0.1.24–0.1.31 line into four themes.
|
|
|
485
542
|
[app.bentoguard.xyz](https://app.bentoguard.xyz/); `enable` prints it.
|
|
486
543
|
- `BLOCKED` verdicts throw a `GuardrailError`; `ESCALATED` verdicts defer to
|
|
487
544
|
the existing `onApprovalRequired` hook, or fail closed if none is set.
|
|
488
|
-
- `@bentoguard/sdk` is an **optional** dependency loaded lazily
|
|
545
|
+
- `@bentoguard/sdk` is an **optional** dependency loaded lazily - installs
|
|
489
546
|
that can't build its native bindings won't break `npm i @xona-labs/xpay`,
|
|
490
547
|
and the SDK is only required once a profile turns the firewall on.
|
|
491
548
|
|
|
@@ -504,32 +561,32 @@ Milestone release consolidating the 0.1.24–0.1.31 line into four themes.
|
|
|
504
561
|
### Changed
|
|
505
562
|
- **Discovery searches server-side.** `discover({ query })` now passes the
|
|
506
563
|
query to the OrbitX402 API (`?query=`), which searches and ranks the
|
|
507
|
-
catalog and returns only the matches
|
|
564
|
+
catalog and returns only the matches - one small request instead of
|
|
508
565
|
downloading the entire 33k-item catalog (~2 minutes of sequential page
|
|
509
566
|
fetches) to filter locally. Cold `xpay discover <query>` drops from
|
|
510
567
|
minutes to ~2s. Local filtering remains as a fallback for endpoints that
|
|
511
568
|
ignore the query param; no-query browsing still fetches the full catalog.
|
|
512
569
|
|
|
513
570
|
### Fixed
|
|
514
|
-
- **MCP server no longer unlocks the wallet just to read the Sana API key**
|
|
571
|
+
- **MCP server no longer unlocks the wallet just to read the Sana API key** -
|
|
515
572
|
`config.json` is plaintext, so `sana_*` tools now register correctly when
|
|
516
573
|
the server starts without `XPAY_PASSPHRASE` (e.g. biometric-unlock setups).
|
|
517
574
|
|
|
518
575
|
## [0.1.18] – 2026-06-12
|
|
519
576
|
|
|
520
577
|
### Fixed
|
|
521
|
-
- **`xpay balance` now unlocks via Touch ID
|
|
578
|
+
- **`xpay balance` now unlocks via Touch ID**: it had its own inline
|
|
522
579
|
passphrase prompt instead of the shared unlock path, so it never offered
|
|
523
580
|
biometric unlock. It now uses `unlockActive` like every other command.
|
|
524
581
|
|
|
525
582
|
## [0.1.17] – 2026-06-12
|
|
526
583
|
|
|
527
584
|
### Added
|
|
528
|
-
- **Biometric unlock (macOS Touch ID)
|
|
585
|
+
- **Biometric unlock (macOS Touch ID)**: `xpay biometric enable|disable|status`.
|
|
529
586
|
When enabled, the wallet passphrase is stored in the login keychain and
|
|
530
587
|
released by a native LocalAuthentication helper (compiled on first use to
|
|
531
588
|
`~/.xpay/bin/`, requires Xcode Command Line Tools) after a Touch ID check.
|
|
532
|
-
The scrypt/AES wallet encryption is unchanged
|
|
589
|
+
The scrypt/AES wallet encryption is unchanged - the passphrase remains the
|
|
533
590
|
fallback and recovery path. Unlock order is now: `--passphrase` flag →
|
|
534
591
|
`$XPAY_PASSPHRASE` → Touch ID → interactive prompt.
|
|
535
592
|
- **Guardrail approval hook is now wired in the CLI and MCP server.**
|
|
@@ -537,32 +594,32 @@ Milestone release consolidating the 0.1.24–0.1.31 line into four themes.
|
|
|
537
594
|
configured"); `xpay pay` / `xpay transfer` now resolve it via Touch ID (when
|
|
538
595
|
biometric unlock is enabled) or a y/n confirm on a TTY. The MCP server uses
|
|
539
596
|
Touch ID only (no TTY) and denies above-threshold calls otherwise.
|
|
540
|
-
- **MCP server can start without `XPAY_PASSPHRASE
|
|
597
|
+
- **MCP server can start without `XPAY_PASSPHRASE`**: when the profile has
|
|
541
598
|
biometric unlock enabled, the server prompts Touch ID once at startup
|
|
542
599
|
instead of requiring the passphrase in plaintext host config.
|
|
543
600
|
|
|
544
601
|
## [0.1.5] – 2026-05-26
|
|
545
602
|
|
|
546
603
|
### Added
|
|
547
|
-
- **`UseResult.txSig` is now populated on SVM v2 calls
|
|
604
|
+
- **`UseResult.txSig` is now populated on SVM v2 calls**: extracted from
|
|
548
605
|
the facilitator's `PAYMENT-RESPONSE` (or `X-PAYMENT-RESPONSE`) header,
|
|
549
606
|
which carries the canonical `SettleResponse` envelope (base64 JSON).
|
|
550
607
|
Previously `useByUrl()` returned `txSig: undefined` for v2 because the
|
|
551
608
|
facilitator (not the client) broadcasts the transaction.
|
|
552
|
-
- **`UseResult.settlement?: SettleEnvelope
|
|
609
|
+
- **`UseResult.settlement?: SettleEnvelope`**: full settle envelope from
|
|
553
610
|
the facilitator when present: `{ transaction, payer?, network, amount?,
|
|
554
611
|
success?, extensions?, extra? }`. Useful for reconciliation
|
|
555
612
|
(payer address, actual settled amount in `upto`-style schemes, etc.).
|
|
556
613
|
|
|
557
614
|
### Verified
|
|
558
|
-
- Live against `api.xona-agent.com/audio/x-text-to-speech`
|
|
615
|
+
- Live against `api.xona-agent.com/audio/x-text-to-speech` - 200 OK,
|
|
559
616
|
$0.01 USDC settled, real on-chain signature
|
|
560
617
|
(`3puHTvEY…EpEHi`) returned in both `txSig` and `settlement.transaction`.
|
|
561
618
|
|
|
562
619
|
## [0.1.4] – 2026-05-26
|
|
563
620
|
|
|
564
621
|
### Fixed
|
|
565
|
-
- **`useByUrl()` against canonical x402 SVM v2 servers
|
|
622
|
+
- **`useByUrl()` against canonical x402 SVM v2 servers**: the SDK now signs
|
|
566
623
|
but does **not** broadcast the USDC transfer, and sends the canonical
|
|
567
624
|
`PaymentPayloadV2` envelope (`{ x402Version, accepted, payload: { transaction } }`)
|
|
568
625
|
base64-encoded in the `X-Payment` header. The facilitator verifies + settles.
|
|
@@ -573,19 +630,19 @@ Milestone release consolidating the 0.1.24–0.1.31 line into four themes.
|
|
|
573
630
|
reject with `"Unsupported x402 payload"`.
|
|
574
631
|
|
|
575
632
|
### Added
|
|
576
|
-
- New `Signer.getKitSigner?()` (optional, additive)
|
|
633
|
+
- New `Signer.getKitSigner?()` (optional, additive) - returns a `@solana/kit`
|
|
577
634
|
`TransactionSigner`. `rawSolanaSigner` implements it out of the box.
|
|
578
635
|
Custom signers (KMS/MPC) implementing it gain canonical x402 v2 support
|
|
579
636
|
for SVM endpoints; existing custom signers without it keep working via
|
|
580
637
|
the legacy broadcast-then-`txSig` path for non-SVM networks.
|
|
581
|
-
- New module `src/x402/svm-payment.ts`
|
|
638
|
+
- New module `src/x402/svm-payment.ts` - wraps `@x402/svm`'s
|
|
582
639
|
`ExactSvmScheme.createPaymentPayload` and assembles the canonical
|
|
583
640
|
`PaymentPayloadV2` envelope. Used by `useByUrl()` for any network matching
|
|
584
641
|
`solana` / `solana:*` / `solana-*`.
|
|
585
642
|
|
|
586
643
|
### Dependencies
|
|
587
|
-
- `@x402/core`, `@x402/svm`
|
|
588
|
-
- `@solana/kit`
|
|
644
|
+
- `@x402/core`, `@x402/svm` - canonical x402 encoding (no spec drift).
|
|
645
|
+
- `@solana/kit` - pulled in transitively by `@x402/svm`; used to construct
|
|
589
646
|
`TransactionSigner` instances from existing `@solana/web3.js` Keypairs via
|
|
590
647
|
`createKeyPairSignerFromBytes`.
|
|
591
648
|
|
|
@@ -594,29 +651,29 @@ Milestone release consolidating the 0.1.24–0.1.31 line into four themes.
|
|
|
594
651
|
facilitator broadcasts; we never see the resulting signature client-side).
|
|
595
652
|
Downstream reconciliation can still use the upstream response + your own
|
|
596
653
|
correlationId in your DB.
|
|
597
|
-
- Direct `transfer()` is unchanged
|
|
654
|
+
- Direct `transfer()` is unchanged - still uses `signer.pay()` (broadcasts
|
|
598
655
|
client-side, returns the real `txSig`), since there's no facilitator in
|
|
599
656
|
the direct-transfer path.
|
|
600
657
|
|
|
601
658
|
## [0.1.3] – 2026-05-26
|
|
602
659
|
|
|
603
660
|
### Fixed
|
|
604
|
-
- **`useByUrl()` against x402-spec endpoints
|
|
661
|
+
- **`useByUrl()` against x402-spec endpoints**: now resolves the CAIP form
|
|
605
662
|
of Solana (`solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp` and `solana:*` /
|
|
606
663
|
`solana-*` variants) to the configured `solana` signer. Previously failed
|
|
607
664
|
with "no matching signer" against any endpoint reporting network in CAIP.
|
|
608
|
-
- **`xpay pay` defaulted to GET
|
|
665
|
+
- **`xpay pay` defaulted to GET**: most x402 service endpoints are POST, so
|
|
609
666
|
the CLI returned 404 from the upstream. Added a `--method <m>` flag and
|
|
610
667
|
documented it in the help text.
|
|
611
|
-
- **Blank error output on signing failures
|
|
668
|
+
- **Blank error output on signing failures**: `xpay pay` and `xpay transfer`
|
|
612
669
|
printed a bare `✗` when the underlying Solana / SPL error had an empty
|
|
613
670
|
`.message`. Now falls back to `toString()` and surfaces optional `logs`.
|
|
614
|
-
- **402 challenges in response headers** were not parsed
|
|
671
|
+
- **402 challenges in response headers** were not parsed - only the body was
|
|
615
672
|
checked. Now reads the requirements from either the body OR a header
|
|
616
673
|
(`Payment-Required`, `X-Payment`, `X-Accept-Payment`, `WWW-Authenticate`,
|
|
617
674
|
`X-402`, …), decoded as raw JSON, base64-JSON, URL-encoded JSON, or
|
|
618
675
|
`<scheme> <payload>`.
|
|
619
|
-
- **x402-spec field names not recognized
|
|
676
|
+
- **x402-spec field names not recognized**: the parser now aliases
|
|
620
677
|
`maxAmountRequired → amount`, `recipient → payTo`, `token` / `mint` →
|
|
621
678
|
`asset`, etc. Also accepts a bare requirement object, an `{accepts:[]}` /
|
|
622
679
|
`{items:[]}` envelope, or a v1 bare array.
|
|
@@ -632,7 +689,7 @@ Milestone release consolidating the 0.1.24–0.1.31 line into four themes.
|
|
|
632
689
|
shipped `dist/` so internal pipelines (e.g. curation) can deep-import.
|
|
633
690
|
|
|
634
691
|
### Internal
|
|
635
|
-
- New shared `src/x402/extract.ts` module
|
|
692
|
+
- New shared `src/x402/extract.ts` module - single source of truth for
|
|
636
693
|
parsing x402 challenges, consumed by both `useByUrl()` and the internal
|
|
637
694
|
curation pipeline. Replaces the duplicated parser that used to live in
|
|
638
695
|
`use/` and `probe/`.
|
|
@@ -647,22 +704,22 @@ GitHub releases page for the diff against 0.1.0.
|
|
|
647
704
|
Initial public release.
|
|
648
705
|
|
|
649
706
|
### Added
|
|
650
|
-
- Multi-network wallet
|
|
707
|
+
- Multi-network wallet - Solana + Base from one BIP-39 mnemonic, encrypted
|
|
651
708
|
on disk with scrypt + AES-256-GCM.
|
|
652
|
-
- `discover()`
|
|
653
|
-
- `useByUrl()` / `use()`
|
|
709
|
+
- `discover()` - search across the live x402 catalog (PayAI facilitator).
|
|
710
|
+
- `useByUrl()` / `use()` - pay any x402 endpoint, handles the 402
|
|
654
711
|
challenge → sign → retry-with-`X-Payment` flow.
|
|
655
|
-
- `transfer()`
|
|
656
|
-
- `balance()`
|
|
657
|
-
- `history()`
|
|
712
|
+
- `transfer()` - direct USDC send to an address, gated by the same guardrail.
|
|
713
|
+
- `balance()` - unified USDC balance across configured networks.
|
|
714
|
+
- `history()` - recent on-chain USDC activity (Solana via RPC, EVM via
|
|
658
715
|
chunked `eth_getLogs`).
|
|
659
|
-
- `Guardrail`
|
|
716
|
+
- `Guardrail` - per-tx and per-day caps + allowed-host whitelist, enforced
|
|
660
717
|
before any signature.
|
|
661
|
-
- Profile management
|
|
718
|
+
- Profile management - `initProfile()`, `loadProfile()`, multi-profile via
|
|
662
719
|
`~/.xpay/<name>/`.
|
|
663
720
|
- CLI: `xpay init / accounts / discover / pay / transfer / balance / history /
|
|
664
721
|
guardrail / mcp`.
|
|
665
|
-
- MCP server (`xpay-mcp`) on stdio
|
|
722
|
+
- MCP server (`xpay-mcp`) on stdio - exposes the SDK as tools for Claude
|
|
666
723
|
Desktop, Cursor, Codex.
|
|
667
724
|
- LLM tool exporters: `forClaude(xpay)`, `forOpenAI(xpay)`, `forGemini(xpay)`.
|
|
668
725
|
|