berget 1.3.1 → 2.0.0

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.
Files changed (67) hide show
  1. package/.env.example +5 -0
  2. package/.github/workflows/publish.yml +56 -0
  3. package/.github/workflows/test.yml +38 -0
  4. package/AGENTS.md +184 -0
  5. package/README.md +177 -38
  6. package/TODO.md +2 -0
  7. package/blog-post.md +176 -0
  8. package/dist/index.js +11 -8
  9. package/dist/package.json +14 -3
  10. package/dist/src/commands/api-keys.js +4 -2
  11. package/dist/src/commands/chat.js +182 -23
  12. package/dist/src/commands/code.js +1424 -0
  13. package/dist/src/commands/index.js +2 -0
  14. package/dist/src/constants/command-structure.js +12 -0
  15. package/dist/src/schemas/opencode-schema.json +1121 -0
  16. package/dist/src/services/chat-service.js +10 -10
  17. package/dist/src/services/cluster-service.js +1 -1
  18. package/dist/src/utils/default-api-key.js +2 -2
  19. package/dist/src/utils/env-manager.js +86 -0
  20. package/dist/src/utils/error-handler.js +10 -3
  21. package/dist/src/utils/markdown-renderer.js +4 -4
  22. package/dist/src/utils/opencode-validator.js +122 -0
  23. package/dist/src/utils/token-manager.js +2 -2
  24. package/dist/tests/commands/chat.test.js +109 -0
  25. package/dist/tests/commands/code.test.js +414 -0
  26. package/dist/tests/utils/env-manager.test.js +148 -0
  27. package/dist/tests/utils/opencode-validator.test.js +103 -0
  28. package/dist/vitest.config.js +9 -0
  29. package/index.ts +67 -32
  30. package/opencode.json +182 -0
  31. package/package.json +14 -3
  32. package/src/client.ts +20 -20
  33. package/src/commands/api-keys.ts +93 -60
  34. package/src/commands/auth.ts +4 -2
  35. package/src/commands/billing.ts +6 -3
  36. package/src/commands/chat.ts +291 -97
  37. package/src/commands/clusters.ts +2 -2
  38. package/src/commands/code.ts +1696 -0
  39. package/src/commands/index.ts +2 -0
  40. package/src/commands/models.ts +3 -3
  41. package/src/commands/users.ts +2 -2
  42. package/src/constants/command-structure.ts +112 -58
  43. package/src/schemas/opencode-schema.json +991 -0
  44. package/src/services/api-key-service.ts +1 -1
  45. package/src/services/auth-service.ts +27 -25
  46. package/src/services/chat-service.ts +37 -44
  47. package/src/services/cluster-service.ts +5 -5
  48. package/src/services/collaborator-service.ts +3 -3
  49. package/src/services/flux-service.ts +2 -2
  50. package/src/services/helm-service.ts +2 -2
  51. package/src/services/kubectl-service.ts +3 -6
  52. package/src/types/api.d.ts +1032 -1010
  53. package/src/types/json.d.ts +3 -3
  54. package/src/utils/default-api-key.ts +54 -42
  55. package/src/utils/env-manager.ts +98 -0
  56. package/src/utils/error-handler.ts +24 -15
  57. package/src/utils/logger.ts +12 -12
  58. package/src/utils/markdown-renderer.ts +18 -18
  59. package/src/utils/opencode-validator.ts +134 -0
  60. package/src/utils/token-manager.ts +35 -23
  61. package/tests/commands/chat.test.ts +129 -0
  62. package/tests/commands/code.test.ts +505 -0
  63. package/tests/utils/env-manager.test.ts +199 -0
  64. package/tests/utils/opencode-validator.test.ts +118 -0
  65. package/tsconfig.json +8 -8
  66. package/vitest.config.ts +8 -0
  67. package/-27b-it +0 -0
@@ -3,14 +3,19 @@
3
3
  * Do not make direct changes to the file.
4
4
  */
5
5
 
6
-
7
6
  /** OneOf type helpers */
8
- type Without<T, U> = { [P in Exclude<keyof T, keyof U>]?: never };
9
- type XOR<T, U> = (T | U) extends object ? (Without<T, U> & U) | (Without<U, T> & T) : T | U;
10
- type OneOf<T extends any[]> = T extends [infer Only] ? Only : T extends [infer A, infer B, ...infer Rest] ? OneOf<[XOR<A, B>, ...Rest]> : never;
7
+ type Without<T, U> = { [P in Exclude<keyof T, keyof U>]?: never }
8
+ type XOR<T, U> = T | U extends object
9
+ ? (Without<T, U> & U) | (Without<U, T> & T)
10
+ : T | U
11
+ type OneOf<T extends any[]> = T extends [infer Only]
12
+ ? Only
13
+ : T extends [infer A, infer B, ...infer Rest]
14
+ ? OneOf<[XOR<A, B>, ...Rest]>
15
+ : never
11
16
 
12
17
  export interface paths {
13
- "/v1/api-keys": {
18
+ '/v1/api-keys': {
14
19
  /**
15
20
  * List all API keys
16
21
  * @description Lists all API keys for the authenticated user's organization.
@@ -34,19 +39,19 @@ export interface paths {
34
39
  /** @description List of API keys */
35
40
  200: {
36
41
  content: {
37
- "application/json": components["schemas"]["ApiKeyListResponse"];
38
- };
39
- };
42
+ 'application/json': components['schemas']['ApiKeyListResponse']
43
+ }
44
+ }
40
45
  /** @description Unauthorized */
41
46
  401: {
42
- content: never;
43
- };
47
+ content: never
48
+ }
44
49
  /** @description Server error */
45
50
  500: {
46
- content: never;
47
- };
48
- };
49
- };
51
+ content: never
52
+ }
53
+ }
54
+ }
50
55
  /**
51
56
  * Create a new API key
52
57
  * @description Creates a new API key for the authenticated user's organization. The full API key is only returned once at creation time.
@@ -65,28 +70,28 @@ export interface paths {
65
70
  post: {
66
71
  requestBody: {
67
72
  content: {
68
- "application/json": components["schemas"]["CreateApiKey"];
69
- };
70
- };
73
+ 'application/json': components['schemas']['CreateApiKey']
74
+ }
75
+ }
71
76
  responses: {
72
77
  /** @description API key created successfully */
73
78
  201: {
74
79
  content: {
75
- "application/json": components["schemas"]["CreateApiKeyResponse"];
76
- };
77
- };
80
+ 'application/json': components['schemas']['CreateApiKeyResponse']
81
+ }
82
+ }
78
83
  /** @description Unauthorized */
79
84
  401: {
80
- content: never;
81
- };
85
+ content: never
86
+ }
82
87
  /** @description Server error */
83
88
  500: {
84
- content: never;
85
- };
86
- };
87
- };
88
- };
89
- "/v1/api-keys/{id}": {
89
+ content: never
90
+ }
91
+ }
92
+ }
93
+ }
94
+ '/v1/api-keys/{id}': {
90
95
  /**
91
96
  * Delete an API key
92
97
  * @description Permanently deletes an API key
@@ -95,30 +100,30 @@ export interface paths {
95
100
  parameters: {
96
101
  path: {
97
102
  /** @description API key ID */
98
- id: string;
99
- };
100
- };
103
+ id: string
104
+ }
105
+ }
101
106
  responses: {
102
107
  /** @description API key deleted successfully */
103
108
  204: {
104
- content: never;
105
- };
109
+ content: never
110
+ }
106
111
  /** @description Unauthorized */
107
112
  401: {
108
- content: never;
109
- };
113
+ content: never
114
+ }
110
115
  /** @description API key not found */
111
116
  404: {
112
- content: never;
113
- };
117
+ content: never
118
+ }
114
119
  /** @description Server error */
115
120
  500: {
116
- content: never;
117
- };
118
- };
119
- };
120
- };
121
- "/v1/api-keys/{id}/rotate": {
121
+ content: never
122
+ }
123
+ }
124
+ }
125
+ }
126
+ '/v1/api-keys/{id}/rotate': {
122
127
  /**
123
128
  * Rotate an API key
124
129
  * @description Rotates an API key by invalidating the old key and generating a new one. The new key is returned in the response and is only shown once.
@@ -142,32 +147,32 @@ export interface paths {
142
147
  parameters: {
143
148
  path: {
144
149
  /** @description API key ID */
145
- id: string;
146
- };
147
- };
150
+ id: string
151
+ }
152
+ }
148
153
  responses: {
149
154
  /** @description API key rotated successfully */
150
155
  200: {
151
156
  content: {
152
- "application/json": components["schemas"]["CreateApiKeyResponse"];
153
- };
154
- };
157
+ 'application/json': components['schemas']['CreateApiKeyResponse']
158
+ }
159
+ }
155
160
  /** @description Unauthorized */
156
161
  401: {
157
- content: never;
158
- };
162
+ content: never
163
+ }
159
164
  /** @description API key not found */
160
165
  404: {
161
- content: never;
162
- };
166
+ content: never
167
+ }
163
168
  /** @description Server error */
164
169
  500: {
165
- content: never;
166
- };
167
- };
168
- };
169
- };
170
- "/v1/api-keys/{id}/usage": {
170
+ content: never
171
+ }
172
+ }
173
+ }
174
+ }
175
+ '/v1/api-keys/{id}/usage': {
171
176
  /**
172
177
  * Get API key usage statistics
173
178
  * @description Returns usage statistics for a specific API key including request count, daily breakdown, model-specific usage, and token consumption.
@@ -190,38 +195,38 @@ export interface paths {
190
195
  parameters: {
191
196
  query?: {
192
197
  /** @description Start date in YYYY-MM-DD format */
193
- start_date?: string;
198
+ start_date?: string
194
199
  /** @description End date in YYYY-MM-DD format */
195
- end_date?: string;
196
- };
200
+ end_date?: string
201
+ }
197
202
  path: {
198
203
  /** @description API key ID */
199
- id: string;
200
- };
201
- };
204
+ id: string
205
+ }
206
+ }
202
207
  responses: {
203
208
  /** @description API key usage statistics */
204
209
  200: {
205
210
  content: {
206
- "application/json": components["schemas"]["ApiKeyUsageResponse"];
207
- };
208
- };
211
+ 'application/json': components['schemas']['ApiKeyUsageResponse']
212
+ }
213
+ }
209
214
  /** @description Unauthorized */
210
215
  401: {
211
- content: never;
212
- };
216
+ content: never
217
+ }
213
218
  /** @description API key not found */
214
219
  404: {
215
- content: never;
216
- };
220
+ content: never
221
+ }
217
222
  /** @description Server error */
218
223
  500: {
219
- content: never;
220
- };
221
- };
222
- };
223
- };
224
- "/v1/apps/templates": {
224
+ content: never
225
+ }
226
+ }
227
+ }
228
+ }
229
+ '/v1/apps/templates': {
225
230
  /**
226
231
  * List app templates
227
232
  * @description Retrieves a list of all available application templates that can be installed in your cluster
@@ -231,21 +236,21 @@ export interface paths {
231
236
  /** @description List of app templates */
232
237
  200: {
233
238
  content: {
234
- "application/json": components["schemas"]["AppTemplateList"];
235
- };
236
- };
239
+ 'application/json': components['schemas']['AppTemplateList']
240
+ }
241
+ }
237
242
  /** @description Unauthorized */
238
243
  401: {
239
- content: never;
240
- };
244
+ content: never
245
+ }
241
246
  /** @description Server error */
242
247
  500: {
243
- content: never;
244
- };
245
- };
246
- };
247
- };
248
- "/v1/apps/templates/{appId}": {
248
+ content: never
249
+ }
250
+ }
251
+ }
252
+ }
253
+ '/v1/apps/templates/{appId}': {
249
254
  /**
250
255
  * Get app template details
251
256
  * @description Retrieves detailed information about a specific app template
@@ -254,32 +259,32 @@ export interface paths {
254
259
  parameters: {
255
260
  path: {
256
261
  /** @description App template ID */
257
- appId: string;
258
- };
259
- };
262
+ appId: string
263
+ }
264
+ }
260
265
  responses: {
261
266
  /** @description App template details */
262
267
  200: {
263
268
  content: {
264
- "application/json": components["schemas"]["AppTemplate"];
265
- };
266
- };
269
+ 'application/json': components['schemas']['AppTemplate']
270
+ }
271
+ }
267
272
  /** @description Unauthorized */
268
273
  401: {
269
- content: never;
270
- };
274
+ content: never
275
+ }
271
276
  /** @description App template not found */
272
277
  404: {
273
- content: never;
274
- };
278
+ content: never
279
+ }
275
280
  /** @description Server error */
276
281
  500: {
277
- content: never;
278
- };
279
- };
280
- };
281
- };
282
- "/v1/apps/installations": {
282
+ content: never
283
+ }
284
+ }
285
+ }
286
+ }
287
+ '/v1/apps/installations': {
283
288
  /**
284
289
  * List app installations
285
290
  * @description Retrieves a list of all installed applications in your clusters
@@ -289,19 +294,19 @@ export interface paths {
289
294
  /** @description List of app installations */
290
295
  200: {
291
296
  content: {
292
- "application/json": components["schemas"]["AppInstallationList"];
293
- };
294
- };
297
+ 'application/json': components['schemas']['AppInstallationList']
298
+ }
299
+ }
295
300
  /** @description Unauthorized */
296
301
  401: {
297
- content: never;
298
- };
302
+ content: never
303
+ }
299
304
  /** @description Server error */
300
305
  500: {
301
- content: never;
302
- };
303
- };
304
- };
306
+ content: never
307
+ }
308
+ }
309
+ }
305
310
  /**
306
311
  * Install an app
307
312
  * @description Installs an application from a template into your cluster
@@ -309,36 +314,36 @@ export interface paths {
309
314
  post: {
310
315
  requestBody: {
311
316
  content: {
312
- "application/json": components["schemas"]["AppInstallRequest"];
313
- };
314
- };
317
+ 'application/json': components['schemas']['AppInstallRequest']
318
+ }
319
+ }
315
320
  responses: {
316
321
  /** @description App installation initiated */
317
322
  201: {
318
323
  content: {
319
- "application/json": components["schemas"]["AppInstallation"];
320
- };
321
- };
324
+ 'application/json': components['schemas']['AppInstallation']
325
+ }
326
+ }
322
327
  /** @description Invalid request */
323
328
  400: {
324
- content: never;
325
- };
329
+ content: never
330
+ }
326
331
  /** @description Unauthorized */
327
332
  401: {
328
- content: never;
329
- };
333
+ content: never
334
+ }
330
335
  /** @description App template not found */
331
336
  404: {
332
- content: never;
333
- };
337
+ content: never
338
+ }
334
339
  /** @description Server error */
335
340
  500: {
336
- content: never;
337
- };
338
- };
339
- };
340
- };
341
- "/v1/apps/installations/{installationId}": {
341
+ content: never
342
+ }
343
+ }
344
+ }
345
+ }
346
+ '/v1/apps/installations/{installationId}': {
342
347
  /**
343
348
  * Get installation details
344
349
  * @description Retrieves detailed information about a specific app installation
@@ -347,30 +352,30 @@ export interface paths {
347
352
  parameters: {
348
353
  path: {
349
354
  /** @description Installation ID */
350
- installationId: string;
351
- };
352
- };
355
+ installationId: string
356
+ }
357
+ }
353
358
  responses: {
354
359
  /** @description Installation details */
355
360
  200: {
356
361
  content: {
357
- "application/json": components["schemas"]["AppInstallation"];
358
- };
359
- };
362
+ 'application/json': components['schemas']['AppInstallation']
363
+ }
364
+ }
360
365
  /** @description Unauthorized */
361
366
  401: {
362
- content: never;
363
- };
367
+ content: never
368
+ }
364
369
  /** @description Installation not found */
365
370
  404: {
366
- content: never;
367
- };
371
+ content: never
372
+ }
368
373
  /** @description Server error */
369
374
  500: {
370
- content: never;
371
- };
372
- };
373
- };
375
+ content: never
376
+ }
377
+ }
378
+ }
374
379
  /**
375
380
  * Uninstall an app
376
381
  * @description Removes an installed application from your cluster
@@ -379,30 +384,30 @@ export interface paths {
379
384
  parameters: {
380
385
  path: {
381
386
  /** @description Installation ID */
382
- installationId: string;
383
- };
384
- };
387
+ installationId: string
388
+ }
389
+ }
385
390
  responses: {
386
391
  /** @description App uninstallation initiated */
387
392
  204: {
388
- content: never;
389
- };
393
+ content: never
394
+ }
390
395
  /** @description Unauthorized */
391
396
  401: {
392
- content: never;
393
- };
397
+ content: never
398
+ }
394
399
  /** @description Installation not found */
395
400
  404: {
396
- content: never;
397
- };
401
+ content: never
402
+ }
398
403
  /** @description Server error */
399
404
  500: {
400
- content: never;
401
- };
402
- };
403
- };
404
- };
405
- "/v1/auth/login": {
405
+ content: never
406
+ }
407
+ }
408
+ }
409
+ }
410
+ '/v1/auth/login': {
406
411
  /**
407
412
  * OAuth login
408
413
  * @description Initiates OAuth login flow via Keycloak.
@@ -423,20 +428,20 @@ export interface paths {
423
428
  parameters: {
424
429
  query?: {
425
430
  /** @description URL to redirect to after successful login */
426
- redirect_uri?: string;
431
+ redirect_uri?: string
427
432
  /** @description How to return the token after successful login (default is redirect) */
428
- response_type?: "redirect" | "json";
429
- };
430
- };
433
+ response_type?: 'redirect' | 'json'
434
+ }
435
+ }
431
436
  responses: {
432
437
  /** @description Redirects to Keycloak for login */
433
438
  302: {
434
- content: never;
435
- };
436
- };
437
- };
438
- };
439
- "/v1/auth/callback": {
439
+ content: never
440
+ }
441
+ }
442
+ }
443
+ }
444
+ '/v1/auth/callback': {
440
445
  /**
441
446
  * OAuth callback
442
447
  * @description Handles Keycloak login callback and exchanges token
@@ -444,19 +449,19 @@ export interface paths {
444
449
  get: {
445
450
  parameters: {
446
451
  query: {
447
- code: string;
448
- state: string;
449
- };
450
- };
452
+ code: string
453
+ state: string
454
+ }
455
+ }
451
456
  responses: {
452
457
  /** @description Redirects to frontend */
453
458
  302: {
454
- content: never;
455
- };
456
- };
457
- };
458
- };
459
- "/v1/auth/device": {
459
+ content: never
460
+ }
461
+ }
462
+ }
463
+ }
464
+ '/v1/auth/device': {
460
465
  /**
461
466
  * Initiate device authorization flow
462
467
  * @description Initiates the device authorization flow, returning a device code and user verification URL.
@@ -475,13 +480,13 @@ export interface paths {
475
480
  /** @description Device authorization initiated */
476
481
  200: {
477
482
  content: {
478
- "application/json": components["schemas"]["DeviceAuthInitResponse"];
479
- };
480
- };
481
- };
482
- };
483
- };
484
- "/v1/auth/device/token": {
483
+ 'application/json': components['schemas']['DeviceAuthInitResponse']
484
+ }
485
+ }
486
+ }
487
+ }
488
+ }
489
+ '/v1/auth/device/token': {
485
490
  /**
486
491
  * Poll for device token
487
492
  * @description Polls for the status of a device authorization flow. The client should poll this endpoint
@@ -505,32 +510,34 @@ export interface paths {
505
510
  post: {
506
511
  requestBody: {
507
512
  content: {
508
- "application/json": components["schemas"]["DeviceAuthRequest"];
509
- };
510
- };
513
+ 'application/json': components['schemas']['DeviceAuthRequest']
514
+ }
515
+ }
511
516
  responses: {
512
517
  /** @description Token returned or pending status */
513
518
  200: {
514
519
  content: {
515
- "application/json": components["schemas"]["DeviceAuthPendingResponse"] | components["schemas"]["DeviceAuthTokenResponse"];
516
- };
517
- };
520
+ 'application/json':
521
+ | components['schemas']['DeviceAuthPendingResponse']
522
+ | components['schemas']['DeviceAuthTokenResponse']
523
+ }
524
+ }
518
525
  /** @description Invalid device code or expired token */
519
526
  400: {
520
- content: never;
521
- };
527
+ content: never
528
+ }
522
529
  /** @description Polling too frequently */
523
530
  429: {
524
- content: never;
525
- };
531
+ content: never
532
+ }
526
533
  /** @description Server error during authentication */
527
534
  500: {
528
- content: never;
529
- };
530
- };
531
- };
532
- };
533
- "/v1/auth/refresh": {
535
+ content: never
536
+ }
537
+ }
538
+ }
539
+ }
540
+ '/v1/auth/refresh': {
534
541
  /**
535
542
  * Refresh access token
536
543
  * @description Refreshes an access token using a refresh token. This endpoint can be used to obtain a new
@@ -547,39 +554,39 @@ export interface paths {
547
554
  post: {
548
555
  requestBody: {
549
556
  content: {
550
- "application/json": components["schemas"]["RefreshTokenRequest"];
551
- };
552
- };
557
+ 'application/json': components['schemas']['RefreshTokenRequest']
558
+ }
559
+ }
553
560
  responses: {
554
561
  /** @description New access and refresh tokens */
555
562
  200: {
556
563
  content: {
557
- "application/json": components["schemas"]["RefreshTokenResponse"];
558
- };
559
- };
564
+ 'application/json': components['schemas']['RefreshTokenResponse']
565
+ }
566
+ }
560
567
  /** @description Invalid or expired refresh token */
561
568
  401: {
562
- content: never;
563
- };
564
- };
565
- };
566
- };
567
- "/v1/auth/register-url": {
569
+ content: never
570
+ }
571
+ }
572
+ }
573
+ }
574
+ '/v1/auth/register-url': {
568
575
  /** Get Keycloak registration URL */
569
576
  get: {
570
577
  responses: {
571
578
  /** @description Registration URL returned */
572
579
  200: {
573
580
  content: {
574
- "application/json": {
575
- url?: string;
576
- };
577
- };
578
- };
579
- };
580
- };
581
- };
582
- "/v1/auth/logout": {
581
+ 'application/json': {
582
+ url?: string
583
+ }
584
+ }
585
+ }
586
+ }
587
+ }
588
+ }
589
+ '/v1/auth/logout': {
583
590
  /**
584
591
  * Logout
585
592
  * @description Clears cookies and redirects to Keycloak logout
@@ -587,18 +594,18 @@ export interface paths {
587
594
  get: {
588
595
  parameters: {
589
596
  query?: {
590
- redirect_uri?: string;
591
- };
592
- };
597
+ redirect_uri?: string
598
+ }
599
+ }
593
600
  responses: {
594
601
  /** @description Redirects to logout page */
595
602
  302: {
596
- content: never;
597
- };
598
- };
599
- };
600
- };
601
- "/v1/billing/usage": {
603
+ content: never
604
+ }
605
+ }
606
+ }
607
+ }
608
+ '/v1/billing/usage': {
602
609
  /**
603
610
  * Get current usage
604
611
  * @description Retrieves current billing period usage metrics and costs. Shows detailed breakdown of API calls, compute resources, and other billable items. This helps you understand your current billing status.
@@ -608,13 +615,13 @@ export interface paths {
608
615
  /** @description Current usage metrics */
609
616
  200: {
610
617
  content: {
611
- "application/json": components["schemas"]["Usage"];
612
- };
613
- };
614
- };
615
- };
616
- };
617
- "/v1/billing/invoices": {
618
+ 'application/json': components['schemas']['Usage']
619
+ }
620
+ }
621
+ }
622
+ }
623
+ }
624
+ '/v1/billing/invoices': {
618
625
  /**
619
626
  * List invoices
620
627
  * @description Retrieves all invoices for the authenticated user
@@ -624,15 +631,15 @@ export interface paths {
624
631
  /** @description List of invoices */
625
632
  200: {
626
633
  content: {
627
- "application/json": {
628
- invoices?: components["schemas"]["Invoice"][];
629
- };
630
- };
631
- };
632
- };
633
- };
634
- };
635
- "/v1/billing/invoices/{id}": {
634
+ 'application/json': {
635
+ invoices?: components['schemas']['Invoice'][]
636
+ }
637
+ }
638
+ }
639
+ }
640
+ }
641
+ }
642
+ '/v1/billing/invoices/{id}': {
636
643
  /**
637
644
  * Get invoice details
638
645
  * @description Retrieves details for a specific invoice
@@ -640,20 +647,20 @@ export interface paths {
640
647
  get: {
641
648
  parameters: {
642
649
  path: {
643
- id: string;
644
- };
645
- };
650
+ id: string
651
+ }
652
+ }
646
653
  responses: {
647
654
  /** @description Invoice details */
648
655
  200: {
649
656
  content: {
650
- "application/json": components["schemas"]["Invoice"];
651
- };
652
- };
653
- };
654
- };
655
- };
656
- "/v1/billing/payment-methods": {
657
+ 'application/json': components['schemas']['Invoice']
658
+ }
659
+ }
660
+ }
661
+ }
662
+ }
663
+ '/v1/billing/payment-methods': {
657
664
  /**
658
665
  * List payment methods
659
666
  * @description Retrieves all payment methods for the authenticated user
@@ -663,13 +670,13 @@ export interface paths {
663
670
  /** @description List of payment methods */
664
671
  200: {
665
672
  content: {
666
- "application/json": {
667
- paymentMethods?: components["schemas"]["PaymentMethod"][];
668
- };
669
- };
670
- };
671
- };
672
- };
673
+ 'application/json': {
674
+ paymentMethods?: components['schemas']['PaymentMethod'][]
675
+ }
676
+ }
677
+ }
678
+ }
679
+ }
673
680
  /**
674
681
  * Add payment method
675
682
  * @description Adds a new payment method for the authenticated user
@@ -677,20 +684,20 @@ export interface paths {
677
684
  post: {
678
685
  requestBody: {
679
686
  content: {
680
- "application/json": components["schemas"]["CreatePaymentMethod"];
681
- };
682
- };
687
+ 'application/json': components['schemas']['CreatePaymentMethod']
688
+ }
689
+ }
683
690
  responses: {
684
691
  /** @description Payment method added */
685
692
  201: {
686
693
  content: {
687
- "application/json": components["schemas"]["PaymentMethod"];
688
- };
689
- };
690
- };
691
- };
692
- };
693
- "/v1/billing/payment-methods/{id}": {
694
+ 'application/json': components['schemas']['PaymentMethod']
695
+ }
696
+ }
697
+ }
698
+ }
699
+ }
700
+ '/v1/billing/payment-methods/{id}': {
694
701
  /**
695
702
  * Remove payment method
696
703
  * @description Removes a payment method for the authenticated user
@@ -698,18 +705,18 @@ export interface paths {
698
705
  delete: {
699
706
  parameters: {
700
707
  path: {
701
- id: string;
702
- };
703
- };
708
+ id: string
709
+ }
710
+ }
704
711
  responses: {
705
712
  /** @description Payment method removed */
706
713
  204: {
707
- content: never;
708
- };
709
- };
710
- };
711
- };
712
- "/v1/billing/subscription": {
714
+ content: never
715
+ }
716
+ }
717
+ }
718
+ }
719
+ '/v1/billing/subscription': {
713
720
  /**
714
721
  * Update subscription
715
722
  * @description Updates the subscription plan for the authenticated user
@@ -717,18 +724,18 @@ export interface paths {
717
724
  put: {
718
725
  requestBody: {
719
726
  content: {
720
- "application/json": components["schemas"]["UpdateSubscription"];
721
- };
722
- };
727
+ 'application/json': components['schemas']['UpdateSubscription']
728
+ }
729
+ }
723
730
  responses: {
724
731
  /** @description Subscription updated */
725
732
  200: {
726
- content: never;
727
- };
728
- };
729
- };
730
- };
731
- "/v1/chat/completions": {
733
+ content: never
734
+ }
735
+ }
736
+ }
737
+ }
738
+ '/v1/chat/completions': {
732
739
  /**
733
740
  * Create a chat completion
734
741
  * @description Creates a model response for the given chat conversation.
@@ -773,28 +780,28 @@ export interface paths {
773
780
  post: {
774
781
  requestBody: {
775
782
  content: {
776
- "application/json": components["schemas"]["ChatCompletionRequest"];
777
- };
778
- };
783
+ 'application/json': components['schemas']['ChatCompletionRequest']
784
+ }
785
+ }
779
786
  responses: {
780
787
  /** @description Successful completion */
781
788
  200: {
782
789
  content: {
783
- "application/json": components["schemas"]["ChatCompletionResponse"];
784
- };
785
- };
790
+ 'application/json': components['schemas']['ChatCompletionResponse']
791
+ }
792
+ }
786
793
  /** @description Invalid request */
787
794
  400: {
788
- content: never;
789
- };
795
+ content: never
796
+ }
790
797
  /** @description Unauthorized */
791
798
  401: {
792
- content: never;
793
- };
794
- };
795
- };
796
- };
797
- "/v1/clusters": {
799
+ content: never
800
+ }
801
+ }
802
+ }
803
+ }
804
+ '/v1/clusters': {
798
805
  /**
799
806
  * List all clusters
800
807
  * @description Retrieves a list of all Kubernetes clusters in the customer's namespace
@@ -804,21 +811,21 @@ export interface paths {
804
811
  /** @description List of clusters */
805
812
  200: {
806
813
  content: {
807
- "application/json": components["schemas"]["ClusterList"];
808
- };
809
- };
814
+ 'application/json': components['schemas']['ClusterList']
815
+ }
816
+ }
810
817
  /** @description Unauthorized */
811
818
  401: {
812
- content: never;
813
- };
819
+ content: never
820
+ }
814
821
  /** @description Server error */
815
822
  500: {
816
- content: never;
817
- };
818
- };
819
- };
820
- };
821
- "/v1/clusters/usage": {
823
+ content: never
824
+ }
825
+ }
826
+ }
827
+ }
828
+ '/v1/clusters/usage': {
822
829
  /**
823
830
  * Get cluster usage
824
831
  * @description Retrieves resource usage and cost data across all Kubernetes clusters for the current billing period
@@ -828,21 +835,21 @@ export interface paths {
828
835
  /** @description Cluster usage data */
829
836
  200: {
830
837
  content: {
831
- "application/json": components["schemas"]["ClustersUsageResponse"];
832
- };
833
- };
838
+ 'application/json': components['schemas']['ClustersUsageResponse']
839
+ }
840
+ }
834
841
  /** @description Unauthorized */
835
842
  401: {
836
- content: never;
837
- };
843
+ content: never
844
+ }
838
845
  /** @description Server error */
839
846
  500: {
840
- content: never;
841
- };
842
- };
843
- };
844
- };
845
- "/v1/clusters/{clusterId}/usage": {
847
+ content: never
848
+ }
849
+ }
850
+ }
851
+ }
852
+ '/v1/clusters/{clusterId}/usage': {
846
853
  /**
847
854
  * Get detailed usage for a specific cluster
848
855
  * @description Retrieves detailed resource usage and cost data for a specific Kubernetes cluster
@@ -851,32 +858,32 @@ export interface paths {
851
858
  parameters: {
852
859
  path: {
853
860
  /** @description The cluster identifier */
854
- clusterId: string;
855
- };
856
- };
861
+ clusterId: string
862
+ }
863
+ }
857
864
  responses: {
858
865
  /** @description Detailed cluster usage data */
859
866
  200: {
860
867
  content: {
861
- "application/json": components["schemas"]["ClusterDetailedUsage"];
862
- };
863
- };
868
+ 'application/json': components['schemas']['ClusterDetailedUsage']
869
+ }
870
+ }
864
871
  /** @description Unauthorized */
865
872
  401: {
866
- content: never;
867
- };
873
+ content: never
874
+ }
868
875
  /** @description Cluster not found */
869
876
  404: {
870
- content: never;
871
- };
877
+ content: never
878
+ }
872
879
  /** @description Server error */
873
880
  500: {
874
- content: never;
875
- };
876
- };
877
- };
878
- };
879
- "/v1/models": {
881
+ content: never
882
+ }
883
+ }
884
+ }
885
+ }
886
+ '/v1/models': {
880
887
  /**
881
888
  * List available models
882
889
  * @description Retrieves a list of all available AI models with their specifications, capabilities, and pricing information. Use this endpoint to discover which models are available for your chat completion API calls.
@@ -886,17 +893,17 @@ export interface paths {
886
893
  /** @description List of available models */
887
894
  200: {
888
895
  content: {
889
- "application/json": components["schemas"]["ModelList"];
890
- };
891
- };
896
+ 'application/json': components['schemas']['ModelList']
897
+ }
898
+ }
892
899
  /** @description Server error */
893
900
  500: {
894
- content: never;
895
- };
896
- };
897
- };
898
- };
899
- "/v1/models/{modelId}": {
901
+ content: never
902
+ }
903
+ }
904
+ }
905
+ }
906
+ '/v1/models/{modelId}': {
900
907
  /**
901
908
  * Retrieve model information
902
909
  * @description Get detailed information about a specific model
@@ -904,28 +911,28 @@ export interface paths {
904
911
  get: {
905
912
  parameters: {
906
913
  path: {
907
- modelId: string;
908
- };
909
- };
914
+ modelId: string
915
+ }
916
+ }
910
917
  responses: {
911
918
  /** @description Model details */
912
919
  200: {
913
920
  content: {
914
- "application/json": components["schemas"]["Model"];
915
- };
916
- };
921
+ 'application/json': components['schemas']['Model']
922
+ }
923
+ }
917
924
  /** @description Model not found */
918
925
  404: {
919
- content: never;
920
- };
926
+ content: never
927
+ }
921
928
  /** @description Server error */
922
929
  500: {
923
- content: never;
924
- };
925
- };
926
- };
927
- };
928
- "/v1/usage/tokens": {
930
+ content: never
931
+ }
932
+ }
933
+ }
934
+ }
935
+ '/v1/usage/tokens': {
929
936
  /**
930
937
  * Get token usage
931
938
  * @description Retrieves token usage data across all models for the current billing period. This helps you track your API usage and associated costs.
@@ -935,21 +942,21 @@ export interface paths {
935
942
  /** @description Token usage data */
936
943
  200: {
937
944
  content: {
938
- "application/json": components["schemas"]["TokenUsageResponse"];
939
- };
940
- };
945
+ 'application/json': components['schemas']['TokenUsageResponse']
946
+ }
947
+ }
941
948
  /** @description Unauthorized */
942
949
  401: {
943
- content: never;
944
- };
950
+ content: never
951
+ }
945
952
  /** @description Server error */
946
953
  500: {
947
- content: never;
948
- };
949
- };
950
- };
951
- };
952
- "/v1/usage/tokens/{modelId}": {
954
+ content: never
955
+ }
956
+ }
957
+ }
958
+ }
959
+ '/v1/usage/tokens/{modelId}': {
953
960
  /**
954
961
  * Get token usage for a specific model
955
962
  * @description Retrieves token usage data for a specific model in the current billing period
@@ -958,32 +965,32 @@ export interface paths {
958
965
  parameters: {
959
966
  path: {
960
967
  /** @description The model identifier */
961
- modelId: string;
962
- };
963
- };
968
+ modelId: string
969
+ }
970
+ }
964
971
  responses: {
965
972
  /** @description Model token usage data */
966
973
  200: {
967
974
  content: {
968
- "application/json": components["schemas"]["ModelTokenUsageResponse"];
969
- };
970
- };
975
+ 'application/json': components['schemas']['ModelTokenUsageResponse']
976
+ }
977
+ }
971
978
  /** @description Unauthorized */
972
979
  401: {
973
- content: never;
974
- };
980
+ content: never
981
+ }
975
982
  /** @description Model not found */
976
983
  404: {
977
- content: never;
978
- };
984
+ content: never
985
+ }
979
986
  /** @description Server error */
980
987
  500: {
981
- content: never;
982
- };
983
- };
984
- };
985
- };
986
- "/v1/users": {
988
+ content: never
989
+ }
990
+ }
991
+ }
992
+ }
993
+ '/v1/users': {
987
994
  /**
988
995
  * List team members
989
996
  * @description Retrieves a list of all users in your organization
@@ -993,25 +1000,25 @@ export interface paths {
993
1000
  /** @description List of team members */
994
1001
  200: {
995
1002
  content: {
996
- "application/json": components["schemas"]["UserProfile"][];
997
- };
998
- };
1003
+ 'application/json': components['schemas']['UserProfile'][]
1004
+ }
1005
+ }
999
1006
  /** @description Unauthorized */
1000
1007
  401: {
1001
1008
  content: {
1002
- "application/json": components["schemas"]["ErrorResponse"];
1003
- };
1004
- };
1009
+ 'application/json': components['schemas']['ErrorResponse']
1010
+ }
1011
+ }
1005
1012
  /** @description Server error */
1006
1013
  500: {
1007
1014
  content: {
1008
- "application/json": components["schemas"]["ErrorResponse"];
1009
- };
1010
- };
1011
- };
1012
- };
1013
- };
1014
- "/v1/users/me": {
1015
+ 'application/json': components['schemas']['ErrorResponse']
1016
+ }
1017
+ }
1018
+ }
1019
+ }
1020
+ }
1021
+ '/v1/users/me': {
1015
1022
  /**
1016
1023
  * Get current user profile
1017
1024
  * @description Retrieves the profile of the currently authenticated user
@@ -1021,19 +1028,19 @@ export interface paths {
1021
1028
  /** @description User profile */
1022
1029
  200: {
1023
1030
  content: {
1024
- "application/json": components["schemas"]["UserProfile"];
1025
- };
1026
- };
1031
+ 'application/json': components['schemas']['UserProfile']
1032
+ }
1033
+ }
1027
1034
  /** @description Unauthorized */
1028
1035
  401: {
1029
1036
  content: {
1030
- "application/json": components["schemas"]["ErrorResponse"];
1031
- };
1032
- };
1033
- };
1034
- };
1035
- };
1036
- "/v1/users/{id}": {
1037
+ 'application/json': components['schemas']['ErrorResponse']
1038
+ }
1039
+ }
1040
+ }
1041
+ }
1042
+ }
1043
+ '/v1/users/{id}': {
1037
1044
  /**
1038
1045
  * Get user details
1039
1046
  * @description Retrieves details for a specific user
@@ -1041,30 +1048,30 @@ export interface paths {
1041
1048
  get: {
1042
1049
  parameters: {
1043
1050
  path: {
1044
- id: string;
1045
- };
1046
- };
1051
+ id: string
1052
+ }
1053
+ }
1047
1054
  responses: {
1048
1055
  /** @description User details */
1049
1056
  200: {
1050
1057
  content: {
1051
- "application/json": components["schemas"]["UserProfile"];
1052
- };
1053
- };
1058
+ 'application/json': components['schemas']['UserProfile']
1059
+ }
1060
+ }
1054
1061
  /** @description Unauthorized */
1055
1062
  401: {
1056
1063
  content: {
1057
- "application/json": components["schemas"]["ErrorResponse"];
1058
- };
1059
- };
1064
+ 'application/json': components['schemas']['ErrorResponse']
1065
+ }
1066
+ }
1060
1067
  /** @description User not found */
1061
1068
  404: {
1062
1069
  content: {
1063
- "application/json": components["schemas"]["ErrorResponse"];
1064
- };
1065
- };
1066
- };
1067
- };
1070
+ 'application/json': components['schemas']['ErrorResponse']
1071
+ }
1072
+ }
1073
+ }
1074
+ }
1068
1075
  /**
1069
1076
  * Update user
1070
1077
  * @description Updates an existing user
@@ -1072,41 +1079,41 @@ export interface paths {
1072
1079
  put: {
1073
1080
  parameters: {
1074
1081
  path: {
1075
- id: string;
1076
- };
1077
- };
1082
+ id: string
1083
+ }
1084
+ }
1078
1085
  requestBody: {
1079
1086
  content: {
1080
- "application/json": components["schemas"]["UpdateUser"];
1081
- };
1082
- };
1087
+ 'application/json': components['schemas']['UpdateUser']
1088
+ }
1089
+ }
1083
1090
  responses: {
1084
1091
  /** @description User updated */
1085
1092
  200: {
1086
1093
  content: {
1087
- "application/json": components["schemas"]["UserProfile"];
1088
- };
1089
- };
1094
+ 'application/json': components['schemas']['UserProfile']
1095
+ }
1096
+ }
1090
1097
  /** @description Invalid request */
1091
1098
  400: {
1092
1099
  content: {
1093
- "application/json": components["schemas"]["ErrorResponse"];
1094
- };
1095
- };
1100
+ 'application/json': components['schemas']['ErrorResponse']
1101
+ }
1102
+ }
1096
1103
  /** @description Unauthorized */
1097
1104
  401: {
1098
1105
  content: {
1099
- "application/json": components["schemas"]["ErrorResponse"];
1100
- };
1101
- };
1106
+ 'application/json': components['schemas']['ErrorResponse']
1107
+ }
1108
+ }
1102
1109
  /** @description Forbidden */
1103
1110
  403: {
1104
1111
  content: {
1105
- "application/json": components["schemas"]["ErrorResponse"];
1106
- };
1107
- };
1108
- };
1109
- };
1112
+ 'application/json': components['schemas']['ErrorResponse']
1113
+ }
1114
+ }
1115
+ }
1116
+ }
1110
1117
  /**
1111
1118
  * Delete user
1112
1119
  * @description Deletes your own user account
@@ -1114,30 +1121,30 @@ export interface paths {
1114
1121
  delete: {
1115
1122
  parameters: {
1116
1123
  path: {
1117
- id: string;
1118
- };
1119
- };
1124
+ id: string
1125
+ }
1126
+ }
1120
1127
  responses: {
1121
1128
  /** @description User deleted */
1122
1129
  204: {
1123
- content: never;
1124
- };
1130
+ content: never
1131
+ }
1125
1132
  /** @description Unauthorized */
1126
1133
  401: {
1127
1134
  content: {
1128
- "application/json": components["schemas"]["ErrorResponse"];
1129
- };
1130
- };
1135
+ 'application/json': components['schemas']['ErrorResponse']
1136
+ }
1137
+ }
1131
1138
  /** @description Cannot delete other users */
1132
1139
  403: {
1133
1140
  content: {
1134
- "application/json": components["schemas"]["ErrorResponse"];
1135
- };
1136
- };
1137
- };
1138
- };
1139
- };
1140
- "/v1/users/invite": {
1141
+ 'application/json': components['schemas']['ErrorResponse']
1142
+ }
1143
+ }
1144
+ }
1145
+ }
1146
+ }
1147
+ '/v1/users/invite': {
1141
1148
  /**
1142
1149
  * Invite team member
1143
1150
  * @description Invites a new team member to join your organization. They will receive an email with instructions to set up their account.
@@ -1145,953 +1152,968 @@ export interface paths {
1145
1152
  post: {
1146
1153
  requestBody: {
1147
1154
  content: {
1148
- "application/json": components["schemas"]["InviteUser"];
1149
- };
1150
- };
1155
+ 'application/json': components['schemas']['InviteUser']
1156
+ }
1157
+ }
1151
1158
  responses: {
1152
1159
  /** @description Invitation sent successfully */
1153
1160
  200: {
1154
- content: never;
1155
- };
1161
+ content: never
1162
+ }
1156
1163
  /** @description Unauthorized */
1157
1164
  401: {
1158
- content: never;
1159
- };
1165
+ content: never
1166
+ }
1160
1167
  /** @description Forbidden - insufficient permissions */
1161
1168
  403: {
1162
- content: never;
1163
- };
1164
- };
1165
- };
1166
- };
1169
+ content: never
1170
+ }
1171
+ }
1172
+ }
1173
+ }
1167
1174
  }
1168
1175
 
1169
- export type webhooks = Record<string, never>;
1176
+ export type webhooks = Record<string, never>
1170
1177
 
1171
1178
  export interface components {
1172
1179
  schemas: {
1173
1180
  ApiKey: {
1174
1181
  /** @description Unique identifier for the API key */
1175
- id: number;
1182
+ id: number
1176
1183
  /** @description Name of the API key */
1177
- name: string;
1184
+ name: string
1178
1185
  /** @description Description of the API key */
1179
- description: string | null;
1186
+ description: string | null
1180
1187
  /** @description Whether the API key is active */
1181
- active: boolean;
1188
+ active: boolean
1182
1189
  /**
1183
1190
  * Format: date-time
1184
1191
  * @description Creation timestamp
1185
1192
  */
1186
- created: string;
1193
+ created: string
1187
1194
  /**
1188
1195
  * Format: date-time
1189
1196
  * @description Last modification timestamp
1190
1197
  */
1191
- modified: string;
1198
+ modified: string
1192
1199
  /**
1193
1200
  * Format: date-time
1194
1201
  * @description Last usage timestamp
1195
1202
  */
1196
- lastUsed: string | null;
1203
+ lastUsed: string | null
1197
1204
  /** @description API key prefix (for display purposes) */
1198
- prefix: string;
1199
- };
1205
+ prefix: string
1206
+ }
1200
1207
  ApiKeyResponse: {
1201
1208
  /** @description Unique identifier for the API key */
1202
- id: number;
1209
+ id: number
1203
1210
  /** @description Name of the API key */
1204
- name: string;
1211
+ name: string
1205
1212
  /** @description Description of the API key */
1206
- description: string | null;
1213
+ description: string | null
1207
1214
  /** @description Whether the API key is active */
1208
- active: boolean;
1215
+ active: boolean
1209
1216
  /**
1210
1217
  * Format: date-time
1211
1218
  * @description Creation timestamp
1212
1219
  */
1213
- created: string;
1220
+ created: string
1214
1221
  /**
1215
1222
  * Format: date-time
1216
1223
  * @description Last modification timestamp
1217
1224
  */
1218
- modified: string;
1225
+ modified: string
1219
1226
  /**
1220
1227
  * Format: date-time
1221
1228
  * @description Last usage timestamp
1222
1229
  */
1223
- lastUsed: string | null;
1230
+ lastUsed: string | null
1224
1231
  /** @description API key prefix (for display purposes) */
1225
- prefix: string;
1226
- };
1232
+ prefix: string
1233
+ }
1227
1234
  CreateApiKey: {
1228
1235
  /** @description Name of the API key */
1229
- name: string;
1236
+ name: string
1230
1237
  /** @description Description of the API key */
1231
- description?: string;
1232
- };
1238
+ description?: string
1239
+ }
1233
1240
  CreateApiKeyResponse: {
1234
1241
  /** @description Unique identifier for the API key */
1235
- id: number;
1242
+ id: number
1236
1243
  /** @description Name of the API key */
1237
- name: string;
1244
+ name: string
1238
1245
  /** @description Description of the API key */
1239
- description: string | null;
1246
+ description: string | null
1240
1247
  /** @description The API key - only returned once at creation */
1241
- key: string;
1248
+ key: string
1242
1249
  /**
1243
1250
  * Format: date-time
1244
1251
  * @description Creation timestamp
1245
1252
  */
1246
- created: string;
1247
- };
1253
+ created: string
1254
+ }
1248
1255
  ApiKeyUsageEntry: {
1249
1256
  /** @description Date in YYYY-MM-DD format */
1250
- date: string;
1257
+ date: string
1251
1258
  /** @description Number of requests on this date */
1252
- count: number;
1253
- };
1259
+ count: number
1260
+ }
1254
1261
  ApiKeyModelUsage: {
1255
1262
  /** @description Model identifier */
1256
- id: string;
1263
+ id: string
1257
1264
  /** @description Model display name */
1258
- name: string;
1265
+ name: string
1259
1266
  /** @description Total number of requests to this model */
1260
- requests: number;
1267
+ requests: number
1261
1268
  /** @description Token usage statistics */
1262
1269
  tokens: {
1263
1270
  /** @description Total input tokens */
1264
- input: number;
1271
+ input: number
1265
1272
  /** @description Total output tokens */
1266
- output: number;
1273
+ output: number
1267
1274
  /** @description Total tokens (input + output) */
1268
- total: number;
1269
- };
1270
- };
1275
+ total: number
1276
+ }
1277
+ }
1271
1278
  ApiKeyUsageResponse: {
1272
1279
  /** @description API key ID */
1273
- id: number;
1280
+ id: number
1274
1281
  /** @description API key name */
1275
- name: string;
1282
+ name: string
1276
1283
  /** @description Request statistics */
1277
1284
  requests: {
1278
1285
  /** @description Total number of requests */
1279
- total: number;
1286
+ total: number
1280
1287
  /** @description Daily request counts */
1281
- daily: components["schemas"]["ApiKeyUsageEntry"][];
1282
- };
1288
+ daily: components['schemas']['ApiKeyUsageEntry'][]
1289
+ }
1283
1290
  /** @description Usage statistics per model */
1284
- models: components["schemas"]["ApiKeyModelUsage"][];
1291
+ models: components['schemas']['ApiKeyModelUsage'][]
1285
1292
  /** @description Time period for the usage data */
1286
1293
  period: {
1287
1294
  /** @description Start date of the period (YYYY-MM-DD) */
1288
- start: string;
1295
+ start: string
1289
1296
  /** @description End date of the period (YYYY-MM-DD) */
1290
- end: string;
1291
- };
1292
- };
1293
- ApiKeyListResponse: components["schemas"]["ApiKey"][];
1297
+ end: string
1298
+ }
1299
+ }
1300
+ ApiKeyListResponse: components['schemas']['ApiKey'][]
1294
1301
  AppTemplate: {
1295
1302
  /** @description Unique identifier for the app */
1296
- id: string;
1303
+ id: string
1297
1304
  /** @description Display name of the app */
1298
- name: string;
1305
+ name: string
1299
1306
  /** @description Category the app belongs to */
1300
- category: string;
1307
+ category: string
1301
1308
  /** @description Short description of the app */
1302
- description: string;
1309
+ description: string
1303
1310
  /** @description Number of installations */
1304
- installs: string;
1311
+ installs: string
1305
1312
  /** @description User rating */
1306
- rating: number;
1313
+ rating: number
1307
1314
  /** @description Icon identifier */
1308
- icon: string;
1315
+ icon: string
1309
1316
  /** @description List of key features */
1310
- features: string[];
1317
+ features: string[]
1311
1318
  /** @description Resource requirements */
1312
1319
  requirements: {
1313
1320
  /** @description Required CPU cores */
1314
- cpu: number;
1321
+ cpu: number
1315
1322
  /** @description Required memory in GB */
1316
- memory: number;
1323
+ memory: number
1317
1324
  /** @description Required storage in GB */
1318
- storage: number;
1319
- };
1325
+ storage: number
1326
+ }
1320
1327
  /** @description Configuration options */
1321
- configuration: OneOf<[{
1322
- /** @description Configuration field name */
1323
- name: string;
1324
- /**
1325
- * @description String input type
1326
- * @enum {string}
1327
- */
1328
- type: "string";
1329
- /** @description Whether this field is required */
1330
- required: boolean;
1331
- /** @description Default value if any */
1332
- default?: string;
1333
- }, {
1334
- /** @description Configuration field name */
1335
- name: string;
1336
- /**
1337
- * @description Number input type
1338
- * @enum {string}
1339
- */
1340
- type: "number";
1341
- /** @description Whether this field is required */
1342
- required: boolean;
1343
- /** @description Default value if any */
1344
- default?: number;
1345
- }, {
1346
- /** @description Configuration field name */
1347
- name: string;
1348
- /**
1349
- * @description Boolean toggle type
1350
- * @enum {string}
1351
- */
1352
- type: "boolean";
1353
- /** @description Whether this field is required */
1354
- required: boolean;
1355
- /** @description Default value if any */
1356
- default?: boolean;
1357
- }, {
1358
- /** @description Configuration field name */
1359
- name: string;
1360
- /**
1361
- * @description Dropdown select type
1362
- * @enum {string}
1363
- */
1364
- type: "select";
1365
- /** @description Whether this field is required */
1366
- required: boolean;
1367
- /** @description Default selected option */
1368
- default?: string;
1369
- /** @description Available options to select from */
1370
- options: string[];
1371
- }, {
1372
- /** @description Configuration field name */
1373
- name: string;
1374
- /**
1375
- * @description Password input type
1376
- * @enum {string}
1377
- */
1378
- type: "password";
1379
- /** @description Whether this field is required */
1380
- required: boolean;
1381
- /** @description Default value if any */
1382
- default?: string;
1383
- }]>[];
1328
+ configuration: OneOf<
1329
+ [
1330
+ {
1331
+ /** @description Configuration field name */
1332
+ name: string
1333
+ /**
1334
+ * @description String input type
1335
+ * @enum {string}
1336
+ */
1337
+ type: 'string'
1338
+ /** @description Whether this field is required */
1339
+ required: boolean
1340
+ /** @description Default value if any */
1341
+ default?: string
1342
+ },
1343
+ {
1344
+ /** @description Configuration field name */
1345
+ name: string
1346
+ /**
1347
+ * @description Number input type
1348
+ * @enum {string}
1349
+ */
1350
+ type: 'number'
1351
+ /** @description Whether this field is required */
1352
+ required: boolean
1353
+ /** @description Default value if any */
1354
+ default?: number
1355
+ },
1356
+ {
1357
+ /** @description Configuration field name */
1358
+ name: string
1359
+ /**
1360
+ * @description Boolean toggle type
1361
+ * @enum {string}
1362
+ */
1363
+ type: 'boolean'
1364
+ /** @description Whether this field is required */
1365
+ required: boolean
1366
+ /** @description Default value if any */
1367
+ default?: boolean
1368
+ },
1369
+ {
1370
+ /** @description Configuration field name */
1371
+ name: string
1372
+ /**
1373
+ * @description Dropdown select type
1374
+ * @enum {string}
1375
+ */
1376
+ type: 'select'
1377
+ /** @description Whether this field is required */
1378
+ required: boolean
1379
+ /** @description Default selected option */
1380
+ default?: string
1381
+ /** @description Available options to select from */
1382
+ options: string[]
1383
+ },
1384
+ {
1385
+ /** @description Configuration field name */
1386
+ name: string
1387
+ /**
1388
+ * @description Password input type
1389
+ * @enum {string}
1390
+ */
1391
+ type: 'password'
1392
+ /** @description Whether this field is required */
1393
+ required: boolean
1394
+ /** @description Default value if any */
1395
+ default?: string
1396
+ },
1397
+ ]
1398
+ >[]
1384
1399
  /** @description Ingress configuration if applicable */
1385
1400
  ingress?: {
1386
1401
  /** @description Whether ingress is enabled for this app */
1387
- enabled: boolean;
1402
+ enabled: boolean
1388
1403
  /** @description Hostname pattern for the ingress */
1389
- hostname: string;
1404
+ hostname: string
1390
1405
  /** @description Path for the ingress */
1391
- path: string;
1406
+ path: string
1392
1407
  /** @description Whether TLS is enabled */
1393
- tls: boolean;
1394
- };
1395
- };
1408
+ tls: boolean
1409
+ }
1410
+ }
1396
1411
  AppTemplateList: {
1397
1412
  data: {
1398
- /** @description Unique identifier for the app */
1399
- id: string;
1400
- /** @description Display name of the app */
1401
- name: string;
1402
- /** @description Category the app belongs to */
1403
- category: string;
1404
- /** @description Short description of the app */
1405
- description: string;
1406
- /** @description Number of installations */
1407
- installs: string;
1408
- /** @description User rating */
1409
- rating: number;
1410
- /** @description Icon identifier */
1411
- icon: string;
1412
- /** @description List of key features */
1413
- features: string[];
1414
- /** @description Resource requirements */
1415
- requirements: {
1416
- /** @description Required CPU cores */
1417
- cpu: number;
1418
- /** @description Required memory in GB */
1419
- memory: number;
1420
- /** @description Required storage in GB */
1421
- storage: number;
1422
- };
1423
- /** @description Configuration options */
1424
- configuration: OneOf<[{
1413
+ /** @description Unique identifier for the app */
1414
+ id: string
1415
+ /** @description Display name of the app */
1416
+ name: string
1417
+ /** @description Category the app belongs to */
1418
+ category: string
1419
+ /** @description Short description of the app */
1420
+ description: string
1421
+ /** @description Number of installations */
1422
+ installs: string
1423
+ /** @description User rating */
1424
+ rating: number
1425
+ /** @description Icon identifier */
1426
+ icon: string
1427
+ /** @description List of key features */
1428
+ features: string[]
1429
+ /** @description Resource requirements */
1430
+ requirements: {
1431
+ /** @description Required CPU cores */
1432
+ cpu: number
1433
+ /** @description Required memory in GB */
1434
+ memory: number
1435
+ /** @description Required storage in GB */
1436
+ storage: number
1437
+ }
1438
+ /** @description Configuration options */
1439
+ configuration: OneOf<
1440
+ [
1441
+ {
1425
1442
  /** @description Configuration field name */
1426
- name: string;
1443
+ name: string
1427
1444
  /**
1428
1445
  * @description String input type
1429
1446
  * @enum {string}
1430
1447
  */
1431
- type: "string";
1448
+ type: 'string'
1432
1449
  /** @description Whether this field is required */
1433
- required: boolean;
1450
+ required: boolean
1434
1451
  /** @description Default value if any */
1435
- default?: string;
1436
- }, {
1452
+ default?: string
1453
+ },
1454
+ {
1437
1455
  /** @description Configuration field name */
1438
- name: string;
1456
+ name: string
1439
1457
  /**
1440
1458
  * @description Number input type
1441
1459
  * @enum {string}
1442
1460
  */
1443
- type: "number";
1461
+ type: 'number'
1444
1462
  /** @description Whether this field is required */
1445
- required: boolean;
1463
+ required: boolean
1446
1464
  /** @description Default value if any */
1447
- default?: number;
1448
- }, {
1465
+ default?: number
1466
+ },
1467
+ {
1449
1468
  /** @description Configuration field name */
1450
- name: string;
1469
+ name: string
1451
1470
  /**
1452
1471
  * @description Boolean toggle type
1453
1472
  * @enum {string}
1454
1473
  */
1455
- type: "boolean";
1474
+ type: 'boolean'
1456
1475
  /** @description Whether this field is required */
1457
- required: boolean;
1476
+ required: boolean
1458
1477
  /** @description Default value if any */
1459
- default?: boolean;
1460
- }, {
1478
+ default?: boolean
1479
+ },
1480
+ {
1461
1481
  /** @description Configuration field name */
1462
- name: string;
1482
+ name: string
1463
1483
  /**
1464
1484
  * @description Dropdown select type
1465
1485
  * @enum {string}
1466
1486
  */
1467
- type: "select";
1487
+ type: 'select'
1468
1488
  /** @description Whether this field is required */
1469
- required: boolean;
1489
+ required: boolean
1470
1490
  /** @description Default selected option */
1471
- default?: string;
1491
+ default?: string
1472
1492
  /** @description Available options to select from */
1473
- options: string[];
1474
- }, {
1493
+ options: string[]
1494
+ },
1495
+ {
1475
1496
  /** @description Configuration field name */
1476
- name: string;
1497
+ name: string
1477
1498
  /**
1478
1499
  * @description Password input type
1479
1500
  * @enum {string}
1480
1501
  */
1481
- type: "password";
1502
+ type: 'password'
1482
1503
  /** @description Whether this field is required */
1483
- required: boolean;
1504
+ required: boolean
1484
1505
  /** @description Default value if any */
1485
- default?: string;
1486
- }]>[];
1487
- /** @description Ingress configuration if applicable */
1488
- ingress?: {
1489
- /** @description Whether ingress is enabled for this app */
1490
- enabled: boolean;
1491
- /** @description Hostname pattern for the ingress */
1492
- hostname: string;
1493
- /** @description Path for the ingress */
1494
- path: string;
1495
- /** @description Whether TLS is enabled */
1496
- tls: boolean;
1497
- };
1498
- }[];
1506
+ default?: string
1507
+ },
1508
+ ]
1509
+ >[]
1510
+ /** @description Ingress configuration if applicable */
1511
+ ingress?: {
1512
+ /** @description Whether ingress is enabled for this app */
1513
+ enabled: boolean
1514
+ /** @description Hostname pattern for the ingress */
1515
+ hostname: string
1516
+ /** @description Path for the ingress */
1517
+ path: string
1518
+ /** @description Whether TLS is enabled */
1519
+ tls: boolean
1520
+ }
1521
+ }[]
1499
1522
  /** @enum {string} */
1500
- object: "list";
1501
- };
1523
+ object: 'list'
1524
+ }
1502
1525
  AppInstallRequest: {
1503
1526
  /** @description ID of the app to install */
1504
- appId: string;
1527
+ appId: string
1505
1528
  /** @description Kubernetes namespace to install into */
1506
- namespace: string;
1529
+ namespace: string
1507
1530
  /** @description Configuration values */
1508
1531
  configuration: {
1509
- [key: string]: string | number | boolean;
1510
- };
1511
- };
1532
+ [key: string]: string | number | boolean
1533
+ }
1534
+ }
1512
1535
  AppInstallation: {
1513
1536
  /** @description Installation ID */
1514
- id: string;
1537
+ id: string
1515
1538
  /** @description App template ID */
1516
- appId: string;
1539
+ appId: string
1517
1540
  /** @description App name */
1518
- name: string;
1541
+ name: string
1519
1542
  /** @description Kubernetes namespace */
1520
- namespace: string;
1543
+ namespace: string
1521
1544
  /**
1522
1545
  * @description Installation status
1523
1546
  * @enum {string}
1524
1547
  */
1525
- status: "pending" | "installing" | "running" | "failed";
1548
+ status: 'pending' | 'installing' | 'running' | 'failed'
1526
1549
  /** @description Creation timestamp */
1527
- created: string;
1550
+ created: string
1528
1551
  /** @description Status message or error */
1529
- message?: string;
1552
+ message?: string
1530
1553
  /** @description Access URL if available */
1531
- url?: string;
1554
+ url?: string
1532
1555
  /** @description Applied configuration */
1533
1556
  configuration: {
1534
- [key: string]: string | number | boolean;
1535
- };
1536
- };
1557
+ [key: string]: string | number | boolean
1558
+ }
1559
+ }
1537
1560
  AppInstallationList: {
1538
- data: ({
1539
- /** @description Installation ID */
1540
- id: string;
1541
- /** @description App template ID */
1542
- appId: string;
1543
- /** @description App name */
1544
- name: string;
1545
- /** @description Kubernetes namespace */
1546
- namespace: string;
1547
- /**
1548
- * @description Installation status
1549
- * @enum {string}
1550
- */
1551
- status: "pending" | "installing" | "running" | "failed";
1552
- /** @description Creation timestamp */
1553
- created: string;
1554
- /** @description Status message or error */
1555
- message?: string;
1556
- /** @description Access URL if available */
1557
- url?: string;
1558
- /** @description Applied configuration */
1559
- configuration: {
1560
- [key: string]: string | number | boolean;
1561
- };
1562
- })[];
1561
+ data: {
1562
+ /** @description Installation ID */
1563
+ id: string
1564
+ /** @description App template ID */
1565
+ appId: string
1566
+ /** @description App name */
1567
+ name: string
1568
+ /** @description Kubernetes namespace */
1569
+ namespace: string
1570
+ /**
1571
+ * @description Installation status
1572
+ * @enum {string}
1573
+ */
1574
+ status: 'pending' | 'installing' | 'running' | 'failed'
1575
+ /** @description Creation timestamp */
1576
+ created: string
1577
+ /** @description Status message or error */
1578
+ message?: string
1579
+ /** @description Access URL if available */
1580
+ url?: string
1581
+ /** @description Applied configuration */
1582
+ configuration: {
1583
+ [key: string]: string | number | boolean
1584
+ }
1585
+ }[]
1563
1586
  /** @enum {string} */
1564
- object: "list";
1565
- };
1587
+ object: 'list'
1588
+ }
1566
1589
  AuthToken: {
1567
- accessToken: string;
1568
- expiresIn: number;
1590
+ accessToken: string
1591
+ expiresIn: number
1569
1592
  user?: {
1570
- id: string;
1571
- name: string;
1593
+ id: string
1594
+ name: string
1572
1595
  /** Format: email */
1573
- email: string;
1574
- };
1575
- };
1596
+ email: string
1597
+ }
1598
+ }
1576
1599
  User: {
1577
- id: string;
1578
- login: string;
1579
- name: string | null;
1600
+ id: string
1601
+ login: string
1602
+ name: string | null
1580
1603
  /** Format: email */
1581
- email: string | null;
1604
+ email: string | null
1582
1605
  /** Format: uri */
1583
- avatarUrl: string;
1584
- };
1606
+ avatarUrl: string
1607
+ }
1585
1608
  RefreshTokenRequest: {
1586
1609
  /** @description The refresh token to use */
1587
- refresh_token: string;
1610
+ refresh_token: string
1588
1611
  /** @description Whether this is a device token */
1589
- is_device_token?: boolean;
1590
- };
1612
+ is_device_token?: boolean
1613
+ }
1591
1614
  RefreshTokenResponse: {
1592
1615
  /** @description The new access token */
1593
- token: string;
1616
+ token: string
1594
1617
  /** @description The new refresh token */
1595
- refresh_token: string;
1618
+ refresh_token: string
1596
1619
  /** @description Seconds until the access token expires */
1597
- expires_in: number;
1620
+ expires_in: number
1598
1621
  /** @description Seconds until the refresh token expires */
1599
- refresh_expires_in: number;
1600
- };
1622
+ refresh_expires_in: number
1623
+ }
1601
1624
  DeviceAuthRequest: {
1602
1625
  /** @description The device code obtained from the device authorization request */
1603
- device_code: string;
1604
- };
1626
+ device_code: string
1627
+ }
1605
1628
  DeviceAuthInitResponse: {
1606
1629
  /** @description Code used by the device to poll for authentication status */
1607
- device_code: string;
1630
+ device_code: string
1608
1631
  /** @description Code displayed to the user for authentication */
1609
- user_code: string;
1632
+ user_code: string
1610
1633
  /** @description URL where the user should enter the user_code */
1611
- verification_url: string;
1634
+ verification_url: string
1612
1635
  /** @description Expiration time in seconds */
1613
- expires_in: number;
1636
+ expires_in: number
1614
1637
  /** @description Polling interval in seconds */
1615
- interval: number;
1616
- };
1638
+ interval: number
1639
+ }
1617
1640
  DeviceAuthPendingResponse: {
1618
1641
  /**
1619
1642
  * @description Authentication is still pending
1620
1643
  * @enum {string}
1621
1644
  */
1622
- status: "pending";
1623
- };
1645
+ status: 'pending'
1646
+ }
1624
1647
  DeviceAuthTokenResponse: {
1625
1648
  /** @description Access token */
1626
- token: string;
1649
+ token: string
1627
1650
  /** @description Refresh token */
1628
- refresh_token: string;
1651
+ refresh_token: string
1629
1652
  /** @description Access token expiration time in seconds */
1630
- expires_in: number;
1653
+ expires_in: number
1631
1654
  /** @description Refresh token expiration time in seconds */
1632
- refresh_expires_in: number;
1633
- };
1655
+ refresh_expires_in: number
1656
+ }
1634
1657
  Usage: {
1635
1658
  current_period: {
1636
1659
  /** Format: date-time */
1637
- start_date: string;
1660
+ start_date: string
1638
1661
  /** Format: date-time */
1639
- end_date: string;
1640
- };
1662
+ end_date: string
1663
+ }
1641
1664
  metrics: {
1642
- name: string;
1643
- value: number;
1644
- unit: string;
1645
- cost: number;
1646
- currency: string;
1647
- }[];
1665
+ name: string
1666
+ value: number
1667
+ unit: string
1668
+ cost: number
1669
+ currency: string
1670
+ }[]
1648
1671
  total: {
1649
- amount: number;
1650
- currency: string;
1651
- };
1652
- };
1672
+ amount: number
1673
+ currency: string
1674
+ }
1675
+ }
1653
1676
  Invoice: {
1654
- id: string;
1655
- number: string;
1677
+ id: string
1678
+ number: string
1656
1679
  /** Format: date-time */
1657
- issuingDate: string;
1680
+ issuingDate: string
1658
1681
  /** @enum {string} */
1659
- paymentStatus: "pending" | "succeeded" | "failed";
1660
- amount: number;
1661
- currency: string;
1662
- customerId: string;
1682
+ paymentStatus: 'pending' | 'succeeded' | 'failed'
1683
+ amount: number
1684
+ currency: string
1685
+ customerId: string
1663
1686
  customer: {
1664
- id: string;
1665
- name: string;
1687
+ id: string
1688
+ name: string
1666
1689
  /** Format: email */
1667
- email: string;
1690
+ email: string
1668
1691
  /** Format: date-time */
1669
- createdAt: string;
1670
- };
1671
- };
1692
+ createdAt: string
1693
+ }
1694
+ }
1672
1695
  PaymentMethod: {
1673
- id: string;
1696
+ id: string
1674
1697
  /** @enum {string} */
1675
- type: "card" | "sepa";
1676
- last4: string;
1677
- expMonth?: number;
1678
- expYear?: number;
1679
- brand?: string;
1680
- isDefault: boolean;
1681
- };
1698
+ type: 'card' | 'sepa'
1699
+ last4: string
1700
+ expMonth?: number
1701
+ expYear?: number
1702
+ brand?: string
1703
+ isDefault: boolean
1704
+ }
1682
1705
  CreatePaymentMethod: {
1683
1706
  /** @enum {string} */
1684
- type: "card" | "sepa";
1685
- token: string;
1686
- setDefault?: boolean;
1687
- };
1707
+ type: 'card' | 'sepa'
1708
+ token: string
1709
+ setDefault?: boolean
1710
+ }
1688
1711
  UpdateSubscription: {
1689
- planId: string;
1690
- quantity?: number;
1691
- };
1712
+ planId: string
1713
+ quantity?: number
1714
+ }
1692
1715
  ChatMessage: {
1693
1716
  /**
1694
1717
  * @default user
1695
1718
  * @enum {string}
1696
1719
  */
1697
- role?: "system" | "user" | "assistant";
1698
- content: string;
1699
- };
1720
+ role?: 'system' | 'user' | 'assistant'
1721
+ content: string
1722
+ }
1700
1723
  ChatCompletionRequest: {
1701
- model: string;
1702
- messages: components["schemas"]["ChatMessage"][];
1703
- temperature?: number;
1724
+ model: string
1725
+ messages: components['schemas']['ChatMessage'][]
1726
+ temperature?: number
1704
1727
  /** @default 4096 */
1705
- max_tokens?: number;
1728
+ max_tokens?: number
1706
1729
  /** @default false */
1707
- stream?: boolean;
1730
+ stream?: boolean
1708
1731
  /** @default 1 */
1709
- top_p?: number;
1710
- };
1732
+ top_p?: number
1733
+ }
1711
1734
  ChatCompletionResponse: {
1712
1735
  /** @description Unique identifier for this completion */
1713
- id: string;
1736
+ id: string
1714
1737
  /** @enum {string} */
1715
- object: "chat.completion";
1738
+ object: 'chat.completion'
1716
1739
  /** @description Unix timestamp of when the completion was created */
1717
- created: number;
1740
+ created: number
1718
1741
  /** @description The model used for completion */
1719
- model: string;
1720
- choices: ({
1721
- message: {
1722
- /** @enum {string} */
1723
- role: "assistant";
1724
- /** @description The model's response */
1725
- content: string;
1726
- };
1742
+ model: string
1743
+ choices: {
1744
+ message: {
1727
1745
  /** @enum {string} */
1728
- finish_reason: "stop" | "length" | "content_filter";
1729
- index: number;
1730
- })[];
1746
+ role: 'assistant'
1747
+ /** @description The model's response */
1748
+ content: string
1749
+ }
1750
+ /** @enum {string} */
1751
+ finish_reason: 'stop' | 'length' | 'content_filter'
1752
+ index: number
1753
+ }[]
1731
1754
  usage: {
1732
- prompt_tokens: number;
1733
- completion_tokens: number;
1734
- total_tokens: number;
1735
- };
1736
- };
1755
+ prompt_tokens: number
1756
+ completion_tokens: number
1757
+ total_tokens: number
1758
+ }
1759
+ }
1737
1760
  Cluster: {
1738
1761
  /** @description Unique identifier for the cluster */
1739
- id: string;
1762
+ id: string
1740
1763
  /** @description Display name of the cluster */
1741
- name: string;
1764
+ name: string
1742
1765
  /** @description Cloud provider (AWS, GCP, Azure, etc.) */
1743
- provider: string;
1766
+ provider: string
1744
1767
  /** @description Cloud region where the cluster is deployed */
1745
- region: string;
1768
+ region: string
1746
1769
  /** @description Kubernetes version */
1747
- version: string;
1770
+ version: string
1748
1771
  /** @description Number of nodes in the cluster */
1749
- nodes: number;
1772
+ nodes: number
1750
1773
  /**
1751
1774
  * @description Current status of the cluster
1752
1775
  * @enum {string}
1753
1776
  */
1754
- status: "healthy" | "degraded" | "unhealthy" | "unknown";
1777
+ status: 'healthy' | 'degraded' | 'unhealthy' | 'unknown'
1755
1778
  /**
1756
1779
  * Format: date-time
1757
1780
  * @description Creation timestamp
1758
1781
  */
1759
- created: string;
1760
- };
1782
+ created: string
1783
+ }
1761
1784
  ClusterList: {
1762
- data: components["schemas"]["Cluster"][];
1785
+ data: components['schemas']['Cluster'][]
1763
1786
  /** @enum {string} */
1764
- object: "list";
1765
- };
1787
+ object: 'list'
1788
+ }
1766
1789
  ResourceMetric: {
1767
1790
  /** @description Total allocated resources */
1768
- allocated: number;
1791
+ allocated: number
1769
1792
  /** @description Currently used resources */
1770
- used: number;
1793
+ used: number
1771
1794
  /** @description Available resources */
1772
- available: number;
1795
+ available: number
1773
1796
  /** @description Unit of measurement (e.g., cores, GB) */
1774
- unit: string;
1775
- };
1797
+ unit: string
1798
+ }
1776
1799
  /** @description Cost breakdown */
1777
1800
  ClusterCost: {
1778
1801
  /** @description Cost for CPU resources */
1779
- cpu: number;
1802
+ cpu: number
1780
1803
  /** @description Cost for memory resources */
1781
- memory: number;
1804
+ memory: number
1782
1805
  /** @description Cost for storage resources */
1783
- storage: number;
1806
+ storage: number
1784
1807
  /** @description Cost for network resources */
1785
- network: number;
1808
+ network: number
1786
1809
  /** @description Total cost */
1787
- total: number;
1810
+ total: number
1788
1811
  /** @description Currency code (e.g., USD, EUR) */
1789
- currency: string;
1790
- };
1812
+ currency: string
1813
+ }
1791
1814
  ClusterUsage: {
1792
1815
  /** @description Unique cluster identifier */
1793
- id: string;
1816
+ id: string
1794
1817
  /** @description Cluster name */
1795
- name: string;
1818
+ name: string
1796
1819
  /** @description Resource usage metrics */
1797
1820
  resources: {
1798
- cpu: components["schemas"]["ResourceMetric"];
1799
- memory: components["schemas"]["ResourceMetric"];
1800
- storage: components["schemas"]["ResourceMetric"];
1801
- };
1802
- cost: components["schemas"]["ClusterCost"];
1821
+ cpu: components['schemas']['ResourceMetric']
1822
+ memory: components['schemas']['ResourceMetric']
1823
+ storage: components['schemas']['ResourceMetric']
1824
+ }
1825
+ cost: components['schemas']['ClusterCost']
1803
1826
  /** @description Number of nodes in the cluster */
1804
- nodes: number;
1827
+ nodes: number
1805
1828
  /** @description Current cluster status */
1806
- status: string;
1807
- };
1808
- ResourceMetricWithTrend: components["schemas"]["ResourceMetric"] & {
1829
+ status: string
1830
+ }
1831
+ ResourceMetricWithTrend: components['schemas']['ResourceMetric'] & {
1809
1832
  /** @description Historical usage trend data */
1810
1833
  usage_trend: {
1811
- /** @description Date in YYYY-MM-DD format */
1812
- date: string;
1813
- /** @description Resource usage value for this date */
1814
- value: number;
1815
- }[];
1816
- };
1834
+ /** @description Date in YYYY-MM-DD format */
1835
+ date: string
1836
+ /** @description Resource usage value for this date */
1837
+ value: number
1838
+ }[]
1839
+ }
1817
1840
  DailyCost: {
1818
1841
  /** @description Date in YYYY-MM-DD format */
1819
- date: string;
1842
+ date: string
1820
1843
  /** @description CPU cost for this day */
1821
- cpu: number;
1844
+ cpu: number
1822
1845
  /** @description Memory cost for this day */
1823
- memory: number;
1846
+ memory: number
1824
1847
  /** @description Storage cost for this day */
1825
- storage: number;
1848
+ storage: number
1826
1849
  /** @description Network cost for this day */
1827
- network: number;
1850
+ network: number
1828
1851
  /** @description Total cost for this day */
1829
- total: number;
1830
- };
1852
+ total: number
1853
+ }
1831
1854
  /** @description Detailed cost breakdown with daily data */
1832
- ClusterCostWithDaily: components["schemas"]["ClusterCost"] & {
1855
+ ClusterCostWithDaily: components['schemas']['ClusterCost'] & {
1833
1856
  /** @description Daily cost breakdown */
1834
- daily: components["schemas"]["DailyCost"][];
1835
- };
1857
+ daily: components['schemas']['DailyCost'][]
1858
+ }
1836
1859
  ClusterDetailedUsage: {
1837
1860
  /** @description Unique cluster identifier */
1838
- id: string;
1861
+ id: string
1839
1862
  /** @description Cluster name */
1840
- name: string;
1863
+ name: string
1841
1864
  /** @description Detailed resource usage metrics with trends */
1842
1865
  resources: {
1843
- cpu: components["schemas"]["ResourceMetricWithTrend"];
1844
- memory: components["schemas"]["ResourceMetricWithTrend"];
1845
- storage: components["schemas"]["ResourceMetricWithTrend"];
1846
- };
1847
- cost: components["schemas"]["ClusterCostWithDaily"];
1866
+ cpu: components['schemas']['ResourceMetricWithTrend']
1867
+ memory: components['schemas']['ResourceMetricWithTrend']
1868
+ storage: components['schemas']['ResourceMetricWithTrend']
1869
+ }
1870
+ cost: components['schemas']['ClusterCostWithDaily']
1848
1871
  /** @description Number of nodes in the cluster */
1849
- nodes: number;
1872
+ nodes: number
1850
1873
  /** @description Current cluster status */
1851
- status: string;
1874
+ status: string
1852
1875
  /** @description Time period for the usage data */
1853
1876
  period: {
1854
1877
  /** @description Start date of the period (YYYY-MM-DD) */
1855
- start: string;
1878
+ start: string
1856
1879
  /** @description End date of the period (YYYY-MM-DD) */
1857
- end: string;
1858
- };
1859
- };
1880
+ end: string
1881
+ }
1882
+ }
1860
1883
  ClustersUsageResponse: {
1861
1884
  /** @description List of clusters with usage data */
1862
- clusters: components["schemas"]["ClusterUsage"][];
1885
+ clusters: components['schemas']['ClusterUsage'][]
1863
1886
  /** @description Time period for the usage data */
1864
1887
  period: {
1865
1888
  /** @description Start date of the period (YYYY-MM-DD) */
1866
- start: string;
1889
+ start: string
1867
1890
  /** @description End date of the period (YYYY-MM-DD) */
1868
- end: string;
1869
- };
1891
+ end: string
1892
+ }
1870
1893
  /** @description Aggregated totals */
1871
1894
  total: {
1872
1895
  /** @description Total cost breakdown across all clusters */
1873
1896
  cost: {
1874
1897
  /** @description Total CPU cost across all clusters */
1875
- cpu: number;
1898
+ cpu: number
1876
1899
  /** @description Total memory cost across all clusters */
1877
- memory: number;
1900
+ memory: number
1878
1901
  /** @description Total storage cost across all clusters */
1879
- storage: number;
1902
+ storage: number
1880
1903
  /** @description Total network cost across all clusters */
1881
- network: number;
1904
+ network: number
1882
1905
  /** @description Total cost across all clusters */
1883
- total: number;
1906
+ total: number
1884
1907
  /** @description Currency code (e.g., USD, EUR) */
1885
- currency: string;
1886
- };
1887
- };
1888
- };
1908
+ currency: string
1909
+ }
1910
+ }
1911
+ }
1889
1912
  Model: {
1890
1913
  /** @description Unique identifier for the model */
1891
- id: string;
1914
+ id: string
1892
1915
  /** @description Name of the model */
1893
- name: string;
1916
+ name: string
1894
1917
  /** @description Description of the model */
1895
- description: string;
1918
+ description: string
1896
1919
  /** @description Whether the model is active */
1897
- active: boolean;
1898
- };
1899
- ModelList: components["schemas"]["Model"][];
1920
+ active: boolean
1921
+ }
1922
+ ModelList: components['schemas']['Model'][]
1900
1923
  /** @description Cost information for this usage */
1901
1924
  TokenCost: {
1902
1925
  /** @description Cost amount */
1903
- amount: number;
1926
+ amount: number
1904
1927
  /** @description Currency code (e.g., USD, EUR) */
1905
- currency: string;
1906
- };
1928
+ currency: string
1929
+ }
1907
1930
  DailyTokenUsage: {
1908
1931
  /** @description Usage date in YYYY-MM-DD format */
1909
- date: string;
1932
+ date: string
1910
1933
  /** @description Model identifier */
1911
- model?: string;
1934
+ model?: string
1912
1935
  /** @description Number of input tokens used */
1913
- input_tokens: number;
1936
+ input_tokens: number
1914
1937
  /** @description Number of output tokens generated */
1915
- output_tokens: number;
1938
+ output_tokens: number
1916
1939
  /** @description Total tokens (input + output) */
1917
- total_tokens: number;
1918
- cost: components["schemas"]["TokenCost"];
1919
- };
1940
+ total_tokens: number
1941
+ cost: components['schemas']['TokenCost']
1942
+ }
1920
1943
  /** @description Aggregated usage totals */
1921
1944
  TokenUsageTotal: {
1922
1945
  /** @description Total input tokens for the period */
1923
- input_tokens: number;
1946
+ input_tokens: number
1924
1947
  /** @description Total output tokens for the period */
1925
- output_tokens: number;
1948
+ output_tokens: number
1926
1949
  /** @description Total tokens for the period */
1927
- total_tokens: number;
1928
- cost: components["schemas"]["TokenCost"];
1929
- };
1950
+ total_tokens: number
1951
+ cost: components['schemas']['TokenCost']
1952
+ }
1930
1953
  /** @description Time period for the usage data */
1931
1954
  TokenUsagePeriod: {
1932
1955
  /** @description Start date of the period (YYYY-MM-DD) */
1933
- start: string;
1956
+ start: string
1934
1957
  /** @description End date of the period (YYYY-MM-DD) */
1935
- end: string;
1936
- };
1958
+ end: string
1959
+ }
1937
1960
  TokenUsageResponse: {
1938
1961
  /** @description Daily token usage data */
1939
- usage: components["schemas"]["DailyTokenUsage"][];
1940
- total: components["schemas"]["TokenUsageTotal"];
1941
- period: components["schemas"]["TokenUsagePeriod"];
1942
- };
1962
+ usage: components['schemas']['DailyTokenUsage'][]
1963
+ total: components['schemas']['TokenUsageTotal']
1964
+ period: components['schemas']['TokenUsagePeriod']
1965
+ }
1943
1966
  ModelTokenUsageResponse: {
1944
1967
  /** @description Model identifier */
1945
- model: string;
1968
+ model: string
1946
1969
  /** @description Daily token usage data */
1947
- usage: components["schemas"]["DailyTokenUsage"][];
1948
- total: components["schemas"]["TokenUsageTotal"];
1949
- period: components["schemas"]["TokenUsagePeriod"];
1950
- };
1970
+ usage: components['schemas']['DailyTokenUsage'][]
1971
+ total: components['schemas']['TokenUsageTotal']
1972
+ period: components['schemas']['TokenUsagePeriod']
1973
+ }
1951
1974
  /** @description Complete user profile including company details */
1952
1975
  UserProfile: {
1953
1976
  /** @description Unique identifier for the user */
1954
- id: string;
1977
+ id: string
1955
1978
  /**
1956
1979
  * Format: email
1957
1980
  * @description User's email address
1958
1981
  */
1959
- email: string;
1982
+ email: string
1960
1983
  /** @description Full name of the user */
1961
- name: string;
1984
+ name: string
1962
1985
  /** @description Contact phone number */
1963
- phone: string | null;
1986
+ phone: string | null
1964
1987
  /** @description ID of the company the user belongs to */
1965
- company_id: number;
1988
+ company_id: number
1966
1989
  /** @description Username for login */
1967
- login: string;
1990
+ login: string
1968
1991
  /**
1969
1992
  * @description User role determining permissions
1970
1993
  * @enum {string}
1971
1994
  */
1972
- role: "admin" | "member";
1995
+ role: 'admin' | 'member'
1973
1996
  /** @description Whether the user account is active */
1974
- active: boolean | null;
1997
+ active: boolean | null
1975
1998
  /**
1976
1999
  * Format: date-time
1977
2000
  * @description When the user was created
1978
2001
  */
1979
- createdAt: string | null;
2002
+ createdAt: string | null
1980
2003
  /**
1981
2004
  * Format: date-time
1982
2005
  * @description Last update timestamp
1983
2006
  */
1984
- updatedAt: string | null;
2007
+ updatedAt: string | null
1985
2008
  /** @description User preferences and settings */
1986
2009
  settings?: {
1987
2010
  /** @description Email notification preferences */
1988
- notifications: boolean;
2011
+ notifications: boolean
1989
2012
  /** @description User's preferred timezone */
1990
- timezone: string;
2013
+ timezone: string
1991
2014
  /** @description Preferred interface language */
1992
- language?: string;
2015
+ language?: string
1993
2016
  /**
1994
2017
  * @description UI theme preference
1995
2018
  * @enum {string}
1996
2019
  */
1997
- theme?: "light" | "dark" | "system";
1998
- };
2020
+ theme?: 'light' | 'dark' | 'system'
2021
+ }
1999
2022
  /** @description Associated company details */
2000
2023
  company?: {
2001
2024
  /** @description Company unique identifier */
2002
- id: number;
2025
+ id: number
2003
2026
  /** @description Legal company name */
2004
- name: string;
2027
+ name: string
2005
2028
  /** @description VAT identification number */
2006
- vat: string;
2029
+ vat: string
2007
2030
  /**
2008
2031
  * Format: email
2009
2032
  * @description Company email address
2010
2033
  */
2011
- email: string;
2034
+ email: string
2012
2035
  /** @description Company phone number */
2013
- phone: string | null;
2036
+ phone: string | null
2014
2037
  /** @description Street address */
2015
- street: string | null;
2038
+ street: string | null
2016
2039
  /** @description City */
2017
- city: string | null;
2040
+ city: string | null
2018
2041
  /** @description Company country information */
2019
2042
  country: {
2020
2043
  /** @description Country ID */
2021
- id: number;
2044
+ id: number
2022
2045
  /** @description Country name */
2023
- name: string;
2046
+ name: string
2024
2047
  /** @description ISO country code */
2025
- code: string;
2026
- } | null;
2027
- };
2028
- };
2048
+ code: string
2049
+ } | null
2050
+ }
2051
+ }
2029
2052
  CreateUser: {
2030
- name: string;
2053
+ name: string
2031
2054
  /** Format: email */
2032
- email: string;
2033
- phone: string | null;
2034
- company_id: number;
2055
+ email: string
2056
+ phone: string | null
2057
+ company_id: number
2035
2058
  /** @enum {string} */
2036
- role: "admin" | "member";
2059
+ role: 'admin' | 'member'
2037
2060
  settings?: {
2038
- notifications: boolean;
2039
- timezone: string;
2040
- language?: string;
2061
+ notifications: boolean
2062
+ timezone: string
2063
+ language?: string
2041
2064
  /** @enum {string} */
2042
- theme?: "light" | "dark" | "system";
2043
- };
2044
- };
2065
+ theme?: 'light' | 'dark' | 'system'
2066
+ }
2067
+ }
2045
2068
  UpdateUser: {
2046
- name?: string;
2069
+ name?: string
2047
2070
  /** Format: email */
2048
- email?: string;
2049
- phone?: string | null;
2071
+ email?: string
2072
+ phone?: string | null
2050
2073
  settings?: {
2051
- notifications: boolean;
2052
- timezone: string;
2053
- language?: string;
2074
+ notifications: boolean
2075
+ timezone: string
2076
+ language?: string
2054
2077
  /** @enum {string} */
2055
- theme?: "light" | "dark" | "system";
2056
- };
2057
- };
2078
+ theme?: 'light' | 'dark' | 'system'
2079
+ }
2080
+ }
2058
2081
  InviteUser: {
2059
2082
  /**
2060
2083
  * Format: email
2061
2084
  * @description Email address of the person to invite
2062
2085
  */
2063
- email: string;
2086
+ email: string
2064
2087
  /**
2065
2088
  * @description Role to assign to the new team member
2066
2089
  * @enum {string}
2067
2090
  */
2068
- role: "admin" | "member";
2091
+ role: 'admin' | 'member'
2069
2092
  /** @description Company ID to invite the user to (defaults to current user's company) */
2070
- companyId?: number;
2071
- };
2093
+ companyId?: number
2094
+ }
2072
2095
  ErrorResponse: {
2073
- error: string;
2074
- code?: string;
2075
- details?: unknown;
2076
- };
2096
+ error: string
2097
+ code?: string
2098
+ details?: unknown
2099
+ }
2077
2100
  HealthCheck: {
2078
- status: string;
2079
- timestamp: string;
2080
- version: string;
2081
- npmVersion: string;
2082
- environment: string;
2083
- };
2084
- };
2085
- responses: never;
2086
- parameters: {
2087
- };
2088
- requestBodies: never;
2089
- headers: never;
2090
- pathItems: never;
2101
+ status: string
2102
+ timestamp: string
2103
+ version: string
2104
+ npmVersion: string
2105
+ environment: string
2106
+ }
2107
+ }
2108
+ responses: never
2109
+ parameters: {}
2110
+ requestBodies: never
2111
+ headers: never
2112
+ pathItems: never
2091
2113
  }
2092
2114
 
2093
- export type $defs = Record<string, never>;
2115
+ export type $defs = Record<string, never>
2094
2116
 
2095
- export type external = Record<string, never>;
2117
+ export type external = Record<string, never>
2096
2118
 
2097
- export type operations = Record<string, never>;
2119
+ export type operations = Record<string, never>