@deepdockai/cli 1.0.11 → 1.0.12

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 CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.0.12
4
+
5
+ - The agent skill describes `rate_limited` for action calls: 600 calls and 120 writes per minute per API key, answered with `Retry-After: 60` and `retryAfterSeconds: 60`. It named only the pairing limit before.
6
+
3
7
  ## 1.0.11
4
8
 
5
9
  - Every system of a device carries `accessLastCheckedAt`, in the device list and in `GET /v1/devices/{deviceId}/systems`. It is set when `access` is the last known value because the device could not read it (its database stopped or unreachable), and then says when the device last read it. It is `null` whenever the latest report read the access. The agent skill's TypeScript client types it, and its concepts reference explains it.
package/dist/deepdock.js CHANGED
@@ -11428,7 +11428,7 @@ import { spawn } from "node:child_process";
11428
11428
  import { homedir, hostname } from "node:os";
11429
11429
 
11430
11430
  // src/version.ts
11431
- var VERSION = "1.0.11";
11431
+ var VERSION = "1.0.12";
11432
11432
 
11433
11433
  // src/runtime.ts
11434
11434
  var DEFAULT_BASE_URL = "https://api.deepdock.ai";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deepdockai/cli",
3
- "version": "1.0.11",
3
+ "version": "1.0.12",
4
4
  "description": "Deepdock partner CLI: pair devices, see systems and actions, create the API key your code runs them with.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -98,9 +98,12 @@ Never invent an id, copy one from another device, or hard-code one from a test r
98
98
 
99
99
  ## Rate limits
100
100
 
101
- The only documented limit is on pairing: 5 failed claim attempts per key per rolling 60 seconds
102
- (`429 rate_limited`). Handle `429` generically anyway (honour `Retry-After` when present, back off,
103
- do not loop), since limits can be added additively.
101
+ Each API key has its own budget on every `/v1` call: 600 calls per minute, and 120 writes per
102
+ minute. A write (an action run that needs an `Idempotency-Key`) counts against both. Over a budget
103
+ the call answers `429 rate_limited` with `Retry-After: 60` and `retryAfterSeconds: 60` in the error
104
+ body. Honour it, back off and do not loop; a retried write keeps its `Idempotency-Key`. The numbers
105
+ can change, so treat them as approximate. Pairing has a tighter limit of its own: 5 failed claim
106
+ attempts per key per rolling 60 seconds, whose `429` carries neither the header nor the field.
104
107
 
105
108
  ## Response headers worth reading
106
109
 
@@ -17,7 +17,7 @@ with the **same** `Idempotency-Key`); **Show** says what the end user should see
17
17
  | `payload_too_large` | 413 | the request body is over 1 MiB | no; send less | nothing; a developer bug, or shorten the text |
18
18
  | `unauthenticated` | 401 | the key is missing, malformed, for the other environment, unknown, revoked or expired | no | "Deepdock API key refused; check it in the dashboard" to an operator |
19
19
  | `not_found` | 404 | no such route; an update whose id matches no record; a write naming a record that does not exist or belongs to another one | no | "record not found" when it is a record; otherwise a bug |
20
- | `rate_limited` | 429 | too many failed pairing attempts with this key (5 per 60 s) | yes, after up to a minute (`Retry-After` when present) | "try again in a minute" |
20
+ | `rate_limited` | 429 | more than 600 calls, or more than 120 writes (counted in both), with this key in a minute; or more than 5 failed pairing claims in 60 s | yes, after `Retry-After: 60` (`retryAfterSeconds: 60` in the body); a write keeps its key. The pairing claim answer has neither: wait up to a minute | "try again in a minute" |
21
21
 
22
22
  Codes your `/v1` code never receives, listed so the enum is complete: `organization_required`
23
23
  (403), `forbidden` (403), `conflict` (409), `already_member` (409) and `client_outdated` (400) are