@thinkai/tai-api-contract 2.62.0 → 2.64.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.
@@ -923,6 +923,186 @@ export interface paths {
923
923
  patch?: never;
924
924
  trace?: never;
925
925
  };
926
+ "/workspaces/{workspaceId}/insights/sdlc/overview": {
927
+ parameters: {
928
+ query?: never;
929
+ header?: never;
930
+ path?: never;
931
+ cookie?: never;
932
+ };
933
+ /**
934
+ * SDLC insights — Engineering Health overview
935
+ * @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.
936
+ */
937
+ get: operations["getSdlcInsightsOverview"];
938
+ put?: never;
939
+ post?: never;
940
+ delete?: never;
941
+ options?: never;
942
+ head?: never;
943
+ patch?: never;
944
+ trace?: never;
945
+ };
946
+ "/workspaces/{workspaceId}/insights/sdlc/drilldown/{metricId}": {
947
+ parameters: {
948
+ query?: never;
949
+ header?: never;
950
+ path?: never;
951
+ cookie?: never;
952
+ };
953
+ /**
954
+ * SDLC insights — metric drill-down entities
955
+ * @description Paginated entity list for a single Engineering Health metric (failed workflow runs, PRs, alerts, etc.). Available only when the overview marks `drilldownAvailable: true`.
956
+ */
957
+ get: operations["getSdlcInsightsDrilldown"];
958
+ put?: never;
959
+ post?: never;
960
+ delete?: never;
961
+ options?: never;
962
+ head?: never;
963
+ patch?: never;
964
+ trace?: never;
965
+ };
966
+ "/workspaces/{workspaceId}/insights/recommendations-page/verdict-summary": {
967
+ parameters: {
968
+ query?: never;
969
+ header?: never;
970
+ path?: never;
971
+ cookie?: never;
972
+ };
973
+ /**
974
+ * Insights recommendations — verdict summary cards
975
+ * @description Top status cards for `/insights-recommendations`. `productivityMultiplier` is the merged-PR volume ratio versus the previous equal-length window (not AI-active vs non-users). `ciFailRatePct` is portfolio CI fail rate percent. Cost statuses compare AI spend per merged PR to the prior window. Status thresholds match the product UI: productivity ≥1.5 healthy / ≥1.0 watch / else at-risk; CI fail <15 healthy / ≤30 watch / else at-risk; cost change ≤0 healthy / <20% watch / else at-risk (prev≤0 → watch).
976
+ */
977
+ get: operations["getInsightsRecommendationsVerdictSummary"];
978
+ put?: never;
979
+ post?: never;
980
+ delete?: never;
981
+ options?: never;
982
+ head?: never;
983
+ patch?: never;
984
+ trace?: never;
985
+ };
986
+ "/workspaces/{workspaceId}/insights/recommendations-page/roi-quadrant": {
987
+ parameters: {
988
+ query?: never;
989
+ header?: never;
990
+ path?: never;
991
+ cookie?: never;
992
+ };
993
+ /**
994
+ * Insights recommendations — AI spend vs delivery output
995
+ * @description Per-engineer AI spend (USD) and merged PR counts for the scatter / ROI quadrant. Includes engineers with spend>0 or mergedPrs>0. Medians are over the returned set (n<2 uses the single point or zeros when empty). `id` is the stable org person id.
996
+ */
997
+ get: operations["getInsightsRecommendationsRoiQuadrant"];
998
+ put?: never;
999
+ post?: never;
1000
+ delete?: never;
1001
+ options?: never;
1002
+ head?: never;
1003
+ patch?: never;
1004
+ trace?: never;
1005
+ };
1006
+ "/workspaces/{workspaceId}/insights/recommendations-page/velocity-quality": {
1007
+ parameters: {
1008
+ query?: never;
1009
+ header?: never;
1010
+ path?: never;
1011
+ cookie?: never;
1012
+ };
1013
+ /**
1014
+ * Insights recommendations — velocity vs quality weekly series
1015
+ * @description Weekly merged PR volume and CI fail rate for the filter window. Weeks follow the Measure calendar-week bucket convention. `targetFailRatePct` is the org target (15). `volumeGrowthPct` is percent change vs the prior equal-length period.
1016
+ */
1017
+ get: operations["getInsightsRecommendationsVelocityQuality"];
1018
+ put?: never;
1019
+ post?: never;
1020
+ delete?: never;
1021
+ options?: never;
1022
+ head?: never;
1023
+ patch?: never;
1024
+ trace?: never;
1025
+ };
1026
+ "/workspaces/{workspaceId}/insights/recommendations-page/review-pipeline": {
1027
+ parameters: {
1028
+ query?: never;
1029
+ header?: never;
1030
+ path?: never;
1031
+ cookie?: never;
1032
+ };
1033
+ /**
1034
+ * Insights recommendations — review bottleneck funnel
1035
+ * @description Review funnel stages `open-review`, `review-approval`, `approval-merge`, and `merged`. Wait stages use delivery-health hours (`avgReviewWaitHours`, `avgApprovalHours`, and approval→merge as max(0, avgTimeToMergeHours − wait − approval)). The `merged` stage uses `medianHours=0` (volume is not hours). `bottleneckStageId` is the wait stage with the highest median hours. `reviewerLoad` comes from persisted `deliveryHealth.topReviewers` when available; otherwise an empty array (never invented reviewers).
1036
+ */
1037
+ get: operations["getInsightsRecommendationsReviewPipeline"];
1038
+ put?: never;
1039
+ post?: never;
1040
+ delete?: never;
1041
+ options?: never;
1042
+ head?: never;
1043
+ patch?: never;
1044
+ trace?: never;
1045
+ };
1046
+ "/workspaces/{workspaceId}/insights/recommendations-page/cost-per-pr": {
1047
+ parameters: {
1048
+ query?: never;
1049
+ header?: never;
1050
+ path?: never;
1051
+ cookie?: never;
1052
+ };
1053
+ /**
1054
+ * Insights recommendations — cost per merged PR by team
1055
+ * @description Org and per-team AI spend / merged PRs. Teams with zero merged PRs in the window are omitted. `costPerPrUsd = spendUsd / mergedPrs`. `activeAi` is distinct AI-active members on the team in the window (provider filter applied).
1056
+ */
1057
+ get: operations["getInsightsRecommendationsCostPerPr"];
1058
+ put?: never;
1059
+ post?: never;
1060
+ delete?: never;
1061
+ options?: never;
1062
+ head?: never;
1063
+ patch?: never;
1064
+ trace?: never;
1065
+ };
1066
+ "/workspaces/{workspaceId}/insights/recommendations-page/adoption-gap": {
1067
+ parameters: {
1068
+ query?: never;
1069
+ header?: never;
1070
+ path?: never;
1071
+ cookie?: never;
1072
+ };
1073
+ /**
1074
+ * Insights recommendations — AI adoption gap by team
1075
+ * @description Headcount vs AI-active contributors and per-team readiness/output. `readinessPct` is the mean latest overallScore of repos with matching `teamId` (workspace mean fallback). `outputPerEngPerWeek` is team merged PRs / headcount / weeks in window. `upliftPct` estimates additional PR volume if non-adopters matched leader-team output (teams with >50% adoption).
1076
+ */
1077
+ get: operations["getInsightsRecommendationsAdoptionGap"];
1078
+ put?: never;
1079
+ post?: never;
1080
+ delete?: never;
1081
+ options?: never;
1082
+ head?: never;
1083
+ patch?: never;
1084
+ trace?: never;
1085
+ };
1086
+ "/workspaces/{workspaceId}/insights/recommendations-page/recommendations": {
1087
+ parameters: {
1088
+ query?: never;
1089
+ header?: never;
1090
+ path?: never;
1091
+ cookie?: never;
1092
+ };
1093
+ /**
1094
+ * Insights recommendations — deterministic action items
1095
+ * @description Deterministic rules engine (no LLM). Emits module-anchored recommendations with `moduleId` in {mod-spend-vs-output, mod-velocity-vs-quality, mod-review-bottleneck, mod-cost-per-pr, mod-adoption-gap}. Action items must cite one AI metric and one delivery metric in `observed`. Evidence chips use kinds user-spend|team|contributor|repo|module with real target ids when available.
1096
+ */
1097
+ get: operations["getInsightsRecommendationsRecommendations"];
1098
+ put?: never;
1099
+ post?: never;
1100
+ delete?: never;
1101
+ options?: never;
1102
+ head?: never;
1103
+ patch?: never;
1104
+ trace?: never;
1105
+ };
926
1106
  "/workspaces/{workspaceId}/integrations/ai-tool/{provider}/members": {
927
1107
  parameters: {
928
1108
  query?: never;
@@ -6116,6 +6296,227 @@ export interface components {
6116
6296
  */
6117
6297
  lastSeenAt: string;
6118
6298
  };
6299
+ /** @enum {string} */
6300
+ SdlcModuleId: "dora" | "ci-pipeline" | "collaboration-pr" | "security-risk" | "governance-architecture" | "financial-operational";
6301
+ /** @enum {string} */
6302
+ 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";
6303
+ /** @enum {string} */
6304
+ SdlcMetricDataStatus: "live" | "preview" | "unavailable";
6305
+ /** @enum {string} */
6306
+ SdlcMetricHealthStatus: "healthy" | "warning" | "critical" | "unknown";
6307
+ /** @enum {string} */
6308
+ SdlcBenchmarkBand: "elite" | "high" | "medium" | "low";
6309
+ SdlcMetricTrendDto: {
6310
+ /** @enum {string} */
6311
+ direction: "up" | "down" | "flat";
6312
+ deltaPercent?: number;
6313
+ };
6314
+ SdlcDailySeriesPointDto: {
6315
+ /**
6316
+ * Format: date
6317
+ * @description Inclusive ISO calendar day (UTC).
6318
+ */
6319
+ date: string;
6320
+ value: number;
6321
+ };
6322
+ SdlcMetricDto: {
6323
+ id: components["schemas"]["SdlcMetricId"];
6324
+ name: string;
6325
+ dataStatus: components["schemas"]["SdlcMetricDataStatus"];
6326
+ healthStatus: components["schemas"]["SdlcMetricHealthStatus"];
6327
+ value: (number | string) | null;
6328
+ unit?: string;
6329
+ secondaryValue?: (number | string) | null;
6330
+ secondaryLabel?: string;
6331
+ trend?: components["schemas"]["SdlcMetricTrendDto"];
6332
+ benchmarkBand?: components["schemas"]["SdlcBenchmarkBand"];
6333
+ drilldownAvailable: boolean;
6334
+ dailySeries?: components["schemas"]["SdlcDailySeriesPointDto"][];
6335
+ unavailableReason?: string;
6336
+ };
6337
+ SdlcModuleDto: {
6338
+ id: components["schemas"]["SdlcModuleId"];
6339
+ name: string;
6340
+ metrics: components["schemas"]["SdlcMetricDto"][];
6341
+ };
6342
+ SdlcOverviewDto: {
6343
+ rangeId: string;
6344
+ /** Format: date */
6345
+ from: string;
6346
+ /** Format: date */
6347
+ to: string;
6348
+ department: string;
6349
+ team: string;
6350
+ repoIds: string[];
6351
+ /** Format: date-time */
6352
+ asOf: string;
6353
+ modules: components["schemas"]["SdlcModuleDto"][];
6354
+ };
6355
+ SdlcDrilldownItemDto: {
6356
+ id: string;
6357
+ title: string;
6358
+ subtitle?: string;
6359
+ /** Format: uri */
6360
+ url?: string;
6361
+ /** Format: date-time */
6362
+ occurredAt?: string;
6363
+ metadata?: {
6364
+ [key: string]: string | number;
6365
+ };
6366
+ };
6367
+ SdlcDrilldownDto: {
6368
+ metricId: components["schemas"]["SdlcMetricId"];
6369
+ items: components["schemas"]["SdlcDrilldownItemDto"][];
6370
+ nextCursor?: string;
6371
+ };
6372
+ InsightsResponseMeta: {
6373
+ /**
6374
+ * Format: date-time
6375
+ * @description ISO timestamp when numbers were computed server-side
6376
+ */
6377
+ syncedAt: string;
6378
+ /**
6379
+ * @description Must be false for production handlers
6380
+ * @enum {boolean}
6381
+ */
6382
+ isMock: false;
6383
+ };
6384
+ /** @enum {string} */
6385
+ InsightsVerdictStatus: "healthy" | "watch" | "at-risk";
6386
+ InsightsRecommendationsVerdictSummary: {
6387
+ /** @description Merged-PR volume ratio vs prior equal-length window (current/prior). When priorMergedPrs is 0, value is 1.0 and productivityStatus is watch. */
6388
+ productivityMultiplier: number;
6389
+ productivityStatus: components["schemas"]["InsightsVerdictStatus"];
6390
+ ciFailRatePct: number;
6391
+ qualityStatus: components["schemas"]["InsightsVerdictStatus"];
6392
+ spendPerMergedPrUsd: number;
6393
+ spendPerMergedPrPrevUsd: number;
6394
+ costStatus: components["schemas"]["InsightsVerdictStatus"];
6395
+ };
6396
+ InsightsRecommendationsVerdictSummaryResponse: components["schemas"]["InsightsRecommendationsVerdictSummary"] & {
6397
+ _meta: components["schemas"]["InsightsResponseMeta"];
6398
+ };
6399
+ InsightsRoiEngineerPoint: {
6400
+ id: string;
6401
+ name: string;
6402
+ team: string;
6403
+ spendUsd: number;
6404
+ mergedPrs: number;
6405
+ };
6406
+ InsightsRecommendationsRoiQuadrant: {
6407
+ medianSpendUsd: number;
6408
+ medianMergedPrs: number;
6409
+ engineers: components["schemas"]["InsightsRoiEngineerPoint"][];
6410
+ correlationHint: string;
6411
+ };
6412
+ InsightsRecommendationsRoiQuadrantResponse: components["schemas"]["InsightsRecommendationsRoiQuadrant"] & {
6413
+ _meta: components["schemas"]["InsightsResponseMeta"];
6414
+ };
6415
+ InsightsVelocityQualityWeek: {
6416
+ /** Format: date */
6417
+ weekStartIso: string;
6418
+ mergedPrs: number;
6419
+ ciFailRatePct: number;
6420
+ };
6421
+ InsightsRecommendationsVelocityQuality: {
6422
+ weeks: components["schemas"]["InsightsVelocityQualityWeek"][];
6423
+ targetFailRatePct: number;
6424
+ volumeGrowthPct: number;
6425
+ };
6426
+ InsightsRecommendationsVelocityQualityResponse: components["schemas"]["InsightsRecommendationsVelocityQuality"] & {
6427
+ _meta: components["schemas"]["InsightsResponseMeta"];
6428
+ };
6429
+ /** @enum {string} */
6430
+ InsightsReviewStageId: "open-review" | "review-approval" | "approval-merge" | "merged";
6431
+ InsightsReviewStage: {
6432
+ id: components["schemas"]["InsightsReviewStageId"];
6433
+ name: string;
6434
+ /** @description Wait hours for funnel stages; 0 for the merged volume stage */
6435
+ medianHours: number;
6436
+ trendPct: number;
6437
+ };
6438
+ InsightsReviewerLoadItem: {
6439
+ id: string;
6440
+ name: string;
6441
+ reviewsCount: number;
6442
+ sharePct: number;
6443
+ };
6444
+ InsightsRecommendationsReviewPipeline: {
6445
+ stages: components["schemas"]["InsightsReviewStage"][];
6446
+ bottleneckStageId: components["schemas"]["InsightsReviewStageId"];
6447
+ reviewerLoad: components["schemas"]["InsightsReviewerLoadItem"][];
6448
+ };
6449
+ InsightsRecommendationsReviewPipelineResponse: components["schemas"]["InsightsRecommendationsReviewPipeline"] & {
6450
+ _meta: components["schemas"]["InsightsResponseMeta"];
6451
+ };
6452
+ InsightsCostPerPrTeam: {
6453
+ id: string;
6454
+ name: string;
6455
+ activeAi: number;
6456
+ spendUsd: number;
6457
+ mergedPrs: number;
6458
+ costPerPrUsd: number;
6459
+ changePct: number;
6460
+ };
6461
+ InsightsRecommendationsCostPerPr: {
6462
+ orgAvgCostUsd: number;
6463
+ orgAvgPrevUsd: number;
6464
+ teams: components["schemas"]["InsightsCostPerPrTeam"][];
6465
+ };
6466
+ InsightsRecommendationsCostPerPrResponse: components["schemas"]["InsightsRecommendationsCostPerPr"] & {
6467
+ _meta: components["schemas"]["InsightsResponseMeta"];
6468
+ };
6469
+ InsightsAdoptionTeam: {
6470
+ id: string;
6471
+ name: string;
6472
+ activeAi: number;
6473
+ totalMembers: number;
6474
+ readinessPct: number;
6475
+ outputPerEngPerWeek: number;
6476
+ };
6477
+ InsightsRecommendationsAdoptionGap: {
6478
+ totalContributors: number;
6479
+ activeContributors: number;
6480
+ upliftPct: number;
6481
+ teams: components["schemas"]["InsightsAdoptionTeam"][];
6482
+ };
6483
+ InsightsRecommendationsAdoptionGapResponse: components["schemas"]["InsightsRecommendationsAdoptionGap"] & {
6484
+ _meta: components["schemas"]["InsightsResponseMeta"];
6485
+ };
6486
+ /** @enum {string} */
6487
+ InsightsRecommendationModuleId: "mod-spend-vs-output" | "mod-velocity-vs-quality" | "mod-review-bottleneck" | "mod-cost-per-pr" | "mod-adoption-gap";
6488
+ /** @enum {string} */
6489
+ InsightsRecommendationImpact: "high" | "medium";
6490
+ /** @enum {string} */
6491
+ InsightsRecommendationTone: "action" | "no-action";
6492
+ /** @enum {string} */
6493
+ InsightsEvidenceLinkKind: "user-spend" | "team" | "contributor" | "repo" | "module";
6494
+ InsightsEvidenceChip: {
6495
+ label: string;
6496
+ kind: components["schemas"]["InsightsEvidenceLinkKind"];
6497
+ targetId: string;
6498
+ };
6499
+ InsightsRecommendationEvidenceGroup: {
6500
+ title: string;
6501
+ chips: components["schemas"]["InsightsEvidenceChip"][];
6502
+ };
6503
+ InsightsRecommendationDto: {
6504
+ moduleId: components["schemas"]["InsightsRecommendationModuleId"];
6505
+ moduleName: string;
6506
+ tone: components["schemas"]["InsightsRecommendationTone"];
6507
+ impact: components["schemas"]["InsightsRecommendationImpact"];
6508
+ headline: string;
6509
+ /** @description For tone=action must cite one AI metric and one delivery metric */
6510
+ observed: string;
6511
+ action: string;
6512
+ benefit: string;
6513
+ confidencePct: number;
6514
+ evidence: components["schemas"]["InsightsRecommendationEvidenceGroup"][];
6515
+ };
6516
+ InsightsRecommendationsListResponse: {
6517
+ items: components["schemas"]["InsightsRecommendationDto"][];
6518
+ _meta: components["schemas"]["InsightsResponseMeta"];
6519
+ };
6119
6520
  };
6120
6521
  responses: {
6121
6522
  /** @description Missing or invalid bearer token */
@@ -6169,8 +6570,24 @@ export interface components {
6169
6570
  InsightsProductivityFrom: string;
6170
6571
  /** @description Inclusive end of a daily window (`YYYY-MM-DD`). When set with `from`, overrides `rangeId` for day-mode responses (max 180 days). */
6171
6572
  InsightsProductivityTo: string;
6573
+ /** @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). */
6574
+ InsightsSdlcRangeId: string;
6172
6575
  /** @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). */
6173
6576
  InsightsDepartmentFilter: string;
6577
+ /** @description Org-chart department ids (repeat param or comma-separated). Empty/omitted = all departments. */
6578
+ InsightsRecommendationsDepartments: string[];
6579
+ /** @description Org-chart team ids (repeat param or comma-separated). Empty/omitted = all teams in department scope. */
6580
+ InsightsRecommendationsTeams: string[];
6581
+ /** @description Inclusive window start (`YYYY-MM-DD`). Required with `dateTo`. Maps to Measure day-mode custom range (`from`/`to`). Max span 180 days. */
6582
+ InsightsRecommendationsDateFrom: string;
6583
+ /** @description Inclusive window end (`YYYY-MM-DD`). Required with `dateFrom`. */
6584
+ InsightsRecommendationsDateTo: string;
6585
+ /** @description AI provider ids (e.g. `cursor`, `copilot`). Empty/omitted = all configured providers. */
6586
+ InsightsRecommendationsProvider: string[];
6587
+ /** @description Include contributors / AI rows not mapped to a team. */
6588
+ InsightsRecommendationsIncludeUnmapped: boolean;
6589
+ /** @description Include bot accounts in PR/CI stats. */
6590
+ InsightsRecommendationsIncludeBots: boolean;
6174
6591
  /** @description Page size (default 25, max 100). */
6175
6592
  PaginationLimit: number;
6176
6593
  /** @description Zero-based row offset into the filtered, sorted result set. */
@@ -6495,6 +6912,47 @@ export type HrisProviderSyncResultDto = components['schemas']['HrisProviderSyncR
6495
6912
  export type ActivityLogPageDto = components['schemas']['ActivityLogPageDto'];
6496
6913
  export type ReadinessTokenUsageRowDto = components['schemas']['ReadinessTokenUsageRowDto'];
6497
6914
  export type ReadinessTokenUsageByDimensionRowDto = components['schemas']['ReadinessTokenUsageByDimensionRowDto'];
6915
+ export type SdlcModuleId = components['schemas']['SdlcModuleId'];
6916
+ export type SdlcMetricId = components['schemas']['SdlcMetricId'];
6917
+ export type SdlcMetricDataStatus = components['schemas']['SdlcMetricDataStatus'];
6918
+ export type SdlcMetricHealthStatus = components['schemas']['SdlcMetricHealthStatus'];
6919
+ export type SdlcBenchmarkBand = components['schemas']['SdlcBenchmarkBand'];
6920
+ export type SdlcMetricTrendDto = components['schemas']['SdlcMetricTrendDto'];
6921
+ export type SdlcDailySeriesPointDto = components['schemas']['SdlcDailySeriesPointDto'];
6922
+ export type SdlcMetricDto = components['schemas']['SdlcMetricDto'];
6923
+ export type SdlcModuleDto = components['schemas']['SdlcModuleDto'];
6924
+ export type SdlcOverviewDto = components['schemas']['SdlcOverviewDto'];
6925
+ export type SdlcDrilldownItemDto = components['schemas']['SdlcDrilldownItemDto'];
6926
+ export type SdlcDrilldownDto = components['schemas']['SdlcDrilldownDto'];
6927
+ export type InsightsResponseMeta = components['schemas']['InsightsResponseMeta'];
6928
+ export type InsightsVerdictStatus = components['schemas']['InsightsVerdictStatus'];
6929
+ export type InsightsRecommendationsVerdictSummary = components['schemas']['InsightsRecommendationsVerdictSummary'];
6930
+ export type InsightsRecommendationsVerdictSummaryResponse = components['schemas']['InsightsRecommendationsVerdictSummaryResponse'];
6931
+ export type InsightsRoiEngineerPoint = components['schemas']['InsightsRoiEngineerPoint'];
6932
+ export type InsightsRecommendationsRoiQuadrant = components['schemas']['InsightsRecommendationsRoiQuadrant'];
6933
+ export type InsightsRecommendationsRoiQuadrantResponse = components['schemas']['InsightsRecommendationsRoiQuadrantResponse'];
6934
+ export type InsightsVelocityQualityWeek = components['schemas']['InsightsVelocityQualityWeek'];
6935
+ export type InsightsRecommendationsVelocityQuality = components['schemas']['InsightsRecommendationsVelocityQuality'];
6936
+ export type InsightsRecommendationsVelocityQualityResponse = components['schemas']['InsightsRecommendationsVelocityQualityResponse'];
6937
+ export type InsightsReviewStageId = components['schemas']['InsightsReviewStageId'];
6938
+ export type InsightsReviewStage = components['schemas']['InsightsReviewStage'];
6939
+ export type InsightsReviewerLoadItem = components['schemas']['InsightsReviewerLoadItem'];
6940
+ export type InsightsRecommendationsReviewPipeline = components['schemas']['InsightsRecommendationsReviewPipeline'];
6941
+ export type InsightsRecommendationsReviewPipelineResponse = components['schemas']['InsightsRecommendationsReviewPipelineResponse'];
6942
+ export type InsightsCostPerPrTeam = components['schemas']['InsightsCostPerPrTeam'];
6943
+ export type InsightsRecommendationsCostPerPr = components['schemas']['InsightsRecommendationsCostPerPr'];
6944
+ export type InsightsRecommendationsCostPerPrResponse = components['schemas']['InsightsRecommendationsCostPerPrResponse'];
6945
+ export type InsightsAdoptionTeam = components['schemas']['InsightsAdoptionTeam'];
6946
+ export type InsightsRecommendationsAdoptionGap = components['schemas']['InsightsRecommendationsAdoptionGap'];
6947
+ export type InsightsRecommendationsAdoptionGapResponse = components['schemas']['InsightsRecommendationsAdoptionGapResponse'];
6948
+ export type InsightsRecommendationModuleId = components['schemas']['InsightsRecommendationModuleId'];
6949
+ export type InsightsRecommendationImpact = components['schemas']['InsightsRecommendationImpact'];
6950
+ export type InsightsRecommendationTone = components['schemas']['InsightsRecommendationTone'];
6951
+ export type InsightsEvidenceLinkKind = components['schemas']['InsightsEvidenceLinkKind'];
6952
+ export type InsightsEvidenceChip = components['schemas']['InsightsEvidenceChip'];
6953
+ export type InsightsRecommendationEvidenceGroup = components['schemas']['InsightsRecommendationEvidenceGroup'];
6954
+ export type InsightsRecommendationDto = components['schemas']['InsightsRecommendationDto'];
6955
+ export type InsightsRecommendationsListResponse = components['schemas']['InsightsRecommendationsListResponse'];
6498
6956
  export type ResponseUnauthorized = components['responses']['Unauthorized'];
6499
6957
  export type ResponseForbidden = components['responses']['Forbidden'];
6500
6958
  export type ResponseZenHrSyncInProgress = components['responses']['ZenHrSyncInProgress'];
@@ -6509,7 +6967,15 @@ export type ParameterFixId = components['parameters']['FixId'];
6509
6967
  export type ParameterInsightsProductivityRangeId = components['parameters']['InsightsProductivityRangeId'];
6510
6968
  export type ParameterInsightsProductivityFrom = components['parameters']['InsightsProductivityFrom'];
6511
6969
  export type ParameterInsightsProductivityTo = components['parameters']['InsightsProductivityTo'];
6970
+ export type ParameterInsightsSdlcRangeId = components['parameters']['InsightsSdlcRangeId'];
6512
6971
  export type ParameterInsightsDepartmentFilter = components['parameters']['InsightsDepartmentFilter'];
6972
+ export type ParameterInsightsRecommendationsDepartments = components['parameters']['InsightsRecommendationsDepartments'];
6973
+ export type ParameterInsightsRecommendationsTeams = components['parameters']['InsightsRecommendationsTeams'];
6974
+ export type ParameterInsightsRecommendationsDateFrom = components['parameters']['InsightsRecommendationsDateFrom'];
6975
+ export type ParameterInsightsRecommendationsDateTo = components['parameters']['InsightsRecommendationsDateTo'];
6976
+ export type ParameterInsightsRecommendationsProvider = components['parameters']['InsightsRecommendationsProvider'];
6977
+ export type ParameterInsightsRecommendationsIncludeUnmapped = components['parameters']['InsightsRecommendationsIncludeUnmapped'];
6978
+ export type ParameterInsightsRecommendationsIncludeBots = components['parameters']['InsightsRecommendationsIncludeBots'];
6513
6979
  export type ParameterPaginationLimit = components['parameters']['PaginationLimit'];
6514
6980
  export type ParameterPaginationOffset = components['parameters']['PaginationOffset'];
6515
6981
  export type ParameterPaginationOrder = components['parameters']['PaginationOrder'];
@@ -9101,6 +9567,518 @@ export interface operations {
9101
9567
  };
9102
9568
  };
9103
9569
  };
9570
+ getSdlcInsightsOverview: {
9571
+ parameters: {
9572
+ query?: {
9573
+ /** @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). */
9574
+ rangeId?: components["parameters"]["InsightsSdlcRangeId"];
9575
+ /** @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). */
9576
+ department?: components["parameters"]["InsightsDepartmentFilter"];
9577
+ /** @description Team name filter; send `All teams` to include every team. */
9578
+ team?: string;
9579
+ /** @description Comma-separated internal repo ids; omit or empty for all repos. */
9580
+ repoIds?: string;
9581
+ };
9582
+ header?: never;
9583
+ path: {
9584
+ workspaceId: components["parameters"]["WorkspaceId"];
9585
+ };
9586
+ cookie?: never;
9587
+ };
9588
+ requestBody?: never;
9589
+ responses: {
9590
+ /** @description Engineering Health overview payload */
9591
+ 200: {
9592
+ headers: {
9593
+ [name: string]: unknown;
9594
+ };
9595
+ content: {
9596
+ "application/json": components["schemas"]["SdlcOverviewDto"];
9597
+ };
9598
+ };
9599
+ /** @description Invalid query parameters */
9600
+ 400: {
9601
+ headers: {
9602
+ [name: string]: unknown;
9603
+ };
9604
+ content: {
9605
+ "application/json": {
9606
+ /** @example invalid_query */
9607
+ error: string;
9608
+ };
9609
+ };
9610
+ };
9611
+ 401: components["responses"]["Unauthorized"];
9612
+ 403: components["responses"]["Forbidden"];
9613
+ /** @description Workspace does not exist or malformed workspaceId */
9614
+ 404: {
9615
+ headers: {
9616
+ [name: string]: unknown;
9617
+ };
9618
+ content?: never;
9619
+ };
9620
+ };
9621
+ };
9622
+ getSdlcInsightsDrilldown: {
9623
+ parameters: {
9624
+ query?: {
9625
+ /** @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). */
9626
+ rangeId?: components["parameters"]["InsightsSdlcRangeId"];
9627
+ /** @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). */
9628
+ department?: components["parameters"]["InsightsDepartmentFilter"];
9629
+ team?: string;
9630
+ repoIds?: string;
9631
+ /** @description Opaque pagination cursor from a prior response. */
9632
+ cursor?: string;
9633
+ limit?: number;
9634
+ };
9635
+ header?: never;
9636
+ path: {
9637
+ workspaceId: components["parameters"]["WorkspaceId"];
9638
+ metricId: components["schemas"]["SdlcMetricId"];
9639
+ };
9640
+ cookie?: never;
9641
+ };
9642
+ requestBody?: never;
9643
+ responses: {
9644
+ /** @description Drill-down page */
9645
+ 200: {
9646
+ headers: {
9647
+ [name: string]: unknown;
9648
+ };
9649
+ content: {
9650
+ "application/json": components["schemas"]["SdlcDrilldownDto"];
9651
+ };
9652
+ };
9653
+ /** @description Invalid query parameters */
9654
+ 400: {
9655
+ headers: {
9656
+ [name: string]: unknown;
9657
+ };
9658
+ content: {
9659
+ "application/json": {
9660
+ /** @example invalid_query */
9661
+ error: string;
9662
+ };
9663
+ };
9664
+ };
9665
+ 401: components["responses"]["Unauthorized"];
9666
+ 403: components["responses"]["Forbidden"];
9667
+ /** @description Workspace or metric not found */
9668
+ 404: {
9669
+ headers: {
9670
+ [name: string]: unknown;
9671
+ };
9672
+ content?: never;
9673
+ };
9674
+ };
9675
+ };
9676
+ getInsightsRecommendationsVerdictSummary: {
9677
+ parameters: {
9678
+ query: {
9679
+ /** @description Org-chart department ids (repeat param or comma-separated). Empty/omitted = all departments. */
9680
+ departments?: components["parameters"]["InsightsRecommendationsDepartments"];
9681
+ /** @description Org-chart team ids (repeat param or comma-separated). Empty/omitted = all teams in department scope. */
9682
+ teams?: components["parameters"]["InsightsRecommendationsTeams"];
9683
+ /** @description Inclusive window start (`YYYY-MM-DD`). Required with `dateTo`. Maps to Measure day-mode custom range (`from`/`to`). Max span 180 days. */
9684
+ dateFrom: components["parameters"]["InsightsRecommendationsDateFrom"];
9685
+ /** @description Inclusive window end (`YYYY-MM-DD`). Required with `dateFrom`. */
9686
+ dateTo: components["parameters"]["InsightsRecommendationsDateTo"];
9687
+ /** @description AI provider ids (e.g. `cursor`, `copilot`). Empty/omitted = all configured providers. */
9688
+ provider?: components["parameters"]["InsightsRecommendationsProvider"];
9689
+ /** @description Include contributors / AI rows not mapped to a team. */
9690
+ includeUnmapped?: components["parameters"]["InsightsRecommendationsIncludeUnmapped"];
9691
+ /** @description Include bot accounts in PR/CI stats. */
9692
+ includeBots?: components["parameters"]["InsightsRecommendationsIncludeBots"];
9693
+ };
9694
+ header?: never;
9695
+ path: {
9696
+ workspaceId: components["parameters"]["WorkspaceId"];
9697
+ };
9698
+ cookie?: never;
9699
+ };
9700
+ requestBody?: never;
9701
+ responses: {
9702
+ /** @description Verdict summary with `_meta.isMock=false` */
9703
+ 200: {
9704
+ headers: {
9705
+ [name: string]: unknown;
9706
+ };
9707
+ content: {
9708
+ "application/json": components["schemas"]["InsightsRecommendationsVerdictSummaryResponse"];
9709
+ };
9710
+ };
9711
+ /** @description Invalid filter or date range */
9712
+ 400: {
9713
+ headers: {
9714
+ [name: string]: unknown;
9715
+ };
9716
+ content: {
9717
+ "application/json": {
9718
+ /** @example invalid_query */
9719
+ error: string;
9720
+ };
9721
+ };
9722
+ };
9723
+ 401: components["responses"]["Unauthorized"];
9724
+ 403: components["responses"]["Forbidden"];
9725
+ /** @description Workspace does not exist or malformed workspaceId */
9726
+ 404: {
9727
+ headers: {
9728
+ [name: string]: unknown;
9729
+ };
9730
+ content?: never;
9731
+ };
9732
+ };
9733
+ };
9734
+ getInsightsRecommendationsRoiQuadrant: {
9735
+ parameters: {
9736
+ query: {
9737
+ /** @description Org-chart department ids (repeat param or comma-separated). Empty/omitted = all departments. */
9738
+ departments?: components["parameters"]["InsightsRecommendationsDepartments"];
9739
+ /** @description Org-chart team ids (repeat param or comma-separated). Empty/omitted = all teams in department scope. */
9740
+ teams?: components["parameters"]["InsightsRecommendationsTeams"];
9741
+ /** @description Inclusive window start (`YYYY-MM-DD`). Required with `dateTo`. Maps to Measure day-mode custom range (`from`/`to`). Max span 180 days. */
9742
+ dateFrom: components["parameters"]["InsightsRecommendationsDateFrom"];
9743
+ /** @description Inclusive window end (`YYYY-MM-DD`). Required with `dateFrom`. */
9744
+ dateTo: components["parameters"]["InsightsRecommendationsDateTo"];
9745
+ /** @description AI provider ids (e.g. `cursor`, `copilot`). Empty/omitted = all configured providers. */
9746
+ provider?: components["parameters"]["InsightsRecommendationsProvider"];
9747
+ /** @description Include contributors / AI rows not mapped to a team. */
9748
+ includeUnmapped?: components["parameters"]["InsightsRecommendationsIncludeUnmapped"];
9749
+ /** @description Include bot accounts in PR/CI stats. */
9750
+ includeBots?: components["parameters"]["InsightsRecommendationsIncludeBots"];
9751
+ };
9752
+ header?: never;
9753
+ path: {
9754
+ workspaceId: components["parameters"]["WorkspaceId"];
9755
+ };
9756
+ cookie?: never;
9757
+ };
9758
+ requestBody?: never;
9759
+ responses: {
9760
+ /** @description ROI quadrant payload */
9761
+ 200: {
9762
+ headers: {
9763
+ [name: string]: unknown;
9764
+ };
9765
+ content: {
9766
+ "application/json": components["schemas"]["InsightsRecommendationsRoiQuadrantResponse"];
9767
+ };
9768
+ };
9769
+ /** @description Invalid filter or date range */
9770
+ 400: {
9771
+ headers: {
9772
+ [name: string]: unknown;
9773
+ };
9774
+ content: {
9775
+ "application/json": {
9776
+ /** @example invalid_query */
9777
+ error: string;
9778
+ };
9779
+ };
9780
+ };
9781
+ 401: components["responses"]["Unauthorized"];
9782
+ 403: components["responses"]["Forbidden"];
9783
+ /** @description Workspace does not exist or malformed workspaceId */
9784
+ 404: {
9785
+ headers: {
9786
+ [name: string]: unknown;
9787
+ };
9788
+ content?: never;
9789
+ };
9790
+ };
9791
+ };
9792
+ getInsightsRecommendationsVelocityQuality: {
9793
+ parameters: {
9794
+ query: {
9795
+ /** @description Org-chart department ids (repeat param or comma-separated). Empty/omitted = all departments. */
9796
+ departments?: components["parameters"]["InsightsRecommendationsDepartments"];
9797
+ /** @description Org-chart team ids (repeat param or comma-separated). Empty/omitted = all teams in department scope. */
9798
+ teams?: components["parameters"]["InsightsRecommendationsTeams"];
9799
+ /** @description Inclusive window start (`YYYY-MM-DD`). Required with `dateTo`. Maps to Measure day-mode custom range (`from`/`to`). Max span 180 days. */
9800
+ dateFrom: components["parameters"]["InsightsRecommendationsDateFrom"];
9801
+ /** @description Inclusive window end (`YYYY-MM-DD`). Required with `dateFrom`. */
9802
+ dateTo: components["parameters"]["InsightsRecommendationsDateTo"];
9803
+ /** @description AI provider ids (e.g. `cursor`, `copilot`). Empty/omitted = all configured providers. */
9804
+ provider?: components["parameters"]["InsightsRecommendationsProvider"];
9805
+ /** @description Include contributors / AI rows not mapped to a team. */
9806
+ includeUnmapped?: components["parameters"]["InsightsRecommendationsIncludeUnmapped"];
9807
+ /** @description Include bot accounts in PR/CI stats. */
9808
+ includeBots?: components["parameters"]["InsightsRecommendationsIncludeBots"];
9809
+ };
9810
+ header?: never;
9811
+ path: {
9812
+ workspaceId: components["parameters"]["WorkspaceId"];
9813
+ };
9814
+ cookie?: never;
9815
+ };
9816
+ requestBody?: never;
9817
+ responses: {
9818
+ /** @description Velocity vs quality payload */
9819
+ 200: {
9820
+ headers: {
9821
+ [name: string]: unknown;
9822
+ };
9823
+ content: {
9824
+ "application/json": components["schemas"]["InsightsRecommendationsVelocityQualityResponse"];
9825
+ };
9826
+ };
9827
+ /** @description Invalid filter or date range */
9828
+ 400: {
9829
+ headers: {
9830
+ [name: string]: unknown;
9831
+ };
9832
+ content: {
9833
+ "application/json": {
9834
+ /** @example invalid_query */
9835
+ error: string;
9836
+ };
9837
+ };
9838
+ };
9839
+ 401: components["responses"]["Unauthorized"];
9840
+ 403: components["responses"]["Forbidden"];
9841
+ /** @description Workspace does not exist or malformed workspaceId */
9842
+ 404: {
9843
+ headers: {
9844
+ [name: string]: unknown;
9845
+ };
9846
+ content?: never;
9847
+ };
9848
+ };
9849
+ };
9850
+ getInsightsRecommendationsReviewPipeline: {
9851
+ parameters: {
9852
+ query: {
9853
+ /** @description Org-chart department ids (repeat param or comma-separated). Empty/omitted = all departments. */
9854
+ departments?: components["parameters"]["InsightsRecommendationsDepartments"];
9855
+ /** @description Org-chart team ids (repeat param or comma-separated). Empty/omitted = all teams in department scope. */
9856
+ teams?: components["parameters"]["InsightsRecommendationsTeams"];
9857
+ /** @description Inclusive window start (`YYYY-MM-DD`). Required with `dateTo`. Maps to Measure day-mode custom range (`from`/`to`). Max span 180 days. */
9858
+ dateFrom: components["parameters"]["InsightsRecommendationsDateFrom"];
9859
+ /** @description Inclusive window end (`YYYY-MM-DD`). Required with `dateFrom`. */
9860
+ dateTo: components["parameters"]["InsightsRecommendationsDateTo"];
9861
+ /** @description AI provider ids (e.g. `cursor`, `copilot`). Empty/omitted = all configured providers. */
9862
+ provider?: components["parameters"]["InsightsRecommendationsProvider"];
9863
+ /** @description Include contributors / AI rows not mapped to a team. */
9864
+ includeUnmapped?: components["parameters"]["InsightsRecommendationsIncludeUnmapped"];
9865
+ /** @description Include bot accounts in PR/CI stats. */
9866
+ includeBots?: components["parameters"]["InsightsRecommendationsIncludeBots"];
9867
+ };
9868
+ header?: never;
9869
+ path: {
9870
+ workspaceId: components["parameters"]["WorkspaceId"];
9871
+ };
9872
+ cookie?: never;
9873
+ };
9874
+ requestBody?: never;
9875
+ responses: {
9876
+ /** @description Review pipeline payload */
9877
+ 200: {
9878
+ headers: {
9879
+ [name: string]: unknown;
9880
+ };
9881
+ content: {
9882
+ "application/json": components["schemas"]["InsightsRecommendationsReviewPipelineResponse"];
9883
+ };
9884
+ };
9885
+ /** @description Invalid filter or date range */
9886
+ 400: {
9887
+ headers: {
9888
+ [name: string]: unknown;
9889
+ };
9890
+ content: {
9891
+ "application/json": {
9892
+ /** @example invalid_query */
9893
+ error: string;
9894
+ };
9895
+ };
9896
+ };
9897
+ 401: components["responses"]["Unauthorized"];
9898
+ 403: components["responses"]["Forbidden"];
9899
+ /** @description Workspace does not exist or malformed workspaceId */
9900
+ 404: {
9901
+ headers: {
9902
+ [name: string]: unknown;
9903
+ };
9904
+ content?: never;
9905
+ };
9906
+ };
9907
+ };
9908
+ getInsightsRecommendationsCostPerPr: {
9909
+ parameters: {
9910
+ query: {
9911
+ /** @description Org-chart department ids (repeat param or comma-separated). Empty/omitted = all departments. */
9912
+ departments?: components["parameters"]["InsightsRecommendationsDepartments"];
9913
+ /** @description Org-chart team ids (repeat param or comma-separated). Empty/omitted = all teams in department scope. */
9914
+ teams?: components["parameters"]["InsightsRecommendationsTeams"];
9915
+ /** @description Inclusive window start (`YYYY-MM-DD`). Required with `dateTo`. Maps to Measure day-mode custom range (`from`/`to`). Max span 180 days. */
9916
+ dateFrom: components["parameters"]["InsightsRecommendationsDateFrom"];
9917
+ /** @description Inclusive window end (`YYYY-MM-DD`). Required with `dateFrom`. */
9918
+ dateTo: components["parameters"]["InsightsRecommendationsDateTo"];
9919
+ /** @description AI provider ids (e.g. `cursor`, `copilot`). Empty/omitted = all configured providers. */
9920
+ provider?: components["parameters"]["InsightsRecommendationsProvider"];
9921
+ /** @description Include contributors / AI rows not mapped to a team. */
9922
+ includeUnmapped?: components["parameters"]["InsightsRecommendationsIncludeUnmapped"];
9923
+ /** @description Include bot accounts in PR/CI stats. */
9924
+ includeBots?: components["parameters"]["InsightsRecommendationsIncludeBots"];
9925
+ };
9926
+ header?: never;
9927
+ path: {
9928
+ workspaceId: components["parameters"]["WorkspaceId"];
9929
+ };
9930
+ cookie?: never;
9931
+ };
9932
+ requestBody?: never;
9933
+ responses: {
9934
+ /** @description Cost per PR payload */
9935
+ 200: {
9936
+ headers: {
9937
+ [name: string]: unknown;
9938
+ };
9939
+ content: {
9940
+ "application/json": components["schemas"]["InsightsRecommendationsCostPerPrResponse"];
9941
+ };
9942
+ };
9943
+ /** @description Invalid filter or date range */
9944
+ 400: {
9945
+ headers: {
9946
+ [name: string]: unknown;
9947
+ };
9948
+ content: {
9949
+ "application/json": {
9950
+ /** @example invalid_query */
9951
+ error: string;
9952
+ };
9953
+ };
9954
+ };
9955
+ 401: components["responses"]["Unauthorized"];
9956
+ 403: components["responses"]["Forbidden"];
9957
+ /** @description Workspace does not exist or malformed workspaceId */
9958
+ 404: {
9959
+ headers: {
9960
+ [name: string]: unknown;
9961
+ };
9962
+ content?: never;
9963
+ };
9964
+ };
9965
+ };
9966
+ getInsightsRecommendationsAdoptionGap: {
9967
+ parameters: {
9968
+ query: {
9969
+ /** @description Org-chart department ids (repeat param or comma-separated). Empty/omitted = all departments. */
9970
+ departments?: components["parameters"]["InsightsRecommendationsDepartments"];
9971
+ /** @description Org-chart team ids (repeat param or comma-separated). Empty/omitted = all teams in department scope. */
9972
+ teams?: components["parameters"]["InsightsRecommendationsTeams"];
9973
+ /** @description Inclusive window start (`YYYY-MM-DD`). Required with `dateTo`. Maps to Measure day-mode custom range (`from`/`to`). Max span 180 days. */
9974
+ dateFrom: components["parameters"]["InsightsRecommendationsDateFrom"];
9975
+ /** @description Inclusive window end (`YYYY-MM-DD`). Required with `dateFrom`. */
9976
+ dateTo: components["parameters"]["InsightsRecommendationsDateTo"];
9977
+ /** @description AI provider ids (e.g. `cursor`, `copilot`). Empty/omitted = all configured providers. */
9978
+ provider?: components["parameters"]["InsightsRecommendationsProvider"];
9979
+ /** @description Include contributors / AI rows not mapped to a team. */
9980
+ includeUnmapped?: components["parameters"]["InsightsRecommendationsIncludeUnmapped"];
9981
+ /** @description Include bot accounts in PR/CI stats. */
9982
+ includeBots?: components["parameters"]["InsightsRecommendationsIncludeBots"];
9983
+ };
9984
+ header?: never;
9985
+ path: {
9986
+ workspaceId: components["parameters"]["WorkspaceId"];
9987
+ };
9988
+ cookie?: never;
9989
+ };
9990
+ requestBody?: never;
9991
+ responses: {
9992
+ /** @description Adoption gap payload */
9993
+ 200: {
9994
+ headers: {
9995
+ [name: string]: unknown;
9996
+ };
9997
+ content: {
9998
+ "application/json": components["schemas"]["InsightsRecommendationsAdoptionGapResponse"];
9999
+ };
10000
+ };
10001
+ /** @description Invalid filter or date range */
10002
+ 400: {
10003
+ headers: {
10004
+ [name: string]: unknown;
10005
+ };
10006
+ content: {
10007
+ "application/json": {
10008
+ /** @example invalid_query */
10009
+ error: string;
10010
+ };
10011
+ };
10012
+ };
10013
+ 401: components["responses"]["Unauthorized"];
10014
+ 403: components["responses"]["Forbidden"];
10015
+ /** @description Workspace does not exist or malformed workspaceId */
10016
+ 404: {
10017
+ headers: {
10018
+ [name: string]: unknown;
10019
+ };
10020
+ content?: never;
10021
+ };
10022
+ };
10023
+ };
10024
+ getInsightsRecommendationsRecommendations: {
10025
+ parameters: {
10026
+ query: {
10027
+ /** @description Org-chart department ids (repeat param or comma-separated). Empty/omitted = all departments. */
10028
+ departments?: components["parameters"]["InsightsRecommendationsDepartments"];
10029
+ /** @description Org-chart team ids (repeat param or comma-separated). Empty/omitted = all teams in department scope. */
10030
+ teams?: components["parameters"]["InsightsRecommendationsTeams"];
10031
+ /** @description Inclusive window start (`YYYY-MM-DD`). Required with `dateTo`. Maps to Measure day-mode custom range (`from`/`to`). Max span 180 days. */
10032
+ dateFrom: components["parameters"]["InsightsRecommendationsDateFrom"];
10033
+ /** @description Inclusive window end (`YYYY-MM-DD`). Required with `dateFrom`. */
10034
+ dateTo: components["parameters"]["InsightsRecommendationsDateTo"];
10035
+ /** @description AI provider ids (e.g. `cursor`, `copilot`). Empty/omitted = all configured providers. */
10036
+ provider?: components["parameters"]["InsightsRecommendationsProvider"];
10037
+ /** @description Include contributors / AI rows not mapped to a team. */
10038
+ includeUnmapped?: components["parameters"]["InsightsRecommendationsIncludeUnmapped"];
10039
+ /** @description Include bot accounts in PR/CI stats. */
10040
+ includeBots?: components["parameters"]["InsightsRecommendationsIncludeBots"];
10041
+ };
10042
+ header?: never;
10043
+ path: {
10044
+ workspaceId: components["parameters"]["WorkspaceId"];
10045
+ };
10046
+ cookie?: never;
10047
+ };
10048
+ requestBody?: never;
10049
+ responses: {
10050
+ /** @description Recommendation items */
10051
+ 200: {
10052
+ headers: {
10053
+ [name: string]: unknown;
10054
+ };
10055
+ content: {
10056
+ "application/json": components["schemas"]["InsightsRecommendationsListResponse"];
10057
+ };
10058
+ };
10059
+ /** @description Invalid filter or date range */
10060
+ 400: {
10061
+ headers: {
10062
+ [name: string]: unknown;
10063
+ };
10064
+ content: {
10065
+ "application/json": {
10066
+ /** @example invalid_query */
10067
+ error: string;
10068
+ };
10069
+ };
10070
+ };
10071
+ 401: components["responses"]["Unauthorized"];
10072
+ 403: components["responses"]["Forbidden"];
10073
+ /** @description Workspace does not exist or malformed workspaceId */
10074
+ 404: {
10075
+ headers: {
10076
+ [name: string]: unknown;
10077
+ };
10078
+ content?: never;
10079
+ };
10080
+ };
10081
+ };
9104
10082
  getAiToolMembers: {
9105
10083
  parameters: {
9106
10084
  query?: {