@thinkai/tai-api-contract 2.162.0 → 2.163.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.162.0
4
+ version: 2.163.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}/...`.
@@ -6423,6 +6423,91 @@ paths:
6423
6423
  schema:
6424
6424
  $ref: "#/components/schemas/ErrorMessageDto"
6425
6425
 
6426
+ /workspaces/{workspaceId}/aggregate-use-consent:
6427
+ get:
6428
+ tags: [Workspace]
6429
+ summary: Read anonymized aggregate-use permission
6430
+ operationId: getAggregateUseConsent
6431
+ description: >
6432
+ Returns whether ThinkAI may use this workspace's anonymized aggregate results in
6433
+ marketing and peer benchmarks. A workspace that never chose returns `unset`, which
6434
+ behaves as opted out (`effective: false`). The permission never covers company name,
6435
+ logo, quote, raw report, repository or person identity, or customer reference.
6436
+ Any workspace member may read it.
6437
+ parameters:
6438
+ - $ref: "#/components/parameters/WorkspaceId"
6439
+ responses:
6440
+ "200":
6441
+ description: Current permission and the sentence reports must print
6442
+ content:
6443
+ application/json:
6444
+ schema:
6445
+ $ref: "#/components/schemas/AggregateUseConsentDto"
6446
+ "401":
6447
+ $ref: "#/components/responses/Unauthorized"
6448
+ "403":
6449
+ $ref: "#/components/responses/Forbidden"
6450
+ "404":
6451
+ description: Workspace does not exist
6452
+ content:
6453
+ application/json:
6454
+ schema:
6455
+ $ref: "#/components/schemas/ErrorMessageDto"
6456
+ put:
6457
+ tags: [Workspace]
6458
+ summary: Set anonymized aggregate-use permission
6459
+ operationId: putAggregateUseConsent
6460
+ description: >
6461
+ Workspace admins opt in or out. Every change writes one
6462
+ `workspace.aggregate_use.changed` activity-log row in the same transaction.
6463
+ Moving from `opt_in` to `opt_out` records a withdrawal and stops future extraction.
6464
+ Opt-in requires the current legal-approved notice version; while no notice is
6465
+ approved, opt-in returns `409 aggregate_use_notice_unapproved`. Opt-out is always
6466
+ accepted. A refusal does not change price, delivery, support, or assessment output.
6467
+ parameters:
6468
+ - $ref: "#/components/parameters/WorkspaceId"
6469
+ requestBody:
6470
+ required: true
6471
+ content:
6472
+ application/json:
6473
+ schema:
6474
+ $ref: "#/components/schemas/AggregateUseConsentPutDto"
6475
+ responses:
6476
+ "200":
6477
+ description: Saved permission
6478
+ content:
6479
+ application/json:
6480
+ schema:
6481
+ $ref: "#/components/schemas/AggregateUseConsentDto"
6482
+ "400":
6483
+ description: "Invalid body (`code`: `invalid_input`)"
6484
+ content:
6485
+ application/json:
6486
+ schema:
6487
+ $ref: "#/components/schemas/ErrorMessageDto"
6488
+ "401":
6489
+ $ref: "#/components/responses/Unauthorized"
6490
+ "403":
6491
+ description: "Caller is not a workspace admin (`code`: `workspace_admin_required`)"
6492
+ content:
6493
+ application/json:
6494
+ schema:
6495
+ $ref: "#/components/schemas/ErrorMessageDto"
6496
+ "404":
6497
+ description: Workspace does not exist
6498
+ content:
6499
+ application/json:
6500
+ schema:
6501
+ $ref: "#/components/schemas/ErrorMessageDto"
6502
+ "409":
6503
+ description: >
6504
+ Opt-in refused because no notice is approved (`aggregate_use_notice_unapproved`)
6505
+ or the submitted notice version is not current (`aggregate_use_notice_stale`).
6506
+ content:
6507
+ application/json:
6508
+ schema:
6509
+ $ref: "#/components/schemas/ErrorMessageDto"
6510
+
6426
6511
  /workspaces/{workspaceId}/report-center/exports:
6427
6512
  post:
6428
6513
  tags: [WorkspaceActivity]
@@ -6500,7 +6585,7 @@ paths:
6500
6585
  required: false
6501
6586
  description: >
6502
6587
  Coarse product-area grouping filter (#156). `integration` = GitHub + AI-tool key events;
6503
- `agentic_foundation` = repos, readiness scans, fixes; `workspace_team` = members + HRIS + report exports;
6588
+ `agentic_foundation` = repos, readiness scans, fixes; `workspace_team` = members + HRIS + report exports + workspace settings;
6504
6589
  `productivity` = productivity ingest lifecycle events. Omit (or pass `all`) for every area.
6505
6590
  schema:
6506
6591
  type: string
@@ -20593,6 +20678,7 @@ components:
20593
20678
  - integrations.zelt.added
20594
20679
  - integrations.zelt.removed
20595
20680
  - report.exported
20681
+ - workspace.aggregate_use.changed
20596
20682
 
20597
20683
  UnsetAssessmentDecisionDto:
20598
20684
  type: object
@@ -20603,6 +20689,94 @@ components:
20603
20689
  type: string
20604
20690
  enum: [unset]
20605
20691
 
20692
+ AggregateUseNoticeStatusDto:
20693
+ type: object
20694
+ additionalProperties: false
20695
+ required: [status]
20696
+ description: Current legal-approved opt-in notice, or `unset` while opt-in is unavailable.
20697
+ properties:
20698
+ status:
20699
+ type: string
20700
+ enum: [approved, unset]
20701
+ version:
20702
+ type: string
20703
+ description: Present only when `status` is `approved`. Send it back on opt-in.
20704
+
20705
+ AggregateUseConsentDto:
20706
+ type: object
20707
+ additionalProperties: false
20708
+ required:
20709
+ - aggregateUse
20710
+ - effective
20711
+ - noticeVersion
20712
+ - source
20713
+ - recordedAt
20714
+ - recordedBy
20715
+ - withdrawnAt
20716
+ - currentNotice
20717
+ - reportSentence
20718
+ properties:
20719
+ aggregateUse:
20720
+ type: string
20721
+ enum: [opt_in, opt_out, unset]
20722
+ description: Saved choice. `unset` means the workspace never chose and is treated as opted out.
20723
+ effective:
20724
+ type: boolean
20725
+ description: True only for `opt_in`. Benchmark and marketing extraction must check this.
20726
+ noticeVersion:
20727
+ type: string
20728
+ nullable: true
20729
+ description: Notice version accepted with the current opt-in; null otherwise.
20730
+ source:
20731
+ type: string
20732
+ nullable: true
20733
+ enum: [workspace_settings]
20734
+ recordedAt:
20735
+ type: string
20736
+ format: date-time
20737
+ nullable: true
20738
+ description: When the current choice was saved; null when `unset`.
20739
+ recordedBy:
20740
+ type: object
20741
+ nullable: true
20742
+ additionalProperties: false
20743
+ required: [userId, displayName]
20744
+ properties:
20745
+ userId:
20746
+ type: string
20747
+ format: uuid
20748
+ displayName:
20749
+ type: string
20750
+ nullable: true
20751
+ withdrawnAt:
20752
+ type: string
20753
+ format: date-time
20754
+ nullable: true
20755
+ description: Most recent opt-in withdrawal while the workspace remains opted out.
20756
+ currentNotice:
20757
+ $ref: "#/components/schemas/AggregateUseNoticeStatusDto"
20758
+ reportSentence:
20759
+ type: string
20760
+ nullable: true
20761
+ description: >
20762
+ Exact sentence the assessment PDF prints beside `recordedAt`. Opted-out and unset
20763
+ workspaces get the fixed refusal sentence. Opt-in returns the approved sentence for
20764
+ the accepted notice, or null if that notice is unknown, which blocks validation.
20765
+
20766
+ AggregateUseConsentPutDto:
20767
+ type: object
20768
+ additionalProperties: false
20769
+ required: [aggregateUse]
20770
+ properties:
20771
+ aggregateUse:
20772
+ type: string
20773
+ enum: [opt_in, opt_out]
20774
+ noticeVersion:
20775
+ type: string
20776
+ nullable: true
20777
+ minLength: 1
20778
+ description: Required for `opt_in` and must equal `currentNotice.version`. Ignored for `opt_out`.
20779
+
20606
20780
  AssessmentDictionaryDto:
20607
20781
  type: object
20608
20782
  additionalProperties: false
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thinkai/tai-api-contract",
3
- "version": "2.162.0",
3
+ "version": "2.163.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -2420,6 +2420,30 @@ export interface paths {
2420
2420
  patch?: never;
2421
2421
  trace?: never;
2422
2422
  };
2423
+ "/workspaces/{workspaceId}/aggregate-use-consent": {
2424
+ parameters: {
2425
+ query?: never;
2426
+ header?: never;
2427
+ path?: never;
2428
+ cookie?: never;
2429
+ };
2430
+ /**
2431
+ * Read anonymized aggregate-use permission
2432
+ * @description Returns whether ThinkAI may use this workspace's anonymized aggregate results in marketing and peer benchmarks. A workspace that never chose returns `unset`, which behaves as opted out (`effective: false`). The permission never covers company name, logo, quote, raw report, repository or person identity, or customer reference. Any workspace member may read it.
2433
+ */
2434
+ get: operations["getAggregateUseConsent"];
2435
+ /**
2436
+ * Set anonymized aggregate-use permission
2437
+ * @description Workspace admins opt in or out. Every change writes one `workspace.aggregate_use.changed` activity-log row in the same transaction. Moving from `opt_in` to `opt_out` records a withdrawal and stops future extraction. Opt-in requires the current legal-approved notice version; while no notice is approved, opt-in returns `409 aggregate_use_notice_unapproved`. Opt-out is always accepted. A refusal does not change price, delivery, support, or assessment output.
2438
+ */
2439
+ put: operations["putAggregateUseConsent"];
2440
+ post?: never;
2441
+ delete?: never;
2442
+ options?: never;
2443
+ head?: never;
2444
+ patch?: never;
2445
+ trace?: never;
2446
+ };
2423
2447
  "/workspaces/{workspaceId}/report-center/exports": {
2424
2448
  parameters: {
2425
2449
  query?: never;
@@ -8725,11 +8749,55 @@ export interface components {
8725
8749
  * @description Type of workspace lifecycle event.
8726
8750
  * @enum {string}
8727
8751
  */
8728
- ActivityLogEventTypeDto: "repo.added" | "repo.removed" | "repo.readded" | "integration.github.added" | "integration.github.updated" | "integration.github.removed" | "integration.github.permissions_changed" | "integration.github.repo_added" | "integration.github.repo_removed" | "fix.requested" | "fix.generating" | "fix.pr_created" | "fix.merged" | "fix.failed" | "readiness.scan_started" | "readiness.scan_completed" | "readiness.scan_failed" | "readiness.scan_partial" | "code_insights.design_run_started" | "integrations.agent_execution.provider_changed" | "integrations.repo_eligibility.overrides_changed" | "integrations.repo_eligibility.languages_refresh_requested" | "integrations.cursor.platform_key_enabled" | "integrations.cursor.platform_key_disabled" | "member.invited" | "member.invite_accepted" | "member.invite_rejected" | "member.role_changed" | "member.removed" | "hris.personio.sync_started" | "hris.personio.sync_completed" | "hris.personio.sync_failed" | "hris.zenhr.sync_started" | "hris.zenhr.sync_completed" | "hris.zenhr.sync_failed" | "hris.zelt.sync_started" | "hris.zelt.sync_completed" | "hris.zelt.sync_failed" | "hris.hibob.sync_started" | "hris.hibob.sync_completed" | "hris.hibob.sync_failed" | "hris.sync_started" | "hris.sync_completed" | "hris.sync_failed" | "repo.sync_skipped" | "integrations.cursor.execution_key.added" | "integrations.cursor.execution_key.updated" | "integrations.cursor.execution_key.removed" | "integrations.cursor.execution_key.check_failed" | "integrations.cursor.admin_key.added" | "integrations.cursor.admin_key.updated" | "integrations.cursor.admin_key.removed" | "integrations.claude.execution_key.added" | "integrations.claude.execution_key.updated" | "integrations.claude.execution_key.removed" | "integrations.claude.execution_key.check_failed" | "integrations.claude.admin_key.added" | "integrations.claude.admin_key.updated" | "integrations.claude.admin_key.removed" | "integrations.claude.analytics_key.added" | "integrations.claude.analytics_key.updated" | "integrations.claude.analytics_key.removed" | "integrations.code_intelligence.settings_changed" | "integrations.code_intelligence.execution_key.added" | "integrations.code_intelligence.execution_key.updated" | "integrations.code_intelligence.execution_key.removed" | "integrations.code_intelligence.execution_key.check_failed" | "readiness.scan_precheck_failed" | "productivity.ingest.completed" | "productivity.ingest.failed" | "productivity.ingest.skipped" | "productivity.ingest.repo_skipped" | "productivity.ingest.coverage_gap_detected" | "integrations.newrelic.added" | "integrations.newrelic.removed" | "integrations.newrelic.sync_completed" | "integrations.newrelic.sync_failed" | "integrations.prometheus.added" | "integrations.prometheus.removed" | "integrations.prometheus.sync_completed" | "integrations.prometheus.sync_failed" | "integrations.grafana.added" | "integrations.grafana.removed" | "integrations.grafana.sync_completed" | "integrations.grafana.sync_failed" | "integrations.zelt.added" | "integrations.zelt.removed" | "report.exported";
8752
+ ActivityLogEventTypeDto: "repo.added" | "repo.removed" | "repo.readded" | "integration.github.added" | "integration.github.updated" | "integration.github.removed" | "integration.github.permissions_changed" | "integration.github.repo_added" | "integration.github.repo_removed" | "fix.requested" | "fix.generating" | "fix.pr_created" | "fix.merged" | "fix.failed" | "readiness.scan_started" | "readiness.scan_completed" | "readiness.scan_failed" | "readiness.scan_partial" | "code_insights.design_run_started" | "integrations.agent_execution.provider_changed" | "integrations.repo_eligibility.overrides_changed" | "integrations.repo_eligibility.languages_refresh_requested" | "integrations.cursor.platform_key_enabled" | "integrations.cursor.platform_key_disabled" | "member.invited" | "member.invite_accepted" | "member.invite_rejected" | "member.role_changed" | "member.removed" | "hris.personio.sync_started" | "hris.personio.sync_completed" | "hris.personio.sync_failed" | "hris.zenhr.sync_started" | "hris.zenhr.sync_completed" | "hris.zenhr.sync_failed" | "hris.zelt.sync_started" | "hris.zelt.sync_completed" | "hris.zelt.sync_failed" | "hris.hibob.sync_started" | "hris.hibob.sync_completed" | "hris.hibob.sync_failed" | "hris.sync_started" | "hris.sync_completed" | "hris.sync_failed" | "repo.sync_skipped" | "integrations.cursor.execution_key.added" | "integrations.cursor.execution_key.updated" | "integrations.cursor.execution_key.removed" | "integrations.cursor.execution_key.check_failed" | "integrations.cursor.admin_key.added" | "integrations.cursor.admin_key.updated" | "integrations.cursor.admin_key.removed" | "integrations.claude.execution_key.added" | "integrations.claude.execution_key.updated" | "integrations.claude.execution_key.removed" | "integrations.claude.execution_key.check_failed" | "integrations.claude.admin_key.added" | "integrations.claude.admin_key.updated" | "integrations.claude.admin_key.removed" | "integrations.claude.analytics_key.added" | "integrations.claude.analytics_key.updated" | "integrations.claude.analytics_key.removed" | "integrations.code_intelligence.settings_changed" | "integrations.code_intelligence.execution_key.added" | "integrations.code_intelligence.execution_key.updated" | "integrations.code_intelligence.execution_key.removed" | "integrations.code_intelligence.execution_key.check_failed" | "readiness.scan_precheck_failed" | "productivity.ingest.completed" | "productivity.ingest.failed" | "productivity.ingest.skipped" | "productivity.ingest.repo_skipped" | "productivity.ingest.coverage_gap_detected" | "integrations.newrelic.added" | "integrations.newrelic.removed" | "integrations.newrelic.sync_completed" | "integrations.newrelic.sync_failed" | "integrations.prometheus.added" | "integrations.prometheus.removed" | "integrations.prometheus.sync_completed" | "integrations.prometheus.sync_failed" | "integrations.grafana.added" | "integrations.grafana.removed" | "integrations.grafana.sync_completed" | "integrations.grafana.sync_failed" | "integrations.zelt.added" | "integrations.zelt.removed" | "report.exported" | "workspace.aggregate_use.changed";
8729
8753
  UnsetAssessmentDecisionDto: {
8730
8754
  /** @enum {string} */
8731
8755
  status: "unset";
8732
8756
  };
8757
+ /** @description Current legal-approved opt-in notice, or `unset` while opt-in is unavailable. */
8758
+ AggregateUseNoticeStatusDto: {
8759
+ /** @enum {string} */
8760
+ status: "approved" | "unset";
8761
+ /** @description Present only when `status` is `approved`. Send it back on opt-in. */
8762
+ version?: string;
8763
+ };
8764
+ AggregateUseConsentDto: {
8765
+ /**
8766
+ * @description Saved choice. `unset` means the workspace never chose and is treated as opted out.
8767
+ * @enum {string}
8768
+ */
8769
+ aggregateUse: "opt_in" | "opt_out" | "unset";
8770
+ /** @description True only for `opt_in`. Benchmark and marketing extraction must check this. */
8771
+ effective: boolean;
8772
+ /** @description Notice version accepted with the current opt-in; null otherwise. */
8773
+ noticeVersion: string | null;
8774
+ /** @enum {string|null} */
8775
+ source: "workspace_settings" | null;
8776
+ /**
8777
+ * Format: date-time
8778
+ * @description When the current choice was saved; null when `unset`.
8779
+ */
8780
+ recordedAt: string | null;
8781
+ recordedBy: {
8782
+ /** Format: uuid */
8783
+ userId: string;
8784
+ displayName: string | null;
8785
+ } | null;
8786
+ /**
8787
+ * Format: date-time
8788
+ * @description Most recent opt-in withdrawal while the workspace remains opted out.
8789
+ */
8790
+ withdrawnAt: string | null;
8791
+ currentNotice: components["schemas"]["AggregateUseNoticeStatusDto"];
8792
+ /** @description Exact sentence the assessment PDF prints beside `recordedAt`. Opted-out and unset workspaces get the fixed refusal sentence. Opt-in returns the approved sentence for the accepted notice, or null if that notice is unknown, which blocks validation. */
8793
+ reportSentence: string | null;
8794
+ };
8795
+ AggregateUseConsentPutDto: {
8796
+ /** @enum {string} */
8797
+ aggregateUse: "opt_in" | "opt_out";
8798
+ /** @description Required for `opt_in` and must equal `currentNotice.version`. Ignored for `opt_out`. */
8799
+ noticeVersion?: string | null;
8800
+ };
8733
8801
  AssessmentDictionaryDto: {
8734
8802
  /** @enum {string} */
8735
8803
  version: "2026-10-18.1";
@@ -11324,6 +11392,9 @@ export type PutAgenticFoundationRepoScopeFailureDto = components['schemas']['Put
11324
11392
  export type PutAgenticFoundationRepoScopeResponseDto = components['schemas']['PutAgenticFoundationRepoScopeResponseDto'];
11325
11393
  export type ActivityLogEventTypeDto = components['schemas']['ActivityLogEventTypeDto'];
11326
11394
  export type UnsetAssessmentDecisionDto = components['schemas']['UnsetAssessmentDecisionDto'];
11395
+ export type AggregateUseNoticeStatusDto = components['schemas']['AggregateUseNoticeStatusDto'];
11396
+ export type AggregateUseConsentDto = components['schemas']['AggregateUseConsentDto'];
11397
+ export type AggregateUseConsentPutDto = components['schemas']['AggregateUseConsentPutDto'];
11327
11398
  export type AssessmentDictionaryDto = components['schemas']['AssessmentDictionaryDto'];
11328
11399
  export type ReportCenterExportRecordBodyDto = components['schemas']['ReportCenterExportRecordBodyDto'];
11329
11400
  export type ReportCenterExportRecordResponseDto = components['schemas']['ReportCenterExportRecordResponseDto'];
@@ -17984,6 +18055,102 @@ export interface operations {
17984
18055
  };
17985
18056
  };
17986
18057
  };
18058
+ getAggregateUseConsent: {
18059
+ parameters: {
18060
+ query?: never;
18061
+ header?: never;
18062
+ path: {
18063
+ workspaceId: components["parameters"]["WorkspaceId"];
18064
+ };
18065
+ cookie?: never;
18066
+ };
18067
+ requestBody?: never;
18068
+ responses: {
18069
+ /** @description Current permission and the sentence reports must print */
18070
+ 200: {
18071
+ headers: {
18072
+ [name: string]: unknown;
18073
+ };
18074
+ content: {
18075
+ "application/json": components["schemas"]["AggregateUseConsentDto"];
18076
+ };
18077
+ };
18078
+ 401: components["responses"]["Unauthorized"];
18079
+ 403: components["responses"]["Forbidden"];
18080
+ /** @description Workspace does not exist */
18081
+ 404: {
18082
+ headers: {
18083
+ [name: string]: unknown;
18084
+ };
18085
+ content: {
18086
+ "application/json": components["schemas"]["ErrorMessageDto"];
18087
+ };
18088
+ };
18089
+ };
18090
+ };
18091
+ putAggregateUseConsent: {
18092
+ parameters: {
18093
+ query?: never;
18094
+ header?: never;
18095
+ path: {
18096
+ workspaceId: components["parameters"]["WorkspaceId"];
18097
+ };
18098
+ cookie?: never;
18099
+ };
18100
+ requestBody: {
18101
+ content: {
18102
+ "application/json": components["schemas"]["AggregateUseConsentPutDto"];
18103
+ };
18104
+ };
18105
+ responses: {
18106
+ /** @description Saved permission */
18107
+ 200: {
18108
+ headers: {
18109
+ [name: string]: unknown;
18110
+ };
18111
+ content: {
18112
+ "application/json": components["schemas"]["AggregateUseConsentDto"];
18113
+ };
18114
+ };
18115
+ /** @description Invalid body (`code`: `invalid_input`) */
18116
+ 400: {
18117
+ headers: {
18118
+ [name: string]: unknown;
18119
+ };
18120
+ content: {
18121
+ "application/json": components["schemas"]["ErrorMessageDto"];
18122
+ };
18123
+ };
18124
+ 401: components["responses"]["Unauthorized"];
18125
+ /** @description Caller is not a workspace admin (`code`: `workspace_admin_required`) */
18126
+ 403: {
18127
+ headers: {
18128
+ [name: string]: unknown;
18129
+ };
18130
+ content: {
18131
+ "application/json": components["schemas"]["ErrorMessageDto"];
18132
+ };
18133
+ };
18134
+ /** @description Workspace does not exist */
18135
+ 404: {
18136
+ headers: {
18137
+ [name: string]: unknown;
18138
+ };
18139
+ content: {
18140
+ "application/json": components["schemas"]["ErrorMessageDto"];
18141
+ };
18142
+ };
18143
+ /** @description Opt-in refused because no notice is approved (`aggregate_use_notice_unapproved`) or the submitted notice version is not current (`aggregate_use_notice_stale`). */
18144
+ 409: {
18145
+ headers: {
18146
+ [name: string]: unknown;
18147
+ };
18148
+ content: {
18149
+ "application/json": components["schemas"]["ErrorMessageDto"];
18150
+ };
18151
+ };
18152
+ };
18153
+ };
17987
18154
  recordReportCenterExport: {
17988
18155
  parameters: {
17989
18156
  query?: never;
@@ -18050,7 +18217,7 @@ export interface operations {
18050
18217
  order?: components["parameters"]["PaginationOrder"];
18051
18218
  /** @description Server-side sort column (the activity "5 W's"). Combined with `order` (asc/desc). Defaults to `when` (occurredAt). `occurredAt`/`id` is always the tiebreaker. */
18052
18219
  sort?: "when" | "who" | "what" | "why" | "where";
18053
- /** @description Coarse product-area grouping filter (#156). `integration` = GitHub + AI-tool key events; `agentic_foundation` = repos, readiness scans, fixes; `workspace_team` = members + HRIS + report exports; `productivity` = productivity ingest lifecycle events. Omit (or pass `all`) for every area. */
18220
+ /** @description Coarse product-area grouping filter (#156). `integration` = GitHub + AI-tool key events; `agentic_foundation` = repos, readiness scans, fixes; `workspace_team` = members + HRIS + report exports + workspace settings; `productivity` = productivity ingest lifecycle events. Omit (or pass `all`) for every area. */
18054
18221
  productArea?: "integration" | "agentic_foundation" | "workspace_team" | "productivity" | "all";
18055
18222
  /** @description Filter to a specific event type. */
18056
18223
  eventType?: components["schemas"]["ActivityLogEventTypeDto"];