@thinkai/tai-api-contract 2.118.0 → 2.120.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.
@@ -3924,6 +3924,26 @@ export interface paths {
3924
3924
  patch: operations["patchWorkspaceZenHrBranch"];
3925
3925
  trace?: never;
3926
3926
  };
3927
+ "/workspaces/{workspaceId}/ingest-coverage": {
3928
+ parameters: {
3929
+ query?: never;
3930
+ header?: never;
3931
+ path?: never;
3932
+ cookie?: never;
3933
+ };
3934
+ /**
3935
+ * Ingest / backfill data coverage
3936
+ * @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. Requires workspace membership. Disconnected sources are omitted.
3937
+ */
3938
+ get: operations["getWorkspaceIngestCoverage"];
3939
+ put?: never;
3940
+ post?: never;
3941
+ delete?: never;
3942
+ options?: never;
3943
+ head?: never;
3944
+ patch?: never;
3945
+ trace?: never;
3946
+ };
3927
3947
  "/workspaces/{workspaceId}/hris/status": {
3928
3948
  parameters: {
3929
3949
  query?: never;
@@ -7651,6 +7671,119 @@ export interface components {
7651
7671
  */
7652
7672
  syncedAt: string | null;
7653
7673
  };
7674
+ IngestCoverageGapDto: {
7675
+ /** @description Inclusive gap start (ISO date or UTC Monday week start). */
7676
+ from: string;
7677
+ /** @description Inclusive gap end (ISO date or UTC Monday week start). */
7678
+ to: string;
7679
+ };
7680
+ IngestCoverageLastRunDto: {
7681
+ /** Format: date-time */
7682
+ startedAt?: string | null;
7683
+ /** Format: date-time */
7684
+ completedAt?: string | null;
7685
+ /** Format: int64 */
7686
+ durationMs?: number | null;
7687
+ /** @description Pipeline-specific run mode (e.g. recent, historical, refresh). */
7688
+ mode?: string | null;
7689
+ /** @enum {string|null} */
7690
+ outcome?: "ok" | "failed" | "in_progress" | null;
7691
+ };
7692
+ IngestCoverageProductivityRepoDto: {
7693
+ slug: string;
7694
+ /** @enum {string} */
7695
+ queueStatus: "pending" | "complete" | "failed" | "skipped";
7696
+ weeksWithData?: number | null;
7697
+ earliestWeek?: string | null;
7698
+ latestWeek?: string | null;
7699
+ missingWeeks?: number | null;
7700
+ gaps?: components["schemas"]["IngestCoverageGapDto"][];
7701
+ lastErrorKind?: string | null;
7702
+ };
7703
+ IngestCoverageProductivityDetailDto: {
7704
+ /** @enum {string|null} */
7705
+ phase?: "recent" | "historical" | "complete" | null;
7706
+ historicalWeekStart?: string | null;
7707
+ pendingRepoCount?: number;
7708
+ skippedRepoCount?: number;
7709
+ failedRepoCount?: number;
7710
+ coveragePercent?: number | null;
7711
+ repos?: components["schemas"]["IngestCoverageProductivityRepoDto"][];
7712
+ };
7713
+ IngestCoverageFactFamilyDto: {
7714
+ /** @enum {string} */
7715
+ id: "daily_usage" | "spend_daily" | "model_daily" | "product_daily";
7716
+ expectedDays?: number;
7717
+ daysPresent?: number;
7718
+ ingestedFrom?: string | null;
7719
+ ingestedTo?: string | null;
7720
+ missingDayCount?: number;
7721
+ gaps?: components["schemas"]["IngestCoverageGapDto"][];
7722
+ };
7723
+ IngestCoverageAiDetailDto: {
7724
+ factFamilies?: components["schemas"]["IngestCoverageFactFamilyDto"][];
7725
+ refreshInProgress?: boolean;
7726
+ };
7727
+ IngestCoverageSdlcComponentDto: {
7728
+ /** @enum {string} */
7729
+ id: "rollup" | "security_ingest" | "governance_github" | "governance_auditor" | "financial_ingest" | "cost_refresher";
7730
+ latestBucketDate?: string | null;
7731
+ lookbackDays?: number;
7732
+ mode?: string | null;
7733
+ gaps?: components["schemas"]["IngestCoverageGapDto"][];
7734
+ missingCount?: number | null;
7735
+ /** Format: date-time */
7736
+ lastSuccessAt?: string | null;
7737
+ /** Format: int64 */
7738
+ staleForMs?: number | null;
7739
+ isStale?: boolean;
7740
+ /** @enum {string|null} */
7741
+ staleReason?: "sync_age" | "data_lag" | "both" | null;
7742
+ };
7743
+ IngestCoverageSdlcDetailDto: {
7744
+ components?: components["schemas"]["IngestCoverageSdlcComponentDto"][];
7745
+ };
7746
+ IngestCoverageSyncDetailDto: {
7747
+ provider?: string;
7748
+ /** @enum {string} */
7749
+ syncStatus?: "ok" | "error" | "never";
7750
+ };
7751
+ IngestCoveragePipelineDto: {
7752
+ id: string;
7753
+ /** @enum {string} */
7754
+ kind: "productivity_github" | "ai_usage" | "sdlc_github" | "monitoring" | "hris";
7755
+ provider?: string | null;
7756
+ /** @enum {string} */
7757
+ status: "not_started" | "backfilling" | "incremental" | "complete" | "failed" | "in_progress";
7758
+ targetWindowDays: number;
7759
+ ingestedFrom?: string | null;
7760
+ ingestedTo?: string | null;
7761
+ progressPercent?: number | null;
7762
+ /** Format: date-time */
7763
+ lastSuccessAt?: string | null;
7764
+ /** Format: date-time */
7765
+ lastAttemptAt?: string | null;
7766
+ lastErrorKind?: string | null;
7767
+ lastErrorMessage?: string | null;
7768
+ /** Format: int64 */
7769
+ staleForMs?: number | null;
7770
+ isStale: boolean;
7771
+ dataLagDays?: number | null;
7772
+ /** @enum {string|null} */
7773
+ staleReason?: "sync_age" | "data_lag" | "both" | null;
7774
+ gaps?: components["schemas"]["IngestCoverageGapDto"][];
7775
+ missingCount?: number | null;
7776
+ lastRun?: components["schemas"]["IngestCoverageLastRunDto"];
7777
+ productivity?: components["schemas"]["IngestCoverageProductivityDetailDto"];
7778
+ ai?: components["schemas"]["IngestCoverageAiDetailDto"];
7779
+ sdlc?: components["schemas"]["IngestCoverageSdlcDetailDto"];
7780
+ sync?: components["schemas"]["IngestCoverageSyncDetailDto"];
7781
+ };
7782
+ IngestCoverageDto: {
7783
+ pipelines: components["schemas"]["IngestCoveragePipelineDto"][];
7784
+ /** Format: date-time */
7785
+ generatedAt?: string;
7786
+ };
7654
7787
  HrisSyncStatusDto: {
7655
7788
  /** @description Provider identifier (e.g. 'personio', 'zenhr'). */
7656
7789
  provider: string;
@@ -7933,7 +8066,7 @@ export interface components {
7933
8066
  InsightsResponseMeta: {
7934
8067
  /**
7935
8068
  * Format: date-time
7936
- * @description ISO timestamp when numbers were computed server-side
8069
+ * @description ISO timestamp when numbers were computed server-side. An empty string means the workspace has no successful AI-tool refresh or productivity ingest timestamp yet.
7937
8070
  */
7938
8071
  syncedAt: string;
7939
8072
  /**
@@ -9597,6 +9730,17 @@ export type ActivityLogActorDto = components['schemas']['ActivityLogActorDto'];
9597
9730
  export type ActivityLogEntryDto = components['schemas']['ActivityLogEntryDto'];
9598
9731
  export type WorkspaceAbsenceDto = components['schemas']['WorkspaceAbsenceDto'];
9599
9732
  export type WorkspaceAbsenceListDto = components['schemas']['WorkspaceAbsenceListDto'];
9733
+ export type IngestCoverageGapDto = components['schemas']['IngestCoverageGapDto'];
9734
+ export type IngestCoverageLastRunDto = components['schemas']['IngestCoverageLastRunDto'];
9735
+ export type IngestCoverageProductivityRepoDto = components['schemas']['IngestCoverageProductivityRepoDto'];
9736
+ export type IngestCoverageProductivityDetailDto = components['schemas']['IngestCoverageProductivityDetailDto'];
9737
+ export type IngestCoverageFactFamilyDto = components['schemas']['IngestCoverageFactFamilyDto'];
9738
+ export type IngestCoverageAiDetailDto = components['schemas']['IngestCoverageAiDetailDto'];
9739
+ export type IngestCoverageSdlcComponentDto = components['schemas']['IngestCoverageSdlcComponentDto'];
9740
+ export type IngestCoverageSdlcDetailDto = components['schemas']['IngestCoverageSdlcDetailDto'];
9741
+ export type IngestCoverageSyncDetailDto = components['schemas']['IngestCoverageSyncDetailDto'];
9742
+ export type IngestCoveragePipelineDto = components['schemas']['IngestCoveragePipelineDto'];
9743
+ export type IngestCoverageDto = components['schemas']['IngestCoverageDto'];
9600
9744
  export type HrisSyncStatusDto = components['schemas']['HrisSyncStatusDto'];
9601
9745
  export type HrisSyncStatusListDto = components['schemas']['HrisSyncStatusListDto'];
9602
9746
  export type ZenHrReconnectResultDto = components['schemas']['ZenHrReconnectResultDto'];
@@ -19710,6 +19854,30 @@ export interface operations {
19710
19854
  503: components["responses"]["ZenHrSyncInProgress"];
19711
19855
  };
19712
19856
  };
19857
+ getWorkspaceIngestCoverage: {
19858
+ parameters: {
19859
+ query?: never;
19860
+ header?: never;
19861
+ path: {
19862
+ workspaceId: components["parameters"]["WorkspaceId"];
19863
+ };
19864
+ cookie?: never;
19865
+ };
19866
+ requestBody?: never;
19867
+ responses: {
19868
+ /** @description Ingest coverage for connected pipelines */
19869
+ 200: {
19870
+ headers: {
19871
+ [name: string]: unknown;
19872
+ };
19873
+ content: {
19874
+ "application/json": components["schemas"]["IngestCoverageDto"];
19875
+ };
19876
+ };
19877
+ 401: components["responses"]["Unauthorized"];
19878
+ 403: components["responses"]["Forbidden"];
19879
+ };
19880
+ };
19713
19881
  getHrisSyncStatus: {
19714
19882
  parameters: {
19715
19883
  query?: never;
package/src/index.ts CHANGED
@@ -1289,6 +1289,127 @@ export interface WorkspaceAbsenceListDto {
1289
1289
  syncedAt: string | null;
1290
1290
  }
1291
1291
 
1292
+ /** Inclusive missing coverage range (calendar day or UTC Monday week ISO). */
1293
+ export interface IngestCoverageGapDto {
1294
+ from: string;
1295
+ to: string;
1296
+ }
1297
+
1298
+ /** Timing for the latest ingest/refresh run. */
1299
+ export interface IngestCoverageLastRunDto {
1300
+ startedAt?: string | null;
1301
+ completedAt?: string | null;
1302
+ durationMs?: number | null;
1303
+ mode?: string | null;
1304
+ outcome?: "ok" | "failed" | "in_progress" | null;
1305
+ }
1306
+
1307
+ export interface IngestCoverageProductivityRepoDto {
1308
+ slug: string;
1309
+ queueStatus: "pending" | "complete" | "failed" | "skipped";
1310
+ weeksWithData?: number | null;
1311
+ earliestWeek?: string | null;
1312
+ latestWeek?: string | null;
1313
+ missingWeeks?: number | null;
1314
+ gaps?: IngestCoverageGapDto[];
1315
+ lastErrorKind?: string | null;
1316
+ }
1317
+
1318
+ export interface IngestCoverageProductivityDetailDto {
1319
+ phase?: "recent" | "historical" | "complete" | null;
1320
+ historicalWeekStart?: string | null;
1321
+ pendingRepoCount?: number;
1322
+ skippedRepoCount?: number;
1323
+ failedRepoCount?: number;
1324
+ coveragePercent?: number | null;
1325
+ repos?: IngestCoverageProductivityRepoDto[];
1326
+ }
1327
+
1328
+ export interface IngestCoverageFactFamilyDto {
1329
+ id: "daily_usage" | "spend_daily" | "model_daily" | "product_daily";
1330
+ expectedDays?: number;
1331
+ daysPresent?: number;
1332
+ ingestedFrom?: string | null;
1333
+ ingestedTo?: string | null;
1334
+ missingDayCount?: number;
1335
+ gaps?: IngestCoverageGapDto[];
1336
+ }
1337
+
1338
+ export interface IngestCoverageAiDetailDto {
1339
+ factFamilies?: IngestCoverageFactFamilyDto[];
1340
+ refreshInProgress?: boolean;
1341
+ }
1342
+
1343
+ /** Why a pipeline or SDLC component is marked stale. */
1344
+ export type IngestCoverageStaleReason = "sync_age" | "data_lag" | "both";
1345
+
1346
+ export interface IngestCoverageSdlcComponentDto {
1347
+ id:
1348
+ | "rollup"
1349
+ | "security_ingest"
1350
+ | "governance_github"
1351
+ | "governance_auditor"
1352
+ | "financial_ingest"
1353
+ | "cost_refresher";
1354
+ latestBucketDate?: string | null;
1355
+ lookbackDays?: number;
1356
+ mode?: string | null;
1357
+ gaps?: IngestCoverageGapDto[];
1358
+ missingCount?: number | null;
1359
+ lastSuccessAt?: string | null;
1360
+ staleForMs?: number | null;
1361
+ isStale?: boolean;
1362
+ staleReason?: IngestCoverageStaleReason | null;
1363
+ }
1364
+
1365
+ export interface IngestCoverageSdlcDetailDto {
1366
+ components?: IngestCoverageSdlcComponentDto[];
1367
+ }
1368
+
1369
+ export interface IngestCoverageSyncDetailDto {
1370
+ provider?: string;
1371
+ syncStatus?: "ok" | "error" | "never";
1372
+ }
1373
+
1374
+ export type IngestCoveragePipelineKind =
1375
+ "productivity_github" | "ai_usage" | "sdlc_github" | "monitoring" | "hris";
1376
+
1377
+ export type IngestCoveragePipelineStatus =
1378
+ "not_started" | "backfilling" | "incremental" | "complete" | "failed" | "in_progress";
1379
+
1380
+ /** One connected ingest pipeline in GET /workspaces/:id/ingest-coverage. */
1381
+ export interface IngestCoveragePipelineDto {
1382
+ id: string;
1383
+ kind: IngestCoveragePipelineKind;
1384
+ provider?: string | null;
1385
+ status: IngestCoveragePipelineStatus;
1386
+ targetWindowDays: number;
1387
+ ingestedFrom?: string | null;
1388
+ ingestedTo?: string | null;
1389
+ progressPercent?: number | null;
1390
+ lastSuccessAt?: string | null;
1391
+ lastAttemptAt?: string | null;
1392
+ lastErrorKind?: string | null;
1393
+ lastErrorMessage?: string | null;
1394
+ staleForMs?: number | null;
1395
+ isStale: boolean;
1396
+ dataLagDays?: number | null;
1397
+ staleReason?: IngestCoverageStaleReason | null;
1398
+ gaps?: IngestCoverageGapDto[];
1399
+ missingCount?: number | null;
1400
+ lastRun?: IngestCoverageLastRunDto;
1401
+ productivity?: IngestCoverageProductivityDetailDto;
1402
+ ai?: IngestCoverageAiDetailDto;
1403
+ sdlc?: IngestCoverageSdlcDetailDto;
1404
+ sync?: IngestCoverageSyncDetailDto;
1405
+ }
1406
+
1407
+ /** Response body for GET /workspaces/:id/ingest-coverage. */
1408
+ export interface IngestCoverageDto {
1409
+ pipelines: IngestCoveragePipelineDto[];
1410
+ generatedAt?: string;
1411
+ }
1412
+
1292
1413
  /** Sync status for a single HRIS provider connected to a workspace. */
1293
1414
  export interface HrisSyncStatusDto {
1294
1415
  /** Provider identifier ('personio', 'zenhr', …). */