@1claw/sdk 0.61.12 → 0.61.14

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/README.md CHANGED
@@ -419,7 +419,7 @@ Key properties:
419
419
 
420
420
  ### TEE Enforcement (Pro+)
421
421
 
422
- Lock down agents so signing and execution requests **must** route through the hardware enclave (Shroud TEE). Direct Vault API calls are rejected with 403.
422
+ Lock down agents so signing and execution **must** happen in the hardware enclave (Shroud TEE). The vault enforces it by forwarding to Shroud, not by rejecting you.
423
423
 
424
424
  ```typescript
425
425
  await client.agents.update(agentId, {
@@ -429,13 +429,12 @@ await client.agents.update(agentId, {
429
429
  ```
430
430
 
431
431
  When `intents_require_tee` is true:
432
- - Transaction submit/sign requests to `api.1claw.co` are rejected (403)
433
- - Agents must route through `shroud.1claw.co` where signing happens inside TEE memory
432
+ - Transaction submit/sign requests are signed inside Shroud's TEE whichever host you call — the vault forwards a request that arrives at `api.1claw.co` to Shroud on the agent's behalf (vault ≥ 0.61.19), so the SDK needs no special `baseUrl`
433
+ - Direct calls to `shroud.1claw.co` still work and are required for DPoP-bound tokens
434
434
 
435
435
  When `execution_require_tee` is true:
436
- - Execute requests to `api.1claw.co` are rejected (403)
436
+ - Execute requests run on Shroud's TEE execution surface — forced by the vault, no client routing needed
437
437
  - All direct secret reads by the agent are blocked — forces use of Execution Intent bindings
438
- - Agents must route through `shroud.1claw.co`
439
438
 
440
439
  Both require `intents_api_enabled` / `execution_intents_enabled` to be on first.
441
440
 
@@ -636,6 +635,17 @@ const client = createClient({
636
635
  // Tokens refresh transparently — just make API calls
637
636
  ```
638
637
 
638
+ The exchange response also says what the agent is entitled to (vault ≥ 0.61.17), so a tool host can shape its surface without a second call:
639
+
640
+ ```typescript
641
+ const res = await client.auth.agentToken({ api_key: "ocv_..." });
642
+ res.data?.entitlements;
643
+ // { intents_api: true, execution_intents: false, execution_require_tee: false, intents_require_tee: false,
644
+ // cards: false, memory: true, shroud: false, discoverable: false, treasury_signer: false, has_delegations: false }
645
+ ```
646
+
647
+ Changing a claim-bearing agent field (`scopes`, `vault_ids`, `is_active`, `intents_api_enabled`, `shroud_enabled`, `execution_intents_enabled`, `*_require_tee`, `environment`) via `client.agents.update()` revokes the agent's outstanding JWTs; the SDK's next request re-exchanges automatically.
648
+
639
649
  ## DPoP (Proof-of-Possession)
640
650
 
641
651
  Enable [DPoP (RFC 9449)](https://datatracker.ietf.org/doc/html/rfc9449) to bind tokens to the client's ephemeral keypair. When enabled, the SDK generates a P-256 ECDSA keypair at startup and attaches a `DPoP` proof JWT to every request — stolen tokens are unusable without the matching private key.