@thinkai/tai-api-contract 2.199.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.
@@ -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.199.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;
@@ -5216,7 +5240,7 @@ export interface paths {
5216
5240
  };
5217
5241
  /**
5218
5242
  * Ingest / backfill data coverage
5219
- * @description Read-only snapshot of historical ingest coverage for connected pipelines (productivity GitHub, AI usage/spend per provider, SDLC components, monitoring, HRIS). Aggregates existing watermarks and stored day/week evidence — does not trigger ingest or refresh. Every pipeline includes always-present `dataTrust` (`status` + `verificationMethod`) as a unified trust summary derived from existing coverage signals (stale, gaps, productivity `verificationStatus`, AI `spendReconciliationStatus`, pipeline `status`). It does not replace Source verified, Spend matched, or Backfill complete fields. Productivity detail may include `selfHeal` (latest depth scan and week reconcile) read from stored activity rows; this GET does not run a scan. `selfHeal` is null when neither event exists. AI usage detail includes spend reconciliation (`spendReconciliationStatus`, `spendDataQuality`, provider and stored cent totals, `spendReconcileCheckedAt`) read from the refresh-status snapshot. This GET does not call Cursor or Claude. Productivity, HR, monitoring, and SDLC pipelines omit those fields. `nextScheduledAt` is the scheduled poll instant for `ai_usage`, `hris`, and `monitoring`. It is null for productivity and SDLC, when that sync worker is disabled, or when there has been no attempt (`hris`/`monitoring` use last status `never`). For `hris` and `monitoring`, the value is the next PHASE2 daily UTC cron after now (`15 2` / `30 2`, not lastAttempt plus interval) and is therefore in the future when set. For `ai_usage`, it is the next weekly workspace slot and a past instant means that poll is overdue; it is not moved forward to now and is not an ETA. Monitoring `sync` copies stored `issueCount`, `deploymentCount`, and `eventCount` (null when unset). HRIS leaves those three null. Requires workspace membership. Disconnected sources are omitted. Insights / Measure / Engineering Health response DTOs do not include `dataTrust`.
5243
+ * @description Read-only snapshot of historical ingest coverage for connected pipelines (productivity GitHub/Bitbucket, AI usage/spend per provider, SDLC components, monitoring, HRIS, Jira, PagerDuty). Aggregates existing watermarks and stored day/week evidence — does not trigger ingest or refresh. Every pipeline includes always-present `dataTrust` (`status` + `verificationMethod`) as a unified trust summary derived from existing coverage signals (stale, gaps, productivity `verificationStatus`, AI `spendReconciliationStatus`, optional pipeline `sourceReconcile`, pipeline `status`). It does not replace Source verified, Spend matched, or Backfill complete fields. Optional `sourceReconcile` generalizes Source verified (count/checksum vs provider) for L2 reconcilers; omit/null when no scheduled reconcile snapshot exists. Productivity detail may include `selfHeal` (latest depth scan and week reconcile) read from stored activity rows; this GET does not run a scan. `selfHeal` is null when neither event exists. AI usage detail includes spend reconciliation (`spendReconciliationStatus`, `spendDataQuality`, provider and stored cent totals, `spendReconcileCheckedAt`) read from the refresh-status snapshot. This GET does not call Cursor or Claude. Productivity, HR, monitoring, and SDLC pipelines omit those spend fields. `nextScheduledAt` is the scheduled poll instant for `ai_usage`, `hris`, and `monitoring`. It is null for productivity and SDLC, when that sync worker is disabled, or when there has been no attempt (`hris`/`monitoring` use last status `never`). For `hris` and `monitoring`, the value is the next PHASE2 daily UTC cron after now (`15 2` / `30 2`, not lastAttempt plus interval) and is therefore in the future when set. For `ai_usage`, it is the next weekly workspace slot and a past instant means that poll is overdue; it is not moved forward to now and is not an ETA. Monitoring `sync` copies stored `issueCount`, `deploymentCount`, and `eventCount` (null when unset). HRIS leaves those three null. Requires workspace membership. Disconnected sources are omitted. Insights / Measure / Engineering Health response DTOs do not include `dataTrust`.
5220
5244
  */
5221
5245
  get: operations["getWorkspaceIngestCoverage"];
5222
5246
  put?: 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
@@ -10813,6 +10862,36 @@ export interface components {
10813
10862
  /** @description Monitoring meta event count. Null for HRIS and when the stored count is unset. */
10814
10863
  eventCount?: number | null;
10815
10864
  };
10865
+ /**
10866
+ * @description Pipeline-level source reconcile outcome (L2). Same values as productivity Source verified, plus `not_applicable` when the provider has no countable or checksum reconcile surface.
10867
+ * @enum {string}
10868
+ */
10869
+ IngestCoverageSourceReconcileStatus: "unverified" | "verified" | "below_target" | "insufficient_sample" | "stale" | "not_applicable";
10870
+ /**
10871
+ * @description Which L2 reconcile check produced `sourceReconcile.verificationStatus`. Prefer `source_count` or `checksum` when mapping into `dataTrust.verificationMethod`.
10872
+ * @enum {string}
10873
+ */
10874
+ IngestCoverageSourceReconcileMethod: "source_count" | "checksum" | "none";
10875
+ /** @description Generalized Source verified / reconcile snapshot on a coverage pipeline. Optional until a scheduled reconciler writes a row. Does not replace nested productivity verify fields or AI spend reconcile. */
10876
+ IngestCoverageSourceReconcileDto: {
10877
+ verificationStatus: components["schemas"]["IngestCoverageSourceReconcileStatus"];
10878
+ /** @description Minimum provider-vs-stored capture for a count reconcile (0–100, up to two decimals). Null when the check is checksum-only, thin, not applicable, or no sample exists. */
10879
+ sourceCapturePercent: number | null;
10880
+ verificationMethod: components["schemas"]["IngestCoverageSourceReconcileMethod"];
10881
+ /**
10882
+ * Format: date-time
10883
+ * @description When the snapshot was written. Null when unverified with no row.
10884
+ */
10885
+ checkedAt: string | null;
10886
+ /** @description Provider-side count for the reconcile window. Null when unset or N/A. */
10887
+ providerCount: number | null;
10888
+ /** @description Stored platform count for the reconcile window. Null when unset or N/A. */
10889
+ storedCount: number | null;
10890
+ /** @description Provider-side checksum (opaque). Null when method is not checksum. */
10891
+ providerChecksum: string | null;
10892
+ /** @description Stored platform checksum (opaque). Null when method is not checksum. */
10893
+ storedChecksum: string | null;
10894
+ };
10816
10895
  /**
10817
10896
  * @description Unified data-trust summary for one ingest-coverage pipeline. Derived from existing coverage signals; does not rename Source verified, Spend matched, or Backfill complete.
10818
10897
  * @enum {string}
@@ -10846,7 +10925,7 @@ export interface components {
10846
10925
  IngestCoveragePipelineDto: {
10847
10926
  id: string;
10848
10927
  /** @enum {string} */
10849
- kind: "productivity_github" | "ai_usage" | "sdlc_github" | "monitoring" | "hris";
10928
+ kind: "productivity_github" | "productivity_bitbucket" | "ai_usage" | "sdlc_github" | "monitoring" | "hris" | "jira" | "pagerduty";
10850
10929
  provider?: string | null;
10851
10930
  /** @enum {string} */
10852
10931
  status: "not_started" | "backfilling" | "incremental" | "complete" | "failed" | "in_progress";
@@ -10879,6 +10958,8 @@ export interface components {
10879
10958
  ai?: components["schemas"]["IngestCoverageAiDetailDto"];
10880
10959
  sdlc?: components["schemas"]["IngestCoverageSdlcDetailDto"];
10881
10960
  sync?: components["schemas"]["IngestCoverageSyncDetailDto"];
10961
+ /** @description Optional L2 source-reconcile snapshot (count / checksum vs provider API). Null when no scheduled reconcile has written a row for this pipeline. Does not replace nested productivity verify fields or AI spend reconcile. */
10962
+ sourceReconcile?: components["schemas"]["IngestCoverageSourceReconcileDto"] | null;
10882
10963
  dataTrust: components["schemas"]["DataTrustDto"];
10883
10964
  };
10884
10965
  IngestCoverageDto: {
@@ -10890,7 +10971,7 @@ export interface components {
10890
10971
  /** Format: uuid */
10891
10972
  runId: string;
10892
10973
  /** @enum {string} */
10893
- kind: "productivity_github" | "ai_usage" | "sdlc_github" | "monitoring" | "hris";
10974
+ kind: "productivity_github" | "productivity_bitbucket" | "ai_usage" | "sdlc_github" | "monitoring" | "hris" | "jira" | "pagerduty";
10894
10975
  /** Format: date-time */
10895
10976
  startedAt: string;
10896
10977
  /** Format: date-time */
@@ -13284,6 +13365,9 @@ export type AiModelPolicyConfigDto = components['schemas']['AiModelPolicyConfigD
13284
13365
  export type AiModelPolicyPersonOverrideDto = components['schemas']['AiModelPolicyPersonOverrideDto'];
13285
13366
  export type AiModelPolicyDto = components['schemas']['AiModelPolicyDto'];
13286
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'];
13287
13371
  export type AiEmailAliasEntryDto = components['schemas']['AiEmailAliasEntryDto'];
13288
13372
  export type AiEmailAliasesDto = components['schemas']['AiEmailAliasesDto'];
13289
13373
  export type TestConnectionResponseDto = components['schemas']['TestConnectionResponseDto'];
@@ -13644,6 +13728,9 @@ export type IngestCoverageAiDetailDto = components['schemas']['IngestCoverageAiD
13644
13728
  export type IngestCoverageSdlcComponentDto = components['schemas']['IngestCoverageSdlcComponentDto'];
13645
13729
  export type IngestCoverageSdlcDetailDto = components['schemas']['IngestCoverageSdlcDetailDto'];
13646
13730
  export type IngestCoverageSyncDetailDto = components['schemas']['IngestCoverageSyncDetailDto'];
13731
+ export type IngestCoverageSourceReconcileStatus = components['schemas']['IngestCoverageSourceReconcileStatus'];
13732
+ export type IngestCoverageSourceReconcileMethod = components['schemas']['IngestCoverageSourceReconcileMethod'];
13733
+ export type IngestCoverageSourceReconcileDto = components['schemas']['IngestCoverageSourceReconcileDto'];
13647
13734
  export type DataTrustStatus = components['schemas']['DataTrustStatus'];
13648
13735
  export type DataTrustVerificationMethod = components['schemas']['DataTrustVerificationMethod'];
13649
13736
  export type DataTrustDto = components['schemas']['DataTrustDto'];
@@ -16836,6 +16923,91 @@ export interface operations {
16836
16923
  };
16837
16924
  };
16838
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
+ };
16839
17011
  putTenantSources: {
16840
17012
  parameters: {
16841
17013
  query?: never;
@@ -28104,7 +28276,7 @@ export interface operations {
28104
28276
  parameters: {
28105
28277
  query?: {
28106
28278
  /** @description Coverage pipeline kind. Omit to list every kind stored for the workspace. */
28107
- kind?: "productivity_github" | "ai_usage" | "sdlc_github" | "monitoring" | "hris";
28279
+ kind?: "productivity_github" | "productivity_bitbucket" | "ai_usage" | "sdlc_github" | "monitoring" | "hris" | "jira" | "pagerduty";
28108
28280
  /** @description Page size. Default 20. Values above 100 are rejected. */
28109
28281
  limit?: number;
28110
28282
  };
package/src/index.ts CHANGED
@@ -1457,6 +1457,47 @@ export interface IngestCoverageProductivitySelfHealDto {
1457
1457
  export type IngestCoverageVerificationStatus =
1458
1458
  "unverified" | "verified" | "below_target" | "insufficient_sample" | "stale";
1459
1459
 
1460
+ /**
1461
+ * Pipeline-level source reconcile outcome (L2).
1462
+ * Reuses the productivity Source verified statuses and adds `not_applicable`
1463
+ * when a connected provider exposes no countable/checksum reconcile surface.
1464
+ */
1465
+ export type IngestCoverageSourceReconcileStatus =
1466
+ IngestCoverageVerificationStatus | "not_applicable";
1467
+
1468
+ /**
1469
+ * Which L2 reconcile check produced `sourceReconcile.verificationStatus`.
1470
+ * Maps into L1 `dataTrust.verificationMethod` (`source_count` / `checksum`).
1471
+ */
1472
+ export type IngestCoverageSourceReconcileMethod = "source_count" | "checksum" | "none";
1473
+
1474
+ /**
1475
+ * Generalized Source verified / reconcile snapshot on a coverage pipeline.
1476
+ * Optional until a scheduled reconciler has written a row. Productivity GitHub
1477
+ * keeps nested `productivity.verificationStatus` / `sourceCapturePercent`;
1478
+ * AI spend stays on `ai.spendReconciliationStatus`.
1479
+ */
1480
+ export interface IngestCoverageSourceReconcileDto {
1481
+ verificationStatus: IngestCoverageSourceReconcileStatus;
1482
+ /**
1483
+ * Minimum provider-vs-stored capture for a count reconcile (0–100, up to two
1484
+ * decimals). Null when the check is checksum-only, thin, not applicable, or
1485
+ * no sample exists.
1486
+ */
1487
+ sourceCapturePercent: number | null;
1488
+ verificationMethod: IngestCoverageSourceReconcileMethod;
1489
+ /** When the snapshot was written. Null when status is unverified with no row. */
1490
+ checkedAt: string | null;
1491
+ /** Provider-side count for the reconcile window. Null when unset or N/A. */
1492
+ providerCount: number | null;
1493
+ /** Stored platform count for the reconcile window. Null when unset or N/A. */
1494
+ storedCount: number | null;
1495
+ /** Provider-side checksum (opaque). Null when method is not checksum. */
1496
+ providerChecksum: string | null;
1497
+ /** Stored platform checksum (opaque). Null when method is not checksum. */
1498
+ storedChecksum: string | null;
1499
+ }
1500
+
1460
1501
  export interface IngestCoverageProductivityDetailDto {
1461
1502
  phase?: "recent" | "historical" | "complete" | null;
1462
1503
  historicalWeekStart?: string | null;
@@ -1564,7 +1605,14 @@ export interface IngestCoverageSyncDetailDto {
1564
1605
  }
1565
1606
 
1566
1607
  export type IngestCoveragePipelineKind =
1567
- "productivity_github" | "ai_usage" | "sdlc_github" | "monitoring" | "hris";
1608
+ | "productivity_github"
1609
+ | "productivity_bitbucket"
1610
+ | "ai_usage"
1611
+ | "sdlc_github"
1612
+ | "monitoring"
1613
+ | "hris"
1614
+ | "jira"
1615
+ | "pagerduty";
1568
1616
 
1569
1617
  export type IngestCoveragePipelineStatus =
1570
1618
  "not_started" | "backfilling" | "incremental" | "complete" | "failed" | "in_progress";
@@ -1628,6 +1676,12 @@ export interface IngestCoveragePipelineDto {
1628
1676
  ai?: IngestCoverageAiDetailDto;
1629
1677
  sdlc?: IngestCoverageSdlcDetailDto;
1630
1678
  sync?: IngestCoverageSyncDetailDto;
1679
+ /**
1680
+ * Optional L2 source-reconcile snapshot (count / checksum vs provider API).
1681
+ * Null/omit when no scheduled reconcile has written a row for this pipeline.
1682
+ * Does not replace nested productivity verify fields or AI spend reconcile.
1683
+ */
1684
+ sourceReconcile?: IngestCoverageSourceReconcileDto | null;
1631
1685
  /**
1632
1686
  * Always present. Unified Data trust summary for this pipeline.
1633
1687
  * Additive to Source verified / Spend matched / Backfill complete.