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