@thinkai/tai-api-contract 2.94.0 → 2.95.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.94.0
4
+ version: 2.95.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}/...`.
@@ -1733,6 +1733,80 @@ paths:
1733
1733
  "404":
1734
1734
  description: Workspace does not exist or malformed workspaceId
1735
1735
 
1736
+ /workspaces/{workspaceId}/integrations/sonarqube/repo-mappings:
1737
+ get:
1738
+ tags: [Workspace]
1739
+ summary: List SonarQube repo to project key mappings
1740
+ operationId: listSonarQubeRepoMappings
1741
+ parameters:
1742
+ - $ref: "#/components/parameters/WorkspaceId"
1743
+ responses:
1744
+ "200":
1745
+ description: Mappings for repos in this workspace
1746
+ content:
1747
+ application/json:
1748
+ schema:
1749
+ $ref: "#/components/schemas/SonarQubeRepoMappingsListDto"
1750
+ "401":
1751
+ $ref: "#/components/responses/Unauthorized"
1752
+ "403":
1753
+ $ref: "#/components/responses/Forbidden"
1754
+ put:
1755
+ tags: [Workspace]
1756
+ summary: Replace SonarQube repo mappings (full list)
1757
+ description: >
1758
+ Replaces all SonarQube repo→projectKey rows for the workspace. Validate rows in the UI
1759
+ before save; optional `POST .../validate` probes keys with the workspace token.
1760
+ operationId: putSonarQubeRepoMappings
1761
+ parameters:
1762
+ - $ref: "#/components/parameters/WorkspaceId"
1763
+ requestBody:
1764
+ required: true
1765
+ content:
1766
+ application/json:
1767
+ schema:
1768
+ $ref: "#/components/schemas/SonarQubeRepoMappingsPutDto"
1769
+ responses:
1770
+ "200":
1771
+ description: Mappings saved
1772
+ content:
1773
+ application/json:
1774
+ schema:
1775
+ $ref: "#/components/schemas/SonarQubeRepoMappingsListDto"
1776
+ "400":
1777
+ description: Unknown repo slug or invalid body
1778
+ "401":
1779
+ $ref: "#/components/responses/Unauthorized"
1780
+ "403":
1781
+ $ref: "#/components/responses/Forbidden"
1782
+
1783
+ /workspaces/{workspaceId}/integrations/sonarqube/repo-mappings/validate:
1784
+ post:
1785
+ tags: [Workspace]
1786
+ summary: Validate SonarQube mapping rows against the workspace token
1787
+ operationId: validateSonarQubeRepoMappings
1788
+ parameters:
1789
+ - $ref: "#/components/parameters/WorkspaceId"
1790
+ requestBody:
1791
+ required: true
1792
+ content:
1793
+ application/json:
1794
+ schema:
1795
+ $ref: "#/components/schemas/SonarQubeRepoMappingsPutDto"
1796
+ responses:
1797
+ "200":
1798
+ description: Per-row probe results
1799
+ content:
1800
+ application/json:
1801
+ schema:
1802
+ $ref: "#/components/schemas/SonarQubeRepoMappingsValidateResponseDto"
1803
+ "401":
1804
+ $ref: "#/components/responses/Unauthorized"
1805
+ "403":
1806
+ $ref: "#/components/responses/Forbidden"
1807
+ "503":
1808
+ description: SonarQube source not configured
1809
+
1736
1810
  /workspaces/{workspaceId}/sources/{type}:
1737
1811
  delete:
1738
1812
  tags: [Workspace]
@@ -5501,14 +5575,17 @@ paths:
5501
5575
  (issues plus optional remediation from `criteriaDetails`).
5502
5576
 
5503
5577
  The Markdown is grouped **by readiness dimension** (catalog order). Each dimension section
5504
- lists matching issues sorted by severity. Issue sections include severity in the heading
5505
- and do not emit per-issue `Fix status` / `Fix tier` lines. Default filter is outstanding
5506
- issues (`open` + `pr-pending`). Optional query params narrow the set. When `includeCriteria`
5507
- is true (default), each issue includes a Remediation section from the matching criterion when
5508
- available. Timestamps use the optional `timeZone` query (IANA; default `UTC`).
5578
+ lists matching issues sorted by severity. Issue sections include severity in the heading,
5579
+ export format version, issue/rubric metadata, agent workflow, and agent instructions from
5580
+ the rubric when available. Default filter is outstanding issues (`open` + `pr-pending`).
5581
+ Optional query params narrow the set. When `includeCriteria` is true (default), each issue
5582
+ also includes criterion summary/status in metadata and remediation from `criteriaDetails`
5583
+ when it differs from agent instructions. Agent workflow and rubric agent instructions are
5584
+ emitted regardless of `includeCriteria`. Timestamps use the optional `timeZone` query
5585
+ (IANA; default `UTC`).
5509
5586
 
5510
5587
  The response sets `Content-Disposition: attachment` with filename
5511
- `readiness-issues-{providerSlug}-{date}.md`.
5588
+ `readiness-remediations-{providerSlug}-{date}.md`.
5512
5589
  operationId: exportReadinessRepoIssuesMarkdown
5513
5590
  parameters:
5514
5591
  - $ref: "#/components/parameters/WorkspaceId"
@@ -5536,7 +5613,11 @@ paths:
5536
5613
  - name: includeCriteria
5537
5614
  in: query
5538
5615
  required: false
5539
- description: Include remediation from criteriaDetails (default true).
5616
+ description: >
5617
+ When true (default), include criterion summary/status in issue metadata and remediation
5618
+ from `criteriaDetails` (plus inline scan remediation paragraphs). Agent workflow and
5619
+ rubric agent instructions are always included. When false, omit criterion-derived metadata
5620
+ and criterion remediation only.
5540
5621
  schema:
5541
5622
  type: boolean
5542
5623
  default: true
@@ -9940,9 +10021,10 @@ components:
9940
10021
  SonarQubeSourceDto:
9941
10022
  type: object
9942
10023
  description: >
9943
- SonarQube source for workspace sources PUT and connection test. Every field is
10024
+ SonarQube source for workspace sources PUT and connection test. Credentials only —
10025
+ per-repository Sonar project keys are configured via repo mappings. Every field is
9944
10026
  re-submitted on each save; `token` is never round-tripped from `GET` workspace config.
9945
- required: [type, baseUrl, token, projectKey]
10027
+ required: [type, baseUrl, token]
9946
10028
  additionalProperties: false
9947
10029
  properties:
9948
10030
  type:
@@ -9952,7 +10034,7 @@ components:
9952
10034
  type: string
9953
10035
  minLength: 1
9954
10036
  maxLength: 2048
9955
- description: SonarQube server URL, e.g. https://sonarqube.example.com.
10037
+ description: SonarQube server URL, e.g. https://sonarcloud.io or https://sonarqube.example.com.
9956
10038
  token:
9957
10039
  type: string
9958
10040
  minLength: 1
@@ -9960,22 +10042,22 @@ components:
9960
10042
  description: >
9961
10043
  User or project analysis token (write-only on PUT). Literal tokens are
9962
10044
  encrypted at rest. Operator-managed secrets may use an `env:VAR` reference
9963
- (resolved at runtime / batch poll), matching other non-AI-tool sources.
9964
- projectKey:
10045
+ (resolved at runtime), matching other non-AI-tool sources.
10046
+ organization:
9965
10047
  type: string
9966
10048
  minLength: 1
9967
- maxLength: 400
9968
- description: SonarQube project key (component key).
10049
+ maxLength: 255
10050
+ description: SonarCloud organization key (required for project search on SonarCloud).
9969
10051
  branch:
9970
10052
  type: string
9971
10053
  minLength: 1
9972
10054
  maxLength: 255
9973
- description: Optional branch name for branch-scoped measures.
10055
+ description: Optional workspace default branch fallback for per-repo Sonar probes.
9974
10056
 
9975
10057
  SonarQubeSourceConfigDto:
9976
10058
  type: object
9977
10059
  description: Redacted SonarQube source returned by GET workspace config.
9978
- required: [type, hasToken, baseUrl, projectKey]
10060
+ required: [type, hasToken, baseUrl]
9979
10061
  additionalProperties: false
9980
10062
  properties:
9981
10063
  type:
@@ -9985,10 +10067,88 @@ components:
9985
10067
  type: boolean
9986
10068
  baseUrl:
9987
10069
  type: string
10070
+ organization:
10071
+ type: string
10072
+ branch:
10073
+ type: string
10074
+
10075
+ SonarQubeRepoMappingDto:
10076
+ type: object
10077
+ required: [providerSlug, projectKey]
10078
+ additionalProperties: false
10079
+ properties:
10080
+ providerSlug:
10081
+ type: string
10082
+ minLength: 1
10083
+ description: Repository slug (`owner/repo`) in the workspace catalog.
10084
+ projectKey:
10085
+ type: string
10086
+ minLength: 1
10087
+ maxLength: 400
10088
+ branch:
10089
+ type: string
10090
+ minLength: 1
10091
+ maxLength: 255
10092
+ description: Optional branch override for Sonar API calls for this repo.
10093
+
10094
+ SonarQubeRepoMappingRowDto:
10095
+ allOf:
10096
+ - $ref: "#/components/schemas/SonarQubeRepoMappingDto"
10097
+ - type: object
10098
+ required: [repoId, updatedAt]
10099
+ properties:
10100
+ repoId:
10101
+ type: string
10102
+ format: uuid
10103
+ updatedAt:
10104
+ type: string
10105
+ format: date-time
10106
+
10107
+ SonarQubeRepoMappingsPutDto:
10108
+ type: object
10109
+ required: [mappings]
10110
+ additionalProperties: false
10111
+ properties:
10112
+ mappings:
10113
+ type: array
10114
+ items:
10115
+ $ref: "#/components/schemas/SonarQubeRepoMappingDto"
10116
+
10117
+ SonarQubeRepoMappingsListDto:
10118
+ type: object
10119
+ required: [mappings]
10120
+ additionalProperties: false
10121
+ properties:
10122
+ mappings:
10123
+ type: array
10124
+ items:
10125
+ $ref: "#/components/schemas/SonarQubeRepoMappingRowDto"
10126
+
10127
+ SonarQubeRepoMappingValidateRowDto:
10128
+ type: object
10129
+ required: [providerSlug, projectKey, ok]
10130
+ additionalProperties: false
10131
+ properties:
10132
+ providerSlug:
10133
+ type: string
9988
10134
  projectKey:
9989
10135
  type: string
9990
10136
  branch:
9991
10137
  type: string
10138
+ ok:
10139
+ type: boolean
10140
+ error:
10141
+ type: string
10142
+
10143
+ SonarQubeRepoMappingsValidateResponseDto:
10144
+ type: object
10145
+ required: [results]
10146
+ additionalProperties: false
10147
+ properties:
10148
+ results:
10149
+ type: array
10150
+ items:
10151
+ $ref: "#/components/schemas/SonarQubeRepoMappingValidateRowDto"
9992
10152
 
9993
10153
  PagerDutySourceDto:
9994
10154
  type: object
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thinkai/tai-api-contract",
3
- "version": "2.94.0",
3
+ "version": "2.95.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -606,6 +606,44 @@ export interface paths {
606
606
  patch?: never;
607
607
  trace?: never;
608
608
  };
609
+ "/workspaces/{workspaceId}/integrations/sonarqube/repo-mappings": {
610
+ parameters: {
611
+ query?: never;
612
+ header?: never;
613
+ path?: never;
614
+ cookie?: never;
615
+ };
616
+ /** List SonarQube repo to project key mappings */
617
+ get: operations["listSonarQubeRepoMappings"];
618
+ /**
619
+ * Replace SonarQube repo mappings (full list)
620
+ * @description Replaces all SonarQube repo→projectKey rows for the workspace. Validate rows in the UI before save; optional `POST .../validate` probes keys with the workspace token.
621
+ */
622
+ put: operations["putSonarQubeRepoMappings"];
623
+ post?: never;
624
+ delete?: never;
625
+ options?: never;
626
+ head?: never;
627
+ patch?: never;
628
+ trace?: never;
629
+ };
630
+ "/workspaces/{workspaceId}/integrations/sonarqube/repo-mappings/validate": {
631
+ parameters: {
632
+ query?: never;
633
+ header?: never;
634
+ path?: never;
635
+ cookie?: never;
636
+ };
637
+ get?: never;
638
+ put?: never;
639
+ /** Validate SonarQube mapping rows against the workspace token */
640
+ post: operations["validateSonarQubeRepoMappings"];
641
+ delete?: never;
642
+ options?: never;
643
+ head?: never;
644
+ patch?: never;
645
+ trace?: never;
646
+ };
609
647
  "/workspaces/{workspaceId}/sources/{type}": {
610
648
  parameters: {
611
649
  query?: never;
@@ -2133,8 +2171,8 @@ export interface paths {
2133
2171
  /**
2134
2172
  * Export repository readiness issues as Markdown
2135
2173
  * @description Download outstanding readiness issues for one repository as a Markdown (`.md`) attachment for local IDE workflows. Reuses the same scorecard as `GET .../readiness/repos/{repoId}` (issues plus optional remediation from `criteriaDetails`).
2136
- * The Markdown is grouped **by readiness dimension** (catalog order). Each dimension section lists matching issues sorted by severity. Issue sections include severity in the heading and do not emit per-issue `Fix status` / `Fix tier` lines. Default filter is outstanding issues (`open` + `pr-pending`). Optional query params narrow the set. When `includeCriteria` is true (default), each issue includes a Remediation section from the matching criterion when available. Timestamps use the optional `timeZone` query (IANA; default `UTC`).
2137
- * The response sets `Content-Disposition: attachment` with filename `readiness-issues-{providerSlug}-{date}.md`.
2174
+ * The Markdown is grouped **by readiness dimension** (catalog order). Each dimension section lists matching issues sorted by severity. Issue sections include severity in the heading, export format version, issue/rubric metadata, agent workflow, and agent instructions from the rubric when available. Default filter is outstanding issues (`open` + `pr-pending`). Optional query params narrow the set. When `includeCriteria` is true (default), each issue also includes criterion summary/status in metadata and remediation from `criteriaDetails` when it differs from agent instructions. Agent workflow and rubric agent instructions are emitted regardless of `includeCriteria`. Timestamps use the optional `timeZone` query (IANA; default `UTC`).
2175
+ * The response sets `Content-Disposition: attachment` with filename `readiness-remediations-{providerSlug}-{date}.md`.
2138
2176
  */
2139
2177
  get: operations["exportReadinessRepoIssuesMarkdown"];
2140
2178
  put?: never;
@@ -3991,17 +4029,17 @@ export interface components {
3991
4029
  orgId?: string;
3992
4030
  orgName?: string;
3993
4031
  };
3994
- /** @description SonarQube source for workspace sources PUT and connection test. Every field is re-submitted on each save; `token` is never round-tripped from `GET` workspace config. */
4032
+ /** @description SonarQube source for workspace sources PUT and connection test. Credentials only — per-repository Sonar project keys are configured via repo mappings. Every field is re-submitted on each save; `token` is never round-tripped from `GET` workspace config. */
3995
4033
  SonarQubeSourceDto: {
3996
4034
  /** @enum {string} */
3997
4035
  type: "sonarqube";
3998
- /** @description SonarQube server URL, e.g. https://sonarqube.example.com. */
4036
+ /** @description SonarQube server URL, e.g. https://sonarcloud.io or https://sonarqube.example.com. */
3999
4037
  baseUrl: string;
4000
- /** @description User or project analysis token (write-only on PUT). Literal tokens are encrypted at rest. Operator-managed secrets may use an `env:VAR` reference (resolved at runtime / batch poll), matching other non-AI-tool sources. */
4038
+ /** @description User or project analysis token (write-only on PUT). Literal tokens are encrypted at rest. Operator-managed secrets may use an `env:VAR` reference (resolved at runtime), matching other non-AI-tool sources. */
4001
4039
  token: string;
4002
- /** @description SonarQube project key (component key). */
4003
- projectKey: string;
4004
- /** @description Optional branch name for branch-scoped measures. */
4040
+ /** @description SonarCloud organization key (required for project search on SonarCloud). */
4041
+ organization?: string;
4042
+ /** @description Optional workspace default branch fallback for per-repo Sonar probes. */
4005
4043
  branch?: string;
4006
4044
  };
4007
4045
  /** @description Redacted SonarQube source returned by GET workspace config. */
@@ -4010,8 +4048,37 @@ export interface components {
4010
4048
  type: "sonarqube";
4011
4049
  hasToken: boolean;
4012
4050
  baseUrl: string;
4051
+ organization?: string;
4052
+ branch?: string;
4053
+ };
4054
+ SonarQubeRepoMappingDto: {
4055
+ /** @description Repository slug (`owner/repo`) in the workspace catalog. */
4056
+ providerSlug: string;
4057
+ projectKey: string;
4058
+ /** @description Optional branch override for Sonar API calls for this repo. */
4059
+ branch?: string;
4060
+ };
4061
+ SonarQubeRepoMappingRowDto: components["schemas"]["SonarQubeRepoMappingDto"] & {
4062
+ /** Format: uuid */
4063
+ repoId: string;
4064
+ /** Format: date-time */
4065
+ updatedAt: string;
4066
+ };
4067
+ SonarQubeRepoMappingsPutDto: {
4068
+ mappings: components["schemas"]["SonarQubeRepoMappingDto"][];
4069
+ };
4070
+ SonarQubeRepoMappingsListDto: {
4071
+ mappings: components["schemas"]["SonarQubeRepoMappingRowDto"][];
4072
+ };
4073
+ SonarQubeRepoMappingValidateRowDto: {
4074
+ providerSlug: string;
4013
4075
  projectKey: string;
4014
4076
  branch?: string;
4077
+ ok: boolean;
4078
+ error?: string;
4079
+ };
4080
+ SonarQubeRepoMappingsValidateResponseDto: {
4081
+ results: components["schemas"]["SonarQubeRepoMappingValidateRowDto"][];
4015
4082
  };
4016
4083
  /** @description PagerDuty incident monitoring source for `PUT /workspaces/{workspaceId}/sources` and `POST /workspaces/{workspaceId}/sources/test`. Requires a REST API v2 token (an "API Access Key" from PagerDuty → **Integrations → API Access Keys**). */
4017
4084
  PagerDutySourceDto: {
@@ -8179,6 +8246,12 @@ export type GrafanaSourceDto = components['schemas']['GrafanaSourceDto'];
8179
8246
  export type GrafanaSourceConfigDto = components['schemas']['GrafanaSourceConfigDto'];
8180
8247
  export type SonarQubeSourceDto = components['schemas']['SonarQubeSourceDto'];
8181
8248
  export type SonarQubeSourceConfigDto = components['schemas']['SonarQubeSourceConfigDto'];
8249
+ export type SonarQubeRepoMappingDto = components['schemas']['SonarQubeRepoMappingDto'];
8250
+ export type SonarQubeRepoMappingRowDto = components['schemas']['SonarQubeRepoMappingRowDto'];
8251
+ export type SonarQubeRepoMappingsPutDto = components['schemas']['SonarQubeRepoMappingsPutDto'];
8252
+ export type SonarQubeRepoMappingsListDto = components['schemas']['SonarQubeRepoMappingsListDto'];
8253
+ export type SonarQubeRepoMappingValidateRowDto = components['schemas']['SonarQubeRepoMappingValidateRowDto'];
8254
+ export type SonarQubeRepoMappingsValidateResponseDto = components['schemas']['SonarQubeRepoMappingsValidateResponseDto'];
8182
8255
  export type PagerDutySourceDto = components['schemas']['PagerDutySourceDto'];
8183
8256
  export type PagerDutySourceConfigDto = components['schemas']['PagerDutySourceConfigDto'];
8184
8257
  export type AgentExecutionProviderDto = components['schemas']['AgentExecutionProviderDto'];
@@ -10239,6 +10312,100 @@ export interface operations {
10239
10312
  };
10240
10313
  };
10241
10314
  };
10315
+ listSonarQubeRepoMappings: {
10316
+ parameters: {
10317
+ query?: never;
10318
+ header?: never;
10319
+ path: {
10320
+ workspaceId: components["parameters"]["WorkspaceId"];
10321
+ };
10322
+ cookie?: never;
10323
+ };
10324
+ requestBody?: never;
10325
+ responses: {
10326
+ /** @description Mappings for repos in this workspace */
10327
+ 200: {
10328
+ headers: {
10329
+ [name: string]: unknown;
10330
+ };
10331
+ content: {
10332
+ "application/json": components["schemas"]["SonarQubeRepoMappingsListDto"];
10333
+ };
10334
+ };
10335
+ 401: components["responses"]["Unauthorized"];
10336
+ 403: components["responses"]["Forbidden"];
10337
+ };
10338
+ };
10339
+ putSonarQubeRepoMappings: {
10340
+ parameters: {
10341
+ query?: never;
10342
+ header?: never;
10343
+ path: {
10344
+ workspaceId: components["parameters"]["WorkspaceId"];
10345
+ };
10346
+ cookie?: never;
10347
+ };
10348
+ requestBody: {
10349
+ content: {
10350
+ "application/json": components["schemas"]["SonarQubeRepoMappingsPutDto"];
10351
+ };
10352
+ };
10353
+ responses: {
10354
+ /** @description Mappings saved */
10355
+ 200: {
10356
+ headers: {
10357
+ [name: string]: unknown;
10358
+ };
10359
+ content: {
10360
+ "application/json": components["schemas"]["SonarQubeRepoMappingsListDto"];
10361
+ };
10362
+ };
10363
+ /** @description Unknown repo slug or invalid body */
10364
+ 400: {
10365
+ headers: {
10366
+ [name: string]: unknown;
10367
+ };
10368
+ content?: never;
10369
+ };
10370
+ 401: components["responses"]["Unauthorized"];
10371
+ 403: components["responses"]["Forbidden"];
10372
+ };
10373
+ };
10374
+ validateSonarQubeRepoMappings: {
10375
+ parameters: {
10376
+ query?: never;
10377
+ header?: never;
10378
+ path: {
10379
+ workspaceId: components["parameters"]["WorkspaceId"];
10380
+ };
10381
+ cookie?: never;
10382
+ };
10383
+ requestBody: {
10384
+ content: {
10385
+ "application/json": components["schemas"]["SonarQubeRepoMappingsPutDto"];
10386
+ };
10387
+ };
10388
+ responses: {
10389
+ /** @description Per-row probe results */
10390
+ 200: {
10391
+ headers: {
10392
+ [name: string]: unknown;
10393
+ };
10394
+ content: {
10395
+ "application/json": components["schemas"]["SonarQubeRepoMappingsValidateResponseDto"];
10396
+ };
10397
+ };
10398
+ 401: components["responses"]["Unauthorized"];
10399
+ 403: components["responses"]["Forbidden"];
10400
+ /** @description SonarQube source not configured */
10401
+ 503: {
10402
+ headers: {
10403
+ [name: string]: unknown;
10404
+ };
10405
+ content?: never;
10406
+ };
10407
+ };
10408
+ };
10242
10409
  deleteSourceByType: {
10243
10410
  parameters: {
10244
10411
  query?: never;
@@ -14126,7 +14293,7 @@ export interface operations {
14126
14293
  fixStatus?: "open" | "pr-pending" | "fixed";
14127
14294
  dimensionId?: components["schemas"]["ReadinessDimensionId"];
14128
14295
  severity?: "critical" | "high" | "medium" | "low";
14129
- /** @description Include remediation from criteriaDetails (default true). */
14296
+ /** @description When true (default), include criterion summary/status in issue metadata and remediation from `criteriaDetails` (plus inline scan remediation paragraphs). Agent workflow and rubric agent instructions are always included. When false, omit criterion-derived metadata and criterion remediation only. */
14130
14297
  includeCriteria?: boolean;
14131
14298
  /** @description IANA time zone for human-readable `Last analyzed` / `Exported` timestamps and the calendar date in the attachment filename (e.g. `Europe/Berlin`). Defaults to `UTC`. */
14132
14299
  timeZone?: string;