@thinkai/tai-api-contract 2.62.0 → 2.63.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.
@@ -922,6 +922,46 @@ export interface paths {
922
922
  patch?: never;
923
923
  trace?: never;
924
924
  };
925
+ "/workspaces/{workspaceId}/insights/sdlc/overview": {
926
+ parameters: {
927
+ query?: never;
928
+ header?: never;
929
+ path?: never;
930
+ cookie?: never;
931
+ };
932
+ /**
933
+ * SDLC insights — Engineering Health overview
934
+ * @description Engineering Health dashboard for `/insights/sdlc/overview`. Returns precomputed DORA, CI, collaboration, security, governance, and operational metrics aggregated at calendar-day granularity for the selected window. Filter params mirror other Measure insights routes plus optional `repoIds` scope.
935
+ */
936
+ get: operations["getSdlcInsightsOverview"];
937
+ put?: never;
938
+ post?: never;
939
+ delete?: never;
940
+ options?: never;
941
+ head?: never;
942
+ patch?: never;
943
+ trace?: never;
944
+ };
945
+ "/workspaces/{workspaceId}/insights/sdlc/drilldown/{metricId}": {
946
+ parameters: {
947
+ query?: never;
948
+ header?: never;
949
+ path?: never;
950
+ cookie?: never;
951
+ };
952
+ /**
953
+ * SDLC insights — metric drill-down entities
954
+ * @description Paginated entity list for a single Engineering Health metric (failed workflow runs, PRs, alerts, etc.). Available only when the overview marks `drilldownAvailable: true`.
955
+ */
956
+ get: operations["getSdlcInsightsDrilldown"];
957
+ put?: never;
958
+ post?: never;
959
+ delete?: never;
960
+ options?: never;
961
+ head?: never;
962
+ patch?: never;
963
+ trace?: never;
964
+ };
925
965
  "/workspaces/{workspaceId}/integrations/ai-tool/{provider}/members": {
926
966
  parameters: {
927
967
  query?: never;
@@ -6115,6 +6155,79 @@ export interface components {
6115
6155
  */
6116
6156
  lastSeenAt: string;
6117
6157
  };
6158
+ /** @enum {string} */
6159
+ SdlcModuleId: "dora" | "ci-pipeline" | "collaboration-pr" | "security-risk" | "governance-architecture" | "financial-operational";
6160
+ /** @enum {string} */
6161
+ SdlcMetricId: "dora-deployment-frequency" | "dora-lead-time" | "dora-cfr" | "dora-mttr" | "ci-success-rate" | "ci-duration-p50-p95" | "ci-flakiness" | "ci-queue-wait" | "ci-cache-hit" | "pr-review-time" | "pr-bus-factor" | "pr-size" | "pr-abandonment" | "pr-review-depth" | "pr-draft-duration" | "pr-merge-conflicts" | "pr-commit-density" | "sec-dependabot-backlog" | "sec-vuln-mttr" | "sec-secret-scanning" | "sec-self-approvals" | "sec-unreviewed-merge" | "gov-branch-protection" | "gov-stale-branches" | "gov-orphaned-repos" | "gov-readme-health" | "gov-codeowners" | "gov-issue-pr-linkage" | "fin-gha-minutes" | "fin-copilot-utilization" | "fin-org-inactivity" | "fin-env-drift" | "fin-release-cadence" | "fin-api-rate-limit";
6162
+ /** @enum {string} */
6163
+ SdlcMetricDataStatus: "live" | "preview" | "unavailable";
6164
+ /** @enum {string} */
6165
+ SdlcMetricHealthStatus: "healthy" | "warning" | "critical" | "unknown";
6166
+ /** @enum {string} */
6167
+ SdlcBenchmarkBand: "elite" | "high" | "medium" | "low";
6168
+ SdlcMetricTrendDto: {
6169
+ /** @enum {string} */
6170
+ direction: "up" | "down" | "flat";
6171
+ deltaPercent?: number;
6172
+ };
6173
+ SdlcDailySeriesPointDto: {
6174
+ /**
6175
+ * Format: date
6176
+ * @description Inclusive ISO calendar day (UTC).
6177
+ */
6178
+ date: string;
6179
+ value: number;
6180
+ };
6181
+ SdlcMetricDto: {
6182
+ id: components["schemas"]["SdlcMetricId"];
6183
+ name: string;
6184
+ dataStatus: components["schemas"]["SdlcMetricDataStatus"];
6185
+ healthStatus: components["schemas"]["SdlcMetricHealthStatus"];
6186
+ value: (number | string) | null;
6187
+ unit?: string;
6188
+ secondaryValue?: (number | string) | null;
6189
+ secondaryLabel?: string;
6190
+ trend?: components["schemas"]["SdlcMetricTrendDto"];
6191
+ benchmarkBand?: components["schemas"]["SdlcBenchmarkBand"];
6192
+ drilldownAvailable: boolean;
6193
+ dailySeries?: components["schemas"]["SdlcDailySeriesPointDto"][];
6194
+ unavailableReason?: string;
6195
+ };
6196
+ SdlcModuleDto: {
6197
+ id: components["schemas"]["SdlcModuleId"];
6198
+ name: string;
6199
+ metrics: components["schemas"]["SdlcMetricDto"][];
6200
+ };
6201
+ SdlcOverviewDto: {
6202
+ rangeId: string;
6203
+ /** Format: date */
6204
+ from: string;
6205
+ /** Format: date */
6206
+ to: string;
6207
+ department: string;
6208
+ team: string;
6209
+ repoIds: string[];
6210
+ /** Format: date-time */
6211
+ asOf: string;
6212
+ modules: components["schemas"]["SdlcModuleDto"][];
6213
+ };
6214
+ SdlcDrilldownItemDto: {
6215
+ id: string;
6216
+ title: string;
6217
+ subtitle?: string;
6218
+ /** Format: uri */
6219
+ url?: string;
6220
+ /** Format: date-time */
6221
+ occurredAt?: string;
6222
+ metadata?: {
6223
+ [key: string]: string | number;
6224
+ };
6225
+ };
6226
+ SdlcDrilldownDto: {
6227
+ metricId: components["schemas"]["SdlcMetricId"];
6228
+ items: components["schemas"]["SdlcDrilldownItemDto"][];
6229
+ nextCursor?: string;
6230
+ };
6118
6231
  };
6119
6232
  responses: {
6120
6233
  /** @description Missing or invalid bearer token */
@@ -6168,6 +6281,8 @@ export interface components {
6168
6281
  InsightsProductivityFrom: string;
6169
6282
  /** @description Inclusive end of a daily window (`YYYY-MM-DD`). When set with `from`, overrides `rangeId` for day-mode responses (max 180 days). */
6170
6283
  InsightsProductivityTo: string;
6284
+ /** @description Day-level Measure window. Presets: `7d`, `30d`, `90d`, `180d`. Custom inclusive calendar range: `cr:YYYY-MM-DD:YYYY-MM-DD` (max span 180 days). */
6285
+ InsightsSdlcRangeId: string;
6171
6286
  /** @description Department filter; send `All departments` to include every department. Scoped using imported `thinkai_org_structure` members when present, otherwise SPA org chart `department` nodes and their descendant teams. When neither source defines the requested department, insights return no scoped teams or contributors (not org-wide data). */
6172
6287
  InsightsDepartmentFilter: string;
6173
6288
  /** @description Page size (default 25, max 100). */
@@ -6494,6 +6609,18 @@ export type HrisProviderSyncResultDto = components['schemas']['HrisProviderSyncR
6494
6609
  export type ActivityLogPageDto = components['schemas']['ActivityLogPageDto'];
6495
6610
  export type ReadinessTokenUsageRowDto = components['schemas']['ReadinessTokenUsageRowDto'];
6496
6611
  export type ReadinessTokenUsageByDimensionRowDto = components['schemas']['ReadinessTokenUsageByDimensionRowDto'];
6612
+ export type SdlcModuleId = components['schemas']['SdlcModuleId'];
6613
+ export type SdlcMetricId = components['schemas']['SdlcMetricId'];
6614
+ export type SdlcMetricDataStatus = components['schemas']['SdlcMetricDataStatus'];
6615
+ export type SdlcMetricHealthStatus = components['schemas']['SdlcMetricHealthStatus'];
6616
+ export type SdlcBenchmarkBand = components['schemas']['SdlcBenchmarkBand'];
6617
+ export type SdlcMetricTrendDto = components['schemas']['SdlcMetricTrendDto'];
6618
+ export type SdlcDailySeriesPointDto = components['schemas']['SdlcDailySeriesPointDto'];
6619
+ export type SdlcMetricDto = components['schemas']['SdlcMetricDto'];
6620
+ export type SdlcModuleDto = components['schemas']['SdlcModuleDto'];
6621
+ export type SdlcOverviewDto = components['schemas']['SdlcOverviewDto'];
6622
+ export type SdlcDrilldownItemDto = components['schemas']['SdlcDrilldownItemDto'];
6623
+ export type SdlcDrilldownDto = components['schemas']['SdlcDrilldownDto'];
6497
6624
  export type ResponseUnauthorized = components['responses']['Unauthorized'];
6498
6625
  export type ResponseForbidden = components['responses']['Forbidden'];
6499
6626
  export type ResponseZenHrSyncInProgress = components['responses']['ZenHrSyncInProgress'];
@@ -6508,6 +6635,7 @@ export type ParameterFixId = components['parameters']['FixId'];
6508
6635
  export type ParameterInsightsProductivityRangeId = components['parameters']['InsightsProductivityRangeId'];
6509
6636
  export type ParameterInsightsProductivityFrom = components['parameters']['InsightsProductivityFrom'];
6510
6637
  export type ParameterInsightsProductivityTo = components['parameters']['InsightsProductivityTo'];
6638
+ export type ParameterInsightsSdlcRangeId = components['parameters']['InsightsSdlcRangeId'];
6511
6639
  export type ParameterInsightsDepartmentFilter = components['parameters']['InsightsDepartmentFilter'];
6512
6640
  export type ParameterPaginationLimit = components['parameters']['PaginationLimit'];
6513
6641
  export type ParameterPaginationOffset = components['parameters']['PaginationOffset'];
@@ -9100,6 +9228,112 @@ export interface operations {
9100
9228
  };
9101
9229
  };
9102
9230
  };
9231
+ getSdlcInsightsOverview: {
9232
+ parameters: {
9233
+ query?: {
9234
+ /** @description Day-level Measure window. Presets: `7d`, `30d`, `90d`, `180d`. Custom inclusive calendar range: `cr:YYYY-MM-DD:YYYY-MM-DD` (max span 180 days). */
9235
+ rangeId?: components["parameters"]["InsightsSdlcRangeId"];
9236
+ /** @description Department filter; send `All departments` to include every department. Scoped using imported `thinkai_org_structure` members when present, otherwise SPA org chart `department` nodes and their descendant teams. When neither source defines the requested department, insights return no scoped teams or contributors (not org-wide data). */
9237
+ department?: components["parameters"]["InsightsDepartmentFilter"];
9238
+ /** @description Team name filter; send `All teams` to include every team. */
9239
+ team?: string;
9240
+ /** @description Comma-separated internal repo ids; omit or empty for all repos. */
9241
+ repoIds?: string;
9242
+ };
9243
+ header?: never;
9244
+ path: {
9245
+ workspaceId: components["parameters"]["WorkspaceId"];
9246
+ };
9247
+ cookie?: never;
9248
+ };
9249
+ requestBody?: never;
9250
+ responses: {
9251
+ /** @description Engineering Health overview payload */
9252
+ 200: {
9253
+ headers: {
9254
+ [name: string]: unknown;
9255
+ };
9256
+ content: {
9257
+ "application/json": components["schemas"]["SdlcOverviewDto"];
9258
+ };
9259
+ };
9260
+ /** @description Invalid query parameters */
9261
+ 400: {
9262
+ headers: {
9263
+ [name: string]: unknown;
9264
+ };
9265
+ content: {
9266
+ "application/json": {
9267
+ /** @example invalid_query */
9268
+ error: string;
9269
+ };
9270
+ };
9271
+ };
9272
+ 401: components["responses"]["Unauthorized"];
9273
+ 403: components["responses"]["Forbidden"];
9274
+ /** @description Workspace does not exist or malformed workspaceId */
9275
+ 404: {
9276
+ headers: {
9277
+ [name: string]: unknown;
9278
+ };
9279
+ content?: never;
9280
+ };
9281
+ };
9282
+ };
9283
+ getSdlcInsightsDrilldown: {
9284
+ parameters: {
9285
+ query?: {
9286
+ /** @description Day-level Measure window. Presets: `7d`, `30d`, `90d`, `180d`. Custom inclusive calendar range: `cr:YYYY-MM-DD:YYYY-MM-DD` (max span 180 days). */
9287
+ rangeId?: components["parameters"]["InsightsSdlcRangeId"];
9288
+ /** @description Department filter; send `All departments` to include every department. Scoped using imported `thinkai_org_structure` members when present, otherwise SPA org chart `department` nodes and their descendant teams. When neither source defines the requested department, insights return no scoped teams or contributors (not org-wide data). */
9289
+ department?: components["parameters"]["InsightsDepartmentFilter"];
9290
+ team?: string;
9291
+ repoIds?: string;
9292
+ /** @description Opaque pagination cursor from a prior response. */
9293
+ cursor?: string;
9294
+ limit?: number;
9295
+ };
9296
+ header?: never;
9297
+ path: {
9298
+ workspaceId: components["parameters"]["WorkspaceId"];
9299
+ metricId: components["schemas"]["SdlcMetricId"];
9300
+ };
9301
+ cookie?: never;
9302
+ };
9303
+ requestBody?: never;
9304
+ responses: {
9305
+ /** @description Drill-down page */
9306
+ 200: {
9307
+ headers: {
9308
+ [name: string]: unknown;
9309
+ };
9310
+ content: {
9311
+ "application/json": components["schemas"]["SdlcDrilldownDto"];
9312
+ };
9313
+ };
9314
+ /** @description Invalid query parameters */
9315
+ 400: {
9316
+ headers: {
9317
+ [name: string]: unknown;
9318
+ };
9319
+ content: {
9320
+ "application/json": {
9321
+ /** @example invalid_query */
9322
+ error: string;
9323
+ };
9324
+ };
9325
+ };
9326
+ 401: components["responses"]["Unauthorized"];
9327
+ 403: components["responses"]["Forbidden"];
9328
+ /** @description Workspace or metric not found */
9329
+ 404: {
9330
+ headers: {
9331
+ [name: string]: unknown;
9332
+ };
9333
+ content?: never;
9334
+ };
9335
+ };
9336
+ };
9103
9337
  getAiToolMembers: {
9104
9338
  parameters: {
9105
9339
  query?: {