@runlot/api 0.1.0-rc.46 → 0.1.0-rc.48
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/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/schema.d.ts +212 -148
- package/dist/schema.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/schema.d.ts
CHANGED
|
@@ -610,7 +610,7 @@ export interface paths {
|
|
|
610
610
|
put?: never;
|
|
611
611
|
/**
|
|
612
612
|
* Creates a diagnostic image (`runlot pg export`)
|
|
613
|
-
* @description **
|
|
613
|
+
* @description **This is not a backup** (docs/env-db-assembly.md §5). What it creates is an **immutable
|
|
614
614
|
* diagnostic key** under the current `(project, epoch)`, and it moves none of the latest,
|
|
615
615
|
* freshness, or retention pointers, nor does it affect the name of the next automatic
|
|
616
616
|
* backup.
|
|
@@ -622,14 +622,14 @@ export interface paths {
|
|
|
622
622
|
* this endpoint creates stays **outside** that namespace — restore cannot select it,
|
|
623
623
|
* pruning does not count it, and it cannot move latest.
|
|
624
624
|
*
|
|
625
|
-
* **
|
|
625
|
+
* **This is not idempotent.** Each call creates one more image, because the server builds a new
|
|
626
626
|
* stamp for every request. The only thing absorbed idempotently is a **retry of the same
|
|
627
627
|
* stamp** once it has reached the node.
|
|
628
628
|
*
|
|
629
629
|
* Requires member or higher only. The image is the entire database, so it is not something
|
|
630
630
|
* a viewer should fetch in a single call.
|
|
631
631
|
*
|
|
632
|
-
*
|
|
632
|
+
* It is slow. The response arrives only after the dump finishes — in proportion to size — and
|
|
633
633
|
* the project's actor is held for that duration.
|
|
634
634
|
*/
|
|
635
635
|
post: operations["exportDatabase"];
|
|
@@ -804,8 +804,7 @@ export interface paths {
|
|
|
804
804
|
/**
|
|
805
805
|
* Aborts an in-progress operation (`runlot pg abort`)
|
|
806
806
|
* @description Only possible **before** an unrecoverable phase (docs/phase5.md B4): evict,
|
|
807
|
-
* restore_generation, and delete are abortable up to committing; restore is not. Aborting
|
|
808
|
-
* returns the batch to active and leaves `terminalCode=aborted`.
|
|
807
|
+
* restore_generation, and delete are abortable up to committing; restore is not. Aborting returns the placement to active and leaves `terminalCode=aborted`.
|
|
809
808
|
*
|
|
810
809
|
* admin and above. The server **reads first, then aborts** — reversing the order would
|
|
811
810
|
* abort another project's operation for real before returning 404.
|
|
@@ -978,7 +977,7 @@ export interface paths {
|
|
|
978
977
|
*/
|
|
979
978
|
post: operations["grantStorage"];
|
|
980
979
|
/**
|
|
981
|
-
*
|
|
980
|
+
* Remove project storage (`runlot storage delete`)
|
|
982
981
|
* @description **Objects are not deleted.** Deleting everything under the prefix must be a CP operation
|
|
983
982
|
* idempotent by `op_id` (docs/storage.md §7, the same lane as database deletion), and that
|
|
984
983
|
* lane does not exist yet — this fact is recorded in the audit log.
|
|
@@ -1002,21 +1001,21 @@ export interface paths {
|
|
|
1002
1001
|
cookie?: never;
|
|
1003
1002
|
};
|
|
1004
1003
|
/**
|
|
1005
|
-
* AI
|
|
1006
|
-
* @description `env.ai`
|
|
1007
|
-
*
|
|
1008
|
-
* 가격표다.
|
|
1004
|
+
* AI model catalog (`runlot ai models`)
|
|
1005
|
+
* @description Every model `env.ai` can call (docs/ai.md §2.3). **Any signed-in user can read it** — what you can
|
|
1006
|
+
* buy is not an org secret, and this list is the price list.
|
|
1009
1007
|
*
|
|
1010
|
-
*
|
|
1011
|
-
* (`listPrice: true`,
|
|
1012
|
-
*
|
|
1013
|
-
*
|
|
1008
|
+
* There are two lanes. `frontier` passes the provider's **list price** straight through
|
|
1009
|
+
* (`listPrice: true`, zero margin) — that is why the provider's name stays in the model id and
|
|
1010
|
+
* `provider` is included. `value` models are the ones we buy wholesale and sell at our own price, so
|
|
1011
|
+
* `provider` is **not included**: that is a value we swap whenever we want.
|
|
1014
1012
|
*
|
|
1015
|
-
*
|
|
1016
|
-
*
|
|
1017
|
-
*
|
|
1013
|
+
* Prices are integer **microcents** per million tokens (1 µ¢ = 1e-8 USD). The point is that the
|
|
1014
|
+
* server does not fix the number of decimal places — a small call rounds to 0 in cents
|
|
1015
|
+
* (docs/ai.md §3.1), and that fact must not be tied to a single format string.
|
|
1018
1016
|
*
|
|
1019
|
-
*
|
|
1017
|
+
* A model id that is not on this list returns 400 at call time. **There is no arbitrary model
|
|
1018
|
+
* passthrough.**
|
|
1020
1019
|
*/
|
|
1021
1020
|
get: operations["listAIModels"];
|
|
1022
1021
|
put?: never;
|
|
@@ -1038,45 +1037,44 @@ export interface paths {
|
|
|
1038
1037
|
cookie?: never;
|
|
1039
1038
|
};
|
|
1040
1039
|
/**
|
|
1041
|
-
* AI
|
|
1042
|
-
* @description
|
|
1043
|
-
*
|
|
1044
|
-
* `granted`
|
|
1040
|
+
* AI status (`runlot ai usage`)
|
|
1041
|
+
* @description Whether AI is turned on, the four limits, the org's balance, and the last 24 hours of usage
|
|
1042
|
+
* (docs/ai.md §6). The limits come populated even when AI is off — they are the material for "here is
|
|
1043
|
+
* what the limits would be if you turned this on", and `granted` is the real state.
|
|
1045
1044
|
*
|
|
1046
|
-
* `maxOutputTokens
|
|
1045
|
+
* `0` in `maxOutputTokens` and `maxInputTokens` means **the model decides**.
|
|
1047
1046
|
*
|
|
1048
|
-
* `spentMicroCents24h`
|
|
1049
|
-
*
|
|
1050
|
-
* 이유다.
|
|
1047
|
+
* `spentMicroCents24h` cannot be built from `usage_hourly`, so it is read from the ledger instead —
|
|
1048
|
+
* prices are a function of the moment, which is why 0046 split the two tables.
|
|
1051
1049
|
*
|
|
1052
|
-
* viewer
|
|
1050
|
+
* viewer or above.
|
|
1053
1051
|
*/
|
|
1054
1052
|
get: operations["getAI"];
|
|
1055
1053
|
put?: never;
|
|
1056
1054
|
/**
|
|
1057
|
-
*
|
|
1058
|
-
* @description
|
|
1059
|
-
*
|
|
1055
|
+
* Turns on AI (a deployment calls this after reading `"ai": true`)
|
|
1056
|
+
* @description **This is idempotent.** There is no request body — neither the limits nor the model list is a
|
|
1057
|
+
* value the user sets.
|
|
1060
1058
|
*
|
|
1061
|
-
*
|
|
1062
|
-
*
|
|
1063
|
-
*
|
|
1059
|
+
* Once it is on, the node connects `env.ai` on the next convergence. **The bundle must also say
|
|
1060
|
+
* `\"ai\": true`** — turning it on is the CP's side, and which system workers start is the bundle's
|
|
1061
|
+
* side.
|
|
1064
1062
|
*
|
|
1065
|
-
*
|
|
1066
|
-
*
|
|
1067
|
-
*
|
|
1063
|
+
* There is **no node credential check**: the upstream credentials (Bedrock, Vertex) live in the
|
|
1064
|
+
* node's site.env, so the CP has no record of them. On a node without them, turning it on still
|
|
1065
|
+
* succeeds and the call returns 503 (an open item in docs/ai.md §9).
|
|
1068
1066
|
*
|
|
1069
|
-
* member
|
|
1067
|
+
* member and above. Audited as `ai.grant`.
|
|
1070
1068
|
*/
|
|
1071
1069
|
post: operations["grantAI"];
|
|
1072
1070
|
/**
|
|
1073
|
-
*
|
|
1074
|
-
* @description
|
|
1071
|
+
* Turns off AI (`runlot ai delete`)
|
|
1072
|
+
* @description From the next deployment on, there is no `env.ai`. This is idempotent.
|
|
1075
1073
|
*
|
|
1076
|
-
*
|
|
1077
|
-
*
|
|
1074
|
+
* **The ledger is not deleted** — it is the record of money already paid. The credit balance stays
|
|
1075
|
+
* as well: the balance belongs to the org, and what you are turning off belongs to the project.
|
|
1078
1076
|
*
|
|
1079
|
-
* admin.
|
|
1077
|
+
* admin. Audited as `ai.revoke`.
|
|
1080
1078
|
*/
|
|
1081
1079
|
delete: operations["revokeAI"];
|
|
1082
1080
|
options?: never;
|
|
@@ -1094,17 +1092,18 @@ export interface paths {
|
|
|
1094
1092
|
cookie?: never;
|
|
1095
1093
|
};
|
|
1096
1094
|
/**
|
|
1097
|
-
* AI
|
|
1098
|
-
* @description
|
|
1099
|
-
*
|
|
1095
|
+
* AI credit balance and auto top-up settings (`runlot ai credit`)
|
|
1096
|
+
* @description The balance is in **microcents** and can go negative (docs/ai.md §3.3 — the balance check runs
|
|
1097
|
+
* before a call and the deduction after it, so a single call that has already started can take the
|
|
1098
|
+
* balance past zero).
|
|
1100
1099
|
*
|
|
1101
|
-
* `hasPaymentMethod`
|
|
1102
|
-
*
|
|
1100
|
+
* If `hasPaymentMethod` is false, auto top-up cannot be turned on — there is no saved card, and
|
|
1101
|
+
* **the first top-up is always manual** (that is what saves the card).
|
|
1103
1102
|
*
|
|
1104
|
-
* `autoTopupsToday`
|
|
1105
|
-
*
|
|
1103
|
+
* `autoTopupsToday` and `autoTopupPerDay` come together. That cap is the ceiling on a day's spend,
|
|
1104
|
+
* so a screen has to show both to answer "why didn't it top up".
|
|
1106
1105
|
*
|
|
1107
|
-
* member
|
|
1106
|
+
* member or above.
|
|
1108
1107
|
*/
|
|
1109
1108
|
get: operations["getAICredit"];
|
|
1110
1109
|
put?: never;
|
|
@@ -1125,12 +1124,12 @@ export interface paths {
|
|
|
1125
1124
|
cookie?: never;
|
|
1126
1125
|
};
|
|
1127
1126
|
/**
|
|
1128
|
-
* AI
|
|
1129
|
-
* @description
|
|
1130
|
-
*
|
|
1131
|
-
*
|
|
1127
|
+
* AI ledger
|
|
1128
|
+
* @description This is the source of truth for amounts (0046). `kind` is `call` (negative), `topup` (positive),
|
|
1129
|
+
* or `adjust`. The cursor is `ledger_id` — cutting by time would split two rows in the same
|
|
1130
|
+
* millisecond across a page boundary.
|
|
1132
1131
|
*
|
|
1133
|
-
* member
|
|
1132
|
+
* member or above.
|
|
1134
1133
|
*/
|
|
1135
1134
|
get: operations["listAILedger"];
|
|
1136
1135
|
put?: never;
|
|
@@ -1153,18 +1152,16 @@ export interface paths {
|
|
|
1153
1152
|
get?: never;
|
|
1154
1153
|
put?: never;
|
|
1155
1154
|
/**
|
|
1156
|
-
*
|
|
1157
|
-
* @description
|
|
1158
|
-
*
|
|
1159
|
-
*
|
|
1160
|
-
* **돌아온 브라우저는 증거가 아니다.** 잔액을 올리는 것은 `order.paid` 웹훅
|
|
1161
|
-
* 하나이고, 화면은 성공 사건 뒤에 잔액을 폴링한다.
|
|
1155
|
+
* Credit top-up checkout
|
|
1156
|
+
* @description Returns an embedded checkout URL (the same shape as docs/billing.md §3.1 — the dashboard opens it
|
|
1157
|
+
* in an iframe).
|
|
1162
1158
|
*
|
|
1163
|
-
*
|
|
1164
|
-
*
|
|
1165
|
-
* 자유롭게 두면 표가 둘이 된다.
|
|
1159
|
+
* **A browser coming back is not proof.** The one thing that raises the balance is the `order.paid`
|
|
1160
|
+
* webhook, and the screen polls the balance after the success event.
|
|
1166
1161
|
*
|
|
1167
|
-
*
|
|
1162
|
+
* `microCents` must be one of the listed tiers — auto top-up uses the same list (it charges with
|
|
1163
|
+
* nobody watching, so the amount has to be one of the enumerated values), and leaving manual top-up
|
|
1164
|
+
* free-form would create two tables.
|
|
1168
1165
|
*/
|
|
1169
1166
|
post: operations["createAICreditCheckout"];
|
|
1170
1167
|
delete?: never;
|
|
@@ -1184,19 +1181,19 @@ export interface paths {
|
|
|
1184
1181
|
};
|
|
1185
1182
|
get?: never;
|
|
1186
1183
|
/**
|
|
1187
|
-
*
|
|
1188
|
-
* @description
|
|
1189
|
-
*
|
|
1190
|
-
*
|
|
1191
|
-
*
|
|
1184
|
+
* Turns auto top-up on or off
|
|
1185
|
+
* @description **Turning it on is explicit consent** (docs/ai.md §3.5). The screen shows "when the balance falls
|
|
1186
|
+
* below X, we charge Y to the saved card, at most N times a day" verbatim and takes a checkbox — card
|
|
1187
|
+
* network rules require prior consent for off-session charges, and that sentence is the content of
|
|
1188
|
+
* the consent.
|
|
1192
1189
|
*
|
|
1193
|
-
*
|
|
1194
|
-
*
|
|
1195
|
-
*
|
|
1196
|
-
*
|
|
1197
|
-
*
|
|
1190
|
+
* The server checks three things: whether a payment method is saved (409 if not), whether the amount
|
|
1191
|
+
* is on the tier list, and whether the threshold is **greater than 0 and smaller than the top-up
|
|
1192
|
+
* amount**. A threshold of 0 makes the whole asynchronous top-up window return 402, and a threshold
|
|
1193
|
+
* at or above the top-up amount leaves the balance still below the threshold after a top-up, so it
|
|
1194
|
+
* keeps topping up to the daily cap — that is a trap, not a setting.
|
|
1198
1195
|
*
|
|
1199
|
-
* admin.
|
|
1196
|
+
* admin. Audited as `ai.autotopup.on` / `ai.autotopup.off`.
|
|
1200
1197
|
*/
|
|
1201
1198
|
put: operations["setAIAutoTopup"];
|
|
1202
1199
|
post?: never;
|
|
@@ -1228,7 +1225,7 @@ export interface paths {
|
|
|
1228
1225
|
put?: never;
|
|
1229
1226
|
/**
|
|
1230
1227
|
* Turns on email (a deployment calls this after reading `"email": true`)
|
|
1231
|
-
* @description **
|
|
1228
|
+
* @description **This is idempotent.** There is no request body — we determine the address
|
|
1232
1229
|
* (`<project>.<org>.<mail-domain>`), and the plan determines the limit. The address is
|
|
1233
1230
|
* fixed to the name at the time of grant.
|
|
1234
1231
|
*
|
|
@@ -1402,16 +1399,15 @@ export interface paths {
|
|
|
1402
1399
|
head?: never;
|
|
1403
1400
|
/**
|
|
1404
1401
|
* Change settings (`runlot auth set`)
|
|
1405
|
-
* @description **
|
|
1402
|
+
* @description **This is a partial update.** Only the fields you send change, and the rest stay as they are.
|
|
1406
1403
|
* If the UI sends all three brand settings every time a single switch changes, a later
|
|
1407
1404
|
* save can overwrite an earlier one when two users edit the same settings.
|
|
1408
1405
|
*
|
|
1409
|
-
* Returns 404 `not_granted` if
|
|
1410
|
-
* alone ahead of time, because the setting values are stored
|
|
1411
|
-
* setting record.
|
|
1406
|
+
* Returns 404 `not_granted` if auth has not been turned on for this project. You cannot save settings
|
|
1407
|
+
* alone ahead of time, because the setting values are stored in the record created when auth was turned on.
|
|
1412
1408
|
*
|
|
1413
1409
|
* `sessionDays` is a setting that also determines the size of the session table
|
|
1414
|
-
* (docs/auth.md §13 — it stays within the
|
|
1410
|
+
* (docs/auth.md §13 — it stays well within the database size cap).
|
|
1415
1411
|
*
|
|
1416
1412
|
* Requires member or higher. Audited as `auth.settings`.
|
|
1417
1413
|
*/
|
|
@@ -2353,7 +2349,7 @@ export interface paths {
|
|
|
2353
2349
|
get?: never;
|
|
2354
2350
|
put?: never;
|
|
2355
2351
|
/**
|
|
2356
|
-
* Renews
|
|
2352
|
+
* Renews a domain (`runlot domains renew`)
|
|
2357
2353
|
* @description Requires admin or higher. Audited as `domain.renew`.
|
|
2358
2354
|
*/
|
|
2359
2355
|
post: operations["renewDomain"];
|
|
@@ -2457,7 +2453,7 @@ export interface paths {
|
|
|
2457
2453
|
get?: never;
|
|
2458
2454
|
put?: never;
|
|
2459
2455
|
/**
|
|
2460
|
-
*
|
|
2456
|
+
* Re-reads this domain from the registrar now (`runlot domains sync`)
|
|
2461
2457
|
* @description Requires member or higher. The registrar is the source of truth for
|
|
2462
2458
|
* expiry date, lock, and NS. If the registrar responds that it is not in
|
|
2463
2459
|
* our account, that is `transferred_out` — the only signal that a transfer
|
|
@@ -3003,7 +2999,7 @@ export interface components {
|
|
|
3003
2999
|
};
|
|
3004
3000
|
/**
|
|
3005
3001
|
* @description Becomes a single label of the hostname, so it follows DNS rules. Since
|
|
3006
|
-
* the project name goes directly into `<name
|
|
3002
|
+
* the project name goes directly into `<name>.<org>.<app-domain>`, not enforcing this
|
|
3007
3003
|
* here would let you create a project that exists but is unreachable.
|
|
3008
3004
|
*/
|
|
3009
3005
|
Slug: string;
|
|
@@ -3059,6 +3055,14 @@ export interface components {
|
|
|
3059
3055
|
* (the 409 `project_limit` from `createProject`).
|
|
3060
3056
|
*/
|
|
3061
3057
|
projectLimit: number;
|
|
3058
|
+
/**
|
|
3059
|
+
* Format: int64
|
|
3060
|
+
* @description The project database size cap for this plan (Free 500 MiB, Pro 8 GiB). The
|
|
3061
|
+
* same derived-value reasoning as `projectLimit`: the dashboard's usage meter and
|
|
3062
|
+
* the CLI's limit line read it from here instead of carrying their own table.
|
|
3063
|
+
* Nothing rejects a write at the cap; see `/docs/data/database/size-cap`.
|
|
3064
|
+
*/
|
|
3065
|
+
dbCapBytes: number;
|
|
3062
3066
|
};
|
|
3063
3067
|
Notification: {
|
|
3064
3068
|
/** Format: int64 */
|
|
@@ -3271,7 +3275,7 @@ export interface components {
|
|
|
3271
3275
|
user: string;
|
|
3272
3276
|
password: string;
|
|
3273
3277
|
/**
|
|
3274
|
-
* @description **
|
|
3278
|
+
* @description **Connections with sslmode=disable are rejected.** front cuts off the SSLRequest at the
|
|
3275
3279
|
* rejection stage, so `disable` never connects in the first place.
|
|
3276
3280
|
* @enum {string}
|
|
3277
3281
|
*/
|
|
@@ -3363,16 +3367,55 @@ export interface components {
|
|
|
3363
3367
|
*/
|
|
3364
3368
|
seq: number;
|
|
3365
3369
|
/**
|
|
3366
|
-
* @description Offsite key (`gen/<project>/<epoch>/<stamp>-<seq>.
|
|
3367
|
-
* @example gen/2f1c…/7/20260902T031500Z-0003.
|
|
3370
|
+
* @description Offsite key (`gen/<project>/<epoch>/<stamp>-<seq>.log`)
|
|
3371
|
+
* @example gen/2f1c…/7/20260902T031500Z-0003.log
|
|
3368
3372
|
*/
|
|
3369
3373
|
key: string;
|
|
3370
3374
|
/**
|
|
3371
3375
|
* Format: int64
|
|
3372
|
-
* @description The size of the **object stored offsite**. An encrypted
|
|
3373
|
-
* the plaintext
|
|
3376
|
+
* @description The size of the **object stored offsite**. An encrypted backup is larger than
|
|
3377
|
+
* the plaintext. For a commit log this is the size of the logged page versions only —
|
|
3378
|
+
* see `imageBytes` for the size of the database a restore produces.
|
|
3374
3379
|
*/
|
|
3375
3380
|
bytes: number;
|
|
3381
|
+
/**
|
|
3382
|
+
* @description `true` when this object alone restores the database; `false` for a commit log, which
|
|
3383
|
+
* is replayed on top of the chain that ends at `prevTxnId`. Restoring a log pours its
|
|
3384
|
+
* whole chain (full first); the chain is resolved by the server and never crosses an epoch.
|
|
3385
|
+
*/
|
|
3386
|
+
full: boolean;
|
|
3387
|
+
/**
|
|
3388
|
+
* Format: int64
|
|
3389
|
+
* @description For a commit log, the last commit of the backup it links to. 0 for a full.
|
|
3390
|
+
*/
|
|
3391
|
+
prevTxnId?: number;
|
|
3392
|
+
/**
|
|
3393
|
+
* Format: int64
|
|
3394
|
+
* @description The size of the database a restore of this generation produces.
|
|
3395
|
+
*/
|
|
3396
|
+
imageBytes: number;
|
|
3397
|
+
/**
|
|
3398
|
+
* Format: int64
|
|
3399
|
+
* @description The first commit this backup carries. A backup is an ordered log of the commits since
|
|
3400
|
+
* the previous one, so every commit in `[firstTxnId, txnId]` is a restore point
|
|
3401
|
+
* (`RestoreRequest.txnId`). Equal to `txnId` for a full and for a backup with no commits.
|
|
3402
|
+
*/
|
|
3403
|
+
firstTxnId: number;
|
|
3404
|
+
/**
|
|
3405
|
+
* Format: int64
|
|
3406
|
+
* @description How many commits this backup carries. 1 for a full, 0 for a backup taken with no writes since the previous one.
|
|
3407
|
+
*/
|
|
3408
|
+
commitCount: number;
|
|
3409
|
+
/**
|
|
3410
|
+
* Format: date-time
|
|
3411
|
+
* @description Wall-clock time of the first commit carried. Absent when `commitCount` is 0.
|
|
3412
|
+
*/
|
|
3413
|
+
firstAt?: string;
|
|
3414
|
+
/**
|
|
3415
|
+
* Format: date-time
|
|
3416
|
+
* @description Wall-clock time of the last commit carried. Absent when `commitCount` is 0.
|
|
3417
|
+
*/
|
|
3418
|
+
lastAt?: string;
|
|
3376
3419
|
sha256: string;
|
|
3377
3420
|
/**
|
|
3378
3421
|
* Format: int64
|
|
@@ -3385,12 +3428,12 @@ export interface components {
|
|
|
3385
3428
|
* Format: int64
|
|
3386
3429
|
* @description Commit number that the image contains. 0 means unknown.
|
|
3387
3430
|
*/
|
|
3388
|
-
txnId
|
|
3431
|
+
txnId: number;
|
|
3389
3432
|
/**
|
|
3390
|
-
* @description Why the generation was created. Not used for decisions
|
|
3433
|
+
* @description Why the generation was created. Not used for decisions. `park`, `evict` and `deploy` are the shipment taken right before the process stops.
|
|
3391
3434
|
* @enum {string}
|
|
3392
3435
|
*/
|
|
3393
|
-
kind?: "scheduled" | "manual" | "pre-restore" | "pre-delete";
|
|
3436
|
+
kind?: "scheduled" | "park" | "evict" | "deploy" | "manual" | "pre-restore" | "pre-delete";
|
|
3394
3437
|
/** Format: date-time */
|
|
3395
3438
|
createdAt: string;
|
|
3396
3439
|
/** @description The node that captured the generation */
|
|
@@ -3407,11 +3450,28 @@ export interface components {
|
|
|
3407
3450
|
*/
|
|
3408
3451
|
final: boolean;
|
|
3409
3452
|
};
|
|
3453
|
+
/**
|
|
3454
|
+
* @description A restore point, given in **exactly one** of three ways. `(epoch, seq)` restores to the
|
|
3455
|
+
* end of that backup. `txnId` restores to that commit, which may be inside a backup — every
|
|
3456
|
+
* backup carries the commits between it and the previous one in order, so any of them is a
|
|
3457
|
+
* restore point (`GenerationRow.firstTxnId` … `txnId`). `at` restores to the last commit at
|
|
3458
|
+
* or before that time (RFC 3339); the resolution is one backup interval.
|
|
3459
|
+
*/
|
|
3410
3460
|
RestoreRequest: {
|
|
3411
3461
|
/** Format: int64 */
|
|
3412
|
-
epoch
|
|
3462
|
+
epoch?: number;
|
|
3413
3463
|
/** Format: int64 */
|
|
3414
|
-
seq
|
|
3464
|
+
seq?: number;
|
|
3465
|
+
/**
|
|
3466
|
+
* Format: int64
|
|
3467
|
+
* @description A commit to restore to. Must lie inside some backup's `[firstTxnId, txnId]`.
|
|
3468
|
+
*/
|
|
3469
|
+
txnId?: number;
|
|
3470
|
+
/**
|
|
3471
|
+
* Format: date-time
|
|
3472
|
+
* @description Restore to the last commit at or before this time.
|
|
3473
|
+
*/
|
|
3474
|
+
at?: string;
|
|
3415
3475
|
};
|
|
3416
3476
|
DeleteRequest: {
|
|
3417
3477
|
/**
|
|
@@ -3771,65 +3831,65 @@ export interface components {
|
|
|
3771
3831
|
*/
|
|
3772
3832
|
mailIn: number;
|
|
3773
3833
|
};
|
|
3774
|
-
/** @description
|
|
3834
|
+
/** @description One row of the catalog (docs/ai.md §2.3). */
|
|
3775
3835
|
AIModel: {
|
|
3776
|
-
/** @description `env.ai.run()
|
|
3836
|
+
/** @description The string you write in `env.ai.run()`. Frontier models are `<provider>/<model>`, value models are `@runlot/<model>` */
|
|
3777
3837
|
id: string;
|
|
3778
3838
|
/** @enum {string} */
|
|
3779
3839
|
lane: "frontier" | "value";
|
|
3780
3840
|
display: string;
|
|
3781
|
-
/** @description
|
|
3841
|
+
/** @description who built the model (Anthropic, Google, Meta, and so on) */
|
|
3782
3842
|
vendor: string;
|
|
3783
3843
|
/**
|
|
3784
|
-
* @description
|
|
3785
|
-
*
|
|
3844
|
+
* @description The provider we call. **Included for frontier models only** — for value models this is something we
|
|
3845
|
+
* swap, so it is not part of the contract.
|
|
3786
3846
|
*/
|
|
3787
3847
|
provider?: string;
|
|
3788
|
-
/** @description
|
|
3848
|
+
/** @description the model's own context window */
|
|
3789
3849
|
contextTokens: number;
|
|
3790
3850
|
/**
|
|
3791
|
-
* @description runlot
|
|
3792
|
-
* GPT-5.6 Terra
|
|
3793
|
-
*
|
|
3851
|
+
* @description The input limit runlot allows for this model. It is the same as contextTokens for most models;
|
|
3852
|
+
* GPT-5.6 Terra is 272,000 — past that point the whole request switches to long-context pricing, so a
|
|
3853
|
+
* catalog that advertises a single standard price cuts it off there.
|
|
3794
3854
|
*/
|
|
3795
3855
|
maxInputTokens: number;
|
|
3796
3856
|
maxOutputTokens: number;
|
|
3797
3857
|
/**
|
|
3798
3858
|
* Format: int64
|
|
3799
|
-
* @description
|
|
3859
|
+
* @description microcents per million input tokens
|
|
3800
3860
|
*/
|
|
3801
3861
|
inPerMTok: number;
|
|
3802
3862
|
/** Format: int64 */
|
|
3803
3863
|
outPerMTok: number;
|
|
3804
3864
|
/**
|
|
3805
3865
|
* Format: int64
|
|
3806
|
-
* @description
|
|
3866
|
+
* @description The price of cached input. Absent means the model has no cache discount and cached tokens are billed at the full input price
|
|
3807
3867
|
*/
|
|
3808
3868
|
cachedInPerMTok?: number;
|
|
3809
3869
|
/**
|
|
3810
|
-
* @description
|
|
3811
|
-
*
|
|
3870
|
+
* @description When true, this is the provider's **list price** passed straight through (zero margin). Saying so
|
|
3871
|
+
* on screen is one of this product's promises — if it goes unsaid, users assume a markup.
|
|
3812
3872
|
*/
|
|
3813
3873
|
listPrice: boolean;
|
|
3814
3874
|
};
|
|
3815
3875
|
AIStatus: {
|
|
3816
3876
|
granted: boolean;
|
|
3817
|
-
/** @description
|
|
3877
|
+
/** @description calls per minute, per project */
|
|
3818
3878
|
perMinute: number;
|
|
3819
|
-
/** @description
|
|
3879
|
+
/** @description concurrent calls, per project */
|
|
3820
3880
|
concurrent: number;
|
|
3821
|
-
/** @description 0
|
|
3881
|
+
/** @description 0 means the model decides */
|
|
3822
3882
|
maxOutputTokens?: number;
|
|
3823
|
-
/** @description 0
|
|
3883
|
+
/** @description 0 means the model decides */
|
|
3824
3884
|
maxInputTokens?: number;
|
|
3825
3885
|
/**
|
|
3826
3886
|
* Format: int64
|
|
3827
|
-
* @description org
|
|
3887
|
+
* @description the org balance (can be negative)
|
|
3828
3888
|
*/
|
|
3829
3889
|
creditMicroCents: number;
|
|
3830
3890
|
/**
|
|
3831
3891
|
* Format: int64
|
|
3832
|
-
* @description
|
|
3892
|
+
* @description the daily allowance, for value models only
|
|
3833
3893
|
*/
|
|
3834
3894
|
freeDailyMicroCents?: number;
|
|
3835
3895
|
/** Format: int64 */
|
|
@@ -3840,7 +3900,7 @@ export interface components {
|
|
|
3840
3900
|
tokensOut24h?: number;
|
|
3841
3901
|
/**
|
|
3842
3902
|
* Format: int64
|
|
3843
|
-
* @description
|
|
3903
|
+
* @description The sum of the last 24 hours of the ledger (positive = amount spent). This number cannot be built from usage_hourly
|
|
3844
3904
|
*/
|
|
3845
3905
|
spentMicroCents24h?: number;
|
|
3846
3906
|
};
|
|
@@ -3851,25 +3911,25 @@ export interface components {
|
|
|
3851
3911
|
microCents: number;
|
|
3852
3912
|
};
|
|
3853
3913
|
AICredit: {
|
|
3854
|
-
/** @description
|
|
3914
|
+
/** @description false means this installation has no credit product — the top-up endpoints return 501 */
|
|
3855
3915
|
enabled: boolean;
|
|
3856
3916
|
sandbox: boolean;
|
|
3857
3917
|
/**
|
|
3858
3918
|
* Format: int64
|
|
3859
|
-
* @description
|
|
3919
|
+
* @description the balance (can be negative)
|
|
3860
3920
|
*/
|
|
3861
3921
|
microCents: number;
|
|
3862
3922
|
/** Format: int64 */
|
|
3863
3923
|
lowMicroCents?: number;
|
|
3864
3924
|
/** Format: int64 */
|
|
3865
3925
|
freeDailyMicroCents?: number;
|
|
3866
|
-
/** @description
|
|
3926
|
+
/** @description A top-up tier. Auto top-up uses the **same list** */
|
|
3867
3927
|
tiers: number[];
|
|
3868
|
-
/** @description
|
|
3928
|
+
/** @description When false, auto top-up cannot be turned on — the first top-up is what saves the card */
|
|
3869
3929
|
hasPaymentMethod: boolean;
|
|
3870
3930
|
autoTopup?: components["schemas"]["AIAutoTopup"];
|
|
3871
3931
|
autoTopupsToday: number;
|
|
3872
|
-
/** @description
|
|
3932
|
+
/** @description this number is the daily spending ceiling */
|
|
3873
3933
|
autoTopupPerDay: number;
|
|
3874
3934
|
};
|
|
3875
3935
|
AILedgerRow: {
|
|
@@ -3883,7 +3943,7 @@ export interface components {
|
|
|
3883
3943
|
tokensOut?: number;
|
|
3884
3944
|
/**
|
|
3885
3945
|
* Format: int64
|
|
3886
|
-
* @description `call`
|
|
3946
|
+
* @description `call` rows are negative
|
|
3887
3947
|
*/
|
|
3888
3948
|
microCents: number;
|
|
3889
3949
|
/** Format: date-time */
|
|
@@ -3925,7 +3985,7 @@ export interface components {
|
|
|
3925
3985
|
* @description number received in the last 24 hours
|
|
3926
3986
|
*/
|
|
3927
3987
|
received24h: number;
|
|
3928
|
-
/** @description The mail domain suffix for this
|
|
3988
|
+
/** @description The mail domain suffix for this installation. Email cannot be enabled if it is empty. */
|
|
3929
3989
|
mailDomain: string;
|
|
3930
3990
|
};
|
|
3931
3991
|
/** @description One line of the email log (docs/email.md §6.1). */
|
|
@@ -3990,6 +4050,13 @@ export interface components {
|
|
|
3990
4050
|
projects: number;
|
|
3991
4051
|
/** Format: int64 */
|
|
3992
4052
|
storageBytes: number;
|
|
4053
|
+
/**
|
|
4054
|
+
* Format: int64
|
|
4055
|
+
* @description The project Postgres size cap for this plan (Free 500 MiB, Pro 8 GiB). The
|
|
4056
|
+
* dashboard's usage meter and chart read this value; nothing enforces it — the 90 %
|
|
4057
|
+
* notification is the only consumer on the server.
|
|
4058
|
+
*/
|
|
4059
|
+
dbCapBytes: number;
|
|
3993
4060
|
/** @description number of retained generations (= time) */
|
|
3994
4061
|
backupKeep: number;
|
|
3995
4062
|
crons: number;
|
|
@@ -4003,7 +4070,7 @@ export interface components {
|
|
|
4003
4070
|
*/
|
|
4004
4071
|
StorageStatus: {
|
|
4005
4072
|
/**
|
|
4006
|
-
* @description Indicates whether storage
|
|
4073
|
+
* @description Indicates whether storage has been turned on for this project. Since the existence of that
|
|
4007
4074
|
* record is the only representation of this (migration 0022), there is no state of
|
|
4008
4075
|
* "provisioned but turned off".
|
|
4009
4076
|
*/
|
|
@@ -4107,7 +4174,7 @@ export interface components {
|
|
|
4107
4174
|
requireVerifiedEmail: boolean;
|
|
4108
4175
|
/**
|
|
4109
4176
|
* @description The lifetime of the session cookie, in days. It also affects the size of the session
|
|
4110
|
-
* table. Since the project database
|
|
4177
|
+
* table. Since the project database has a size cap (docs/auth.md §13),
|
|
4111
4178
|
* 10,000 active users each using three devices would produce 6 MB of session data.
|
|
4112
4179
|
*/
|
|
4113
4180
|
sessionDays: number;
|
|
@@ -4162,7 +4229,7 @@ export interface components {
|
|
|
4162
4229
|
AuthStatus: {
|
|
4163
4230
|
/**
|
|
4164
4231
|
* @description Indicates whether auth is configured for use. Since the existence of a
|
|
4165
|
-
*
|
|
4232
|
+
* record created when auth was turned on is the only representation, there is no "configured but
|
|
4166
4233
|
* disabled" state. When disabled, `settings` holds default values and `providers` is
|
|
4167
4234
|
* an empty array.
|
|
4168
4235
|
*/
|
|
@@ -4181,11 +4248,8 @@ export interface components {
|
|
|
4181
4248
|
* login fails
|
|
4182
4249
|
* on that host alone, and the reason is visible only in the provider's console.
|
|
4183
4250
|
*
|
|
4184
|
-
*
|
|
4185
|
-
*
|
|
4186
|
-
* name `<project>--<org>.<domain>`. A deploy registers both, so links already in the
|
|
4187
|
-
* wild keep
|
|
4188
|
-
* working, which is why both callback URLs are needed.
|
|
4251
|
+
* The default hostname is `<project>.<org>.<domain>`. Register a callback URL for every host in
|
|
4252
|
+
* this list — the list is exactly the set of hosts this project answers on.
|
|
4189
4253
|
* @example [
|
|
4190
4254
|
* "app.acme.runlot.app",
|
|
4191
4255
|
* "app--acme.runlot.app",
|
|
@@ -4243,7 +4307,7 @@ export interface components {
|
|
|
4243
4307
|
*/
|
|
4244
4308
|
hostname: string;
|
|
4245
4309
|
/**
|
|
4246
|
-
* @description `default` is the default name
|
|
4310
|
+
* @description `default` is the default name `<project>.<org>.<app-domain>`. `custom` is a customer domain
|
|
4247
4311
|
* @enum {string}
|
|
4248
4312
|
*/
|
|
4249
4313
|
kind: "default" | "custom";
|
|
@@ -5488,7 +5552,7 @@ export interface operations {
|
|
|
5488
5552
|
"application/json": components["schemas"]["Error"];
|
|
5489
5553
|
};
|
|
5490
5554
|
};
|
|
5491
|
-
/** @description Not in a state that can be restored (for example, no
|
|
5555
|
+
/** @description Not in a state that can be restored (for example, no node available for placement) */
|
|
5492
5556
|
503: {
|
|
5493
5557
|
headers: {
|
|
5494
5558
|
[name: string]: unknown;
|
|
@@ -5923,7 +5987,7 @@ export interface operations {
|
|
|
5923
5987
|
};
|
|
5924
5988
|
requestBody?: never;
|
|
5925
5989
|
responses: {
|
|
5926
|
-
/** @description
|
|
5990
|
+
/** @description Catalog */
|
|
5927
5991
|
200: {
|
|
5928
5992
|
headers: {
|
|
5929
5993
|
[name: string]: unknown;
|
|
@@ -5933,12 +5997,12 @@ export interface operations {
|
|
|
5933
5997
|
models: components["schemas"]["AIModel"][];
|
|
5934
5998
|
/**
|
|
5935
5999
|
* Format: int64
|
|
5936
|
-
* @description org
|
|
6000
|
+
* @description The per-org daily free allowance (microcents). It applies to **value-lane models only**
|
|
5937
6001
|
*/
|
|
5938
6002
|
freeDailyMicroCents: number;
|
|
5939
6003
|
/**
|
|
5940
6004
|
* Format: int64
|
|
5941
|
-
* @description "
|
|
6005
|
+
* @description The "balance is low" threshold — if the UI hardcoded it, there would be two tables to keep in sync
|
|
5942
6006
|
*/
|
|
5943
6007
|
lowMicroCents: number;
|
|
5944
6008
|
};
|
|
@@ -5959,7 +6023,7 @@ export interface operations {
|
|
|
5959
6023
|
};
|
|
5960
6024
|
requestBody?: never;
|
|
5961
6025
|
responses: {
|
|
5962
|
-
/** @description AI
|
|
6026
|
+
/** @description AI status */
|
|
5963
6027
|
200: {
|
|
5964
6028
|
headers: {
|
|
5965
6029
|
[name: string]: unknown;
|
|
@@ -5993,7 +6057,7 @@ export interface operations {
|
|
|
5993
6057
|
};
|
|
5994
6058
|
requestBody?: never;
|
|
5995
6059
|
responses: {
|
|
5996
|
-
/** @description
|
|
6060
|
+
/** @description Status after turning it on (the existing value if it was already on) */
|
|
5997
6061
|
200: {
|
|
5998
6062
|
headers: {
|
|
5999
6063
|
[name: string]: unknown;
|
|
@@ -6027,7 +6091,7 @@ export interface operations {
|
|
|
6027
6091
|
};
|
|
6028
6092
|
requestBody?: never;
|
|
6029
6093
|
responses: {
|
|
6030
|
-
/** @description
|
|
6094
|
+
/** @description turned off */
|
|
6031
6095
|
204: {
|
|
6032
6096
|
headers: {
|
|
6033
6097
|
[name: string]: unknown;
|
|
@@ -6058,7 +6122,7 @@ export interface operations {
|
|
|
6058
6122
|
};
|
|
6059
6123
|
requestBody?: never;
|
|
6060
6124
|
responses: {
|
|
6061
|
-
/** @description
|
|
6125
|
+
/** @description Credit status */
|
|
6062
6126
|
200: {
|
|
6063
6127
|
headers: {
|
|
6064
6128
|
[name: string]: unknown;
|
|
@@ -6074,7 +6138,7 @@ export interface operations {
|
|
|
6074
6138
|
parameters: {
|
|
6075
6139
|
query?: {
|
|
6076
6140
|
limit?: number;
|
|
6077
|
-
/** @description
|
|
6141
|
+
/** @description rows before this ledger_id */
|
|
6078
6142
|
before?: number;
|
|
6079
6143
|
};
|
|
6080
6144
|
header?: never;
|
|
@@ -6085,7 +6149,7 @@ export interface operations {
|
|
|
6085
6149
|
};
|
|
6086
6150
|
requestBody?: never;
|
|
6087
6151
|
responses: {
|
|
6088
|
-
/** @description
|
|
6152
|
+
/** @description Ledger */
|
|
6089
6153
|
200: {
|
|
6090
6154
|
headers: {
|
|
6091
6155
|
[name: string]: unknown;
|
|
@@ -6120,7 +6184,7 @@ export interface operations {
|
|
|
6120
6184
|
};
|
|
6121
6185
|
};
|
|
6122
6186
|
responses: {
|
|
6123
|
-
/** @description
|
|
6187
|
+
/** @description Checkout */
|
|
6124
6188
|
200: {
|
|
6125
6189
|
headers: {
|
|
6126
6190
|
[name: string]: unknown;
|
|
@@ -6132,7 +6196,7 @@ export interface operations {
|
|
|
6132
6196
|
};
|
|
6133
6197
|
};
|
|
6134
6198
|
};
|
|
6135
|
-
/** @description
|
|
6199
|
+
/** @description The top-up amount is not one of the offered tiers, or `returnTo` is not an allowed address */
|
|
6136
6200
|
400: {
|
|
6137
6201
|
headers: {
|
|
6138
6202
|
[name: string]: unknown;
|
|
@@ -6142,7 +6206,7 @@ export interface operations {
|
|
|
6142
6206
|
};
|
|
6143
6207
|
};
|
|
6144
6208
|
403: components["responses"]["Forbidden"];
|
|
6145
|
-
/** @description `billing_off` —
|
|
6209
|
+
/** @description `billing_off` — this installation has no credit product configured */
|
|
6146
6210
|
501: {
|
|
6147
6211
|
headers: {
|
|
6148
6212
|
[name: string]: unknown;
|
|
@@ -6174,7 +6238,7 @@ export interface operations {
|
|
|
6174
6238
|
};
|
|
6175
6239
|
};
|
|
6176
6240
|
responses: {
|
|
6177
|
-
/** @description
|
|
6241
|
+
/** @description Turned on */
|
|
6178
6242
|
200: {
|
|
6179
6243
|
headers: {
|
|
6180
6244
|
[name: string]: unknown;
|
|
@@ -6185,14 +6249,14 @@ export interface operations {
|
|
|
6185
6249
|
};
|
|
6186
6250
|
};
|
|
6187
6251
|
};
|
|
6188
|
-
/** @description
|
|
6252
|
+
/** @description turned off */
|
|
6189
6253
|
204: {
|
|
6190
6254
|
headers: {
|
|
6191
6255
|
[name: string]: unknown;
|
|
6192
6256
|
};
|
|
6193
6257
|
content?: never;
|
|
6194
6258
|
};
|
|
6195
|
-
/** @description
|
|
6259
|
+
/** @description The amount is not on the tier list, the threshold is 0 or less, or the threshold is at or above the top-up amount */
|
|
6196
6260
|
400: {
|
|
6197
6261
|
headers: {
|
|
6198
6262
|
[name: string]: unknown;
|
|
@@ -6202,7 +6266,7 @@ export interface operations {
|
|
|
6202
6266
|
};
|
|
6203
6267
|
};
|
|
6204
6268
|
403: components["responses"]["Forbidden"];
|
|
6205
|
-
/** @description `no_payment_method` —
|
|
6269
|
+
/** @description `no_payment_method` — there is no saved card. Top up manually once first */
|
|
6206
6270
|
409: {
|
|
6207
6271
|
headers: {
|
|
6208
6272
|
[name: string]: unknown;
|