@thinkai/tai-api-contract 2.4.3 → 2.4.5

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,13 +1,13 @@
1
1
  openapi: 3.0.3
2
2
  info:
3
3
  title: ThinkAI API
4
- version: 2.4.3
4
+ version: 2.4.5
5
5
  description: >
6
6
  Contract surface for the AI Driven SDLC backend used by ThinkAI.
7
7
  Workspace-scoped routes use `/workspaces/{workspaceId}/...`.
8
8
  Legacy tenant-scoped routes (`/tenants/{tenantId}/...`, `/me/tenants`) were removed from runtime.
9
9
  Legacy HTTP routes that exist on the server but are not listed here (for example
10
- `PUT /workspaces/{workspaceId}/dashboard-settings`) remain supported for existing PIP clients;
10
+ `PUT /workspaces/{workspaceId}/dashboard-settings`) remain supported for existing API clients;
11
11
  prefer OpenAPI-documented equivalents where available. Removal will be coordinated with ThinkAI releases.
12
12
 
13
13
  **Acceptance intent:** Per-operation behavior (happy paths, validation, and representative errors)
@@ -235,18 +235,17 @@ paths:
235
235
  operationId: getTenantOrgChart
236
236
  parameters:
237
237
  - $ref: "#/components/parameters/WorkspaceId"
238
- - name: withScores
239
- in: query
240
- schema: { type: boolean }
241
238
  responses:
242
239
  "200":
243
- description: Org chart (optionally with per-node scores)
240
+ description: SPA org structure chart (`spa_org_chart`; per-node scores not included — use GET /config for scoring tree)
244
241
  content:
245
242
  application/json:
246
243
  schema:
247
244
  $ref: "#/components/schemas/OrgChartDto"
248
245
  "401":
249
246
  $ref: "#/components/responses/Unauthorized"
247
+ "403":
248
+ $ref: "#/components/responses/Forbidden"
250
249
  "404":
251
250
  description: Workspace not found
252
251
  post:
@@ -267,13 +266,17 @@ paths:
267
266
  content:
268
267
  application/json:
269
268
  schema:
270
- type: object
271
- required: [ok, workspaceId]
272
- properties:
273
- ok: { type: boolean }
274
- workspaceId: { type: string }
269
+ $ref: "#/components/schemas/OrgChartSaveResultDto"
270
+ "400":
271
+ description: Invalid request body or chart limits exceeded
272
+ content:
273
+ application/json:
274
+ schema:
275
+ $ref: "#/components/schemas/ErrorMessageDto"
275
276
  "401":
276
277
  $ref: "#/components/responses/Unauthorized"
278
+ "403":
279
+ $ref: "#/components/responses/Forbidden"
277
280
 
278
281
  /workspaces/{workspaceId}/config:
279
282
  get:
@@ -2140,6 +2143,10 @@ paths:
2140
2143
  post:
2141
2144
  tags: [OrgChartImport]
2142
2145
  summary: Import org chart from Supabase storage path
2146
+ description: >
2147
+ Parse-only. Downloads the CSV at `storagePath` from the `org-charts` bucket and returns
2148
+ `persons` and `errors`. Does not persist to `spa_org_chart` or `org_chart`. The SPA
2149
+ derives teams client-side and saves the org structure via `POST /workspaces/{workspaceId}/org-chart`.
2143
2150
  operationId: postOrgChartImport
2144
2151
  parameters:
2145
2152
  - $ref: "#/components/parameters/WorkspaceId"
@@ -2151,14 +2158,39 @@ paths:
2151
2158
  $ref: "#/components/schemas/OrgChartImportBodyDto"
2152
2159
  responses:
2153
2160
  "200":
2154
- description: Parsed persons (shape TBD; align with backend)
2161
+ description: Parsed persons from uploaded CSV (not persisted server-side)
2155
2162
  content:
2156
2163
  application/json:
2157
2164
  schema:
2158
- type: object
2159
- additionalProperties: true
2165
+ $ref: "#/components/schemas/OrgChartImportResultDto"
2166
+ "400":
2167
+ description: Invalid body or storage path
2168
+ content:
2169
+ application/json:
2170
+ schema:
2171
+ $ref: "#/components/schemas/ErrorMessageDto"
2160
2172
  "401":
2161
2173
  $ref: "#/components/responses/Unauthorized"
2174
+ "403":
2175
+ $ref: "#/components/responses/Forbidden"
2176
+ "404":
2177
+ description: Storage object not found
2178
+ content:
2179
+ application/json:
2180
+ schema:
2181
+ $ref: "#/components/schemas/ErrorMessageDto"
2182
+ "502":
2183
+ description: Failed to download file from storage
2184
+ content:
2185
+ application/json:
2186
+ schema:
2187
+ $ref: "#/components/schemas/ErrorMessageDto"
2188
+ "503":
2189
+ description: Storage import not configured or service unavailable
2190
+ content:
2191
+ application/json:
2192
+ schema:
2193
+ $ref: "#/components/schemas/ErrorMessageDto"
2162
2194
 
2163
2195
  components:
2164
2196
  securitySchemes:
@@ -2258,6 +2290,26 @@ components:
2258
2290
  type: string
2259
2291
  enum: [admin, editor, viewer]
2260
2292
 
2293
+ OrgChartNodeDto:
2294
+ type: object
2295
+ additionalProperties: false
2296
+ required: [id, name, type]
2297
+ properties:
2298
+ id:
2299
+ type: string
2300
+ name:
2301
+ type: string
2302
+ type:
2303
+ type: string
2304
+ enum: [org, department, team, person]
2305
+ external_ids:
2306
+ type: object
2307
+ additionalProperties: { type: string }
2308
+ children:
2309
+ type: array
2310
+ items:
2311
+ $ref: "#/components/schemas/OrgChartNodeDto"
2312
+
2261
2313
  OrgChartTreeNodeDto:
2262
2314
  type: object
2263
2315
  required: [id]
@@ -2284,13 +2336,69 @@ components:
2284
2336
  items:
2285
2337
  $ref: "#/components/schemas/OrgChartTreeNodeDto"
2286
2338
 
2287
- OrgChartDto:
2339
+ ScoringOrgChartDto:
2288
2340
  type: object
2341
+ additionalProperties: false
2289
2342
  required: [root]
2290
2343
  properties:
2291
2344
  root:
2292
2345
  $ref: "#/components/schemas/OrgChartTreeNodeDto"
2293
2346
 
2347
+ OrgChartDto:
2348
+ type: object
2349
+ additionalProperties: false
2350
+ required: [root]
2351
+ properties:
2352
+ root:
2353
+ $ref: "#/components/schemas/OrgChartNodeDto"
2354
+
2355
+ OrgChartPersonDto:
2356
+ type: object
2357
+ additionalProperties: false
2358
+ required: [employeeId, name, email, title, department, team, managerId, location]
2359
+ properties:
2360
+ employeeId:
2361
+ type: string
2362
+ name:
2363
+ type: string
2364
+ email:
2365
+ type: string
2366
+ title:
2367
+ type: string
2368
+ department:
2369
+ type: string
2370
+ team:
2371
+ type: string
2372
+ managerId:
2373
+ type: string
2374
+ location:
2375
+ type: string
2376
+
2377
+ OrgChartImportResultDto:
2378
+ type: object
2379
+ additionalProperties: false
2380
+ required: [persons, errors]
2381
+ properties:
2382
+ persons:
2383
+ type: array
2384
+ items:
2385
+ $ref: "#/components/schemas/OrgChartPersonDto"
2386
+ errors:
2387
+ type: array
2388
+ items:
2389
+ type: string
2390
+
2391
+ OrgChartSaveResultDto:
2392
+ type: object
2393
+ additionalProperties: false
2394
+ required: [ok, tenantId]
2395
+ properties:
2396
+ ok:
2397
+ type: boolean
2398
+ tenantId:
2399
+ type: string
2400
+ format: uuid
2401
+
2294
2402
  TenantSourceEntryDto:
2295
2403
  type: object
2296
2404
  required: [type]
@@ -2337,7 +2445,7 @@ components:
2337
2445
  orgChart:
2338
2446
  nullable: true
2339
2447
  allOf:
2340
- - $ref: "#/components/schemas/OrgChartDto"
2448
+ - $ref: "#/components/schemas/ScoringOrgChartDto"
2341
2449
  region:
2342
2450
  type: string
2343
2451
  nullable: true
@@ -3022,6 +3130,29 @@ components:
3022
3130
  format: date-time
3023
3131
  nullable: true
3024
3132
 
3133
+ ReadinessCriteriaSummaryDto:
3134
+ type: object
3135
+ required: [total, met, partial, gap, na, blocked]
3136
+ properties:
3137
+ total:
3138
+ type: integer
3139
+ minimum: 0
3140
+ met:
3141
+ type: integer
3142
+ minimum: 0
3143
+ partial:
3144
+ type: integer
3145
+ minimum: 0
3146
+ gap:
3147
+ type: integer
3148
+ minimum: 0
3149
+ na:
3150
+ type: integer
3151
+ minimum: 0
3152
+ blocked:
3153
+ type: integer
3154
+ minimum: 0
3155
+
3025
3156
  ReadinessIssueDto:
3026
3157
  type: object
3027
3158
  required: [id, dimensionId, severity, title, description, fixStatus]
@@ -3037,9 +3168,16 @@ components:
3037
3168
  title:
3038
3169
  type: string
3039
3170
  maxLength: 256
3171
+ description: Human-readable rubric label (e.g. Agent instructions)
3040
3172
  description:
3041
3173
  type: string
3042
3174
  maxLength: 2048
3175
+ description: Scan notes, remediation, and optional detection gist for tooltips
3176
+ rubricId:
3177
+ type: string
3178
+ maxLength: 16
3179
+ nullable: true
3180
+ description: Rubric criterion id (e.g. A1, B3)
3043
3181
  filePath:
3044
3182
  type: string
3045
3183
  maxLength: 512
@@ -3057,9 +3195,22 @@ components:
3057
3195
  score:
3058
3196
  type: integer
3059
3197
  minimum: 0
3198
+ description: Dimension points earned (weighted rubric average × maxScore, rounded)
3060
3199
  maxScore:
3061
3200
  type: integer
3062
3201
  minimum: 0
3202
+ description: Maximum points for this dimension pillar
3203
+ scorePercent:
3204
+ type: integer
3205
+ minimum: 0
3206
+ maximum: 100
3207
+ description: score / maxScore as 0–100 when maxScore > 0
3208
+ criteriaSummary:
3209
+ type: object
3210
+ nullable: true
3211
+ allOf:
3212
+ - $ref: "#/components/schemas/ReadinessCriteriaSummaryDto"
3213
+ description: Per-criterion status counts from the latest successful scan
3063
3214
  issues:
3064
3215
  type: array
3065
3216
  items:
@@ -3157,6 +3308,10 @@ components:
3157
3308
  description:
3158
3309
  type: string
3159
3310
  maxLength: 2048
3311
+ rubricId:
3312
+ type: string
3313
+ maxLength: 16
3314
+ nullable: true
3160
3315
  filePath:
3161
3316
  type: string
3162
3317
  maxLength: 512
@@ -3564,6 +3719,7 @@ components:
3564
3719
 
3565
3720
  OrgChartImportBodyDto:
3566
3721
  type: object
3722
+ additionalProperties: false
3567
3723
  required: [storagePath]
3568
3724
  properties:
3569
3725
  storagePath:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thinkai/tai-api-contract",
3
- "version": "2.4.3",
3
+ "version": "2.4.5",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1032,7 +1032,10 @@ export interface paths {
1032
1032
  };
1033
1033
  get?: never;
1034
1034
  put?: never;
1035
- /** Import org chart from Supabase storage path */
1035
+ /**
1036
+ * Import org chart from Supabase storage path
1037
+ * @description Parse-only. Downloads the CSV at `storagePath` from the `org-charts` bucket and returns `persons` and `errors`. Does not persist to `spa_org_chart` or `org_chart`. The SPA derives teams client-side and saves the org structure via `POST /workspaces/{workspaceId}/org-chart`.
1038
+ */
1036
1039
  post: operations["postOrgChartImport"];
1037
1040
  delete?: never;
1038
1041
  options?: never;
@@ -1066,6 +1069,16 @@ export interface components {
1066
1069
  /** @enum {string} */
1067
1070
  role: "admin" | "editor" | "viewer";
1068
1071
  };
1072
+ OrgChartNodeDto: {
1073
+ id: string;
1074
+ name: string;
1075
+ /** @enum {string} */
1076
+ type: "org" | "department" | "team" | "person";
1077
+ external_ids?: {
1078
+ [key: string]: string;
1079
+ };
1080
+ children?: components["schemas"]["OrgChartNodeDto"][];
1081
+ };
1069
1082
  OrgChartTreeNodeDto: {
1070
1083
  id: string;
1071
1084
  name?: string;
@@ -1079,9 +1092,31 @@ export interface components {
1079
1092
  };
1080
1093
  children?: components["schemas"]["OrgChartTreeNodeDto"][];
1081
1094
  };
1082
- OrgChartDto: {
1095
+ ScoringOrgChartDto: {
1083
1096
  root: components["schemas"]["OrgChartTreeNodeDto"];
1084
1097
  };
1098
+ OrgChartDto: {
1099
+ root: components["schemas"]["OrgChartNodeDto"];
1100
+ };
1101
+ OrgChartPersonDto: {
1102
+ employeeId: string;
1103
+ name: string;
1104
+ email: string;
1105
+ title: string;
1106
+ department: string;
1107
+ team: string;
1108
+ managerId: string;
1109
+ location: string;
1110
+ };
1111
+ OrgChartImportResultDto: {
1112
+ persons: components["schemas"]["OrgChartPersonDto"][];
1113
+ errors: string[];
1114
+ };
1115
+ OrgChartSaveResultDto: {
1116
+ ok: boolean;
1117
+ /** Format: uuid */
1118
+ tenantId: string;
1119
+ };
1085
1120
  TenantSourceEntryDto: {
1086
1121
  type: string;
1087
1122
  } & {
@@ -1102,7 +1137,7 @@ export interface components {
1102
1137
  };
1103
1138
  WorkspaceConfigDto: {
1104
1139
  sources: components["schemas"]["TenantSourceEntryDto"][];
1105
- orgChart?: components["schemas"]["OrgChartDto"] | null;
1140
+ orgChart?: components["schemas"]["ScoringOrgChartDto"] | null;
1106
1141
  /** @enum {string|null} */
1107
1142
  region?: "us" | "eu" | "me" | null;
1108
1143
  };
@@ -1420,22 +1455,40 @@ export interface components {
1420
1455
  /** Format: date-time */
1421
1456
  finishedAt: string | null;
1422
1457
  };
1458
+ ReadinessCriteriaSummaryDto: {
1459
+ total: number;
1460
+ met: number;
1461
+ partial: number;
1462
+ gap: number;
1463
+ na: number;
1464
+ blocked: number;
1465
+ };
1423
1466
  ReadinessIssueDto: {
1424
1467
  /** Format: uuid */
1425
1468
  id: string;
1426
1469
  dimensionId: components["schemas"]["ReadinessDimensionId"];
1427
1470
  /** @enum {string} */
1428
1471
  severity: "critical" | "high" | "medium" | "low";
1472
+ /** @description Human-readable rubric label (e.g. Agent instructions) */
1429
1473
  title: string;
1474
+ /** @description Scan notes, remediation, and optional detection gist for tooltips */
1430
1475
  description: string;
1476
+ /** @description Rubric criterion id (e.g. A1, B3) */
1477
+ rubricId?: string | null;
1431
1478
  filePath?: string | null;
1432
1479
  /** @enum {string} */
1433
1480
  fixStatus: "open" | "pr-pending" | "fixed";
1434
1481
  };
1435
1482
  DimensionScoreDto: {
1436
1483
  dimensionId: components["schemas"]["ReadinessDimensionId"];
1484
+ /** @description Dimension points earned (weighted rubric average × maxScore, rounded) */
1437
1485
  score: number;
1486
+ /** @description Maximum points for this dimension pillar */
1438
1487
  maxScore: number;
1488
+ /** @description score / maxScore as 0–100 when maxScore > 0 */
1489
+ scorePercent?: number;
1490
+ /** @description Per-criterion status counts from the latest successful scan */
1491
+ criteriaSummary?: components["schemas"]["ReadinessCriteriaSummaryDto"] | null;
1439
1492
  issues: components["schemas"]["ReadinessIssueDto"][];
1440
1493
  };
1441
1494
  RepoReadinessScoreDto: {
@@ -1476,6 +1529,7 @@ export interface components {
1476
1529
  severity: "critical" | "high" | "medium" | "low";
1477
1530
  title: string;
1478
1531
  description: string;
1532
+ rubricId?: string | null;
1479
1533
  filePath: string | null;
1480
1534
  /** @enum {string} */
1481
1535
  fixStatus: "open" | "pr-pending" | "fixed";
@@ -1702,8 +1756,13 @@ export type TeamMemberDto = components['schemas']['TeamMemberDto'];
1702
1756
  export type TeamMemberListDto = components['schemas']['TeamMemberListDto'];
1703
1757
  export type InviteTeamMemberBodyDto = components['schemas']['InviteTeamMemberBodyDto'];
1704
1758
  export type UpdateTeamMemberRoleBodyDto = components['schemas']['UpdateTeamMemberRoleBodyDto'];
1759
+ export type OrgChartNodeDto = components['schemas']['OrgChartNodeDto'];
1705
1760
  export type OrgChartTreeNodeDto = components['schemas']['OrgChartTreeNodeDto'];
1761
+ export type ScoringOrgChartDto = components['schemas']['ScoringOrgChartDto'];
1706
1762
  export type OrgChartDto = components['schemas']['OrgChartDto'];
1763
+ export type OrgChartPersonDto = components['schemas']['OrgChartPersonDto'];
1764
+ export type OrgChartImportResultDto = components['schemas']['OrgChartImportResultDto'];
1765
+ export type OrgChartSaveResultDto = components['schemas']['OrgChartSaveResultDto'];
1707
1766
  export type TenantSourceEntryDto = components['schemas']['TenantSourceEntryDto'];
1708
1767
  export type CursorSourceDto = components['schemas']['CursorSourceDto'];
1709
1768
  export type WorkspaceConfigDto = components['schemas']['WorkspaceConfigDto'];
@@ -1747,6 +1806,7 @@ export type ReadinessAnalyzeResponseDto = components['schemas']['ReadinessAnalyz
1747
1806
  export type ReadinessRunStatusDto = components['schemas']['ReadinessRunStatusDto'];
1748
1807
  export type ReadinessRepoAnalysisStatusDto = components['schemas']['ReadinessRepoAnalysisStatusDto'];
1749
1808
  export type ReadinessRunSummaryDto = components['schemas']['ReadinessRunSummaryDto'];
1809
+ export type ReadinessCriteriaSummaryDto = components['schemas']['ReadinessCriteriaSummaryDto'];
1750
1810
  export type ReadinessIssueDto = components['schemas']['ReadinessIssueDto'];
1751
1811
  export type DimensionScoreDto = components['schemas']['DimensionScoreDto'];
1752
1812
  export type RepoReadinessScoreDto = components['schemas']['RepoReadinessScoreDto'];
@@ -2015,9 +2075,7 @@ export interface operations {
2015
2075
  };
2016
2076
  getTenantOrgChart: {
2017
2077
  parameters: {
2018
- query?: {
2019
- withScores?: boolean;
2020
- };
2078
+ query?: never;
2021
2079
  header?: never;
2022
2080
  path: {
2023
2081
  workspaceId: components["parameters"]["WorkspaceId"];
@@ -2026,7 +2084,7 @@ export interface operations {
2026
2084
  };
2027
2085
  requestBody?: never;
2028
2086
  responses: {
2029
- /** @description Org chart (optionally with per-node scores) */
2087
+ /** @description SPA org structure chart (`spa_org_chart`; per-node scores not included — use GET /config for scoring tree) */
2030
2088
  200: {
2031
2089
  headers: {
2032
2090
  [name: string]: unknown;
@@ -2036,6 +2094,7 @@ export interface operations {
2036
2094
  };
2037
2095
  };
2038
2096
  401: components["responses"]["Unauthorized"];
2097
+ 403: components["responses"]["Forbidden"];
2039
2098
  /** @description Workspace not found */
2040
2099
  404: {
2041
2100
  headers: {
@@ -2066,13 +2125,20 @@ export interface operations {
2066
2125
  [name: string]: unknown;
2067
2126
  };
2068
2127
  content: {
2069
- "application/json": {
2070
- ok: boolean;
2071
- workspaceId: string;
2072
- };
2128
+ "application/json": components["schemas"]["OrgChartSaveResultDto"];
2129
+ };
2130
+ };
2131
+ /** @description Invalid request body or chart limits exceeded */
2132
+ 400: {
2133
+ headers: {
2134
+ [name: string]: unknown;
2135
+ };
2136
+ content: {
2137
+ "application/json": components["schemas"]["ErrorMessageDto"];
2073
2138
  };
2074
2139
  };
2075
2140
  401: components["responses"]["Unauthorized"];
2141
+ 403: components["responses"]["Forbidden"];
2076
2142
  };
2077
2143
  };
2078
2144
  getWorkspaceConfig: {
@@ -4035,18 +4101,53 @@ export interface operations {
4035
4101
  };
4036
4102
  };
4037
4103
  responses: {
4038
- /** @description Parsed persons (shape TBD; align with backend) */
4104
+ /** @description Parsed persons from uploaded CSV (not persisted server-side) */
4039
4105
  200: {
4040
4106
  headers: {
4041
4107
  [name: string]: unknown;
4042
4108
  };
4043
4109
  content: {
4044
- "application/json": {
4045
- [key: string]: unknown;
4046
- };
4110
+ "application/json": components["schemas"]["OrgChartImportResultDto"];
4111
+ };
4112
+ };
4113
+ /** @description Invalid body or storage path */
4114
+ 400: {
4115
+ headers: {
4116
+ [name: string]: unknown;
4117
+ };
4118
+ content: {
4119
+ "application/json": components["schemas"]["ErrorMessageDto"];
4047
4120
  };
4048
4121
  };
4049
4122
  401: components["responses"]["Unauthorized"];
4123
+ 403: components["responses"]["Forbidden"];
4124
+ /** @description Storage object not found */
4125
+ 404: {
4126
+ headers: {
4127
+ [name: string]: unknown;
4128
+ };
4129
+ content: {
4130
+ "application/json": components["schemas"]["ErrorMessageDto"];
4131
+ };
4132
+ };
4133
+ /** @description Failed to download file from storage */
4134
+ 502: {
4135
+ headers: {
4136
+ [name: string]: unknown;
4137
+ };
4138
+ content: {
4139
+ "application/json": components["schemas"]["ErrorMessageDto"];
4140
+ };
4141
+ };
4142
+ /** @description Storage import not configured or service unavailable */
4143
+ 503: {
4144
+ headers: {
4145
+ [name: string]: unknown;
4146
+ };
4147
+ content: {
4148
+ "application/json": components["schemas"]["ErrorMessageDto"];
4149
+ };
4150
+ };
4050
4151
  };
4051
4152
  };
4052
4153
  }
package/src/index.ts CHANGED
@@ -179,18 +179,23 @@ export interface OrgChartTreeNodeDto {
179
179
  external_ids?: Record<string, string>;
180
180
  }
181
181
 
182
- /** Org chart tree node with computed scores (Option B, α=0.2). Used when ?withScores=true. */
182
+ /** Org chart tree node with computed scores (Option B, α=0.2). Reserved for a future scored-tree API. */
183
183
  export interface OrgChartTreeNodeWithScoreDto extends OrgChartTreeNodeDto {
184
184
  score?: number | null;
185
185
  individualUpi?: number | null;
186
186
  children?: OrgChartTreeNodeWithScoreDto[];
187
187
  }
188
188
 
189
- /** M7: Org chart response (tree only). */
189
+ /** M7: Org chart response (tree only). Legacy hand-written shape; prefer generated `OrgChartDto` for SPA routes. */
190
190
  export interface OrgChartDto {
191
191
  root: OrgChartTreeNodeDto;
192
192
  }
193
193
 
194
+ /** Batch scoring person tree returned by GET /workspaces/{workspaceId}/config (`org_chart` column). */
195
+ export interface ScoringOrgChartDto {
196
+ root: OrgChartTreeNodeDto;
197
+ }
198
+
194
199
  /** Summary of a person derived from the tenant's org chart. */
195
200
  export interface PersonSummaryDto {
196
201
  /** Canonical person identifier (e.g. work email). */
@@ -222,7 +227,7 @@ export interface TestConnectionResponseDto {
222
227
  /** Workspace integration config (sources; optionally org chart for Home; optionally region for data residency). */
223
228
  export interface WorkspaceConfigDto {
224
229
  sources: TenantSourceEntryDto[];
225
- orgChart?: OrgChartDto | null;
230
+ orgChart?: ScoringOrgChartDto | null;
226
231
  /** Region for data residency (us, eu, me). Null or absent = legacy/single-region. */
227
232
  region?: string | null;
228
233
  }