@runlot/api 0.1.0-rc.199 → 0.1.0-rc.200

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
@@ -3453,6 +3453,164 @@ export interface paths {
3453
3453
  patch?: never;
3454
3454
  trace?: never;
3455
3455
  };
3456
+ "/v1/orgs/{orgSlug}/projects/{projectName}/ai/calls": {
3457
+ parameters: {
3458
+ query?: never;
3459
+ header?: never;
3460
+ path: {
3461
+ orgSlug: components["parameters"]["OrgSlug"];
3462
+ projectName: components["parameters"]["ProjectName"];
3463
+ };
3464
+ cookie?: never;
3465
+ };
3466
+ /**
3467
+ * AI calls this project's app made (docs/ai-observability.md §6.1)
3468
+ * @description One row per `env.ai` call from the deployed app, newest first: the lane that served it,
3469
+ * whether a lent subscription was asked and why it did not serve, status, latency, tokens and
3470
+ * price. Rows live as long as the plan's log retention (`retentionDays`). `userId` is
3471
+ * returned only to a reader with `observability:pii`. Without an event store the answer is
3472
+ * `{available: false}`. Requires `observability:read`.
3473
+ */
3474
+ get: operations["listAICalls"];
3475
+ put?: never;
3476
+ post?: never;
3477
+ delete?: never;
3478
+ options?: never;
3479
+ head?: never;
3480
+ patch?: never;
3481
+ trace?: never;
3482
+ };
3483
+ "/v1/orgs/{orgSlug}/projects/{projectName}/ai/calls/{callId}": {
3484
+ parameters: {
3485
+ query?: never;
3486
+ header?: never;
3487
+ path: {
3488
+ orgSlug: components["parameters"]["OrgSlug"];
3489
+ projectName: components["parameters"]["ProjectName"];
3490
+ callId: string;
3491
+ };
3492
+ cookie?: never;
3493
+ };
3494
+ /**
3495
+ * One AI call, with its captured input and output when allowed
3496
+ * @description The call's row, and — when the project captured it and the reader holds
3497
+ * `observability:pii` — the input and output (each at most 64 KiB, scrubbed by the
3498
+ * project's scanner rules). A captured body the reader may not see is `bodyHidden: true`.
3499
+ * A read that returns a body or a user id is audited. Requires `observability:read`.
3500
+ */
3501
+ get: operations["getAICall"];
3502
+ put?: never;
3503
+ post?: never;
3504
+ delete?: never;
3505
+ options?: never;
3506
+ head?: never;
3507
+ patch?: never;
3508
+ trace?: never;
3509
+ };
3510
+ "/v1/orgs/{orgSlug}/projects/{projectName}/ai/summary": {
3511
+ parameters: {
3512
+ query?: never;
3513
+ header?: never;
3514
+ path: {
3515
+ orgSlug: components["parameters"]["OrgSlug"];
3516
+ projectName: components["parameters"]["ProjectName"];
3517
+ };
3518
+ cookie?: never;
3519
+ };
3520
+ /**
3521
+ * AI calls over time, by model, and why lending did not serve
3522
+ * @description Totals, a series and a per-model table from the hourly rollup (kept 456 days), and the
3523
+ * most frequent reasons a lent subscription did not serve a call (from the raw rows inside
3524
+ * retention). The step is 1 h up to 3 days, 6 h up to 14 days, 1 day beyond. Requires
3525
+ * `observability:read`.
3526
+ */
3527
+ get: operations["getAISummary"];
3528
+ put?: never;
3529
+ post?: never;
3530
+ delete?: never;
3531
+ options?: never;
3532
+ head?: never;
3533
+ patch?: never;
3534
+ trace?: never;
3535
+ };
3536
+ "/v1/orgs/{orgSlug}/projects/{projectName}/ai/sessions": {
3537
+ parameters: {
3538
+ query?: never;
3539
+ header?: never;
3540
+ path: {
3541
+ orgSlug: components["parameters"]["OrgSlug"];
3542
+ projectName: components["parameters"]["ProjectName"];
3543
+ };
3544
+ cookie?: never;
3545
+ };
3546
+ /**
3547
+ * AI calls grouped by the app's metadata.sessionId
3548
+ * @description Newest `lastAt` first. A session's calls are `GET …/ai/calls?sessionId=…`. `userId` only
3549
+ * with `observability:pii`. Requires `observability:read`.
3550
+ */
3551
+ get: operations["listAISessions"];
3552
+ put?: never;
3553
+ post?: never;
3554
+ delete?: never;
3555
+ options?: never;
3556
+ head?: never;
3557
+ patch?: never;
3558
+ trace?: never;
3559
+ };
3560
+ "/v1/orgs/{orgSlug}/projects/{projectName}/ai/lenders": {
3561
+ parameters: {
3562
+ query?: never;
3563
+ header?: never;
3564
+ path: {
3565
+ orgSlug: components["parameters"]["OrgSlug"];
3566
+ projectName: components["parameters"]["ProjectName"];
3567
+ };
3568
+ cookie?: never;
3569
+ };
3570
+ /**
3571
+ * Desktops of the org's members that can lend to this project right now
3572
+ * @description Each desktop lending to apps, with the models it lends and whether its Runlot Studio is
3573
+ * too old to carry `reasoning` or `responseFormat` (`outdated`). `reachable` is false when
3574
+ * the lending service could not be asked. Requires `observability:read`.
3575
+ */
3576
+ get: operations["getAILenders"];
3577
+ put?: never;
3578
+ post?: never;
3579
+ delete?: never;
3580
+ options?: never;
3581
+ head?: never;
3582
+ patch?: never;
3583
+ trace?: never;
3584
+ };
3585
+ "/v1/orgs/{orgSlug}/projects/{projectName}/ai/capture": {
3586
+ parameters: {
3587
+ query?: never;
3588
+ header?: never;
3589
+ path: {
3590
+ orgSlug: components["parameters"]["OrgSlug"];
3591
+ projectName: components["parameters"]["ProjectName"];
3592
+ };
3593
+ cookie?: never;
3594
+ };
3595
+ /**
3596
+ * Whether this project records prompts and answers
3597
+ * @description Prompt capture is off by default. With it on, each call's input and output (each cut to
3598
+ * 64 KiB and scrubbed by the project's scanner rules) are kept with its row for the plan's
3599
+ * log retention. Requires `observability:read`.
3600
+ */
3601
+ get: operations["getAICapture"];
3602
+ /**
3603
+ * Turn prompt capture on or off
3604
+ * @description Requires `observability:admin`. Audited. Takes effect on the next calls without a redeploy.
3605
+ */
3606
+ put: operations["setAICapture"];
3607
+ post?: never;
3608
+ delete?: never;
3609
+ options?: never;
3610
+ head?: never;
3611
+ patch?: never;
3612
+ trace?: never;
3613
+ };
3456
3614
  "/v1/orgs/{orgSlug}/ai/ledger": {
3457
3615
  parameters: {
3458
3616
  query?: never;
@@ -12758,6 +12916,207 @@ export interface components {
12758
12916
  /** @description Pass it back to get the next page. Absent means the end. */
12759
12917
  cursor?: string;
12760
12918
  };
12919
+ /** @description One env.ai call (docs/ai-observability.md §3). */
12920
+ AICallRow: {
12921
+ callId: string;
12922
+ /** @description The request (and trace) that made the call */
12923
+ requestId?: string;
12924
+ /** Format: date-time */
12925
+ ts: string;
12926
+ /** @enum {string} */
12927
+ op: "run" | "embed" | "judge";
12928
+ model: string;
12929
+ /** @enum {string} */
12930
+ lane: "credit" | "byos" | "none";
12931
+ /** @enum {string} */
12932
+ byos?: "served" | "fellBack" | "refused";
12933
+ byosCode?: string;
12934
+ byosReason?: string;
12935
+ status: number;
12936
+ error: boolean;
12937
+ errorCode?: string;
12938
+ errorMessage?: string;
12939
+ durationMs: number;
12940
+ ttftMs?: number;
12941
+ stream: boolean;
12942
+ stopReason?: string;
12943
+ /** Format: int64 */
12944
+ tokensIn: number;
12945
+ /** Format: int64 */
12946
+ tokensOut: number;
12947
+ /** Format: int64 */
12948
+ tokensCached: number;
12949
+ /** Format: int64 */
12950
+ tokensCacheWrite: number;
12951
+ /**
12952
+ * Format: int64
12953
+ * @description List price of the call; on a lent call, what lending saved
12954
+ */
12955
+ costMicroCents: number;
12956
+ /**
12957
+ * Format: int64
12958
+ * @description Taken from credit
12959
+ */
12960
+ chargedMicroCents: number;
12961
+ effort?: string;
12962
+ responseFormat: boolean;
12963
+ tools: number;
12964
+ toolRounds: number;
12965
+ inputs?: number;
12966
+ dimensions?: number;
12967
+ sessionId?: string;
12968
+ /** @description Only with observability:pii */
12969
+ userId?: string;
12970
+ tags: string[];
12971
+ hasBody: boolean;
12972
+ deploymentVersion: number;
12973
+ };
12974
+ AICallDetail: components["schemas"]["AICallRow"] & {
12975
+ input?: string;
12976
+ output?: string;
12977
+ inputTruncated: boolean;
12978
+ outputTruncated: boolean;
12979
+ redacted: boolean;
12980
+ bodyHidden?: boolean;
12981
+ };
12982
+ AICallList: {
12983
+ available: boolean;
12984
+ retentionDays?: number;
12985
+ calls?: components["schemas"]["AICallRow"][];
12986
+ nextBefore?: string;
12987
+ };
12988
+ AISummary: {
12989
+ available: boolean;
12990
+ /** Format: date-time */
12991
+ from?: string;
12992
+ /** Format: date-time */
12993
+ to?: string;
12994
+ stepSeconds?: number;
12995
+ totals?: {
12996
+ /** Format: int64 */
12997
+ calls: number;
12998
+ /** Format: int64 */
12999
+ errors: number;
13000
+ /** Format: int64 */
13001
+ tokensIn: number;
13002
+ /** Format: int64 */
13003
+ tokensOut: number;
13004
+ /** Format: int64 */
13005
+ tokensCached: number;
13006
+ /** Format: int64 */
13007
+ costMicroCents: number;
13008
+ /** Format: int64 */
13009
+ chargedMicroCents: number;
13010
+ /** Format: int64 */
13011
+ byosServed: number;
13012
+ /** Format: int64 */
13013
+ byosFellBack: number;
13014
+ /** Format: int64 */
13015
+ byosRefused: number;
13016
+ /** Format: int64 */
13017
+ byosSavedMicroCents: number;
13018
+ p50Ms: number;
13019
+ p95Ms: number;
13020
+ ttftP50Ms: number;
13021
+ };
13022
+ series?: {
13023
+ /** Format: date-time */
13024
+ t: string;
13025
+ /** Format: int64 */
13026
+ calls: number;
13027
+ /** Format: int64 */
13028
+ errors: number;
13029
+ /** Format: int64 */
13030
+ chargedMicroCents: number;
13031
+ /** Format: int64 */
13032
+ byosServed: number;
13033
+ /** Format: int64 */
13034
+ byosFellBack: number;
13035
+ /** Format: int64 */
13036
+ byosRefused: number;
13037
+ p95Ms: number;
13038
+ }[];
13039
+ models?: {
13040
+ model: string;
13041
+ /** Format: int64 */
13042
+ calls: number;
13043
+ /** Format: int64 */
13044
+ errors: number;
13045
+ /** Format: int64 */
13046
+ tokensIn: number;
13047
+ /** Format: int64 */
13048
+ tokensOut: number;
13049
+ /** Format: int64 */
13050
+ costMicroCents: number;
13051
+ /** Format: int64 */
13052
+ chargedMicroCents: number;
13053
+ /** Format: int64 */
13054
+ byosServed: number;
13055
+ p50Ms: number;
13056
+ p95Ms: number;
13057
+ }[];
13058
+ byosReasons?: {
13059
+ code: string;
13060
+ reason: string;
13061
+ /** Format: int64 */
13062
+ calls: number;
13063
+ /** Format: date-time */
13064
+ lastAt: string;
13065
+ }[];
13066
+ };
13067
+ AISession: {
13068
+ sessionId: string;
13069
+ /** Format: int64 */
13070
+ calls: number;
13071
+ /** Format: int64 */
13072
+ errors: number;
13073
+ /** Format: date-time */
13074
+ firstAt: string;
13075
+ /** Format: date-time */
13076
+ lastAt: string;
13077
+ /** Format: int64 */
13078
+ tokensIn: number;
13079
+ /** Format: int64 */
13080
+ tokensOut: number;
13081
+ /** Format: int64 */
13082
+ costMicroCents: number;
13083
+ /** Format: int64 */
13084
+ chargedMicroCents: number;
13085
+ models: string[];
13086
+ /** @description Only with observability:pii */
13087
+ userId?: string;
13088
+ };
13089
+ AISessionList: {
13090
+ available: boolean;
13091
+ sessions?: components["schemas"]["AISession"][];
13092
+ nextBefore?: string;
13093
+ };
13094
+ AILenders: {
13095
+ byos: boolean;
13096
+ byosCreditFallback: boolean;
13097
+ reachable: boolean;
13098
+ lenders: {
13099
+ member: {
13100
+ name?: string;
13101
+ email: string;
13102
+ };
13103
+ device: string;
13104
+ models: string[];
13105
+ options: string[];
13106
+ outdated: boolean;
13107
+ engines: {
13108
+ vendor: string;
13109
+ connected: boolean;
13110
+ version?: string;
13111
+ }[];
13112
+ inflight: number;
13113
+ }[];
13114
+ };
13115
+ AICapture: {
13116
+ captureBodies: boolean;
13117
+ retentionDays: number;
13118
+ canEdit: boolean;
13119
+ };
12761
13120
  AILedgerRow: {
12762
13121
  /** @enum {string} */
12763
13122
  kind: "call" | "topup" | "adjust";
@@ -19996,6 +20355,219 @@ export interface operations {
19996
20355
  403: components["responses"]["Forbidden"];
19997
20356
  };
19998
20357
  };
20358
+ listAICalls: {
20359
+ parameters: {
20360
+ query?: {
20361
+ from?: string;
20362
+ to?: string;
20363
+ model?: string;
20364
+ op?: "run" | "embed" | "judge";
20365
+ lane?: "credit" | "byos" | "none";
20366
+ byos?: "served" | "fellBack" | "refused" | "attempted";
20367
+ status?: "ok" | "error";
20368
+ sessionId?: string;
20369
+ /** @description Needs observability:pii */
20370
+ userId?: string;
20371
+ requestId?: string;
20372
+ tag?: string;
20373
+ /** @description The previous page's nextBefore (opaque) */
20374
+ before?: string;
20375
+ limit?: number;
20376
+ };
20377
+ header?: never;
20378
+ path: {
20379
+ orgSlug: components["parameters"]["OrgSlug"];
20380
+ projectName: components["parameters"]["ProjectName"];
20381
+ };
20382
+ cookie?: never;
20383
+ };
20384
+ requestBody?: never;
20385
+ responses: {
20386
+ /** @description Calls */
20387
+ 200: {
20388
+ headers: {
20389
+ [name: string]: unknown;
20390
+ };
20391
+ content: {
20392
+ "application/json": components["schemas"]["AICallList"];
20393
+ };
20394
+ };
20395
+ 400: components["responses"]["BadRequest"];
20396
+ 403: components["responses"]["Forbidden"];
20397
+ 404: components["responses"]["NotFound"];
20398
+ };
20399
+ };
20400
+ getAICall: {
20401
+ parameters: {
20402
+ query?: never;
20403
+ header?: never;
20404
+ path: {
20405
+ orgSlug: components["parameters"]["OrgSlug"];
20406
+ projectName: components["parameters"]["ProjectName"];
20407
+ callId: string;
20408
+ };
20409
+ cookie?: never;
20410
+ };
20411
+ requestBody?: never;
20412
+ responses: {
20413
+ /** @description The call */
20414
+ 200: {
20415
+ headers: {
20416
+ [name: string]: unknown;
20417
+ };
20418
+ content: {
20419
+ "application/json": {
20420
+ available: boolean;
20421
+ call?: components["schemas"]["AICallDetail"];
20422
+ };
20423
+ };
20424
+ };
20425
+ 403: components["responses"]["Forbidden"];
20426
+ 404: components["responses"]["NotFound"];
20427
+ };
20428
+ };
20429
+ getAISummary: {
20430
+ parameters: {
20431
+ query?: {
20432
+ from?: string;
20433
+ to?: string;
20434
+ };
20435
+ header?: never;
20436
+ path: {
20437
+ orgSlug: components["parameters"]["OrgSlug"];
20438
+ projectName: components["parameters"]["ProjectName"];
20439
+ };
20440
+ cookie?: never;
20441
+ };
20442
+ requestBody?: never;
20443
+ responses: {
20444
+ /** @description Summary */
20445
+ 200: {
20446
+ headers: {
20447
+ [name: string]: unknown;
20448
+ };
20449
+ content: {
20450
+ "application/json": components["schemas"]["AISummary"];
20451
+ };
20452
+ };
20453
+ 400: components["responses"]["BadRequest"];
20454
+ 403: components["responses"]["Forbidden"];
20455
+ 404: components["responses"]["NotFound"];
20456
+ };
20457
+ };
20458
+ listAISessions: {
20459
+ parameters: {
20460
+ query?: {
20461
+ from?: string;
20462
+ to?: string;
20463
+ before?: string;
20464
+ limit?: number;
20465
+ };
20466
+ header?: never;
20467
+ path: {
20468
+ orgSlug: components["parameters"]["OrgSlug"];
20469
+ projectName: components["parameters"]["ProjectName"];
20470
+ };
20471
+ cookie?: never;
20472
+ };
20473
+ requestBody?: never;
20474
+ responses: {
20475
+ /** @description Sessions */
20476
+ 200: {
20477
+ headers: {
20478
+ [name: string]: unknown;
20479
+ };
20480
+ content: {
20481
+ "application/json": components["schemas"]["AISessionList"];
20482
+ };
20483
+ };
20484
+ 400: components["responses"]["BadRequest"];
20485
+ 403: components["responses"]["Forbidden"];
20486
+ 404: components["responses"]["NotFound"];
20487
+ };
20488
+ };
20489
+ getAILenders: {
20490
+ parameters: {
20491
+ query?: never;
20492
+ header?: never;
20493
+ path: {
20494
+ orgSlug: components["parameters"]["OrgSlug"];
20495
+ projectName: components["parameters"]["ProjectName"];
20496
+ };
20497
+ cookie?: never;
20498
+ };
20499
+ requestBody?: never;
20500
+ responses: {
20501
+ /** @description Lenders */
20502
+ 200: {
20503
+ headers: {
20504
+ [name: string]: unknown;
20505
+ };
20506
+ content: {
20507
+ "application/json": components["schemas"]["AILenders"];
20508
+ };
20509
+ };
20510
+ 403: components["responses"]["Forbidden"];
20511
+ 404: components["responses"]["NotFound"];
20512
+ };
20513
+ };
20514
+ getAICapture: {
20515
+ parameters: {
20516
+ query?: never;
20517
+ header?: never;
20518
+ path: {
20519
+ orgSlug: components["parameters"]["OrgSlug"];
20520
+ projectName: components["parameters"]["ProjectName"];
20521
+ };
20522
+ cookie?: never;
20523
+ };
20524
+ requestBody?: never;
20525
+ responses: {
20526
+ /** @description Capture setting */
20527
+ 200: {
20528
+ headers: {
20529
+ [name: string]: unknown;
20530
+ };
20531
+ content: {
20532
+ "application/json": components["schemas"]["AICapture"];
20533
+ };
20534
+ };
20535
+ 403: components["responses"]["Forbidden"];
20536
+ 404: components["responses"]["NotFound"];
20537
+ };
20538
+ };
20539
+ setAICapture: {
20540
+ parameters: {
20541
+ query?: never;
20542
+ header?: never;
20543
+ path: {
20544
+ orgSlug: components["parameters"]["OrgSlug"];
20545
+ projectName: components["parameters"]["ProjectName"];
20546
+ };
20547
+ cookie?: never;
20548
+ };
20549
+ requestBody: {
20550
+ content: {
20551
+ "application/json": {
20552
+ captureBodies: boolean;
20553
+ };
20554
+ };
20555
+ };
20556
+ responses: {
20557
+ /** @description Capture setting */
20558
+ 200: {
20559
+ headers: {
20560
+ [name: string]: unknown;
20561
+ };
20562
+ content: {
20563
+ "application/json": components["schemas"]["AICapture"];
20564
+ };
20565
+ };
20566
+ 400: components["responses"]["BadRequest"];
20567
+ 403: components["responses"]["Forbidden"];
20568
+ 404: components["responses"]["NotFound"];
20569
+ };
20570
+ };
19999
20571
  listAILedger: {
20000
20572
  parameters: {
20001
20573
  query?: {