@thinkai/tai-api-contract 2.125.0 → 2.127.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.
@@ -1393,6 +1393,46 @@ export interface paths {
1393
1393
  patch?: never;
1394
1394
  trace?: never;
1395
1395
  };
1396
+ "/workspaces/{workspaceId}/insights/test-pyramid/summary": {
1397
+ parameters: {
1398
+ query?: never;
1399
+ header?: never;
1400
+ path?: never;
1401
+ cookie?: never;
1402
+ };
1403
+ /**
1404
+ * Test pyramid assessment — workspace summary
1405
+ * @description Org-level Test pyramid assessment for `/insights/test-pyramid`. Aggregates each active repo's **latest** readiness-scan test-pyramid snapshot. Layer **presence is count-based** (`fileCount > 0`); CI/dependency-only AF `present` flags are ignored. Shape uses fixed advisory targets (base ~70% unit, middle ~20% integration+contract+acceptance/BDD, top ~10% E2E) and returns `insufficient_data` when total classified test files < 10. Does not change Agentic Foundation `/readiness/test-pyramid*` responses.
1406
+ */
1407
+ get: operations["getInsightsTestPyramidSummary"];
1408
+ put?: never;
1409
+ post?: never;
1410
+ delete?: never;
1411
+ options?: never;
1412
+ head?: never;
1413
+ patch?: never;
1414
+ trace?: never;
1415
+ };
1416
+ "/workspaces/{workspaceId}/insights/test-pyramid/repos": {
1417
+ parameters: {
1418
+ query?: never;
1419
+ header?: never;
1420
+ path?: never;
1421
+ cookie?: never;
1422
+ };
1423
+ /**
1424
+ * Test pyramid assessment — per-repo list (paginated)
1425
+ * @description Page of repos with latest classified test-file counts, count-based presence, presence maturity, and shape assessment. Use `gapsByLayer` on the summary endpoint (or filter this list via layerPresent) to answer “who lacks layer X?”. No v1 repo-detail Insights route — link repo names to AF readiness inventory.
1426
+ */
1427
+ get: operations["listInsightsTestPyramidRepos"];
1428
+ put?: never;
1429
+ post?: never;
1430
+ delete?: never;
1431
+ options?: never;
1432
+ head?: never;
1433
+ patch?: never;
1434
+ trace?: never;
1435
+ };
1396
1436
  "/workspaces/{workspaceId}/integrations/ai-tool/{provider}/members": {
1397
1437
  parameters: {
1398
1438
  query?: never;
@@ -2375,6 +2415,66 @@ export interface paths {
2375
2415
  patch?: never;
2376
2416
  trace?: never;
2377
2417
  };
2418
+ "/workspaces/{workspaceId}/readiness/test-pyramid": {
2419
+ parameters: {
2420
+ query?: never;
2421
+ header?: never;
2422
+ path?: never;
2423
+ cookie?: never;
2424
+ };
2425
+ /**
2426
+ * Latest test-pyramid report and progress per repository
2427
+ * @description Returns the latest test inventory for every repository with a pyramid snapshot, deltas from the previous and baseline scans, and workspace layer coverage. Repositories whose historical runs predate pyramid snapshots are omitted.
2428
+ */
2429
+ get: operations["getReadinessTestPyramid"];
2430
+ put?: never;
2431
+ post?: never;
2432
+ delete?: never;
2433
+ options?: never;
2434
+ head?: never;
2435
+ patch?: never;
2436
+ trace?: never;
2437
+ };
2438
+ "/workspaces/{workspaceId}/readiness/test-pyramid/history": {
2439
+ parameters: {
2440
+ query?: never;
2441
+ header?: never;
2442
+ path?: never;
2443
+ cookie?: never;
2444
+ };
2445
+ /**
2446
+ * Historical test-pyramid snapshots per repository
2447
+ * @description Returns succeeded readiness runs containing test-pyramid snapshots, ordered oldest to newest per repository. Older runs without snapshots are omitted, not treated as gaps.
2448
+ */
2449
+ get: operations["getReadinessTestPyramidHistory"];
2450
+ put?: never;
2451
+ post?: never;
2452
+ delete?: never;
2453
+ options?: never;
2454
+ head?: never;
2455
+ patch?: never;
2456
+ trace?: never;
2457
+ };
2458
+ "/workspaces/{workspaceId}/readiness/test-pyramid/progress": {
2459
+ parameters: {
2460
+ query?: never;
2461
+ header?: never;
2462
+ path?: never;
2463
+ cookie?: never;
2464
+ };
2465
+ /**
2466
+ * Test-pyramid code progress from successive scans
2467
+ * @description Compares each repository's latest pyramid snapshot with its previous and baseline snapshots. Reports layer adoption/removal, file-count and Tests & QA score deltas, criterion changes, and current workspace coverage.
2468
+ */
2469
+ get: operations["getReadinessTestPyramidProgress"];
2470
+ put?: never;
2471
+ post?: never;
2472
+ delete?: never;
2473
+ options?: never;
2474
+ head?: never;
2475
+ patch?: never;
2476
+ trace?: never;
2477
+ };
2378
2478
  "/workspaces/{workspaceId}/readiness/score-history": {
2379
2479
  parameters: {
2380
2480
  query?: never;
@@ -6794,12 +6894,176 @@ export interface components {
6794
6894
  /** @description Dimension score as a percentage (0–100) for this scan run. */
6795
6895
  scorePercent: number;
6796
6896
  };
6897
+ TestPyramidLayerSnapshotDto: {
6898
+ present: boolean;
6899
+ /** @description False when the repository archetype makes this layer not applicable. */
6900
+ applicable: boolean;
6901
+ /** @enum {string} */
6902
+ confidence: "high" | "medium" | "low";
6903
+ fileCount: number;
6904
+ frameworks: string[];
6905
+ /** @description Capped relative file paths or script names supporting the classification. */
6906
+ evidence: string[];
6907
+ lineCoverage?: components["schemas"]["TestPyramidLineCoverageDto"];
6908
+ };
6909
+ TestPyramidLayersDto: {
6910
+ unit: components["schemas"]["TestPyramidLayerSnapshotDto"];
6911
+ integration: components["schemas"]["TestPyramidLayerSnapshotDto"];
6912
+ acceptance_bdd: components["schemas"]["TestPyramidLayerSnapshotDto"];
6913
+ contract: components["schemas"]["TestPyramidLayerSnapshotDto"];
6914
+ e2e: components["schemas"]["TestPyramidLayerSnapshotDto"];
6915
+ };
6916
+ TestPyramidSnapshotDto: {
6917
+ /** @enum {integer} */
6918
+ version: 1;
6919
+ layers: components["schemas"]["TestPyramidLayersDto"];
6920
+ /** @description Evidence suggests the repository's E2E suite exercises multiple services. */
6921
+ e2eCrossRepoCandidate: boolean;
6922
+ /** @description Hostnames or compose service names referenced by the E2E suite. */
6923
+ e2eReferencedTargets: string[];
6924
+ lineCoverage?: components["schemas"]["TestPyramidLineCoverageDto"];
6925
+ };
6926
+ TestPyramidLineCoverageDto: {
6927
+ /** @description Line coverage percent from Sonar or a committed coverage report. */
6928
+ linePercent: number;
6929
+ branchPercent: number | null;
6930
+ /** @enum {string} */
6931
+ source: "sonar" | "jacoco" | "lcov" | "cobertura" | "clover" | "go_cover";
6932
+ /** @description Path of the scanned report when the source is not Sonar. */
6933
+ reportPath?: string | null;
6934
+ } | null;
6935
+ TestPyramidCriteriaDto: {
6936
+ D1?: string;
6937
+ D2?: string;
6938
+ D3?: string;
6939
+ D4?: string;
6940
+ };
6941
+ /**
6942
+ * @description Run state the snapshot came from. The pyramid is derived from the filesystem scan, which finishes before rubric grading, so `partial_failed` and `failed` runs still carry a valid snapshot but no scores.
6943
+ * @enum {string}
6944
+ */
6945
+ TestPyramidRunStatusDto: "succeeded" | "partial_failed" | "failed";
6946
+ TestPyramidHistoryPointDto: {
6947
+ /** Format: date-time */
6948
+ finishedAt: string;
6949
+ runStatus: components["schemas"]["TestPyramidRunStatusDto"];
6950
+ overallScore: number | null;
6951
+ testsQaPercent: number | null;
6952
+ testPyramid: components["schemas"]["TestPyramidSnapshotDto"];
6953
+ testPyramidCriteria: components["schemas"]["TestPyramidCriteriaDto"];
6954
+ };
6955
+ TestPyramidRepoHistoryDto: {
6956
+ /** Format: uuid */
6957
+ repoId: string;
6958
+ repoName: string;
6959
+ /** Format: date-time */
6960
+ connectedAt: string;
6961
+ points: components["schemas"]["TestPyramidHistoryPointDto"][];
6962
+ };
6963
+ WorkspaceTestPyramidHistoryDto: {
6964
+ /** Format: uuid */
6965
+ workspaceId: string;
6966
+ /** Format: date-time */
6967
+ generatedAt: string;
6968
+ repos: components["schemas"]["TestPyramidRepoHistoryDto"][];
6969
+ };
6970
+ TestPyramidLayerDeltaDto: {
6971
+ /** @enum {string} */
6972
+ presence: "unchanged" | "adopted" | "removed";
6973
+ fileCountDelta: number;
6974
+ addedFrameworks: string[];
6975
+ };
6976
+ TestPyramidLayerDeltasDto: {
6977
+ unit: components["schemas"]["TestPyramidLayerDeltaDto"];
6978
+ integration: components["schemas"]["TestPyramidLayerDeltaDto"];
6979
+ acceptance_bdd: components["schemas"]["TestPyramidLayerDeltaDto"];
6980
+ contract: components["schemas"]["TestPyramidLayerDeltaDto"];
6981
+ e2e: components["schemas"]["TestPyramidLayerDeltaDto"];
6982
+ };
6983
+ TestPyramidCriterionDeltaDto: {
6984
+ from: string | null;
6985
+ to: string;
6986
+ };
6987
+ TestPyramidCriterionDeltasDto: {
6988
+ D1?: components["schemas"]["TestPyramidCriterionDeltaDto"];
6989
+ D2?: components["schemas"]["TestPyramidCriterionDeltaDto"];
6990
+ D3?: components["schemas"]["TestPyramidCriterionDeltaDto"];
6991
+ D4?: components["schemas"]["TestPyramidCriterionDeltaDto"];
6992
+ };
6993
+ TestPyramidRepoProgressDto: {
6994
+ /** Format: uuid */
6995
+ repoId: string;
6996
+ repoName: string;
6997
+ /** Format: date-time */
6998
+ baselineAt: string;
6999
+ /** Format: date-time */
7000
+ previousAt: string | null;
7001
+ /** Format: date-time */
7002
+ currentAt: string;
7003
+ currentRunStatus: components["schemas"]["TestPyramidRunStatusDto"];
7004
+ /** @enum {string} */
7005
+ maturity: "missing" | "emerging" | "established" | "mature";
7006
+ testsQaPercent: number | null;
7007
+ testsQaPercentDelta: number | null;
7008
+ layerDeltas: components["schemas"]["TestPyramidLayerDeltasDto"];
7009
+ baselineLayerDeltas: components["schemas"]["TestPyramidLayerDeltasDto"];
7010
+ criterionDeltas: components["schemas"]["TestPyramidCriterionDeltasDto"];
7011
+ testPyramid: components["schemas"]["TestPyramidSnapshotDto"];
7012
+ testPyramidCriteria: components["schemas"]["TestPyramidCriteriaDto"];
7013
+ lineCoverage?: components["schemas"]["TestPyramidLineCoverageDto"];
7014
+ };
7015
+ TestPyramidLayerCoverageDto: {
7016
+ presentRepos: number;
7017
+ applicableRepos: number;
7018
+ percent: number | null;
7019
+ missingRepoIds: string[];
7020
+ };
7021
+ TestPyramidLayerCoverageMapDto: {
7022
+ unit: components["schemas"]["TestPyramidLayerCoverageDto"];
7023
+ integration: components["schemas"]["TestPyramidLayerCoverageDto"];
7024
+ acceptance_bdd: components["schemas"]["TestPyramidLayerCoverageDto"];
7025
+ contract: components["schemas"]["TestPyramidLayerCoverageDto"];
7026
+ e2e: components["schemas"]["TestPyramidLayerCoverageDto"];
7027
+ };
7028
+ TestPyramidMaturityCountsDto: {
7029
+ missing: number;
7030
+ emerging: number;
7031
+ established: number;
7032
+ mature: number;
7033
+ };
7034
+ TestPyramidCrossRepoMatchDto: {
7035
+ /** Format: uuid */
7036
+ sourceRepoId: string;
7037
+ targetRepoIds: string[];
7038
+ referencedTargets: string[];
7039
+ };
7040
+ WorkspaceTestPyramidSummaryDto: {
7041
+ reposWithPyramid: number;
7042
+ /** @description Repositories whose newest snapshot came from a run whose rubric grading did not complete. Their pyramid is valid but Tests & QA scores are unavailable. */
7043
+ reposFromDegradedRuns: string[];
7044
+ layerCoverage: components["schemas"]["TestPyramidLayerCoverageMapDto"];
7045
+ maturityCounts: components["schemas"]["TestPyramidMaturityCountsDto"];
7046
+ e2eCrossRepoCandidateRepoIds: string[];
7047
+ e2eCrossRepoMatches: components["schemas"]["TestPyramidCrossRepoMatchDto"][];
7048
+ /** @description True only when an E2E target is matched to another repository in the workspace. */
7049
+ crossRepoE2ePresent: boolean;
7050
+ };
7051
+ WorkspaceTestPyramidProgressDto: {
7052
+ /** Format: uuid */
7053
+ workspaceId: string;
7054
+ /** Format: date-time */
7055
+ generatedAt: string;
7056
+ repos: components["schemas"]["TestPyramidRepoProgressDto"][];
7057
+ workspace: components["schemas"]["WorkspaceTestPyramidSummaryDto"];
7058
+ };
6797
7059
  ReadinessScoreHistoryPointDto: {
6798
7060
  /** Format: date-time */
6799
7061
  finishedAt: string;
6800
7062
  overallScore: number;
6801
7063
  /** @description Per-dimension percentages captured on this scan run. */
6802
7064
  dimensionScores?: components["schemas"]["ReadinessScoreHistoryDimensionScoreDto"][];
7065
+ testPyramid?: components["schemas"]["TestPyramidSnapshotDto"];
7066
+ testPyramidCriteria?: components["schemas"]["TestPyramidCriteriaDto"];
6803
7067
  };
6804
7068
  ReadinessRepoScoreHistoryDto: {
6805
7069
  /** Format: uuid */
@@ -9319,6 +9583,115 @@ export interface components {
9319
9583
  topHotspots: components["schemas"]["CodeInsightsOrgHotspotDto"][];
9320
9584
  sonar: components["schemas"]["CodeInsightsSonarDto"];
9321
9585
  };
9586
+ /**
9587
+ * @description Presence maturity (model A) using count-based layer presence (`fileCount > 0`), not AF signal-inclusive `present`.
9588
+ * @enum {string}
9589
+ */
9590
+ InsightsTestPyramidMaturityDto: "missing" | "emerging" | "established" | "mature";
9591
+ /**
9592
+ * @description Advisory shape label vs fixed 70/20/10. `insufficient_data` when total classified test files < 10 (band percents are null).
9593
+ * @enum {string}
9594
+ */
9595
+ InsightsTestPyramidShapeLabelDto: "insufficient_data" | "base_heavy" | "balanced" | "top_heavy" | "middle_heavy";
9596
+ InsightsTestPyramidShapeDto: {
9597
+ label: components["schemas"]["InsightsTestPyramidShapeLabelDto"];
9598
+ /** @description Sum of classified test **files** across the five layers (not test cases). */
9599
+ totalClassifiedFiles: number;
9600
+ /** @description Share of classified files in unit (base). Null when insufficient_data. */
9601
+ basePercent: number | null;
9602
+ /** @description Share in integration + contract + acceptance_bdd (middle). Null when insufficient_data. */
9603
+ middlePercent: number | null;
9604
+ /** @description Share in e2e (top). Null when insufficient_data. */
9605
+ topPercent: number | null;
9606
+ targets: {
9607
+ /** @enum {number} */
9608
+ basePercent: 70;
9609
+ /** @enum {number} */
9610
+ middlePercent: 20;
9611
+ /** @enum {number} */
9612
+ topPercent: 10;
9613
+ };
9614
+ };
9615
+ InsightsTestPyramidLayerCountsDto: {
9616
+ unit: number;
9617
+ integration: number;
9618
+ acceptance_bdd: number;
9619
+ contract: number;
9620
+ e2e: number;
9621
+ };
9622
+ InsightsTestPyramidLayerPresentDto: {
9623
+ unit: boolean;
9624
+ integration: boolean;
9625
+ acceptance_bdd: boolean;
9626
+ contract: boolean;
9627
+ e2e: boolean;
9628
+ };
9629
+ InsightsTestPyramidLayerPresenceDto: {
9630
+ presentRepos: number;
9631
+ applicableRepos: number;
9632
+ percent: number | null;
9633
+ missingRepoIds: string[];
9634
+ missingRepoNames: string[];
9635
+ };
9636
+ InsightsTestPyramidGapRepoDto: {
9637
+ /** Format: uuid */
9638
+ repoId: string;
9639
+ repoName: string;
9640
+ };
9641
+ InsightsTestPyramidGapsByLayerDto: {
9642
+ unit: components["schemas"]["InsightsTestPyramidGapRepoDto"][];
9643
+ integration: components["schemas"]["InsightsTestPyramidGapRepoDto"][];
9644
+ acceptance_bdd: components["schemas"]["InsightsTestPyramidGapRepoDto"][];
9645
+ contract: components["schemas"]["InsightsTestPyramidGapRepoDto"][];
9646
+ e2e: components["schemas"]["InsightsTestPyramidGapRepoDto"][];
9647
+ };
9648
+ InsightsTestPyramidMaturityCountsDto: {
9649
+ missing: number;
9650
+ emerging: number;
9651
+ established: number;
9652
+ mature: number;
9653
+ };
9654
+ InsightsTestPyramidLayerPresenceMapDto: {
9655
+ unit: components["schemas"]["InsightsTestPyramidLayerPresenceDto"];
9656
+ integration: components["schemas"]["InsightsTestPyramidLayerPresenceDto"];
9657
+ acceptance_bdd: components["schemas"]["InsightsTestPyramidLayerPresenceDto"];
9658
+ contract: components["schemas"]["InsightsTestPyramidLayerPresenceDto"];
9659
+ e2e: components["schemas"]["InsightsTestPyramidLayerPresenceDto"];
9660
+ };
9661
+ InsightsTestPyramidSummaryDto: {
9662
+ /** Format: uuid */
9663
+ workspaceId: string;
9664
+ /** Format: date-time */
9665
+ generatedAt: string;
9666
+ reposWithPyramid: number;
9667
+ /** @description Repos whose newest pyramid came from a non-succeeded readiness run. */
9668
+ reposFromDegradedRuns: string[];
9669
+ /** @description Workspace sum of classified test files (not cases). */
9670
+ totalClassifiedFiles: number;
9671
+ shape: components["schemas"]["InsightsTestPyramidShapeDto"];
9672
+ layerPresence: components["schemas"]["InsightsTestPyramidLayerPresenceMapDto"];
9673
+ maturityCounts: components["schemas"]["InsightsTestPyramidMaturityCountsDto"];
9674
+ gapsByLayer: components["schemas"]["InsightsTestPyramidGapsByLayerDto"];
9675
+ };
9676
+ InsightsTestPyramidRepoItemDto: {
9677
+ /** Format: uuid */
9678
+ repoId: string;
9679
+ repoName: string;
9680
+ /** Format: date-time */
9681
+ scannedAt: string;
9682
+ currentRunStatus: components["schemas"]["TestPyramidRunStatusDto"];
9683
+ maturity: components["schemas"]["InsightsTestPyramidMaturityDto"];
9684
+ layerFileCounts: components["schemas"]["InsightsTestPyramidLayerCountsDto"];
9685
+ layerPresent: components["schemas"]["InsightsTestPyramidLayerPresentDto"];
9686
+ totalClassifiedFiles: number;
9687
+ shape: components["schemas"]["InsightsTestPyramidShapeDto"];
9688
+ };
9689
+ InsightsTestPyramidRepoListDto: {
9690
+ items: components["schemas"]["InsightsTestPyramidRepoItemDto"][];
9691
+ total: number;
9692
+ limit: number;
9693
+ offset: number;
9694
+ };
9322
9695
  };
9323
9696
  responses: {
9324
9697
  /** @description Missing or invalid bearer token */
@@ -9406,6 +9779,10 @@ export interface components {
9406
9779
  CodeInsightsRepoSort: "repoName" | "locTotal" | "ccAvg" | "dupPct" | "lastMeasuredAt";
9407
9780
  /** @description Case-insensitive substring filter on repo name / provider slug. */
9408
9781
  CodeInsightsRepoSearch: string;
9782
+ /** @description Allowlisted Test pyramid assessment repo sort field. */
9783
+ InsightsTestPyramidRepoSort: "repoName" | "totalClassifiedFiles" | "scannedAt" | "maturity";
9784
+ /** @description Case-insensitive substring filter on repository name. */
9785
+ InsightsTestPyramidRepoSearch: string;
9409
9786
  /** @description Case-insensitive filter on repository name, language, or provider slug. */
9410
9787
  ReadinessRepoSearch: string;
9411
9788
  /** @description Exact language filter (e.g. `typescript`). */
@@ -9667,6 +10044,26 @@ export type DimensionScoreDetailDto = components['schemas']['DimensionScoreDetai
9667
10044
  export type ReadinessRepoRunHistoryItemDto = components['schemas']['ReadinessRepoRunHistoryItemDto'];
9668
10045
  export type ReadinessRepoRunListDto = components['schemas']['ReadinessRepoRunListDto'];
9669
10046
  export type ReadinessScoreHistoryDimensionScoreDto = components['schemas']['ReadinessScoreHistoryDimensionScoreDto'];
10047
+ export type TestPyramidLayerSnapshotDto = components['schemas']['TestPyramidLayerSnapshotDto'];
10048
+ export type TestPyramidLayersDto = components['schemas']['TestPyramidLayersDto'];
10049
+ export type TestPyramidSnapshotDto = components['schemas']['TestPyramidSnapshotDto'];
10050
+ export type TestPyramidLineCoverageDto = components['schemas']['TestPyramidLineCoverageDto'];
10051
+ export type TestPyramidCriteriaDto = components['schemas']['TestPyramidCriteriaDto'];
10052
+ export type TestPyramidRunStatusDto = components['schemas']['TestPyramidRunStatusDto'];
10053
+ export type TestPyramidHistoryPointDto = components['schemas']['TestPyramidHistoryPointDto'];
10054
+ export type TestPyramidRepoHistoryDto = components['schemas']['TestPyramidRepoHistoryDto'];
10055
+ export type WorkspaceTestPyramidHistoryDto = components['schemas']['WorkspaceTestPyramidHistoryDto'];
10056
+ export type TestPyramidLayerDeltaDto = components['schemas']['TestPyramidLayerDeltaDto'];
10057
+ export type TestPyramidLayerDeltasDto = components['schemas']['TestPyramidLayerDeltasDto'];
10058
+ export type TestPyramidCriterionDeltaDto = components['schemas']['TestPyramidCriterionDeltaDto'];
10059
+ export type TestPyramidCriterionDeltasDto = components['schemas']['TestPyramidCriterionDeltasDto'];
10060
+ export type TestPyramidRepoProgressDto = components['schemas']['TestPyramidRepoProgressDto'];
10061
+ export type TestPyramidLayerCoverageDto = components['schemas']['TestPyramidLayerCoverageDto'];
10062
+ export type TestPyramidLayerCoverageMapDto = components['schemas']['TestPyramidLayerCoverageMapDto'];
10063
+ export type TestPyramidMaturityCountsDto = components['schemas']['TestPyramidMaturityCountsDto'];
10064
+ export type TestPyramidCrossRepoMatchDto = components['schemas']['TestPyramidCrossRepoMatchDto'];
10065
+ export type WorkspaceTestPyramidSummaryDto = components['schemas']['WorkspaceTestPyramidSummaryDto'];
10066
+ export type WorkspaceTestPyramidProgressDto = components['schemas']['WorkspaceTestPyramidProgressDto'];
9670
10067
  export type ReadinessScoreHistoryPointDto = components['schemas']['ReadinessScoreHistoryPointDto'];
9671
10068
  export type ReadinessRepoScoreHistoryDto = components['schemas']['ReadinessRepoScoreHistoryDto'];
9672
10069
  export type WorkspaceReadinessScoreHistoryDto = components['schemas']['WorkspaceReadinessScoreHistoryDto'];
@@ -9909,6 +10306,19 @@ export type CodeInsightsDesignAnalyzeResponseDto = components['schemas']['CodeIn
9909
10306
  export type CodeInsightsOrgHotspotDto = components['schemas']['CodeInsightsOrgHotspotDto'];
9910
10307
  export type CodeInsightsSonarDto = components['schemas']['CodeInsightsSonarDto'];
9911
10308
  export type CodeInsightsSummaryDto = components['schemas']['CodeInsightsSummaryDto'];
10309
+ export type InsightsTestPyramidMaturityDto = components['schemas']['InsightsTestPyramidMaturityDto'];
10310
+ export type InsightsTestPyramidShapeLabelDto = components['schemas']['InsightsTestPyramidShapeLabelDto'];
10311
+ export type InsightsTestPyramidShapeDto = components['schemas']['InsightsTestPyramidShapeDto'];
10312
+ export type InsightsTestPyramidLayerCountsDto = components['schemas']['InsightsTestPyramidLayerCountsDto'];
10313
+ export type InsightsTestPyramidLayerPresentDto = components['schemas']['InsightsTestPyramidLayerPresentDto'];
10314
+ export type InsightsTestPyramidLayerPresenceDto = components['schemas']['InsightsTestPyramidLayerPresenceDto'];
10315
+ export type InsightsTestPyramidGapRepoDto = components['schemas']['InsightsTestPyramidGapRepoDto'];
10316
+ export type InsightsTestPyramidGapsByLayerDto = components['schemas']['InsightsTestPyramidGapsByLayerDto'];
10317
+ export type InsightsTestPyramidMaturityCountsDto = components['schemas']['InsightsTestPyramidMaturityCountsDto'];
10318
+ export type InsightsTestPyramidLayerPresenceMapDto = components['schemas']['InsightsTestPyramidLayerPresenceMapDto'];
10319
+ export type InsightsTestPyramidSummaryDto = components['schemas']['InsightsTestPyramidSummaryDto'];
10320
+ export type InsightsTestPyramidRepoItemDto = components['schemas']['InsightsTestPyramidRepoItemDto'];
10321
+ export type InsightsTestPyramidRepoListDto = components['schemas']['InsightsTestPyramidRepoListDto'];
9912
10322
  export type ResponseUnauthorized = components['responses']['Unauthorized'];
9913
10323
  export type ResponseForbidden = components['responses']['Forbidden'];
9914
10324
  export type ResponseZenHrSyncInProgress = components['responses']['ZenHrSyncInProgress'];
@@ -9940,6 +10350,8 @@ export type ParameterPaginationOrder = components['parameters']['PaginationOrder
9940
10350
  export type ParameterReadinessRepoSort = components['parameters']['ReadinessRepoSort'];
9941
10351
  export type ParameterCodeInsightsRepoSort = components['parameters']['CodeInsightsRepoSort'];
9942
10352
  export type ParameterCodeInsightsRepoSearch = components['parameters']['CodeInsightsRepoSearch'];
10353
+ export type ParameterInsightsTestPyramidRepoSort = components['parameters']['InsightsTestPyramidRepoSort'];
10354
+ export type ParameterInsightsTestPyramidRepoSearch = components['parameters']['InsightsTestPyramidRepoSearch'];
9943
10355
  export type ParameterReadinessRepoSearch = components['parameters']['ReadinessRepoSearch'];
9944
10356
  export type ParameterReadinessRepoLanguage = components['parameters']['ReadinessRepoLanguage'];
9945
10357
  export type ParameterReadinessFixSort = components['parameters']['ReadinessFixSort'];
@@ -13863,6 +14275,106 @@ export interface operations {
13863
14275
  };
13864
14276
  };
13865
14277
  };
14278
+ getInsightsTestPyramidSummary: {
14279
+ parameters: {
14280
+ query?: never;
14281
+ header?: never;
14282
+ path: {
14283
+ workspaceId: components["parameters"]["WorkspaceId"];
14284
+ };
14285
+ cookie?: never;
14286
+ };
14287
+ requestBody?: never;
14288
+ responses: {
14289
+ /** @description Test pyramid assessment workspace summary */
14290
+ 200: {
14291
+ headers: {
14292
+ [name: string]: unknown;
14293
+ };
14294
+ content: {
14295
+ "application/json": components["schemas"]["InsightsTestPyramidSummaryDto"];
14296
+ };
14297
+ };
14298
+ 401: components["responses"]["Unauthorized"];
14299
+ 403: components["responses"]["Forbidden"];
14300
+ /** @description Workspace does not exist or malformed workspaceId */
14301
+ 404: {
14302
+ headers: {
14303
+ [name: string]: unknown;
14304
+ };
14305
+ content?: never;
14306
+ };
14307
+ /** @description Test pyramid history not supported by store */
14308
+ 501: {
14309
+ headers: {
14310
+ [name: string]: unknown;
14311
+ };
14312
+ content: {
14313
+ "application/json": components["schemas"]["ErrorMessageDto"];
14314
+ };
14315
+ };
14316
+ };
14317
+ };
14318
+ listInsightsTestPyramidRepos: {
14319
+ parameters: {
14320
+ query?: {
14321
+ /** @description Page size (default 25, max 100). */
14322
+ limit?: components["parameters"]["PaginationLimit"];
14323
+ /** @description Zero-based row offset into the filtered, sorted result set. */
14324
+ offset?: components["parameters"]["PaginationOffset"];
14325
+ /** @description Allowlisted Test pyramid assessment repo sort field. */
14326
+ sort?: components["parameters"]["InsightsTestPyramidRepoSort"];
14327
+ /** @description Sort direction. */
14328
+ order?: components["parameters"]["PaginationOrder"];
14329
+ /** @description Case-insensitive substring filter on repository name. */
14330
+ search?: components["parameters"]["InsightsTestPyramidRepoSearch"];
14331
+ };
14332
+ header?: never;
14333
+ path: {
14334
+ workspaceId: components["parameters"]["WorkspaceId"];
14335
+ };
14336
+ cookie?: never;
14337
+ };
14338
+ requestBody?: never;
14339
+ responses: {
14340
+ /** @description Paginated test pyramid assessment repo rows */
14341
+ 200: {
14342
+ headers: {
14343
+ [name: string]: unknown;
14344
+ };
14345
+ content: {
14346
+ "application/json": components["schemas"]["InsightsTestPyramidRepoListDto"];
14347
+ };
14348
+ };
14349
+ /** @description Invalid pagination or sort query */
14350
+ 400: {
14351
+ headers: {
14352
+ [name: string]: unknown;
14353
+ };
14354
+ content: {
14355
+ "application/json": components["schemas"]["ErrorMessageDto"];
14356
+ };
14357
+ };
14358
+ 401: components["responses"]["Unauthorized"];
14359
+ 403: components["responses"]["Forbidden"];
14360
+ /** @description Workspace does not exist or malformed workspaceId */
14361
+ 404: {
14362
+ headers: {
14363
+ [name: string]: unknown;
14364
+ };
14365
+ content?: never;
14366
+ };
14367
+ /** @description Test pyramid history not supported by store */
14368
+ 501: {
14369
+ headers: {
14370
+ [name: string]: unknown;
14371
+ };
14372
+ content: {
14373
+ "application/json": components["schemas"]["ErrorMessageDto"];
14374
+ };
14375
+ };
14376
+ };
14377
+ };
13866
14378
  getAiToolMembers: {
13867
14379
  parameters: {
13868
14380
  query?: {
@@ -16252,6 +16764,138 @@ export interface operations {
16252
16764
  };
16253
16765
  };
16254
16766
  };
16767
+ getReadinessTestPyramid: {
16768
+ parameters: {
16769
+ query?: never;
16770
+ header?: never;
16771
+ path: {
16772
+ workspaceId: components["parameters"]["WorkspaceId"];
16773
+ };
16774
+ cookie?: never;
16775
+ };
16776
+ requestBody?: never;
16777
+ responses: {
16778
+ /** @description Latest test-pyramid report and progress */
16779
+ 200: {
16780
+ headers: {
16781
+ [name: string]: unknown;
16782
+ };
16783
+ content: {
16784
+ "application/json": components["schemas"]["WorkspaceTestPyramidProgressDto"];
16785
+ };
16786
+ };
16787
+ 401: components["responses"]["Unauthorized"];
16788
+ 403: components["responses"]["Forbidden"];
16789
+ /** @description Workspace does not exist */
16790
+ 404: {
16791
+ headers: {
16792
+ [name: string]: unknown;
16793
+ };
16794
+ content: {
16795
+ "application/json": components["schemas"]["ErrorMessageDto"];
16796
+ };
16797
+ };
16798
+ /** @description Readiness history is not supported by the configured store */
16799
+ 501: {
16800
+ headers: {
16801
+ [name: string]: unknown;
16802
+ };
16803
+ content: {
16804
+ "application/json": components["schemas"]["ErrorMessageDto"];
16805
+ };
16806
+ };
16807
+ };
16808
+ };
16809
+ getReadinessTestPyramidHistory: {
16810
+ parameters: {
16811
+ query?: {
16812
+ since?: string;
16813
+ limitPerRepo?: number;
16814
+ };
16815
+ header?: never;
16816
+ path: {
16817
+ workspaceId: components["parameters"]["WorkspaceId"];
16818
+ };
16819
+ cookie?: never;
16820
+ };
16821
+ requestBody?: never;
16822
+ responses: {
16823
+ /** @description Test-pyramid history grouped by repository */
16824
+ 200: {
16825
+ headers: {
16826
+ [name: string]: unknown;
16827
+ };
16828
+ content: {
16829
+ "application/json": components["schemas"]["WorkspaceTestPyramidHistoryDto"];
16830
+ };
16831
+ };
16832
+ /** @description Invalid query */
16833
+ 400: {
16834
+ headers: {
16835
+ [name: string]: unknown;
16836
+ };
16837
+ content: {
16838
+ "application/json": components["schemas"]["ErrorMessageDto"];
16839
+ };
16840
+ };
16841
+ 401: components["responses"]["Unauthorized"];
16842
+ 403: components["responses"]["Forbidden"];
16843
+ /** @description Readiness history is not supported by the configured store */
16844
+ 501: {
16845
+ headers: {
16846
+ [name: string]: unknown;
16847
+ };
16848
+ content: {
16849
+ "application/json": components["schemas"]["ErrorMessageDto"];
16850
+ };
16851
+ };
16852
+ };
16853
+ };
16854
+ getReadinessTestPyramidProgress: {
16855
+ parameters: {
16856
+ query?: {
16857
+ since?: string;
16858
+ limitPerRepo?: number;
16859
+ };
16860
+ header?: never;
16861
+ path: {
16862
+ workspaceId: components["parameters"]["WorkspaceId"];
16863
+ };
16864
+ cookie?: never;
16865
+ };
16866
+ requestBody?: never;
16867
+ responses: {
16868
+ /** @description Test-pyramid code progress */
16869
+ 200: {
16870
+ headers: {
16871
+ [name: string]: unknown;
16872
+ };
16873
+ content: {
16874
+ "application/json": components["schemas"]["WorkspaceTestPyramidProgressDto"];
16875
+ };
16876
+ };
16877
+ /** @description Invalid query */
16878
+ 400: {
16879
+ headers: {
16880
+ [name: string]: unknown;
16881
+ };
16882
+ content: {
16883
+ "application/json": components["schemas"]["ErrorMessageDto"];
16884
+ };
16885
+ };
16886
+ 401: components["responses"]["Unauthorized"];
16887
+ 403: components["responses"]["Forbidden"];
16888
+ /** @description Readiness history is not supported by the configured store */
16889
+ 501: {
16890
+ headers: {
16891
+ [name: string]: unknown;
16892
+ };
16893
+ content: {
16894
+ "application/json": components["schemas"]["ErrorMessageDto"];
16895
+ };
16896
+ };
16897
+ };
16898
+ };
16255
16899
  getReadinessScoreHistory: {
16256
16900
  parameters: {
16257
16901
  query?: {