@thinkai/tai-api-contract 2.157.0 → 2.159.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.
@@ -1,7 +1,7 @@
1
1
  openapi: 3.0.3
2
2
  info:
3
3
  title: ThinkAI API
4
- version: 2.157.0
4
+ version: 2.159.0
5
5
  description: >
6
6
  Contract surface for the AI Driven SDLC backend used by ThinkAI.
7
7
  Workspace-scoped routes use `/workspaces/{workspaceId}/...`.
@@ -6959,6 +6959,15 @@ paths:
6959
6959
  fixed: 0
6960
6960
  verificationGapCount: 0
6961
6961
  verificationGaps: []
6962
+ blockedRepoCount: 0
6963
+ topBlockingRuleTitle: null
6964
+ topBlockingRuleRepoCount: 0
6965
+ fixProof:
6966
+ windowDays: 30
6967
+ mergeRatePercent: null
6968
+ medianDaysToMerge: null
6969
+ clearedCount: 0
6970
+ rows: []
6962
6971
  dimensionAggregates: []
6963
6972
  fixStatusSummary:
6964
6973
  queued: 0
@@ -11515,7 +11524,7 @@ components:
11515
11524
  description: Allowlisted repository sort field.
11516
11525
  schema:
11517
11526
  type: string
11518
- enum: [repoName, overallScore, lastAnalyzed, language]
11527
+ enum: [repoName, overallScore, lastAnalyzed, language, blockingRule]
11519
11528
  default: overallScore
11520
11529
  CodeInsightsRepoSort:
11521
11530
  name: sort
@@ -18357,19 +18366,25 @@ components:
18357
18366
  type: string
18358
18367
  format: date-time
18359
18368
  nullable: true
18360
- description: Set when the repo has been soft-archived (removed from installation or integration disconnected). Null means active.
18369
+ description: Set when the repo has been soft-archived (removed from installation, archived on GitHub, or integration disconnected). Null means active.
18361
18370
  archivedReason:
18362
18371
  type: string
18363
18372
  nullable: true
18364
18373
  enum:
18365
18374
  [
18375
+ github_archived,
18366
18376
  github_removed,
18367
18377
  installation_disconnected,
18368
18378
  installation_replaced,
18369
18379
  superseded,
18370
18380
  user_removed,
18371
18381
  ]
18372
- description: Why the repo was archived. `user_removed` means excluded from Agentic Foundation scope only. Only present when `archivedAt` is set.
18382
+ description: >
18383
+ Why the repo was archived. `github_archived` means the repo is still granted by the
18384
+ GitHub installation but GitHub reports `archived === true` (default sync excludes it).
18385
+ `github_removed` means the slug is no longer in the installation listing.
18386
+ `user_removed` means excluded from Agentic Foundation scope only. Only present when
18387
+ `archivedAt` is set.
18373
18388
  eligibilityStatus:
18374
18389
  type: string
18375
18390
  enum: [eligible, ineligible]
@@ -18471,6 +18486,15 @@ components:
18471
18486
  scores; live CI health stays in SDLC Insights.
18472
18487
  items:
18473
18488
  $ref: "#/components/schemas/ScanImprovementDto"
18489
+ blockingRule:
18490
+ type: object
18491
+ nullable: true
18492
+ allOf:
18493
+ - $ref: "#/components/schemas/ReadinessBlockingRuleDto"
18494
+ description: >
18495
+ The one open gap or partial criterion on the latest succeeded scan that is not
18496
+ already fixed. Null when the repo is not blocked. Severity ranks first, then
18497
+ dimension weight, then rubric id.
18474
18498
 
18475
18499
  LinkedRolePendingDto:
18476
18500
  type: object
@@ -18576,12 +18600,14 @@ components:
18576
18600
  nullable: true
18577
18601
  enum:
18578
18602
  [
18603
+ github_archived,
18579
18604
  github_removed,
18580
18605
  installation_disconnected,
18581
18606
  installation_replaced,
18582
18607
  superseded,
18583
18608
  user_removed,
18584
18609
  ]
18610
+ description: See RepoReadinessScoreDto.archivedReason.
18585
18611
  eligibilityStatus:
18586
18612
  type: string
18587
18613
  enum: [eligible, ineligible]
@@ -18649,10 +18675,27 @@ components:
18649
18675
  description: See RepoReadinessScoreDto.scanImprovements.
18650
18676
  items:
18651
18677
  $ref: "#/components/schemas/ScanImprovementDto"
18678
+ blockingRule:
18679
+ type: object
18680
+ nullable: true
18681
+ allOf:
18682
+ - $ref: "#/components/schemas/ReadinessBlockingRuleDto"
18683
+ description: See RepoReadinessScoreDto.blockingRule.
18652
18684
 
18653
18685
  AgenticFoundationDashboardSummaryDto:
18654
18686
  type: object
18655
- required: [repoCount, averageOverallScore, issueCount, criticalIssueCount, issuesByFixStatus]
18687
+ required:
18688
+ [
18689
+ repoCount,
18690
+ averageOverallScore,
18691
+ issueCount,
18692
+ criticalIssueCount,
18693
+ issuesByFixStatus,
18694
+ blockedRepoCount,
18695
+ topBlockingRuleTitle,
18696
+ topBlockingRuleRepoCount,
18697
+ fixProof,
18698
+ ]
18656
18699
  properties:
18657
18700
  repoCount:
18658
18701
  type: integer
@@ -18704,6 +18747,91 @@ components:
18704
18747
  both gaps appears twice. Does not change averageOverallScore.
18705
18748
  items:
18706
18749
  $ref: "#/components/schemas/AgenticFoundationVerificationGapDto"
18750
+ blockedRepoCount:
18751
+ type: integer
18752
+ minimum: 0
18753
+ description: >
18754
+ Non-archived repos whose latest succeeded scan still has a gap or partial
18755
+ criterion that is not fixed. A repo with no open gap is not blocked.
18756
+ topBlockingRuleTitle:
18757
+ type: string
18758
+ nullable: true
18759
+ description: Rule title that blocks the most repos. Null when blockedRepoCount is 0.
18760
+ topBlockingRuleRepoCount:
18761
+ type: integer
18762
+ minimum: 0
18763
+ description: How many blocked repos share topBlockingRuleTitle.
18764
+ fixProof:
18765
+ $ref: "#/components/schemas/AgenticFoundationFixProofDto"
18766
+
18767
+ ReadinessBlockingRuleDto:
18768
+ type: object
18769
+ additionalProperties: false
18770
+ required: [rubricId, title, severity]
18771
+ properties:
18772
+ rubricId:
18773
+ type: string
18774
+ title:
18775
+ type: string
18776
+ severity:
18777
+ type: string
18778
+ enum: [critical, high, medium, low]
18779
+
18780
+ AgenticFoundationFixProofDto:
18781
+ type: object
18782
+ additionalProperties: false
18783
+ required: [windowDays, mergeRatePercent, medianDaysToMerge, clearedCount, rows]
18784
+ properties:
18785
+ windowDays:
18786
+ type: integer
18787
+ minimum: 1
18788
+ mergeRatePercent:
18789
+ type: integer
18790
+ minimum: 0
18791
+ maximum: 100
18792
+ nullable: true
18793
+ description: >
18794
+ Rounded percent of terminal fixes in the window that merged (merged / merged + failed).
18795
+ Null when there is no terminal fix.
18796
+ medianDaysToMerge:
18797
+ type: number
18798
+ nullable: true
18799
+ description: Median days from created_at to merge. Null when nothing merged in the window.
18800
+ clearedCount:
18801
+ type: integer
18802
+ minimum: 0
18803
+ description: Merged fixes in the window whose next scan marked the criterion met.
18804
+ rows:
18805
+ type: array
18806
+ maxItems: 10
18807
+ items:
18808
+ $ref: "#/components/schemas/AgenticFoundationFixProofRowDto"
18809
+
18810
+ AgenticFoundationFixProofRowDto:
18811
+ type: object
18812
+ additionalProperties: false
18813
+ required: [repoName, ruleTitle, scoreBefore, scoreAfter, cleared]
18814
+ properties:
18815
+ repoName:
18816
+ type: string
18817
+ ruleTitle:
18818
+ type: string
18819
+ scoreBefore:
18820
+ type: integer
18821
+ minimum: 0
18822
+ maximum: 100
18823
+ nullable: true
18824
+ scoreAfter:
18825
+ type: integer
18826
+ minimum: 0
18827
+ maximum: 100
18828
+ nullable: true
18829
+ cleared:
18830
+ type: boolean
18831
+ nullable: true
18832
+ description: >
18833
+ True when the first succeeded scan after the merge marked the criterion met.
18834
+ Null when that scan has not run yet.
18707
18835
 
18708
18836
  AgenticFoundationVerificationGapDto:
18709
18837
  type: object
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thinkai/tai-api-contract",
3
- "version": "2.157.0",
3
+ "version": "2.159.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -7790,14 +7790,14 @@ export interface components {
7790
7790
  lastRunErrorDetail?: string | null;
7791
7791
  /**
7792
7792
  * Format: date-time
7793
- * @description Set when the repo has been soft-archived (removed from installation or integration disconnected). Null means active.
7793
+ * @description Set when the repo has been soft-archived (removed from installation, archived on GitHub, or integration disconnected). Null means active.
7794
7794
  */
7795
7795
  archivedAt?: string | null;
7796
7796
  /**
7797
- * @description Why the repo was archived. `user_removed` means excluded from Agentic Foundation scope only. Only present when `archivedAt` is set.
7797
+ * @description Why the repo was archived. `github_archived` means the repo is still granted by the GitHub installation but GitHub reports `archived === true` (default sync excludes it). `github_removed` means the slug is no longer in the installation listing. `user_removed` means excluded from Agentic Foundation scope only. Only present when `archivedAt` is set.
7798
7798
  * @enum {string|null}
7799
7799
  */
7800
- archivedReason?: "github_removed" | "installation_disconnected" | "installation_replaced" | "superseded" | "user_removed" | null;
7800
+ archivedReason?: "github_archived" | "github_removed" | "installation_disconnected" | "installation_replaced" | "superseded" | "user_removed" | null;
7801
7801
  /**
7802
7802
  * @description Whether the repo can be analyzed (#44/#729). Language support no longer makes a repo `ineligible` — a missing v1-supported stack is surfaced via `warnings` and the repo stays analyzable. It becomes `ineligible` when the most recent scan hit a hard size/file-count limit (e.g. code-size or file-count exceeded): the repo is then restricted here too so this surface matches the GitHub connect list's size gate after the scan. Null until the first sync/scan computes it.
7803
7803
  * @enum {string|null}
@@ -7835,6 +7835,8 @@ export interface components {
7835
7835
  linkedRoleAssessment?: components["schemas"]["LinkedRoleAssessmentDto"] | null;
7836
7836
  /** @description Repo-level "Improve this scan" recommendations for Agentic Foundation CI setup (at most three). Omitted when the scan emitted none. Does not change criterion scores; live CI health stays in SDLC Insights. */
7837
7837
  scanImprovements?: components["schemas"]["ScanImprovementDto"][];
7838
+ /** @description The one open gap or partial criterion on the latest succeeded scan that is not already fixed. Null when the repo is not blocked. Severity ranks first, then dimension weight, then rubric id. */
7839
+ blockingRule?: components["schemas"]["ReadinessBlockingRuleDto"] | null;
7838
7840
  };
7839
7841
  LinkedRolePendingDto: {
7840
7842
  /** @description Topology role key, e.g. terraform | gitops | ci_templates | api_contracts. */
@@ -7880,8 +7882,11 @@ export interface components {
7880
7882
  lastRunErrorDetail?: string | null;
7881
7883
  /** Format: date-time */
7882
7884
  archivedAt?: string | null;
7883
- /** @enum {string|null} */
7884
- archivedReason?: "github_removed" | "installation_disconnected" | "installation_replaced" | "superseded" | "user_removed" | null;
7885
+ /**
7886
+ * @description See RepoReadinessScoreDto.archivedReason.
7887
+ * @enum {string|null}
7888
+ */
7889
+ archivedReason?: "github_archived" | "github_removed" | "installation_disconnected" | "installation_replaced" | "superseded" | "user_removed" | null;
7885
7890
  /**
7886
7891
  * @description See RepoReadinessScoreDto.eligibilityStatus. Language support is advisory (#729) and surfaced via `warnings`.
7887
7892
  * @enum {string|null}
@@ -7915,6 +7920,8 @@ export interface components {
7915
7920
  linkedRoleAssessment?: components["schemas"]["LinkedRoleAssessmentDto"] | null;
7916
7921
  /** @description See RepoReadinessScoreDto.scanImprovements. */
7917
7922
  scanImprovements?: components["schemas"]["ScanImprovementDto"][];
7923
+ /** @description See RepoReadinessScoreDto.blockingRule. */
7924
+ blockingRule?: components["schemas"]["ReadinessBlockingRuleDto"] | null;
7918
7925
  };
7919
7926
  AgenticFoundationDashboardSummaryDto: {
7920
7927
  repoCount: number;
@@ -7936,6 +7943,37 @@ export interface components {
7936
7943
  verificationGapCount?: number;
7937
7944
  /** @description Up to 12 repo and reason pairs for verificationGapCount. A repo with both gaps appears twice. Does not change averageOverallScore. */
7938
7945
  verificationGaps?: components["schemas"]["AgenticFoundationVerificationGapDto"][];
7946
+ /** @description Non-archived repos whose latest succeeded scan still has a gap or partial criterion that is not fixed. A repo with no open gap is not blocked. */
7947
+ blockedRepoCount: number;
7948
+ /** @description Rule title that blocks the most repos. Null when blockedRepoCount is 0. */
7949
+ topBlockingRuleTitle: string | null;
7950
+ /** @description How many blocked repos share topBlockingRuleTitle. */
7951
+ topBlockingRuleRepoCount: number;
7952
+ fixProof: components["schemas"]["AgenticFoundationFixProofDto"];
7953
+ };
7954
+ ReadinessBlockingRuleDto: {
7955
+ rubricId: string;
7956
+ title: string;
7957
+ /** @enum {string} */
7958
+ severity: "critical" | "high" | "medium" | "low";
7959
+ };
7960
+ AgenticFoundationFixProofDto: {
7961
+ windowDays: number;
7962
+ /** @description Rounded percent of terminal fixes in the window that merged (merged / merged + failed). Null when there is no terminal fix. */
7963
+ mergeRatePercent: number | null;
7964
+ /** @description Median days from created_at to merge. Null when nothing merged in the window. */
7965
+ medianDaysToMerge: number | null;
7966
+ /** @description Merged fixes in the window whose next scan marked the criterion met. */
7967
+ clearedCount: number;
7968
+ rows: components["schemas"]["AgenticFoundationFixProofRowDto"][];
7969
+ };
7970
+ AgenticFoundationFixProofRowDto: {
7971
+ repoName: string;
7972
+ ruleTitle: string;
7973
+ scoreBefore: number | null;
7974
+ scoreAfter: number | null;
7975
+ /** @description True when the first succeeded scan after the merge marked the criterion met. Null when that scan has not run yet. */
7976
+ cleared: boolean | null;
7939
7977
  };
7940
7978
  AgenticFoundationVerificationGapDto: {
7941
7979
  repoName: string;
@@ -10801,7 +10839,7 @@ export interface components {
10801
10839
  /** @description Sort direction. */
10802
10840
  PaginationOrder: "asc" | "desc";
10803
10841
  /** @description Allowlisted repository sort field. */
10804
- ReadinessRepoSort: "repoName" | "overallScore" | "lastAnalyzed" | "language";
10842
+ ReadinessRepoSort: "repoName" | "overallScore" | "lastAnalyzed" | "language" | "blockingRule";
10805
10843
  /** @description Allowlisted Code Insights repo sort field. */
10806
10844
  CodeInsightsRepoSort: "repoName" | "locTotal" | "ccAvg" | "dupPct" | "lastMeasuredAt";
10807
10845
  /** @description Case-insensitive substring filter on repo name / provider slug. */
@@ -11112,6 +11150,9 @@ export type LinkedRolePendingDto = components['schemas']['LinkedRolePendingDto']
11112
11150
  export type LinkedRoleAssessmentDto = components['schemas']['LinkedRoleAssessmentDto'];
11113
11151
  export type RepoReadinessScoreDetailDto = components['schemas']['RepoReadinessScoreDetailDto'];
11114
11152
  export type AgenticFoundationDashboardSummaryDto = components['schemas']['AgenticFoundationDashboardSummaryDto'];
11153
+ export type ReadinessBlockingRuleDto = components['schemas']['ReadinessBlockingRuleDto'];
11154
+ export type AgenticFoundationFixProofDto = components['schemas']['AgenticFoundationFixProofDto'];
11155
+ export type AgenticFoundationFixProofRowDto = components['schemas']['AgenticFoundationFixProofRowDto'];
11115
11156
  export type AgenticFoundationVerificationGapDto = components['schemas']['AgenticFoundationVerificationGapDto'];
11116
11157
  export type PageMetaDto = components['schemas']['PageMetaDto'];
11117
11158
  export type ReadinessEligibilityLimitsDto = components['schemas']['ReadinessEligibilityLimitsDto'];