@thinkai/tai-api-contract 2.40.0 → 2.41.0-pr.841.238652fb

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.
@@ -626,6 +626,66 @@ export interface paths {
626
626
  patch?: never;
627
627
  trace?: never;
628
628
  };
629
+ "/workspaces/{workspaceId}/integrations/ai-tool/{provider}/members": {
630
+ parameters: {
631
+ query?: never;
632
+ header?: never;
633
+ path?: never;
634
+ cookie?: never;
635
+ };
636
+ /**
637
+ * AI tool integration — paginated member list with usage totals
638
+ * @description Paginated list of active AI-tool seats enriched with spend, token, and active-day totals for the selected time range. Supports search (by email / display name) and sort (spend_cents_desc, active_days_desc, token_count_desc, name_asc). Useful for the **Members** tab of the AI tool integration detail page.
639
+ */
640
+ get: operations["getAiToolMembers"];
641
+ put?: never;
642
+ post?: never;
643
+ delete?: never;
644
+ options?: never;
645
+ head?: never;
646
+ patch?: never;
647
+ trace?: never;
648
+ };
649
+ "/workspaces/{workspaceId}/integrations/ai-tool/{provider}/teams": {
650
+ parameters: {
651
+ query?: never;
652
+ header?: never;
653
+ path?: never;
654
+ cookie?: never;
655
+ };
656
+ /**
657
+ * AI tool integration — team rollups from org chart
658
+ * @description Team-level AI tool usage aggregated from org-chart membership (SPA org chart snapshot). Returns spend, token, active member counts per team for the selected range. Members not mapped to any team are excluded.
659
+ */
660
+ get: operations["getAiToolTeams"];
661
+ put?: never;
662
+ post?: never;
663
+ delete?: never;
664
+ options?: never;
665
+ head?: never;
666
+ patch?: never;
667
+ trace?: never;
668
+ };
669
+ "/workspaces/{workspaceId}/integrations/ai-tool/{provider}/members/{externalId}": {
670
+ parameters: {
671
+ query?: never;
672
+ header?: never;
673
+ path?: never;
674
+ cookie?: never;
675
+ };
676
+ /**
677
+ * AI tool integration — member detail drill-down
678
+ * @description Individual member detail: total spend, tokens, active days, per-model spend breakdown, and per-day activity heatmap for the selected range. The member's team (from org chart) is returned when available.
679
+ */
680
+ get: operations["getAiToolMemberDetail"];
681
+ put?: never;
682
+ post?: never;
683
+ delete?: never;
684
+ options?: never;
685
+ head?: never;
686
+ patch?: never;
687
+ trace?: never;
688
+ };
629
689
  "/workspaces/{workspaceId}/company-profile": {
630
690
  parameters: {
631
691
  query?: never;
@@ -2929,6 +2989,59 @@ export interface components {
2929
2989
  generatedAt: string;
2930
2990
  weeks: components["schemas"]["AiUsageSpendUsageTrendsWeekDto"][];
2931
2991
  };
2992
+ AiToolMemberSummaryDto: {
2993
+ externalId: string;
2994
+ email: string;
2995
+ displayName?: string;
2996
+ role?: string;
2997
+ spendCents: number;
2998
+ tokenCount: number;
2999
+ activeDays: number;
3000
+ mostUsedModel?: string;
3001
+ };
3002
+ AiToolMembersListDto: {
3003
+ members: components["schemas"]["AiToolMemberSummaryDto"][];
3004
+ total: number;
3005
+ page: number;
3006
+ pageSize: number;
3007
+ };
3008
+ AiToolTeamSummaryDto: {
3009
+ teamId: string;
3010
+ teamName: string;
3011
+ memberCount: number;
3012
+ activeMembers: number;
3013
+ spendCents: number;
3014
+ tokenCount: number;
3015
+ };
3016
+ AiToolTeamsListDto: {
3017
+ teams: components["schemas"]["AiToolTeamSummaryDto"][];
3018
+ total: number;
3019
+ };
3020
+ AiToolMemberModelBreakdownItemDto: {
3021
+ modelName: string;
3022
+ spendCents: number;
3023
+ tokenCount: number;
3024
+ eventCount: number;
3025
+ };
3026
+ AiToolMemberHeatmapDayDto: {
3027
+ /** Format: date */
3028
+ day: string;
3029
+ isActive: boolean;
3030
+ tokenCount: number;
3031
+ };
3032
+ AiToolMemberDetailDto: {
3033
+ externalId: string;
3034
+ email: string;
3035
+ displayName?: string;
3036
+ role?: string;
3037
+ isRemoved: boolean;
3038
+ spendCents: number;
3039
+ tokenCount: number;
3040
+ activeDays: number;
3041
+ teamName?: string;
3042
+ modelBreakdown: components["schemas"]["AiToolMemberModelBreakdownItemDto"][];
3043
+ heatmap: components["schemas"]["AiToolMemberHeatmapDayDto"][];
3044
+ };
2932
3045
  MeProfileDto: {
2933
3046
  id: string;
2934
3047
  email: string;
@@ -4510,6 +4623,13 @@ export type AiUsageSpendRoiProductivitySignalDto = components['schemas']['AiUsag
4510
4623
  export type AiUsageSpendUsageTrendsProviderWeekDto = components['schemas']['AiUsageSpendUsageTrendsProviderWeekDto'];
4511
4624
  export type AiUsageSpendUsageTrendsWeekDto = components['schemas']['AiUsageSpendUsageTrendsWeekDto'];
4512
4625
  export type AiUsageSpendUsageTrendsDto = components['schemas']['AiUsageSpendUsageTrendsDto'];
4626
+ export type AiToolMemberSummaryDto = components['schemas']['AiToolMemberSummaryDto'];
4627
+ export type AiToolMembersListDto = components['schemas']['AiToolMembersListDto'];
4628
+ export type AiToolTeamSummaryDto = components['schemas']['AiToolTeamSummaryDto'];
4629
+ export type AiToolTeamsListDto = components['schemas']['AiToolTeamsListDto'];
4630
+ export type AiToolMemberModelBreakdownItemDto = components['schemas']['AiToolMemberModelBreakdownItemDto'];
4631
+ export type AiToolMemberHeatmapDayDto = components['schemas']['AiToolMemberHeatmapDayDto'];
4632
+ export type AiToolMemberDetailDto = components['schemas']['AiToolMemberDetailDto'];
4513
4633
  export type MeProfileDto = components['schemas']['MeProfileDto'];
4514
4634
  export type UpdateMeBodyDto = components['schemas']['UpdateMeBodyDto'];
4515
4635
  export type WorkspaceSummaryDto = components['schemas']['WorkspaceSummaryDto'];
@@ -6315,6 +6435,154 @@ export interface operations {
6315
6435
  };
6316
6436
  };
6317
6437
  };
6438
+ getAiToolMembers: {
6439
+ parameters: {
6440
+ query?: {
6441
+ rangeId?: "4w" | "8w" | "q";
6442
+ windowEnd?: string;
6443
+ page?: number;
6444
+ pageSize?: number;
6445
+ search?: string;
6446
+ sort?: "spend_cents_desc" | "active_days_desc" | "token_count_desc" | "name_asc";
6447
+ };
6448
+ header?: never;
6449
+ path: {
6450
+ workspaceId: components["parameters"]["WorkspaceId"];
6451
+ /** @description AI tool provider id (e.g. claude, cursor). */
6452
+ provider: string;
6453
+ };
6454
+ cookie?: never;
6455
+ };
6456
+ requestBody?: never;
6457
+ responses: {
6458
+ /** @description Paginated member list with usage totals */
6459
+ 200: {
6460
+ headers: {
6461
+ [name: string]: unknown;
6462
+ };
6463
+ content: {
6464
+ "application/json": components["schemas"]["AiToolMembersListDto"];
6465
+ };
6466
+ };
6467
+ /** @description Invalid query parameters */
6468
+ 400: {
6469
+ headers: {
6470
+ [name: string]: unknown;
6471
+ };
6472
+ content: {
6473
+ "application/json": {
6474
+ /** @example invalid_query */
6475
+ error: string;
6476
+ };
6477
+ };
6478
+ };
6479
+ 401: components["responses"]["Unauthorized"];
6480
+ 403: components["responses"]["Forbidden"];
6481
+ /** @description Workspace does not exist or malformed workspaceId */
6482
+ 404: {
6483
+ headers: {
6484
+ [name: string]: unknown;
6485
+ };
6486
+ content?: never;
6487
+ };
6488
+ };
6489
+ };
6490
+ getAiToolTeams: {
6491
+ parameters: {
6492
+ query?: {
6493
+ rangeId?: "4w" | "8w" | "q";
6494
+ windowEnd?: string;
6495
+ };
6496
+ header?: never;
6497
+ path: {
6498
+ workspaceId: components["parameters"]["WorkspaceId"];
6499
+ provider: string;
6500
+ };
6501
+ cookie?: never;
6502
+ };
6503
+ requestBody?: never;
6504
+ responses: {
6505
+ /** @description Team rollup list */
6506
+ 200: {
6507
+ headers: {
6508
+ [name: string]: unknown;
6509
+ };
6510
+ content: {
6511
+ "application/json": components["schemas"]["AiToolTeamsListDto"];
6512
+ };
6513
+ };
6514
+ /** @description Invalid query parameters */
6515
+ 400: {
6516
+ headers: {
6517
+ [name: string]: unknown;
6518
+ };
6519
+ content: {
6520
+ "application/json": {
6521
+ /** @example invalid_query */
6522
+ error: string;
6523
+ };
6524
+ };
6525
+ };
6526
+ 401: components["responses"]["Unauthorized"];
6527
+ 403: components["responses"]["Forbidden"];
6528
+ /** @description Workspace does not exist or malformed workspaceId */
6529
+ 404: {
6530
+ headers: {
6531
+ [name: string]: unknown;
6532
+ };
6533
+ content?: never;
6534
+ };
6535
+ };
6536
+ };
6537
+ getAiToolMemberDetail: {
6538
+ parameters: {
6539
+ query?: {
6540
+ rangeId?: "4w" | "8w" | "q";
6541
+ windowEnd?: string;
6542
+ };
6543
+ header?: never;
6544
+ path: {
6545
+ workspaceId: components["parameters"]["WorkspaceId"];
6546
+ provider: string;
6547
+ /** @description Provider-assigned member external id. */
6548
+ externalId: string;
6549
+ };
6550
+ cookie?: never;
6551
+ };
6552
+ requestBody?: never;
6553
+ responses: {
6554
+ /** @description Member detail with model breakdown and day heatmap */
6555
+ 200: {
6556
+ headers: {
6557
+ [name: string]: unknown;
6558
+ };
6559
+ content: {
6560
+ "application/json": components["schemas"]["AiToolMemberDetailDto"];
6561
+ };
6562
+ };
6563
+ /** @description Invalid query parameters */
6564
+ 400: {
6565
+ headers: {
6566
+ [name: string]: unknown;
6567
+ };
6568
+ content: {
6569
+ "application/json": {
6570
+ /** @example invalid_query */
6571
+ error: string;
6572
+ };
6573
+ };
6574
+ };
6575
+ 401: components["responses"]["Unauthorized"];
6576
+ 403: components["responses"]["Forbidden"];
6577
+ /** @description Workspace or member does not exist */
6578
+ 404: {
6579
+ headers: {
6580
+ [name: string]: unknown;
6581
+ };
6582
+ content?: never;
6583
+ };
6584
+ };
6585
+ };
6318
6586
  getCompanyProfile: {
6319
6587
  parameters: {
6320
6588
  query?: never;
package/src/index.ts CHANGED
@@ -1174,6 +1174,72 @@ export interface HrisTriggerSyncResultDto {
1174
1174
  providers?: HrisProviderSyncResultDto[];
1175
1175
  }
1176
1176
 
1177
+ /** Single AI-tool seat with usage totals for a time range. */
1178
+ export interface AiToolMemberSummaryDto {
1179
+ externalId: string;
1180
+ email: string;
1181
+ displayName?: string;
1182
+ role?: string;
1183
+ spendCents: number;
1184
+ tokenCount: number;
1185
+ activeDays: number;
1186
+ mostUsedModel?: string;
1187
+ }
1188
+
1189
+ /** Paginated response for GET .../integrations/ai-tool/:provider/members */
1190
+ export interface AiToolMembersListDto {
1191
+ members: AiToolMemberSummaryDto[];
1192
+ total: number;
1193
+ page: number;
1194
+ pageSize: number;
1195
+ }
1196
+
1197
+ /** Team-level AI tool usage aggregated from org-chart membership. */
1198
+ export interface AiToolTeamSummaryDto {
1199
+ teamId: string;
1200
+ teamName: string;
1201
+ memberCount: number;
1202
+ activeMembers: number;
1203
+ spendCents: number;
1204
+ tokenCount: number;
1205
+ }
1206
+
1207
+ /** Response for GET .../integrations/ai-tool/:provider/teams */
1208
+ export interface AiToolTeamsListDto {
1209
+ teams: AiToolTeamSummaryDto[];
1210
+ total: number;
1211
+ }
1212
+
1213
+ /** Per-model spend and token breakdown for a member in a time range. */
1214
+ export interface AiToolMemberModelBreakdownItemDto {
1215
+ modelName: string;
1216
+ spendCents: number;
1217
+ tokenCount: number;
1218
+ eventCount: number;
1219
+ }
1220
+
1221
+ /** Per-day activity entry in the member detail heatmap. */
1222
+ export interface AiToolMemberHeatmapDayDto {
1223
+ day: string;
1224
+ isActive: boolean;
1225
+ tokenCount: number;
1226
+ }
1227
+
1228
+ /** Response for GET .../integrations/ai-tool/:provider/members/:externalId */
1229
+ export interface AiToolMemberDetailDto {
1230
+ externalId: string;
1231
+ email: string;
1232
+ displayName?: string;
1233
+ role?: string;
1234
+ isRemoved: boolean;
1235
+ spendCents: number;
1236
+ tokenCount: number;
1237
+ activeDays: number;
1238
+ teamName?: string;
1239
+ modelBreakdown: AiToolMemberModelBreakdownItemDto[];
1240
+ heatmap: AiToolMemberHeatmapDayDto[];
1241
+ }
1242
+
1177
1243
  export {
1178
1244
  JOURNEY_STEP_IDS,
1179
1245
  JOURNEY_STEP_REGISTRY,