Repository navigation
Commit 512d979
authored
Add vault payment commands (#244)
## Summary
Add vault payment commands for Link and AgentCard. The CLI prepares
payment credentials, displays provider actions and payment-method
choices, attaches vaults to new browsers, and observes item
state/events. It does not submit merchant payments.
### Current interface
- Vaults: `create --name`, `list`, `get <vault>`, `delete <vault>`.
- Wallets: `wallets create <vault> <key> --provider link|agentcard
--spec '<json>' [--open]`; `wallets payment-methods <vault> <key>`.
- Cards: `cards create|update <vault> <key> --provider link|agentcard
--spec '<json>'`.
- Items: `items list`, `items get [--wait 0..60] [--expand
payment_methods] [--open]`, `items invoke <vault> <key> <operation>
[--open]`, `items events [--after <event-id>] [--wait 0..60]`, and
`items delete`.
- Browser attachment: `browsers create --vault <id-or-name>`;
repeatable, up to 20 vaults, incompatible with pools.
The `wallets`, `cards`, and `items` commands are under `kernel vaults`.
Vault selectors accept an ID or name; item selectors currently use the
immutable key. `--project`/`KERNEL_PROJECT` is optional: omitted scope
is resolved by the API, using the default project for org-wide
credentials rather than listing all projects.
### Specifications and behavior
`--spec` is a JSON specification object, not a `{type, spec}` envelope.
The command supplies the item type and injects `provider`; an embedded
provider must match the flag. Provider-specific flags have been removed.
JSON values are passed through the SDK without defaults, normalization,
or integer precision loss; the API validates required and optional
fields. This includes Link purchase details, metadata, and expiry. Card
updates replace the entire spec, including removing omitted optional
fields.
Help includes provider-specific types and examples, with a sync comment
linking to the [published API spec](https://api.onkernel.com/spec.yaml).
The README covers both provider flows, expansion syntax, updates, and
lifecycle behavior.
- `items get` shows operation types/descriptions and shell-quoted
copyable commands retaining the selected project. `items invoke` GETs
the item again, checks the requested type against
`available_operations`, then POSTs `{"type":"<operation>"}` to
`/operations`. Availability is API-controlled, without local
item/provider/state rules or an operation registry. It prints the
updated item and supports `--open` and `-o json`. Requests do not
automatically retry; waits are bounded observations, not
readiness/payment guarantees.
- The current OpenAPI operation schema accepts only
`{"type":"authorize"}` and forbids extra fields; no operation `--spec`
flag is added. Future parameterless operations can be invoked by name
when advertised. The dedicated `cards authorize` command is removed
without an alias.
- Action and approval URLs print in full outside truncating tables.
Non-delete commands support `-o json`; output preserves public fields
and aliases while filtering unknown/opaque provider data and
credential-bearing action URLs.
- API errors retain the standard code/message. Vault and item deletes
treat any HTTP 404 as success with `Deleted or not found`; other errors
fail. Existing non-vault delete commands are unchanged.
- Vault bindings are creation-only. Vault/item rename and
provider-domain configuration are not exposed.
## SDK
Use published `github.com/kernel/kernel-go-sdk v0.100.0`. The preview
replacement and checksums are removed. CI no longer needs a private SDK
token or GOPRIVATE configuration, and Go caching is restored. Nine
existing browser SDK call sites use the released SDK's `IDOrName`
path-field spelling.
No SDK repository files were changed.
## Verification
- `make test` and `make build` pass locally; vault tests also pass with
`-race`. All four README `--spec` examples parse as JSON objects.
- `golangci-lint run --new-from-rev=origin/main`: 0 issues.
- SDK v0.100.0 downloads into an empty module cache with private-module
configuration disabled; `go mod verify` passes. README and repository
Markdown docs contain no card-mode references.
- HTTP fixtures cover both providers, raw JSON preservation/validation,
request envelopes, optional scope, API errors, deletion semantics,
bounded waits, advertised-operation gating across
types/providers/states, future operation names, operation GET/POST
errors without retries, explicit action opening,
shell-safe/project-aware invocation hints, expansions, output, and
browser attachment/pool conflicts.
- Local CLI checks cover both providers' wallet/card specs, full URLs in
40/80/120-column terminals, delete/list behavior for invalid-project
responses, and executing a copied GET operation hint against a fixture
(project shell quoting preserved; exactly GET/GET/POST). No live payment
credentials or payments were created for testing.
---------
Co-authored-by: rgarcia <72655+rgarcia@users.noreply.github.com>1 parent 2c121e3 commit 512d979
15 files changed
Lines changed: 2302 additions & 14 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
15 | | - | |
| 15 | + | |
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
128 | 128 | | |
129 | 129 | | |
130 | 130 | | |
| 131 | + | |
131 | 132 | | |
132 | 133 | | |
133 | 134 | | |
| |||
223 | 224 | | |
224 | 225 | | |
225 | 226 | | |
| 227 | + | |
226 | 228 | | |
227 | 229 | | |
228 | 230 | | |
| |||
266 | 268 | | |
267 | 269 | | |
268 | 270 | | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
269 | 439 | | |
270 | 440 | | |
271 | 441 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
0 commit comments