@thinkai/tai-api-contract 2.94.0 → 2.96.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.
@@ -596,7 +596,7 @@ export interface paths {
596
596
  /**
597
597
  * Test one source connection (does not persist)
598
598
  * @description Verify a source's credentials without persisting them. Always returns 200 — upstream auth, rate-limit, and network failures surface as `{ success: false, error }` so the SPA can render an inline error.
599
- * Registered AI tools are verified end-to-end: `cursor` (Admin API key in `token` and/or execution key in `executionToken`; at least one must be present). Execution-only tests validate the key against the Cloud Agents API (`GET /v1/me`, with `GET /v1/models` fallback for service accounts) and return `executionKeyValid` / `executionKeyError` without calling the Admin API on `token`. Malformed cursor entries return `400` with `code: invalid_source_entry`. `claude` (Anthropic Admin API at `https://api.anthropic.com`, `X-Api-Key` with an organization Admin API key `sk-ant-admin...`). `sonarqube` (`baseUrl`, `token`, `projectKey` required; optional `branch`) calls `GET {baseUrl}/api/measures/component` with a Bearer token. Other types report `{ success: false, error: "unsupported_type" }`. Documented `error` codes for AI tool verifiers: `invalid_token`, `rate_limited`, `network_error`.
599
+ * Registered AI tools are verified end-to-end: `cursor` (Admin API key in `token` and/or execution key in `executionToken`; at least one must be present). Execution-only tests validate the key against the Cloud Agents API (`GET /v1/me`, with `GET /v1/models` fallback for service accounts) and return `executionKeyValid` / `executionKeyError` without calling the Admin API on `token`. Malformed cursor entries return `400` with `code: invalid_source_entry`. `claude` (Anthropic Admin API at `https://api.anthropic.com`, `X-Api-Key` with an organization Admin API key `sk-ant-admin...`). `sonarqube` (`baseUrl`, `token`, `projectKey` required; optional `branch`) calls `GET {baseUrl}/api/measures/component` with a Bearer token. Other types report `{ success: false, error: "unsupported_type" }`. Documented `error` codes for AI tool verifiers: `invalid_token`, `rate_limited`, `network_error`. `jira` (`baseUrl`, `email`, `apiToken` or legacy `api_key`) calls `GET {baseUrl}/rest/api/3/myself` with Basic auth.
600
600
  * **Typical outcomes:** Malformed body, missing `type`, invalid `type`, or missing required fields for the declared type → `400` with `{ error: "..." }`. Well-formed body with bad credentials or unreachable service → `200` with `{ success: false, error: "..." }`.
601
601
  */
602
602
  post: operations["postTenantSourceTest"];
@@ -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: {
@@ -4039,6 +4106,38 @@ export interface components {
4039
4106
  /** @description PagerDuty user email when known from the last successful verify. */
4040
4107
  userEmail?: string;
4041
4108
  };
4109
+ /** @description Jira Cloud source for `PUT /workspaces/{workspaceId}/sources` and `POST /workspaces/{workspaceId}/sources/test`. Uses Atlassian Cloud email + API token (Basic auth). Provide `apiToken` (preferred) or legacy write-only `api_key`; the server normalizes `api_key` to `apiToken` on write. */
4110
+ JiraSourceDto: {
4111
+ /** @enum {string} */
4112
+ type: "jira";
4113
+ /** @description Jira Cloud site URL (e.g. `https://your-domain.atlassian.net`). */
4114
+ baseUrl: string;
4115
+ /** @description Atlassian account email used with the API token. */
4116
+ email: string;
4117
+ /** @description Atlassian API token (write-only on PUT; preferred). */
4118
+ apiToken?: string;
4119
+ /** @description Deprecated write-only alias for `apiToken`. Accepted for backward compatibility; normalized to `apiToken` and never returned on GET `/config`. */
4120
+ api_key?: string;
4121
+ /** @description Optional display name from a successful connection test (echo-after-test). */
4122
+ userName?: string;
4123
+ /** @description Optional Atlassian account id from a successful connection test. */
4124
+ accountId?: string;
4125
+ };
4126
+ /** @description Redacted Jira source returned by `GET /workspaces/{workspaceId}/config`. Raw API token is never returned. */
4127
+ JiraSourceConfigDto: {
4128
+ /** @enum {string} */
4129
+ type: "jira";
4130
+ /** @description Whether an API token is stored for this workspace. */
4131
+ hasToken: boolean;
4132
+ /** @description Configured Jira Cloud site URL. */
4133
+ baseUrl: string;
4134
+ /** @description Atlassian account email associated with the stored token. */
4135
+ email: string;
4136
+ /** @description Display name when known from the last successful verify. */
4137
+ userName?: string;
4138
+ /** @description Atlassian account id when known from the last successful verify. */
4139
+ accountId?: string;
4140
+ };
4042
4141
  /**
4043
4142
  * @description The agent execution account used for Agentic Foundation runs (readiness scanner + fix queue). Exactly one is active per workspace.
4044
4143
  * - `thinkai_platform_cursor`: ThinkAI platform Cursor key (Cursor Agent CLI) — opt-in, never default.
@@ -4057,7 +4156,7 @@ export interface components {
4057
4156
  claudeModel?: string | null;
4058
4157
  };
4059
4158
  WorkspaceConfigDto: {
4060
- sources: (components["schemas"]["CursorSourceConfigDto"] | components["schemas"]["ClaudeSourceConfigDto"] | components["schemas"]["CodeIntelligenceSourceConfigDto"] | components["schemas"]["NewRelicSourceConfigDto"] | components["schemas"]["PrometheusSourceConfigDto"] | components["schemas"]["GrafanaSourceConfigDto"] | components["schemas"]["SonarQubeSourceConfigDto"] | components["schemas"]["PagerDutySourceConfigDto"] | components["schemas"]["TenantSourceEntryDto"])[];
4159
+ sources: (components["schemas"]["CursorSourceConfigDto"] | components["schemas"]["ClaudeSourceConfigDto"] | components["schemas"]["CodeIntelligenceSourceConfigDto"] | components["schemas"]["NewRelicSourceConfigDto"] | components["schemas"]["PrometheusSourceConfigDto"] | components["schemas"]["GrafanaSourceConfigDto"] | components["schemas"]["SonarQubeSourceConfigDto"] | components["schemas"]["PagerDutySourceConfigDto"] | components["schemas"]["JiraSourceConfigDto"] | components["schemas"]["TenantSourceEntryDto"])[];
4061
4160
  orgChart?: components["schemas"]["ScoringOrgChartDto"] | null;
4062
4161
  /** @enum {string|null} */
4063
4162
  region?: "us" | "eu" | "me" | null;
@@ -4092,11 +4191,11 @@ export interface components {
4092
4191
  executionKeyValid?: boolean | null;
4093
4192
  /** @description Error detail when `executionKeyValid` is false. */
4094
4193
  executionKeyError?: string | null;
4095
- /** @description Present for New Relic or Grafana verify success — authenticated user name. */
4194
+ /** @description Present for New Relic, Grafana, PagerDuty, or Jira verify success — authenticated user name. */
4096
4195
  userName?: string;
4097
4196
  /** @description Present for New Relic verify success — resolved account display name. */
4098
4197
  accountName?: string;
4099
- /** @description Present for New Relic verify success — resolved account ID. */
4198
+ /** @description Present for New Relic or Jira verify success — resolved account ID. */
4100
4199
  accountId?: string;
4101
4200
  /** @description Present for Grafana verify success — resolved organization name. */
4102
4201
  orgName?: string;
@@ -8179,8 +8278,16 @@ export type GrafanaSourceDto = components['schemas']['GrafanaSourceDto'];
8179
8278
  export type GrafanaSourceConfigDto = components['schemas']['GrafanaSourceConfigDto'];
8180
8279
  export type SonarQubeSourceDto = components['schemas']['SonarQubeSourceDto'];
8181
8280
  export type SonarQubeSourceConfigDto = components['schemas']['SonarQubeSourceConfigDto'];
8281
+ export type SonarQubeRepoMappingDto = components['schemas']['SonarQubeRepoMappingDto'];
8282
+ export type SonarQubeRepoMappingRowDto = components['schemas']['SonarQubeRepoMappingRowDto'];
8283
+ export type SonarQubeRepoMappingsPutDto = components['schemas']['SonarQubeRepoMappingsPutDto'];
8284
+ export type SonarQubeRepoMappingsListDto = components['schemas']['SonarQubeRepoMappingsListDto'];
8285
+ export type SonarQubeRepoMappingValidateRowDto = components['schemas']['SonarQubeRepoMappingValidateRowDto'];
8286
+ export type SonarQubeRepoMappingsValidateResponseDto = components['schemas']['SonarQubeRepoMappingsValidateResponseDto'];
8182
8287
  export type PagerDutySourceDto = components['schemas']['PagerDutySourceDto'];
8183
8288
  export type PagerDutySourceConfigDto = components['schemas']['PagerDutySourceConfigDto'];
8289
+ export type JiraSourceDto = components['schemas']['JiraSourceDto'];
8290
+ export type JiraSourceConfigDto = components['schemas']['JiraSourceConfigDto'];
8184
8291
  export type AgentExecutionProviderDto = components['schemas']['AgentExecutionProviderDto'];
8185
8292
  export type PutCodeIntelligenceSettingsDto = components['schemas']['PutCodeIntelligenceSettingsDto'];
8186
8293
  export type WorkspaceConfigDto = components['schemas']['WorkspaceConfigDto'];
@@ -10147,7 +10254,7 @@ export interface operations {
10147
10254
  requestBody: {
10148
10255
  content: {
10149
10256
  "application/json": {
10150
- sources: (components["schemas"]["CursorSourcePatchDto"] | components["schemas"]["CursorSourceDto"] | components["schemas"]["ClaudeSourcePatchDto"] | components["schemas"]["ClaudeSourceDto"] | components["schemas"]["CodeIntelligenceSourcePatchDto"] | components["schemas"]["NewRelicSourceDto"] | components["schemas"]["PrometheusSourceDto"] | components["schemas"]["GrafanaSourceDto"] | components["schemas"]["SonarQubeSourceDto"] | components["schemas"]["PagerDutySourceDto"] | components["schemas"]["TenantSourceEntryDto"])[];
10257
+ sources: (components["schemas"]["CursorSourcePatchDto"] | components["schemas"]["CursorSourceDto"] | components["schemas"]["ClaudeSourcePatchDto"] | components["schemas"]["ClaudeSourceDto"] | components["schemas"]["CodeIntelligenceSourcePatchDto"] | components["schemas"]["NewRelicSourceDto"] | components["schemas"]["PrometheusSourceDto"] | components["schemas"]["GrafanaSourceDto"] | components["schemas"]["SonarQubeSourceDto"] | components["schemas"]["PagerDutySourceDto"] | components["schemas"]["JiraSourceDto"] | components["schemas"]["TenantSourceEntryDto"])[];
10151
10258
  };
10152
10259
  };
10153
10260
  };
@@ -10201,7 +10308,7 @@ export interface operations {
10201
10308
  };
10202
10309
  requestBody: {
10203
10310
  content: {
10204
- "application/json": components["schemas"]["CursorSourcePatchDto"] | components["schemas"]["CursorSourceDto"] | components["schemas"]["ClaudeSourcePatchDto"] | components["schemas"]["ClaudeSourceDto"] | components["schemas"]["CodeIntelligenceSourcePatchDto"] | components["schemas"]["NewRelicSourceDto"] | components["schemas"]["PrometheusSourceDto"] | components["schemas"]["GrafanaSourceDto"] | components["schemas"]["SonarQubeSourceDto"] | components["schemas"]["PagerDutySourceDto"] | components["schemas"]["TenantSourceEntryDto"];
10311
+ "application/json": components["schemas"]["CursorSourcePatchDto"] | components["schemas"]["CursorSourceDto"] | components["schemas"]["ClaudeSourcePatchDto"] | components["schemas"]["ClaudeSourceDto"] | components["schemas"]["CodeIntelligenceSourcePatchDto"] | components["schemas"]["NewRelicSourceDto"] | components["schemas"]["PrometheusSourceDto"] | components["schemas"]["GrafanaSourceDto"] | components["schemas"]["SonarQubeSourceDto"] | components["schemas"]["PagerDutySourceDto"] | components["schemas"]["JiraSourceDto"] | components["schemas"]["TenantSourceEntryDto"];
10205
10312
  };
10206
10313
  };
10207
10314
  responses: {
@@ -10239,6 +10346,100 @@ export interface operations {
10239
10346
  };
10240
10347
  };
10241
10348
  };
10349
+ listSonarQubeRepoMappings: {
10350
+ parameters: {
10351
+ query?: never;
10352
+ header?: never;
10353
+ path: {
10354
+ workspaceId: components["parameters"]["WorkspaceId"];
10355
+ };
10356
+ cookie?: never;
10357
+ };
10358
+ requestBody?: never;
10359
+ responses: {
10360
+ /** @description Mappings for repos in this workspace */
10361
+ 200: {
10362
+ headers: {
10363
+ [name: string]: unknown;
10364
+ };
10365
+ content: {
10366
+ "application/json": components["schemas"]["SonarQubeRepoMappingsListDto"];
10367
+ };
10368
+ };
10369
+ 401: components["responses"]["Unauthorized"];
10370
+ 403: components["responses"]["Forbidden"];
10371
+ };
10372
+ };
10373
+ putSonarQubeRepoMappings: {
10374
+ parameters: {
10375
+ query?: never;
10376
+ header?: never;
10377
+ path: {
10378
+ workspaceId: components["parameters"]["WorkspaceId"];
10379
+ };
10380
+ cookie?: never;
10381
+ };
10382
+ requestBody: {
10383
+ content: {
10384
+ "application/json": components["schemas"]["SonarQubeRepoMappingsPutDto"];
10385
+ };
10386
+ };
10387
+ responses: {
10388
+ /** @description Mappings saved */
10389
+ 200: {
10390
+ headers: {
10391
+ [name: string]: unknown;
10392
+ };
10393
+ content: {
10394
+ "application/json": components["schemas"]["SonarQubeRepoMappingsListDto"];
10395
+ };
10396
+ };
10397
+ /** @description Unknown repo slug or invalid body */
10398
+ 400: {
10399
+ headers: {
10400
+ [name: string]: unknown;
10401
+ };
10402
+ content?: never;
10403
+ };
10404
+ 401: components["responses"]["Unauthorized"];
10405
+ 403: components["responses"]["Forbidden"];
10406
+ };
10407
+ };
10408
+ validateSonarQubeRepoMappings: {
10409
+ parameters: {
10410
+ query?: never;
10411
+ header?: never;
10412
+ path: {
10413
+ workspaceId: components["parameters"]["WorkspaceId"];
10414
+ };
10415
+ cookie?: never;
10416
+ };
10417
+ requestBody: {
10418
+ content: {
10419
+ "application/json": components["schemas"]["SonarQubeRepoMappingsPutDto"];
10420
+ };
10421
+ };
10422
+ responses: {
10423
+ /** @description Per-row probe results */
10424
+ 200: {
10425
+ headers: {
10426
+ [name: string]: unknown;
10427
+ };
10428
+ content: {
10429
+ "application/json": components["schemas"]["SonarQubeRepoMappingsValidateResponseDto"];
10430
+ };
10431
+ };
10432
+ 401: components["responses"]["Unauthorized"];
10433
+ 403: components["responses"]["Forbidden"];
10434
+ /** @description SonarQube source not configured */
10435
+ 503: {
10436
+ headers: {
10437
+ [name: string]: unknown;
10438
+ };
10439
+ content?: never;
10440
+ };
10441
+ };
10442
+ };
10242
10443
  deleteSourceByType: {
10243
10444
  parameters: {
10244
10445
  query?: never;
@@ -14126,7 +14327,7 @@ export interface operations {
14126
14327
  fixStatus?: "open" | "pr-pending" | "fixed";
14127
14328
  dimensionId?: components["schemas"]["ReadinessDimensionId"];
14128
14329
  severity?: "critical" | "high" | "medium" | "low";
14129
- /** @description Include remediation from criteriaDetails (default true). */
14330
+ /** @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
14331
  includeCriteria?: boolean;
14131
14332
  /** @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
14333
  timeZone?: string;