@thinkai/tai-api-contract 2.5.16 → 2.6.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.
@@ -69,7 +69,10 @@ export interface paths {
69
69
  path?: never;
70
70
  cookie?: never;
71
71
  };
72
- /** List workspace team members */
72
+ /**
73
+ * List workspace team members
74
+ * @description Returns active workspace members (`tai_workspace_members` with `deleted_at` null). Any workspace member may list; invite and role changes require admin.
75
+ */
73
76
  get: operations["listTenantMembers"];
74
77
  put?: never;
75
78
  post?: never;
@@ -88,7 +91,10 @@ export interface paths {
88
91
  };
89
92
  get?: never;
90
93
  put?: never;
91
- /** Invite member to workspace */
94
+ /**
95
+ * Invite member to workspace
96
+ * @description Workspace admin only. Upserts `tai_users` by email and adds or reactivates `tai_workspace_members`. Idempotent when the email is already an active member: returns **201** with the existing row and **does not change** their role if the request body role differs. Does not send email; optional `tai_workspace_invitations` row may be recorded (no accept/link flow yet).
97
+ */
92
98
  post: operations["inviteTenantMember"];
93
99
  delete?: never;
94
100
  options?: never;
@@ -106,11 +112,17 @@ export interface paths {
106
112
  get?: never;
107
113
  put?: never;
108
114
  post?: never;
109
- /** Remove member from workspace */
115
+ /**
116
+ * Remove member from workspace
117
+ * @description Workspace admin only. Soft-deletes the membership (`deleted_at` set). Cannot remove the workspace owner or the last admin.
118
+ */
110
119
  delete: operations["removeTenantMember"];
111
120
  options?: never;
112
121
  head?: never;
113
- /** Update workspace member role */
122
+ /**
123
+ * Update workspace member role
124
+ * @description Workspace admin only. `memberId` is `tai_users.id` (UUID), not the auth subject.
125
+ */
114
126
  patch: operations["updateTenantMemberRole"];
115
127
  trace?: never;
116
128
  };
@@ -1323,14 +1335,161 @@ export interface paths {
1323
1335
  patch?: never;
1324
1336
  trace?: never;
1325
1337
  };
1338
+ "/workspaces/{workspaceId}/your-ai-journey/analytics": {
1339
+ parameters: {
1340
+ query?: never;
1341
+ header?: never;
1342
+ path?: never;
1343
+ cookie?: never;
1344
+ };
1345
+ /**
1346
+ * Combined analytics summary for the /dashboard page
1347
+ * @description Returns a single aggregated payload combining journey step progress, readiness summary, and PR-signal headline metrics. Covers issue #268. Results are cached for 60 seconds.
1348
+ */
1349
+ get: operations["getYourAiJourneyAnalytics"];
1350
+ put?: never;
1351
+ post?: never;
1352
+ delete?: never;
1353
+ options?: never;
1354
+ head?: never;
1355
+ patch?: never;
1356
+ trace?: never;
1357
+ };
1358
+ "/workspaces/{workspaceId}/your-ai-journey/pr-signals": {
1359
+ parameters: {
1360
+ query?: never;
1361
+ header?: never;
1362
+ path?: never;
1363
+ cookie?: never;
1364
+ };
1365
+ /**
1366
+ * Weekly PR velocity and change-failure-rate time series
1367
+ * @description Returns a per-week time series of PR throughput and DORA change-failure-rate metrics, sourced from stored dashboard metrics. Covers issue #269. Results are cached for 60 seconds.
1368
+ */
1369
+ get: operations["getYourAiJourneyPrSignals"];
1370
+ put?: never;
1371
+ post?: never;
1372
+ delete?: never;
1373
+ options?: never;
1374
+ head?: never;
1375
+ patch?: never;
1376
+ trace?: never;
1377
+ };
1378
+ "/workspaces/{workspaceId}/your-ai-journey/readiness/aggregate": {
1379
+ parameters: {
1380
+ query?: never;
1381
+ header?: never;
1382
+ path?: never;
1383
+ cookie?: never;
1384
+ };
1385
+ /**
1386
+ * Per-dimension readiness aggregate across all repos
1387
+ * @description Aggregates stored readiness scores across all workspace repos by dimension. Covers issue #270. Results are cached for 60 seconds.
1388
+ */
1389
+ get: operations["getYourAiJourneyReadinessAggregate"];
1390
+ put?: never;
1391
+ post?: never;
1392
+ delete?: never;
1393
+ options?: never;
1394
+ head?: never;
1395
+ patch?: never;
1396
+ trace?: never;
1397
+ };
1398
+ "/workspaces/{workspaceId}/your-ai-journey/journey/progress": {
1399
+ parameters: {
1400
+ query?: never;
1401
+ header?: never;
1402
+ path?: never;
1403
+ cookie?: never;
1404
+ };
1405
+ /**
1406
+ * Workspace journey step completion
1407
+ * @description Returns the workspace-scoped journey progress state. Returns an empty `completedSteps` list with a synthetic `updatedAt` if no row exists yet. Covers issue #271.
1408
+ */
1409
+ get: operations["getYourAiJourneyProgress"];
1410
+ /**
1411
+ * Replace workspace journey completed steps
1412
+ * @description Idempotent replace-all of completed route strings for the workspace journey. Requires editor role. Covers issue #271.
1413
+ */
1414
+ put: operations["putYourAiJourneyProgress"];
1415
+ post?: never;
1416
+ delete?: never;
1417
+ options?: never;
1418
+ head?: never;
1419
+ patch?: never;
1420
+ trace?: never;
1421
+ };
1422
+ "/workspaces/{workspaceId}/your-ai-journey/agentic-foundation": {
1423
+ parameters: {
1424
+ query?: never;
1425
+ header?: never;
1426
+ path?: never;
1427
+ cookie?: never;
1428
+ };
1429
+ /**
1430
+ * Agentic foundation dashboard slice for /dashboard
1431
+ * @description Returns the same `AgenticFoundationDashboardDto` payload as `GET /agentic-foundation/dashboard`, scoped to the /dashboard page context. Covers issue #272. Results are cached for 60 seconds.
1432
+ */
1433
+ get: operations["getYourAiJourneyAgenticFoundation"];
1434
+ put?: never;
1435
+ post?: never;
1436
+ delete?: never;
1437
+ options?: never;
1438
+ head?: never;
1439
+ patch?: never;
1440
+ trace?: never;
1441
+ };
1442
+ "/workspaces/{workspaceId}/your-ai-journey/productivity": {
1443
+ parameters: {
1444
+ query?: never;
1445
+ header?: never;
1446
+ path?: never;
1447
+ cookie?: never;
1448
+ };
1449
+ /**
1450
+ * Workspace productivity metrics for /dashboard
1451
+ * @description Returns the most recent stored dashboard productivity metrics snapshot that overlaps the requested window (defaults to the trailing 7 days). Same schema as `GET /dashboard/productivity`. Covers issue #273. Results are cached for 60 seconds.
1452
+ */
1453
+ get: operations["getYourAiJourneyProductivity"];
1454
+ put?: never;
1455
+ post?: never;
1456
+ delete?: never;
1457
+ options?: never;
1458
+ head?: never;
1459
+ patch?: never;
1460
+ trace?: never;
1461
+ };
1462
+ "/workspaces/{workspaceId}/your-ai-journey/ai-spend": {
1463
+ parameters: {
1464
+ query?: never;
1465
+ header?: never;
1466
+ path?: never;
1467
+ cookie?: never;
1468
+ };
1469
+ /**
1470
+ * AI tool spend and usage aggregated by week and provider
1471
+ * @description Returns token usage and spend aggregated from connected AI tool sources (e.g. Cursor) over the requested range, broken down by week and provider. Covers issue #274. Results are cached for 60 seconds.
1472
+ */
1473
+ get: operations["getYourAiJourneyAiSpend"];
1474
+ put?: never;
1475
+ post?: never;
1476
+ delete?: never;
1477
+ options?: never;
1478
+ head?: never;
1479
+ patch?: never;
1480
+ trace?: never;
1481
+ };
1326
1482
  }
1327
1483
  export type webhooks = Record<string, never>;
1328
1484
  export interface components {
1329
1485
  schemas: {
1330
1486
  ErrorMessageDto: {
1331
1487
  error: string;
1488
+ /** @description Machine-readable error code when present (for example `last_admin`). */
1489
+ code?: string;
1332
1490
  };
1333
1491
  TeamMemberDto: {
1492
+ /** Format: uuid */
1334
1493
  id: string;
1335
1494
  name: string;
1336
1495
  email: string;
@@ -1565,6 +1724,10 @@ export interface components {
1565
1724
  personId: string;
1566
1725
  personName: string;
1567
1726
  teamName?: string;
1727
+ /** @description True when the contributor GitHub login is not mapped in the org chart. */
1728
+ notInOrgChart?: boolean;
1729
+ /** @description GitHub login for unattributed contributors (when notInOrgChart is true). */
1730
+ githubLogin?: string;
1568
1731
  weeks: components["schemas"]["ProductivityInsightsMergedPrTrendWeekDto"][];
1569
1732
  };
1570
1733
  ProductivityInsightsMergedPrTrendsDto: {
@@ -1575,7 +1738,7 @@ export interface components {
1575
1738
  scope: components["schemas"]["ProductivityInsightsAggregatedTeamsScopeDto"];
1576
1739
  /** Format: date-time */
1577
1740
  generatedAt: string;
1578
- /** @description Portfolio aggregate merged PR counts (sum of filtered contributors per week). */
1741
+ /** @description Portfolio aggregate merged PR counts from org-scope metrics (all merged PRs in window). */
1579
1742
  weeks: components["schemas"]["ProductivityInsightsMergedPrTrendWeekDto"][];
1580
1743
  contributors: components["schemas"]["ProductivityInsightsMergedPrContributorRowDto"][];
1581
1744
  };
@@ -2423,6 +2586,115 @@ export interface components {
2423
2586
  /** @description Path in `org-charts` bucket after Supabase upload */
2424
2587
  storagePath: string;
2425
2588
  };
2589
+ YourAiJourneyPrSignalsWeekDto: {
2590
+ /** Format: date-time */
2591
+ bucketStart: string;
2592
+ /** Format: date-time */
2593
+ bucketEnd: string;
2594
+ /** @description Display label in MM/DD format. */
2595
+ weekLabel: string;
2596
+ prsPerDeveloperPerWeek: number;
2597
+ changeFailureRatePercent: number;
2598
+ };
2599
+ YourAiJourneyPrSignalsDto: {
2600
+ /** Format: uuid */
2601
+ workspaceId: string;
2602
+ /** Format: date-time */
2603
+ generatedAt: string;
2604
+ /** Format: date-time */
2605
+ windowStart: string;
2606
+ /** Format: date-time */
2607
+ windowEnd: string;
2608
+ weeks: components["schemas"]["YourAiJourneyPrSignalsWeekDto"][];
2609
+ summary: {
2610
+ avgPrsPerDeveloperPerWeek: number;
2611
+ avgFailureRatePercent: number;
2612
+ prVelocityDeltaPercent: number;
2613
+ };
2614
+ };
2615
+ YourAiJourneyReadinessDimensionDto: {
2616
+ dimensionId: string;
2617
+ name: string;
2618
+ totalScore: number;
2619
+ maxScore: number;
2620
+ /** @description Rounded percentage 0–100. */
2621
+ percent: number;
2622
+ };
2623
+ YourAiJourneyReadinessAggregateDto: {
2624
+ /** Format: uuid */
2625
+ workspaceId: string;
2626
+ /** Format: date-time */
2627
+ generatedAt: string;
2628
+ dimensions: components["schemas"]["YourAiJourneyReadinessDimensionDto"][];
2629
+ summary: {
2630
+ avgScore: number;
2631
+ repoCount: number;
2632
+ fixRate: number;
2633
+ totalOpenIssues: number;
2634
+ totalFixedIssues: number;
2635
+ };
2636
+ };
2637
+ YourAiJourneyAnalyticsDto: {
2638
+ /** Format: uuid */
2639
+ workspaceId: string;
2640
+ /** Format: date-time */
2641
+ generatedAt: string;
2642
+ /** Format: date-time */
2643
+ windowStart: string;
2644
+ /** Format: date-time */
2645
+ windowEnd: string;
2646
+ journey: {
2647
+ completedSteps: string[];
2648
+ /** Format: date-time */
2649
+ updatedAt: string | null;
2650
+ };
2651
+ readiness: {
2652
+ avgScore: number;
2653
+ repoCount: number;
2654
+ fixRate: number;
2655
+ totalOpenIssues: number;
2656
+ totalFixedIssues: number;
2657
+ };
2658
+ prSignals: {
2659
+ avgPrsPerDeveloperPerWeek: number;
2660
+ prVelocityDeltaPercent: number;
2661
+ avgFailureRatePercent: number;
2662
+ };
2663
+ };
2664
+ YourAiJourneyAiSpendWeekDto: {
2665
+ /** Format: date-time */
2666
+ bucketStart: string;
2667
+ /** Format: date-time */
2668
+ bucketEnd: string;
2669
+ weekLabel: string;
2670
+ mergedPrCount: number;
2671
+ tokenCount: number;
2672
+ };
2673
+ YourAiJourneyAiSpendDto: {
2674
+ /** Format: uuid */
2675
+ workspaceId: string;
2676
+ /** Format: date-time */
2677
+ generatedAt: string;
2678
+ /** Format: date-time */
2679
+ windowStart: string;
2680
+ /** Format: date-time */
2681
+ windowEnd: string;
2682
+ totalSpendCents: number;
2683
+ totalTokenCount: number;
2684
+ activeUsers: number;
2685
+ /** @description Fraction 0–1 of PRs that are AI-assisted. */
2686
+ aiAssistedPrRatio: number;
2687
+ prThroughputDeltaPercent: number;
2688
+ usageDeltaPercent: number;
2689
+ weeks: components["schemas"]["YourAiJourneyAiSpendWeekDto"][];
2690
+ providers: {
2691
+ providerId: string;
2692
+ providerName: string;
2693
+ tokenCount: number;
2694
+ spendCents: number;
2695
+ activeUsers: number;
2696
+ }[];
2697
+ };
2426
2698
  };
2427
2699
  responses: {
2428
2700
  /** @description Missing or invalid bearer token */
@@ -2449,6 +2721,8 @@ export interface components {
2449
2721
  RepoId: string;
2450
2722
  ProjectId: string;
2451
2723
  NotificationId: string;
2724
+ /** @description Workspace member user id (`tai_users.id`). */
2725
+ WorkspaceMemberId: string;
2452
2726
  FixId: string;
2453
2727
  /** @description Department filter; send `All departments` to include every department. Scoped using imported `thinkai_org_structure` members when present, otherwise SPA org chart `department` nodes and their descendant teams. When neither source defines the requested department, insights return no scoped teams or contributors (not org-wide data). */
2454
2728
  InsightsDepartmentFilter: string;
@@ -2583,12 +2857,20 @@ export type PreferencesDto = components['schemas']['PreferencesDto'];
2583
2857
  export type ValidationIssueDto = components['schemas']['ValidationIssueDto'];
2584
2858
  export type PreferencesValidationErrorDto = components['schemas']['PreferencesValidationErrorDto'];
2585
2859
  export type OrgChartImportBodyDto = components['schemas']['OrgChartImportBodyDto'];
2860
+ export type YourAiJourneyPrSignalsWeekDto = components['schemas']['YourAiJourneyPrSignalsWeekDto'];
2861
+ export type YourAiJourneyPrSignalsDto = components['schemas']['YourAiJourneyPrSignalsDto'];
2862
+ export type YourAiJourneyReadinessDimensionDto = components['schemas']['YourAiJourneyReadinessDimensionDto'];
2863
+ export type YourAiJourneyReadinessAggregateDto = components['schemas']['YourAiJourneyReadinessAggregateDto'];
2864
+ export type YourAiJourneyAnalyticsDto = components['schemas']['YourAiJourneyAnalyticsDto'];
2865
+ export type YourAiJourneyAiSpendWeekDto = components['schemas']['YourAiJourneyAiSpendWeekDto'];
2866
+ export type YourAiJourneyAiSpendDto = components['schemas']['YourAiJourneyAiSpendDto'];
2586
2867
  export type ResponseUnauthorized = components['responses']['Unauthorized'];
2587
2868
  export type ResponseForbidden = components['responses']['Forbidden'];
2588
2869
  export type ParameterWorkspaceId = components['parameters']['WorkspaceId'];
2589
2870
  export type ParameterRepoId = components['parameters']['RepoId'];
2590
2871
  export type ParameterProjectId = components['parameters']['ProjectId'];
2591
2872
  export type ParameterNotificationId = components['parameters']['NotificationId'];
2873
+ export type ParameterWorkspaceMemberId = components['parameters']['WorkspaceMemberId'];
2592
2874
  export type ParameterFixId = components['parameters']['FixId'];
2593
2875
  export type ParameterInsightsDepartmentFilter = components['parameters']['InsightsDepartmentFilter'];
2594
2876
  export type $defs = Record<string, never>;
@@ -2718,11 +3000,32 @@ export interface operations {
2718
3000
  [name: string]: unknown;
2719
3001
  };
2720
3002
  content: {
3003
+ /**
3004
+ * @example {
3005
+ * "members": [
3006
+ * {
3007
+ * "id": "11111111-1111-4111-8111-111111111111",
3008
+ * "name": "Alex Admin",
3009
+ * "email": "alex@example.com",
3010
+ * "role": "admin"
3011
+ * }
3012
+ * ]
3013
+ * }
3014
+ */
2721
3015
  "application/json": components["schemas"]["TeamMemberListDto"];
2722
3016
  };
2723
3017
  };
2724
3018
  401: components["responses"]["Unauthorized"];
2725
3019
  403: components["responses"]["Forbidden"];
3020
+ /** @description Workspace does not exist or malformed workspaceId */
3021
+ 404: {
3022
+ headers: {
3023
+ [name: string]: unknown;
3024
+ };
3025
+ content: {
3026
+ "application/json": components["schemas"]["ErrorMessageDto"];
3027
+ };
3028
+ };
2726
3029
  };
2727
3030
  };
2728
3031
  inviteTenantMember: {
@@ -2736,6 +3039,12 @@ export interface operations {
2736
3039
  };
2737
3040
  requestBody: {
2738
3041
  content: {
3042
+ /**
3043
+ * @example {
3044
+ * "email": "new.member@example.com",
3045
+ * "role": "editor"
3046
+ * }
3047
+ */
2739
3048
  "application/json": components["schemas"]["InviteTeamMemberBodyDto"];
2740
3049
  };
2741
3050
  };
@@ -2749,8 +3058,26 @@ export interface operations {
2749
3058
  "application/json": components["schemas"]["TeamMemberDto"];
2750
3059
  };
2751
3060
  };
3061
+ /** @description Invalid email or role */
3062
+ 400: {
3063
+ headers: {
3064
+ [name: string]: unknown;
3065
+ };
3066
+ content: {
3067
+ "application/json": components["schemas"]["ErrorMessageDto"];
3068
+ };
3069
+ };
2752
3070
  401: components["responses"]["Unauthorized"];
2753
3071
  403: components["responses"]["Forbidden"];
3072
+ /** @description Workspace does not exist or malformed workspaceId */
3073
+ 404: {
3074
+ headers: {
3075
+ [name: string]: unknown;
3076
+ };
3077
+ content: {
3078
+ "application/json": components["schemas"]["ErrorMessageDto"];
3079
+ };
3080
+ };
2754
3081
  };
2755
3082
  };
2756
3083
  removeTenantMember: {
@@ -2759,7 +3086,8 @@ export interface operations {
2759
3086
  header?: never;
2760
3087
  path: {
2761
3088
  workspaceId: components["parameters"]["WorkspaceId"];
2762
- memberId: string;
3089
+ /** @description Workspace member user id (`tai_users.id`). */
3090
+ memberId: components["parameters"]["WorkspaceMemberId"];
2763
3091
  };
2764
3092
  cookie?: never;
2765
3093
  };
@@ -2774,12 +3102,23 @@ export interface operations {
2774
3102
  };
2775
3103
  401: components["responses"]["Unauthorized"];
2776
3104
  403: components["responses"]["Forbidden"];
2777
- /** @description Member not found */
3105
+ /** @description Member not found or invalid memberId */
2778
3106
  404: {
2779
3107
  headers: {
2780
3108
  [name: string]: unknown;
2781
3109
  };
2782
- content?: never;
3110
+ content: {
3111
+ "application/json": components["schemas"]["ErrorMessageDto"];
3112
+ };
3113
+ };
3114
+ /** @description Cannot remove workspace owner or last admin */
3115
+ 409: {
3116
+ headers: {
3117
+ [name: string]: unknown;
3118
+ };
3119
+ content: {
3120
+ "application/json": components["schemas"]["ErrorMessageDto"];
3121
+ };
2783
3122
  };
2784
3123
  };
2785
3124
  };
@@ -2789,12 +3128,18 @@ export interface operations {
2789
3128
  header?: never;
2790
3129
  path: {
2791
3130
  workspaceId: components["parameters"]["WorkspaceId"];
2792
- memberId: string;
3131
+ /** @description Workspace member user id (`tai_users.id`). */
3132
+ memberId: components["parameters"]["WorkspaceMemberId"];
2793
3133
  };
2794
3134
  cookie?: never;
2795
3135
  };
2796
3136
  requestBody: {
2797
3137
  content: {
3138
+ /**
3139
+ * @example {
3140
+ * "role": "viewer"
3141
+ * }
3142
+ */
2798
3143
  "application/json": components["schemas"]["UpdateTeamMemberRoleBodyDto"];
2799
3144
  };
2800
3145
  };
@@ -2808,14 +3153,34 @@ export interface operations {
2808
3153
  "application/json": components["schemas"]["TeamMemberDto"];
2809
3154
  };
2810
3155
  };
3156
+ /** @description Invalid role payload */
3157
+ 400: {
3158
+ headers: {
3159
+ [name: string]: unknown;
3160
+ };
3161
+ content: {
3162
+ "application/json": components["schemas"]["ErrorMessageDto"];
3163
+ };
3164
+ };
2811
3165
  401: components["responses"]["Unauthorized"];
2812
3166
  403: components["responses"]["Forbidden"];
2813
- /** @description Member not found */
3167
+ /** @description Member not found or invalid memberId */
2814
3168
  404: {
2815
3169
  headers: {
2816
3170
  [name: string]: unknown;
2817
3171
  };
2818
- content?: never;
3172
+ content: {
3173
+ "application/json": components["schemas"]["ErrorMessageDto"];
3174
+ };
3175
+ };
3176
+ /** @description Cannot demote the last workspace admin */
3177
+ 409: {
3178
+ headers: {
3179
+ [name: string]: unknown;
3180
+ };
3181
+ content: {
3182
+ "application/json": components["schemas"]["ErrorMessageDto"];
3183
+ };
2819
3184
  };
2820
3185
  };
2821
3186
  };
@@ -5627,4 +5992,299 @@ export interface operations {
5627
5992
  };
5628
5993
  };
5629
5994
  };
5995
+ getYourAiJourneyAnalytics: {
5996
+ parameters: {
5997
+ query?: never;
5998
+ header?: never;
5999
+ path: {
6000
+ workspaceId: components["parameters"]["WorkspaceId"];
6001
+ };
6002
+ cookie?: never;
6003
+ };
6004
+ requestBody?: never;
6005
+ responses: {
6006
+ /** @description Analytics summary */
6007
+ 200: {
6008
+ headers: {
6009
+ [name: string]: unknown;
6010
+ };
6011
+ content: {
6012
+ "application/json": components["schemas"]["YourAiJourneyAnalyticsDto"];
6013
+ };
6014
+ };
6015
+ 401: components["responses"]["Unauthorized"];
6016
+ 403: components["responses"]["Forbidden"];
6017
+ /** @description Workspace does not exist */
6018
+ 404: {
6019
+ headers: {
6020
+ [name: string]: unknown;
6021
+ };
6022
+ content: {
6023
+ "application/json": components["schemas"]["ErrorMessageDto"];
6024
+ };
6025
+ };
6026
+ };
6027
+ };
6028
+ getYourAiJourneyPrSignals: {
6029
+ parameters: {
6030
+ query?: {
6031
+ /** @description Number of weekly buckets to return (1–52; default 8). */
6032
+ limit?: number;
6033
+ };
6034
+ header?: never;
6035
+ path: {
6036
+ workspaceId: components["parameters"]["WorkspaceId"];
6037
+ };
6038
+ cookie?: never;
6039
+ };
6040
+ requestBody?: never;
6041
+ responses: {
6042
+ /** @description Weekly PR signals */
6043
+ 200: {
6044
+ headers: {
6045
+ [name: string]: unknown;
6046
+ };
6047
+ content: {
6048
+ "application/json": components["schemas"]["YourAiJourneyPrSignalsDto"];
6049
+ };
6050
+ };
6051
+ /** @description Invalid query parameter (limit out of range) */
6052
+ 400: {
6053
+ headers: {
6054
+ [name: string]: unknown;
6055
+ };
6056
+ content: {
6057
+ "application/json": components["schemas"]["ErrorMessageDto"];
6058
+ };
6059
+ };
6060
+ 401: components["responses"]["Unauthorized"];
6061
+ 403: components["responses"]["Forbidden"];
6062
+ /** @description Workspace does not exist */
6063
+ 404: {
6064
+ headers: {
6065
+ [name: string]: unknown;
6066
+ };
6067
+ content: {
6068
+ "application/json": components["schemas"]["ErrorMessageDto"];
6069
+ };
6070
+ };
6071
+ };
6072
+ };
6073
+ getYourAiJourneyReadinessAggregate: {
6074
+ parameters: {
6075
+ query?: never;
6076
+ header?: never;
6077
+ path: {
6078
+ workspaceId: components["parameters"]["WorkspaceId"];
6079
+ };
6080
+ cookie?: never;
6081
+ };
6082
+ requestBody?: never;
6083
+ responses: {
6084
+ /** @description Readiness aggregate */
6085
+ 200: {
6086
+ headers: {
6087
+ [name: string]: unknown;
6088
+ };
6089
+ content: {
6090
+ "application/json": components["schemas"]["YourAiJourneyReadinessAggregateDto"];
6091
+ };
6092
+ };
6093
+ 401: components["responses"]["Unauthorized"];
6094
+ 403: components["responses"]["Forbidden"];
6095
+ /** @description Workspace does not exist */
6096
+ 404: {
6097
+ headers: {
6098
+ [name: string]: unknown;
6099
+ };
6100
+ content: {
6101
+ "application/json": components["schemas"]["ErrorMessageDto"];
6102
+ };
6103
+ };
6104
+ };
6105
+ };
6106
+ getYourAiJourneyProgress: {
6107
+ parameters: {
6108
+ query?: never;
6109
+ header?: never;
6110
+ path: {
6111
+ workspaceId: components["parameters"]["WorkspaceId"];
6112
+ };
6113
+ cookie?: never;
6114
+ };
6115
+ requestBody?: never;
6116
+ responses: {
6117
+ /** @description Journey progress */
6118
+ 200: {
6119
+ headers: {
6120
+ [name: string]: unknown;
6121
+ };
6122
+ content: {
6123
+ "application/json": components["schemas"]["JourneyProgressDto"];
6124
+ };
6125
+ };
6126
+ 401: components["responses"]["Unauthorized"];
6127
+ 403: components["responses"]["Forbidden"];
6128
+ /** @description Workspace does not exist */
6129
+ 404: {
6130
+ headers: {
6131
+ [name: string]: unknown;
6132
+ };
6133
+ content: {
6134
+ "application/json": components["schemas"]["ErrorMessageDto"];
6135
+ };
6136
+ };
6137
+ };
6138
+ };
6139
+ putYourAiJourneyProgress: {
6140
+ parameters: {
6141
+ query?: never;
6142
+ header?: never;
6143
+ path: {
6144
+ workspaceId: components["parameters"]["WorkspaceId"];
6145
+ };
6146
+ cookie?: never;
6147
+ };
6148
+ requestBody: {
6149
+ content: {
6150
+ "application/json": components["schemas"]["JourneyProgressUpdateDto"];
6151
+ };
6152
+ };
6153
+ responses: {
6154
+ /** @description Saved progress */
6155
+ 200: {
6156
+ headers: {
6157
+ [name: string]: unknown;
6158
+ };
6159
+ content: {
6160
+ "application/json": components["schemas"]["JourneyProgressDto"];
6161
+ };
6162
+ };
6163
+ /** @description Body fails validation (non-array, invalid entries, too many steps) */
6164
+ 400: {
6165
+ headers: {
6166
+ [name: string]: unknown;
6167
+ };
6168
+ content: {
6169
+ "application/json": components["schemas"]["ErrorMessageDto"];
6170
+ };
6171
+ };
6172
+ 401: components["responses"]["Unauthorized"];
6173
+ 403: components["responses"]["Forbidden"];
6174
+ /** @description Workspace does not exist */
6175
+ 404: {
6176
+ headers: {
6177
+ [name: string]: unknown;
6178
+ };
6179
+ content: {
6180
+ "application/json": components["schemas"]["ErrorMessageDto"];
6181
+ };
6182
+ };
6183
+ };
6184
+ };
6185
+ getYourAiJourneyAgenticFoundation: {
6186
+ parameters: {
6187
+ query?: never;
6188
+ header?: never;
6189
+ path: {
6190
+ workspaceId: components["parameters"]["WorkspaceId"];
6191
+ };
6192
+ cookie?: never;
6193
+ };
6194
+ requestBody?: never;
6195
+ responses: {
6196
+ /** @description Agentic foundation dashboard */
6197
+ 200: {
6198
+ headers: {
6199
+ [name: string]: unknown;
6200
+ };
6201
+ content: {
6202
+ "application/json": components["schemas"]["AgenticFoundationDashboardDto"];
6203
+ };
6204
+ };
6205
+ 401: components["responses"]["Unauthorized"];
6206
+ 403: components["responses"]["Forbidden"];
6207
+ /** @description Workspace does not exist */
6208
+ 404: {
6209
+ headers: {
6210
+ [name: string]: unknown;
6211
+ };
6212
+ content: {
6213
+ "application/json": components["schemas"]["ErrorMessageDto"];
6214
+ };
6215
+ };
6216
+ };
6217
+ };
6218
+ getYourAiJourneyProductivity: {
6219
+ parameters: {
6220
+ query?: {
6221
+ /** @description Upper bound of the requested window (ISO 8601; defaults to now). */
6222
+ windowEnd?: string;
6223
+ };
6224
+ header?: never;
6225
+ path: {
6226
+ workspaceId: components["parameters"]["WorkspaceId"];
6227
+ };
6228
+ cookie?: never;
6229
+ };
6230
+ requestBody?: never;
6231
+ responses: {
6232
+ /** @description Productivity metrics snapshot */
6233
+ 200: {
6234
+ headers: {
6235
+ [name: string]: unknown;
6236
+ };
6237
+ content: {
6238
+ "application/json": components["schemas"]["DashboardProductivityDto"];
6239
+ };
6240
+ };
6241
+ 401: components["responses"]["Unauthorized"];
6242
+ 403: components["responses"]["Forbidden"];
6243
+ /** @description Workspace does not exist */
6244
+ 404: {
6245
+ headers: {
6246
+ [name: string]: unknown;
6247
+ };
6248
+ content: {
6249
+ "application/json": components["schemas"]["ErrorMessageDto"];
6250
+ };
6251
+ };
6252
+ };
6253
+ };
6254
+ getYourAiJourneyAiSpend: {
6255
+ parameters: {
6256
+ query?: {
6257
+ /** @description Time range — `4w` (4 weeks), `8w` (8 weeks), or `q` (quarter, 12 weeks). */
6258
+ rangeId?: "4w" | "8w" | "q";
6259
+ };
6260
+ header?: never;
6261
+ path: {
6262
+ workspaceId: components["parameters"]["WorkspaceId"];
6263
+ };
6264
+ cookie?: never;
6265
+ };
6266
+ requestBody?: never;
6267
+ responses: {
6268
+ /** @description AI spend aggregation */
6269
+ 200: {
6270
+ headers: {
6271
+ [name: string]: unknown;
6272
+ };
6273
+ content: {
6274
+ "application/json": components["schemas"]["YourAiJourneyAiSpendDto"];
6275
+ };
6276
+ };
6277
+ 401: components["responses"]["Unauthorized"];
6278
+ 403: components["responses"]["Forbidden"];
6279
+ /** @description Workspace does not exist */
6280
+ 404: {
6281
+ headers: {
6282
+ [name: string]: unknown;
6283
+ };
6284
+ content: {
6285
+ "application/json": components["schemas"]["ErrorMessageDto"];
6286
+ };
6287
+ };
6288
+ };
6289
+ };
5630
6290
  }