@company-semantics/contracts 0.107.0 → 0.109.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@company-semantics/contracts",
3
- "version": "0.107.0",
3
+ "version": "0.109.0",
4
4
  "private": false,
5
5
  "repository": {
6
6
  "type": "git",
@@ -82,6 +82,7 @@
82
82
  "release": "npx tsx scripts/release.ts",
83
83
  "prepublishOnly": "echo 'ERROR: Publishing is CI-only via tag push. Use pnpm release instead.' && exit 1",
84
84
  "test": "vitest run",
85
+ "generate:api": "pnpm generate:api-types",
85
86
  "generate:api-types": "openapi-typescript openapi/backend.yaml -o src/api/generated.ts",
86
87
  "generate:openapi-routes": "tsx scripts/generate-openapi-routes.ts",
87
88
  "generate:api-types:check": "openapi-typescript openapi/backend.yaml -o /tmp/cs-api-types-check.ts && diff -q src/api/generated.ts /tmp/cs-api-types-check.ts"
@@ -270,6 +270,65 @@ export interface paths {
270
270
  patch?: never;
271
271
  trace?: never;
272
272
  };
273
+ "/api/user/preferences/dismissed-banners": {
274
+ parameters: {
275
+ query?: never;
276
+ header?: never;
277
+ path?: never;
278
+ cookie?: never;
279
+ };
280
+ /**
281
+ * List dismissed banner IDs for the current user
282
+ * @description Returns the list of banner IDs that the authenticated user has dismissed.
283
+ * Used to suppress previously-dismissed UI banners on page load.
284
+ */
285
+ get: operations["getDismissedBanners"];
286
+ put?: never;
287
+ post?: never;
288
+ delete?: never;
289
+ options?: never;
290
+ head?: never;
291
+ patch?: never;
292
+ trace?: never;
293
+ };
294
+ "/api/user/preferences/dismissed-banners/{bannerId}": {
295
+ parameters: {
296
+ query?: never;
297
+ header?: never;
298
+ path?: never;
299
+ cookie?: never;
300
+ };
301
+ get?: never;
302
+ put?: never;
303
+ /** Dismiss a banner for the current user */
304
+ post: operations["dismissBanner"];
305
+ delete?: never;
306
+ options?: never;
307
+ head?: never;
308
+ patch?: never;
309
+ trace?: never;
310
+ };
311
+ "/api/user/resync-slack-avatar": {
312
+ parameters: {
313
+ query?: never;
314
+ header?: never;
315
+ path?: never;
316
+ cookie?: never;
317
+ };
318
+ get?: never;
319
+ put?: never;
320
+ /**
321
+ * Resync user avatar from Slack
322
+ * @description Manually resync the current user's avatar from their Slack profile.
323
+ * Requires user to have a linked Slack identity and the org to have an active Slack connection.
324
+ */
325
+ post: operations["resyncSlackAvatar"];
326
+ delete?: never;
327
+ options?: never;
328
+ head?: never;
329
+ patch?: never;
330
+ trace?: never;
331
+ };
273
332
  "/connect/{provider}": {
274
333
  parameters: {
275
334
  query?: never;
@@ -444,6 +503,70 @@ export interface paths {
444
503
  patch?: never;
445
504
  trace?: never;
446
505
  };
506
+ "/api/executions/{executionId}/undo": {
507
+ parameters: {
508
+ query?: never;
509
+ header?: never;
510
+ path?: never;
511
+ cookie?: never;
512
+ };
513
+ get?: never;
514
+ put?: never;
515
+ /**
516
+ * Undo a completed execution
517
+ * @description Undoes a completed execution within its undo window.
518
+ * The caller must be the same user who initiated the execution.
519
+ * Idempotent: if undo was already performed, returns the existing result.
520
+ */
521
+ post: operations["undoExecution"];
522
+ delete?: never;
523
+ options?: never;
524
+ head?: never;
525
+ patch?: never;
526
+ trace?: never;
527
+ };
528
+ "/api/executions/{executionId}/confirm": {
529
+ parameters: {
530
+ query?: never;
531
+ header?: never;
532
+ path?: never;
533
+ cookie?: never;
534
+ };
535
+ get?: never;
536
+ put?: never;
537
+ /**
538
+ * Confirm a pending execution
539
+ * @description Confirms a pending execution. Serialized via advisory lock.
540
+ * The caller must be the same user who initiated the execution.
541
+ */
542
+ post: operations["confirmExecution"];
543
+ delete?: never;
544
+ options?: never;
545
+ head?: never;
546
+ patch?: never;
547
+ trace?: never;
548
+ };
549
+ "/api/executions/{executionId}/reject": {
550
+ parameters: {
551
+ query?: never;
552
+ header?: never;
553
+ path?: never;
554
+ cookie?: never;
555
+ };
556
+ get?: never;
557
+ put?: never;
558
+ /**
559
+ * Reject a pending execution
560
+ * @description Rejects a pending execution. Serialized via advisory lock.
561
+ * The caller must be the same user who initiated the execution.
562
+ */
563
+ post: operations["rejectExecution"];
564
+ delete?: never;
565
+ options?: never;
566
+ head?: never;
567
+ patch?: never;
568
+ trace?: never;
569
+ };
447
570
  "/api/timeline": {
448
571
  parameters: {
449
572
  query?: never;
@@ -1156,6 +1279,50 @@ export interface paths {
1156
1279
  patch?: never;
1157
1280
  trace?: never;
1158
1281
  };
1282
+ "/api/workspace/resync-slack-logo": {
1283
+ parameters: {
1284
+ query?: never;
1285
+ header?: never;
1286
+ path?: never;
1287
+ cookie?: never;
1288
+ };
1289
+ get?: never;
1290
+ put?: never;
1291
+ /**
1292
+ * Resync workspace logo from Slack
1293
+ * @description Manually resync the workspace logo from the connected Slack workspace icon.
1294
+ * Requires org.view_workspace capability and an active Slack connection.
1295
+ */
1296
+ post: operations["resyncSlackLogo"];
1297
+ delete?: never;
1298
+ options?: never;
1299
+ head?: never;
1300
+ patch?: never;
1301
+ trace?: never;
1302
+ };
1303
+ "/api/workspace/resolve-path": {
1304
+ parameters: {
1305
+ query?: never;
1306
+ header?: never;
1307
+ path?: never;
1308
+ cookie?: never;
1309
+ };
1310
+ get?: never;
1311
+ put?: never;
1312
+ /**
1313
+ * Resolve a tokenized URL path to hydrated navigation layers
1314
+ * @description Resolves a tokenized workspace URL path to hydrated entity data.
1315
+ * Used by the frontend for cold-start deep linking and browser back/forward.
1316
+ * Path segments follow a [type, slug] pair grammar: "dept" before "team",
1317
+ * "team" requires preceding "dept", and "members" must be terminal.
1318
+ */
1319
+ post: operations["resolveWorkspacePath"];
1320
+ delete?: never;
1321
+ options?: never;
1322
+ head?: never;
1323
+ patch?: never;
1324
+ trace?: never;
1325
+ };
1159
1326
  "/api/account/sessions": {
1160
1327
  parameters: {
1161
1328
  query?: never;
@@ -1981,6 +2148,57 @@ export interface components {
1981
2148
  displayName: string;
1982
2149
  };
1983
2150
  };
2151
+ ResyncSlackLogoResponse: {
2152
+ /** @constant */
2153
+ success: true;
2154
+ logoUrl: string | null;
2155
+ };
2156
+ ResyncSlackAvatarResponse: {
2157
+ /** @constant */
2158
+ success: true;
2159
+ avatar: components["schemas"]["ResolvedAvatar"];
2160
+ };
2161
+ ResolvedAvatar: {
2162
+ /** @enum {string} */
2163
+ source: "slack" | "initials";
2164
+ /** @description Slack profile image URL (present only if source is slack) */
2165
+ url?: string;
2166
+ /** @description User initials for fallback display */
2167
+ initials: string;
2168
+ };
2169
+ ResolvedLayer: components["schemas"]["ResolvedLayerDept"] | components["schemas"]["ResolvedLayerTeam"] | components["schemas"]["ResolvedLayerMembers"];
2170
+ ResolvedLayerDept: {
2171
+ /**
2172
+ * @description discriminator enum property added by openapi-typescript
2173
+ * @enum {string}
2174
+ */
2175
+ type: "dept";
2176
+ entity: components["schemas"]["ResolvedLayerEntity"];
2177
+ };
2178
+ ResolvedLayerTeam: {
2179
+ /**
2180
+ * @description discriminator enum property added by openapi-typescript
2181
+ * @enum {string}
2182
+ */
2183
+ type: "team";
2184
+ entity: components["schemas"]["ResolvedLayerEntity"];
2185
+ };
2186
+ ResolvedLayerMembers: {
2187
+ /**
2188
+ * @description discriminator enum property added by openapi-typescript
2189
+ * @enum {string}
2190
+ */
2191
+ type: "members";
2192
+ /** @enum {string} */
2193
+ scope: "org" | "dept" | "team";
2194
+ };
2195
+ ResolvedLayerEntity: {
2196
+ /** Format: uuid */
2197
+ id: string;
2198
+ name: string;
2199
+ slug: string;
2200
+ memberCount: number;
2201
+ };
1984
2202
  UserOrgsResponse: {
1985
2203
  orgs: components["schemas"]["UserOrgMembership"][];
1986
2204
  };
@@ -2257,6 +2475,46 @@ export interface components {
2257
2475
  message: string;
2258
2476
  }[];
2259
2477
  };
2478
+ ExecutionLifecycleError: {
2479
+ /** @enum {string} */
2480
+ code: "EXECUTION_CONFLICT";
2481
+ executionId: string;
2482
+ currentState: string;
2483
+ } | {
2484
+ /** @enum {string} */
2485
+ code: "EXECUTION_EXPIRED";
2486
+ executionId: string;
2487
+ /** Format: date-time */
2488
+ expiredAt: string;
2489
+ } | {
2490
+ /** @enum {string} */
2491
+ code: "EXECUTION_FORBIDDEN";
2492
+ executionId: string;
2493
+ requiredRole: string;
2494
+ };
2495
+ UndoResultData: {
2496
+ /** @description Links back to original action */
2497
+ actionId: string;
2498
+ /** @description Original execution row ID */
2499
+ executionId: string;
2500
+ /** @description New undo audit row ID (append-only) */
2501
+ undoExecutionId: string;
2502
+ /** @enum {string} */
2503
+ status: "success" | "failed";
2504
+ error?: string;
2505
+ };
2506
+ ConfirmExecutionResponse: {
2507
+ /** @enum {string} */
2508
+ status: "executing" | "blocked_pending_approval" | "already_confirmed" | "awaiting_approval";
2509
+ code?: string;
2510
+ executionId?: string;
2511
+ /** @description ExecutionResultData when execution completes inline */
2512
+ result?: Record<string, never>;
2513
+ };
2514
+ RejectExecutionResponse: {
2515
+ /** @enum {string} */
2516
+ status: "cancelled";
2517
+ };
2260
2518
  ExecutionSummary: {
2261
2519
  /** Format: uuid */
2262
2520
  executionId: string;
@@ -3284,45 +3542,28 @@ export interface operations {
3284
3542
  };
3285
3543
  };
3286
3544
  };
3287
- initiateOAuth: {
3545
+ getDismissedBanners: {
3288
3546
  parameters: {
3289
- query?: {
3290
- /**
3291
- * @deprecated
3292
- * @description DEPRECATED: Organization ID derived from session.
3293
- * Query parameter accepted only in dev mode for backwards compatibility.
3294
- * Production: orgId is always derived from authenticated session.
3295
- */
3296
- orgId?: string;
3297
- };
3547
+ query?: never;
3298
3548
  header?: never;
3299
- path: {
3300
- provider: components["schemas"]["OAuthProvider"];
3301
- };
3549
+ path?: never;
3302
3550
  cookie?: never;
3303
3551
  };
3304
3552
  requestBody?: never;
3305
3553
  responses: {
3306
- /** @description Redirect to OAuth provider */
3307
- 302: {
3308
- headers: {
3309
- /** @description OAuth provider authorization URL */
3310
- Location?: string;
3311
- [name: string]: unknown;
3312
- };
3313
- content?: never;
3314
- };
3315
- /** @description Invalid provider or missing/invalid orgId */
3316
- 400: {
3554
+ /** @description Dismissed banner IDs */
3555
+ 200: {
3317
3556
  headers: {
3318
3557
  [name: string]: unknown;
3319
3558
  };
3320
3559
  content: {
3321
- "application/json": components["schemas"]["ErrorResponse"];
3560
+ "application/json": {
3561
+ bannerIds: string[];
3562
+ };
3322
3563
  };
3323
3564
  };
3324
- /** @description OAuth initialization failed */
3325
- 500: {
3565
+ /** @description Not authenticated */
3566
+ 401: {
3326
3567
  headers: {
3327
3568
  [name: string]: unknown;
3328
3569
  };
@@ -3332,94 +3573,231 @@ export interface operations {
3332
3573
  };
3333
3574
  };
3334
3575
  };
3335
- handleOAuthCallback: {
3576
+ dismissBanner: {
3336
3577
  parameters: {
3337
- query?: {
3338
- /** @description Authorization code from provider */
3339
- code?: string;
3340
- /** @description State token for CSRF protection */
3341
- state?: string;
3342
- /** @description Error code from provider (if authorization denied) */
3343
- error?: string;
3344
- /** @description Human-readable error description from provider */
3345
- error_description?: string;
3346
- };
3578
+ query?: never;
3347
3579
  header?: never;
3348
3580
  path: {
3349
- provider: components["schemas"]["OAuthProvider"];
3581
+ bannerId: string;
3350
3582
  };
3351
3583
  cookie?: never;
3352
3584
  };
3353
3585
  requestBody?: never;
3354
3586
  responses: {
3355
- /** @description Authorization successful (HTML page) */
3587
+ /** @description Banner dismissed */
3356
3588
  200: {
3357
3589
  headers: {
3358
3590
  [name: string]: unknown;
3359
3591
  };
3360
3592
  content: {
3361
- "text/html": string;
3593
+ "application/json": {
3594
+ success: boolean;
3595
+ };
3362
3596
  };
3363
3597
  };
3364
- /** @description Authorization failed or invalid request (HTML page) */
3598
+ /** @description Invalid banner ID */
3365
3599
  400: {
3366
3600
  headers: {
3367
3601
  [name: string]: unknown;
3368
3602
  };
3369
3603
  content: {
3370
- "text/html": string;
3604
+ "application/json": components["schemas"]["ErrorResponse"];
3371
3605
  };
3372
3606
  };
3373
- };
3374
- };
3375
- getCapabilities: {
3376
- parameters: {
3377
- query?: never;
3378
- header?: never;
3379
- path?: never;
3380
- cookie?: never;
3381
- };
3382
- requestBody?: never;
3383
- responses: {
3384
- /** @description List of available tools */
3385
- 200: {
3607
+ /** @description Not authenticated */
3608
+ 401: {
3386
3609
  headers: {
3387
3610
  [name: string]: unknown;
3388
3611
  };
3389
3612
  content: {
3390
- "application/json": components["schemas"]["ToolDiscoveryResponse"];
3613
+ "application/json": components["schemas"]["ErrorResponse"];
3391
3614
  };
3392
3615
  };
3393
3616
  };
3394
3617
  };
3395
- postAiChat: {
3618
+ resyncSlackAvatar: {
3396
3619
  parameters: {
3397
3620
  query?: never;
3398
3621
  header?: never;
3399
3622
  path?: never;
3400
3623
  cookie?: never;
3401
3624
  };
3402
- requestBody: {
3403
- content: {
3404
- "application/json": components["schemas"]["ChatRequest"];
3405
- };
3406
- };
3625
+ requestBody?: never;
3407
3626
  responses: {
3408
- /** @description SSE stream of chat responses */
3627
+ /** @description Avatar resynced successfully */
3409
3628
  200: {
3410
3629
  headers: {
3411
- /** @description AI SDK stream protocol version */
3412
- "x-vercel-ai-ui-message-stream"?: "v1";
3413
3630
  [name: string]: unknown;
3414
3631
  };
3415
3632
  content: {
3416
- "text/event-stream": string;
3633
+ "application/json": components["schemas"]["ResyncSlackAvatarResponse"];
3417
3634
  };
3418
3635
  };
3419
- };
3420
- };
3421
- getExecutionTimeline: {
3422
- parameters: {
3636
+ /** @description Not authenticated */
3637
+ 401: {
3638
+ headers: {
3639
+ [name: string]: unknown;
3640
+ };
3641
+ content: {
3642
+ "application/json": components["schemas"]["ErrorResponse"];
3643
+ };
3644
+ };
3645
+ /** @description User not found */
3646
+ 404: {
3647
+ headers: {
3648
+ [name: string]: unknown;
3649
+ };
3650
+ content: {
3651
+ "application/json": components["schemas"]["ErrorResponse"];
3652
+ };
3653
+ };
3654
+ /** @description Rate limit exceeded */
3655
+ 429: {
3656
+ headers: {
3657
+ [name: string]: unknown;
3658
+ };
3659
+ content: {
3660
+ "application/json": components["schemas"]["ErrorResponse"];
3661
+ };
3662
+ };
3663
+ };
3664
+ };
3665
+ initiateOAuth: {
3666
+ parameters: {
3667
+ query?: {
3668
+ /**
3669
+ * @deprecated
3670
+ * @description DEPRECATED: Organization ID derived from session.
3671
+ * Query parameter accepted only in dev mode for backwards compatibility.
3672
+ * Production: orgId is always derived from authenticated session.
3673
+ */
3674
+ orgId?: string;
3675
+ };
3676
+ header?: never;
3677
+ path: {
3678
+ provider: components["schemas"]["OAuthProvider"];
3679
+ };
3680
+ cookie?: never;
3681
+ };
3682
+ requestBody?: never;
3683
+ responses: {
3684
+ /** @description Redirect to OAuth provider */
3685
+ 302: {
3686
+ headers: {
3687
+ /** @description OAuth provider authorization URL */
3688
+ Location?: string;
3689
+ [name: string]: unknown;
3690
+ };
3691
+ content?: never;
3692
+ };
3693
+ /** @description Invalid provider or missing/invalid orgId */
3694
+ 400: {
3695
+ headers: {
3696
+ [name: string]: unknown;
3697
+ };
3698
+ content: {
3699
+ "application/json": components["schemas"]["ErrorResponse"];
3700
+ };
3701
+ };
3702
+ /** @description OAuth initialization failed */
3703
+ 500: {
3704
+ headers: {
3705
+ [name: string]: unknown;
3706
+ };
3707
+ content: {
3708
+ "application/json": components["schemas"]["ErrorResponse"];
3709
+ };
3710
+ };
3711
+ };
3712
+ };
3713
+ handleOAuthCallback: {
3714
+ parameters: {
3715
+ query?: {
3716
+ /** @description Authorization code from provider */
3717
+ code?: string;
3718
+ /** @description State token for CSRF protection */
3719
+ state?: string;
3720
+ /** @description Error code from provider (if authorization denied) */
3721
+ error?: string;
3722
+ /** @description Human-readable error description from provider */
3723
+ error_description?: string;
3724
+ };
3725
+ header?: never;
3726
+ path: {
3727
+ provider: components["schemas"]["OAuthProvider"];
3728
+ };
3729
+ cookie?: never;
3730
+ };
3731
+ requestBody?: never;
3732
+ responses: {
3733
+ /** @description Authorization successful (HTML page) */
3734
+ 200: {
3735
+ headers: {
3736
+ [name: string]: unknown;
3737
+ };
3738
+ content: {
3739
+ "text/html": string;
3740
+ };
3741
+ };
3742
+ /** @description Authorization failed or invalid request (HTML page) */
3743
+ 400: {
3744
+ headers: {
3745
+ [name: string]: unknown;
3746
+ };
3747
+ content: {
3748
+ "text/html": string;
3749
+ };
3750
+ };
3751
+ };
3752
+ };
3753
+ getCapabilities: {
3754
+ parameters: {
3755
+ query?: never;
3756
+ header?: never;
3757
+ path?: never;
3758
+ cookie?: never;
3759
+ };
3760
+ requestBody?: never;
3761
+ responses: {
3762
+ /** @description List of available tools */
3763
+ 200: {
3764
+ headers: {
3765
+ [name: string]: unknown;
3766
+ };
3767
+ content: {
3768
+ "application/json": components["schemas"]["ToolDiscoveryResponse"];
3769
+ };
3770
+ };
3771
+ };
3772
+ };
3773
+ postAiChat: {
3774
+ parameters: {
3775
+ query?: never;
3776
+ header?: never;
3777
+ path?: never;
3778
+ cookie?: never;
3779
+ };
3780
+ requestBody: {
3781
+ content: {
3782
+ "application/json": components["schemas"]["ChatRequest"];
3783
+ };
3784
+ };
3785
+ responses: {
3786
+ /** @description SSE stream of chat responses */
3787
+ 200: {
3788
+ headers: {
3789
+ /** @description AI SDK stream protocol version */
3790
+ "x-vercel-ai-ui-message-stream"?: "v1";
3791
+ [name: string]: unknown;
3792
+ };
3793
+ content: {
3794
+ "text/event-stream": string;
3795
+ };
3796
+ };
3797
+ };
3798
+ };
3799
+ getExecutionTimeline: {
3800
+ parameters: {
3423
3801
  query?: never;
3424
3802
  header?: never;
3425
3803
  path: {
@@ -3630,6 +4008,192 @@ export interface operations {
3630
4008
  };
3631
4009
  };
3632
4010
  };
4011
+ undoExecution: {
4012
+ parameters: {
4013
+ query?: never;
4014
+ header?: never;
4015
+ path: {
4016
+ /** @description Execution ID (UUID v4) */
4017
+ executionId: string;
4018
+ };
4019
+ cookie?: never;
4020
+ };
4021
+ requestBody?: never;
4022
+ responses: {
4023
+ /** @description Undo result */
4024
+ 200: {
4025
+ headers: {
4026
+ [name: string]: unknown;
4027
+ };
4028
+ content: {
4029
+ "application/json": components["schemas"]["UndoResultData"];
4030
+ };
4031
+ };
4032
+ /** @description Invalid execution ID format or execution not in undoable state */
4033
+ 400: {
4034
+ headers: {
4035
+ [name: string]: unknown;
4036
+ };
4037
+ content: {
4038
+ "application/json": components["schemas"]["ErrorResponse"];
4039
+ };
4040
+ };
4041
+ /** @description Insufficient permissions (not the initiating user) */
4042
+ 403: {
4043
+ headers: {
4044
+ [name: string]: unknown;
4045
+ };
4046
+ content: {
4047
+ "application/json": components["schemas"]["ExecutionLifecycleError"];
4048
+ };
4049
+ };
4050
+ /** @description Execution not found */
4051
+ 404: {
4052
+ headers: {
4053
+ [name: string]: unknown;
4054
+ };
4055
+ content: {
4056
+ "application/json": components["schemas"]["ErrorResponse"];
4057
+ };
4058
+ };
4059
+ /** @description Execution in wrong state (e.g. undo window expired) */
4060
+ 409: {
4061
+ headers: {
4062
+ [name: string]: unknown;
4063
+ };
4064
+ content: {
4065
+ "application/json": components["schemas"]["ExecutionLifecycleError"];
4066
+ };
4067
+ };
4068
+ };
4069
+ };
4070
+ confirmExecution: {
4071
+ parameters: {
4072
+ query?: never;
4073
+ header?: never;
4074
+ path: {
4075
+ /** @description Execution ID (UUID v4) */
4076
+ executionId: string;
4077
+ };
4078
+ cookie?: never;
4079
+ };
4080
+ requestBody?: never;
4081
+ responses: {
4082
+ /** @description Confirmation result */
4083
+ 200: {
4084
+ headers: {
4085
+ [name: string]: unknown;
4086
+ };
4087
+ content: {
4088
+ "application/json": components["schemas"]["ConfirmExecutionResponse"];
4089
+ };
4090
+ };
4091
+ /** @description Invalid execution ID format */
4092
+ 400: {
4093
+ headers: {
4094
+ [name: string]: unknown;
4095
+ };
4096
+ content: {
4097
+ "application/json": components["schemas"]["ErrorResponse"];
4098
+ };
4099
+ };
4100
+ /** @description Insufficient permissions (not the initiating user) */
4101
+ 403: {
4102
+ headers: {
4103
+ [name: string]: unknown;
4104
+ };
4105
+ content: {
4106
+ "application/json": components["schemas"]["ExecutionLifecycleError"];
4107
+ };
4108
+ };
4109
+ /** @description Execution not found */
4110
+ 404: {
4111
+ headers: {
4112
+ [name: string]: unknown;
4113
+ };
4114
+ content: {
4115
+ "application/json": components["schemas"]["ErrorResponse"];
4116
+ };
4117
+ };
4118
+ /** @description Execution not in pending_confirmation state */
4119
+ 409: {
4120
+ headers: {
4121
+ [name: string]: unknown;
4122
+ };
4123
+ content: {
4124
+ "application/json": components["schemas"]["ExecutionLifecycleError"];
4125
+ };
4126
+ };
4127
+ /** @description Confirmation has expired */
4128
+ 410: {
4129
+ headers: {
4130
+ [name: string]: unknown;
4131
+ };
4132
+ content: {
4133
+ "application/json": components["schemas"]["ExecutionLifecycleError"];
4134
+ };
4135
+ };
4136
+ };
4137
+ };
4138
+ rejectExecution: {
4139
+ parameters: {
4140
+ query?: never;
4141
+ header?: never;
4142
+ path: {
4143
+ /** @description Execution ID (UUID v4) */
4144
+ executionId: string;
4145
+ };
4146
+ cookie?: never;
4147
+ };
4148
+ requestBody?: never;
4149
+ responses: {
4150
+ /** @description Rejection result */
4151
+ 200: {
4152
+ headers: {
4153
+ [name: string]: unknown;
4154
+ };
4155
+ content: {
4156
+ "application/json": components["schemas"]["RejectExecutionResponse"];
4157
+ };
4158
+ };
4159
+ /** @description Invalid execution ID format */
4160
+ 400: {
4161
+ headers: {
4162
+ [name: string]: unknown;
4163
+ };
4164
+ content: {
4165
+ "application/json": components["schemas"]["ErrorResponse"];
4166
+ };
4167
+ };
4168
+ /** @description Insufficient permissions (not the initiating user) */
4169
+ 403: {
4170
+ headers: {
4171
+ [name: string]: unknown;
4172
+ };
4173
+ content: {
4174
+ "application/json": components["schemas"]["ExecutionLifecycleError"];
4175
+ };
4176
+ };
4177
+ /** @description Execution not found */
4178
+ 404: {
4179
+ headers: {
4180
+ [name: string]: unknown;
4181
+ };
4182
+ content: {
4183
+ "application/json": components["schemas"]["ErrorResponse"];
4184
+ };
4185
+ };
4186
+ /** @description Execution not in pending_confirmation state */
4187
+ 409: {
4188
+ headers: {
4189
+ [name: string]: unknown;
4190
+ };
4191
+ content: {
4192
+ "application/json": components["schemas"]["ExecutionLifecycleError"];
4193
+ };
4194
+ };
4195
+ };
4196
+ };
3633
4197
  getTimelineUI: {
3634
4198
  parameters: {
3635
4199
  query?: {
@@ -5194,6 +5758,127 @@ export interface operations {
5194
5758
  };
5195
5759
  };
5196
5760
  };
5761
+ resyncSlackLogo: {
5762
+ parameters: {
5763
+ query?: never;
5764
+ header?: never;
5765
+ path?: never;
5766
+ cookie?: never;
5767
+ };
5768
+ requestBody?: never;
5769
+ responses: {
5770
+ /** @description Logo resynced */
5771
+ 200: {
5772
+ headers: {
5773
+ [name: string]: unknown;
5774
+ };
5775
+ content: {
5776
+ "application/json": components["schemas"]["ResyncSlackLogoResponse"];
5777
+ };
5778
+ };
5779
+ /** @description Slack not connected */
5780
+ 400: {
5781
+ headers: {
5782
+ [name: string]: unknown;
5783
+ };
5784
+ content: {
5785
+ "application/json": components["schemas"]["ErrorResponse"];
5786
+ };
5787
+ };
5788
+ /** @description Not authenticated */
5789
+ 401: {
5790
+ headers: {
5791
+ [name: string]: unknown;
5792
+ };
5793
+ content: {
5794
+ "application/json": components["schemas"]["ErrorResponse"];
5795
+ };
5796
+ };
5797
+ /** @description No org.view_workspace capability */
5798
+ 403: {
5799
+ headers: {
5800
+ [name: string]: unknown;
5801
+ };
5802
+ content: {
5803
+ "application/json": components["schemas"]["ErrorResponse"];
5804
+ };
5805
+ };
5806
+ /** @description Rate limit exceeded */
5807
+ 429: {
5808
+ headers: {
5809
+ [name: string]: unknown;
5810
+ };
5811
+ content: {
5812
+ "application/json": components["schemas"]["ErrorResponse"];
5813
+ };
5814
+ };
5815
+ };
5816
+ };
5817
+ resolveWorkspacePath: {
5818
+ parameters: {
5819
+ query?: never;
5820
+ header?: never;
5821
+ path?: never;
5822
+ cookie?: never;
5823
+ };
5824
+ requestBody: {
5825
+ content: {
5826
+ "application/json": {
5827
+ /** @description Flat tokenized segments, e.g. ["dept", "engineering", "team", "front-end"] */
5828
+ path: string[];
5829
+ };
5830
+ };
5831
+ };
5832
+ responses: {
5833
+ /** @description Resolved layers */
5834
+ 200: {
5835
+ headers: {
5836
+ [name: string]: unknown;
5837
+ };
5838
+ content: {
5839
+ "application/json": {
5840
+ layers: components["schemas"]["ResolvedLayer"][];
5841
+ };
5842
+ };
5843
+ };
5844
+ /** @description Invalid segment grammar */
5845
+ 400: {
5846
+ headers: {
5847
+ [name: string]: unknown;
5848
+ };
5849
+ content: {
5850
+ "application/json": components["schemas"]["ErrorResponse"];
5851
+ };
5852
+ };
5853
+ /** @description Not authenticated */
5854
+ 401: {
5855
+ headers: {
5856
+ [name: string]: unknown;
5857
+ };
5858
+ content: {
5859
+ "application/json": components["schemas"]["ErrorResponse"];
5860
+ };
5861
+ };
5862
+ /** @description No org.view_workspace capability */
5863
+ 403: {
5864
+ headers: {
5865
+ [name: string]: unknown;
5866
+ };
5867
+ content: {
5868
+ "application/json": components["schemas"]["ErrorResponse"];
5869
+ };
5870
+ };
5871
+ /** @description Entity slug not found */
5872
+ 404: {
5873
+ headers: {
5874
+ [name: string]: unknown;
5875
+ };
5876
+ content: {
5877
+ "application/json": components["schemas"]["ErrorResponse"];
5878
+ };
5879
+ };
5880
+ };
5881
+ };
5197
5882
  listAccountSessions: {
5198
5883
  parameters: {
5199
5884
  query?: never;
@@ -5513,7 +6198,12 @@ export interface operations {
5513
6198
  };
5514
6199
  listChats: {
5515
6200
  parameters: {
5516
- query?: never;
6201
+ query?: {
6202
+ search?: string;
6203
+ limit?: number;
6204
+ offset?: number;
6205
+ includePinned?: boolean;
6206
+ };
5517
6207
  header?: never;
5518
6208
  path?: never;
5519
6209
  cookie?: never;
@@ -23,9 +23,12 @@ export const openApiRoutes = {
23
23
  '/api/drive/files/recent': ['GET'],
24
24
  '/api/drive/files/{fileId}/content': ['GET'],
25
25
  '/api/executions': ['GET', 'POST'],
26
+ '/api/executions/{executionId}/confirm': ['POST'],
26
27
  '/api/executions/{executionId}/explanation': ['GET'],
28
+ '/api/executions/{executionId}/reject': ['POST'],
27
29
  '/api/executions/{executionId}/summary': ['GET'],
28
30
  '/api/executions/{executionId}/timeline': ['GET'],
31
+ '/api/executions/{executionId}/undo': ['POST'],
29
32
  '/api/goals/docs/{slug}': ['GET'],
30
33
  '/api/goals/docs/{slug}/content': ['PUT'],
31
34
  '/api/goals/docs/{slug}/sharing': ['GET'],
@@ -40,6 +43,8 @@ export const openApiRoutes = {
40
43
  '/api/org/cancel-deletion': ['POST'],
41
44
  '/api/org/delete': ['POST'],
42
45
  '/api/org/deletion-eligibility': ['GET'],
46
+ '/api/org/system-events': ['GET'],
47
+ '/api/org/system-events/{id}/acknowledge': ['POST'],
43
48
  '/api/org/transfer-eligibility': ['GET'],
44
49
  '/api/org/transfer-ownership': ['DELETE', 'POST'],
45
50
  '/api/org/transfer-ownership/accept': ['POST'],
@@ -59,7 +64,10 @@ export const openApiRoutes = {
59
64
  '/api/user/active-org': ['POST'],
60
65
  '/api/user/orgs': ['GET'],
61
66
  '/api/user/orgs/{orgId}/leave': ['POST'],
67
+ '/api/user/preferences/dismissed-banners': ['GET'],
68
+ '/api/user/preferences/dismissed-banners/{bannerId}': ['POST'],
62
69
  '/api/user/profile': ['PATCH'],
70
+ '/api/user/resync-slack-avatar': ['POST'],
63
71
  '/api/workspace': ['GET'],
64
72
  '/api/workspace/access': ['GET'],
65
73
  '/api/workspace/audit': ['GET'],
@@ -77,6 +85,8 @@ export const openApiRoutes = {
77
85
  '/api/workspace/members': ['GET'],
78
86
  '/api/workspace/members/{id}': ['DELETE'],
79
87
  '/api/workspace/members/{id}/role': ['PATCH'],
88
+ '/api/workspace/resolve-path': ['POST'],
89
+ '/api/workspace/resync-slack-logo': ['POST'],
80
90
  '/auth/logout': ['POST'],
81
91
  '/auth/me': ['GET'],
82
92
  '/auth/sso/callback': ['GET', 'POST'],
@@ -85,6 +95,7 @@ export const openApiRoutes = {
85
95
  '/auth/verify': ['POST'],
86
96
  '/connect/{provider}': ['GET'],
87
97
  '/healthz': ['GET'],
98
+ '/healthz/details': ['GET'],
88
99
  '/oauth/{provider}/callback': ['GET'],
89
100
  } as const;
90
101