@thinkai/tai-api-contract 2.56.0 → 2.58.0-pr.901.2e63dee8

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.
@@ -1,7 +1,7 @@
1
1
  openapi: 3.0.3
2
2
  info:
3
3
  title: ThinkAI API
4
- version: 2.56.0
4
+ version: 2.57.0
5
5
  description: >
6
6
  Contract surface for the AI Driven SDLC backend used by ThinkAI.
7
7
  Workspace-scoped routes use `/workspaces/{workspaceId}/...`.
@@ -64,6 +64,8 @@ tags:
64
64
  description: >
65
65
  Data subject access / erasure / portability request intake and privacy-ops management (DSAR, issue #611).
66
66
  Public and authenticated submission; platform-admin queue, export, and fulfillment.
67
+ - name: Platform
68
+ description: Platform-wide banner surfaces (global outage/maintenance banner, issue #284).
67
69
 
68
70
  paths:
69
71
  /admin/users/{userId}:
@@ -694,6 +696,98 @@ paths:
694
696
  schema:
695
697
  $ref: "#/components/schemas/ErrorMessageDto"
696
698
 
699
+ /platform/banner:
700
+ get:
701
+ tags: [Platform]
702
+ summary: Global platform banner
703
+ operationId: getPlatformBanner
704
+ security: []
705
+ description: >
706
+ Returns the active global outage or maintenance banner for the platform shell, if any.
707
+ No authentication required so signed-in users can see incident messaging during partial outages.
708
+ When both a database-managed banner and a runtime-config fallback exist, the database value wins.
709
+ responses:
710
+ "200":
711
+ description: Active platform banner (if any)
712
+ content:
713
+ application/json:
714
+ schema:
715
+ $ref: "#/components/schemas/PlatformBannerViewDto"
716
+
717
+ /admin/platform/banner:
718
+ get:
719
+ tags: [PlatformAdmin]
720
+ summary: Read stored and effective global platform banner
721
+ operationId: adminGetPlatformBanner
722
+ description: >
723
+ Platform admins only. Returns the database-stored banner (`stored`) for editing and the
724
+ merged banner users see (`effective`, DB wins over runtime-config fallback). Requires Bearer
725
+ JWT from an email on `PLATFORM_ADMIN_EMAILS`.
726
+ responses:
727
+ "200":
728
+ description: Admin platform banner view
729
+ content:
730
+ application/json:
731
+ schema:
732
+ $ref: "#/components/schemas/PlatformAdminBannerDto"
733
+ "401":
734
+ $ref: "#/components/responses/Unauthorized"
735
+ "403":
736
+ description: Caller is not a platform admin.
737
+ content:
738
+ application/json:
739
+ schema:
740
+ $ref: "#/components/schemas/ErrorMessageDto"
741
+ "503":
742
+ description: Platform banner persistence unavailable.
743
+ content:
744
+ application/json:
745
+ schema:
746
+ $ref: "#/components/schemas/ErrorMessageDto"
747
+ put:
748
+ tags: [PlatformAdmin]
749
+ summary: Set or clear global platform banner
750
+ operationId: adminUpsertPlatformBanner
751
+ description: >
752
+ Platform admins may activate, update, or clear (`banner: null`) the global outage/maintenance banner
753
+ shown in the authenticated SPA shell. Requires Bearer JWT from an email on `PLATFORM_ADMIN_EMAILS`.
754
+ requestBody:
755
+ required: true
756
+ content:
757
+ application/json:
758
+ schema:
759
+ $ref: "#/components/schemas/PlatformBannerUpsertDto"
760
+ responses:
761
+ "200":
762
+ description: Updated platform banner
763
+ content:
764
+ application/json:
765
+ schema:
766
+ $ref: "#/components/schemas/PlatformBannerViewDto"
767
+ "400":
768
+ description: Invalid banner payload
769
+ content:
770
+ application/json:
771
+ schema:
772
+ $ref: "#/components/schemas/ErrorMessageDto"
773
+ "401":
774
+ $ref: "#/components/responses/Unauthorized"
775
+ "403":
776
+ description: Caller is not a platform admin.
777
+ content:
778
+ application/json:
779
+ schema:
780
+ $ref: "#/components/schemas/ErrorMessageDto"
781
+ example:
782
+ error: Forbidden
783
+ code: forbidden
784
+ "503":
785
+ description: Platform banner persistence unavailable.
786
+ content:
787
+ application/json:
788
+ schema:
789
+ $ref: "#/components/schemas/ErrorMessageDto"
790
+
697
791
  /me:
698
792
  get:
699
793
  tags: [Me]
@@ -10122,7 +10216,14 @@ components:
10122
10216
 
10123
10217
  GithubInstallationSummaryDto:
10124
10218
  type: object
10125
- required: [installationId, account, repos, permissionsUpgradeRequired]
10219
+ required:
10220
+ - installationId
10221
+ - account
10222
+ - repos
10223
+ - permissionsUpgradeRequired
10224
+ - corePermissionsOk
10225
+ - writePermissionsOk
10226
+ - writePermissionsUpgradeRequired
10126
10227
  properties:
10127
10228
  installationId:
10128
10229
  type: string
@@ -10144,16 +10245,38 @@ components:
10144
10245
  permissionsUpgradeRequired:
10145
10246
  type: boolean
10146
10247
  description: >
10147
- True when this installation's granted permissions are below what the ThinkAI GitHub App
10148
- currently requests.
10248
+ True when this installation lacks core read permissions required for connect and analysis.
10249
+ Alias for `!corePermissionsOk`.
10250
+ corePermissionsOk:
10251
+ type: boolean
10252
+ description: >
10253
+ True when installation grants read permissions for repository analysis (contents, metadata,
10254
+ pull requests, and members for org installs).
10255
+ writePermissionsOk:
10256
+ type: boolean
10257
+ description: >
10258
+ True when installation grants write permissions required for automated fix PRs.
10259
+ writePermissionsUpgradeRequired:
10260
+ type: boolean
10261
+ description: Alias for `!writePermissionsOk`.
10149
10262
  missingPermissions:
10150
10263
  type: array
10151
10264
  items:
10152
10265
  $ref: "#/components/schemas/GithubMissingPermissionDto"
10266
+ description: Core read permissions still needed for connect and analysis.
10267
+ missingWritePermissions:
10268
+ type: array
10269
+ items:
10270
+ $ref: "#/components/schemas/GithubMissingPermissionDto"
10271
+ description: Write permissions still needed for automated fix PRs.
10153
10272
  upgradeMessage:
10154
10273
  type: string
10155
10274
  nullable: true
10156
- description: Human-readable summary for UI when permissionsUpgradeRequired is true.
10275
+ description: Human-readable summary for UI when core permissions are missing.
10276
+ writeUpgradeMessage:
10277
+ type: string
10278
+ nullable: true
10279
+ description: Human-readable summary for UI when write permissions are missing.
10157
10280
 
10158
10281
  GithubPendingApprovalDto:
10159
10282
  type: object
@@ -10267,7 +10390,13 @@ components:
10267
10390
 
10268
10391
  GithubInstallationStatusDto:
10269
10392
  type: object
10270
- required: [installed, installations, permissionsUpgradeRequired]
10393
+ required:
10394
+ - installed
10395
+ - installations
10396
+ - permissionsUpgradeRequired
10397
+ - corePermissionsOk
10398
+ - writePermissionsOk
10399
+ - writePermissionsUpgradeRequired
10271
10400
  properties:
10272
10401
  installed:
10273
10402
  type: boolean
@@ -10277,7 +10406,25 @@ components:
10277
10406
  $ref: "#/components/schemas/GithubInstallationSummaryDto"
10278
10407
  permissionsUpgradeRequired:
10279
10408
  type: boolean
10280
- description: True if any connected installation is under-permissioned.
10409
+ description: True if any connected installation lacks core read permissions. Alias for `!corePermissionsOk`.
10410
+ corePermissionsOk:
10411
+ type: boolean
10412
+ description: True when every connected installation grants core read permissions.
10413
+ writePermissionsOk:
10414
+ type: boolean
10415
+ description: True when every connected installation grants write permissions for automated fixes.
10416
+ writePermissionsUpgradeRequired:
10417
+ type: boolean
10418
+ description: True when any connected installation lacks write permissions for automated fixes.
10419
+ missingWritePermissions:
10420
+ type: array
10421
+ items:
10422
+ $ref: "#/components/schemas/GithubMissingPermissionDto"
10423
+ description: Aggregated write permissions missing on installations that lack write access.
10424
+ writeUpgradeMessage:
10425
+ type: string
10426
+ nullable: true
10427
+ description: Human-readable summary when write permissions are missing.
10281
10428
  pendingApproval:
10282
10429
  nullable: true
10283
10430
  allOf:
@@ -11930,6 +12077,67 @@ components:
11930
12077
  type: string
11931
12078
  format: date-time
11932
12079
 
12080
+ PlatformBannerDto:
12081
+ type: object
12082
+ required: [id, kind, title, message, dismissible]
12083
+ properties:
12084
+ id:
12085
+ type: string
12086
+ description: Stable identifier used for dismiss persistence in the SPA.
12087
+ kind:
12088
+ type: string
12089
+ enum: [maintenance, outage, info]
12090
+ title:
12091
+ type: string
12092
+ message:
12093
+ type: string
12094
+ dismissible:
12095
+ type: boolean
12096
+ statusPageUrl:
12097
+ type: string
12098
+ description: Optional link to the public status page (status.aidrivensdlc.com).
12099
+ startsAt:
12100
+ type: string
12101
+ format: date-time
12102
+ description: When set, the banner is hidden before this instant (UTC).
12103
+ endsAt:
12104
+ type: string
12105
+ format: date-time
12106
+ description: When set, the banner is hidden after this instant (UTC).
12107
+
12108
+ PlatformBannerViewDto:
12109
+ type: object
12110
+ required: [banner]
12111
+ properties:
12112
+ banner:
12113
+ allOf:
12114
+ - $ref: "#/components/schemas/PlatformBannerDto"
12115
+ nullable: true
12116
+
12117
+ PlatformBannerUpsertDto:
12118
+ type: object
12119
+ required: [banner]
12120
+ properties:
12121
+ banner:
12122
+ allOf:
12123
+ - $ref: "#/components/schemas/PlatformBannerDto"
12124
+ nullable: true
12125
+ description: Pass null to clear the active database-managed banner.
12126
+
12127
+ PlatformAdminBannerDto:
12128
+ type: object
12129
+ required: [stored, effective]
12130
+ properties:
12131
+ stored:
12132
+ allOf:
12133
+ - $ref: "#/components/schemas/PlatformBannerDto"
12134
+ nullable: true
12135
+ description: Banner persisted in the database (editable via PUT).
12136
+ effective:
12137
+ allOf:
12138
+ - $ref: "#/components/schemas/PlatformBannerViewDto"
12139
+ description: Merged banner shown in the SPA (stored wins over runtime-config fallback).
12140
+
11933
12141
  NotificationDto:
11934
12142
  type: object
11935
12143
  required: [id, type, title, message, read, createdAt]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thinkai/tai-api-contract",
3
- "version": "2.56.0",
3
+ "version": "2.58.0-pr.901.2e63dee8",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -217,6 +217,50 @@ export interface paths {
217
217
  patch?: never;
218
218
  trace?: never;
219
219
  };
220
+ "/platform/banner": {
221
+ parameters: {
222
+ query?: never;
223
+ header?: never;
224
+ path?: never;
225
+ cookie?: never;
226
+ };
227
+ /**
228
+ * Global platform banner
229
+ * @description Returns the active global outage or maintenance banner for the platform shell, if any. No authentication required so signed-in users can see incident messaging during partial outages. When both a database-managed banner and a runtime-config fallback exist, the database value wins.
230
+ */
231
+ get: operations["getPlatformBanner"];
232
+ put?: never;
233
+ post?: never;
234
+ delete?: never;
235
+ options?: never;
236
+ head?: never;
237
+ patch?: never;
238
+ trace?: never;
239
+ };
240
+ "/admin/platform/banner": {
241
+ parameters: {
242
+ query?: never;
243
+ header?: never;
244
+ path?: never;
245
+ cookie?: never;
246
+ };
247
+ /**
248
+ * Read stored and effective global platform banner
249
+ * @description Platform admins only. Returns the database-stored banner (`stored`) for editing and the merged banner users see (`effective`, DB wins over runtime-config fallback). Requires Bearer JWT from an email on `PLATFORM_ADMIN_EMAILS`.
250
+ */
251
+ get: operations["adminGetPlatformBanner"];
252
+ /**
253
+ * Set or clear global platform banner
254
+ * @description Platform admins may activate, update, or clear (`banner: null`) the global outage/maintenance banner shown in the authenticated SPA shell. Requires Bearer JWT from an email on `PLATFORM_ADMIN_EMAILS`.
255
+ */
256
+ put: operations["adminUpsertPlatformBanner"];
257
+ post?: never;
258
+ delete?: never;
259
+ options?: never;
260
+ head?: never;
261
+ patch?: never;
262
+ trace?: never;
263
+ };
220
264
  "/me": {
221
265
  parameters: {
222
266
  query?: never;
@@ -4196,11 +4240,22 @@ export interface components {
4196
4240
  manageUrl?: string | null;
4197
4241
  /** Format: date-time */
4198
4242
  lastSyncedAt?: string | null;
4199
- /** @description True when this installation's granted permissions are below what the ThinkAI GitHub App currently requests. */
4243
+ /** @description True when this installation lacks core read permissions required for connect and analysis. Alias for `!corePermissionsOk`. */
4200
4244
  permissionsUpgradeRequired: boolean;
4245
+ /** @description True when installation grants read permissions for repository analysis (contents, metadata, pull requests, and members for org installs). */
4246
+ corePermissionsOk: boolean;
4247
+ /** @description True when installation grants write permissions required for automated fix PRs. */
4248
+ writePermissionsOk: boolean;
4249
+ /** @description Alias for `!writePermissionsOk`. */
4250
+ writePermissionsUpgradeRequired: boolean;
4251
+ /** @description Core read permissions still needed for connect and analysis. */
4201
4252
  missingPermissions?: components["schemas"]["GithubMissingPermissionDto"][];
4202
- /** @description Human-readable summary for UI when permissionsUpgradeRequired is true. */
4253
+ /** @description Write permissions still needed for automated fix PRs. */
4254
+ missingWritePermissions?: components["schemas"]["GithubMissingPermissionDto"][];
4255
+ /** @description Human-readable summary for UI when core permissions are missing. */
4203
4256
  upgradeMessage?: string | null;
4257
+ /** @description Human-readable summary for UI when write permissions are missing. */
4258
+ writeUpgradeMessage?: string | null;
4204
4259
  };
4205
4260
  GithubPendingApprovalDto: {
4206
4261
  /**
@@ -4268,8 +4323,18 @@ export interface components {
4268
4323
  GithubInstallationStatusDto: {
4269
4324
  installed: boolean;
4270
4325
  installations: components["schemas"]["GithubInstallationSummaryDto"][];
4271
- /** @description True if any connected installation is under-permissioned. */
4326
+ /** @description True if any connected installation lacks core read permissions. Alias for `!corePermissionsOk`. */
4272
4327
  permissionsUpgradeRequired: boolean;
4328
+ /** @description True when every connected installation grants core read permissions. */
4329
+ corePermissionsOk: boolean;
4330
+ /** @description True when every connected installation grants write permissions for automated fixes. */
4331
+ writePermissionsOk: boolean;
4332
+ /** @description True when any connected installation lacks write permissions for automated fixes. */
4333
+ writePermissionsUpgradeRequired: boolean;
4334
+ /** @description Aggregated write permissions missing on installations that lack write access. */
4335
+ missingWritePermissions?: components["schemas"]["GithubMissingPermissionDto"][];
4336
+ /** @description Human-readable summary when write permissions are missing. */
4337
+ writeUpgradeMessage?: string | null;
4273
4338
  /** @description Present when an org admin must approve the GitHub App install request. */
4274
4339
  pendingApproval?: components["schemas"]["GithubPendingApprovalDto"] | null;
4275
4340
  /** @description Present when GitHub connect was started but not completed (install OAuth state or account-picker session still active). Omitted when pendingApproval is set. */
@@ -4996,6 +5061,40 @@ export interface components {
4996
5061
  /** Format: date-time */
4997
5062
  createdAt?: string;
4998
5063
  };
5064
+ PlatformBannerDto: {
5065
+ /** @description Stable identifier used for dismiss persistence in the SPA. */
5066
+ id: string;
5067
+ /** @enum {string} */
5068
+ kind: "maintenance" | "outage" | "info";
5069
+ title: string;
5070
+ message: string;
5071
+ dismissible: boolean;
5072
+ /** @description Optional link to the public status page (status.aidrivensdlc.com). */
5073
+ statusPageUrl?: string;
5074
+ /**
5075
+ * Format: date-time
5076
+ * @description When set, the banner is hidden before this instant (UTC).
5077
+ */
5078
+ startsAt?: string;
5079
+ /**
5080
+ * Format: date-time
5081
+ * @description When set, the banner is hidden after this instant (UTC).
5082
+ */
5083
+ endsAt?: string;
5084
+ };
5085
+ PlatformBannerViewDto: {
5086
+ banner: components["schemas"]["PlatformBannerDto"] | null;
5087
+ };
5088
+ PlatformBannerUpsertDto: {
5089
+ /** @description Pass null to clear the active database-managed banner. */
5090
+ banner: components["schemas"]["PlatformBannerDto"] | null;
5091
+ };
5092
+ PlatformAdminBannerDto: {
5093
+ /** @description Banner persisted in the database (editable via PUT). */
5094
+ stored: components["schemas"]["PlatformBannerDto"] | null;
5095
+ /** @description Merged banner shown in the SPA (stored wins over runtime-config fallback). */
5096
+ effective: components["schemas"]["PlatformBannerViewDto"];
5097
+ };
4999
5098
  NotificationDto: {
5000
5099
  id: string;
5001
5100
  /** @enum {string} */
@@ -5833,6 +5932,10 @@ export type SquadDto = components['schemas']['SquadDto'];
5833
5932
  export type WorkflowDto = components['schemas']['WorkflowDto'];
5834
5933
  export type ProjectDto = components['schemas']['ProjectDto'];
5835
5934
  export type ProjectPatchDto = components['schemas']['ProjectPatchDto'];
5935
+ export type PlatformBannerDto = components['schemas']['PlatformBannerDto'];
5936
+ export type PlatformBannerViewDto = components['schemas']['PlatformBannerViewDto'];
5937
+ export type PlatformBannerUpsertDto = components['schemas']['PlatformBannerUpsertDto'];
5938
+ export type PlatformAdminBannerDto = components['schemas']['PlatformAdminBannerDto'];
5836
5939
  export type NotificationDto = components['schemas']['NotificationDto'];
5837
5940
  export type NotificationListDto = components['schemas']['NotificationListDto'];
5838
5941
  export type NotificationUnreadCountDto = components['schemas']['NotificationUnreadCountDto'];
@@ -6579,6 +6682,123 @@ export interface operations {
6579
6682
  };
6580
6683
  };
6581
6684
  };
6685
+ getPlatformBanner: {
6686
+ parameters: {
6687
+ query?: never;
6688
+ header?: never;
6689
+ path?: never;
6690
+ cookie?: never;
6691
+ };
6692
+ requestBody?: never;
6693
+ responses: {
6694
+ /** @description Active platform banner (if any) */
6695
+ 200: {
6696
+ headers: {
6697
+ [name: string]: unknown;
6698
+ };
6699
+ content: {
6700
+ "application/json": components["schemas"]["PlatformBannerViewDto"];
6701
+ };
6702
+ };
6703
+ };
6704
+ };
6705
+ adminGetPlatformBanner: {
6706
+ parameters: {
6707
+ query?: never;
6708
+ header?: never;
6709
+ path?: never;
6710
+ cookie?: never;
6711
+ };
6712
+ requestBody?: never;
6713
+ responses: {
6714
+ /** @description Admin platform banner view */
6715
+ 200: {
6716
+ headers: {
6717
+ [name: string]: unknown;
6718
+ };
6719
+ content: {
6720
+ "application/json": components["schemas"]["PlatformAdminBannerDto"];
6721
+ };
6722
+ };
6723
+ 401: components["responses"]["Unauthorized"];
6724
+ /** @description Caller is not a platform admin. */
6725
+ 403: {
6726
+ headers: {
6727
+ [name: string]: unknown;
6728
+ };
6729
+ content: {
6730
+ "application/json": components["schemas"]["ErrorMessageDto"];
6731
+ };
6732
+ };
6733
+ /** @description Platform banner persistence unavailable. */
6734
+ 503: {
6735
+ headers: {
6736
+ [name: string]: unknown;
6737
+ };
6738
+ content: {
6739
+ "application/json": components["schemas"]["ErrorMessageDto"];
6740
+ };
6741
+ };
6742
+ };
6743
+ };
6744
+ adminUpsertPlatformBanner: {
6745
+ parameters: {
6746
+ query?: never;
6747
+ header?: never;
6748
+ path?: never;
6749
+ cookie?: never;
6750
+ };
6751
+ requestBody: {
6752
+ content: {
6753
+ "application/json": components["schemas"]["PlatformBannerUpsertDto"];
6754
+ };
6755
+ };
6756
+ responses: {
6757
+ /** @description Updated platform banner */
6758
+ 200: {
6759
+ headers: {
6760
+ [name: string]: unknown;
6761
+ };
6762
+ content: {
6763
+ "application/json": components["schemas"]["PlatformBannerViewDto"];
6764
+ };
6765
+ };
6766
+ /** @description Invalid banner payload */
6767
+ 400: {
6768
+ headers: {
6769
+ [name: string]: unknown;
6770
+ };
6771
+ content: {
6772
+ "application/json": components["schemas"]["ErrorMessageDto"];
6773
+ };
6774
+ };
6775
+ 401: components["responses"]["Unauthorized"];
6776
+ /** @description Caller is not a platform admin. */
6777
+ 403: {
6778
+ headers: {
6779
+ [name: string]: unknown;
6780
+ };
6781
+ content: {
6782
+ /**
6783
+ * @example {
6784
+ * "error": "Forbidden",
6785
+ * "code": "forbidden"
6786
+ * }
6787
+ */
6788
+ "application/json": components["schemas"]["ErrorMessageDto"];
6789
+ };
6790
+ };
6791
+ /** @description Platform banner persistence unavailable. */
6792
+ 503: {
6793
+ headers: {
6794
+ [name: string]: unknown;
6795
+ };
6796
+ content: {
6797
+ "application/json": components["schemas"]["ErrorMessageDto"];
6798
+ };
6799
+ };
6800
+ };
6801
+ };
6582
6802
  getMe: {
6583
6803
  parameters: {
6584
6804
  query?: never;