@thinkai/tai-api-contract 2.200.0 → 2.201.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.200.0
4
+ version: 2.201.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}/...`.
@@ -2921,6 +2921,96 @@ paths:
2921
2921
  schema:
2922
2922
  $ref: "#/components/schemas/ErrorMessageDto"
2923
2923
 
2924
+ /workspaces/{workspaceId}/agentic-foundation/dimension-targets:
2925
+ get:
2926
+ tags: [AIReadiness]
2927
+ summary: Get Agentic Foundation dimension targets
2928
+ description: >
2929
+ Workspace target percent per readiness dimension, plus optional per-repository
2930
+ overrides. Omitted targets mean 100. A repository override may disable scoring
2931
+ for a dimension and set its own target. Empty object means every dimension is
2932
+ scored at 100. Member-level read access.
2933
+ operationId: getWorkspaceDimensionTargets
2934
+ parameters:
2935
+ - $ref: "#/components/parameters/WorkspaceId"
2936
+ responses:
2937
+ "200":
2938
+ description: Current targets (may be empty)
2939
+ content:
2940
+ application/json:
2941
+ schema:
2942
+ $ref: "#/components/schemas/DimensionTargetsDto"
2943
+ "401":
2944
+ $ref: "#/components/responses/Unauthorized"
2945
+ "403":
2946
+ $ref: "#/components/responses/Forbidden"
2947
+ "404":
2948
+ description: Workspace does not exist or malformed workspaceId
2949
+ content:
2950
+ application/json:
2951
+ schema:
2952
+ $ref: "#/components/schemas/ErrorMessageDto"
2953
+ put:
2954
+ tags: [AIReadiness]
2955
+ summary: Set Agentic Foundation dimension targets
2956
+ description: >
2957
+ Full-replace workspace dimension targets and repository overrides.
2958
+ Omit a target or send 100 to keep the default. `PUT {}` or `null` clears
2959
+ overrides so every dimension is scored at 100. Repository ids must be in
2960
+ Agentic Foundation scan scope. Requires workspace **admin**.
2961
+ operationId: putWorkspaceDimensionTargets
2962
+ parameters:
2963
+ - $ref: "#/components/parameters/WorkspaceId"
2964
+ requestBody:
2965
+ required: true
2966
+ content:
2967
+ application/json:
2968
+ schema:
2969
+ $ref: "#/components/schemas/DimensionTargetsDto"
2970
+ examples:
2971
+ workspaceAndRepo:
2972
+ value:
2973
+ targets:
2974
+ observability: 90
2975
+ repoOverrides:
2976
+ 11111111-1111-4111-8111-111111111111:
2977
+ disabledDimensions: [delivery]
2978
+ targets:
2979
+ tests-qa: 80
2980
+ responses:
2981
+ "204":
2982
+ description: Targets persisted (or cleared).
2983
+ "400":
2984
+ description: Invalid payload or repository is not in scan scope
2985
+ content:
2986
+ application/json:
2987
+ schema:
2988
+ $ref: "#/components/schemas/ErrorMessageDto"
2989
+ examples:
2990
+ invalidDimensionTargets:
2991
+ value:
2992
+ error: "observability must be an integer from 0 to 100"
2993
+ code: invalid_dimension_targets
2994
+ "401":
2995
+ $ref: "#/components/responses/Unauthorized"
2996
+ "403":
2997
+ description: Forbidden — workspace admin required
2998
+ content:
2999
+ application/json:
3000
+ schema:
3001
+ $ref: "#/components/schemas/ErrorMessageDto"
3002
+ examples:
3003
+ workspaceAdminRequired:
3004
+ value:
3005
+ error: Forbidden
3006
+ code: workspace_admin_required
3007
+ "404":
3008
+ description: Workspace does not exist or malformed workspaceId
3009
+ content:
3010
+ application/json:
3011
+ schema:
3012
+ $ref: "#/components/schemas/ErrorMessageDto"
3013
+
2924
3014
  /workspaces/{workspaceId}/sources:
2925
3015
  put:
2926
3016
  tags: [Workspace]
@@ -16810,6 +16900,85 @@ components:
16810
16900
  maximum: 10000
16811
16901
  description: Ceiling — stay at or below this many CI failures per engineer per week. `0` is valid.
16812
16902
 
16903
+ DimensionTargetPercentsDto:
16904
+ type: object
16905
+ additionalProperties: false
16906
+ description: Omitted dimension means a target of 100. Values of 100 are not stored.
16907
+ properties:
16908
+ ai-agent-readiness:
16909
+ type: integer
16910
+ nullable: true
16911
+ minimum: 0
16912
+ maximum: 100
16913
+ token-efficiency:
16914
+ type: integer
16915
+ nullable: true
16916
+ minimum: 0
16917
+ maximum: 100
16918
+ repo-hygiene:
16919
+ type: integer
16920
+ nullable: true
16921
+ minimum: 0
16922
+ maximum: 100
16923
+ stack-quality:
16924
+ type: integer
16925
+ nullable: true
16926
+ minimum: 0
16927
+ maximum: 100
16928
+ tests-qa:
16929
+ type: integer
16930
+ nullable: true
16931
+ minimum: 0
16932
+ maximum: 100
16933
+ observability:
16934
+ type: integer
16935
+ nullable: true
16936
+ minimum: 0
16937
+ maximum: 100
16938
+ api-contracts:
16939
+ type: integer
16940
+ nullable: true
16941
+ minimum: 0
16942
+ maximum: 100
16943
+ platform-governance:
16944
+ type: integer
16945
+ nullable: true
16946
+ minimum: 0
16947
+ maximum: 100
16948
+ delivery:
16949
+ type: integer
16950
+ nullable: true
16951
+ minimum: 0
16952
+ maximum: 100
16953
+
16954
+ DimensionTargetsRepoOverrideDto:
16955
+ type: object
16956
+ additionalProperties: false
16957
+ properties:
16958
+ disabledDimensions:
16959
+ type: array
16960
+ uniqueItems: true
16961
+ items:
16962
+ $ref: "#/components/schemas/ReadinessDimensionId"
16963
+ description: Dimensions left out of this repository's score.
16964
+ targets:
16965
+ $ref: "#/components/schemas/DimensionTargetPercentsDto"
16966
+
16967
+ DimensionTargetsDto:
16968
+ type: object
16969
+ additionalProperties: false
16970
+ description: >
16971
+ Agentic Foundation dimension targets. Empty object means every dimension is
16972
+ scored and the target is 100.
16973
+ properties:
16974
+ targets:
16975
+ $ref: "#/components/schemas/DimensionTargetPercentsDto"
16976
+ repoOverrides:
16977
+ type: object
16978
+ additionalProperties:
16979
+ $ref: "#/components/schemas/DimensionTargetsRepoOverrideDto"
16980
+ description: Keys are in-scope repository ids.
16981
+
16813
16982
  AiEmailAliasEntryDto:
16814
16983
  type: object
16815
16984
  required: [canonicalEmail, aliasEmail]
@@ -281,6 +281,16 @@
281
281
  "method": "PUT",
282
282
  "path": "/workspaces/{workspaceId}/productivity-targets"
283
283
  },
284
+ "getWorkspaceDimensionTargets": {
285
+ "status": "implemented",
286
+ "method": "GET",
287
+ "path": "/workspaces/{workspaceId}/agentic-foundation/dimension-targets"
288
+ },
289
+ "putWorkspaceDimensionTargets": {
290
+ "status": "implemented",
291
+ "method": "PUT",
292
+ "path": "/workspaces/{workspaceId}/agentic-foundation/dimension-targets"
293
+ },
284
294
  "putTenantSources": {
285
295
  "status": "implemented",
286
296
  "method": "PUT",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thinkai/tai-api-contract",
3
- "version": "2.200.0",
3
+ "version": "2.201.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -20,8 +20,8 @@
20
20
  },
21
21
  "devDependencies": {
22
22
  "@stoplight/spectral-cli": "^6.17.0",
23
- "@types/node": "^26.6.5",
24
- "jsonpath-plus": "^11.2.1",
23
+ "@types/node": "^26.6.6",
24
+ "jsonpath-plus": "^11.2.2",
25
25
  "openapi-typescript": "^7.13.0",
26
26
  "typescript": "~6.0.3"
27
27
  },
@@ -943,6 +943,30 @@ export interface paths {
943
943
  patch?: never;
944
944
  trace?: never;
945
945
  };
946
+ "/workspaces/{workspaceId}/agentic-foundation/dimension-targets": {
947
+ parameters: {
948
+ query?: never;
949
+ header?: never;
950
+ path?: never;
951
+ cookie?: never;
952
+ };
953
+ /**
954
+ * Get Agentic Foundation dimension targets
955
+ * @description Workspace target percent per readiness dimension, plus optional per-repository overrides. Omitted targets mean 100. A repository override may disable scoring for a dimension and set its own target. Empty object means every dimension is scored at 100. Member-level read access.
956
+ */
957
+ get: operations["getWorkspaceDimensionTargets"];
958
+ /**
959
+ * Set Agentic Foundation dimension targets
960
+ * @description Full-replace workspace dimension targets and repository overrides. Omit a target or send 100 to keep the default. `PUT {}` or `null` clears overrides so every dimension is scored at 100. Repository ids must be in Agentic Foundation scan scope. Requires workspace **admin**.
961
+ */
962
+ put: operations["putWorkspaceDimensionTargets"];
963
+ post?: never;
964
+ delete?: never;
965
+ options?: never;
966
+ head?: never;
967
+ patch?: never;
968
+ trace?: never;
969
+ };
946
970
  "/workspaces/{workspaceId}/sources": {
947
971
  parameters: {
948
972
  query?: never;
@@ -6516,6 +6540,31 @@ export interface components {
6516
6540
  /** @description Ceiling — stay at or below this many CI failures per engineer per week. `0` is valid. */
6517
6541
  ciFailuresPerEngineerPerWeek?: number | null;
6518
6542
  };
6543
+ /** @description Omitted dimension means a target of 100. Values of 100 are not stored. */
6544
+ DimensionTargetPercentsDto: {
6545
+ "ai-agent-readiness"?: number | null;
6546
+ "token-efficiency"?: number | null;
6547
+ "repo-hygiene"?: number | null;
6548
+ "stack-quality"?: number | null;
6549
+ "tests-qa"?: number | null;
6550
+ observability?: number | null;
6551
+ "api-contracts"?: number | null;
6552
+ "platform-governance"?: number | null;
6553
+ delivery?: number | null;
6554
+ };
6555
+ DimensionTargetsRepoOverrideDto: {
6556
+ /** @description Dimensions left out of this repository's score. */
6557
+ disabledDimensions?: components["schemas"]["ReadinessDimensionId"][];
6558
+ targets?: components["schemas"]["DimensionTargetPercentsDto"];
6559
+ };
6560
+ /** @description Agentic Foundation dimension targets. Empty object means every dimension is scored and the target is 100. */
6561
+ DimensionTargetsDto: {
6562
+ targets?: components["schemas"]["DimensionTargetPercentsDto"];
6563
+ /** @description Keys are in-scope repository ids. */
6564
+ repoOverrides?: {
6565
+ [key: string]: components["schemas"]["DimensionTargetsRepoOverrideDto"];
6566
+ };
6567
+ };
6519
6568
  AiEmailAliasEntryDto: {
6520
6569
  /**
6521
6570
  * Format: email
@@ -13316,6 +13365,9 @@ export type AiModelPolicyConfigDto = components['schemas']['AiModelPolicyConfigD
13316
13365
  export type AiModelPolicyPersonOverrideDto = components['schemas']['AiModelPolicyPersonOverrideDto'];
13317
13366
  export type AiModelPolicyDto = components['schemas']['AiModelPolicyDto'];
13318
13367
  export type ProductivityTargetsDto = components['schemas']['ProductivityTargetsDto'];
13368
+ export type DimensionTargetPercentsDto = components['schemas']['DimensionTargetPercentsDto'];
13369
+ export type DimensionTargetsRepoOverrideDto = components['schemas']['DimensionTargetsRepoOverrideDto'];
13370
+ export type DimensionTargetsDto = components['schemas']['DimensionTargetsDto'];
13319
13371
  export type AiEmailAliasEntryDto = components['schemas']['AiEmailAliasEntryDto'];
13320
13372
  export type AiEmailAliasesDto = components['schemas']['AiEmailAliasesDto'];
13321
13373
  export type TestConnectionResponseDto = components['schemas']['TestConnectionResponseDto'];
@@ -16871,6 +16923,91 @@ export interface operations {
16871
16923
  };
16872
16924
  };
16873
16925
  };
16926
+ getWorkspaceDimensionTargets: {
16927
+ parameters: {
16928
+ query?: never;
16929
+ header?: never;
16930
+ path: {
16931
+ workspaceId: components["parameters"]["WorkspaceId"];
16932
+ };
16933
+ cookie?: never;
16934
+ };
16935
+ requestBody?: never;
16936
+ responses: {
16937
+ /** @description Current targets (may be empty) */
16938
+ 200: {
16939
+ headers: {
16940
+ [name: string]: unknown;
16941
+ };
16942
+ content: {
16943
+ "application/json": components["schemas"]["DimensionTargetsDto"];
16944
+ };
16945
+ };
16946
+ 401: components["responses"]["Unauthorized"];
16947
+ 403: components["responses"]["Forbidden"];
16948
+ /** @description Workspace does not exist or malformed workspaceId */
16949
+ 404: {
16950
+ headers: {
16951
+ [name: string]: unknown;
16952
+ };
16953
+ content: {
16954
+ "application/json": components["schemas"]["ErrorMessageDto"];
16955
+ };
16956
+ };
16957
+ };
16958
+ };
16959
+ putWorkspaceDimensionTargets: {
16960
+ parameters: {
16961
+ query?: never;
16962
+ header?: never;
16963
+ path: {
16964
+ workspaceId: components["parameters"]["WorkspaceId"];
16965
+ };
16966
+ cookie?: never;
16967
+ };
16968
+ requestBody: {
16969
+ content: {
16970
+ "application/json": components["schemas"]["DimensionTargetsDto"];
16971
+ };
16972
+ };
16973
+ responses: {
16974
+ /** @description Targets persisted (or cleared). */
16975
+ 204: {
16976
+ headers: {
16977
+ [name: string]: unknown;
16978
+ };
16979
+ content?: never;
16980
+ };
16981
+ /** @description Invalid payload or repository is not in scan scope */
16982
+ 400: {
16983
+ headers: {
16984
+ [name: string]: unknown;
16985
+ };
16986
+ content: {
16987
+ "application/json": components["schemas"]["ErrorMessageDto"];
16988
+ };
16989
+ };
16990
+ 401: components["responses"]["Unauthorized"];
16991
+ /** @description Forbidden — workspace admin required */
16992
+ 403: {
16993
+ headers: {
16994
+ [name: string]: unknown;
16995
+ };
16996
+ content: {
16997
+ "application/json": components["schemas"]["ErrorMessageDto"];
16998
+ };
16999
+ };
17000
+ /** @description Workspace does not exist or malformed workspaceId */
17001
+ 404: {
17002
+ headers: {
17003
+ [name: string]: unknown;
17004
+ };
17005
+ content: {
17006
+ "application/json": components["schemas"]["ErrorMessageDto"];
17007
+ };
17008
+ };
17009
+ };
17010
+ };
16874
17011
  putTenantSources: {
16875
17012
  parameters: {
16876
17013
  query?: never;