kiosk-server 0.5.20 → 0.6.28
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +196 -0
- data/README.md +192 -138
- data/app/channels/kiosk_events.rb +30 -17
- data/app/controllers/kiosk/server/application_controller.rb +0 -1
- data/app/controllers/kiosk/server/assistants_controller.rb +13 -14
- data/app/controllers/kiosk/server/auth_controller.rb +21 -65
- data/app/controllers/kiosk/server/device_verify_controller.rb +0 -5
- data/app/controllers/kiosk/server/discovery_controller.rb +24 -7
- data/app/controllers/kiosk/server/jwks_controller.rb +2 -2
- data/app/controllers/kiosk/server/kyc_attestation_controller.rb +1 -4
- data/app/controllers/kiosk/server/kyc_callback_controller.rb +3 -1
- data/app/controllers/kiosk/server/oauth_device_authorization_controller.rb +17 -34
- data/app/controllers/kiosk/server/oauth_registration_controller.rb +34 -0
- data/app/controllers/kiosk/server/oauth_token_controller.rb +36 -32
- data/app/controllers/kiosk/server/payment_setup_controller.rb +3 -4
- data/app/controllers/kiosk/server/wire_controller.rb +2 -2
- data/app/models/kiosk/checkout_mandate.rb +20 -0
- data/app/models/kiosk/settlement.rb +1 -3
- data/app/models/kiosk/visit.rb +0 -2
- data/app/views/kiosk/server/assistants/show.html.erb +20 -24
- data/app/views/kiosk/server/device_verify/decided.html.erb +1 -0
- data/app/views/kiosk/server/device_verify/show.html.erb +1 -0
- data/app/views/layouts/kiosk/server/application.html.erb +14 -0
- data/lib/generators/kiosk/install/install_generator.rb +25 -69
- data/lib/generators/kiosk/install/templates/create_kiosk_device_authorizations.rb.tt +21 -12
- data/lib/generators/kiosk/install/templates/create_kiosk_events.rb.tt +15 -17
- data/lib/generators/kiosk/install/templates/create_kiosk_identity_tables.rb.tt +39 -10
- data/lib/generators/kiosk/install/templates/create_kiosk_kyc_attributes.rb.tt +16 -14
- data/lib/generators/kiosk/install/templates/create_kiosk_mandates.rb.tt +50 -15
- data/lib/generators/kiosk/install/templates/create_kiosk_pow_spent.rb.tt +7 -11
- data/lib/generators/kiosk/install/templates/create_kiosk_refunds.rb.tt +11 -11
- data/lib/generators/kiosk/install/templates/create_kiosk_revocations.rb.tt +7 -11
- data/lib/generators/kiosk/install/templates/create_kiosk_visits.rb.tt +10 -11
- data/lib/generators/kiosk/install/templates/initializer.rb.tt +13 -4
- data/lib/kiosk/payable.rb +19 -25
- data/lib/kiosk/server/account_binding.rb +32 -62
- data/lib/kiosk/server/account_holder_gate.rb +3 -1
- data/lib/kiosk/server/agent_identity_providers/default_agent_idp.rb +18 -16
- data/lib/kiosk/server/agent_rotation.rb +62 -0
- data/lib/kiosk/server/argument_decoder.rb +2 -2
- data/lib/kiosk/server/assistant_accounts.rb +38 -0
- data/lib/kiosk/server/assistant_key.rb +86 -0
- data/lib/kiosk/server/auth_toll.rb +6 -6
- data/lib/kiosk/server/binding_module_gate.rb +1 -1
- data/lib/kiosk/server/checkout.rb +57 -0
- data/lib/kiosk/server/client.rb +61 -0
- data/lib/kiosk/server/client_assertion.rb +154 -0
- data/lib/kiosk/server/client_registration.rb +98 -0
- data/lib/kiosk/server/column_spending_cap.rb +1 -1
- data/lib/kiosk/server/configuration_extension.rb +64 -75
- data/lib/kiosk/server/current_request.rb +1 -1
- data/lib/kiosk/server/device_authorization.rb +1 -1
- data/lib/kiosk/server/device_authorization_stores.rb +1 -1
- data/lib/kiosk/server/device_code_grant.rb +38 -69
- data/lib/kiosk/server/dpop.rb +126 -0
- data/lib/kiosk/server/eddsa.rb +38 -0
- data/lib/kiosk/server/engine.rb +16 -13
- data/lib/kiosk/server/errors.rb +28 -7
- data/lib/kiosk/server/event_stores.rb +2 -2
- data/lib/kiosk/server/events.rb +4 -3
- data/lib/kiosk/server/events_connection.rb +38 -10
- data/lib/kiosk/server/events_replay.rb +79 -0
- data/lib/kiosk/server/executor/repeat.rb +13 -12
- data/lib/kiosk/server/executor/spending_cap.rb +17 -76
- data/lib/kiosk/server/executor.rb +86 -105
- data/lib/kiosk/server/failure_log.rb +3 -3
- data/lib/kiosk/server/handler_mixin.rb +9 -9
- data/lib/kiosk/server/handler_registrations.rb +1 -1
- data/lib/kiosk/server/handler_serving.rb +11 -11
- data/lib/kiosk/server/headers.rb +3 -3
- data/lib/kiosk/server/identity_resolution.rb +12 -3
- data/lib/kiosk/server/jwk.rb +83 -0
- data/lib/kiosk/server/jwks.rb +6 -0
- data/lib/kiosk/server/jwt_issuer.rb +7 -13
- data/lib/kiosk/server/kyc.rb +5 -7
- data/lib/kiosk/server/kyc_verifier.rb +28 -29
- data/lib/kiosk/server/link_code.rb +9 -18
- data/lib/kiosk/server/linked_assistants.rb +22 -17
- data/lib/kiosk/server/mandate_verifier.rb +97 -139
- data/lib/kiosk/server/money.rb +41 -0
- data/lib/kiosk/server/oauth_answers.rb +31 -0
- data/lib/kiosk/server/oauth_error.rb +33 -0
- data/lib/kiosk/server/open_api.rb +31 -29
- data/lib/kiosk/server/page.rb +1 -1
- data/lib/kiosk/server/payment_claim.rb +47 -78
- data/lib/kiosk/server/pow_gate.rb +12 -33
- data/lib/kiosk/server/pow_spent_stores.rb +1 -1
- data/lib/kiosk/server/receipts.rb +30 -0
- data/lib/kiosk/server/reputation_factors.rb +12 -5
- data/lib/kiosk/server/request_validation.rb +3 -3
- data/lib/kiosk/server/result.rb +1 -1
- data/lib/kiosk/server/revocation_stores.rb +9 -1
- data/lib/kiosk/server/routing.rb +1 -1
- data/lib/kiosk/server/schemas/auth.schema.json +369 -58
- data/lib/kiosk/server/schemas/binding.schema.json +24 -59
- data/lib/kiosk/server/schemas/kyc.schema.json +40 -78
- data/lib/kiosk/server/schemas/mandates.schema.json +123 -39
- data/lib/kiosk/server/schemas/pow.schema.json +2 -2
- data/lib/kiosk/server/sd_jwt.rb +104 -0
- data/lib/kiosk/server/session_context.rb +2 -2
- data/lib/kiosk/server/signing_key.rb +18 -52
- data/lib/kiosk/server/tolled_calls.rb +46 -0
- data/lib/kiosk/server/verb_wire.rb +4 -4
- data/lib/kiosk/server/version.rb +1 -1
- data/lib/kiosk/server/well_known.rb +272 -205
- data/lib/kiosk/server/wire_rendering.rb +2 -2
- data/lib/kiosk/server.rb +8 -2
- data/lib/kiosk/skill_link.rb +6 -2
- data/listen.py +38 -8
- metadata +34 -24
- data/app/models/kiosk/cart_mandate.rb +0 -21
- data/lib/generators/kiosk/install/templates/create_kiosk_auth_challenges.rb.tt +0 -16
- data/lib/generators/kiosk/install/templates/create_kiosk_schema.rb.tt +0 -17
- data/lib/kiosk/server/agent_login.rb +0 -49
- data/lib/kiosk/server/agent_registration.rb +0 -88
- data/lib/kiosk/server/auth_challenge.rb +0 -33
- data/lib/kiosk/server/auth_challenge_stores.rb +0 -74
- data/lib/kiosk/server/pop_verifier.rb +0 -87
- data/lib/kiosk/server/schema_definitions.rb +0 -351
- data/lib/kiosk/server/settled_spend.rb +0 -21
- data/lib/kiosk/server/wrong_door.rb +0 -42
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 500b9a8093341b3f2a2c97aa33207bac718a05270ab079ce05b9b6546336164c
|
|
4
|
+
data.tar.gz: 11301b3066105605dad72413895eb2962dd37410dd675f0701ddcb9e0481b87d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5aa88f5ca10a288eb2335b09ab67cdc1cc6e98d9a8d64fd455a37e5984409cb6e5b4ee2146fd3f69f49046ba3fb79a5db4bc86e79ae9c66ca68f2f42842791ad
|
|
7
|
+
data.tar.gz: 489454b379ef7d3a872c0d0fb6f80b846aed54f4571a1dc84ac7ec36e0e0d00cc03d67842957830232db3d3e18b672bd2e7ae32e6e9c2e3aff2949e5a4aff00e
|
data/CHANGELOG.md
CHANGED
|
@@ -12,6 +12,202 @@ already written is edited.
|
|
|
12
12
|
|
|
13
13
|
## [Unreleased]
|
|
14
14
|
|
|
15
|
+
## [0.6.28] — 2026-10-26
|
|
16
|
+
|
|
17
|
+
- 2026-10-26: Version 0.6.28, the tree cut that matches skill 0.6.28.
|
|
18
|
+
|
|
19
|
+
## [0.6.27] — 2026-10-26
|
|
20
|
+
|
|
21
|
+
- 2026-10-26: Version 0.6.27, the tree cut that matches skill 0.6.27.
|
|
22
|
+
## [0.6.26] — 2026-10-26
|
|
23
|
+
|
|
24
|
+
- 2026-10-26: Version 0.6.26, the tree cut that matches skill 0.6.26.
|
|
25
|
+
- 2026-10-26: The spending cap is the most one `pay` may charge. `spending_cap_window_days` and the running total are removed; the manage page shows all the spend of an assistant.
|
|
26
|
+
- 2026-10-26: The PoW gate and the auth toll raise their ConfigurationError when kiosk-reputation or kiosk-pow-equihash is not required and only its version file is loaded.
|
|
27
|
+
|
|
28
|
+
## [0.6.25] — 2026-10-26
|
|
29
|
+
|
|
30
|
+
- 2026-10-26: Version 0.6.25, the tree cut that matches skill 0.6.25.
|
|
31
|
+
- 2026-10-26: The README names the two gems and `registration_pow_count` of the toll, the real KYC variables, every root discovery document and a matching route example.
|
|
32
|
+
- 2026-10-26: The manage-assistants and link-approval pages are whole documents with a title, in the engine layout `layouts/kiosk/server/application`.
|
|
33
|
+
- 2026-10-26: The manage-assistants page shows money amounts and a cap of 0 as «no payments allowed»; its `spending_cap` field takes an amount in the cap currency.
|
|
34
|
+
|
|
35
|
+
## [0.6.24] — 2026-10-26
|
|
36
|
+
|
|
37
|
+
- 2026-10-26: Version 0.6.24, the tree cut that matches skill 0.6.24.
|
|
38
|
+
- 2026-10-26: `validate_requests` holds the KYC callback body to the published `callback` object: a wrong-typed member is a 400 naming it.
|
|
39
|
+
- 2026-10-26: The `101` answer at `<endpoint>/events` carries the three version headers, as every answer under the mount does.
|
|
40
|
+
- 2026-10-26: A subscription whose reach is withdrawn leaves the connection, so a later `subscribe` with its identifier gets `reject_subscription`.
|
|
41
|
+
|
|
42
|
+
## [0.6.23] — 2026-10-26
|
|
43
|
+
|
|
44
|
+
- 2026-10-26: Version 0.6.23, the tree cut that matches skill 0.6.23.
|
|
45
|
+
|
|
46
|
+
## [0.6.22] — 2026-10-26
|
|
47
|
+
|
|
48
|
+
- 2026-10-26: Version 0.6.22, the tree cut that matches skill 0.6.22.
|
|
49
|
+
|
|
50
|
+
## [0.6.21] — 2026-10-26
|
|
51
|
+
|
|
52
|
+
- 2026-10-26: Version 0.6.21, the tree cut that matches skill 0.6.21.
|
|
53
|
+
|
|
54
|
+
## [0.6.20] — 2026-10-26
|
|
55
|
+
|
|
56
|
+
- 2026-10-26: Version 0.6.20, the tree cut that matches skill 0.6.20.
|
|
57
|
+
|
|
58
|
+
## [0.6.19] — 2026-10-26
|
|
59
|
+
|
|
60
|
+
- 2026-10-26: Version 0.6.19, the tree cut that matches skill 0.6.19.
|
|
61
|
+
|
|
62
|
+
## [0.6.18] — 2026-10-25
|
|
63
|
+
|
|
64
|
+
- 2026-10-25: Version 0.6.18, the tree cut that matches skill 0.6.18.
|
|
65
|
+
|
|
66
|
+
## [0.6.17] — 2026-10-25
|
|
67
|
+
|
|
68
|
+
- 2026-10-25: Version 0.6.17, the tree cut that matches skill 0.6.17.
|
|
69
|
+
- 2026-10-25: The event stream sends the replay of every subscription the upgrade URL declares in one ascending id order, and live events in the order the pubsub gives them.
|
|
70
|
+
|
|
71
|
+
## [0.6.16] — 2026-10-25
|
|
72
|
+
|
|
73
|
+
- 2026-10-25: Version 0.6.16, the tree cut that matches skill 0.6.16.
|
|
74
|
+
- Kiosk's tables are `kiosk_*` tables in the schema `c.schema` names, `public` by default. `kiosk:install` writes them as plain Rails migrations.
|
|
75
|
+
- `kiosk:install` creates no SQL functions and no `agent_tokens` or `agent_mappings` table, and takes no `--guc-namespace`.
|
|
76
|
+
|
|
77
|
+
## [0.6.15] — 2026-10-25
|
|
78
|
+
|
|
79
|
+
- 2026-10-25: Version 0.6.15, the tree cut that matches skill 0.6.15.
|
|
80
|
+
|
|
81
|
+
- 2026-10-25: The generated initializer shows `skill_sha256` and the command that makes it. An operator does not set `skill_url`: each release gives the skill of its version.
|
|
82
|
+
|
|
83
|
+
## [0.6.14] — 2026-10-25
|
|
84
|
+
|
|
85
|
+
- 2026-10-25: Version 0.6.14, the tree cut that matches skill 0.6.14.
|
|
86
|
+
|
|
87
|
+
## [0.6.13] — 2026-10-25
|
|
88
|
+
|
|
89
|
+
- 2026-10-25: Version 0.6.13, the tree cut that matches skill 0.6.13.
|
|
90
|
+
|
|
91
|
+
- 2026-10-25: The `invalid_client` 401 of the token and device-authorization endpoints names `Kiosk-Client-Assertion`; the 401 of the engine pages names `Kiosk-Session`.
|
|
92
|
+
|
|
93
|
+
## [0.6.12] — 2026-10-24
|
|
94
|
+
|
|
95
|
+
- 2026-10-24: Version 0.6.12, the tree cut that matches skill 0.6.12.
|
|
96
|
+
|
|
97
|
+
- 2026-10-24: The KYC checks read the issuer, key and audience of `c.kyc_provider`; `kyc_issuer`, `kyc_public_key` and `kyc_audience` are removed.
|
|
98
|
+
- 2026-10-24: `WrongDoor` is removed: the browser pages refuse a POST without the form's CSRF token alike, JSON or not.
|
|
99
|
+
- 2026-10-24: The payment receipt's `network_confirmation_id` is `not reported by the payment provider` when the PSP adapter answers none.
|
|
100
|
+
|
|
101
|
+
## [0.6.11] — 2026-10-24
|
|
102
|
+
|
|
103
|
+
- 2026-10-24: Version 0.6.11, the tree cut that matches skill 0.6.11.
|
|
104
|
+
|
|
105
|
+
- 2026-10-24: A binding records `agents.bound_at`. The manage-assistants page shows it as the time linked, the spend only with a `payment_provider`, and the cap only with a `spending_cap`.
|
|
106
|
+
|
|
107
|
+
## [0.6.10] — 2026-10-23
|
|
108
|
+
|
|
109
|
+
- 2026-10-23: Version 0.6.10, the tree cut that matches skill 0.6.10.
|
|
110
|
+
|
|
111
|
+
## [0.6.9] — 2026-10-23
|
|
112
|
+
|
|
113
|
+
- 2026-10-23: Version 0.6.9, the tree cut that matches skill 0.6.9.
|
|
114
|
+
|
|
115
|
+
## [0.6.8] — 2026-10-22
|
|
116
|
+
|
|
117
|
+
- 2026-10-22: The first binding merges the assistant account into the human's account: the recent spend counts its settlements and visits, also after an unlink. New table `assistant_accounts`.
|
|
118
|
+
- 2026-10-22: Version 0.6.8, the tree cut that matches skill 0.6.8.
|
|
119
|
+
|
|
120
|
+
## [0.6.7] — 2026-10-22
|
|
121
|
+
|
|
122
|
+
- 2026-10-22: Version 0.6.7, the tree cut that matches skill 0.6.7.
|
|
123
|
+
|
|
124
|
+
## [0.6.6] — 2026-10-22
|
|
125
|
+
|
|
126
|
+
- 2026-10-22: The gate counts the tolled calls of each account in `tolled_calls`; the assistants of one account share the count. A binding adds the previous account's count.
|
|
127
|
+
- 2026-10-22: The recent spend also counts what an assistant of the account paid before a binding moved it there.
|
|
128
|
+
- 2026-10-22: `kiosk:install` writes `tolled_calls` and no `agents.calls_since_proof`. An installed origin moves the count with a migration of its own.
|
|
129
|
+
- 2026-10-22: Version 0.6.6, the tree cut that matches skill 0.6.6.
|
|
130
|
+
|
|
131
|
+
## [0.6.5] — 2026-10-22
|
|
132
|
+
|
|
133
|
+
- 2026-10-22: Version 0.6.5, the tree cut that matches skill 0.6.5.
|
|
134
|
+
- 2026-10-22: A 401 from `/auth/claim`, `/auth/rotate`, `/auth/link` or `/auth/unlink` names its challenge, `Kiosk-Client-Assertion` or `Kiosk-Session`. The engine pages have no inline style.
|
|
135
|
+
|
|
136
|
+
## [0.6.4] — 2026-10-22
|
|
137
|
+
|
|
138
|
+
- 2026-10-22: Version 0.6.4, the tree cut that matches skill 0.6.4.
|
|
139
|
+
- 2026-10-22: The OAuth metadata lists the one scope `default`; a requested `scope` is ignored. A 401 names the protected-resource metadata, and every discovery document answers CORS.
|
|
140
|
+
- 2026-10-22: The wrong-door hint names `auth.registration_url` and `auth.token_url` of kiosk.json.
|
|
141
|
+
|
|
142
|
+
## [0.6.3] — 2026-10-22
|
|
143
|
+
|
|
144
|
+
- 2026-10-22: Version 0.6.3, the tree cut that matches skill 0.6.3.
|
|
145
|
+
- 2026-10-22: The gate counts each assistant's tolled calls in `agents.calls_since_proof`; a paid proof sets it to zero. A paid proof no longer buys the rest of the access token.
|
|
146
|
+
- 2026-10-22: `kiosk:install` writes `agents.calls_since_proof`. An installed origin adds it with a migration of its own.
|
|
147
|
+
|
|
148
|
+
## [0.6.2] — 2026-10-22
|
|
149
|
+
|
|
150
|
+
- 2026-10-22: Version 0.6.2, the tree cut that matches skill 0.6.2.
|
|
151
|
+
- 2026-10-22: `/auth.md` names the skill as "Skill for AI assistants". The OpenAPI tag of `schema` and `pay` is `reserved`, and refusal messages say "Kiosk HTTP API".
|
|
152
|
+
|
|
153
|
+
## [0.6.1] — 2026-10-22
|
|
154
|
+
|
|
155
|
+
- 2026-10-22: Version 0.6.1, the tree cut that matches skill 0.6.1.
|
|
156
|
+
- 2026-10-22: The OAuth metadata documents carry `scopes_supported: []`, because an AI assistant requests no scope. `/auth.md` writes each Discover URL bare, so a scanner reads it.
|
|
157
|
+
- 2026-10-21: A DPoP proof or client assertion whose `alg` is not the algorithm of its key is refused with a message that names that algorithm.
|
|
158
|
+
|
|
159
|
+
## [0.6.0] — 2026-10-21
|
|
160
|
+
|
|
161
|
+
- 2026-10-21: The engine signs tokens, checkouts and receipts EdDSA with an Ed25519 `c.signing_key`; an RSA key is refused.
|
|
162
|
+
- 2026-10-21: Assistant keys are Ed25519 (EdDSA). `c.assistant_algorithms = %w[EdDSA ES256]` also accepts P-256 keys; RSA keys are refused.
|
|
163
|
+
- 2026-10-21: A checkout carries a random 128-bit `jti`, because an EdDSA signature is the same for the same claims.
|
|
164
|
+
- 2026-10-21: `c.kyc_public_key` is an Ed25519 key, and an attestation is an EdDSA JWS.
|
|
165
|
+
- 2026-10-21: Version 0.6.0, the tree cut that matches skill 0.6.0.
|
|
166
|
+
|
|
167
|
+
## [0.5.27] — 2026-10-21
|
|
168
|
+
|
|
169
|
+
- 2026-10-21: Registration is RFC 7591 at `POST <endpoint>/oauth/register`; the token endpoint is core and gives tokens for a client assertion (RFC 7523) and a DPoP proof.
|
|
170
|
+
- 2026-10-21: Device authorization, the link-code claim and the key rotation authenticate with a client assertion; the claim answers 204, the rotation the client information.
|
|
171
|
+
- 2026-10-21: Removed `GET /auth/challenge`, `POST /auth/register`, `/auth/login` and `/auth/revoke`, the challenge store, its two settings and the `kiosk.auth_challenges` table.
|
|
172
|
+
- 2026-10-21: agents.txt and agents.json name `oauth2`; the RFC 8414 metadata is always served, with registration and `private_key_jwt`.
|
|
173
|
+
- 2026-10-21: `AssistantKey::ALGORITHMS` is the one list of signing algorithms that client assertions, DPoP proofs and the metadata read.
|
|
174
|
+
- 2026-10-21: Version 0.5.27, the tree cut that matches skill 0.5.27.
|
|
175
|
+
|
|
176
|
+
## [0.5.26] — 2026-10-21
|
|
177
|
+
|
|
178
|
+
- 2026-10-21: Serves RFC 9728 protected resource metadata at `/.well-known/oauth-protected-resource`, and the ARD manifest also at `/.well-known/ai-catalog.json` with `specVersion`.
|
|
179
|
+
- 2026-10-21: Version 0.5.26, the tree cut that matches skill 0.5.26.
|
|
180
|
+
|
|
181
|
+
## [0.5.25] — 2026-10-21
|
|
182
|
+
|
|
183
|
+
- 2026-10-21: Version 0.5.25, the tree cut that matches skill 0.5.25.
|
|
184
|
+
|
|
185
|
+
## [0.5.24] — 2026-10-21
|
|
186
|
+
|
|
187
|
+
- 2026-10-21: A settled `pay` answers the AP2 v0.2 `checkout_receipt` and `payment_receipt`, JWTs signed PS256 with `c.signing_key`, each naming its mandate.
|
|
188
|
+
- 2026-10-21: `kiosk.settlements` gains `network_confirmation_id`, so a repeat of a settled pair answers the same payment receipt claims.
|
|
189
|
+
- 2026-10-21: Version 0.5.24, the tree cut that matches skill 0.5.24.
|
|
190
|
+
|
|
191
|
+
## [0.5.23] — 2026-10-21
|
|
192
|
+
|
|
193
|
+
- 2026-10-21: Every access token carries `cnf.jkt`, and `IdentityResolution` refuses a call without a DPoP proof by that key (`Errors::AccessTokenRefused`, `WWW-Authenticate: DPoP`).
|
|
194
|
+
- 2026-10-21: `POST <endpoint>/auth/rotate` (`AgentRotation`) puts a new key on an agent and revokes its earlier tokens.
|
|
195
|
+
- 2026-10-21: `c.previous_signing_key` is published in the JWKS and accepted for tokens and checkouts; `c.signing_keys` lists both.
|
|
196
|
+
- 2026-10-21: The payment-setup `402` names `Kiosk-Payment-Setup` in `WWW-Authenticate`. The device grant answers `token_type: "DPoP"`.
|
|
197
|
+
- 2026-10-21: Version 0.5.23, the tree cut that matches skill 0.5.23.
|
|
198
|
+
|
|
199
|
+
## [0.5.22] — 2026-10-21
|
|
200
|
+
|
|
201
|
+
- 2026-10-21: `pay` verifies a closed AP2 v0.2 checkout mandate and payment mandate, each an SD-JWT, against a checkout this origin signed PS256.
|
|
202
|
+
- 2026-10-21: `Kiosk::Payable#checkout` signs the `checkout_jwt` an action answers; `c.checkout_price_checker` replaces `c.cart_price_checker`.
|
|
203
|
+
- 2026-10-21: The mandate tables are `checkout_mandates`, `payment_mandates` and `settlements`, with one live pair per checkout. The JWK names no `alg`.
|
|
204
|
+
- 2026-10-21: Version 0.5.22, the tree cut that matches skill 0.5.22.
|
|
205
|
+
|
|
206
|
+
## [0.5.21] — 2026-10-21
|
|
207
|
+
|
|
208
|
+
- agents.txt and agents.json name `x-kiosk-pop` and claim no AP2, required payment or required identity. `/.well-known/agent-configuration` is not served.
|
|
209
|
+
- New: `/.well-known/oauth-authorization-server` (RFC 8414), `/.well-known/agent-skills/index.json` and `/.well-known/ard.json`.
|
|
210
|
+
- The api-catalog links the descriptions from the endpoint and carries `rel="api-catalog"`; `Kiosk::SkillLink` adds that link to a page.
|
|
15
211
|
- `Kiosk.clock_gap_note(name, zone, caller_zone)` answers one sentence on how far a place's clock is from the caller's now, else `nil`.
|
|
16
212
|
|
|
17
213
|
## [0.5.20] — 2026-10-20
|