@cube-dev/platform-client 0.19.1 → 0.20.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.
- package/CHANGELOG.md +19 -0
- package/dist/schema.d.ts +249 -27
- package/dist/schema.d.ts.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
<!-- Curate public-facing entries here before the next release. -->
|
|
11
11
|
|
|
12
|
+
## [0.20.0] - 2026-10-15
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- `GET /api/v1/users/{id}/roles` (`UsersAdminPublicController.getUserRoles`) lists every role a user holds, built-in and custom, whether assigned directly or through a group. Each role carries `direct` and `groupIds`, so you can tell whether `DELETE /api/v1/roles/{roleId}/users/{userId}` will remove it, and the response reports `isAdmin`. Administrator privileges required. New schemas: `UserRolesResponse`, `UserRoleAssignmentResponse`.
|
|
16
|
+
- `GET /api/v1/roles/{roleId}/users` (`RolesPublicController.getRoleHolders`) lists the users holding a role, directly or through a group, with cursor pagination. It accepts built-in role ids, includes deactivated users, and returns each user's full set of roles, so a combination such as "holds Explorer but not my custom role" is one pass over the pages. Administrator privileges required. New schemas: `RoleHolder`, `RoleHoldersListResponse`.
|
|
17
|
+
- `condition` on scheduled tasks (`CreateScheduledTaskInput`, `UpdateScheduledTaskInput`, `ScheduledTaskResponse`): run the agent only when a measure crosses a `threshold`, moves by a `change` percentage, or turns `anomaly`-ous, instead of on every fire. `ScheduledTaskResponse.lastConditionCheck` reports the latest check. Send `condition: null` on update to remove it. New schemas: `ScheduledTaskCondition`, `ScheduledTaskLastConditionCheck`.
|
|
18
|
+
- `securityContext` on the body of the start-eval-run operation: evaluate under a security context merged over the caller's own.
|
|
19
|
+
- `agentResponse`, `agentSql`, `groundTruthSql`, `analysis` and `scoreReasons` on `EvaluationResultResponse`, so a result explains why a question failed or needs review.
|
|
20
|
+
- `pdf_print` for `notificationFormat` on `CreateNotificationInput` and `UpdateNotificationInput`: deliver the paginated print version of a dashboard.
|
|
21
|
+
- `in_month`, `not_in_month`, `in_quarter`, `not_in_quarter`, `in_year` and `not_in_year` dashboard filter operators.
|
|
22
|
+
- `memory.generateFromChats` on `UserSettingsInput`, and `memoryGenerationEnabled` in the settings response: let a user turn off background memory from their chats.
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
|
|
26
|
+
- Searching workspace contents with `search` now also matches a workbook when a report inside it matches, so a dashboard can be found by the name of a chart on it.
|
|
27
|
+
- Dashboard filter and time-grain inputs accept an empty value to render the control cleared: an empty `value` with no `operator`, or an empty `grain`.
|
|
28
|
+
- Moving a report to a different parent through `PUT /reports/{id}` or its upsert requires **manage** access to the report and **edit** access to the destination. Creating a workbook with a destination folder requires **edit** access to that folder.
|
|
29
|
+
- API keys scoped to specific deployments now answer `403` on the role endpoints and on bulk user actions, which have no deployment to check them against.
|
|
30
|
+
|
|
12
31
|
## [0.19.1] - 2026-10-12
|
|
13
32
|
|
|
14
33
|
### Added
|
package/dist/schema.d.ts
CHANGED
|
@@ -427,7 +427,7 @@ export interface paths {
|
|
|
427
427
|
*
|
|
428
428
|
* Pass `filters`, `timeGrains` and `memberSwitchers` to render the board with specific control values, exactly as a scheduled notification does; omit them to render its saved defaults.
|
|
429
429
|
*
|
|
430
|
-
* Pass `layout: print` with `format: pdf` for the paginated A4 document the dashboard's "
|
|
430
|
+
* Pass `layout: print` with `format: pdf` for the paginated A4 document the dashboard's "Download print version" menu item produces — one column, every table row, the filter state as a summary line — instead of the default `screenshot` of the board. `print` with `format: png` returns `400`.
|
|
431
431
|
*
|
|
432
432
|
* By default the dashboard renders under the calling user's own security context, so the file shows what that user would see. Requires **manage** access to the dashboard's workbook — the same permission the console's own "Download as PNG / PDF" actions require, because a whole-dashboard render is a bulk data export.
|
|
433
433
|
*
|
|
@@ -1407,7 +1407,7 @@ export interface paths {
|
|
|
1407
1407
|
*
|
|
1408
1408
|
* `source` is **create-only**: it is recorded when the report is first created and ignored on subsequent updates (it describes where the report originated, not its current definition).
|
|
1409
1409
|
*
|
|
1410
|
-
* Access: updating requires **edit** access to the existing report;
|
|
1410
|
+
* Access: updating requires **edit** access to the existing report; moving it to a different parent requires **manage** access to the report and **edit** access to the destination. Creating requires the same access as `POST /reports`.
|
|
1411
1411
|
*/
|
|
1412
1412
|
put: operations["ReportsPublicController.upsertReportByPublicId"];
|
|
1413
1413
|
post?: never;
|
|
@@ -1434,7 +1434,7 @@ export interface paths {
|
|
|
1434
1434
|
*
|
|
1435
1435
|
* The id you assign must be one you chose (any distinct 12-character `[0-9A-Za-z]` id). The auto-generated placeholder id shown for a report that has no stable id yet cannot be assigned — it is not unique — and is rejected with `400`.
|
|
1436
1436
|
*
|
|
1437
|
-
* Requires **edit** access to the report.
|
|
1437
|
+
* Requires **edit** access to the report. Moving it to a different parent requires **manage** access to the report and **edit** access to the destination.
|
|
1438
1438
|
*/
|
|
1439
1439
|
put: operations["ReportsPublicController.updateReport"];
|
|
1440
1440
|
post?: never;
|
|
@@ -1872,7 +1872,7 @@ export interface paths {
|
|
|
1872
1872
|
*
|
|
1873
1873
|
* If a workbook with this slug exists in the deployment, it is updated: only the fields you send are changed, and `meta` is merged into the existing metadata (a `meta.dashboardDraft` is validated like everywhere else). Otherwise a new workbook is created with this slug. The slug is normalized (trimmed, lowercased) before matching. Re-applying the same request is a no-op.
|
|
1874
1874
|
*
|
|
1875
|
-
* Access: updating requires **edit** access to the workbook holding the slug (requests that include `folderId` require **manage** access, plus **edit** access to the destination folder); creating requires the same access as `POST /workbooks` (AI BI User role or higher).
|
|
1875
|
+
* Access: updating requires **edit** access to the workbook holding the slug (requests that include `folderId` require **manage** access, plus **edit** access to the destination folder); creating requires the same access as `POST /workbooks` (AI BI User role or higher, plus **edit** access to a supplied destination folder).
|
|
1876
1876
|
*
|
|
1877
1877
|
* Whether this request creates or updates is decided — and access-checked — before it is applied. If another writer changes that in between (creates or deletes the workbook holding this slug), the request is rejected with `409` and `code: "upsert_branch_changed"` rather than applied under the wrong permission check. This is **transient: retry the request**. It only happens when two writers target the same slug concurrently — for example two pipeline runs applying the same bundle at once, where one creates the workbook and the other must then retry into the update path.
|
|
1878
1878
|
*
|
|
@@ -2153,7 +2153,7 @@ export interface paths {
|
|
|
2153
2153
|
* Supported query parameters:
|
|
2154
2154
|
* - `folderId` — list the contents of this folder (omit for the root).
|
|
2155
2155
|
* - `types` — restrict the results to one or more item types (`FOLDER`, `WORKBOOK`, `REPORT`). Repeat the parameter to pass several.
|
|
2156
|
-
* - `search` — case-insensitive substring match on item names; searches across all folders, not just the current level.
|
|
2156
|
+
* - `search` — case-insensitive substring match on item names; searches across all folders, not just the current level. A workbook also matches when a report inside it does, so a search finds a dashboard by the name of a chart on it. Use this to find an item by name instead of walking folders.
|
|
2157
2157
|
* - `orderByField` / `orderByDirection` — sort the non-folder items (e.g. by `name`, `updated_at`, `created_at`, or `viewer_last_viewed_at`).
|
|
2158
2158
|
* - `first` / `after` — cursor-based pagination.
|
|
2159
2159
|
*
|
|
@@ -2242,19 +2242,7 @@ export interface paths {
|
|
|
2242
2242
|
put?: never;
|
|
2243
2243
|
/**
|
|
2244
2244
|
* Move a workspace item
|
|
2245
|
-
* @description Move
|
|
2246
|
-
*
|
|
2247
|
-
* Request body:
|
|
2248
|
-
* - `type` — the item type: `WORKBOOK`, `REPORT`, or `FOLDER`.
|
|
2249
|
-
* - `id` — the id of the item to move.
|
|
2250
|
-
* - `folderId` — the destination folder id, or `null` to move the item to the workspace root. For a folder, this becomes its new parent.
|
|
2251
|
-
*
|
|
2252
|
-
* Access requirements depend on the item type and mirror the per-type rules:
|
|
2253
|
-
* - **Workbook** — manage access to the workbook, plus edit access to the destination folder when moving into one.
|
|
2254
|
-
* - **Report** — edit access to the report (with the report-manage permission).
|
|
2255
|
-
* - **Folder** — manage access to the folder being moved, plus manage or edit access to the destination parent folder.
|
|
2256
|
-
*
|
|
2257
|
-
* Moving a folder into one of its own descendants, or exceeding the maximum folder depth, is rejected with `400`. Returns `404` if the item does not exist or belongs to a different deployment.
|
|
2245
|
+
* @description Move a workbook, report, or folder to folderId (null for root). Source and destination permissions are checked, and a report's destination must be in the route deployment.
|
|
2258
2246
|
*/
|
|
2259
2247
|
post: operations["WorkspacePublicController.moveWorkspaceObject"];
|
|
2260
2248
|
delete?: never;
|
|
@@ -3179,6 +3167,8 @@ export interface paths {
|
|
|
3179
3167
|
* @description **🔒 Admin only.** Requires administrator privileges — the authenticated principal (API key, embed JWT, or any bearer token) must belong to a user with the admin role.
|
|
3180
3168
|
*
|
|
3181
3169
|
* Lists the tenant's custom roles, newest first, cursor-paginated via `first`/`after`. Cube's built-in roles are not included — they are not tenant data.
|
|
3170
|
+
*
|
|
3171
|
+
* An API key scoped to specific deployments answers `403` here.
|
|
3182
3172
|
*/
|
|
3183
3173
|
get: operations["RolesPublicController.getRoles"];
|
|
3184
3174
|
put?: never;
|
|
@@ -3211,6 +3201,8 @@ export interface paths {
|
|
|
3211
3201
|
* The tier is **not** required and is **not** derived from the deployment actions: a role sent without one is accepted and simply confers no tier, so a user holding only that role gets the deployment grants and still cannot use the product. That is deliberate — a user holds the union of their roles, so a role that only adds a deployment scope beside another role carrying the tier is valid — but it means nothing warns you. Omit the `Global` policy only when some other role supplies the tier. Note the console does require one on every role it writes, so a role created here without a tier shows an unset Base Role when opened in the role builder.
|
|
3212
3202
|
*
|
|
3213
3203
|
* Use `["All"]` as `resources` to cover every deployment, and `"All"` as the single action for full access to the deployments in scope. A policy is rejected when it grants no action, when it names no resource, or when a `Deployment` resource is not a deployment id — pass the numeric id returned by POST /build/api/v1/deployments, not a slug or a name. Ids are checked for shape, not existence, so an id whose deployment was since deleted is kept and simply grants nothing.
|
|
3204
|
+
*
|
|
3205
|
+
* An API key scoped to specific deployments answers `403` here.
|
|
3214
3206
|
*/
|
|
3215
3207
|
post: operations["RolesPublicController.createRole"];
|
|
3216
3208
|
delete?: never;
|
|
@@ -3231,6 +3223,8 @@ export interface paths {
|
|
|
3231
3223
|
* @description **🔒 Admin only.** Requires administrator privileges — the authenticated principal (API key, embed JWT, or any bearer token) must belong to a user with the admin role.
|
|
3232
3224
|
*
|
|
3233
3225
|
* Returns one custom role by id, with its policies.
|
|
3226
|
+
*
|
|
3227
|
+
* An API key scoped to specific deployments answers `403` here.
|
|
3234
3228
|
*/
|
|
3235
3229
|
get: operations["RolesPublicController.getRole"];
|
|
3236
3230
|
/**
|
|
@@ -3238,6 +3232,8 @@ export interface paths {
|
|
|
3238
3232
|
* @description **🔒 Admin only.** Requires administrator privileges — the authenticated principal (API key, embed JWT, or any bearer token) must belong to a user with the admin role.
|
|
3239
3233
|
*
|
|
3240
3234
|
* Updates the fields present in the body and leaves the rest alone. Sending `policies` replaces the role's policies outright, so read the role first if you mean to add one rather than start over. Renaming to a name another role already holds answers `409`. Built-in roles cannot be updated.
|
|
3235
|
+
*
|
|
3236
|
+
* An API key scoped to specific deployments answers `403` here.
|
|
3241
3237
|
*/
|
|
3242
3238
|
put: operations["RolesPublicController.updateRole"];
|
|
3243
3239
|
post?: never;
|
|
@@ -3246,6 +3242,8 @@ export interface paths {
|
|
|
3246
3242
|
* @description **🔒 Admin only.** Requires administrator privileges — the authenticated principal (API key, embed JWT, or any bearer token) must belong to a user with the admin role.
|
|
3247
3243
|
*
|
|
3248
3244
|
* Deletes the role and every assignment of it, from users and from groups. Built-in roles cannot be deleted.
|
|
3245
|
+
*
|
|
3246
|
+
* An API key scoped to specific deployments answers `403` here.
|
|
3249
3247
|
*/
|
|
3250
3248
|
delete: operations["RolesPublicController.deleteRole"];
|
|
3251
3249
|
options?: never;
|
|
@@ -3253,6 +3251,30 @@ export interface paths {
|
|
|
3253
3251
|
patch?: never;
|
|
3254
3252
|
trace?: never;
|
|
3255
3253
|
};
|
|
3254
|
+
"/api/v1/roles/{roleId}/users": {
|
|
3255
|
+
parameters: {
|
|
3256
|
+
query?: never;
|
|
3257
|
+
header?: never;
|
|
3258
|
+
path?: never;
|
|
3259
|
+
cookie?: never;
|
|
3260
|
+
};
|
|
3261
|
+
/**
|
|
3262
|
+
* List the users holding a role
|
|
3263
|
+
* @description **🔒 Admin only.** Requires administrator privileges — the authenticated principal (API key, embed JWT, or any bearer token) must belong to a user with the admin role.
|
|
3264
|
+
*
|
|
3265
|
+
* Lists every user holding the role, directly or through a group, newest first, cursor-paginated via `first`/`after`. Accepts built-in role ids. Each user carries every role they hold, so a combination such as "holds Explorer but not my custom role" is one pass over these pages. Deactivated users are included.
|
|
3266
|
+
*
|
|
3267
|
+
* An API key scoped to specific deployments answers `403` here.
|
|
3268
|
+
*/
|
|
3269
|
+
get: operations["RolesPublicController.getRoleHolders"];
|
|
3270
|
+
put?: never;
|
|
3271
|
+
post?: never;
|
|
3272
|
+
delete?: never;
|
|
3273
|
+
options?: never;
|
|
3274
|
+
head?: never;
|
|
3275
|
+
patch?: never;
|
|
3276
|
+
trace?: never;
|
|
3277
|
+
};
|
|
3256
3278
|
"/api/v1/roles/{roleId}/users/{userId}": {
|
|
3257
3279
|
parameters: {
|
|
3258
3280
|
query?: never;
|
|
@@ -3268,6 +3290,8 @@ export interface paths {
|
|
|
3268
3290
|
* Gives the user everything the role grants. Idempotent — assigning a role the user already holds changes nothing. Returns `404` if either the user or the role is unknown.
|
|
3269
3291
|
*
|
|
3270
3292
|
* Unlike the other endpoints here, this one is not limited to your custom roles: it also accepts the id of a built-in role, and assigning one grants everything that role confers. **Cube's Admin role is the exception and cannot be granted this way** — it is not among the built-in roles this endpoint resolves, so its id returns `404`. No call to this endpoint can make a user an account-wide administrator.
|
|
3293
|
+
*
|
|
3294
|
+
* An API key scoped to specific deployments answers `403` here.
|
|
3271
3295
|
*/
|
|
3272
3296
|
put: operations["RolesPublicController.assignRoleToUser"];
|
|
3273
3297
|
post?: never;
|
|
@@ -3276,6 +3300,8 @@ export interface paths {
|
|
|
3276
3300
|
* @description **🔒 Admin only.** Requires administrator privileges — the authenticated principal (API key, embed JWT, or any bearer token) must belong to a user with the admin role.
|
|
3277
3301
|
*
|
|
3278
3302
|
* Takes the role away from the user. Idempotent — removing a role the user does not hold changes nothing. Returns `404` if the user is unknown.
|
|
3303
|
+
*
|
|
3304
|
+
* An API key scoped to specific deployments answers `403` here.
|
|
3279
3305
|
*/
|
|
3280
3306
|
delete: operations["RolesPublicController.removeRoleFromUser"];
|
|
3281
3307
|
options?: never;
|
|
@@ -3545,6 +3571,8 @@ export interface paths {
|
|
|
3545
3571
|
* - A tenant must always keep at least one active, direct admin, so the action that would remove the last one fails with `403` while the rest of the batch still applies.
|
|
3546
3572
|
*
|
|
3547
3573
|
* Reapplying an action a user is already in (deactivating a deactivated user) succeeds as a no-op.
|
|
3574
|
+
*
|
|
3575
|
+
* An API key scoped to specific deployments answers `403` here.
|
|
3548
3576
|
*/
|
|
3549
3577
|
post: operations["UsersAdminPublicController.bulkUserAction"];
|
|
3550
3578
|
delete?: never;
|
|
@@ -3602,7 +3630,7 @@ export interface paths {
|
|
|
3602
3630
|
head?: never;
|
|
3603
3631
|
/**
|
|
3604
3632
|
* Update my settings
|
|
3605
|
-
* @description Merge a partial patch into the authenticated user's own settings. Omitted fields are left as they are; `sheets`
|
|
3633
|
+
* @description Merge a partial patch into the authenticated user's own settings. Omitted fields are left as they are; `sheets` and `memory` merge field-by-field, and an explicit `null` clears one.
|
|
3606
3634
|
*/
|
|
3607
3635
|
patch: operations["UsersPublicController.updateMySettings"];
|
|
3608
3636
|
trace?: never;
|
|
@@ -3625,6 +3653,30 @@ export interface paths {
|
|
|
3625
3653
|
patch?: never;
|
|
3626
3654
|
trace?: never;
|
|
3627
3655
|
};
|
|
3656
|
+
"/api/v1/users/{id}/roles": {
|
|
3657
|
+
parameters: {
|
|
3658
|
+
query?: never;
|
|
3659
|
+
header?: never;
|
|
3660
|
+
path?: never;
|
|
3661
|
+
cookie?: never;
|
|
3662
|
+
};
|
|
3663
|
+
/**
|
|
3664
|
+
* List a user's roles
|
|
3665
|
+
* @description **🔒 Admin only.** Requires administrator privileges — the authenticated principal (API key, embed JWT, or any bearer token) must belong to a user with the admin role.
|
|
3666
|
+
*
|
|
3667
|
+
* Every role the user holds, built-in and custom, whether assigned directly or through a group. Only a direct assignment can be removed with `DELETE /api/v1/roles/{roleId}/users/{userId}`.
|
|
3668
|
+
*
|
|
3669
|
+
* An API key scoped to specific deployments answers `403` here.
|
|
3670
|
+
*/
|
|
3671
|
+
get: operations["UsersAdminPublicController.getUserRoles"];
|
|
3672
|
+
put?: never;
|
|
3673
|
+
post?: never;
|
|
3674
|
+
delete?: never;
|
|
3675
|
+
options?: never;
|
|
3676
|
+
head?: never;
|
|
3677
|
+
patch?: never;
|
|
3678
|
+
trace?: never;
|
|
3679
|
+
};
|
|
3628
3680
|
"/build/api/v1/deployments/": {
|
|
3629
3681
|
parameters: {
|
|
3630
3682
|
query?: never;
|
|
@@ -3938,6 +3990,7 @@ export interface components {
|
|
|
3938
3990
|
graphqlToken?: string | null;
|
|
3939
3991
|
hasAgentAccess?: any | null;
|
|
3940
3992
|
mcpToken?: string | null;
|
|
3993
|
+
memoryGenerationEnabled?: boolean | null;
|
|
3941
3994
|
resolvedTimezone?: string | null;
|
|
3942
3995
|
scheduledTaskPolicies?: components["schemas"]["ChatThreadPolicy"][] | null;
|
|
3943
3996
|
timezoneSettings?: components["schemas"]["TimezoneSettings"] | null;
|
|
@@ -4439,7 +4492,7 @@ export interface components {
|
|
|
4439
4492
|
timezone?: string | null;
|
|
4440
4493
|
};
|
|
4441
4494
|
/** @enum {string} */
|
|
4442
|
-
CreateNotificationInputNotificationFormat: "png" | "pdf";
|
|
4495
|
+
CreateNotificationInputNotificationFormat: "png" | "pdf" | "pdf_print";
|
|
4443
4496
|
/** @enum {string} */
|
|
4444
4497
|
CreateNotificationInputScheduleType: "HOURLY" | "DAILY" | "WEEKLY" | "MONTHLY" | "CUSTOM";
|
|
4445
4498
|
CreateOAuthIntegrationInput: {
|
|
@@ -4514,6 +4567,8 @@ export interface components {
|
|
|
4514
4567
|
CreateScheduledTaskInput: {
|
|
4515
4568
|
/** @description The agent that runs the task. Omit for the deployment default. */
|
|
4516
4569
|
agentId?: number | null;
|
|
4570
|
+
/** @description Notify only when: on each fire the measure is read once, before the agent runs, and the agent runs only when the condition starts to hold, with the crossing facts at the top of its thread; it runs again only after the condition has stopped holding. A `change` or `anomaly` rule needs `timeDimension` and `granularity`. The creator gets an inbox row only with `notificationEnabled: true`. Omit to run the agent on every fire. */
|
|
4571
|
+
condition?: components["schemas"]["ScheduledTaskCondition"] | null;
|
|
4517
4572
|
/** @description Standard 5-field cron (minute hour day-of-month month day-of-week), e.g. `0 9 * * 1-5` for 9:00 on weekdays. A task runs at most once an hour, so the minute field is a single number. Null or omitted makes the task Manual: it runs only when started with `POST /scheduled-tasks/{taskId}/run`. */
|
|
4518
4573
|
cronExpression?: string | null;
|
|
4519
4574
|
description?: string | null;
|
|
@@ -4746,17 +4801,17 @@ export interface components {
|
|
|
4746
4801
|
endInclusive?: any | null;
|
|
4747
4802
|
/** @description Dimension path, e.g. "Orders.status" */
|
|
4748
4803
|
member: string;
|
|
4749
|
-
/** @description Filter operator (defaults to "equals") */
|
|
4804
|
+
/** @description Filter operator (defaults to "equals"; with an empty value, omitting it clears the control instead) */
|
|
4750
4805
|
operator?: components["schemas"]["DashboardFilterInputOperator"] | null;
|
|
4751
4806
|
/** @description For between filters: whether the start bound is inclusive */
|
|
4752
4807
|
startInclusive?: any | null;
|
|
4753
|
-
/** @description Filter value. Omit for is_null / is_not_null / is_empty / is_not_empty; provide a 2-element [start, end] array for between. */
|
|
4808
|
+
/** @description Filter value. Omit for is_null / is_not_null / is_empty / is_not_empty; provide a 2-element [start, end] array for between. An empty array or empty string with no operator renders the filter cleared; with an operator, the filter keeps that operator. */
|
|
4754
4809
|
value?: (string | number | boolean | unknown[]) | null;
|
|
4755
4810
|
};
|
|
4756
4811
|
/** @enum {string} */
|
|
4757
|
-
DashboardFilterInputOperator: "equals" | "not_equals" | "greater_than" | "greater_than_or_equal" | "less_than" | "less_than_or_equal" | "contains" | "not_contains" | "starts_with" | "not_starts_with" | "ends_with" | "not_ends_with" | "is_null" | "is_not_null" | "is_empty" | "is_not_empty" | "between" | "custom";
|
|
4812
|
+
DashboardFilterInputOperator: "equals" | "not_equals" | "greater_than" | "greater_than_or_equal" | "less_than" | "less_than_or_equal" | "contains" | "not_contains" | "starts_with" | "not_starts_with" | "ends_with" | "not_ends_with" | "in_month" | "not_in_month" | "in_quarter" | "not_in_quarter" | "in_year" | "not_in_year" | "is_null" | "is_not_null" | "is_empty" | "is_not_empty" | "between" | "custom";
|
|
4758
4813
|
/** @enum {string} */
|
|
4759
|
-
DashboardFilterOperator: "equals" | "not_equals" | "greater_than" | "greater_than_or_equal" | "less_than" | "less_than_or_equal" | "contains" | "not_contains" | "starts_with" | "not_starts_with" | "ends_with" | "not_ends_with" | "is_null" | "is_not_null" | "is_empty" | "is_not_empty" | "between" | "custom";
|
|
4814
|
+
DashboardFilterOperator: "equals" | "not_equals" | "greater_than" | "greater_than_or_equal" | "less_than" | "less_than_or_equal" | "contains" | "not_contains" | "starts_with" | "not_starts_with" | "ends_with" | "not_ends_with" | "in_month" | "not_in_month" | "in_quarter" | "not_in_quarter" | "in_year" | "not_in_year" | "is_null" | "is_not_null" | "is_empty" | "is_not_empty" | "between" | "custom";
|
|
4760
4815
|
DashboardLayout: {
|
|
4761
4816
|
breakpoints?: components["schemas"]["DashboardBreakpoints"] | null;
|
|
4762
4817
|
cols?: components["schemas"]["DashboardBreakpointCols"] | null;
|
|
@@ -4813,7 +4868,7 @@ export interface components {
|
|
|
4813
4868
|
member: string;
|
|
4814
4869
|
};
|
|
4815
4870
|
DashboardTimeGrainInput: {
|
|
4816
|
-
/** @description Granularity, e.g. "day", "week", "month" */
|
|
4871
|
+
/** @description Granularity, e.g. "day", "week", "month". An empty string renders the control cleared. */
|
|
4817
4872
|
grain: string;
|
|
4818
4873
|
/** @description Time dimension path, e.g. "Orders.created_at" */
|
|
4819
4874
|
member: string;
|
|
@@ -5665,11 +5720,21 @@ export interface components {
|
|
|
5665
5720
|
pageInfo?: components["schemas"]["PageInfo"] | null;
|
|
5666
5721
|
};
|
|
5667
5722
|
EvaluationResultResponse: {
|
|
5723
|
+
/** @description The agent's text answer, which may be truncated. */
|
|
5724
|
+
agentResponse?: string | null;
|
|
5725
|
+
/** @description The SQL the agent ran to answer the question. */
|
|
5726
|
+
agentSql?: string | null;
|
|
5727
|
+
/** @description The grader's explanation of the verdict: why the question failed or errored, a note for a result that needs review, or the AI check's rationale. */
|
|
5728
|
+
analysis?: string | null;
|
|
5668
5729
|
createdAt: string;
|
|
5669
5730
|
evaluationId: number;
|
|
5731
|
+
/** @description The ground-truth SQL the agent result was compared against. */
|
|
5732
|
+
groundTruthSql?: string | null;
|
|
5670
5733
|
id: number;
|
|
5671
5734
|
questionTextSnapshot: string;
|
|
5672
5735
|
score?: number | null;
|
|
5736
|
+
/** @description Short categories for a non-passing verdict, such as "Row count mismatch" or "Query error". Empty when the question passed. */
|
|
5737
|
+
scoreReasons: string[];
|
|
5673
5738
|
updatedAt: string;
|
|
5674
5739
|
/** @description Question outcome: pass, fail, review, skipped, or error. */
|
|
5675
5740
|
verdict?: string | null;
|
|
@@ -5934,6 +5999,9 @@ export interface components {
|
|
|
5934
5999
|
locale: string;
|
|
5935
6000
|
value: string;
|
|
5936
6001
|
};
|
|
6002
|
+
MemoryUserSettingsInput: {
|
|
6003
|
+
generateFromChats?: boolean | null;
|
|
6004
|
+
};
|
|
5937
6005
|
MergeIntoParentBranchRequest: {
|
|
5938
6006
|
branchId?: number;
|
|
5939
6007
|
branchName?: string;
|
|
@@ -6792,6 +6860,19 @@ export interface components {
|
|
|
6792
6860
|
/** @description What the role grants. Scope a policy to specific deployments by setting `resourceType` to `Deployment` and listing the deployment ids — as returned by POST /build/api/v1/deployments — in `resources`, or `["All"]` for every deployment. An empty `policies` list is accepted and creates a role that grants nothing yet; an individual policy with no actions, or none naming a resource, is rejected. */
|
|
6793
6861
|
policies: components["schemas"]["Policy"][];
|
|
6794
6862
|
};
|
|
6863
|
+
RoleHolder: {
|
|
6864
|
+
email: string;
|
|
6865
|
+
firstName?: string | null;
|
|
6866
|
+
id: number;
|
|
6867
|
+
/** @description Set by the user's own Admin flag or by a group granting Admin. */
|
|
6868
|
+
isAdmin: boolean;
|
|
6869
|
+
isDeactivated: boolean;
|
|
6870
|
+
roles: components["schemas"]["UserRoleAssignmentResponse"][];
|
|
6871
|
+
};
|
|
6872
|
+
RoleHoldersListResponse: {
|
|
6873
|
+
items: components["schemas"]["RoleHolder"][];
|
|
6874
|
+
pageInfo: components["schemas"]["PageInfo"];
|
|
6875
|
+
};
|
|
6795
6876
|
RoleUpdateBody: {
|
|
6796
6877
|
/** @description Omit to leave the description unchanged; `null` clears it. */
|
|
6797
6878
|
description?: string | null;
|
|
@@ -6835,6 +6916,61 @@ export interface components {
|
|
|
6835
6916
|
SaveDatabricksMetricViewIntegrationInputDeletionPolicy: "retain" | "delete-managed";
|
|
6836
6917
|
/** @enum {string} */
|
|
6837
6918
|
SaveDatabricksMetricViewIntegrationInputSelectionMode: "all" | "selected" | "pattern";
|
|
6919
|
+
ScheduledTaskCondition: {
|
|
6920
|
+
granularity?: components["schemas"]["ScheduledTaskConditionGranularity"] | null;
|
|
6921
|
+
/** @description Changes whenever the condition does. Read-only. */
|
|
6922
|
+
id?: string | null;
|
|
6923
|
+
/** @description Full measure name, e.g. `orders.revenue`. */
|
|
6924
|
+
measure: string;
|
|
6925
|
+
measureTitle?: string | null;
|
|
6926
|
+
rule: components["schemas"]["ScheduledTaskConditionRule"];
|
|
6927
|
+
/** @description Full time dimension name, e.g. `orders.created_at`. */
|
|
6928
|
+
timeDimension?: string | null;
|
|
6929
|
+
timeDimensionTitle?: string | null;
|
|
6930
|
+
};
|
|
6931
|
+
ScheduledTaskConditionBand: {
|
|
6932
|
+
high: number;
|
|
6933
|
+
low: number;
|
|
6934
|
+
median: number;
|
|
6935
|
+
};
|
|
6936
|
+
/** @enum {string} */
|
|
6937
|
+
ScheduledTaskConditionGranularity: "day" | "week" | "month" | "quarter" | "year";
|
|
6938
|
+
ScheduledTaskConditionRule: {
|
|
6939
|
+
/** @description For `change`: increases, decreases, or changes either way. */
|
|
6940
|
+
direction?: components["schemas"]["ScheduledTaskConditionRuleDirection"] | null;
|
|
6941
|
+
/** @description For `threshold`: above, below or equal to. */
|
|
6942
|
+
operator?: components["schemas"]["ScheduledTaskConditionRuleOperator"] | null;
|
|
6943
|
+
/** @description For `change`: the percentage, greater than 0, e.g. `5` for 5 %. */
|
|
6944
|
+
percent?: number | null;
|
|
6945
|
+
/** @description `threshold`: the last complete period (or the total, with no time dimension) is above, below or equal to `value`. `change`: the last complete period moved by at least `percent` % from the one before it. `anomaly`: the last complete period lies outside median ± 3·MAD of the at least 8 complete periods before it. */
|
|
6946
|
+
type: components["schemas"]["ScheduledTaskConditionRuleType"];
|
|
6947
|
+
/** @description For `threshold`: the number compared with. */
|
|
6948
|
+
value?: number | null;
|
|
6949
|
+
};
|
|
6950
|
+
/** @enum {string} */
|
|
6951
|
+
ScheduledTaskConditionRuleDirection: "up" | "down" | "either";
|
|
6952
|
+
/** @enum {string} */
|
|
6953
|
+
ScheduledTaskConditionRuleOperator: "gt" | "lt" | "eq";
|
|
6954
|
+
/** @enum {string} */
|
|
6955
|
+
ScheduledTaskConditionRuleType: "threshold" | "change" | "anomaly";
|
|
6956
|
+
ScheduledTaskLastConditionCheck: {
|
|
6957
|
+
/** @description When the check ran (ISO 8601). */
|
|
6958
|
+
at: string;
|
|
6959
|
+
band?: components["schemas"]["ScheduledTaskConditionBand"] | null;
|
|
6960
|
+
changePercent?: number | null;
|
|
6961
|
+
conditionId: string;
|
|
6962
|
+
notifiedAt?: string | null;
|
|
6963
|
+
/** @description Start of the period read, `YYYY-MM-DD`. */
|
|
6964
|
+
period?: string | null;
|
|
6965
|
+
previous?: number | null;
|
|
6966
|
+
previousPeriod?: string | null;
|
|
6967
|
+
reason?: string | null;
|
|
6968
|
+
/** @description `held-notified` ran the agent; `held-already-notified` was still holding since an earlier notification; `cannot-evaluate` carries a `reason` code; an `error` carries its text in `reason` to the task's creator only, as do the figures the check read. */
|
|
6969
|
+
status: components["schemas"]["ScheduledTaskLastConditionCheckStatus"];
|
|
6970
|
+
value?: number | null;
|
|
6971
|
+
};
|
|
6972
|
+
/** @enum {string} */
|
|
6973
|
+
ScheduledTaskLastConditionCheckStatus: "not-held" | "held-notified" | "held-already-notified" | "cannot-evaluate" | "error";
|
|
6838
6974
|
ScheduledTaskListResponse: {
|
|
6839
6975
|
items: components["schemas"]["ScheduledTaskResponse"][];
|
|
6840
6976
|
pageInfo: components["schemas"]["PageInfo"];
|
|
@@ -6842,6 +6978,8 @@ export interface components {
|
|
|
6842
6978
|
ScheduledTaskResponse: {
|
|
6843
6979
|
/** @description The agent that runs the task; null runs the deployment default. */
|
|
6844
6980
|
agentId?: number | null;
|
|
6981
|
+
/** @description Notify only when: on each fire the measure is read once, before the agent runs, and the agent runs only when the condition starts to hold, with the crossing facts at the top of its thread; it runs again only after the condition has stopped holding. A `change` or `anomaly` rule needs `timeDimension` and `granularity`. The creator gets an inbox row only with `notificationEnabled: true`. Null runs the agent on every fire. */
|
|
6982
|
+
condition?: components["schemas"]["ScheduledTaskCondition"] | null;
|
|
6845
6983
|
/** @description Standard 5-field cron (minute hour day-of-month month day-of-week), e.g. `0 9 * * 1-5` for 9:00 on weekdays. Null when the task is Manual: it runs only when started with `POST /scheduled-tasks/{taskId}/run`. */
|
|
6846
6984
|
cronExpression?: string | null;
|
|
6847
6985
|
deploymentId: number;
|
|
@@ -6849,6 +6987,8 @@ export interface components {
|
|
|
6849
6987
|
id: number;
|
|
6850
6988
|
/** @description False while the schedule is paused. */
|
|
6851
6989
|
isEnabled: boolean;
|
|
6990
|
+
/** @description The latest condition check; null before the first one. */
|
|
6991
|
+
lastConditionCheck?: components["schemas"]["ScheduledTaskLastConditionCheck"] | null;
|
|
6852
6992
|
name: string;
|
|
6853
6993
|
/** @description When the schedule next fires (ISO 8601, UTC); null for a Manual or paused task. */
|
|
6854
6994
|
nextRunAt?: string | null;
|
|
@@ -6954,7 +7094,7 @@ export interface components {
|
|
|
6954
7094
|
/** @description Output format: `png` or `pdf`. */
|
|
6955
7095
|
format: components["schemas"]["StartDashboardExportInputFormat"];
|
|
6956
7096
|
/**
|
|
6957
|
-
* @description How the dashboard is laid out. `screenshot` (the default) renders the board as it looks on screen. `print` renders the paginated A4 document the dashboard's '
|
|
7097
|
+
* @description How the dashboard is laid out. `screenshot` (the default) renders the board as it looks on screen. `print` renders the paginated A4 document the dashboard's 'Download print version' menu item produces: one column, every table row, and the filter state as a summary line instead of filter controls. `print` is available for `format: 'pdf'` only.
|
|
6958
7098
|
* @default screenshot
|
|
6959
7099
|
*/
|
|
6960
7100
|
layout?: components["schemas"]["StartDashboardExportInputLayout"] | null;
|
|
@@ -7000,6 +7140,10 @@ export interface components {
|
|
|
7000
7140
|
branchName: string;
|
|
7001
7141
|
/** @description Path of one eval-question YAML file to run, relative to the agents directory. Omit to run the complete eval set. */
|
|
7002
7142
|
questionFile?: string | null;
|
|
7143
|
+
/** @description Security context to evaluate under, merged over the caller's own. Applies to the ground-truth queries, and to the agent's queries when the run's agent is defined in the deployment's agent config; the default `auto` agent queries under the caller's own context. Requires deployment edit access; a `cubeCloud` key requires an admin. */
|
|
7144
|
+
securityContext?: {
|
|
7145
|
+
[key: string]: any;
|
|
7146
|
+
} | null;
|
|
7003
7147
|
};
|
|
7004
7148
|
StartReportDeliveryRunResponse: {
|
|
7005
7149
|
/** @description Id of the run, which writes the sheet in the background; poll it for the outcome. */
|
|
@@ -7166,7 +7310,7 @@ export interface components {
|
|
|
7166
7310
|
timezone?: string | null;
|
|
7167
7311
|
};
|
|
7168
7312
|
/** @enum {string} */
|
|
7169
|
-
UpdateNotificationInputNotificationFormat: "png" | "pdf";
|
|
7313
|
+
UpdateNotificationInputNotificationFormat: "png" | "pdf" | "pdf_print";
|
|
7170
7314
|
/** @enum {string} */
|
|
7171
7315
|
UpdateNotificationInputScheduleType: "HOURLY" | "DAILY" | "WEEKLY" | "MONTHLY" | "CUSTOM";
|
|
7172
7316
|
UpdateOAuthIntegrationInput: {
|
|
@@ -7264,6 +7408,8 @@ export interface components {
|
|
|
7264
7408
|
UpdateScheduledTaskInput: {
|
|
7265
7409
|
/** @description The agent that runs the task. Omit to leave unchanged; null resets it to the deployment default. */
|
|
7266
7410
|
agentId?: number | null;
|
|
7411
|
+
/** @description Notify only when: on each fire the measure is read once, before the agent runs, and the agent runs only when the condition starts to hold, with the crossing facts at the top of its thread; it runs again only after the condition has stopped holding. A `change` or `anomaly` rule needs `timeDimension` and `granularity`. The creator gets an inbox row only with `notificationEnabled: true`. Omit to leave unchanged; null removes it. A changed condition starts its breach state fresh. */
|
|
7412
|
+
condition?: components["schemas"]["ScheduledTaskCondition"] | null;
|
|
7267
7413
|
/** @description New standard 5-field cron, at most hourly (the minute field is a single number). Omit it to keep the current schedule; send null to make the task Manual. */
|
|
7268
7414
|
cronExpression?: string | null;
|
|
7269
7415
|
/** @description Omit to leave unchanged. Send null to clear the description. */
|
|
@@ -7450,6 +7596,22 @@ export interface components {
|
|
|
7450
7596
|
updatedAt: string;
|
|
7451
7597
|
userId: number;
|
|
7452
7598
|
};
|
|
7599
|
+
UserRoleAssignmentResponse: {
|
|
7600
|
+
builtIn: boolean;
|
|
7601
|
+
description?: string | null;
|
|
7602
|
+
/** @description Assigned to the user directly — the assignment `DELETE /api/v1/roles/{roleId}/users/{userId}` removes. */
|
|
7603
|
+
direct: boolean;
|
|
7604
|
+
/** @description Groups that grant the role. Removing it from the user does not touch these; change the group instead. */
|
|
7605
|
+
groupIds: number[];
|
|
7606
|
+
/** @description Role id. Built-in roles have fixed negative ids. */
|
|
7607
|
+
id: number;
|
|
7608
|
+
name: string;
|
|
7609
|
+
};
|
|
7610
|
+
UserRolesResponse: {
|
|
7611
|
+
/** @description Set by the user's own Admin flag or by a group granting Admin. */
|
|
7612
|
+
isAdmin: boolean;
|
|
7613
|
+
roles: components["schemas"]["UserRoleAssignmentResponse"][];
|
|
7614
|
+
};
|
|
7453
7615
|
UserSettingsInput: {
|
|
7454
7616
|
alternatingRowColors?: boolean | null;
|
|
7455
7617
|
defaultDeploymentId?: number | null;
|
|
@@ -7459,6 +7621,7 @@ export interface components {
|
|
|
7459
7621
|
*/
|
|
7460
7622
|
lastSeenChangelogId?: number | null;
|
|
7461
7623
|
locale?: string | null;
|
|
7624
|
+
memory?: components["schemas"]["MemoryUserSettingsInput"] | null;
|
|
7462
7625
|
sheets?: components["schemas"]["SheetsUserSettingsInput"] | null;
|
|
7463
7626
|
theme?: string | null;
|
|
7464
7627
|
timezone?: string | null;
|
|
@@ -12930,6 +13093,37 @@ export interface operations {
|
|
|
12930
13093
|
};
|
|
12931
13094
|
};
|
|
12932
13095
|
};
|
|
13096
|
+
"RolesPublicController.getRoleHolders": {
|
|
13097
|
+
parameters: {
|
|
13098
|
+
query?: {
|
|
13099
|
+
after?: string | null;
|
|
13100
|
+
first?: number | null;
|
|
13101
|
+
};
|
|
13102
|
+
header?: never;
|
|
13103
|
+
path: {
|
|
13104
|
+
roleId: number;
|
|
13105
|
+
};
|
|
13106
|
+
cookie?: never;
|
|
13107
|
+
};
|
|
13108
|
+
requestBody?: never;
|
|
13109
|
+
responses: {
|
|
13110
|
+
200: {
|
|
13111
|
+
headers: {
|
|
13112
|
+
[name: string]: any;
|
|
13113
|
+
};
|
|
13114
|
+
content: {
|
|
13115
|
+
"application/json": components["schemas"]["RoleHoldersListResponse"];
|
|
13116
|
+
};
|
|
13117
|
+
};
|
|
13118
|
+
/** @description No role has that id. Cube's Admin role answers `404` too. */
|
|
13119
|
+
404: {
|
|
13120
|
+
headers: {
|
|
13121
|
+
[name: string]: any;
|
|
13122
|
+
};
|
|
13123
|
+
content?: never;
|
|
13124
|
+
};
|
|
13125
|
+
};
|
|
13126
|
+
};
|
|
12933
13127
|
"RolesPublicController.assignRoleToUser": {
|
|
12934
13128
|
parameters: {
|
|
12935
13129
|
query?: never;
|
|
@@ -13519,6 +13713,34 @@ export interface operations {
|
|
|
13519
13713
|
};
|
|
13520
13714
|
};
|
|
13521
13715
|
};
|
|
13716
|
+
"UsersAdminPublicController.getUserRoles": {
|
|
13717
|
+
parameters: {
|
|
13718
|
+
query?: never;
|
|
13719
|
+
header?: never;
|
|
13720
|
+
path: {
|
|
13721
|
+
id: number;
|
|
13722
|
+
};
|
|
13723
|
+
cookie?: never;
|
|
13724
|
+
};
|
|
13725
|
+
requestBody?: never;
|
|
13726
|
+
responses: {
|
|
13727
|
+
200: {
|
|
13728
|
+
headers: {
|
|
13729
|
+
[name: string]: any;
|
|
13730
|
+
};
|
|
13731
|
+
content: {
|
|
13732
|
+
"application/json": components["schemas"]["UserRolesResponse"];
|
|
13733
|
+
};
|
|
13734
|
+
};
|
|
13735
|
+
/** @description The user is unknown. */
|
|
13736
|
+
404: {
|
|
13737
|
+
headers: {
|
|
13738
|
+
[name: string]: any;
|
|
13739
|
+
};
|
|
13740
|
+
content?: never;
|
|
13741
|
+
};
|
|
13742
|
+
};
|
|
13743
|
+
};
|
|
13522
13744
|
"DeploymentsBuildPublicController.createDeployment": {
|
|
13523
13745
|
parameters: {
|
|
13524
13746
|
query?: never;
|