@runlot/api 0.1.0-rc.145 → 0.1.0-rc.147

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/schema.d.ts CHANGED
@@ -212,6 +212,106 @@ export interface paths {
212
212
  patch?: never;
213
213
  trace?: never;
214
214
  };
215
+ "/v1/app-auth/start/{id}": {
216
+ parameters: {
217
+ query?: never;
218
+ header?: never;
219
+ path?: never;
220
+ cookie?: never;
221
+ };
222
+ /**
223
+ * Managed app sign-in: start leg
224
+ * @description The sign-in broker for apps using a managed provider. The app's own
225
+ * `/__runlot/auth/sign-in/<provider>` sends the browser here; `id` was minted
226
+ * for one project, provider and attached host and lives ten minutes. Sends a 302
227
+ * to the provider with identity-only scopes (GitHub `read:user user:email`,
228
+ * Google `openid email profile` with PKCE).
229
+ */
230
+ get: operations["appAuthStart"];
231
+ put?: never;
232
+ post?: never;
233
+ delete?: never;
234
+ options?: never;
235
+ head?: never;
236
+ patch?: never;
237
+ trace?: never;
238
+ };
239
+ "/v1/app-auth/choose/{id}": {
240
+ parameters: {
241
+ query?: never;
242
+ header?: never;
243
+ path?: never;
244
+ cookie?: never;
245
+ };
246
+ /**
247
+ * Runlot sign-in: chooser page
248
+ * @description For the `runlot` provider the start leg sends the browser here instead of straight
249
+ * to an upstream. An HTML page, branded Runlot and naming the app, offering email and
250
+ * password, Google and GitHub. Google and GitHub continue through the
251
+ * `/v1/auth/{provider}/callback/app` legs; the grant always carries
252
+ * `provider = runlot` and a pairwise subject.
253
+ */
254
+ get: operations["appAuthChoose"];
255
+ put?: never;
256
+ post?: never;
257
+ delete?: never;
258
+ options?: never;
259
+ head?: never;
260
+ patch?: never;
261
+ trace?: never;
262
+ };
263
+ "/v1/app-auth/choose/{id}/password": {
264
+ parameters: {
265
+ query?: never;
266
+ header?: never;
267
+ path?: never;
268
+ cookie?: never;
269
+ };
270
+ get?: never;
271
+ put?: never;
272
+ /**
273
+ * Runlot sign-in: email and password
274
+ * @description The chooser's email-and-password form. `sign-up` creates an end-user Runlot account
275
+ * with no organization. On success, a 302 to the app host's
276
+ * `/__runlot/auth/callback/managed?code=<grant>`; a refusal re-renders the chooser
277
+ * with the error.
278
+ */
279
+ post: operations["appAuthChoosePassword"];
280
+ delete?: never;
281
+ options?: never;
282
+ head?: never;
283
+ patch?: never;
284
+ trace?: never;
285
+ };
286
+ "/v1/auth/{provider}/callback/app": {
287
+ parameters: {
288
+ query?: never;
289
+ header?: never;
290
+ path?: never;
291
+ cookie?: never;
292
+ };
293
+ /**
294
+ * Managed app sign-in: provider callback
295
+ * @description The provider returns here. The broker exchanges the code, reads the profile and
296
+ * verified email, and sends a 302 to
297
+ * `https://<app host>/__runlot/auth/callback/managed?code=<grant>` with a
298
+ * single-use grant valid five minutes. A denial or cancel goes to
299
+ * `/__runlot/auth/sign-in?error=provider_denied` on the app host. No provider
300
+ * token ever leaves the broker.
301
+ *
302
+ * Register `<public origin>/v1/auth/google/callback/app` on the Google OAuth
303
+ * client. GitHub accepts it as a subpath of the app's registered
304
+ * `<public origin>/v1/auth/github/callback`.
305
+ */
306
+ get: operations["appAuthCallback"];
307
+ put?: never;
308
+ post?: never;
309
+ delete?: never;
310
+ options?: never;
311
+ head?: never;
312
+ patch?: never;
313
+ trace?: never;
314
+ };
215
315
  "/v1/auth/google/start": {
216
316
  parameters: {
217
317
  query?: never;
@@ -2671,11 +2771,41 @@ export interface paths {
2671
2771
  *
2672
2772
  * `sessionDays` also sets how long an end user's session is kept.
2673
2773
  *
2774
+ * `password` and `magicLink` turn the email-and-password and email-link methods on or
2775
+ * off. A change that would leave no sign-in method enabled is refused with 409
2776
+ * `last_method`; turn login off instead.
2777
+ *
2674
2778
  * Requires member or higher. Audited as `auth.settings`.
2675
2779
  */
2676
2780
  patch: operations["updateAuthSettings"];
2677
2781
  trace?: never;
2678
2782
  };
2783
+ "/v1/orgs/{orgSlug}/projects/{projectName}/auth/schema": {
2784
+ parameters: {
2785
+ query?: never;
2786
+ header?: never;
2787
+ path: {
2788
+ orgSlug: components["parameters"]["OrgSlug"];
2789
+ projectName: components["parameters"]["ProjectName"];
2790
+ };
2791
+ cookie?: never;
2792
+ };
2793
+ /**
2794
+ * The `runlot_auth` schema DDL
2795
+ * @description The statements that install the `runlot_auth` schema, the same ones the auth
2796
+ * system installs on first use. The CLI applies them before a project's own
2797
+ * migrations so a migration can reference `runlot_auth.users(id)`. Every statement
2798
+ * is idempotent; run them in order as one script. Viewer or higher.
2799
+ */
2800
+ get: operations["getAuthSchema"];
2801
+ put?: never;
2802
+ post?: never;
2803
+ delete?: never;
2804
+ options?: never;
2805
+ head?: never;
2806
+ patch?: never;
2807
+ trace?: never;
2808
+ };
2679
2809
  "/v1/orgs/{orgSlug}/projects/{projectName}/auth/providers/{provider}": {
2680
2810
  parameters: {
2681
2811
  query?: never;
@@ -2684,8 +2814,9 @@ export interface paths {
2684
2814
  orgSlug: components["parameters"]["OrgSlug"];
2685
2815
  projectName: components["parameters"]["ProjectName"];
2686
2816
  /**
2687
- * @description A single social login provider. Only the names in the enum are accepted; the name is
2688
- * also the last segment of the provider's callback URL.
2817
+ * @description A login provider id. `github`, `google` and `runlot` are the built-in names; any
2818
+ * other id names one of the project's OIDC providers. The id is also the last segment
2819
+ * of the provider's callback URL.
2689
2820
  */
2690
2821
  provider: components["parameters"]["AuthProviderName"];
2691
2822
  };
@@ -2694,8 +2825,11 @@ export interface paths {
2694
2825
  get?: never;
2695
2826
  /**
2696
2827
  * Register or replace a social provider (`runlot auth provider set`)
2697
- * @description Your project registers its own OAuth app with the provider, so the consent
2698
- * screen, review, and privacy policy stay under your control.
2828
+ * @description Three kinds (see `AuthProviderPut`). **builtin** registers your project's own
2829
+ * GitHub or Google OAuth app. **oidc** registers any OpenID Connect provider under a
2830
+ * project-chosen id; the CP reads its discovery document when saving. **runlot**
2831
+ * (id `runlot`) turns on "Continue with Runlot": email, Google and GitHub at Runlot,
2832
+ * through the sign-in broker, with nothing to register.
2699
2833
  *
2700
2834
  * The callback URL to register with the provider is per host:
2701
2835
  * `https://<host>/__runlot/auth/callback/<provider>`. The host list is in
@@ -2815,7 +2949,9 @@ export interface paths {
2815
2949
  * Changes the policy (`runlot access set`)
2816
2950
  * @description `public` leaves the deployment open to anyone, `org` requires member or higher in the
2817
2951
  * org the project belongs to, and `password` uses **one** shared password for the whole
2818
- * project.
2952
+ * project. `app` admits only requests that carry a valid `env.auth` session for this
2953
+ * project; a browser without one is sent to the app's sign-in page and anything else
2954
+ * gets 401 `sign_in_required`. It requires login to be on for the project.
2819
2955
  *
2820
2956
  * **If you don't send a password, the existing one stays.** Send a new value to replace
2821
2957
  * it.
@@ -6044,6 +6180,61 @@ export interface components {
6044
6180
  * ]
6045
6181
  */
6046
6182
  trustedCertificates?: string[];
6183
+ /**
6184
+ * @description Path rules that **narrow** the project's access policy (`runlot access`) for this
6185
+ * deployment. Each request is checked against every rule whose `path` matches it,
6186
+ * and every matching rule must hold; a refused request gets
6187
+ * `403 access_rule_denied`.
6188
+ *
6189
+ * The rules only apply while the policy is `org` or `password`. On a `public`
6190
+ * project they are ignored (the deploy warns), because there is no identity to
6191
+ * test. A visitor admitted by the shared password or the automation bypass secret
6192
+ * satisfies only a rule with an empty `require`.
6193
+ *
6194
+ * The rules move with the deployment: rolling back restores the old list.
6195
+ * @example [
6196
+ * {
6197
+ * "path": "/admin/*",
6198
+ * "require": {
6199
+ * "orgRole": "admin"
6200
+ * }
6201
+ * },
6202
+ * {
6203
+ * "path": "/staff",
6204
+ * "require": {
6205
+ * "emailDomain": "example.com"
6206
+ * }
6207
+ * }
6208
+ * ]
6209
+ */
6210
+ access?: components["schemas"]["ManifestAccessRule"][];
6211
+ };
6212
+ /** @description One manifest path rule (`access[]`). */
6213
+ ManifestAccessRule: {
6214
+ /**
6215
+ * @description An absolute path. An exact path, or a prefix ending in `/*`, which also covers the
6216
+ * prefix itself (`/admin/*` covers `/admin` and `/admin/x`). `*` is accepted nowhere
6217
+ * else. Matching is case-insensitive on the cleaned request path.
6218
+ * @example /admin/*
6219
+ */
6220
+ path: string;
6221
+ /**
6222
+ * @description What the visitor must satisfy. Every field that is set must hold; `{}` admits
6223
+ * anyone the project policy already admitted.
6224
+ */
6225
+ require: {
6226
+ /**
6227
+ * @description The minimum org role: viewer < member < admin.
6228
+ * @enum {string}
6229
+ */
6230
+ orgRole?: "viewer" | "member" | "admin";
6231
+ /**
6232
+ * @description The visitor's email must be at one of these domains. One string or a list;
6233
+ * a leading `@` is ignored.
6234
+ * @example example.com
6235
+ */
6236
+ emailDomain?: string | string[];
6237
+ };
6047
6238
  };
6048
6239
  /**
6049
6240
  * @description Scheduled execution. It ships in the bundle exactly as you wrote it in
@@ -6587,6 +6778,10 @@ export interface components {
6587
6778
  dimensionOptions?: number[];
6588
6779
  /** @description Embedding models only: every value `env.ai.embed(model, input, { taskType })` may carry. A task type tells the model what the vectors are for, and the same text embedded under two of them is a different vector — so a namespace has to be filled under one choice and queried under the same one. Absent when the model has no such notion (Titan has none). Leaving `taskType` out sends the model's own default, which is what every vector stored before this option existed was embedded under. */
6589
6780
  taskTypes?: string[];
6781
+ /** @description Chat models only: every value `env.ai.run(model, { reasoning: { effort } })` may carry. Absent when the model has no reasoning-effort control (`@runlot/…` have none), in which case asking for one is `400 bad_effort` rather than a silently ignored field. The vocabularies differ by family — the OpenAI rows include `none`, the Claude rows do not, and Gemini has only `low`/`medium`/`high`. Leaving `reasoning` out sends the model's own default. */
6782
+ effortLevels?: string[];
6783
+ /** @description Chat models only, present when true: `env.ai.run(model, { responseFormat })` is honoured on this model. False or absent means asking for a response format is `400 format_unsupported` rather than prose wearing the caller's schema. Read off each model card, so it is a per-row fact and not a family rule — Claude Haiku 4.5 has it and Claude Sonnet 5 does not, on the same endpoint. */
6784
+ structuredOutput?: boolean;
6590
6785
  /** @enum {string} */
6591
6786
  lane: "frontier" | "value";
6592
6787
  display: string;
@@ -6762,7 +6957,7 @@ export interface components {
6762
6957
  /** @description Lowercased. Empty for an account that has only a social identity. */
6763
6958
  email: string;
6764
6959
  name?: string;
6765
- /** @description `password`, `github`, `google`, `kakao` … sorted, from the linked identities. */
6960
+ /** @description `password`, `github`, `google`, `runlot`, OIDC ids … sorted, from the linked identities. */
6766
6961
  providers: string[];
6767
6962
  /** Format: date-time */
6768
6963
  createdAt: string;
@@ -7050,10 +7245,11 @@ export interface components {
7050
7245
  AccessPolicy: {
7051
7246
  /**
7052
7247
  * @description `public` means anyone, `org` means a member or higher of the org that owns the
7053
- * project, and `password` means one shared password for the project.
7248
+ * project, `password` means one shared password for the project, and `app` means
7249
+ * only people signed in to this app through `env.auth` (docs/auth-access-unify.md §3).
7054
7250
  * @enum {string}
7055
7251
  */
7056
- mode: "public" | "org" | "password";
7252
+ mode: "public" | "org" | "password" | "app";
7057
7253
  /** @description Whether a password is set. The value itself is never returned. */
7058
7254
  hasPassword: boolean;
7059
7255
  /** @description Whether a bypass key for automation exists. The key is shown only once, when it is issued. */
@@ -7085,11 +7281,12 @@ export interface components {
7085
7281
  redirect: string;
7086
7282
  };
7087
7283
  /**
7088
- * @description A social login provider you can register a per-project OAuth app for.
7089
- * GitHub, Google, and Kakao are supported.
7090
- * @enum {string}
7284
+ * @description A login provider id. `github` and `google` are your own OAuth apps, `runlot` is
7285
+ * Runlot's sign-in (email, Google and GitHub at Runlot), and any other id is an OIDC
7286
+ * provider the project registered under that name.
7287
+ * @example github
7091
7288
  */
7092
- AuthProvider: "github" | "google" | "kakao";
7289
+ AuthProvider: string;
7093
7290
  /** @description End-user authentication settings for the project. */
7094
7291
  AuthSettings: {
7095
7292
  /**
@@ -7109,6 +7306,24 @@ export interface components {
7109
7306
  */
7110
7307
  sessionDays: number;
7111
7308
  brand: components["schemas"]["AuthBrand"];
7309
+ /**
7310
+ * @description Automatic row level security. When on, `env.db` statements from a signed-in user run
7311
+ * as that user (`runlot_authenticated`), from a signed-out visitor as `runlot_anon`, and
7312
+ * from cron and queue as the owner. Tables without row level security are closed to
7313
+ * app users. Off by default.
7314
+ */
7315
+ rls: boolean;
7316
+ /**
7317
+ * @description The email-and-password method. Off makes the password routes answer 404
7318
+ * `method_disabled` and hides the form; stored password hashes stay.
7319
+ * @default true
7320
+ */
7321
+ password: boolean;
7322
+ /**
7323
+ * @description The email-link method. Off makes `sign-in/email` answer 404 `method_disabled`.
7324
+ * @default true
7325
+ */
7326
+ magicLink: boolean;
7112
7327
  };
7113
7328
  /**
7114
7329
  * @description Branding for the hosted login page. For finer-grained branding, build your own
@@ -7139,7 +7354,13 @@ export interface components {
7139
7354
  */
7140
7355
  AuthProviderMeta: {
7141
7356
  provider: components["schemas"]["AuthProvider"];
7142
- /** @description The public id given by the provider */
7357
+ /**
7358
+ * @description `builtin` is your own GitHub or Google OAuth app, `oidc` a generic OpenID
7359
+ * Connect provider, and `runlot` Runlot's sign-in (no callback URL to register).
7360
+ * @enum {string}
7361
+ */
7362
+ kind: "builtin" | "oidc" | "runlot";
7363
+ /** @description The public id given by the provider. Empty for `runlot` */
7143
7364
  clientId: string;
7144
7365
  /**
7145
7366
  * Format: date-time
@@ -7147,12 +7368,17 @@ export interface components {
7147
7368
  */
7148
7369
  updatedAt: string;
7149
7370
  /**
7150
- * @description The base URL of your own GitHub Enterprise Server installation, when this
7151
- * provider is pointed at one. **Absent means the public provider** —
7152
- * github.com — which is the default.
7371
+ * @description For `github`, the base URL of your own GitHub Enterprise Server installation
7372
+ * (**absent means github.com**). For `oidc`, the issuer URL.
7153
7373
  * @example https://github.acme.example
7154
7374
  */
7155
7375
  issuer?: string;
7376
+ /** @description OIDC only. The button label on the hosted sign-in page */
7377
+ displayName?: string;
7378
+ /** @description OIDC only. The button icon on the hosted sign-in page */
7379
+ iconUrl?: string;
7380
+ /** @description OIDC only. Space-separated scopes requested at sign-in */
7381
+ scopes?: string;
7156
7382
  };
7157
7383
  /**
7158
7384
  * @description The project's end-user authentication status.
@@ -7199,6 +7425,9 @@ export interface components {
7199
7425
  allowSignup?: boolean;
7200
7426
  requireVerifiedEmail?: boolean;
7201
7427
  sessionDays?: number;
7428
+ rls?: boolean;
7429
+ password?: boolean;
7430
+ magicLink?: boolean;
7202
7431
  /**
7203
7432
  * @description Branding is patched the same way — a save that only changes the colour does not
7204
7433
  * erase the logo.
@@ -7211,30 +7440,49 @@ export interface components {
7211
7440
  };
7212
7441
  };
7213
7442
  /**
7214
- * @description The login provider credentials. Replacing them goes through this same PUT, so both
7215
- * values are required every time; sending the ID alone would leave it unclear whether the
7216
- * old secret still applies.
7443
+ * @description The whole provider row; three shapes by `kind`:
7444
+ *
7445
+ * - **builtin** (default; `github` and `google`): `{clientId, clientSecret}`, and
7446
+ * `issuer` on `github` only. Both credentials are required every time.
7447
+ * - **oidc** (any other id): `{kind:"oidc", issuer, clientId, clientSecret,
7448
+ * displayName?, iconUrl?, scopes?}`. `issuer` must be https; the CP fetches
7449
+ * `<issuer>/.well-known/openid-configuration` when saving and pins its endpoints.
7450
+ * - **runlot** (id `runlot` only): `{kind:"runlot"}` and no other field.
7451
+ *
7452
+ * `{"source":"managed"}` is no longer accepted (400 `managed_removed`); use the
7453
+ * `runlot` provider.
7217
7454
  */
7218
7455
  AuthProviderPut: {
7219
- /** @description The public id given by the provider */
7220
- clientId: string;
7221
7456
  /**
7222
- * @description Stored encrypted. **It is never returned in any response.** If you lose it, issue a
7223
- * new one from the login provider's console and PUT it again.
7457
+ * @default builtin
7458
+ * @enum {string}
7224
7459
  */
7225
- clientSecret: string;
7460
+ kind: "builtin" | "oidc" | "runlot";
7461
+ /** @description The public id given by the provider. Required for builtin and oidc */
7462
+ clientId?: string;
7226
7463
  /**
7227
- * @description The base URL of your own GitHub Enterprise Server installation, for example
7228
- * `https://github.acme.example`. Only the `github` provider takes one — the
7229
- * four OAuth endpoints are derived from this base, and no other provider has a
7230
- * layout we can derive, so a non-empty value on `google` or `kakao` is a 400.
7231
- *
7232
- * **Empty means github.com**, which is the default. This PUT is the whole row,
7233
- * so send the field on every call: leave it out on a save that means to go back
7234
- * to github.com and the old installation stays.
7464
+ * @description Required for builtin and oidc. Stored encrypted. **It is never returned in any
7465
+ * response.** If you lose it, issue a new one from the login provider's console and
7466
+ * PUT it again.
7467
+ */
7468
+ clientSecret?: string;
7469
+ /**
7470
+ * @description On `github`: the base URL of your own GitHub Enterprise Server installation, for
7471
+ * example `https://github.acme.example`; **empty means github.com**. This PUT is
7472
+ * the whole row, so send it on every call. On `google` it is a 400.
7473
+ * On `oidc`: required, the https issuer URL.
7235
7474
  * @example https://github.acme.example
7236
7475
  */
7237
7476
  issuer?: string;
7477
+ /**
7478
+ * @description OIDC only. The button label
7479
+ * @example Kakao
7480
+ */
7481
+ displayName?: string;
7482
+ /** @description OIDC only. An https URL of the button icon */
7483
+ iconUrl?: string;
7484
+ /** @description OIDC only. Space-separated; defaults to `openid email profile` */
7485
+ scopes?: string;
7238
7486
  };
7239
7487
  /**
7240
7488
  * @description A single hostname attached to the project. `state` progresses from
@@ -7255,6 +7503,11 @@ export interface components {
7255
7503
  kind: "default" | "custom";
7256
7504
  /** @enum {string} */
7257
7505
  state: "pending_dns" | "pending_tls" | "active" | "error";
7506
+ /**
7507
+ * @description `app` serves your app. `login` is the project's login domain: it serves the Runlot sign-in page for this project on your own name, and never the app
7508
+ * @enum {string}
7509
+ */
7510
+ role?: "app" | "login";
7258
7511
  /** @description The reason the last check failed. Read it to fix your own DNS */
7259
7512
  lastError?: string;
7260
7513
  /** Format: date-time */
@@ -7594,8 +7847,9 @@ export interface components {
7594
7847
  RepoName: components["schemas"]["RepoName"];
7595
7848
  SecretName: components["schemas"]["SecretName"];
7596
7849
  /**
7597
- * @description A single social login provider. Only the names in the enum are accepted; the name is
7598
- * also the last segment of the provider's callback URL.
7850
+ * @description A login provider id. `github`, `google` and `runlot` are the built-in names; any
7851
+ * other id names one of the project's OIDC providers. The id is also the last segment
7852
+ * of the provider's callback URL.
7599
7853
  */
7600
7854
  AuthProviderName: components["schemas"]["AuthProvider"];
7601
7855
  };
@@ -7952,6 +8206,145 @@ export interface operations {
7952
8206
  400: components["responses"]["BadRequest"];
7953
8207
  };
7954
8208
  };
8209
+ appAuthStart: {
8210
+ parameters: {
8211
+ query?: never;
8212
+ header?: never;
8213
+ path: {
8214
+ id: string;
8215
+ };
8216
+ cookie?: never;
8217
+ };
8218
+ requestBody?: never;
8219
+ responses: {
8220
+ /** @description to the provider */
8221
+ 302: {
8222
+ headers: {
8223
+ [name: string]: unknown;
8224
+ };
8225
+ content?: never;
8226
+ };
8227
+ /** @description `sign_in_expired` — unknown, expired or used id */
8228
+ 400: {
8229
+ headers: {
8230
+ [name: string]: unknown;
8231
+ };
8232
+ content?: never;
8233
+ };
8234
+ /** @description `managed_unavailable` — no broker credential for that provider */
8235
+ 503: {
8236
+ headers: {
8237
+ [name: string]: unknown;
8238
+ };
8239
+ content?: never;
8240
+ };
8241
+ };
8242
+ };
8243
+ appAuthChoose: {
8244
+ parameters: {
8245
+ query?: never;
8246
+ header?: never;
8247
+ path: {
8248
+ id: string;
8249
+ };
8250
+ cookie?: never;
8251
+ };
8252
+ requestBody?: never;
8253
+ responses: {
8254
+ /** @description The chooser page */
8255
+ 200: {
8256
+ headers: {
8257
+ [name: string]: unknown;
8258
+ };
8259
+ content: {
8260
+ "text/html": string;
8261
+ };
8262
+ };
8263
+ /** @description `sign_in_expired` — unknown, expired or used id */
8264
+ 400: {
8265
+ headers: {
8266
+ [name: string]: unknown;
8267
+ };
8268
+ content?: never;
8269
+ };
8270
+ };
8271
+ };
8272
+ appAuthChoosePassword: {
8273
+ parameters: {
8274
+ query?: never;
8275
+ header?: never;
8276
+ path: {
8277
+ id: string;
8278
+ };
8279
+ cookie?: never;
8280
+ };
8281
+ requestBody: {
8282
+ content: {
8283
+ "application/x-www-form-urlencoded": {
8284
+ email: string;
8285
+ password: string;
8286
+ /** @enum {string} */
8287
+ mode: "sign-in" | "sign-up";
8288
+ };
8289
+ };
8290
+ };
8291
+ responses: {
8292
+ /** @description The chooser re-rendered with an error */
8293
+ 200: {
8294
+ headers: {
8295
+ [name: string]: unknown;
8296
+ };
8297
+ content: {
8298
+ "text/html": string;
8299
+ };
8300
+ };
8301
+ /** @description to the app host with a grant */
8302
+ 302: {
8303
+ headers: {
8304
+ [name: string]: unknown;
8305
+ };
8306
+ content?: never;
8307
+ };
8308
+ /** @description `sign_in_expired` — unknown, expired or used id */
8309
+ 400: {
8310
+ headers: {
8311
+ [name: string]: unknown;
8312
+ };
8313
+ content?: never;
8314
+ };
8315
+ };
8316
+ };
8317
+ appAuthCallback: {
8318
+ parameters: {
8319
+ query: {
8320
+ code?: string;
8321
+ state: string;
8322
+ error?: string;
8323
+ };
8324
+ header?: never;
8325
+ path: {
8326
+ provider: "github" | "google";
8327
+ };
8328
+ cookie?: never;
8329
+ };
8330
+ requestBody?: never;
8331
+ responses: {
8332
+ /** @description to the app host */
8333
+ 302: {
8334
+ headers: {
8335
+ [name: string]: unknown;
8336
+ };
8337
+ content?: never;
8338
+ };
8339
+ /** @description `sign_in_expired` — unknown, expired or used state */
8340
+ 400: {
8341
+ headers: {
8342
+ [name: string]: unknown;
8343
+ };
8344
+ content?: never;
8345
+ };
8346
+ };
8347
+ };
7955
8348
  googleStart: {
7956
8349
  parameters: {
7957
8350
  query: {
@@ -11212,6 +11605,18 @@ export interface operations {
11212
11605
  /** @description capped at 4,096 by the lane */
11213
11606
  maxTokens?: number;
11214
11607
  temperature?: number;
11608
+ /** @description `env.ai.run`'s reasoning option. cp-core checks `effort` against the model's catalog row. */
11609
+ reasoning?: {
11610
+ /** @description one of the model's `effortLevels` */
11611
+ effort?: string;
11612
+ };
11613
+ /** @description `env.ai.run`'s structured output. Only on a model whose catalog row says `structuredOutput`. */
11614
+ responseFormat?: {
11615
+ /** @enum {string} */
11616
+ type?: "json_schema";
11617
+ name?: string;
11618
+ schema?: Record<string, never>;
11619
+ };
11215
11620
  };
11216
11621
  };
11217
11622
  };
@@ -11225,6 +11630,8 @@ export interface operations {
11225
11630
  "application/json": {
11226
11631
  text: string;
11227
11632
  model: string;
11633
+ stopReason: string;
11634
+ usageComplete?: boolean;
11228
11635
  usage: {
11229
11636
  /** Format: int64 */
11230
11637
  inputTokens?: number;
@@ -11804,6 +12211,18 @@ export interface operations {
11804
12211
  };
11805
12212
  403: components["responses"]["Forbidden"];
11806
12213
  404: components["responses"]["NotFound"];
12214
+ /**
12215
+ * @description `access_mode_app` — the deployment's access mode is `app`, which needs login.
12216
+ * Choose another access mode first; login is never turned off under it silently.
12217
+ */
12218
+ 409: {
12219
+ headers: {
12220
+ [name: string]: unknown;
12221
+ };
12222
+ content: {
12223
+ "application/json": components["schemas"]["Error"];
12224
+ };
12225
+ };
11807
12226
  /** @description `no_core` — the service is temporarily unavailable */
11808
12227
  503: {
11809
12228
  headers: {
@@ -11854,6 +12273,15 @@ export interface operations {
11854
12273
  "application/json": components["schemas"]["Error"];
11855
12274
  };
11856
12275
  };
12276
+ /** @description `last_method` — the change would leave no sign-in method enabled */
12277
+ 409: {
12278
+ headers: {
12279
+ [name: string]: unknown;
12280
+ };
12281
+ content: {
12282
+ "application/json": components["schemas"]["Error"];
12283
+ };
12284
+ };
11857
12285
  /** @description `no_core` — the service is temporarily unavailable */
11858
12286
  503: {
11859
12287
  headers: {
@@ -11865,6 +12293,34 @@ export interface operations {
11865
12293
  };
11866
12294
  };
11867
12295
  };
12296
+ getAuthSchema: {
12297
+ parameters: {
12298
+ query?: never;
12299
+ header?: never;
12300
+ path: {
12301
+ orgSlug: components["parameters"]["OrgSlug"];
12302
+ projectName: components["parameters"]["ProjectName"];
12303
+ };
12304
+ cookie?: never;
12305
+ };
12306
+ requestBody?: never;
12307
+ responses: {
12308
+ /** @description The schema version and its statements */
12309
+ 200: {
12310
+ headers: {
12311
+ [name: string]: unknown;
12312
+ };
12313
+ content: {
12314
+ "application/json": {
12315
+ version: number;
12316
+ statements: string[];
12317
+ };
12318
+ };
12319
+ };
12320
+ 403: components["responses"]["Forbidden"];
12321
+ 404: components["responses"]["NotFound"];
12322
+ };
12323
+ };
11868
12324
  setAuthProvider: {
11869
12325
  parameters: {
11870
12326
  query?: never;
@@ -11873,8 +12329,9 @@ export interface operations {
11873
12329
  orgSlug: components["parameters"]["OrgSlug"];
11874
12330
  projectName: components["parameters"]["ProjectName"];
11875
12331
  /**
11876
- * @description A single social login provider. Only the names in the enum are accepted; the name is
11877
- * also the last segment of the provider's callback URL.
12332
+ * @description A login provider id. `github`, `google` and `runlot` are the built-in names; any
12333
+ * other id names one of the project's OIDC providers. The id is also the last segment
12334
+ * of the provider's callback URL.
11878
12335
  */
11879
12336
  provider: components["parameters"]["AuthProviderName"];
11880
12337
  };
@@ -11896,9 +12353,14 @@ export interface operations {
11896
12353
  };
11897
12354
  };
11898
12355
  /**
11899
- * @description `invalid_provider` — the name is outside `github`, `google`, `kakao`, or
11900
- * `clientId`/`clientSecret` is empty. `bad_request` — `issuer` was given for a
11901
- * provider other than `github`, or it is not an http(s) base URL.
12356
+ * @description `invalid_provider` — the id does not match the pattern, the kind does not fit
12357
+ * the id (`builtin` outside `github`/`google`, `runlot` outside `runlot`, `oidc` on
12358
+ * a reserved id), or `clientId`/`clientSecret` is empty. `bad_request` — `issuer`
12359
+ * on `google`, a non-http(s) GitHub base, a non-https OIDC issuer, or fields a
12360
+ * `runlot` PUT does not take. `oidc_discovery_failed` — the issuer's
12361
+ * `/.well-known/openid-configuration` could not be read; the message quotes the
12362
+ * provider's answer. `managed_removed` — `{"source":"managed"}`; use the `runlot`
12363
+ * provider.
11902
12364
  */
11903
12365
  400: {
11904
12366
  headers: {
@@ -11910,6 +12372,18 @@ export interface operations {
11910
12372
  };
11911
12373
  403: components["responses"]["Forbidden"];
11912
12374
  404: components["responses"]["NotFound"];
12375
+ /**
12376
+ * @description `runlot_unavailable` — this deployment has no sign-in broker, so the `runlot`
12377
+ * provider cannot be turned on. Register your own app instead.
12378
+ */
12379
+ 409: {
12380
+ headers: {
12381
+ [name: string]: unknown;
12382
+ };
12383
+ content: {
12384
+ "application/json": components["schemas"]["Error"];
12385
+ };
12386
+ };
11913
12387
  /** @description `no_core` — the service is temporarily unavailable. */
11914
12388
  503: {
11915
12389
  headers: {
@@ -11929,8 +12403,9 @@ export interface operations {
11929
12403
  orgSlug: components["parameters"]["OrgSlug"];
11930
12404
  projectName: components["parameters"]["ProjectName"];
11931
12405
  /**
11932
- * @description A single social login provider. Only the names in the enum are accepted; the name is
11933
- * also the last segment of the provider's callback URL.
12406
+ * @description A login provider id. `github`, `google` and `runlot` are the built-in names; any
12407
+ * other id names one of the project's OIDC providers. The id is also the last segment
12408
+ * of the provider's callback URL.
11934
12409
  */
11935
12410
  provider: components["parameters"]["AuthProviderName"];
11936
12411
  };
@@ -11947,6 +12422,15 @@ export interface operations {
11947
12422
  };
11948
12423
  403: components["responses"]["Forbidden"];
11949
12424
  404: components["responses"]["NotFound"];
12425
+ /** @description `last_method` — removing it would leave no sign-in method enabled */
12426
+ 409: {
12427
+ headers: {
12428
+ [name: string]: unknown;
12429
+ };
12430
+ content: {
12431
+ "application/json": components["schemas"]["Error"];
12432
+ };
12433
+ };
11950
12434
  /** @description `no_core` — the service is temporarily unavailable. */
11951
12435
  503: {
11952
12436
  headers: {
@@ -12110,7 +12594,7 @@ export interface operations {
12110
12594
  content: {
12111
12595
  "application/json": {
12112
12596
  /** @enum {string} */
12113
- mode: "public" | "org" | "password";
12597
+ mode: "public" | "org" | "password" | "app";
12114
12598
  /**
12115
12599
  * @description The shared password for `password` mode. If left empty, the existing one is
12116
12600
  * kept; if there was never one, this returns 400.
@@ -12132,6 +12616,18 @@ export interface operations {
12132
12616
  400: components["responses"]["BadRequest"];
12133
12617
  403: components["responses"]["Forbidden"];
12134
12618
  404: components["responses"]["NotFound"];
12619
+ /**
12620
+ * @description `login_required` — mode `app` needs login turned on for this project
12621
+ * (`runlot auth on`) first.
12622
+ */
12623
+ 409: {
12624
+ headers: {
12625
+ [name: string]: unknown;
12626
+ };
12627
+ content: {
12628
+ "application/json": components["schemas"]["Error"];
12629
+ };
12630
+ };
12135
12631
  /** @description `no_core` — the service is temporarily unavailable. */
12136
12632
  503: {
12137
12633
  headers: {
@@ -12876,6 +13372,17 @@ export interface operations {
12876
13372
  * @example app.example.com
12877
13373
  */
12878
13374
  hostname: string;
13375
+ /**
13376
+ * @description `login` (`runlot domain add <host> --login`) makes the name the project's
13377
+ * login domain: sign-in starts for this project are sent to
13378
+ * `https://<host>` once it is connected and its certificate is issued. Pro
13379
+ * plan only (403 `plan_required`), one per project (409
13380
+ * `login_domain_exists`); the same name already attached with the other role
13381
+ * is 409 `hostname_role_conflict`. It counts toward the custom domain limit.
13382
+ * @default app
13383
+ * @enum {string}
13384
+ */
13385
+ role?: "app" | "login";
12879
13386
  };
12880
13387
  };
12881
13388
  };