berget 2.2.6 → 2.2.7

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