@burdenoff/microfe-technospam 2026.1031.2 → 2026.1031.3

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.
@@ -209,7 +209,10 @@ export type AcceptMtwReuseReservationInput = {
209
209
  idempotencyKey: Scalars['String']['input'];
210
210
  proposalId: Scalars['ID']['input'];
211
211
  };
212
- /** The ids a resource shared with people, groups or projects can be granted to, for one person in one workspace. */
212
+ /**
213
+ * The ids a resource shared with people, groups or projects can be granted to, for one person in one
214
+ * workspace.
215
+ */
213
216
  export type AccessPrincipals = {
214
217
  __typename?: 'AccessPrincipals';
215
218
  actorId: Scalars['String']['output'];
@@ -225,7 +228,10 @@ export type AccessPrincipalsInput = {
225
228
  /** Opaque actor ID of the person, never the calling service */
226
229
  actorId: Scalars['String']['input'];
227
230
  actorType: ActorType;
228
- /** Resource type the calling service shares (e.g. "integration-connection", "workflow"); decides administersResourceType */
231
+ /**
232
+ * Resource type the calling service shares (e.g. "integration-connection", "workflow"); decides
233
+ * administersResourceType
234
+ */
229
235
  resourceType: Scalars['String']['input'];
230
236
  };
231
237
  export type AccessShareInput = {
@@ -9790,6 +9796,8 @@ export type BuiApplyCourseOutlineInput = {
9790
9796
  };
9791
9797
  export type BuiAssessment = {
9792
9798
  __typename?: 'BuiAssessment';
9799
+ /** BOFF-9690: opt-in in-browser AI monitoring (camera face presence, multiple faces, looking away, sustained speech) on top of the human-reviewed proctoring gate. Only ever true when `requiresProctoring` is true. */
9800
+ aiProctoringEnabled: Scalars['Boolean']['output'];
9793
9801
  courseId: Scalars['ID']['output'];
9794
9802
  createdAt: Scalars['DateTime']['output'];
9795
9803
  description?: Maybe<Scalars['String']['output']>;
@@ -9962,6 +9970,10 @@ export type BuiCertificate = {
9962
9970
  recipientNameSnapshot?: Maybe<Scalars['String']['output']>;
9963
9971
  revokedAt?: Maybe<Scalars['DateTime']['output']>;
9964
9972
  serial: Scalars['String']['output'];
9973
+ /** BOFF-3134: the product this certificate was mirrored from. Null for certificates issued natively in Buildmyiq. */
9974
+ source?: Maybe<BuiExternalSource>;
9975
+ /** BOFF-3134: the source product's own id for this certificate (opaque). */
9976
+ sourceId?: Maybe<Scalars['ID']['output']>;
9965
9977
  status: BuiCertificateStatus;
9966
9978
  updatedAt: Scalars['DateTime']['output'];
9967
9979
  /** BOFF-4431: opaque code for the PUBLIC, unauthenticated verification page (`/verify/buildmyiq/{verificationCode}`) — share this, not the internal id. Null for certificates issued before this field existed. */
@@ -10092,6 +10104,10 @@ export type BuiCourse = {
10092
10104
  skill?: Maybe<BuiSkill>;
10093
10105
  skillId?: Maybe<Scalars['ID']['output']>;
10094
10106
  slug: Scalars['String']['output'];
10107
+ /** BOFF-3134: the product this course was mirrored from. Null for courses authored natively in Buildmyiq. */
10108
+ source?: Maybe<BuiExternalSource>;
10109
+ /** BOFF-3134: the source product's own id for this course (opaque). */
10110
+ sourceId?: Maybe<Scalars['ID']['output']>;
10095
10111
  status: BuiCourseStatus;
10096
10112
  summary?: Maybe<Scalars['String']['output']>;
10097
10113
  tags: Array<Scalars['String']['output']>;
@@ -10340,6 +10356,8 @@ export declare enum BuiCourseStatus {
10340
10356
  Published = "PUBLISHED"
10341
10357
  }
10342
10358
  export type BuiCreateAssessmentInput = {
10359
+ /** BOFF-9690: opt into in-browser AI monitoring; requires `requiresProctoring`. */
10360
+ aiProctoringEnabled?: InputMaybe<Scalars['Boolean']['input']>;
10343
10361
  courseId: Scalars['ID']['input'];
10344
10362
  description?: InputMaybe<Scalars['String']['input']>;
10345
10363
  isGraded?: InputMaybe<Scalars['Boolean']['input']>;
@@ -10421,6 +10439,19 @@ export type BuiCriterionScore = {
10421
10439
  /** Criterion title copied from the rubric row at suggestion time. */
10422
10440
  title: Scalars['String']['output'];
10423
10441
  };
10442
+ export type BuiDemoContentResult = {
10443
+ __typename?: 'BuiDemoContentResult';
10444
+ assessmentId?: Maybe<Scalars['ID']['output']>;
10445
+ cohortId?: Maybe<Scalars['ID']['output']>;
10446
+ courseId: Scalars['ID']['output'];
10447
+ /** False when the demo content was already loaded and the existing content is returned. */
10448
+ created: Scalars['Boolean']['output'];
10449
+ enrollmentId?: Maybe<Scalars['ID']['output']>;
10450
+ lessonCount: Scalars['Int']['output'];
10451
+ moduleCount: Scalars['Int']['output'];
10452
+ questionCount: Scalars['Int']['output'];
10453
+ skillId?: Maybe<Scalars['ID']['output']>;
10454
+ };
10424
10455
  export type BuiEnrollInput = {
10425
10456
  cohortId?: InputMaybe<Scalars['ID']['input']>;
10426
10457
  courseId: Scalars['ID']['input'];
@@ -10449,6 +10480,10 @@ export type BuiEnrollment = {
10449
10480
  /** Last time the overdue-reminder automation reminded the learner. */
10450
10481
  overdueRemindedAt?: Maybe<Scalars['DateTime']['output']>;
10451
10482
  progressPct: Scalars['Int']['output'];
10483
+ /** BOFF-3134: the product this enrollment was mirrored from. Null for native Buildmyiq enrollments. */
10484
+ source?: Maybe<BuiExternalSource>;
10485
+ /** BOFF-3134: the source product's own id for this enrollment (opaque). */
10486
+ sourceId?: Maybe<Scalars['ID']['output']>;
10452
10487
  startedAt?: Maybe<Scalars['DateTime']['output']>;
10453
10488
  status: BuiEnrollmentStatus;
10454
10489
  updatedAt: Scalars['DateTime']['output'];
@@ -10469,6 +10504,10 @@ export declare enum BuiEnrollmentStatus {
10469
10504
  Expired = "EXPIRED",
10470
10505
  InProgress = "IN_PROGRESS"
10471
10506
  }
10507
+ /** BOFF-3134: a product that mirrors its learning records into the canonical Buildmyiq LMS. Buildmyiq is the system of record for courses, enrollments and certificates; a product that still authors them locally syncs each record here through the service-only buiSyncExternal* mutations, keyed by its own id. */
10508
+ export declare enum BuiExternalSource {
10509
+ Technospam = "TECHNOSPAM"
10510
+ }
10472
10511
  export type BuiGradeSubmissionInput = {
10473
10512
  feedback?: InputMaybe<Scalars['String']['input']>;
10474
10513
  passed?: InputMaybe<Scalars['Boolean']['input']>;
@@ -10685,6 +10724,33 @@ export type BuiNextLessonSuggestion = {
10685
10724
  pacingHint: BuiPacingHint;
10686
10725
  rationale: Scalars['String']['output'];
10687
10726
  };
10727
+ export type BuiOnboardingStatus = {
10728
+ __typename?: 'BuiOnboardingStatus';
10729
+ completedCount: Scalars['Int']['output'];
10730
+ demoContentLoaded: Scalars['Boolean']['output'];
10731
+ demoCourseId?: Maybe<Scalars['ID']['output']>;
10732
+ /** The caller's enrollment in the demo course, used to continue the demo as a learner. */
10733
+ demoEnrollmentId?: Maybe<Scalars['ID']['output']>;
10734
+ isComplete: Scalars['Boolean']['output'];
10735
+ steps: Array<BuiOnboardingStep>;
10736
+ totalCount: Scalars['Int']['output'];
10737
+ };
10738
+ export type BuiOnboardingStep = {
10739
+ __typename?: 'BuiOnboardingStep';
10740
+ /** When the workspace first reached this step, if it was reached after activation tracking started. */
10741
+ achievedAt?: Maybe<Scalars['DateTime']['output']>;
10742
+ completed: Scalars['Boolean']['output'];
10743
+ /** How many of the workspace's own courses / enrollments / certificates satisfy the step. */
10744
+ count: Scalars['Int']['output'];
10745
+ key: BuiOnboardingStepKey;
10746
+ };
10747
+ /** A step of the four-step getting-started checklist, in checklist order. */
10748
+ export declare enum BuiOnboardingStepKey {
10749
+ CreateCourse = "CREATE_COURSE",
10750
+ EnrollLearner = "ENROLL_LEARNER",
10751
+ IssueCertificate = "ISSUE_CERTIFICATE",
10752
+ PublishCourse = "PUBLISH_COURSE"
10753
+ }
10688
10754
  export declare enum BuiPacingHint {
10689
10755
  Accelerate = "ACCELERATE",
10690
10756
  SlowDown = "SLOW_DOWN",
@@ -10699,8 +10765,22 @@ export declare enum BuiProctoringDecision {
10699
10765
  Approved = "APPROVED",
10700
10766
  Rejected = "REJECTED"
10701
10767
  }
10768
+ /** BOFF-9691: a reviewer's view of a learner's identity photo/ID. The file stays PRIVATE to the learner in the platform file store; this carries only what a reviewer needs to look at it once. */
10769
+ export type BuiProctoringIdentityFile = {
10770
+ __typename?: 'BuiProctoringIdentityFile';
10771
+ /** Short-lived presigned URL (about five minutes). */
10772
+ downloadUrl: Scalars['String']['output'];
10773
+ expiresAt: Scalars['DateTime']['output'];
10774
+ fileId: Scalars['ID']['output'];
10775
+ mimeType: Scalars['String']['output'];
10776
+ name: Scalars['String']['output'];
10777
+ /** Size in bytes, as a string (BigInt-safe). */
10778
+ size?: Maybe<Scalars['String']['output']>;
10779
+ };
10702
10780
  export type BuiProctoringSession = {
10703
10781
  __typename?: 'BuiProctoringSession';
10782
+ /** BOFF-9690: when the learner consented to in-browser AI monitoring. Null when the assessment does not use AI monitoring. */
10783
+ aiMonitoringConsentAt?: Maybe<Scalars['DateTime']['output']>;
10704
10784
  assessmentId: Scalars['ID']['output'];
10705
10785
  createdAt: Scalars['DateTime']['output'];
10706
10786
  expiresAt: Scalars['DateTime']['output'];
@@ -10712,6 +10792,10 @@ export type BuiProctoringSession = {
10712
10792
  reviewNotes?: Maybe<Scalars['String']['output']>;
10713
10793
  reviewedAt?: Maybe<Scalars['DateTime']['output']>;
10714
10794
  reviewedById?: Maybe<Scalars['ID']['output']>;
10795
+ /** Number of proctoring signals recorded on this session (lockdown + AI), including any already deleted by the retention period. */
10796
+ signalCount: Scalars['Int']['output'];
10797
+ /** Per-type counts of this session's signals still inside the retention period. */
10798
+ signalSummary: Array<BuiProctoringSignalSummary>;
10715
10799
  status: BuiProctoringStatus;
10716
10800
  updatedAt: Scalars['DateTime']['output'];
10717
10801
  violationCount: Scalars['Int']['output'];
@@ -10722,6 +10806,56 @@ export type BuiProctoringSessionConnection = {
10722
10806
  items: Array<BuiProctoringSession>;
10723
10807
  pageInfo: BuiPageInfo;
10724
10808
  };
10809
+ /** BOFF-9690: one signal episode on a proctoring session. Only the kind, timing and a few numbers are stored — never images, audio or face templates — and rows are deleted after the published retention period (60 days). */
10810
+ export type BuiProctoringSignal = {
10811
+ __typename?: 'BuiProctoringSignal';
10812
+ /** Detector confidence 0..1 (AI signals only). */
10813
+ confidence?: Maybe<Scalars['Float']['output']>;
10814
+ createdAt: Scalars['DateTime']['output'];
10815
+ durationMs: Scalars['Int']['output'];
10816
+ /** Highest number of faces seen during the episode (face signals only). */
10817
+ faceCount?: Maybe<Scalars['Int']['output']>;
10818
+ id: Scalars['ID']['output'];
10819
+ /** Peak speech-band level in dBFS (audio signals only). */
10820
+ peakLevelDb?: Maybe<Scalars['Float']['output']>;
10821
+ sessionId: Scalars['ID']['output'];
10822
+ startedAt: Scalars['DateTime']['output'];
10823
+ type: BuiProctoringSignalType;
10824
+ workspaceId: Scalars['ID']['output'];
10825
+ };
10826
+ export type BuiProctoringSignalConnection = {
10827
+ __typename?: 'BuiProctoringSignalConnection';
10828
+ items: Array<BuiProctoringSignal>;
10829
+ pageInfo: BuiPageInfo;
10830
+ };
10831
+ /** BOFF-9690: one signal episode reported by the learner's browser. */
10832
+ export type BuiProctoringSignalInput = {
10833
+ confidence?: InputMaybe<Scalars['Float']['input']>;
10834
+ durationMs?: InputMaybe<Scalars['Int']['input']>;
10835
+ faceCount?: InputMaybe<Scalars['Int']['input']>;
10836
+ peakLevelDb?: InputMaybe<Scalars['Float']['input']>;
10837
+ startedAt: Scalars['DateTime']['input'];
10838
+ type: BuiProctoringSignalType;
10839
+ };
10840
+ export type BuiProctoringSignalSummary = {
10841
+ __typename?: 'BuiProctoringSignalSummary';
10842
+ count: Scalars['Int']['output'];
10843
+ totalDurationMs: Scalars['Int']['output'];
10844
+ type: BuiProctoringSignalType;
10845
+ };
10846
+ /** BOFF-9690: a proctoring signal episode observed by the learner's browser. Lockdown signals: TAB_HIDDEN, WINDOW_BLUR, FULLSCREEN_EXIT, CLIPBOARD. AI signals (opt-in per assessment, analysed on the learner's device only): FACE_ABSENT, MULTIPLE_FACES, GAZE_AWAY (head turned away from the screen), VOICE_DETECTED (sustained speech-band audio), CAMERA_UNAVAILABLE, MICROPHONE_UNAVAILABLE. */
10847
+ export declare enum BuiProctoringSignalType {
10848
+ CameraUnavailable = "CAMERA_UNAVAILABLE",
10849
+ Clipboard = "CLIPBOARD",
10850
+ FaceAbsent = "FACE_ABSENT",
10851
+ FullscreenExit = "FULLSCREEN_EXIT",
10852
+ GazeAway = "GAZE_AWAY",
10853
+ MicrophoneUnavailable = "MICROPHONE_UNAVAILABLE",
10854
+ MultipleFaces = "MULTIPLE_FACES",
10855
+ TabHidden = "TAB_HIDDEN",
10856
+ VoiceDetected = "VOICE_DETECTED",
10857
+ WindowBlur = "WINDOW_BLUR"
10858
+ }
10725
10859
  export declare enum BuiProctoringStatus {
10726
10860
  Approved = "APPROVED",
10727
10861
  Expired = "EXPIRED",
@@ -10920,6 +11054,8 @@ export type BuiSubmitAssessmentInput = {
10920
11054
  enrollmentId?: InputMaybe<Scalars['ID']['input']>;
10921
11055
  };
10922
11056
  export type BuiSubmitProctoringIdentityInput = {
11057
+ /** BOFF-9690: explicit consent to in-browser AI monitoring. Required (true) when the assessment has `aiProctoringEnabled`; ignored otherwise. */
11058
+ aiMonitoringConsent?: InputMaybe<Scalars['Boolean']['input']>;
10923
11059
  identityFileId?: InputMaybe<Scalars['ID']['input']>;
10924
11060
  lockdownAcknowledged: Scalars['Boolean']['input'];
10925
11061
  };
@@ -10937,6 +11073,58 @@ export type BuiSuggestAssessmentDraftInput = {
10937
11073
  /** Allowed question types; default SINGLE_CHOICE and SHORT_ANSWER. */
10938
11074
  questionTypes?: InputMaybe<Array<BuiQuestionType>>;
10939
11075
  };
11076
+ export type BuiSyncExternalCertificateInput = {
11077
+ /** The source product's id of the certificate's course (synced first). */
11078
+ courseSourceId: Scalars['ID']['input'];
11079
+ deletedAt?: InputMaybe<Scalars['DateTime']['input']>;
11080
+ finalScore?: InputMaybe<Scalars['Float']['input']>;
11081
+ issuedAt: Scalars['DateTime']['input'];
11082
+ learnerId: Scalars['ID']['input'];
11083
+ onBehalfOf: Scalars['ID']['input'];
11084
+ revokedAt?: InputMaybe<Scalars['DateTime']['input']>;
11085
+ /** The source's serial. Kept verbatim so a shared credential still matches. */
11086
+ serial: Scalars['String']['input'];
11087
+ source: BuiExternalSource;
11088
+ /** The source product's own certificate id. */
11089
+ sourceId: Scalars['ID']['input'];
11090
+ status: BuiCertificateStatus;
11091
+ };
11092
+ export type BuiSyncExternalCourseInput = {
11093
+ coverFileId?: InputMaybe<Scalars['ID']['input']>;
11094
+ /** Set when the source soft-deleted (archived) the course. */
11095
+ deletedAt?: InputMaybe<Scalars['DateTime']['input']>;
11096
+ /** Source estimate in minutes; stored rounded up to whole hours. */
11097
+ estimatedMinutes?: InputMaybe<Scalars['Int']['input']>;
11098
+ instructorId?: InputMaybe<Scalars['ID']['input']>;
11099
+ level: BuiCourseLevel;
11100
+ /** The end user the source product acted for; recorded as onBehalfOf. */
11101
+ onBehalfOf: Scalars['ID']['input'];
11102
+ publishedAt?: InputMaybe<Scalars['DateTime']['input']>;
11103
+ /** Preferred slug. Suffixed with a fragment of sourceId if the workspace already uses it. */
11104
+ slug: Scalars['String']['input'];
11105
+ source: BuiExternalSource;
11106
+ /** The source product's own course id. */
11107
+ sourceId: Scalars['ID']['input'];
11108
+ status: BuiCourseStatus;
11109
+ summary?: InputMaybe<Scalars['String']['input']>;
11110
+ tags?: InputMaybe<Array<Scalars['String']['input']>>;
11111
+ title: Scalars['String']['input'];
11112
+ };
11113
+ export type BuiSyncExternalEnrollmentInput = {
11114
+ completedAt?: InputMaybe<Scalars['DateTime']['input']>;
11115
+ /** The source product's id of the enrollment's course (synced first). */
11116
+ courseSourceId: Scalars['ID']['input'];
11117
+ deletedAt?: InputMaybe<Scalars['DateTime']['input']>;
11118
+ lastActiveAt?: InputMaybe<Scalars['DateTime']['input']>;
11119
+ learnerId: Scalars['ID']['input'];
11120
+ onBehalfOf: Scalars['ID']['input'];
11121
+ progressPct: Scalars['Int']['input'];
11122
+ source: BuiExternalSource;
11123
+ /** The source product's own enrollment id. */
11124
+ sourceId: Scalars['ID']['input'];
11125
+ startedAt?: InputMaybe<Scalars['DateTime']['input']>;
11126
+ status: BuiEnrollmentStatus;
11127
+ };
10940
11128
  export declare enum BuiTutorAdaptiveLevel {
10941
11129
  Advanced = "ADVANCED",
10942
11130
  OnTrack = "ON_TRACK",
@@ -12816,6 +13004,16 @@ export type ColUntagStoryInput = {
12816
13004
  entityId: Scalars['ID']['input'];
12817
13005
  tagId: Scalars['ID']['input'];
12818
13006
  };
13007
+ /** Partial edit of a timeline event (BOFF-3972). Omitted fields are left unchanged; an explicit null clears personId, description or place. */
13008
+ export type ColUpdateEventInput = {
13009
+ date?: InputMaybe<Scalars['DateTime']['input']>;
13010
+ description?: InputMaybe<Scalars['String']['input']>;
13011
+ isApproximate?: InputMaybe<Scalars['Boolean']['input']>;
13012
+ personId?: InputMaybe<Scalars['ID']['input']>;
13013
+ place?: InputMaybe<Scalars['String']['input']>;
13014
+ title?: InputMaybe<Scalars['String']['input']>;
13015
+ type?: InputMaybe<ColEventType>;
13016
+ };
12819
13017
  export type ColUpdateFamilyTreeInput = {
12820
13018
  coverFileId?: InputMaybe<Scalars['ID']['input']>;
12821
13019
  description?: InputMaybe<Scalars['String']['input']>;
@@ -12823,6 +13021,11 @@ export type ColUpdateFamilyTreeInput = {
12823
13021
  surname?: InputMaybe<Scalars['String']['input']>;
12824
13022
  tags?: InputMaybe<Array<Scalars['String']['input']>>;
12825
13023
  };
13024
+ /** Change a family-circle member's tree role and/or linked Person (BOFF-3972). Omitted fields are left unchanged; an explicit null personId unlinks the member from their Person record. */
13025
+ export type ColUpdateMembershipInput = {
13026
+ personId?: InputMaybe<Scalars['ID']['input']>;
13027
+ role?: InputMaybe<ColMemberRole>;
13028
+ };
12826
13029
  export type ColUpdateMemoryInput = {
12827
13030
  description?: InputMaybe<Scalars['String']['input']>;
12828
13031
  fileId?: InputMaybe<Scalars['ID']['input']>;
@@ -12849,6 +13052,25 @@ export type ColUpdatePersonInput = {
12849
13052
  photoFileId?: InputMaybe<Scalars['ID']['input']>;
12850
13053
  tags?: InputMaybe<Array<Scalars['String']['input']>>;
12851
13054
  };
13055
+ /** Partial edit of a relationship (BOFF-3972). The two endpoints are immutable — re-pointing an edge at different people is a new relationship (delete + create). Omitted fields are left unchanged; an explicit null clears startDate, endDate or notes. */
13056
+ export type ColUpdateRelationshipInput = {
13057
+ certainty?: InputMaybe<ColCertainty>;
13058
+ endDate?: InputMaybe<Scalars['DateTime']['input']>;
13059
+ notes?: InputMaybe<Scalars['String']['input']>;
13060
+ startDate?: InputMaybe<Scalars['DateTime']['input']>;
13061
+ type?: InputMaybe<ColRelationshipType>;
13062
+ };
13063
+ /** Partial edit of a story (BOFF-3972). Omitted fields are left unchanged; an explicit null clears personId, body, recordingFileId or narrator. Re-linking `personId` to a LIVING relative without an explicit `visibility` tightens the stored visibility (never loosens it). */
13064
+ export type ColUpdateStoryInput = {
13065
+ body?: InputMaybe<Scalars['String']['input']>;
13066
+ format?: InputMaybe<ColStoryFormat>;
13067
+ narrator?: InputMaybe<Scalars['String']['input']>;
13068
+ personId?: InputMaybe<Scalars['ID']['input']>;
13069
+ recordingFileId?: InputMaybe<Scalars['ID']['input']>;
13070
+ tags?: InputMaybe<Array<Scalars['String']['input']>>;
13071
+ title?: InputMaybe<Scalars['String']['input']>;
13072
+ visibility?: InputMaybe<ColVisibility>;
13073
+ };
12852
13074
  export declare enum ColVisibility {
12853
13075
  Private = "PRIVATE",
12854
13076
  Stewards = "STEWARDS",
@@ -13436,6 +13658,8 @@ export type ComLiveStreamConnection = {
13436
13658
  };
13437
13659
  export type ComLiveStreamRecording = {
13438
13660
  __typename?: 'ComLiveStreamRecording';
13661
+ /** BROWSER when the host's browser records and uploads, SERVER when the media server records the stage. A SERVER recording is UPLOADING while the service saves the media server's file. */
13662
+ captureMode: ComLiveStreamRecordingCaptureMode;
13439
13663
  circleId: Scalars['ID']['output'];
13440
13664
  createdAt: Scalars['DateTime']['output'];
13441
13665
  durationSeconds?: Maybe<Scalars['Int']['output']>;
@@ -13460,6 +13684,13 @@ export type ComLiveStreamRecording = {
13460
13684
  updatedAt: Scalars['DateTime']['output'];
13461
13685
  workspaceId: Scalars['ID']['output'];
13462
13686
  };
13687
+ /** Who captures a recording's media. */
13688
+ export declare enum ComLiveStreamRecordingCaptureMode {
13689
+ /** The host's browser records and uploads the media. */
13690
+ Browser = "BROWSER",
13691
+ /** The media server records the stage (SFU stages only); no browser upload. */
13692
+ Server = "SERVER"
13693
+ }
13463
13694
  export type ComLiveStreamRecordingConnection = {
13464
13695
  __typename?: 'ComLiveStreamRecordingConnection';
13465
13696
  items: Array<ComLiveStreamRecording>;
@@ -13482,6 +13713,8 @@ export type ComLiveStreamRecordingSettings = {
13482
13713
  minutesLimit?: Maybe<Scalars['Int']['output']>;
13483
13714
  minutesUsedThisMonth: Scalars['Int']['output'];
13484
13715
  retentionDays: Scalars['Int']['output'];
13716
+ /** True when stages in SFU mode are recorded by the media server in this environment (they otherwise fall back to the host's browser). */
13717
+ serverRecordingAvailable: Scalars['Boolean']['output'];
13485
13718
  };
13486
13719
  export declare enum ComLiveStreamRecordingStatus {
13487
13720
  Deleted = "DELETED",
@@ -14526,6 +14759,25 @@ export type ConnectHealthyBowlAccountingIntegrationInput = {
14526
14759
  /** TALLY | ZOHO_BOOKS | QUICKBOOKS */
14527
14760
  provider: Scalars['String']['input'];
14528
14761
  };
14762
+ /** How the caller reaches a connection. */
14763
+ export declare enum ConnectionAccess {
14764
+ /** A workspace administrator who can see and manage the connection but not use it */
14765
+ Administrator = "ADMINISTRATOR",
14766
+ /** Shared with the caller (directly, or through a group or project) as an editor */
14767
+ Editor = "EDITOR",
14768
+ Owner = "OWNER",
14769
+ /** Shared with the caller (directly, or through a group or project) for use */
14770
+ Use = "USE",
14771
+ /** Not shared with the caller, but visible to everyone in the workspace */
14772
+ Workspace = "WORKSPACE"
14773
+ }
14774
+ /** Narrows getConnections to how the caller reaches a connection. */
14775
+ export declare enum ConnectionAccessFilter {
14776
+ /** Connections the caller owns */
14777
+ OwnedByMe = "OWNED_BY_ME",
14778
+ /** Connections someone else owns and shared with the caller, directly or through a group or project */
14779
+ SharedWithMe = "SHARED_WITH_ME"
14780
+ }
14529
14781
  export declare enum ConnectionCredentialSource {
14530
14782
  LegacyLocal = "LEGACY_LOCAL",
14531
14783
  VaultManaged = "VAULT_MANAGED",
@@ -14541,6 +14793,8 @@ export declare enum ConnectionExpiryReason {
14541
14793
  TokenExpiring = "TOKEN_EXPIRING"
14542
14794
  }
14543
14795
  export type ConnectionFilterInput = {
14796
+ /** Only connections the caller owns, or only those shared with them */
14797
+ access?: InputMaybe<ConnectionAccessFilter>;
14544
14798
  context?: InputMaybe<ContextFilterInput>;
14545
14799
  providerCategory?: InputMaybe<ProviderCategory>;
14546
14800
  providerId?: InputMaybe<Scalars['ID']['input']>;
@@ -14559,6 +14813,36 @@ export declare enum ConnectionQuality {
14559
14813
  Good = "GOOD",
14560
14814
  Poor = "POOR"
14561
14815
  }
14816
+ /** One grant of a connection to a person, a group or a project. */
14817
+ export type ConnectionShare = {
14818
+ __typename?: 'ConnectionShare';
14819
+ createdAt: Scalars['DateTime']['output'];
14820
+ createdBy: Scalars['String']['output'];
14821
+ /** User, group or project id */
14822
+ principalId: Scalars['String']['output'];
14823
+ principalType: ConnectionSharePrincipalType;
14824
+ role: ConnectionShareRole;
14825
+ };
14826
+ /** One grant in shareConnection. */
14827
+ export type ConnectionShareInput = {
14828
+ /** User, group or project id in the caller's workspace */
14829
+ principalId: Scalars['String']['input'];
14830
+ principalType: ConnectionSharePrincipalType;
14831
+ role?: InputMaybe<ConnectionShareRole>;
14832
+ };
14833
+ /** What a connection share is granted to. */
14834
+ export declare enum ConnectionSharePrincipalType {
14835
+ Group = "GROUP",
14836
+ Project = "PROJECT",
14837
+ User = "USER"
14838
+ }
14839
+ /** What a connection share allows. */
14840
+ export declare enum ConnectionShareRole {
14841
+ /** Also change it, re-authenticate it and change who it is shared with */
14842
+ Editor = "EDITOR",
14843
+ /** See the connection and run workflows the grantee owns with it */
14844
+ Use = "USE"
14845
+ }
14562
14846
  export declare enum ConnectionStatus {
14563
14847
  Active = "ACTIVE",
14564
14848
  Error = "ERROR",
@@ -14639,6 +14923,16 @@ export type ConnectionTokenResult = {
14639
14923
  /** Whether the token was refreshed during this request */
14640
14924
  wasRefreshed: Scalars['Boolean']['output'];
14641
14925
  };
14926
+ /** Who can reach a connection beyond its owner (BOFF-9726). */
14927
+ export declare enum ConnectionVisibility {
14928
+ /**
14929
+ * Only the owner, the people, groups and projects it is shared with, and workspace administrators,
14930
+ * who can see and manage it but not use it
14931
+ */
14932
+ Restricted = "RESTRICTED",
14933
+ /** Everyone in the workspace whose role allows it: how every connection behaved before sharing */
14934
+ Workspace = "WORKSPACE"
14935
+ }
14642
14936
  /** A bookable appointment window (BOFF-6030). */
14643
14937
  export type ConsultSlot = {
14644
14938
  __typename?: 'ConsultSlot';
@@ -15360,6 +15654,26 @@ export type CooCollaborationConnection = {
15360
15654
  items: Array<CooCollaboration>;
15361
15655
  pageInfo: CooPageInfo;
15362
15656
  };
15657
+ /** A collaboration brief drafted for human review. It is not saved; create it with cooCreateCollaboration. */
15658
+ export type CooCollaborationDraft = {
15659
+ __typename?: 'CooCollaborationDraft';
15660
+ brandId: Scalars['ID']['output'];
15661
+ brief: Scalars['String']['output'];
15662
+ creatorId: Scalars['ID']['output'];
15663
+ role: CooCollaboratorRole;
15664
+ status: CooCollaborationStatus;
15665
+ title: Scalars['String']['output'];
15666
+ };
15667
+ export type CooCollaborationMatchResult = {
15668
+ __typename?: 'CooCollaborationMatchResult';
15669
+ brandId: Scalars['ID']['output'];
15670
+ /** The brand's published style items the brand profile is built from. */
15671
+ brandStyleItemIds: Array<Scalars['ID']['output']>;
15672
+ /** Creators skipped because they already have an open collaboration with the brand. */
15673
+ excludedCreatorIds: Array<Scalars['ID']['output']>;
15674
+ matches: Array<CooCreatorMatch>;
15675
+ provenance: CooDecisionProvenance;
15676
+ };
15363
15677
  /** Everything the browser needs to open the payment provider's checkout for a collaboration fee. */
15364
15678
  export type CooCollaborationPaymentCheckout = {
15365
15679
  __typename?: 'CooCollaborationPaymentCheckout';
@@ -15448,6 +15762,19 @@ export type CooCollectionConnection = {
15448
15762
  items: Array<CooCollection>;
15449
15763
  pageInfo: CooPageInfo;
15450
15764
  };
15765
+ /** An advisory proposal. Nothing is written; apply it with cooUpdateCollection / cooPublishCollection. */
15766
+ export type CooCollectionCuration = {
15767
+ __typename?: 'CooCollectionCuration';
15768
+ /** Number of proposed pieces that still have at least one publish blocker. */
15769
+ blockedCount: Scalars['Int']['output'];
15770
+ brandId: Scalars['ID']['output'];
15771
+ outliers: Array<CooCurationItem>;
15772
+ proposed: Array<CooCurationItem>;
15773
+ provenance: CooDecisionProvenance;
15774
+ season: CooSeason;
15775
+ storyMaterials: Array<Scalars['String']['output']>;
15776
+ storyPalette: Array<Scalars['String']['output']>;
15777
+ };
15451
15778
  export declare enum CooCollectionStatus {
15452
15779
  Archived = "ARCHIVED",
15453
15780
  Draft = "DRAFT",
@@ -15590,6 +15917,21 @@ export type CooCreatorEarningsSummary = {
15590
15917
  /** Commissions recorded locally but not yet confirmed on the billing ledger. */
15591
15918
  unsyncedCount: Scalars['Int']['output'];
15592
15919
  };
15920
+ export type CooCreatorMatch = {
15921
+ __typename?: 'CooCreatorMatch';
15922
+ creatorId: Scalars['ID']['output'];
15923
+ draft: CooCollaborationDraft;
15924
+ /** The creator's published looks the match is built from. */
15925
+ evidenceLookIds: Array<Scalars['ID']['output']>;
15926
+ /** The brand's style items those looks already feature, if any. */
15927
+ featuredBrandItemIds: Array<Scalars['ID']['output']>;
15928
+ /** 0..1 aesthetic fit between the brand's published catalog and the creator's published looks. */
15929
+ fitScore: Scalars['Float']['output'];
15930
+ reasons: Array<CooDecisionReason>;
15931
+ sharedCategories: Array<CooStyleCategory>;
15932
+ sharedColours: Array<Scalars['String']['output']>;
15933
+ sharedMaterials: Array<Scalars['String']['output']>;
15934
+ };
15593
15935
  export type CooCreatorPayout = {
15594
15936
  __typename?: 'CooCreatorPayout';
15595
15937
  createdAt: Scalars['DateTime']['output'];
@@ -15598,6 +15940,41 @@ export type CooCreatorPayout = {
15598
15940
  requestedAmount: Scalars['Float']['output'];
15599
15941
  status: Scalars['String']['output'];
15600
15942
  };
15943
+ export type CooCurationItem = {
15944
+ __typename?: 'CooCurationItem';
15945
+ blockers: Array<CooPublishBlocker>;
15946
+ /** 0..1 — how well the piece fits the story's palette, materials and season. */
15947
+ coherence: Scalars['Float']['output'];
15948
+ /** Suggested position in the drop, starting at 0. Null for outliers. */
15949
+ position?: Maybe<Scalars['Int']['output']>;
15950
+ reasons: Array<CooDecisionReason>;
15951
+ styleItem: CooStyleItem;
15952
+ styleItemId: Scalars['ID']['output'];
15953
+ /** For an outlier, the season it appears to belong to instead. */
15954
+ suggestedSeason?: Maybe<CooSeason>;
15955
+ };
15956
+ /** Where a decision came from. Every decision response carries one. */
15957
+ export type CooDecisionProvenance = {
15958
+ __typename?: 'CooDecisionProvenance';
15959
+ /** Number of real rows the engine considered. */
15960
+ candidateCount: Scalars['Int']['output'];
15961
+ /** Decision key, e.g. `coolandlovely.suggest_outfit`. */
15962
+ decision: Scalars['String']['output'];
15963
+ /** Unique id of this invocation; also the id of the emitted decision event. */
15964
+ decisionId: Scalars['ID']['output'];
15965
+ /** Engine that produced the decision, e.g. `coolandlovely-rules-v1`. */
15966
+ engine: Scalars['String']['output'];
15967
+ generatedAt: Scalars['DateTime']['output'];
15968
+ /** True only when a language model contributed to the decision. */
15969
+ modelBacked: Scalars['Boolean']['output'];
15970
+ };
15971
+ /** One reason behind a recommendation, with the entity ids that support it. */
15972
+ export type CooDecisionReason = {
15973
+ __typename?: 'CooDecisionReason';
15974
+ code: Scalars['String']['output'];
15975
+ evidenceIds: Array<Scalars['ID']['output']>;
15976
+ message: Scalars['String']['output'];
15977
+ };
15601
15978
  export type CooDeclineReturnRequestInput = {
15602
15979
  brandId: Scalars['ID']['input'];
15603
15980
  /** Why the return is declined (3 to 1000 characters). Shown to the shopper. */
@@ -15889,11 +16266,72 @@ export declare enum CooOrderStatus {
15889
16266
  /** Paid, and every brand in the order refunded its pieces. */
15890
16267
  Refunded = "REFUNDED"
15891
16268
  }
16269
+ /** A catalog piece that would fill a slot the shopper's wardrobe cannot. */
16270
+ export type CooOutfitGapPiece = {
16271
+ __typename?: 'CooOutfitGapPiece';
16272
+ reasons: Array<CooDecisionReason>;
16273
+ score: Scalars['Float']['output'];
16274
+ slot: CooOutfitSlot;
16275
+ styleItem: CooStyleItem;
16276
+ styleItemId: Scalars['ID']['output'];
16277
+ };
16278
+ export type CooOutfitPiece = {
16279
+ __typename?: 'CooOutfitPiece';
16280
+ reasons: Array<CooDecisionReason>;
16281
+ score: Scalars['Float']['output'];
16282
+ slot: CooOutfitSlot;
16283
+ wardrobeItem: CooWardrobeItem;
16284
+ wardrobeItemId: Scalars['ID']['output'];
16285
+ };
16286
+ /** A position in a composed outfit. */
16287
+ export declare enum CooOutfitSlot {
16288
+ Accessory = "ACCESSORY",
16289
+ Bag = "BAG",
16290
+ Bottom = "BOTTOM",
16291
+ Dress = "DRESS",
16292
+ Footwear = "FOOTWEAR",
16293
+ Outerwear = "OUTERWEAR",
16294
+ Top = "TOP"
16295
+ }
16296
+ /** A draft outfit. It is never saved or published by the engine. */
16297
+ export type CooOutfitSuggestion = {
16298
+ __typename?: 'CooOutfitSuggestion';
16299
+ /** 0..1 — share of required slots filled from the wardrobe, weighted by score. */
16300
+ confidence: Scalars['Float']['output'];
16301
+ date?: Maybe<Scalars['DateTime']['output']>;
16302
+ draftTitle: Scalars['String']['output'];
16303
+ /** Wardrobe pieces left out because their size does not match the style profile's size record for that garment type. */
16304
+ excludedForSizeIds: Array<Scalars['ID']['output']>;
16305
+ gapPieces: Array<CooOutfitGapPiece>;
16306
+ /** Slots the outfit needs that neither the wardrobe nor the catalog could fill. */
16307
+ missingSlots: Array<CooOutfitSlot>;
16308
+ occasion: CooLookOccasion;
16309
+ pieces: Array<CooOutfitPiece>;
16310
+ provenance: CooDecisionProvenance;
16311
+ summary: Scalars['String']['output'];
16312
+ /** Published looks whose item pairings supported this outfit. */
16313
+ supportingLookIds: Array<Scalars['ID']['output']>;
16314
+ weatherHint?: Maybe<CooWeatherHint>;
16315
+ };
15892
16316
  export type CooPageInfo = {
15893
16317
  __typename?: 'CooPageInfo';
15894
16318
  cursor?: Maybe<Scalars['String']['output']>;
15895
16319
  hasMore: Scalars['Boolean']['output'];
15896
16320
  };
16321
+ export type CooPublishBlocker = {
16322
+ __typename?: 'CooPublishBlocker';
16323
+ code: CooPublishBlockerCode;
16324
+ message: Scalars['String']['output'];
16325
+ };
16326
+ export declare enum CooPublishBlockerCode {
16327
+ MissingPrimaryImage = "MISSING_PRIMARY_IMAGE",
16328
+ NoColourways = "NO_COLOURWAYS",
16329
+ NoMaterials = "NO_MATERIALS",
16330
+ NoSizes = "NO_SIZES",
16331
+ NoSku = "NO_SKU",
16332
+ PriceOutlier = "PRICE_OUTLIER",
16333
+ ZeroPrice = "ZERO_PRICE"
16334
+ }
15897
16335
  export type CooRecordLegalAcceptanceInput = {
15898
16336
  checkpointType: CooLegalCheckpointType;
15899
16337
  documentVersion: Scalars['String']['input'];
@@ -16164,6 +16602,13 @@ export type CooStyleProfileConnection = {
16164
16602
  items: Array<CooStyleProfile>;
16165
16603
  pageInfo: CooPageInfo;
16166
16604
  };
16605
+ export type CooSuggestOutfitInput = {
16606
+ date?: InputMaybe<Scalars['DateTime']['input']>;
16607
+ /** Suggest catalog pieces for slots the wardrobe cannot fill. */
16608
+ includeCatalogGapPieces?: InputMaybe<Scalars['Boolean']['input']>;
16609
+ occasion: CooLookOccasion;
16610
+ weatherHint?: InputMaybe<CooWeatherHint>;
16611
+ };
16167
16612
  export type CooUpdateBrandInput = {
16168
16613
  aesthetics?: InputMaybe<Array<Scalars['String']['input']>>;
16169
16614
  bio?: InputMaybe<Scalars['String']['input']>;
@@ -16268,6 +16713,41 @@ export declare enum CooVisibility {
16268
16713
  Private = "PRIVATE",
16269
16714
  Public = "PUBLIC"
16270
16715
  }
16716
+ export type CooWardrobeFinding = {
16717
+ __typename?: 'CooWardrobeFinding';
16718
+ category?: Maybe<CooStyleCategory>;
16719
+ colour?: Maybe<Scalars['String']['output']>;
16720
+ detail: Scalars['String']['output'];
16721
+ kind: CooWardrobeFindingKind;
16722
+ missingSlots: Array<CooOutfitSlot>;
16723
+ occasion?: Maybe<CooLookOccasion>;
16724
+ /** 0..1 — findings are returned highest severity first. */
16725
+ severity: Scalars['Float']['output'];
16726
+ /** Active catalog pieces that would close this gap. */
16727
+ suggestedStyleItemIds: Array<Scalars['ID']['output']>;
16728
+ title: Scalars['String']['output'];
16729
+ wardrobeItemIds: Array<Scalars['ID']['output']>;
16730
+ };
16731
+ export declare enum CooWardrobeFindingKind {
16732
+ /** A core garment category has no owned piece at all. */
16733
+ CategoryGap = "CATEGORY_GAP",
16734
+ /** A piece whose cost per wear is far above the rest of the wardrobe. */
16735
+ CostPerWearOutlier = "COST_PER_WEAR_OUTLIER",
16736
+ /** A piece that was worn before but not for a long time. */
16737
+ DormantPiece = "DORMANT_PIECE",
16738
+ /** A piece that has been owned for a while and never logged as worn. */
16739
+ NeverWorn = "NEVER_WORN",
16740
+ /** The wardrobe cannot compose a complete outfit for an occasion. */
16741
+ OccasionGap = "OCCASION_GAP",
16742
+ /** A colour from the style profile palette is missing from the wardrobe. */
16743
+ PaletteGap = "PALETTE_GAP"
16744
+ }
16745
+ export type CooWardrobeGapAnalysis = {
16746
+ __typename?: 'CooWardrobeGapAnalysis';
16747
+ findings: Array<CooWardrobeFinding>;
16748
+ provenance: CooDecisionProvenance;
16749
+ wardrobeItemCount: Scalars['Int']['output'];
16750
+ };
16271
16751
  export type CooWardrobeItem = {
16272
16752
  __typename?: 'CooWardrobeItem';
16273
16753
  brandName?: Maybe<Scalars['String']['output']>;
@@ -16305,6 +16785,14 @@ export declare enum CooWardrobeSource {
16305
16785
  PurchasedOnPlatform = "PURCHASED_ON_PLATFORM",
16306
16786
  Wishlist = "WISHLIST"
16307
16787
  }
16788
+ /** Weather the shopper expects for the outfit. Drives whether outerwear is required (COLD, RAINY) or left out (HOT). */
16789
+ export declare enum CooWeatherHint {
16790
+ Cold = "COLD",
16791
+ Hot = "HOT",
16792
+ Mild = "MILD",
16793
+ Rainy = "RAINY",
16794
+ Warm = "WARM"
16795
+ }
16308
16796
  export declare enum CosAccessLevel {
16309
16797
  Embargoed = "EMBARGOED",
16310
16798
  Public = "PUBLIC",
@@ -16366,6 +16854,15 @@ export type CosCollection = {
16366
16854
  updatedAt: Scalars['DateTime']['output'];
16367
16855
  workspaceId: Scalars['ID']['output'];
16368
16856
  };
16857
+ /** Finish a step with its telemetry (BOFF-3781). `status` must be SUCCEEDED, FAILED or CANCELLED. `outputs` may carry rowsIn / rowsOut / anomaliesFlagged / warnings, which cosAiTriageRun reads when the run has no metrics of its own. */
16858
+ export type CosCompleteRunStepInput = {
16859
+ errorMessage?: InputMaybe<Scalars['String']['input']>;
16860
+ logsRef?: InputMaybe<Scalars['String']['input']>;
16861
+ outputs?: InputMaybe<Scalars['JSON']['input']>;
16862
+ /** Datasets this step wrote (BOFF-10383), at most 100. Each id must be a live dataset in this workspace that the caller can read, otherwise the call fails with NOT_FOUND and nothing is changed. The ids are stored as `outputs.producedDatasetIds` (so `outputs`, when sent, must be a JSON object), the datasets are marked `lineageCaptured`, and search lineage then shows this run as PRODUCED_BY. */
16863
+ producedDatasetIds?: InputMaybe<Array<Scalars['ID']['input']>>;
16864
+ status: CosRunStatus;
16865
+ };
16369
16866
  export type CosCreateCollectionInput = {
16370
16867
  description?: InputMaybe<Scalars['String']['input']>;
16371
16868
  isPublic?: InputMaybe<Scalars['Boolean']['input']>;
@@ -16639,6 +17136,8 @@ export type CosPipelineStep = {
16639
17136
  name: Scalars['String']['output'];
16640
17137
  outputs?: Maybe<Scalars['JSON']['output']>;
16641
17138
  position: Scalars['Int']['output'];
17139
+ /** Datasets this step recorded as produced (BOFF-10383), read from `outputs.producedDatasetIds`. Search lineage shows the step's run as PRODUCED_BY on each of them. Empty when nothing was recorded. */
17140
+ producedDatasetIds: Array<Scalars['ID']['output']>;
16642
17141
  runId: Scalars['ID']['output'];
16643
17142
  startedAt?: Maybe<Scalars['DateTime']['output']>;
16644
17143
  status: CosRunStatus;
@@ -16670,11 +17169,37 @@ export type CosRelease = {
16670
17169
  workspaceId: Scalars['ID']['output'];
16671
17170
  zenodoMirrors: Array<CosZenodoMirror>;
16672
17171
  };
17172
+ export type CosReleaseAuthorSuggestion = {
17173
+ __typename?: 'CosReleaseAuthorSuggestion';
17174
+ actorId: Scalars['ID']['output'];
17175
+ contributions: Scalars['Int']['output'];
17176
+ roles: Array<Scalars['String']['output']>;
17177
+ };
16673
17178
  export type CosReleaseConnection = {
16674
17179
  __typename?: 'CosReleaseConnection';
16675
17180
  items: Array<CosRelease>;
16676
17181
  pageInfo: CosPageInfo;
16677
17182
  };
17183
+ /** A drafted release. Create it with cosCreateRelease (title, abstract, version, authors, datasetIds, license); publishing remains a human action. */
17184
+ export type CosReleaseDraft = {
17185
+ __typename?: 'CosReleaseDraft';
17186
+ abstract: Scalars['String']['output'];
17187
+ agentRunId: Scalars['ID']['output'];
17188
+ analysisIds: Array<Scalars['ID']['output']>;
17189
+ authorSuggestions: Array<CosReleaseAuthorSuggestion>;
17190
+ authors: Array<Scalars['String']['output']>;
17191
+ datasetIds: Array<Scalars['ID']['output']>;
17192
+ engineVersion: Scalars['String']['output'];
17193
+ generatedAt: Scalars['DateTime']['output'];
17194
+ license: Scalars['String']['output'];
17195
+ licenseRationale: Scalars['String']['output'];
17196
+ method: Scalars['String']['output'];
17197
+ notebookId: Scalars['ID']['output'];
17198
+ notes: Array<Scalars['String']['output']>;
17199
+ title: Scalars['String']['output'];
17200
+ version: Scalars['String']['output'];
17201
+ warnings: Array<Scalars['String']['output']>;
17202
+ };
16678
17203
  export declare enum CosReleaseStatus {
16679
17204
  Draft = "DRAFT",
16680
17205
  Published = "PUBLISHED",
@@ -16704,6 +17229,50 @@ export declare enum CosRunStatus {
16704
17229
  Running = "RUNNING",
16705
17230
  Succeeded = "SUCCEEDED"
16706
17231
  }
17232
+ /** Run-level telemetry (BOFF-3781). Counts are whole numbers >= 0, sent as Float so survey-scale row counts above 2^31 fit. Only the fields sent are changed; the rest of `metrics` is kept. Read by cosAiTriageRun. */
17233
+ export type CosRunTelemetryInput = {
17234
+ anomaliesFlagged?: InputMaybe<Scalars['Float']['input']>;
17235
+ errorMessage?: InputMaybe<Scalars['String']['input']>;
17236
+ rowsIn?: InputMaybe<Scalars['Float']['input']>;
17237
+ rowsOut?: InputMaybe<Scalars['Float']['input']>;
17238
+ warnings?: InputMaybe<Scalars['Float']['input']>;
17239
+ };
17240
+ export type CosRunTriage = {
17241
+ __typename?: 'CosRunTriage';
17242
+ action: CosTriageAction;
17243
+ agentRunId: Scalars['ID']['output'];
17244
+ confidence: Scalars['Float']['output'];
17245
+ engineVersion: Scalars['String']['output'];
17246
+ evidence: Array<CosTriageEvidence>;
17247
+ generatedAt: Scalars['DateTime']['output'];
17248
+ method: Scalars['String']['output'];
17249
+ metrics: CosRunTriageMetrics;
17250
+ proposedAction?: Maybe<CosTriageProposedAction>;
17251
+ rationale: Scalars['String']['output'];
17252
+ runId: Scalars['ID']['output'];
17253
+ signals: Array<CosTriageSignal>;
17254
+ suggestedParams?: Maybe<Scalars['JSON']['output']>;
17255
+ thresholds: CosRunTriageThresholds;
17256
+ };
17257
+ export type CosRunTriageMetrics = {
17258
+ __typename?: 'CosRunTriageMetrics';
17259
+ anomaliesFlagged?: Maybe<Scalars['Float']['output']>;
17260
+ anomalyRate?: Maybe<Scalars['Float']['output']>;
17261
+ /** Median anomaly rate of the pipeline's earlier successful runs. */
17262
+ baselineAnomalyRate?: Maybe<Scalars['Float']['output']>;
17263
+ rowLossRate?: Maybe<Scalars['Float']['output']>;
17264
+ rowsIn?: Maybe<Scalars['Float']['output']>;
17265
+ rowsOut?: Maybe<Scalars['Float']['output']>;
17266
+ warnings?: Maybe<Scalars['Float']['output']>;
17267
+ };
17268
+ export type CosRunTriageThresholds = {
17269
+ __typename?: 'CosRunTriageThresholds';
17270
+ maxWarnings: Scalars['Float']['output'];
17271
+ quarantineAnomalyRate: Scalars['Float']['output'];
17272
+ quarantineRowLossRate: Scalars['Float']['output'];
17273
+ reviewAnomalyRate: Scalars['Float']['output'];
17274
+ reviewRowLossRate: Scalars['Float']['output'];
17275
+ };
16707
17276
  export type CosSchemaField = {
16708
17277
  __typename?: 'CosSchemaField';
16709
17278
  createdAt: Scalars['DateTime']['output'];
@@ -16719,6 +17288,155 @@ export type CosSchemaField = {
16719
17288
  updatedAt: Scalars['DateTime']['output'];
16720
17289
  workspaceId: Scalars['ID']['output'];
16721
17290
  };
17291
+ export type CosSchemaFieldProposal = {
17292
+ __typename?: 'CosSchemaFieldProposal';
17293
+ /** Id of this run in the shared AI invocation ledger. */
17294
+ agentRunId: Scalars['ID']['output'];
17295
+ datasetId: Scalars['ID']['output'];
17296
+ engineVersion: Scalars['String']['output'];
17297
+ fields: Array<CosSchemaFieldSuggestion>;
17298
+ generatedAt: Scalars['DateTime']['output'];
17299
+ method: Scalars['String']['output'];
17300
+ notes: Array<Scalars['String']['output']>;
17301
+ sampleOrigin: CosSchemaSampleOrigin;
17302
+ sampledRows: Scalars['Int']['output'];
17303
+ };
17304
+ /** One proposed schema field. Accept it with cosAddSchemaField (name, fieldType, unit, nullable, position, provenance = provenanceNote). */
17305
+ export type CosSchemaFieldSuggestion = {
17306
+ __typename?: 'CosSchemaFieldSuggestion';
17307
+ /** True when the dataset already has a schema field with this name; it is never overwritten, and any disagreement is listed in `conflicts`. */
17308
+ alreadyDefined: Scalars['Boolean']['output'];
17309
+ /** 0 to 1. Lower for small samples and for columns with no sampled values. */
17310
+ confidence: Scalars['Float']['output'];
17311
+ conflicts: Array<Scalars['String']['output']>;
17312
+ description?: Maybe<Scalars['String']['output']>;
17313
+ emptyValues: Scalars['Int']['output'];
17314
+ existingFieldId?: Maybe<Scalars['ID']['output']>;
17315
+ fieldType: CosFieldType;
17316
+ name: Scalars['String']['output'];
17317
+ nullable: Scalars['Boolean']['output'];
17318
+ position: Scalars['Int']['output'];
17319
+ /** Drafted provenance note: where the column came from and why it was typed so. */
17320
+ provenanceNote: Scalars['String']['output'];
17321
+ reasons: Array<Scalars['String']['output']>;
17322
+ sampledValues: Scalars['Int']['output'];
17323
+ unit?: Maybe<Scalars['String']['output']>;
17324
+ };
17325
+ /** A row sample to infer a schema from. `rows` is a JSON array of rows: arrays aligned with `columns`, or objects keyed by column name (then `columns` is optional and only fixes the order). At most 500 rows and 1,000 columns are analysed. */
17326
+ export type CosSchemaSampleInput = {
17327
+ columns?: InputMaybe<Array<Scalars['String']['input']>>;
17328
+ rows: Scalars['JSON']['input'];
17329
+ };
17330
+ /** Where the rows the schema proposal was inferred from came from. */
17331
+ export declare enum CosSchemaSampleOrigin {
17332
+ /** `schemaSample` ({ columns, rows }) stored on the dataset's `context`. */
17333
+ DatasetContext = "DATASET_CONTEXT",
17334
+ /** The `sample` argument of the request. */
17335
+ Request = "REQUEST",
17336
+ /** Columns declared in the source connector config; no row values. */
17337
+ SourceConfig = "SOURCE_CONFIG"
17338
+ }
17339
+ export declare enum CosSearchEntityType {
17340
+ Collection = "COLLECTION",
17341
+ Dataset = "DATASET",
17342
+ Notebook = "NOTEBOOK",
17343
+ Release = "RELEASE"
17344
+ }
17345
+ /** One piece of evidence explaining why a hit matched. */
17346
+ export type CosSearchEvidence = {
17347
+ __typename?: 'CosSearchEvidence';
17348
+ /** Id of the entity the evidence comes from (schema field, source, release, ...). */
17349
+ entityId?: Maybe<Scalars['ID']['output']>;
17350
+ kind: CosSearchEvidenceKind;
17351
+ /** Short label for that entity, e.g. the schema field name. */
17352
+ label?: Maybe<Scalars['String']['output']>;
17353
+ /** The matched text (truncated), e.g. the provenance note. */
17354
+ text: Scalars['String']['output'];
17355
+ };
17356
+ export declare enum CosSearchEvidenceKind {
17357
+ /** An analysis title or method run against this dataset matched. */
17358
+ AnalysisMethod = "ANALYSIS_METHOD",
17359
+ /** The collection (mission, survey, project) matched. */
17360
+ Collection = "COLLECTION",
17361
+ /** The dataset's coverage metadata matched a term. */
17362
+ Coverage = "COVERAGE",
17363
+ /** The dataset's coverage years overlap the window named in the query. */
17364
+ CoverageWindow = "COVERAGE_WINDOW",
17365
+ /** The dataset's own name, description, tags or format matched. */
17366
+ DatasetText = "DATASET_TEXT",
17367
+ /** A notebook title or description matched. */
17368
+ Notebook = "NOTEBOOK",
17369
+ /** A release title or abstract matched. */
17370
+ ReleaseAbstract = "RELEASE_ABSTRACT",
17371
+ /** A schema field's name, unit or description matched. */
17372
+ SchemaField = "SCHEMA_FIELD",
17373
+ /** A schema field's provenance note matched. */
17374
+ SchemaProvenance = "SCHEMA_PROVENANCE",
17375
+ /** The upstream source (instrument, telescope, archive) matched. */
17376
+ Source = "SOURCE"
17377
+ }
17378
+ export type CosSearchHit = {
17379
+ __typename?: 'CosSearchHit';
17380
+ collection?: Maybe<CosCollection>;
17381
+ dataset?: Maybe<CosDataset>;
17382
+ entityType: CosSearchEntityType;
17383
+ evidence: Array<CosSearchEvidence>;
17384
+ id: Scalars['ID']['output'];
17385
+ /** Lineage chain for DATASET hits (empty for other entity types or when includeLineage is false). */
17386
+ lineage: Array<CosSearchLineageNode>;
17387
+ notebook?: Maybe<CosNotebook>;
17388
+ release?: Maybe<CosRelease>;
17389
+ /** Relative relevance; only meaningful for ordering hits of one response. */
17390
+ score: Scalars['Float']['output'];
17391
+ snippet?: Maybe<Scalars['String']['output']>;
17392
+ title: Scalars['String']['output'];
17393
+ };
17394
+ export declare enum CosSearchLineageKind {
17395
+ Analysis = "ANALYSIS",
17396
+ PipelineRun = "PIPELINE_RUN",
17397
+ PipelineStep = "PIPELINE_STEP",
17398
+ Release = "RELEASE",
17399
+ Source = "SOURCE"
17400
+ }
17401
+ /** One node of a dataset's lineage. `relation` describes how the node relates to the dataset: INGESTED_FROM (source), PRODUCED_BY (a run whose step outputs reference the dataset), PROCESSED_BY (a run that took the dataset as input), STEP_OF (a step of the run named by parentId), ANALYZED_BY, PUBLISHED_IN. */
17402
+ export type CosSearchLineageNode = {
17403
+ __typename?: 'CosSearchLineageNode';
17404
+ detail?: Maybe<Scalars['String']['output']>;
17405
+ id: Scalars['ID']['output'];
17406
+ kind: CosSearchLineageKind;
17407
+ label: Scalars['String']['output'];
17408
+ occurredAt?: Maybe<Scalars['DateTime']['output']>;
17409
+ parentId?: Maybe<Scalars['ID']['output']>;
17410
+ relation: Scalars['String']['output'];
17411
+ status?: Maybe<Scalars['String']['output']>;
17412
+ };
17413
+ export type CosSearchResults = {
17414
+ __typename?: 'CosSearchResults';
17415
+ /** Domain aliases added to the search (e.g. m31 -> andromeda). */
17416
+ expandedTerms: Array<Scalars['String']['output']>;
17417
+ hits: Array<CosSearchHit>;
17418
+ /** Content terms taken from the query after removing request phrasing. */
17419
+ interpretedTerms: Array<Scalars['String']['output']>;
17420
+ query: Scalars['String']['output'];
17421
+ /** Observation window extracted from the query, if any. */
17422
+ timeWindow?: Maybe<CosSearchTimeWindow>;
17423
+ total: Scalars['Int']['output'];
17424
+ };
17425
+ export type CosSearchTimeWindow = {
17426
+ __typename?: 'CosSearchTimeWindow';
17427
+ fromYear: Scalars['Int']['output'];
17428
+ toYear: Scalars['Int']['output'];
17429
+ };
17430
+ export type CosSemanticSearchInput = {
17431
+ /** Restrict to these entity types (default: all). */
17432
+ entityTypes?: InputMaybe<Array<CosSearchEntityType>>;
17433
+ /** Attach lineage to DATASET hits (default true). */
17434
+ includeLineage?: InputMaybe<Scalars['Boolean']['input']>;
17435
+ /** Maximum hits returned (1-50, default 20). */
17436
+ limit?: InputMaybe<Scalars['Int']['input']>;
17437
+ /** Plain-language question, e.g. 'calibrated flux columns covering M31 between 2019 and 2021'. Input beyond 500 characters is ignored. */
17438
+ query: Scalars['String']['input'];
17439
+ };
16722
17440
  export type CosSource = {
16723
17441
  __typename?: 'CosSource';
16724
17442
  config?: Maybe<Scalars['JSON']['output']>;
@@ -16775,6 +17493,48 @@ export declare enum CosStepKind {
16775
17493
  Transform = "TRANSFORM",
16776
17494
  ZonalStats = "ZONAL_STATS"
16777
17495
  }
17496
+ export declare enum CosTriageAction {
17497
+ FlagSourceDegraded = "FLAG_SOURCE_DEGRADED",
17498
+ /** The run recorded no telemetry, so there is nothing to judge it by. */
17499
+ InsufficientTelemetry = "INSUFFICIENT_TELEMETRY",
17500
+ Promote = "PROMOTE",
17501
+ QuarantineDataset = "QUARANTINE_DATASET",
17502
+ RerunWithParams = "RERUN_WITH_PARAMS"
17503
+ }
17504
+ /** A piece of telemetry the recommendation read, with the id of the run, step, source or pipeline it came from. */
17505
+ export type CosTriageEvidence = {
17506
+ __typename?: 'CosTriageEvidence';
17507
+ field: Scalars['String']['output'];
17508
+ kind: CosTriageEvidenceKind;
17509
+ refId: Scalars['ID']['output'];
17510
+ value: Scalars['String']['output'];
17511
+ };
17512
+ export declare enum CosTriageEvidenceKind {
17513
+ Baseline = "BASELINE",
17514
+ Run = "RUN",
17515
+ RunMetric = "RUN_METRIC",
17516
+ Source = "SOURCE",
17517
+ Step = "STEP"
17518
+ }
17519
+ /** The existing mutation a person would run to apply the recommendation. Triage never runs it. */
17520
+ export type CosTriageProposedAction = {
17521
+ __typename?: 'CosTriageProposedAction';
17522
+ arguments: Scalars['JSON']['output'];
17523
+ description: Scalars['String']['output'];
17524
+ mutation: Scalars['String']['output'];
17525
+ targetId: Scalars['ID']['output'];
17526
+ };
17527
+ export type CosTriageSignal = {
17528
+ __typename?: 'CosTriageSignal';
17529
+ code: Scalars['String']['output'];
17530
+ message: Scalars['String']['output'];
17531
+ severity: CosTriageSignalSeverity;
17532
+ };
17533
+ export declare enum CosTriageSignalSeverity {
17534
+ Critical = "CRITICAL",
17535
+ Info = "INFO",
17536
+ Warning = "WARNING"
17537
+ }
16778
17538
  export type CosUpdateCollectionInput = {
16779
17539
  description?: InputMaybe<Scalars['String']['input']>;
16780
17540
  isPublic?: InputMaybe<Scalars['Boolean']['input']>;
@@ -17654,6 +18414,11 @@ export type CreateConnectionInput = {
17654
18414
  name: Scalars['String']['input'];
17655
18415
  providerId: Scalars['ID']['input'];
17656
18416
  vaultId?: InputMaybe<Scalars['ID']['input']>;
18417
+ /**
18418
+ * Who can reach the new connection. Defaults to WORKSPACE; RESTRICTED keeps it to its owner until
18419
+ * it is shared.
18420
+ */
18421
+ visibility?: InputMaybe<ConnectionVisibility>;
17657
18422
  };
17658
18423
  export type CreateConsultationInput = {
17659
18424
  consultantId: Scalars['String']['input'];
@@ -20063,12 +20828,24 @@ export type CreateRoleInput = {
20063
20828
  name: Scalars['String']['input'];
20064
20829
  parentId?: InputMaybe<Scalars['ID']['input']>;
20065
20830
  priority?: InputMaybe<Scalars['Int']['input']>;
20066
- /** Product this role belongs to (PlatformProduct.slug). Product shells must pass their product slug when creating custom roles. Omit/null is reserved for cross-product platform roles created from the admin app. */
20831
+ /**
20832
+ * Product this role belongs to (PlatformProduct.slug). Product shells must pass
20833
+ * their product slug when creating custom roles. Omit/null is reserved for
20834
+ * cross-product platform roles created from the admin app.
20835
+ */
20067
20836
  productSlug?: InputMaybe<Scalars['String']['input']>;
20068
20837
  scopeId: Scalars['String']['input'];
20069
20838
  scopeType?: InputMaybe<Scalars['String']['input']>;
20070
20839
  };
20071
- /** Input for creating a role permission override. The override's scope is inherited from the role's own scope (role.scopeId); clients no longer pass scopeId. This prevents creating cross-scope overrides where the override and the role live in different workspaces. Overrides cannot be created on system templates (role.scopeId='system'). */
20840
+ /**
20841
+ * Input for creating a role permission override.
20842
+ *
20843
+ * The override's scope is inherited from the role's own scope (role.scopeId);
20844
+ * clients no longer pass scopeId. This prevents creating cross-scope overrides
20845
+ * where the override and the role live in different workspaces.
20846
+ *
20847
+ * Overrides cannot be created on system templates (role.scopeId='system').
20848
+ */
20072
20849
  export type CreateRolePermissionOverrideInput = {
20073
20850
  action: Scalars['String']['input'];
20074
20851
  expiresAt?: InputMaybe<Scalars['DateTime']['input']>;
@@ -21235,10 +22012,14 @@ export type CrewCandidateMatch = {
21235
22012
  candidateId: Scalars['ID']['output'];
21236
22013
  experienceScore: Scalars['Float']['output'];
21237
22014
  jobPostingId: Scalars['ID']['output'];
22015
+ /** Canonical names of the requirements (required and nice-to-have) the candidate meets. */
21238
22016
  matchedSkills: Array<Scalars['String']['output']>;
22017
+ /** Canonical names of the required skills the candidate does not meet. */
21239
22018
  missingSkills: Array<Scalars['String']['output']>;
21240
22019
  rationale: Scalars['String']['output'];
21241
22020
  score: Scalars['Float']['output'];
22021
+ /** Per-requirement breakdown: how each required / nice-to-have skill was (or was not) met. */
22022
+ skillMatches: Array<CrewCandidateSkillMatch>;
21242
22023
  skillScore: Scalars['Float']['output'];
21243
22024
  };
21244
22025
  /** Filter for `crewJobPostingMatches`. `status`, when set, restricts the candidate pool to a single CrewCandidateStatus value (case-insensitive) instead of the default pool (every candidate in the workspace not already HIRED or REJECTED). `minScore` drops any candidate whose overall score falls below the threshold (0-100). */
@@ -21260,6 +22041,31 @@ export type CrewCandidateSkill = {
21260
22041
  source: Scalars['String']['output'];
21261
22042
  updatedAt: Scalars['DateTime']['output'];
21262
22043
  };
22044
+ /** How one skill a job posting asks for is met by a candidate (BOFF-10360). */
22045
+ export type CrewCandidateSkillMatch = {
22046
+ __typename?: 'CrewCandidateSkillMatch';
22047
+ /** Skill names from the held skill to the requirement through the skills graph (empty for exact matches). */
22048
+ chain: Array<Scalars['String']['output']>;
22049
+ /** EXACT, SUPERSEDED or IMPLIED when the candidate holds a satisfying skill; null when they hold none. */
22050
+ matchType?: Maybe<Scalars['String']['output']>;
22051
+ matched: Scalars['Boolean']['output'];
22052
+ /** Minimum proficiency the posting asks for, if any. */
22053
+ minProficiency?: Maybe<Scalars['Int']['output']>;
22054
+ /** Candidate's proficiency in the held skill (null when not assessed). */
22055
+ proficiency?: Maybe<Scalars['Int']['output']>;
22056
+ /** Why it was not met (not held, proficiency not assessed, proficiency below N); null when met. */
22057
+ reason?: Maybe<Scalars['String']['output']>;
22058
+ /** True for a must-have skill, false for a nice-to-have. */
22059
+ required: Scalars['Boolean']['output'];
22060
+ /** Canonical skill name. */
22061
+ requirement: Scalars['String']['output'];
22062
+ /** 0-100 strength of the match; 0 when not met. */
22063
+ score: Scalars['Float']['output'];
22064
+ /** The posting's canonical skill. */
22065
+ skillId: Scalars['ID']['output'];
22066
+ /** Name of the held skill that satisfied the requirement. */
22067
+ viaSkill?: Maybe<Scalars['String']['output']>;
22068
+ };
21263
22069
  export type CrewClient = {
21264
22070
  __typename?: 'CrewClient';
21265
22071
  contactPerson?: Maybe<Scalars['String']['output']>;
@@ -21499,11 +22305,28 @@ export type CrewJobPosting = {
21499
22305
  requirements: Array<Scalars['String']['output']>;
21500
22306
  salaryMax: Scalars['Float']['output'];
21501
22307
  salaryMin: Scalars['Float']['output'];
22308
+ /** Canonical skills the posting asks for, required first (replaces the legacy `requirements` strings for matching). */
22309
+ skillRequirements: Array<CrewJobPostingSkill>;
21502
22310
  status: Scalars['String']['output'];
21503
22311
  title: Scalars['String']['output'];
21504
22312
  type: Scalars['String']['output'];
21505
22313
  workspaceId: Scalars['ID']['output'];
21506
22314
  };
22315
+ /** A canonical skill a job posting asks for (BOFF-10360). Required skills mirror the posting's legacy `requirements` strings; nice-to-have skills (`required: false`) are set with `setCrewJobPostingSkill`. */
22316
+ export type CrewJobPostingSkill = {
22317
+ __typename?: 'CrewJobPostingSkill';
22318
+ createdAt: Scalars['DateTime']['output'];
22319
+ id: Scalars['ID']['output'];
22320
+ jobPostingId: Scalars['ID']['output'];
22321
+ /** 0-100 minimum candidate proficiency; null when any level is acceptable. */
22322
+ minProficiency?: Maybe<Scalars['Int']['output']>;
22323
+ required: Scalars['Boolean']['output'];
22324
+ skill: CrewSkill;
22325
+ skillId: Scalars['ID']['output'];
22326
+ /** REQUIREMENT (mirrored from requirements), RECRUITER (set directly) or LEGACY (backfilled). */
22327
+ source: Scalars['String']['output'];
22328
+ updatedAt: Scalars['DateTime']['output'];
22329
+ };
21507
22330
  export type CrewLeaveRequest = {
21508
22331
  __typename?: 'CrewLeaveRequest';
21509
22332
  approverName?: Maybe<Scalars['String']['output']>;
@@ -21880,6 +22703,16 @@ export type CrewSkillHolderMatch = {
21880
22703
  proficiency?: Maybe<Scalars['Int']['output']>;
21881
22704
  verifiedFrom: Scalars['String']['output'];
21882
22705
  };
22706
+ /** Result of merging one skill into another (BOFF-10361). */
22707
+ export type CrewSkillMergeResult = {
22708
+ __typename?: 'CrewSkillMergeResult';
22709
+ candidatesMoved: Scalars['Int']['output'];
22710
+ employeesMoved: Scalars['Int']['output'];
22711
+ jobPostingsMoved: Scalars['Int']['output'];
22712
+ relationsMoved: Scalars['Int']['output'];
22713
+ /** The surviving skill, with the merged skill's name and aliases added as aliases. */
22714
+ target: CrewSkill;
22715
+ };
21883
22716
  /** A typed edge between two skills. IMPLIES: holding `fromSkill` means you can do `toSkill`. SUPERSEDES: `fromSkill` replaces `toSkill` (and satisfies it). RELATED_TO: adjacent, informative only. */
21884
22717
  export type CrewSkillRelation = {
21885
22718
  __typename?: 'CrewSkillRelation';
@@ -21899,6 +22732,8 @@ export type CrewSkillSyncReport = {
21899
22732
  candidatesProcessed: Scalars['Int']['output'];
21900
22733
  employeeLinksCreated: Scalars['Int']['output'];
21901
22734
  employeesProcessed: Scalars['Int']['output'];
22735
+ jobPostingLinksCreated: Scalars['Int']['output'];
22736
+ jobPostingsProcessed: Scalars['Int']['output'];
21902
22737
  relationsCreated: Scalars['Int']['output'];
21903
22738
  taxonomySkillsCreated: Scalars['Int']['output'];
21904
22739
  unmatched: Array<CrewSkillUnmatched>;
@@ -21917,6 +22752,28 @@ export type CrewSkillsGap = {
21917
22752
  shortage: Scalars['Int']['output'];
21918
22753
  skill: Scalars['String']['output'];
21919
22754
  };
22755
+ /** Result of rebuilding a workspace's projection in the platform knowledge graph and search index: the skills graph (BOFF-10362) and the directory records (BOFF-10432). Counts are events published. */
22756
+ export type CrewSkillsGraphReindexReport = {
22757
+ __typename?: 'CrewSkillsGraphReindexReport';
22758
+ /** Live announcements published (title, category, priority, tags). */
22759
+ announcements: Scalars['Int']['output'];
22760
+ /** Live departments published (name, location, status). */
22761
+ departments: Scalars['Int']['output'];
22762
+ employeeSkills: Scalars['Int']['output'];
22763
+ employees: Scalars['Int']['output'];
22764
+ /** False when platform graph sync is disabled in this environment; nothing was published. */
22765
+ enabled: Scalars['Boolean']['output'];
22766
+ /** Events the platform graph emitter rejected; re-run the reindex to repair them. */
22767
+ failed: Scalars['Int']['output'];
22768
+ /** Live job postings published (title, department, location, type, experience level, status). */
22769
+ jobPostings: Scalars['Int']['output'];
22770
+ /** Live projects published (name, description, status, priority, team and manager names). */
22771
+ projects: Scalars['Int']['output'];
22772
+ relations: Scalars['Int']['output'];
22773
+ skills: Scalars['Int']['output'];
22774
+ /** Live teams published (name, description, department, lead name). */
22775
+ teams: Scalars['Int']['output'];
22776
+ };
21920
22777
  export type CrewStaffingNeed = {
21921
22778
  __typename?: 'CrewStaffingNeed';
21922
22779
  alternates: Array<CrewStaffingPick>;
@@ -24177,6 +25034,8 @@ export type EcoMetricConnection = {
24177
25034
  };
24178
25035
  export type EcoObservation = {
24179
25036
  __typename?: 'EcoObservation';
25037
+ /** Client-generated idempotency key supplied when the observation was recorded (offline field capture). Null for observations recorded without one. */
25038
+ clientRef?: Maybe<Scalars['String']['output']>;
24180
25039
  count: Scalars['Int']['output'];
24181
25040
  createdAt: Scalars['DateTime']['output'];
24182
25041
  /** Reference to a wspace-files-svc File (photo / audio evidence). */
@@ -24236,6 +25095,8 @@ export type EcoRecordMeasurementInput = {
24236
25095
  value: Scalars['Float']['input'];
24237
25096
  };
24238
25097
  export type EcoRecordObservationInput = {
25098
+ /** Optional client-generated idempotency key (1-128 chars of letters, digits, '-', '_', ':' or '.'). The offline field app mints one per queued observation and may replay the mutation after a dropped connection: recording again with the same clientRef in the same workspace returns the observation the first attempt created instead of creating a duplicate. */
25099
+ clientRef?: InputMaybe<Scalars['String']['input']>;
24239
25100
  count?: InputMaybe<Scalars['Int']['input']>;
24240
25101
  evidenceFileId?: InputMaybe<Scalars['ID']['input']>;
24241
25102
  latitude?: InputMaybe<Scalars['Float']['input']>;
@@ -24615,9 +25476,16 @@ export type EffectivePermissions = {
24615
25476
  actorId: Scalars['String']['output'];
24616
25477
  /** Cache key for debugging and invalidation */
24617
25478
  cacheKey?: Maybe<Scalars['String']['output']>;
24618
- /** When this permission set should be considered stale. Frontend should refresh after this time. */
25479
+ /**
25480
+ * When this permission set should be considered stale.
25481
+ * Frontend should refresh after this time.
25482
+ */
24619
25483
  expiresAt: Scalars['DateTime']['output'];
24620
- /** Flat permission strings for easy frontend matching. Format: "{resourceType}:{action}" e.g., ["project:read", "project:write", "task:*"] Includes wildcards for ADMIN level (e.g., "project:*") */
25484
+ /**
25485
+ * Flat permission strings for easy frontend matching.
25486
+ * Format: "{resourceType}:{action}" e.g., ["project:read", "project:write", "task:*"]
25487
+ * Includes wildcards for ADMIN level (e.g., "project:*")
25488
+ */
24621
25489
  permissionStrings: Array<Scalars['String']['output']>;
24622
25490
  /** Resource types and their effective levels */
24623
25491
  permissions: Array<EffectiveResourcePermission>;
@@ -24794,6 +25662,14 @@ export type EntityComment = {
24794
25662
  resolvedById?: Maybe<Scalars['ID']['output']>;
24795
25663
  status: CommentStatus;
24796
25664
  tags: Array<CommentTagAssignment>;
25665
+ /** The TheCulturePost discussion this reply belongs to. */
25666
+ tcpDiscussionId?: Maybe<Scalars['ID']['output']>;
25667
+ /** When the reply's moderation state last changed. */
25668
+ tcpModeratedAt?: Maybe<Scalars['DateTime']['output']>;
25669
+ /** Respectful-by-design moderation state of this reply. */
25670
+ tcpModerationStatus?: Maybe<TcpModerationStatus>;
25671
+ /** Self-disclosed perspective/tradition the author writes from, when shared. */
25672
+ tcpPerspective?: Maybe<Scalars['String']['output']>;
24797
25673
  threadLevel: Scalars['Int']['output'];
24798
25674
  threadRootId?: Maybe<Scalars['ID']['output']>;
24799
25675
  updatedAt: Scalars['DateTime']['output'];
@@ -25208,6 +26084,104 @@ export declare enum EventVisibility {
25208
26084
  Private = "PRIVATE",
25209
26085
  Public = "PUBLIC"
25210
26086
  }
26087
+ export type EventfullyManagedAgendaConflict = {
26088
+ __typename?: 'EventfullyManagedAgendaConflict';
26089
+ message: Scalars['String']['output'];
26090
+ sessionAId: Scalars['ID']['output'];
26091
+ sessionATitle: Scalars['String']['output'];
26092
+ sessionBId?: Maybe<Scalars['ID']['output']>;
26093
+ sessionBTitle?: Maybe<Scalars['String']['output']>;
26094
+ speakerId?: Maybe<Scalars['ID']['output']>;
26095
+ suggestedFix: EventfullyManagedAgendaFix;
26096
+ /** VENUE_CLASH, SPEAKER_DOUBLE_BOOKED or OVER_CAPACITY. */
26097
+ type: Scalars['String']['output'];
26098
+ venueId?: Maybe<Scalars['ID']['output']>;
26099
+ };
26100
+ export type EventfullyManagedAgendaConflictResolution = {
26101
+ __typename?: 'EventfullyManagedAgendaConflictResolution';
26102
+ conflicts: Array<EventfullyManagedAgendaConflict>;
26103
+ engine: EventfullyManagedAiDecisionEngine;
26104
+ eventId: Scalars['ID']['output'];
26105
+ };
26106
+ export type EventfullyManagedAgendaFix = {
26107
+ __typename?: 'EventfullyManagedAgendaFix';
26108
+ /** MOVE_SESSION, RESCHEDULE_SESSION, MOVE_ROOM, RAISE_CAPACITY, ADD_REPEAT, OPEN_WAITLIST, REASSIGN_SPEAKER or MANUAL_REVIEW. */
26109
+ action: Scalars['String']['output'];
26110
+ applyable: Scalars['Boolean']['output'];
26111
+ rationale: Scalars['String']['output'];
26112
+ sessionId: Scalars['ID']['output'];
26113
+ targetCapacity?: Maybe<Scalars['Int']['output']>;
26114
+ targetEndsAt?: Maybe<Scalars['DateTime']['output']>;
26115
+ targetStartsAt?: Maybe<Scalars['DateTime']['output']>;
26116
+ targetVenueId?: Maybe<Scalars['ID']['output']>;
26117
+ targetVenueName?: Maybe<Scalars['String']['output']>;
26118
+ };
26119
+ /** Which engine produced a decision, and when it was persisted. */
26120
+ export type EventfullyManagedAiDecisionEngine = {
26121
+ __typename?: 'EventfullyManagedAiDecisionEngine';
26122
+ generatedAt: Scalars['DateTime']['output'];
26123
+ latencyMs: Scalars['Int']['output'];
26124
+ model: Scalars['String']['output'];
26125
+ provider: Scalars['String']['output'];
26126
+ /** AnalyticsSnapshot row the decision was persisted to; null when persist was false. */
26127
+ snapshotId?: Maybe<Scalars['ID']['output']>;
26128
+ version: Scalars['String']['output'];
26129
+ };
26130
+ /** The four decisions the engine produces. */
26131
+ export declare enum EventfullyManagedAiDecisionKind {
26132
+ AgendaConflicts = "AGENDA_CONFLICTS",
26133
+ AttendanceForecast = "ATTENDANCE_FORECAST",
26134
+ CapacityRightSizing = "CAPACITY_RIGHT_SIZING",
26135
+ NoShowPrediction = "NO_SHOW_PREDICTION"
26136
+ }
26137
+ /** A persisted decision, re-read without re-running the engine. */
26138
+ export type EventfullyManagedAiDecisionRecord = {
26139
+ __typename?: 'EventfullyManagedAiDecisionRecord';
26140
+ /** The full decision payload, in the same shape the generating mutation returned. */
26141
+ data: Scalars['JSON']['output'];
26142
+ eventId: Scalars['ID']['output'];
26143
+ generatedAt: Scalars['DateTime']['output'];
26144
+ id: Scalars['ID']['output'];
26145
+ kind: EventfullyManagedAiDecisionKind;
26146
+ model: Scalars['String']['output'];
26147
+ provider: Scalars['String']['output'];
26148
+ version: Scalars['String']['output'];
26149
+ };
26150
+ export type EventfullyManagedApplyAgendaFixInput = {
26151
+ capacity?: InputMaybe<Scalars['Int']['input']>;
26152
+ /** Must be true. The engine never changes a session without this explicit confirmation. */
26153
+ confirm: Scalars['Boolean']['input'];
26154
+ endsAt?: InputMaybe<Scalars['DateTime']['input']>;
26155
+ sessionId: Scalars['ID']['input'];
26156
+ startsAt?: InputMaybe<Scalars['DateTime']['input']>;
26157
+ venueId?: InputMaybe<Scalars['ID']['input']>;
26158
+ };
26159
+ export type EventfullyManagedAttendanceForecast = {
26160
+ __typename?: 'EventfullyManagedAttendanceForecast';
26161
+ basis: EventfullyManagedForecastBasis;
26162
+ cells: Array<EventfullyManagedShowRateCell>;
26163
+ /** Registrations (by quantity) already checked in; counted in full, not predicted. */
26164
+ checkedInSoFar: Scalars['Int']['output'];
26165
+ /** True when there is too little history for a reliable number. */
26166
+ coldStart: Scalars['Boolean']['output'];
26167
+ /** Plain-language explanation of a cold-start forecast; null otherwise. */
26168
+ coldStartReason?: Maybe<Scalars['String']['output']>;
26169
+ confidence: EventfullyManagedForecastConfidence;
26170
+ engine: EventfullyManagedAiDecisionEngine;
26171
+ eventId: Scalars['ID']['output'];
26172
+ /** Upper bound of the 90% range. */
26173
+ high: Scalars['Int']['output'];
26174
+ historicalEvents: Scalars['Int']['output'];
26175
+ historicalRegistrations: Scalars['Int']['output'];
26176
+ /** Lower bound of the 90% range. */
26177
+ low: Scalars['Int']['output'];
26178
+ predictedAttendance: Scalars['Int']['output'];
26179
+ /** Live registrations (by ticket quantity), excluding cancelled and waitlisted. */
26180
+ registered: Scalars['Int']['output'];
26181
+ sessions: Array<EventfullyManagedSessionForecast>;
26182
+ showRate: Scalars['Float']['output'];
26183
+ signals: Array<EventfullyManagedForecastSignal>;
26184
+ };
25211
26185
  export type EventfullyManagedAttendee = {
25212
26186
  __typename?: 'EventfullyManagedAttendee';
25213
26187
  company?: Maybe<Scalars['String']['output']>;
@@ -25296,6 +26270,33 @@ export type EventfullyManagedBadgeTemplateList = {
25296
26270
  items: Array<EventfullyManagedBadgeTemplate>;
25297
26271
  total: Scalars['Int']['output'];
25298
26272
  };
26273
+ export type EventfullyManagedCapacityRecommendation = {
26274
+ __typename?: 'EventfullyManagedCapacityRecommendation';
26275
+ /** KEEP, MOVE_ROOM, DOWNSIZE_ROOM, RAISE_CAPACITY, ADD_REPEAT, OPEN_WAITLIST or SET_CAPACITY. */
26276
+ action: Scalars['String']['output'];
26277
+ /** True when eventfullyManagedApplyAgendaFix can apply this recommendation. */
26278
+ applyable: Scalars['Boolean']['output'];
26279
+ effectiveCapacity?: Maybe<Scalars['Int']['output']>;
26280
+ high: Scalars['Int']['output'];
26281
+ predictedAttendance: Scalars['Int']['output'];
26282
+ rationale: Scalars['String']['output'];
26283
+ roomCapacity?: Maybe<Scalars['Int']['output']>;
26284
+ sessionCapacity?: Maybe<Scalars['Int']['output']>;
26285
+ sessionId: Scalars['ID']['output'];
26286
+ targetCapacity?: Maybe<Scalars['Int']['output']>;
26287
+ targetVenueId?: Maybe<Scalars['ID']['output']>;
26288
+ targetVenueName?: Maybe<Scalars['String']['output']>;
26289
+ title: Scalars['String']['output'];
26290
+ utilization?: Maybe<Scalars['Float']['output']>;
26291
+ };
26292
+ export type EventfullyManagedCapacityRightSizing = {
26293
+ __typename?: 'EventfullyManagedCapacityRightSizing';
26294
+ coldStart: Scalars['Boolean']['output'];
26295
+ confidence: EventfullyManagedForecastConfidence;
26296
+ engine: EventfullyManagedAiDecisionEngine;
26297
+ eventId: Scalars['ID']['output'];
26298
+ recommendations: Array<EventfullyManagedCapacityRecommendation>;
26299
+ };
25299
26300
  export type EventfullyManagedCheckInRecord = {
25300
26301
  __typename?: 'EventfullyManagedCheckInRecord';
25301
26302
  attendeeId?: Maybe<Scalars['ID']['output']>;
@@ -25542,6 +26543,34 @@ export type EventfullyManagedFloorPlanList = {
25542
26543
  items: Array<EventfullyManagedFloorPlan>;
25543
26544
  total: Scalars['Int']['output'];
25544
26545
  };
26546
+ /** Where a forecast's show rate comes from. PRIOR_ONLY means the workspace has no past event with check-in data, so the number is a baseline assumption. */
26547
+ export declare enum EventfullyManagedForecastBasis {
26548
+ Blended = "BLENDED",
26549
+ History = "HISTORY",
26550
+ PriorOnly = "PRIOR_ONLY"
26551
+ }
26552
+ /** How much history backs a forecast. */
26553
+ export declare enum EventfullyManagedForecastConfidence {
26554
+ High = "HIGH",
26555
+ Low = "LOW",
26556
+ Medium = "MEDIUM"
26557
+ }
26558
+ export type EventfullyManagedForecastInput = {
26559
+ /** Organiser's own baseline show rate (0 to 1), used in place of the default priors (0.8 paid, 0.55 free) wherever history is thin. */
26560
+ baselineShowRate?: InputMaybe<Scalars['Float']['input']>;
26561
+ /** How many recent past events to learn from (1 to 50, default 20). */
26562
+ lookbackEvents?: InputMaybe<Scalars['Int']['input']>;
26563
+ /** Persist the decision to AnalyticsSnapshot.data (default true). */
26564
+ persist?: InputMaybe<Scalars['Boolean']['input']>;
26565
+ };
26566
+ /** One input the engine used, so the organiser can see why it decided. */
26567
+ export type EventfullyManagedForecastSignal = {
26568
+ __typename?: 'EventfullyManagedForecastSignal';
26569
+ detail?: Maybe<Scalars['String']['output']>;
26570
+ key: Scalars['String']['output'];
26571
+ label: Scalars['String']['output'];
26572
+ value: Scalars['Float']['output'];
26573
+ };
25545
26574
  export type EventfullyManagedGetEntityTagsInput = {
25546
26575
  entityId: Scalars['ID']['input'];
25547
26576
  entityType: Scalars['String']['input'];
@@ -25715,6 +26744,16 @@ export type EventfullyManagedNetworkingProfileList = {
25715
26744
  items: Array<EventfullyManagedNetworkingProfile>;
25716
26745
  total: Scalars['Int']['output'];
25717
26746
  };
26747
+ export type EventfullyManagedNoShowPrediction = {
26748
+ __typename?: 'EventfullyManagedNoShowPrediction';
26749
+ coldStart: Scalars['Boolean']['output'];
26750
+ coldStartReason?: Maybe<Scalars['String']['output']>;
26751
+ confidence: EventfullyManagedForecastConfidence;
26752
+ engine: EventfullyManagedAiDecisionEngine;
26753
+ eventId: Scalars['ID']['output'];
26754
+ eventNoShowRate: Scalars['Float']['output'];
26755
+ sessions: Array<EventfullyManagedSessionNoShow>;
26756
+ };
25718
26757
  export type EventfullyManagedPromoCode = {
25719
26758
  __typename?: 'EventfullyManagedPromoCode';
25720
26759
  code: Scalars['String']['output'];
@@ -25811,6 +26850,75 @@ export type EventfullyManagedSessionConflict = {
25811
26850
  type: Scalars['String']['output'];
25812
26851
  venueId?: Maybe<Scalars['ID']['output']>;
25813
26852
  };
26853
+ export type EventfullyManagedSessionForecast = {
26854
+ __typename?: 'EventfullyManagedSessionForecast';
26855
+ /** Learned draw of this session type relative to an equal split (1 = equal share). */
26856
+ captureFactor: Scalars['Float']['output'];
26857
+ checkedInSoFar: Scalars['Int']['output'];
26858
+ /** Sessions running at the same time, this one included. */
26859
+ concurrency: Scalars['Int']['output'];
26860
+ endsAt: Scalars['DateTime']['output'];
26861
+ high: Scalars['Int']['output'];
26862
+ low: Scalars['Int']['output'];
26863
+ predictedAttendance: Scalars['Int']['output'];
26864
+ sessionId: Scalars['ID']['output'];
26865
+ sessionType: Scalars['String']['output'];
26866
+ startsAt: Scalars['DateTime']['output'];
26867
+ title: Scalars['String']['output'];
26868
+ };
26869
+ export type EventfullyManagedSessionNoShow = {
26870
+ __typename?: 'EventfullyManagedSessionNoShow';
26871
+ drivers: Array<Scalars['String']['output']>;
26872
+ /** The session's equal split of registrants, if everyone came. */
26873
+ expectedDemand: Scalars['Int']['output'];
26874
+ predictedAttendance: Scalars['Int']['output'];
26875
+ predictedNoShowRate: Scalars['Float']['output'];
26876
+ sessionId: Scalars['ID']['output'];
26877
+ sessionType: Scalars['String']['output'];
26878
+ title: Scalars['String']['output'];
26879
+ };
26880
+ /** BOFF-3764 — one ranked session for one attendee, with the explanation. */
26881
+ export type EventfullyManagedSessionRecommendation = {
26882
+ __typename?: 'EventfullyManagedSessionRecommendation';
26883
+ /** The attendee interests, asks or industry the session matched. */
26884
+ matchedTopics: Array<Scalars['String']['output']>;
26885
+ /** Human-readable explanation of why the session was recommended. Never empty. */
26886
+ reason: Scalars['String']['output'];
26887
+ /** 0-100 overlap score; never 0 (zero-signal sessions are not recommended). */
26888
+ score: Scalars['Int']['output'];
26889
+ /** capacity minus current session check-ins; null when the session has no capacity. */
26890
+ seatsRemaining?: Maybe<Scalars['Int']['output']>;
26891
+ session: EventfullyManagedEventSession;
26892
+ };
26893
+ /** BOFF-3764 — why a session recommendation list is empty. Null whenever items is non-empty. */
26894
+ export declare enum EventfullyManagedSessionRecommendationEmptyReason {
26895
+ /** The attendee's profile lists no interests, asks or industry. */
26896
+ NoInterests = "NO_INTERESTS",
26897
+ /** The attendee has no networking profile to read interests from. */
26898
+ NoProfile = "NO_PROFILE",
26899
+ /** No upcoming session overlaps the attendee's interests. */
26900
+ NoSignal = "NO_SIGNAL",
26901
+ /** The event has no upcoming, open sessions the attendee has not already attended. */
26902
+ NoUpcomingSessions = "NO_UPCOMING_SESSIONS"
26903
+ }
26904
+ export type EventfullyManagedSessionRecommendationList = {
26905
+ __typename?: 'EventfullyManagedSessionRecommendationList';
26906
+ emptyReason?: Maybe<EventfullyManagedSessionRecommendationEmptyReason>;
26907
+ items: Array<EventfullyManagedSessionRecommendation>;
26908
+ total: Scalars['Int']['output'];
26909
+ };
26910
+ /** Show rate for one ticket-tier x registration-lead-time cell. */
26911
+ export type EventfullyManagedShowRateCell = {
26912
+ __typename?: 'EventfullyManagedShowRateCell';
26913
+ currentRegistered: Scalars['Int']['output'];
26914
+ historicalAttended: Scalars['Int']['output'];
26915
+ historicalRegistered: Scalars['Int']['output'];
26916
+ /** LATE (7 days or less before the event), MID (8 to 30), EARLY (over 30) or UNKNOWN. */
26917
+ leadBucket: Scalars['String']['output'];
26918
+ showRate: Scalars['Float']['output'];
26919
+ /** PAID or FREE. */
26920
+ tier: Scalars['String']['output'];
26921
+ };
25814
26922
  export type EventfullyManagedSimpleEntity = {
25815
26923
  __typename?: 'EventfullyManagedSimpleEntity';
25816
26924
  createdAt: Scalars['DateTime']['output'];
@@ -39803,6 +40911,35 @@ export type HealthyBowlWorker = {
39803
40911
  piecePrice?: Maybe<Scalars['Float']['output']>;
39804
40912
  skills: Array<Scalars['String']['output']>;
39805
40913
  };
40914
+ /** Which side of the marketplace an activation step measures. */
40915
+ export declare enum HokActivationAudience {
40916
+ Creator = "CREATOR",
40917
+ Talent = "TALENT",
40918
+ Viewer = "VIEWER"
40919
+ }
40920
+ export type HokActivationFunnel = {
40921
+ __typename?: 'HokActivationFunnel';
40922
+ /** Steps that have happened at least once. */
40923
+ completedSteps: Scalars['Int']['output'];
40924
+ /** Calendar-month bucket ("YYYY-MM") the numbers are scoped to, or null for all-time. */
40925
+ period?: Maybe<Scalars['String']['output']>;
40926
+ /** Steps in the canonical funnel order: viewer first, then creator, then talent. */
40927
+ steps: Array<HokActivationStep>;
40928
+ totalSteps: Scalars['Int']['output'];
40929
+ };
40930
+ /** One activation event, aggregated over the workspace. */
40931
+ export type HokActivationStep = {
40932
+ __typename?: 'HokActivationStep';
40933
+ audience: HokActivationAudience;
40934
+ /** How many times the event happened. */
40935
+ count: Scalars['Int']['output'];
40936
+ /** Analytics dictionary event name, e.g. hookmovies.title.created. */
40937
+ event: Scalars['String']['output'];
40938
+ firstOccurredAt?: Maybe<Scalars['DateTime']['output']>;
40939
+ lastOccurredAt?: Maybe<Scalars['DateTime']['output']>;
40940
+ /** How many distinct users performed (or, for entitlement.granted, received) the event. */
40941
+ uniqueActors: Scalars['Int']['output'];
40942
+ };
39806
40943
  /** A single (bucket-key -> aggregate) row for a device/territory/language breakdown. */
39807
40944
  export type HokAnalyticsBucket = {
39808
40945
  __typename?: 'HokAnalyticsBucket';
@@ -40200,6 +41337,22 @@ export type HokDataExport = {
40200
41337
  /** All user-linked HookMovies data as a structured JSON object. */
40201
41338
  payload: Scalars['JSON']['output'];
40202
41339
  };
41340
+ /** The onboarding sample data loaded into a workspace. */
41341
+ export type HokDemoData = {
41342
+ __typename?: 'HokDemoData';
41343
+ auditionId?: Maybe<Scalars['ID']['output']>;
41344
+ /** False when the sample data was already loaded and is returned unchanged. */
41345
+ created: Scalars['Boolean']['output'];
41346
+ productionId?: Maybe<Scalars['ID']['output']>;
41347
+ studioId: Scalars['ID']['output'];
41348
+ /** The sample feature film first, then the sample series. */
41349
+ titleIds: Array<Scalars['ID']['output']>;
41350
+ };
41351
+ export type HokDemoDataRemoval = {
41352
+ __typename?: 'HokDemoDataRemoval';
41353
+ /** Rows soft-deleted across the sample studio, people, titles, production and audition. */
41354
+ removed: Scalars['Int']['output'];
41355
+ };
40203
41356
  export type HokDispute = {
40204
41357
  __typename?: 'HokDispute';
40205
41358
  applicantId: Scalars['ID']['output'];
@@ -40602,6 +41755,32 @@ export declare enum HokOfferStatus {
40602
41755
  Sent = "SENT",
40603
41756
  Withdrawn = "WITHDRAWN"
40604
41757
  }
41758
+ export type HokOnboardingStatus = {
41759
+ __typename?: 'HokOnboardingStatus';
41760
+ completedSteps: Scalars['Int']['output'];
41761
+ /** Whether the onboarding sample data is currently loaded in this workspace. */
41762
+ demoDataLoaded: Scalars['Boolean']['output'];
41763
+ steps: Array<HokOnboardingStep>;
41764
+ totalSteps: Scalars['Int']['output'];
41765
+ };
41766
+ export type HokOnboardingStep = {
41767
+ __typename?: 'HokOnboardingStep';
41768
+ completed: Scalars['Boolean']['output'];
41769
+ key: HokOnboardingStepKey;
41770
+ };
41771
+ /** A getting-started checklist step, in the order the checklist shows them. */
41772
+ export declare enum HokOnboardingStepKey {
41773
+ /** The workspace created its first title. */
41774
+ CreateTitle = "CREATE_TITLE",
41775
+ /** The workspace opened a casting audition. */
41776
+ OpenAudition = "OPEN_AUDITION",
41777
+ /** The workspace published a title. */
41778
+ PublishTitle = "PUBLISH_TITLE",
41779
+ /** The caller saved their language and content preferences. */
41780
+ SetPreferences = "SET_PREFERENCES",
41781
+ /** The workspace started a production. */
41782
+ StartProduction = "START_PRODUCTION"
41783
+ }
40605
41784
  export type HokPageInfo = {
40606
41785
  __typename?: 'HokPageInfo';
40607
41786
  cursor?: Maybe<Scalars['String']['output']>;
@@ -43658,6 +44837,8 @@ export type IntFeed = {
43658
44837
  format?: Maybe<Scalars['String']['output']>;
43659
44838
  id: Scalars['ID']['output'];
43660
44839
  ingestCount: Scalars['Int']['output'];
44840
+ /** Hourly ingest counts for the last 24 hours, oldest first. Always 24 buckets, zero-filled for hours with no ingest ticks. */
44841
+ ingestHistory: Array<IntFeedIngestBucket>;
43661
44842
  lastIngestAt?: Maybe<Scalars['DateTime']['output']>;
43662
44843
  name: Scalars['String']['output'];
43663
44844
  pausedAt?: Maybe<Scalars['DateTime']['output']>;
@@ -43674,6 +44855,12 @@ export type IntFeedConnection = {
43674
44855
  items: Array<IntFeed>;
43675
44856
  pageInfo: IntPageInfo;
43676
44857
  };
44858
+ /** One hourly bucket of a feed's ingest activity, for the health-dashboard sparkline. */
44859
+ export type IntFeedIngestBucket = {
44860
+ __typename?: 'IntFeedIngestBucket';
44861
+ bucketStart: Scalars['DateTime']['output'];
44862
+ count: Scalars['Int']['output'];
44863
+ };
43677
44864
  export declare enum IntFeedStatus {
43678
44865
  Connected = "CONNECTED",
43679
44866
  Disconnected = "DISCONNECTED",
@@ -44018,6 +45205,11 @@ export type IntegrationConnection = {
44018
45205
  * provider's default method (every connection created before multi-auth).
44019
45206
  */
44020
45207
  authMethodKey?: Maybe<Scalars['String']['output']>;
45208
+ /**
45209
+ * Whether the caller could run this connection in a workflow they own. False for a private
45210
+ * connection an administrator only sees by administering it. Null for services and apps.
45211
+ */
45212
+ canUse?: Maybe<Scalars['Boolean']['output']>;
44021
45213
  /**
44022
45214
  * Opaque cross-service reference to the bot channel in global-channel-svc
44023
45215
  * that this personal connection is linked to. Null until the user links
@@ -44041,16 +45233,26 @@ export type IntegrationConnection = {
44041
45233
  lastHealthCheck?: Maybe<Scalars['DateTime']['output']>;
44042
45234
  lastUsedAt?: Maybe<Scalars['DateTime']['output']>;
44043
45235
  metadata?: Maybe<Scalars['JSON']['output']>;
45236
+ /** How the caller reaches this connection. Null for service callers. */
45237
+ myAccess?: Maybe<ConnectionAccess>;
44044
45238
  name: Scalars['String']['output'];
44045
45239
  /** Opaque reference to the organization that owns the linked channel. */
44046
45240
  organizationId?: Maybe<Scalars['String']['output']>;
45241
+ /**
45242
+ * The person the connection belongs to. Starts as createdBy; a workspace administrator can hand it
45243
+ * to someone else.
45244
+ */
45245
+ ownerId: Scalars['String']['output'];
44047
45246
  provider: IntegrationProvider;
44048
45247
  providerId: Scalars['ID']['output'];
45248
+ /** The people, groups and projects the connection is shared with */
45249
+ shares: Array<ConnectionShare>;
44049
45250
  status: ConnectionStatus;
44050
45251
  /** Structured tag assignments via wspace-tags-svc */
44051
45252
  tagAssignments: Array<IntegrationConnectionTagAssignment>;
44052
45253
  updatedAt: Scalars['DateTime']['output'];
44053
45254
  vaultId?: Maybe<Scalars['String']['output']>;
45255
+ visibility: ConnectionVisibility;
44054
45256
  /**
44055
45257
  * Workspace ID that owns this connection. Set at connection-creation time
44056
45258
  * from context.workspace.id. Used by global-channel-svc to forward the
@@ -52841,14 +54043,43 @@ export declare enum MtwStockObservationStatus {
52841
54043
  */
52842
54044
  export type MtwTrackingAlert = {
52843
54045
  __typename?: 'MtwTrackingAlert';
54046
+ /** True when an operator acknowledged this alert against the current promise. */
54047
+ acknowledged: Scalars['Boolean']['output'];
54048
+ acknowledgedAt?: Maybe<Scalars['DateTime']['output']>;
54049
+ acknowledgedBy?: Maybe<Scalars['ID']['output']>;
52844
54050
  alertType: Scalars['String']['output'];
54051
+ /** Stable alert id, `<shipmentId>:<alertType>`. */
54052
+ id: Scalars['ID']['output'];
52845
54053
  message: Scalars['String']['output'];
52846
54054
  predictedDelivery?: Maybe<Scalars['DateTime']['output']>;
54055
+ /** The shipment's promised delivery (estimatedDelivery) the alert was raised against. */
54056
+ promisedDelivery?: Maybe<Scalars['DateTime']['output']>;
52847
54057
  riskScore?: Maybe<Scalars['Int']['output']>;
52848
54058
  shipmentId: Scalars['ID']['output'];
52849
54059
  shipmentNumber: Scalars['String']['output'];
52850
54060
  signals?: Maybe<Array<MtwRiskSignalCode>>;
52851
54061
  };
54062
+ /**
54063
+ * A persisted acknowledgement of a tracking alert. It holds while the shipment
54064
+ * keeps the promised delivery it was recorded against; re-promising the shipment
54065
+ * re-raises the alert.
54066
+ */
54067
+ export type MtwTrackingAlertAcknowledgement = {
54068
+ __typename?: 'MtwTrackingAlertAcknowledgement';
54069
+ acknowledged: Scalars['Boolean']['output'];
54070
+ acknowledgedAt: Scalars['DateTime']['output'];
54071
+ acknowledgedBy: Scalars['ID']['output'];
54072
+ alertType: MtwTrackingAlertType;
54073
+ /** Same id as the acknowledged `MtwTrackingAlert`. */
54074
+ id: Scalars['ID']['output'];
54075
+ promisedDelivery?: Maybe<Scalars['DateTime']['output']>;
54076
+ shipmentId: Scalars['ID']['output'];
54077
+ };
54078
+ /** Alert types `trackingAlerts` raises; used to acknowledge one. */
54079
+ export declare enum MtwTrackingAlertType {
54080
+ AtRisk = "AT_RISK",
54081
+ Delayed = "DELAYED"
54082
+ }
52852
54083
  export type MtwTrackingEvent = {
52853
54084
  __typename?: 'MtwTrackingEvent';
52854
54085
  context?: Maybe<OperationContext>;
@@ -53167,6 +54398,7 @@ export type Mutation = {
53167
54398
  acknowledgeHealthyBowlSensorAlert: SensorAlert;
53168
54399
  /** Acknowledge (mark read) a stressed zone. */
53169
54400
  acknowledgeHealthyBowlStressedZone: HbStressedZone;
54401
+ acknowledgeMtwTrackingAlert: MtwTrackingAlertAcknowledgement;
53170
54402
  /** Acquire a lock on a file */
53171
54403
  acquireFileLock: AcquireLockResponse;
53172
54404
  /** Take a workflow's edit lease when it is free, or renew it when this session holds it. Otherwise report the holder. */
@@ -53641,6 +54873,8 @@ export type Mutation = {
53641
54873
  buiFailCourseKnowledgeChange: Scalars['Boolean']['output'];
53642
54874
  buiGradeSubmission: BuiSubmission;
53643
54875
  buiIssueCertificate: BuiCertificate;
54876
+ /** Load the onboarding demo content (sample course with modules, lessons, a graded assessment, a skill and a cohort) and enroll the caller in it. Idempotent. */
54877
+ buiLoadDemoContent: BuiDemoContentResult;
53644
54878
  buiPublishAssessment: BuiAssessment;
53645
54879
  /** Publish a course through its authoring lifecycle (validated transitions). */
53646
54880
  buiPublishCourse: BuiCourse;
@@ -53648,8 +54882,12 @@ export type Mutation = {
53648
54882
  buiRecordLessonProgress: BuiLessonProgress;
53649
54883
  /** Record progress only for the caller's active enrollment and a lesson in that course. */
53650
54884
  buiRecordMyLessonProgress: BuiLessonProgress;
54885
+ /** BOFF-9690: records a batch (max 50) of signal episodes the learner's browser observed during an APPROVED, unexpired proctored attempt. Owner-scoped like `buiReportProctoringViolation` (a learner can only write to their OWN session). Lockdown signals also increment `violationCount`; AI signals require the assessment's `aiProctoringEnabled` and the learner's recorded consent. Never changes `status`. */
54886
+ buiRecordProctoringSignals: BuiProctoringSession;
53651
54887
  /** Workspace admin registers a new LMS platform to launch into this tool. */
53652
54888
  buiRegisterLtiPlatform: BuiLtiPlatform;
54889
+ /** Remove the onboarding demo content. Returns false when none is loaded. */
54890
+ buiRemoveDemoContent: Scalars['Boolean']['output'];
53653
54891
  /** Records a best-effort browser-lockdown violation (tab-hidden/blur) the client observed during a proctored attempt. Owner-scoped, same as `buiSubmitProctoringIdentity` — never changes `status` on its own. */
53654
54892
  buiReportProctoringViolation: BuiProctoringSession;
53655
54893
  buiRetryCourseAssistantDelivery?: Maybe<BuiCourseAssistantTurn>;
@@ -53657,7 +54895,7 @@ export type Mutation = {
53657
54895
  buiReviewGradeSuggestion: BuiGradeSuggestion;
53658
54896
  /** Learner marks a previously generated next-lesson suggestion ACCEPTED or REJECTED. Type-B self-scoped, mirrors `buiSuggestNextLesson`. */
53659
54897
  buiReviewNextLessonSuggestion: BuiNextLessonSuggestion;
53660
- /** BOFF-4431 (3/3): instructor/admin reviews an UNDER_REVIEW session and approves or rejects it. Only an APPROVED, unexpired session satisfies the `requiresProctoring` gate on `buiSubmitAssessment`. */
54898
+ /** BOFF-4431 (3/3): instructor/admin reviews an UNDER_REVIEW session and approves or rejects it. Only an APPROVED, unexpired session satisfies the `requiresProctoring` gate on `buiSubmitAssessment`. Gated on the review-queue permission (`list`), not `update`: every learner holds `update` so they can submit their own identity, and must not be able to approve someone else's. */
53661
54899
  buiReviewProctoringSession: BuiProctoringSession;
53662
54900
  /** Educator override of one AI tutor answer (BOFF-9663): annotate, correct, redact, or clear a previous review. The original answer is never overwritten; each action is appended to the answer's review history. Restricted to EDITOR+ via wspace-rbac-svc action-catalog `buildmyiq-tutor:update` (viewerDefault: false), so learners cannot alter answers. Later tutor turns in the same session see the reviewed version. */
53663
54901
  buiReviewTutorAnswer: BuiTutorMessage;
@@ -53682,6 +54920,12 @@ export type Mutation = {
53682
54920
  buiSuggestGrade: BuiGradeSuggestion;
53683
54921
  /** Adaptive sequencing: decides the calling learner's next lesson from their own `BuiLessonProgress` trail across the enrolled course's lesson sequence, plus a pacing hint derived from recent graded `BuiSubmission` scores in that course (same 3-bucket mastery signal the AI tutor uses, see `IntelligenceService.computeMasteryBucket`). Deterministic — a curriculum-order "resume where you left off" walk, not an LLM call (see `IntelligenceService` doc comment for why this pass scoped it that way). Persists a `BuiAiSuggestion` (kind: NEXT_LESSON) so the decision is auditable; never writes `BuiLessonProgress`/`BuiEnrollment` itself. Type-B self-scoped: `enrollmentId` is a client arg, but the resolver owner-filters by the authenticated actor — mirrors `buiMyEnrollment`. */
53684
54922
  buiSuggestNextLesson: BuiNextLessonSuggestion;
54923
+ /** Service-only (BOFF-3134): upsert the canonical certificate mirroring a source product's certificate. The course must have been synced first. */
54924
+ buiSyncExternalCertificate: BuiCertificate;
54925
+ /** Service-only (BOFF-3134): upsert the canonical course mirroring a source product's course. Returns the canonical BuiCourse. */
54926
+ buiSyncExternalCourse: BuiCourse;
54927
+ /** Service-only (BOFF-3134): upsert the canonical enrollment mirroring a source product's enrollment. The course must have been synced first. */
54928
+ buiSyncExternalEnrollment: BuiEnrollment;
53685
54929
  /** Real AGS score-publish for one graded submission to the LMS gradebook via the given resource link's line item. Never re-grades — the submission must already be graded (`buiGradeSubmission`/`buiAutoScoreSubmission`). */
53686
54930
  buiSyncLtiGrade: BuiLtiGradeSync;
53687
54931
  /** Names and Role Provisioning Services roster sync: fetches the LMS course roster for this LTI placement and upserts `BuiLtiContextMembership` rows. */
@@ -53914,9 +55158,14 @@ export type Mutation = {
53914
55158
  colUntagMemory: Scalars['Boolean']['output'];
53915
55159
  colUntagPerson: Scalars['Boolean']['output'];
53916
55160
  colUntagStory: Scalars['Boolean']['output'];
55161
+ colUpdateEvent: ColEvent;
53917
55162
  colUpdateFamilyTree: ColFamilyTree;
55163
+ /** Change a member's tree role and/or linked Person (BOFF-3972). Beyond the workspace-level directive below, the service layer requires the caller to be an ACTIVE OWNER/STEWARD of the tree, forbids changing one's own role, and reserves granting or changing OWNER for tree OWNERs. */
55164
+ colUpdateMembership: ColMembership;
53918
55165
  colUpdateMemory: ColMemory;
53919
55166
  colUpdatePerson: ColPerson;
55167
+ colUpdateRelationship: ColRelationship;
55168
+ colUpdateStory: ColStory;
53920
55169
  /** Hand a box to the member who came for it. The ONLY thing that records a collection. Dropping the load at a stand is the box ARRIVING, not being collected — that marks every box `AWAITING_COLLECTION`. This is the second event, one member at a time, and it is what writes `DELIVERED` and `collectedAt` for a collected box. Refused unless the box is `AWAITING_COLLECTION`: collecting a box still on the farm would record a handover that did not happen, and collecting one twice would quietly move its collection time. The error names the state the box is actually in, because "cannot collect" alone says nothing about what to do next. A HOME_DELIVERY box is refused too — it is handed over at the door, and its route stop already records that. */
53921
55170
  collectHealthyBowlCsaPickupBox: CsaDelivery;
53922
55171
  comAddComment: ComComment;
@@ -54076,6 +55325,8 @@ export type Mutation = {
54076
55325
  cooAddLookbookEntry: CooLookbookEntry;
54077
55326
  /** Add a piece to the calling shopper's cart (merges into an existing line for the same variant). */
54078
55327
  cooAddToCart: CooCart;
55328
+ /** Ranked, cited findings about the calling shopper's wardrobe: occasions and categories it cannot cover, palette colours it lacks, and re-wear signals (dormant pieces, never-worn pieces, cost-per-wear outliers). */
55329
+ cooAnalyzeWardrobeGaps: CooWardrobeGapAnalysis;
54079
55330
  /** Approve a brand storefront that is pending review (PENDING_REVIEW -> PUBLISHED). */
54080
55331
  cooApproveBrand: CooBrand;
54081
55332
  /** Approve a shopper's return: refunds the brand's pieces of the order to the shopper (reversing the creator commissions on them) and marks the request APPROVED. Returns the order as the brand now sees it. */
@@ -54100,6 +55351,8 @@ export type Mutation = {
54100
55351
  cooCreateLookbook: CooLookbook;
54101
55352
  cooCreateStyleItem: CooStyleItem;
54102
55353
  cooCreateWardrobeItem: CooWardrobeItem;
55354
+ /** Propose which of a brand's DRAFT style items form a coherent story for a season, flag publish blockers and suggest an order. Advisory only. */
55355
+ cooCurateCollection: CooCollectionCuration;
54103
55356
  /** Decline a shopper's return with a note. The shopper is notified. Returns the order as the brand now sees it. */
54104
55357
  cooDeclineReturnRequest: CooBrandOrder;
54105
55358
  /** Soft-delete a collaboration that is still PROPOSED (sets deletedAt; excluded from list/read queries thereafter). Once a collaboration has moved past PROPOSED, use cooTransitionCollaboration(CANCELLED) instead — deleting a collaboration the other party has already acted on would erase real history. */
@@ -54140,6 +55393,10 @@ export type Mutation = {
54140
55393
  cooSaveLook: CooLook;
54141
55394
  /** Turn per-variant stock tracking on or off for a style item and set the stock of its variants (BOFF-9637). With tracking on, checkout reserves stock and the piece's ACTIVE / OUT_OF_STOCK status follows it. */
54142
55395
  cooSetStyleItemInventory: CooStyleItem;
55396
+ /** Rank creators by aesthetic fit with a brand's published catalog and draft a PROPOSED collaboration brief for each. Advisory only: nothing is created and no collaboration changes state. */
55397
+ cooSuggestCollaborationMatch: CooCollaborationMatchResult;
55398
+ /** Compose a draft outfit for an occasion from the calling shopper's own wardrobe (size-respecting, palette-aware, backed by real look pairings), plus optional catalog pieces for any slot the wardrobe cannot fill. Never saves or publishes anything. */
55399
+ cooSuggestOutfit: CooOutfitSuggestion;
54143
55400
  /** Settle a collaboration fee against global-billing: marks it PAID only when billing reports the brand's payment SUCCEEDED, then books the creator's earning. Safe to call at any time. */
54144
55401
  cooSyncCollaborationPayment: CooCollaborationPayout;
54145
55402
  /** Settle one of the caller's orders against global-billing: re-reads the authoritative payment and marks the order PAID only when billing reports it SUCCEEDED. Safe to call at any time. */
@@ -54177,6 +55434,12 @@ export type Mutation = {
54177
55434
  copyFile: File;
54178
55435
  cosAddRunStep: CosPipelineStep;
54179
55436
  cosAddSchemaField: CosSchemaField;
55437
+ /** Draft a release (title, abstract, authors, licence, version, datasets) from a notebook, its completed analyses and the datasets in its lineage. Writes nothing; cosCreateRelease and cosPublishRelease stay human actions. */
55438
+ cosAiDraftRelease: CosReleaseDraft;
55439
+ /** Propose a schema field per column of a dataset: logical type, unit, nullability, position and a drafted provenance note. Reads `sample` when given, else `context.schemaSample` on the dataset, else the columns declared in the source connector config. Writes nothing. */
55440
+ cosAiProposeSchemaFields: CosSchemaFieldProposal;
55441
+ /** Recommend what to do with a finished pipeline run (PROMOTE, RERUN_WITH_PARAMS, QUARANTINE_DATASET or FLAG_SOURCE_DEGRADED) from its metrics and ordered step telemetry, with the rationale and evidence. A run that is still QUEUED or RUNNING returns CONFLICT. Writes nothing. */
55442
+ cosAiTriageRun: CosRunTriage;
54180
55443
  /** Soft-delete a collection (sets deletedAt). Datasets keep their collectionId but the archived collection no longer lists or resolves. */
54181
55444
  cosArchiveCollection: Scalars['Boolean']['output'];
54182
55445
  cosArchiveDataset: Scalars['Boolean']['output'];
@@ -54185,6 +55448,8 @@ export type Mutation = {
54185
55448
  cosArchiveSource: Scalars['Boolean']['output'];
54186
55449
  /** Record the terminal outcome of an analysis run (COMPLETED / FAILED). */
54187
55450
  cosCompleteAnalysis: CosAnalysis;
55451
+ /** Finish one step of a run with its status, outputs, error and the datasets it produced (`producedDatasetIds`). A step that has already finished returns CONFLICT. */
55452
+ cosCompleteRunStep: CosPipelineStep;
54188
55453
  cosCreateCollection: CosCollection;
54189
55454
  cosCreateDataset: CosDataset;
54190
55455
  cosCreateNotebook: CosNotebook;
@@ -54202,6 +55467,8 @@ export type Mutation = {
54202
55467
  cosPublishDataset: CosDataset;
54203
55468
  /** Publish a citable release and stamp it with a DOI. */
54204
55469
  cosPublishRelease: CosRelease;
55470
+ /** Record run-level telemetry (rows in/out, anomalies flagged, warnings, error message). Merges into `metrics`; fields not sent are kept. */
55471
+ cosRecordRunTelemetry: CosPipelineRun;
54205
55472
  cosRevokeAccess: CosDataAccessGrant;
54206
55473
  cosRunAnalysis: CosAnalysis;
54207
55474
  /** Executes a RASTER_CALC (NDVI band-math) step synchronously against two co-registered single-band GeoTIFF rasters (NIR + RED), base64-encoded. Computes per-pixel NDVI = (NIR-RED)/(NIR+RED) via real GeoTIFF parsing, persisting summary statistics and a bounded preview grid as step lineage (`outputs`). Only NDVI band math is implemented today — REPROJECT, TILE, and ZONAL_STATS are recognized CosStepKind values with no execution backend yet (see BOFF-4355). */
@@ -54721,7 +55988,10 @@ export type Mutation = {
54721
55988
  createVibecontrolsScorecardTemplate: VibecontrolsScorecardTemplate;
54722
55989
  /** Create a new assignable tag (inline creation from a picker) */
54723
55990
  createVibecontrolsTag: AvailableTag;
54724
- /** Create a visibility rule for a resource. Auto-registers the resource if not already registered. */
55991
+ /**
55992
+ * Create a visibility rule for a resource.
55993
+ * Auto-registers the resource if not already registered.
55994
+ */
54725
55995
  createVisibilityRule: VisibilityRule;
54726
55996
  createVocabulary: TagVocabulary;
54727
55997
  createWarehouse: MtwWarehouse;
@@ -55267,7 +56537,7 @@ export type Mutation = {
55267
56537
  /** Disconnect a social media account (revoke tokens and mark disconnected) */
55268
56538
  disconnectHeadshotmarketingSocialAccount: HeadshotmarketingSocialAccount;
55269
56539
  disconnectHealthyBowlAccountingIntegration: HealthyBowlAccountingIntegration;
55270
- /** Disconnect a channel: further events from it are refused. Already captured events are kept. */
56540
+ /** Disconnect a channel: further events from it are refused. Already captured events are kept. For an OAuth-backed channel the integration connection is revoked as well. */
55271
56541
  disconnectTimeCampusCaptureChannel: TimeCampusCaptureChannel;
55272
56542
  dismissHealthyBowlComplianceFlag: ComplianceFlag;
55273
56543
  dismissRecommendation: TimeCampusRecommendation;
@@ -55412,6 +56682,8 @@ export type Mutation = {
55412
56682
  /** Escalate a stressed zone into an existing HealthyBowl Pest issue or a field activity (task). */
55413
56683
  escalateHealthyBowlStressedZone: HbStressedZoneEscalation;
55414
56684
  escalateIncident: Incident;
56685
+ /** Apply one suggested agenda fix (room, time or capacity) to a session. Refused unless confirm is true, and refused when the change would create a new room or speaker clash. */
56686
+ eventfullyManagedApplyAgendaFix: EventfullyManagedEventSession;
55415
56687
  eventfullyManagedCreateAttendee: EventfullyManagedAttendee;
55416
56688
  eventfullyManagedCreateBadgeTemplate: EventfullyManagedBadgeTemplate;
55417
56689
  eventfullyManagedCreateCheckInRecord: EventfullyManagedCheckInRecord;
@@ -55457,6 +56729,7 @@ export type Mutation = {
55457
56729
  eventfullyManagedEraseAttendeePersonalData: Scalars['Boolean']['output'];
55458
56730
  eventfullyManagedEraseLeadPersonalData: Scalars['Boolean']['output'];
55459
56731
  eventfullyManagedEraseSpeakerPersonalData: Scalars['Boolean']['output'];
56732
+ eventfullyManagedForecastAttendance: EventfullyManagedAttendanceForecast;
55460
56733
  /** Creates (or updates the template binding of) the tracking `Badge` row for a registration. Idempotent — re-calling for the same registration updates `templateId` rather than creating a duplicate (Badge.registrationId is unique) and never resets `generatedAt`/`printCount`. Falls back to the event's default `BadgeTemplate` (`isDefault: true`) when `templateId` is omitted; throws if neither is available. */
55461
56734
  eventfullyManagedGenerateBadge: EventfullyManagedBadge;
55462
56735
  /** BOFF-4321 — deterministic matchmaking engine (v1: interest/lookingFor overlap scoring — see NetworkingMatchingService doc comment for the exact formula and why this ships instead of an LLM call). Scores every pair of opted-in (non-private) NetworkingProfiles at the event, upserts a NetworkingMatch row per pair that clears the minimum-signal threshold (score > 0), and returns the full generated/updated set ordered by score desc. Never creates a Meeting — matches stay suggestions until an attendee books one explicitly. Returns an empty list (not fabricated pairings) when the event has fewer than 5 opted-in profiles. */
@@ -55467,9 +56740,12 @@ export type Mutation = {
55467
56740
  eventfullyManagedJoinVirtualSession: EventfullyManagedVirtualSession;
55468
56741
  /** Leave the calling actor's own active participation in a virtual session. Ends the session once the last participant leaves. */
55469
56742
  eventfullyManagedLeaveVirtualSession: Scalars['Boolean']['output'];
56743
+ eventfullyManagedPredictNoShows: EventfullyManagedNoShowPrediction;
55470
56744
  /** Promote another active participant to PRESENTER (WEBINAR mode). Only the session's HOST may promote; enforced in the resolver, not just the gateway's workspace-membership check. */
55471
56745
  eventfullyManagedPromoteVirtualPresenter: EventfullyManagedVirtualParticipant;
55472
56746
  eventfullyManagedPublishAnnouncement: EventfullyManagedSimpleEntity;
56747
+ eventfullyManagedResolveAgendaConflicts: EventfullyManagedAgendaConflictResolution;
56748
+ eventfullyManagedRightSizeSessions: EventfullyManagedCapacityRightSizing;
55473
56749
  eventfullyManagedScanCheckIn: EventfullyManagedCheckInRecord;
55474
56750
  eventfullyManagedSendCommunicationCampaign: EventfullyManagedSimpleEntity;
55475
56751
  /** Relay a WebRTC signaling message (SDP offer/answer or ICE candidate) from the calling actor to another active participant in the same session. Both parties must be active participants — enforced in the resolver, not just at the gateway. Fire-and-forget: delivered via `eventfullyManagedVirtualSignal` subscription. */
@@ -55603,7 +56879,7 @@ export type Mutation = {
55603
56879
  generateHealthyBowlDeliveryRoute: DeliveryRoute;
55604
56880
  /** One-click MRV report: assembles emissions + sequestration + credits + EUDR into a PDF/CSV via wspace-files-svc. */
55605
56881
  generateHealthyBowlMrvReport: HbMrvReport;
55606
- /** Run the deterministic recommendation rules over the caller's real data (idempotent per rule + ISO-week). */
56882
+ /** Run the deterministic recommendation rules over the caller's real data (idempotent per rule + ISO-week). When the workspace opted in to model recommendations, up to three AI candidates follow, generated at most once per ISO week and validated against the caller's preferences. */
55607
56883
  generateMyRecommendations: Array<TimeCampusRecommendation>;
55608
56884
  generateReport: ReportRun;
55609
56885
  /** Aggregates every billable, un-invoiced TimeEntry in the workspace (scoped to `projectIds` and the given period) by project + task, applying each entry's own hourly rate, and creates a DRAFT invoice with one line item per project/task group. The matched time entries are atomically marked as invoiced so they can never be billed twice. */
@@ -55899,6 +57175,8 @@ export type Mutation = {
55899
57175
  hokInviteGuardian: HokGuardianInviteResult;
55900
57176
  /** Join a watch party as the calling user (self-scoped, idempotent). */
55901
57177
  hokJoinWatchParty: HokWatchParty;
57178
+ /** Load the onboarding sample data (a studio, three people, a published film, a draft series, a production and an open audition). Idempotent: returns the existing sample data when it is already loaded. */
57179
+ hokLoadDemoData: HokDemoData;
55902
57180
  /** Record that the production paid the talent off-platform (non-custodial). */
55903
57181
  hokMarkOfferPaid: HokOffer;
55904
57182
  /** Mark alerts read; omit ids to mark every unread alert read. Returns the count updated. */
@@ -55917,6 +57195,8 @@ export type Mutation = {
55917
57195
  hokRecordPlaybackEvent: HokPlaybackEvent;
55918
57196
  /** Upsert the calling user's watch progress for a title/episode (self-scoped). */
55919
57197
  hokRecordProgress: HokWatchProgress;
57198
+ /** Soft-delete the onboarding sample data. Content the workspace created itself is never touched. */
57199
+ hokRemoveDemoData: HokDemoDataRemoval;
55920
57200
  hokRemoveScheduleBlock: Scalars['Boolean']['output'];
55921
57201
  /** File a moderation report against any catalog/engagement entity (self-scoped — any authenticated viewer may report). */
55922
57202
  hokReportContent: HokModerationFlag;
@@ -56025,7 +57305,11 @@ export type Mutation = {
56025
57305
  initializeNewWorkspace: InitializeNewWorkspaceResult;
56026
57306
  /** Initialize a newly created workspace with default configuration */
56027
57307
  initializeWorkspace: Workspace;
56028
- /** Service-internal workspace bootstrap: initializes default roles for a workspace by cloning system roles. Called by wspace-workspace-svc during cross-layer workspace sync, and safe to retry because it is idempotent. */
57308
+ /**
57309
+ * Service-internal workspace bootstrap: initializes default roles for a workspace
57310
+ * by cloning system roles. Called by wspace-workspace-svc during cross-layer
57311
+ * workspace sync, and safe to retry because it is idempotent.
57312
+ */
56029
57313
  initializeWorkspaceRoles: InitializeWorkspaceRolesResult;
56030
57314
  initiateOAuth: OAuthInitiationResult;
56031
57315
  /** Initiate a new upload session Returns session details and initial presigned URLs */
@@ -56421,6 +57705,8 @@ export type Mutation = {
56421
57705
  markNoShow: Booking;
56422
57706
  /** Pair a statement line with a farm Transaction. Neither row's own figures are altered. */
56423
57707
  matchHealthyBowlStatementLine: HealthyBowlBankStatementLine;
57708
+ /** Merge a custom or backfill skill into another skill: holders, job postings and relations move to the target, the source's names become target aliases, and the source is removed. Starter-taxonomy skills cannot be the source. */
57709
+ mergeCrewSkills: CrewSkillMergeResult;
56424
57710
  mergeTag: UniversalTag;
56425
57711
  mergeTags: UniversalTag;
56426
57712
  /** Mint a short-lived capability token bound to a single agent + scope. Replaces the long-lived agent API key for browser-bound iframe / terminal embeds. The svc proxies to the agent's `POST /api/agent/iframe-token` over the internal x-agent-api-key channel and returns the resulting HMAC-signed token + expiry. The token is bound to a path prefix derived from `scope` + `resourceId`: - TERMINAL_SESSION + resourceId=sessionId → `/terminal/<sessionId>` - IFRAME_PLUGIN + resourceId=pluginName → `/ui/<pluginName>` - PLAN_SESSION + resourceId=sessionId → `/plan/<sessionId>` - CODE_SERVER + resourceId=instance (optional, currently ignored) → `/code-server` - SCHEDULED_JOB + resourceId=sessionId → server-side only (rejected from public mint; see ScheduledPromptService which routes via the trusted back-channel) The final prefix is validated against the agent's published allow-list (`vibecontrols-agent` `iframe-tokens.ts::isValidIframePathPrefix`). Mints whose computed prefix is banned (`/api`, `/api/ai`, `/api/profiles`, …) are rejected with `BAD_USER_INPUT` so callers see a clear error instead of a downstream upstream-rejected 400. `ttlSeconds` is clamped to [1, 600], default 60. Caller is auth'd by RBAC (action: invoke, resource: agent, scope: wspace) and the agent must belong to the caller's workspace — cross-workspace mint attempts return FORBIDDEN. */
@@ -57255,6 +58541,8 @@ export type Mutation = {
57255
58541
  reconcileCourseKnowledgeImports: CourseKnowledgeImportRecovery;
57256
58542
  reconcileKnowledgeArtifactCleanup: KnowledgeVectorCleanupReceipt;
57257
58543
  reconcileKnowledgeVectorCleanup: KnowledgeVectorCleanupReceipt;
58544
+ /** Super admin: register or repair the sweep of every workspace with an opted-in member and remove unused ones. */
58545
+ reconcileTimeCampusTimeIntelligenceSchedules: TimeCampusTimeIntelligenceReconcileResult;
57258
58546
  recordAIPromptUsage: AiPrompt;
57259
58547
  /** Record multiple activities in batch */
57260
58548
  recordActivities: Array<ActivityLog>;
@@ -57355,7 +58643,11 @@ export type Mutation = {
57355
58643
  registerNode: NodeEndpointConfig;
57356
58644
  /** Register (upsert) a parser type in the GLOBAL ParserTypeConfig registry and, with autoInstall, make it the workspace's active version. Re-registering the same (parserTypeKey, parserVersion) refreshes its definition but preserves the operator-set status. TRUST BOUNDARY (same as registerWidgetType): the catalog write is global while RBAC is scoped to input.workspaceId. This is the store service path — restricted to service/super_admin actors at the public gateway. */
57357
58645
  registerParserType: ParserTypeRegistration;
57358
- /** Register a resource with custom RBAC configurations. Called automatically when the first override or visibility rule is created for a resource. Can also be called manually for explicit registration. */
58646
+ /**
58647
+ * Register a resource with custom RBAC configurations.
58648
+ * Called automatically when the first override or visibility rule is created for a resource.
58649
+ * Can also be called manually for explicit registration.
58650
+ */
57359
58651
  registerResource: Resource;
57360
58652
  /** Register an uploaded part */
57361
58653
  registerUploadedPart: UploadPartResponse;
@@ -57363,6 +58655,8 @@ export type Mutation = {
57363
58655
  registerVibecontrolsAgent: VibecontrolsAgent;
57364
58656
  /** Register (upsert) a widget type in the global WidgetTypeConfig registry. Refreshes definition fields; preserves operator-set status/isLatest on update (BOFF-2810 rule). TRUST BOUNDARY (BOFF-2858): this writes the GLOBAL WidgetTypeConfig table (no workspace partition), but RBAC is scoped to `input.workspaceId`. This is a DELIBERATE mirror of the FluidGrids node-registry contract: the registry is a shared catalog written by the trusted global-store-svc service actor on product install, not per-workspace author content. `workspaceId` scopes only the optional autoInstall side effect, not the catalog write. A caller with workspace-scoped create can therefore upsert a shared type definition; keep this mutation restricted to the store service path and do not surface it as a general end-user capability. Install-gating (WorkspaceWidgetInstallation) is what actually controls per-workspace visibility. */
57365
58657
  registerWidgetType: BigConsoleWidgetTypeRegistration;
58658
+ /** Re-publish this workspace's skills graph (skills, employees' directory cards, holdings and typed skill relations) and its directory records (departments, teams, projects, job postings, announcements) to the platform knowledge graph and global search. Idempotent: use it to backfill or repair the projection. */
58659
+ reindexCrewSkillsGraph: CrewSkillsGraphReindexReport;
57366
58660
  /** Reject a pending request with a reason. Refused for your own request. */
57367
58661
  rejectBotmanorAgentActivation: BotmanorAgentApprovalRequest;
57368
58662
  rejectChangeRequest: ChangeRequest;
@@ -57418,6 +58712,8 @@ export type Mutation = {
57418
58712
  removeCrewEnrollment: Scalars['Boolean']['output'];
57419
58713
  removeCrewInterview: Scalars['Boolean']['output'];
57420
58714
  removeCrewJobPosting: Scalars['Boolean']['output'];
58715
+ /** Stop asking for a skill on a job posting (also removes it from the legacy `requirements` strings). */
58716
+ removeCrewJobPostingSkill: Scalars['Boolean']['output'];
57421
58717
  removeCrewLeaveRequest: Scalars['Boolean']['output'];
57422
58718
  removeCrewOnboarding: Scalars['Boolean']['output'];
57423
58719
  removeCrewOnboardingTask: Scalars['Boolean']['output'];
@@ -57426,6 +58722,8 @@ export type Mutation = {
57426
58722
  removeCrewProject: Scalars['Boolean']['output'];
57427
58723
  /** Remove a skill nobody holds (CONFLICT while employees or candidates hold it). Its relations go with it. */
57428
58724
  removeCrewSkill: Scalars['Boolean']['output'];
58725
+ /** Remove one relation edge from the skills graph. */
58726
+ removeCrewSkillRelation: Scalars['Boolean']['output'];
57429
58727
  removeCrewTeam: Scalars['Boolean']['output'];
57430
58728
  removeCrewTimeEntry: Scalars['Boolean']['output'];
57431
58729
  removeCrewTrainingCourse: Scalars['Boolean']['output'];
@@ -57856,6 +59154,8 @@ export type Mutation = {
57856
59154
  /** Run a script inside the sandbox and capture its output. The sandbox must be running. The run is recorded (even on failure) so it can be reviewed before any real-target execution. */
57857
59155
  runSandboxScript: SandboxScriptRun;
57858
59156
  runSecurityScan: SecurityScanRun;
59157
+ /** Run the workspace's time-intelligence sweep. Called by wspace-scheduler-svc as this service's own service actor; a super admin may run it on demand. Any other caller is refused. */
59158
+ runTimeCampusTimeIntelligenceSweep: TimeCampusTimeIntelligenceSweep;
57859
59159
  /**
57860
59160
  * Append one completed turn (prompt + reply), creating the conversation on the first turn. NOT idempotent: a retried call appends a duplicate turn. This resolver writes both prompt and reply rows internally, so it performs manual quota checks/tracking instead of using a fixed-amount @usage directive.
57861
59161
  * @deprecated Use the my* assistant-history fields (BOFF-7335).
@@ -57921,8 +59221,12 @@ export type Mutation = {
57921
59221
  semPublishQuery: SemQuery;
57922
59222
  /** Record a connection health probe for a data source and reconcile its status. */
57923
59223
  semRecordConnection: SemConnection;
59224
+ /** Remove every demo record created by semSeedWorkspaceDemoData from the calling workspace. The user's own records are never touched. */
59225
+ semRemoveWorkspaceDemoData: SemRemoveWorkspaceDemoDataResult;
57924
59226
  /** Enqueue a federated execution of a saved query; returns the new run record in QUEUED status immediately. An async worker plans and executes it — poll semQueryRun(id) for the final status, plan summary and metrics. */
57925
59227
  semRunQuery: SemQueryRun;
59228
+ /** Seed the calling workspace with a labelled demo set: a sample Postgres connector and data source, a published semantic model (customers and orders, with dimensions, metrics and a relationship) and a saved query. Idempotent: a second call returns the existing demo records. */
59229
+ semSeedWorkspaceDemoData: SemSeedWorkspaceDemoDataResult;
57926
59230
  semSetAccessPolicyActive: SemAccessPolicy;
57927
59231
  /** Move a data source through its connectivity lifecycle (validated transitions). */
57928
59232
  semTransitionDataSource: SemDataSource;
@@ -57957,6 +59261,8 @@ export type Mutation = {
57957
59261
  setBigConsoleExternalEmbedsEnabled: Workspace;
57958
59262
  /** Set configuration */
57959
59263
  setConfiguration: Configuration;
59264
+ /** Ask for a skill on a job posting (required or nice-to-have, optional minimum proficiency). */
59265
+ setCrewJobPostingSkill: CrewJobPostingSkill;
57960
59266
  /** Assign (or clear, with rlsPolicyId: null) a dashboard's RLS policy. The policy must already exist in the same workspace as the dashboard. */
57961
59267
  setDashboardRlsPolicy: BigConsoleDashboard;
57962
59268
  /** Set the lifecycle status (AVAILABLE | DEPRECATED | DISABLED) of a registered version. Operator control; applies to every workspace. */
@@ -58062,6 +59368,12 @@ export type Mutation = {
58062
59368
  /** Share collection with users */
58063
59369
  shareCollection: CollectionShare;
58064
59370
  shareComponent: ShareGrant;
59371
+ /**
59372
+ * Set who can reach a connection: its visibility and the complete set of people, groups and
59373
+ * projects it is shared with, and optionally its owner. Allowed for the owner, editors it is
59374
+ * shared with, and workspace administrators; only administrators can change the owner.
59375
+ */
59376
+ shareConnection: IntegrationConnection;
58065
59377
  /** Share a dashboard with a user or group */
58066
59378
  shareDashboard: BigConsoleDashboardShare;
58067
59379
  shareDocs: ShareGrant;
@@ -58163,9 +59475,13 @@ export type Mutation = {
58163
59475
  subActivateWorkflow: SubWorkflow;
58164
59476
  /** Permanently purge all Subscriber Bot data for a workspace. Restricted to super_admin actors for GDPR right-to-erasure / offboarding workflows. Soft-deleted rows are removed when `includeSoftDeleted` is true. */
58165
59477
  subAdminPurgeWorkspace: SubAdminPurgeResult;
59478
+ /** Apply a PROPOSED decision through the relationship mutation it maps to. */
59479
+ subApplyDecision: SubDecisionResult;
58166
59480
  subApproveAdapter: SubAdapterSubmission;
58167
59481
  subArchiveProvider: Scalars['Boolean']['output'];
58168
59482
  subCancelRelationship: SubRelationship;
59483
+ /** Merge overlapping subscriptions onto one: optionally move the kept one to the bundled plan, then cancel the others. Destructive; confirm with the user first. */
59484
+ subConsolidateRelationships: SubConsolidationResult;
58169
59485
  subCreateAgent: SubAiAgent;
58170
59486
  subCreateAsset: SubAsset;
58171
59487
  /** Benchmark dataset: ingest a new observed price point. Tenant-scoped so each workspace owns its own contributions; the public read query UNIONs across workspaces (Phase 4). Available now so internal data seeding (Phase 1) and future Phase 2 ingestion pipelines have a stable write API. */
@@ -58181,14 +59497,27 @@ export type Mutation = {
58181
59497
  subCreateWorkflow: SubWorkflow;
58182
59498
  /** Disconnect a channel: ingestion stops and its discovery-source slot is released. The channel and its inbox history are kept; connecting the same address again with subCreateChannel reuses it. */
58183
59499
  subDisconnectChannel: SubCommunicationChannel;
59500
+ /** Hide a bundle suggestion (a SubOverlap id from subSavingsOverview) until its set of subscriptions changes. */
59501
+ subDismissBundle: Scalars['Boolean']['output'];
59502
+ subDismissDecision: SubDecision;
58184
59503
  subIngestMessage: SubInboxMessage;
58185
59504
  subMarkInvoicePaid: SubInvoice;
58186
59505
  subMarkMessageRead: SubInboxMessage;
58187
59506
  subModerateListing: SubMarketplaceReport;
59507
+ /** Recompute the health score of every ACTIVE and TRIAL relationship in the workspace from recorded usage, billing, pricing and overlap signals. Agent runs do this automatically before they evaluate. */
59508
+ subRecomputeHealthScores: SubHealthRecomputeResult;
59509
+ /** Register or repair the scheduled sweep of every workspace that has an enabled renewal, trial, cost or plan agent. */
59510
+ subReconcileAgentSchedules: SubAgentScheduleReconcileResult;
58188
59511
  subRejectAdapter: SubAdapterSubmission;
58189
59512
  subRemovePaymentInstrument: Scalars['Boolean']['output'];
59513
+ /** Run one agent's decision strategies over the workspace's ACTIVE and TRIAL relationships and queue the decisions. With dryRun: true (the default) no relationship is changed. dryRun: false also applies high-confidence decisions, and only an AUTONOMOUS agent in an enrolled workspace may do that. Writes the agent's lastRunAt. Each run (dry or live) is one AI action against the workspace's subscriberbot.ai.actions.monthly allowance; a workspace that has used it up gets QUOTA_EXHAUSTED from the gateway and nothing runs. */
59514
+ subRunAgent: SubAgentRunResult;
59515
+ /** Run the workspace's scheduled agent sweep. Called by wspace-scheduler-svc as this service's own service actor; a super admin may run it on demand. */
59516
+ subRunScheduledAgentSweep: SubAgentSweep;
58190
59517
  /** Change an agent's operating posture (DISABLED / SUGGEST_ONLY / AUTONOMOUS). */
58191
59518
  subSetAgentStatus: SubAiAgent;
59519
+ /** Create, update or remove (null / zero amount) a monthly spend budget. Returns null when the budget was removed. */
59520
+ subSetSpendBudget?: Maybe<SubSpendBudget>;
58192
59521
  /** Advance a relationship through its lifecycle (validated transitions). */
58193
59522
  subTransitionRelationship: SubRelationship;
58194
59523
  subUpdateProvider: SubProvider;
@@ -58208,7 +59537,7 @@ export type Mutation = {
58208
59537
  * `workflowProposal(id)`.
58209
59538
  */
58210
59539
  suggestNextNode: WorkflowProposal;
58211
- /** Compute (and persist) an AI/ML category suggestion for a capture event: a deterministic keyword classifier always runs; an LLM refinement is attempted only when a real provider key is configured, and its result is used only on success (BOFF-4146). Does not change `projectId` — the suggestion must be explicitly accepted. */
59540
+ /** Compute (and persist) an AI/ML category suggestion for a capture event: the user's own earlier project choices for the same site/app and a deterministic keyword classifier always run (ingest stores the same local suggestion automatically); an LLM refinement is attempted only when a real provider key is configured, and its result is used only on success (BOFF-4146). Does not change `projectId` — the suggestion must be explicitly accepted. */
58212
59541
  suggestTimeCampusCaptureEventCategory: TimeCampusCategorySuggestion;
58213
59542
  /** Switch to a project and generate a project-scoped JWT (24h). Gateway gates on `project:read` at workspace scope; the resolver (`ProjectLifecycleService.switchProject`) re-asserts that the caller is a member of `projectId` AND that `projectId` belongs to the current workspace, and that the project is not archived. Defense in depth on a field that mints a long-lived authn token. (BOFF-2655) */
58214
59543
  switchProject: ProjectAuthResponse;
@@ -58218,7 +59547,7 @@ export type Mutation = {
58218
59547
  * restricted to super_admin.
58219
59548
  */
58220
59549
  syncContainers: ContainerActionResponse;
58221
- /** Seed the starter taxonomy and normalize every legacy employee/candidate skill string into canonical skills. Idempotent: safe to re-run. */
59550
+ /** Seed the starter taxonomy and normalize every legacy employee/candidate skill string and job-posting requirement into canonical skills. Idempotent: safe to re-run. */
58222
59551
  syncCrewSkills: CrewSkillSyncReport;
58223
59552
  /** Cross-layer sync endpoint for global-tenant-svc. Handles workspace creation, member addition, and member removal. **Access Control:** - Restricted to `service` actor type only (M2M calls) - Called by global-tenant-svc via wspace-int-gateway - Public gateway rejects any non-service actor - Internal gateway relies on network isolation (K8s NetworkPolicy + Istio mTLS) **Why actorTypes instead of action/resource RBAC:** - SYNC_WORKSPACE creates new workspaces - can't check permissions on non-existent resource - Internal gateway (wspace-int-gateway) has no RBAC middleware - directives aren't enforced - actorTypes clearly documents M2M-only intent and IS enforced by public gateway */
58224
59553
  syncFromGlobal: SyncFromGlobalResult;
@@ -58237,6 +59566,8 @@ export type Mutation = {
58237
59566
  syncHealthyBowlOrderPayment: Order;
58238
59567
  /** Backfill/refresh the farm's real multi-year daily + monthly weather history from the Open-Meteo ERA5 archive (the "Re-sync history" action). Replaces any prior history for the workspace and returns the refreshed series. */
58239
59568
  syncHealthyBowlWeatherHistory: WeatherHistorySeries;
59569
+ /** Pull an OAuth-backed channel from its provider now instead of waiting for the next scheduled sync. */
59570
+ syncTimeCampusCaptureChannel: TimeCampusCaptureChannelSyncResult;
58240
59571
  tagAnalyticsDashboard: AnalyticsDashboardTagAssignment;
58241
59572
  tagAnalyticsMetric: AnalyticsMetricTagAssignment;
58242
59573
  tagAnalyticsReport: AnalyticsReportTagAssignment;
@@ -58265,6 +59596,8 @@ export type Mutation = {
58265
59596
  /** Take a workflow's edit lease from whoever holds it. */
58266
59597
  takeOverWorkflowEditLease: WorkflowEditLease;
58267
59598
  tcpAddCitation: TcpCitation;
59599
+ /** Append a claim to a story's evidence trail. */
59600
+ tcpAddStoryClaim: TcpStoryClaim;
58268
59601
  tcpArchiveArchiveItem: Scalars['Boolean']['output'];
58269
59602
  tcpArchiveTopic: Scalars['Boolean']['output'];
58270
59603
  tcpCreateArchiveItem: TcpArchiveItem;
@@ -58273,12 +59606,17 @@ export type Mutation = {
58273
59606
  tcpCreateTopic: TcpTopic;
58274
59607
  /** Generates a citation-grounded AI response: fetches the requested story's citations, or collection's archive items + oral histories, or oral history's transcript — always filtered to content the caller can read (PUBLIC/COMMUNITY access level only) — builds a prompt instructing the model to answer ONLY from those sources, and persists the run (`groundingRefs`, `content`, `uncertainty`) as `PENDING` review. Gated by the `theculturepost.ai-context` feature flag (defaults to enabled). */
58275
59608
  tcpGenerateAiContext: TcpAgentRun;
59609
+ /** Link a citation to a claim on the same story, or unlink it (claimId: null). */
59610
+ tcpLinkCitationToClaim: TcpCitation;
58276
59611
  tcpLockDiscussion: TcpDiscussion;
58277
59612
  /** Moderate a reply (approve / flag / remove) — respectful-by-design controls. */
58278
- tcpModerateReply: TcpReply;
59613
+ tcpModerateReply: EntityComment;
58279
59614
  tcpOpenDiscussion: TcpDiscussion;
58280
- tcpPostReply: TcpReply;
59615
+ /** Post a reply to an open discussion. The reply is stored as an EntityComment in wspace-conversations-svc, authored by the caller, and starts PENDING. */
59616
+ tcpPostReply: EntityComment;
58281
59617
  tcpRecordOralHistory: TcpOralHistory;
59618
+ /** Remove a claim from the evidence trail. Its citations stay on the story as general sources (unlinked, never deleted) and the trail is renumbered. */
59619
+ tcpRemoveStoryClaim: Scalars['Boolean']['output'];
58282
59620
  /** Editor human-in-the-loop review of a generated AI context run — approves or rejects it and records who/when/why. Only a `PENDING` run can be reviewed; reviewing an already-reviewed run is rejected (no silent overwrite of a prior editorial decision). */
58283
59621
  tcpReviewAiContext: TcpAgentRun;
58284
59622
  /** Toggle whether the calling actor has the given story on their personal reading list. Returns the new bookmarked state. Self-scoped: the story id is a target to act on, but the row created/removed is always owned by the caller (`ctx.actorId`) — never another actor's. */
@@ -58288,6 +59626,8 @@ export type Mutation = {
58288
59626
  tcpUpdateArchiveItem: TcpArchiveItem;
58289
59627
  tcpUpdateOralHistory: TcpOralHistory;
58290
59628
  tcpUpdateStory: TcpStory;
59629
+ /** Edit a claim's text/anchor or move it within the evidence trail. */
59630
+ tcpUpdateStoryClaim: TcpStoryClaim;
58291
59631
  tcpUpdateTopic: TcpTopic;
58292
59632
  tcpVerifyCitation: TcpCitation;
58293
59633
  /** Soft-deletes (withdraws) a recorded oral history via the existing `deletedAt` column — the only API path for a narrator's consent-withdrawal request once testimony has been recorded. */
@@ -58467,6 +59807,11 @@ export type Mutation = {
58467
59807
  trackShareDownload: Scalars['Boolean']['output'];
58468
59808
  /** Track usage consumption Called by gateway after successful operations */
58469
59809
  trackUsage: Scalars['Boolean']['output'];
59810
+ /**
59811
+ * Hand a connection to another person, for example when its owner leaves. Workspace
59812
+ * administrators only.
59813
+ */
59814
+ transferConnectionOwnership: IntegrationConnection;
58470
59815
  transferGroupOwnership: Group;
58471
59816
  transferInventoryStock: MtwInventoryTransferResult;
58472
59817
  /** Transfer control to another collaborator */
@@ -58658,6 +60003,8 @@ export type Mutation = {
58658
60003
  updateCrewOnboardingTask: CrewOnboardingTask;
58659
60004
  updateCrewPayrollRecord: CrewPayrollRecord;
58660
60005
  updateCrewProject: CrewProject;
60006
+ /** Rename, recategorise or re-alias a skill. Editing a BACKFILL skill marks it reviewed (CUSTOM). */
60007
+ updateCrewSkill: CrewSkill;
58661
60008
  updateCrewTeam: CrewTeam;
58662
60009
  updateCrewTimeEntry: CrewTimeEntry;
58663
60010
  updateCrewTrainingCourse: CrewTrainingCourse;
@@ -59417,6 +60764,11 @@ export type MutationAcknowledgeHealthyBowlStressedZoneArgs = {
59417
60764
  id: Scalars['ID']['input'];
59418
60765
  };
59419
60766
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
60767
+ export type MutationAcknowledgeMtwTrackingAlertArgs = {
60768
+ alertType: MtwTrackingAlertType;
60769
+ shipmentId: Scalars['ID']['input'];
60770
+ };
60771
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
59420
60772
  export type MutationAcquireFileLockArgs = {
59421
60773
  input: AcquireLockInput;
59422
60774
  };
@@ -60759,6 +62111,11 @@ export type MutationBuiRecordMyLessonProgressArgs = {
60759
62111
  input: BuiRecordLessonProgressInput;
60760
62112
  };
60761
62113
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
62114
+ export type MutationBuiRecordProctoringSignalsArgs = {
62115
+ id: Scalars['ID']['input'];
62116
+ signals: Array<BuiProctoringSignalInput>;
62117
+ };
62118
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
60762
62119
  export type MutationBuiRegisterLtiPlatformArgs = {
60763
62120
  input: BuiRegisterLtiPlatformInput;
60764
62121
  };
@@ -60845,6 +62202,18 @@ export type MutationBuiSuggestNextLessonArgs = {
60845
62202
  enrollmentId: Scalars['ID']['input'];
60846
62203
  };
60847
62204
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
62205
+ export type MutationBuiSyncExternalCertificateArgs = {
62206
+ input: BuiSyncExternalCertificateInput;
62207
+ };
62208
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
62209
+ export type MutationBuiSyncExternalCourseArgs = {
62210
+ input: BuiSyncExternalCourseInput;
62211
+ };
62212
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
62213
+ export type MutationBuiSyncExternalEnrollmentArgs = {
62214
+ input: BuiSyncExternalEnrollmentInput;
62215
+ };
62216
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
60848
62217
  export type MutationBuiSyncLtiGradeArgs = {
60849
62218
  resourceLinkId: Scalars['ID']['input'];
60850
62219
  submissionId: Scalars['ID']['input'];
@@ -61453,11 +62822,21 @@ export type MutationColUntagStoryArgs = {
61453
62822
  input: ColUntagStoryInput;
61454
62823
  };
61455
62824
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
62825
+ export type MutationColUpdateEventArgs = {
62826
+ id: Scalars['ID']['input'];
62827
+ input: ColUpdateEventInput;
62828
+ };
62829
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
61456
62830
  export type MutationColUpdateFamilyTreeArgs = {
61457
62831
  id: Scalars['ID']['input'];
61458
62832
  input: ColUpdateFamilyTreeInput;
61459
62833
  };
61460
62834
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
62835
+ export type MutationColUpdateMembershipArgs = {
62836
+ id: Scalars['ID']['input'];
62837
+ input: ColUpdateMembershipInput;
62838
+ };
62839
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
61461
62840
  export type MutationColUpdateMemoryArgs = {
61462
62841
  id: Scalars['ID']['input'];
61463
62842
  input: ColUpdateMemoryInput;
@@ -61468,6 +62847,16 @@ export type MutationColUpdatePersonArgs = {
61468
62847
  input: ColUpdatePersonInput;
61469
62848
  };
61470
62849
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
62850
+ export type MutationColUpdateRelationshipArgs = {
62851
+ id: Scalars['ID']['input'];
62852
+ input: ColUpdateRelationshipInput;
62853
+ };
62854
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
62855
+ export type MutationColUpdateStoryArgs = {
62856
+ id: Scalars['ID']['input'];
62857
+ input: ColUpdateStoryInput;
62858
+ };
62859
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
61471
62860
  export type MutationCollectHealthyBowlCsaPickupBoxArgs = {
61472
62861
  input: CollectHealthyBowlCsaPickupBoxInput;
61473
62862
  };
@@ -61982,6 +63371,11 @@ export type MutationCooCreateWardrobeItemArgs = {
61982
63371
  input: CooCreateWardrobeItemInput;
61983
63372
  };
61984
63373
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
63374
+ export type MutationCooCurateCollectionArgs = {
63375
+ brandId: Scalars['ID']['input'];
63376
+ season: CooSeason;
63377
+ };
63378
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
61985
63379
  export type MutationCooDeclineReturnRequestArgs = {
61986
63380
  input: CooDeclineReturnRequestInput;
61987
63381
  };
@@ -62076,6 +63470,15 @@ export type MutationCooSetStyleItemInventoryArgs = {
62076
63470
  input: CooSetStyleItemInventoryInput;
62077
63471
  };
62078
63472
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
63473
+ export type MutationCooSuggestCollaborationMatchArgs = {
63474
+ brandId: Scalars['ID']['input'];
63475
+ limit?: InputMaybe<Scalars['Int']['input']>;
63476
+ };
63477
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
63478
+ export type MutationCooSuggestOutfitArgs = {
63479
+ input: CooSuggestOutfitInput;
63480
+ };
63481
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
62079
63482
  export type MutationCooSyncCollaborationPaymentArgs = {
62080
63483
  id: Scalars['ID']['input'];
62081
63484
  };
@@ -62190,6 +63593,19 @@ export type MutationCosAddSchemaFieldArgs = {
62190
63593
  input: CosAddSchemaFieldInput;
62191
63594
  };
62192
63595
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
63596
+ export type MutationCosAiDraftReleaseArgs = {
63597
+ notebookId: Scalars['ID']['input'];
63598
+ };
63599
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
63600
+ export type MutationCosAiProposeSchemaFieldsArgs = {
63601
+ datasetId: Scalars['ID']['input'];
63602
+ sample?: InputMaybe<CosSchemaSampleInput>;
63603
+ };
63604
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
63605
+ export type MutationCosAiTriageRunArgs = {
63606
+ runId: Scalars['ID']['input'];
63607
+ };
63608
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
62193
63609
  export type MutationCosArchiveCollectionArgs = {
62194
63610
  id: Scalars['ID']['input'];
62195
63611
  };
@@ -62217,6 +63633,12 @@ export type MutationCosCompleteAnalysisArgs = {
62217
63633
  status: CosAnalysisStatus;
62218
63634
  };
62219
63635
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
63636
+ export type MutationCosCompleteRunStepArgs = {
63637
+ input: CosCompleteRunStepInput;
63638
+ runId: Scalars['ID']['input'];
63639
+ stepId: Scalars['ID']['input'];
63640
+ };
63641
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
62220
63642
  export type MutationCosCreateCollectionArgs = {
62221
63643
  input: CosCreateCollectionInput;
62222
63644
  };
@@ -62268,6 +63690,11 @@ export type MutationCosPublishReleaseArgs = {
62268
63690
  id: Scalars['ID']['input'];
62269
63691
  };
62270
63692
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
63693
+ export type MutationCosRecordRunTelemetryArgs = {
63694
+ input: CosRunTelemetryInput;
63695
+ runId: Scalars['ID']['input'];
63696
+ };
63697
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
62271
63698
  export type MutationCosRevokeAccessArgs = {
62272
63699
  id: Scalars['ID']['input'];
62273
63700
  };
@@ -65839,6 +67266,11 @@ export type MutationEscalateIncidentArgs = {
65839
67266
  id: Scalars['ID']['input'];
65840
67267
  };
65841
67268
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
67269
+ export type MutationEventfullyManagedApplyAgendaFixArgs = {
67270
+ eventId: Scalars['ID']['input'];
67271
+ input: EventfullyManagedApplyAgendaFixInput;
67272
+ };
67273
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
65842
67274
  export type MutationEventfullyManagedCreateAttendeeArgs = {
65843
67275
  input: EventfullyManagedAttendeeInput;
65844
67276
  };
@@ -66007,6 +67439,11 @@ export type MutationEventfullyManagedEraseSpeakerPersonalDataArgs = {
66007
67439
  id: Scalars['ID']['input'];
66008
67440
  };
66009
67441
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
67442
+ export type MutationEventfullyManagedForecastAttendanceArgs = {
67443
+ eventId: Scalars['ID']['input'];
67444
+ input?: InputMaybe<EventfullyManagedForecastInput>;
67445
+ };
67446
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
66010
67447
  export type MutationEventfullyManagedGenerateBadgeArgs = {
66011
67448
  registrationId: Scalars['ID']['input'];
66012
67449
  templateId?: InputMaybe<Scalars['ID']['input']>;
@@ -66031,6 +67468,11 @@ export type MutationEventfullyManagedLeaveVirtualSessionArgs = {
66031
67468
  sessionId: Scalars['ID']['input'];
66032
67469
  };
66033
67470
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
67471
+ export type MutationEventfullyManagedPredictNoShowsArgs = {
67472
+ eventId: Scalars['ID']['input'];
67473
+ input?: InputMaybe<EventfullyManagedForecastInput>;
67474
+ };
67475
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
66034
67476
  export type MutationEventfullyManagedPromoteVirtualPresenterArgs = {
66035
67477
  actorId: Scalars['ID']['input'];
66036
67478
  sessionId: Scalars['ID']['input'];
@@ -66040,6 +67482,16 @@ export type MutationEventfullyManagedPublishAnnouncementArgs = {
66040
67482
  id: Scalars['ID']['input'];
66041
67483
  };
66042
67484
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
67485
+ export type MutationEventfullyManagedResolveAgendaConflictsArgs = {
67486
+ eventId: Scalars['ID']['input'];
67487
+ input?: InputMaybe<EventfullyManagedForecastInput>;
67488
+ };
67489
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
67490
+ export type MutationEventfullyManagedRightSizeSessionsArgs = {
67491
+ eventId: Scalars['ID']['input'];
67492
+ input?: InputMaybe<EventfullyManagedForecastInput>;
67493
+ };
67494
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
66043
67495
  export type MutationEventfullyManagedScanCheckInArgs = {
66044
67496
  input: EventfullyManagedScanCheckInInput;
66045
67497
  };
@@ -68682,6 +70134,11 @@ export type MutationMatchHealthyBowlStatementLineArgs = {
68682
70134
  input: MatchHealthyBowlStatementLineInput;
68683
70135
  };
68684
70136
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
70137
+ export type MutationMergeCrewSkillsArgs = {
70138
+ sourceId: Scalars['ID']['input'];
70139
+ targetId: Scalars['ID']['input'];
70140
+ };
70141
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
68685
70142
  export type MutationMergeTagArgs = {
68686
70143
  sourceId: Scalars['ID']['input'];
68687
70144
  targetId: Scalars['ID']['input'];
@@ -71324,6 +72781,11 @@ export type MutationRemoveCrewJobPostingArgs = {
71324
72781
  id: Scalars['ID']['input'];
71325
72782
  };
71326
72783
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
72784
+ export type MutationRemoveCrewJobPostingSkillArgs = {
72785
+ jobPostingId: Scalars['ID']['input'];
72786
+ skillId: Scalars['ID']['input'];
72787
+ };
72788
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
71327
72789
  export type MutationRemoveCrewLeaveRequestArgs = {
71328
72790
  id: Scalars['ID']['input'];
71329
72791
  };
@@ -71352,6 +72814,10 @@ export type MutationRemoveCrewSkillArgs = {
71352
72814
  id: Scalars['ID']['input'];
71353
72815
  };
71354
72816
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
72817
+ export type MutationRemoveCrewSkillRelationArgs = {
72818
+ id: Scalars['ID']['input'];
72819
+ };
72820
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
71355
72821
  export type MutationRemoveCrewTeamArgs = {
71356
72822
  id: Scalars['ID']['input'];
71357
72823
  };
@@ -72441,6 +73907,10 @@ export type MutationRunSecurityScanArgs = {
72441
73907
  vibeId: Scalars['ID']['input'];
72442
73908
  };
72443
73909
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
73910
+ export type MutationRunTimeCampusTimeIntelligenceSweepArgs = {
73911
+ input?: InputMaybe<TimeCampusTimeIntelligenceSweepInput>;
73912
+ };
73913
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
72444
73914
  export type MutationSaveAssistantTurnArgs = {
72445
73915
  input: SaveAssistantTurnInput;
72446
73916
  };
@@ -72735,6 +74205,10 @@ export type MutationSetConfigurationArgs = {
72735
74205
  value: Scalars['JSON']['input'];
72736
74206
  };
72737
74207
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
74208
+ export type MutationSetCrewJobPostingSkillArgs = {
74209
+ input: SetCrewJobPostingSkillInput;
74210
+ };
74211
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
72738
74212
  export type MutationSetDashboardRlsPolicyArgs = {
72739
74213
  dashboardId: Scalars['ID']['input'];
72740
74214
  rlsPolicyId?: InputMaybe<Scalars['ID']['input']>;
@@ -72977,6 +74451,10 @@ export type MutationShareComponentArgs = {
72977
74451
  input: ShareEntityInput;
72978
74452
  };
72979
74453
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
74454
+ export type MutationShareConnectionArgs = {
74455
+ input: ShareConnectionInput;
74456
+ };
74457
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
72980
74458
  export type MutationShareDashboardArgs = {
72981
74459
  input: BigConsoleShareDashboardInput;
72982
74460
  };
@@ -73228,6 +74706,10 @@ export type MutationSubAdminPurgeWorkspaceArgs = {
73228
74706
  workspaceId: Scalars['ID']['input'];
73229
74707
  };
73230
74708
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
74709
+ export type MutationSubApplyDecisionArgs = {
74710
+ id: Scalars['ID']['input'];
74711
+ };
74712
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
73231
74713
  export type MutationSubApproveAdapterArgs = {
73232
74714
  id: Scalars['ID']['input'];
73233
74715
  notes?: InputMaybe<Scalars['String']['input']>;
@@ -73241,6 +74723,10 @@ export type MutationSubCancelRelationshipArgs = {
73241
74723
  id: Scalars['ID']['input'];
73242
74724
  };
73243
74725
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
74726
+ export type MutationSubConsolidateRelationshipsArgs = {
74727
+ input: SubConsolidateRelationshipsInput;
74728
+ };
74729
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
73244
74730
  export type MutationSubCreateAgentArgs = {
73245
74731
  input: SubCreateAgentInput;
73246
74732
  };
@@ -73293,6 +74779,16 @@ export type MutationSubDisconnectChannelArgs = {
73293
74779
  id: Scalars['ID']['input'];
73294
74780
  };
73295
74781
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
74782
+ export type MutationSubDismissBundleArgs = {
74783
+ id: Scalars['ID']['input'];
74784
+ reason?: InputMaybe<Scalars['String']['input']>;
74785
+ };
74786
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
74787
+ export type MutationSubDismissDecisionArgs = {
74788
+ id: Scalars['ID']['input'];
74789
+ reason?: InputMaybe<Scalars['String']['input']>;
74790
+ };
74791
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
73296
74792
  export type MutationSubIngestMessageArgs = {
73297
74793
  input: SubIngestMessageInput;
73298
74794
  };
@@ -73320,11 +74816,24 @@ export type MutationSubRemovePaymentInstrumentArgs = {
73320
74816
  id: Scalars['ID']['input'];
73321
74817
  };
73322
74818
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
74819
+ export type MutationSubRunAgentArgs = {
74820
+ dryRun?: InputMaybe<Scalars['Boolean']['input']>;
74821
+ id: Scalars['ID']['input'];
74822
+ };
74823
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
74824
+ export type MutationSubRunScheduledAgentSweepArgs = {
74825
+ input?: InputMaybe<SubRunAgentSweepInput>;
74826
+ };
74827
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
73323
74828
  export type MutationSubSetAgentStatusArgs = {
73324
74829
  id: Scalars['ID']['input'];
73325
74830
  status: SubAgentStatus;
73326
74831
  };
73327
74832
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
74833
+ export type MutationSubSetSpendBudgetArgs = {
74834
+ input: SubSetSpendBudgetInput;
74835
+ };
74836
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
73328
74837
  export type MutationSubTransitionRelationshipArgs = {
73329
74838
  id: Scalars['ID']['input'];
73330
74839
  status: SubRelationshipStatus;
@@ -73423,6 +74932,10 @@ export type MutationSyncHealthyBowlWeatherHistoryArgs = {
73423
74932
  context: ContextInput;
73424
74933
  };
73425
74934
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
74935
+ export type MutationSyncTimeCampusCaptureChannelArgs = {
74936
+ id: Scalars['ID']['input'];
74937
+ };
74938
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
73426
74939
  export type MutationTagAnalyticsDashboardArgs = {
73427
74940
  input: TagAnalyticsDashboardInput;
73428
74941
  };
@@ -73511,6 +75024,10 @@ export type MutationTcpAddCitationArgs = {
73511
75024
  input: TcpCreateCitationInput;
73512
75025
  };
73513
75026
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
75027
+ export type MutationTcpAddStoryClaimArgs = {
75028
+ input: TcpCreateStoryClaimInput;
75029
+ };
75030
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
73514
75031
  export type MutationTcpArchiveArchiveItemArgs = {
73515
75032
  id: Scalars['ID']['input'];
73516
75033
  };
@@ -73539,6 +75056,11 @@ export type MutationTcpGenerateAiContextArgs = {
73539
75056
  input: TcpGenerateAiContextInput;
73540
75057
  };
73541
75058
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
75059
+ export type MutationTcpLinkCitationToClaimArgs = {
75060
+ citationId: Scalars['ID']['input'];
75061
+ claimId?: InputMaybe<Scalars['ID']['input']>;
75062
+ };
75063
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
73542
75064
  export type MutationTcpLockDiscussionArgs = {
73543
75065
  id: Scalars['ID']['input'];
73544
75066
  };
@@ -73560,6 +75082,10 @@ export type MutationTcpRecordOralHistoryArgs = {
73560
75082
  input: TcpCreateOralHistoryInput;
73561
75083
  };
73562
75084
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
75085
+ export type MutationTcpRemoveStoryClaimArgs = {
75086
+ id: Scalars['ID']['input'];
75087
+ };
75088
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
73563
75089
  export type MutationTcpReviewAiContextArgs = {
73564
75090
  approved: Scalars['Boolean']['input'];
73565
75091
  id: Scalars['ID']['input'];
@@ -73590,6 +75116,11 @@ export type MutationTcpUpdateStoryArgs = {
73590
75116
  input: TcpUpdateStoryInput;
73591
75117
  };
73592
75118
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
75119
+ export type MutationTcpUpdateStoryClaimArgs = {
75120
+ id: Scalars['ID']['input'];
75121
+ input: TcpUpdateStoryClaimInput;
75122
+ };
75123
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
73593
75124
  export type MutationTcpUpdateTopicArgs = {
73594
75125
  id: Scalars['ID']['input'];
73595
75126
  input: TcpUpdateTopicInput;
@@ -74064,6 +75595,11 @@ export type MutationTrackUsageArgs = {
74064
75595
  input: TrackUsageInput;
74065
75596
  };
74066
75597
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
75598
+ export type MutationTransferConnectionOwnershipArgs = {
75599
+ connectionId: Scalars['ID']['input'];
75600
+ ownerId: Scalars['ID']['input'];
75601
+ };
75602
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
74067
75603
  export type MutationTransferGroupOwnershipArgs = {
74068
75604
  groupId: Scalars['ID']['input'];
74069
75605
  newOwnerId: Scalars['ID']['input'];
@@ -74680,6 +76216,11 @@ export type MutationUpdateCrewProjectArgs = {
74680
76216
  input: UpdateCrewProjectInput;
74681
76217
  };
74682
76218
  /** Base Mutation type with placeholder field. Extended by individual mutation files. */
76219
+ export type MutationUpdateCrewSkillArgs = {
76220
+ id: Scalars['ID']['input'];
76221
+ input: UpdateCrewSkillInput;
76222
+ };
76223
+ /** Base Mutation type with placeholder field. Extended by individual mutation files. */
74683
76224
  export type MutationUpdateCrewTeamArgs = {
74684
76225
  id: Scalars['ID']['input'];
74685
76226
  input: UpdateCrewTeamInput;
@@ -87530,7 +89071,11 @@ export type Query = {
87530
89071
  _planmagnetService?: Maybe<Scalars['String']['output']>;
87531
89072
  _planmagnetVersion?: Maybe<Scalars['String']['output']>;
87532
89073
  _serviceHealth: Scalars['String']['output'];
87533
- /** Who a person is reached through when a service shares its own resources with chosen people, groups or projects (service-only): the groups and projects they belong to in the calling service's workspace, and whether they administer the resource type there */
89074
+ /**
89075
+ * Who a person is reached through when a service shares its own resources with chosen people,
89076
+ * groups or projects (service-only): the groups and projects they belong to in the calling
89077
+ * service's workspace, and whether they administer the resource type there
89078
+ */
87534
89079
  accessPrincipals: AccessPrincipals;
87535
89080
  /** Anonymously reveal the credential(s) behind a signed share link. */
87536
89081
  accessSharedSecret: SharedSecretView;
@@ -87902,7 +89447,13 @@ export type Query = {
87902
89447
  buiMyTutorSession?: Maybe<BuiTutorSession>;
87903
89448
  /** Type-C self-scoped list: the calling learner's own tutor sessions. No `learnerId` arg — identity comes exclusively from the authenticated actor, mirroring `buiMySubmissions` (BOFF FERPA/IDOR pattern). */
87904
89449
  buiMyTutorSessions: BuiTutorSessionConnection;
89450
+ /** The workspace's getting-started checklist. */
89451
+ buiOnboardingStatus: BuiOnboardingStatus;
87905
89452
  buiPendingCourseKnowledgeChange?: Maybe<BuiCourseKnowledgeChange>;
89453
+ /** BOFF-9691: open the learner's identity photo/ID for a session in the review queue (instructor/admin only — the same permission as the queue itself). Null when the session has no identity file, or the file is gone or is not the learner's own upload. */
89454
+ buiProctoringIdentityFile?: Maybe<BuiProctoringIdentityFile>;
89455
+ /** BOFF-9690: reviewer timeline of one proctoring session's signals, oldest first. Instructor/admin only (same directive as the review queue); signals past the retention period are never returned. Paginated with explicit `limit` (default 50, max 100) and `after` (the previous page's `pageInfo.cursor`) rather than `PaginationInput`, whose composed supergraph shape carries only `limit`. */
89456
+ buiProctoringSessionSignals: BuiProctoringSignalConnection;
87906
89457
  buiSubmission?: Maybe<BuiSubmission>;
87907
89458
  buiSuggestCertifications: Array<BuiCertificationSuggestion>;
87908
89459
  buiSuggestSkillMappings: Array<BuiSkillMappingSuggestion>;
@@ -87937,7 +89488,10 @@ export type Query = {
87937
89488
  checkPermission: PermissionCheckResult;
87938
89489
  /** Check multiple permissions at once (max 50) */
87939
89490
  checkPermissions: Array<PermissionCheckResult>;
87940
- /** Whether a requester may grant roles workspace-wide — the checks setActorRoles applies to added roles, with no target actor and no write (service-only) */
89491
+ /**
89492
+ * Whether a requester may grant roles workspace-wide — the checks setActorRoles applies to added
89493
+ * roles, with no target actor and no write (service-only)
89494
+ */
87941
89495
  checkRoleGrant: RoleGrantCheckResult;
87942
89496
  /** Check if an actor can see a resource */
87943
89497
  checkVisibility: VisibilityCheckResult;
@@ -88079,6 +89633,13 @@ export type Query = {
88079
89633
  * gateway (BOFF-3698). Service actors only; returns metadata, never a token.
88080
89634
  */
88081
89635
  connectionsExpiringSoon: Array<ExpiringConnection>;
89636
+ /**
89637
+ * Of connectionIds (at most 200), the live connections in the caller's workspace that principalId
89638
+ * cannot use: RESTRICTED and not shared with them. Unknown and deleted ids are not listed; they fail
89639
+ * when a run asks for them. Service-only; wspace-workflow-svc checks a workflow's connections against
89640
+ * its owner before saving it (BOFF-9726).
89641
+ */
89642
+ connectionsNotUsableBy: Array<Scalars['ID']['output']>;
88082
89643
  conversation?: Maybe<Conversation>;
88083
89644
  conversationCapabilities: ConversationFeatures;
88084
89645
  conversations: ConversationConnection;
@@ -88160,6 +89721,8 @@ export type Query = {
88160
89721
  cosNotebook?: Maybe<CosNotebook>;
88161
89722
  cosPipeline?: Maybe<CosPipeline>;
88162
89723
  cosRun?: Maybe<CosPipelineRun>;
89724
+ /** Natural-language search across the catalog: datasets (name, description, coverage, instrument metadata), schema fields (name, unit, provenance note), sources, collections, analyses, releases and notebooks. Returns ranked hits with the evidence that matched and, for datasets, the lineage that produced them. Embargoed / restricted datasets never appear without an active grant. */
89725
+ cosSemanticSearch: CosSearchResults;
88163
89726
  cosSource?: Maybe<CosSource>;
88164
89727
  courseAssistantCandidates: Array<CourseAssistantCandidate>;
88165
89728
  courseAssistantConfiguration: CourseAssistantConfiguration;
@@ -88210,6 +89773,8 @@ export type Query = {
88210
89773
  crewServiceListing?: Maybe<CrewServiceListing>;
88211
89774
  crewServiceListings: Array<CrewServiceListing>;
88212
89775
  crewSkill?: Maybe<CrewSkill>;
89776
+ /** Category keys accepted by createCrewSkill / updateCrewSkill. */
89777
+ crewSkillCategories: Array<Scalars['String']['output']>;
88213
89778
  /** Implied, implied-by and related skills around a skill, up to `depth` hops (max 4). */
88214
89779
  crewSkillGraph?: Maybe<CrewSkillGraph>;
88215
89780
  /** Workspace skills taxonomy. Seeds the starter taxonomy on first use. */
@@ -88309,7 +89874,7 @@ export type Query = {
88309
89874
  ecoAiCreditUsage: EcoAiCreditUsage;
88310
89875
  /** Detect anomalies (spikes, drops, stuck-sensor flatlines) in one parameter's readings at a site over a period. Every anomaly cites the measurement ids behind it; fewer than 12 readings returns INSUFFICIENT_DATA. */
88311
89876
  ecoAiDetectAnomalies: EcoAnomalyDetectionResult;
88312
- /** Total CO2e (kg) recorded in the workspace, optionally narrowed by scope. */
89877
+ /** Total CO2e (kg) recorded in the workspace, optionally narrowed by scope or site. Unaccepted AI drafts (status DRAFT) are excluded until a reviewer accepts them. */
88313
89878
  ecoCarbonTotalKg: Scalars['Float']['output'];
88314
89879
  ecoDataSource?: Maybe<EcoDataSource>;
88315
89880
  ecoHabitatProject?: Maybe<EcoHabitatProject>;
@@ -88379,6 +89944,8 @@ export type Query = {
88379
89944
  eventRegistrations: Array<EventRegistration>;
88380
89945
  eventSchema?: Maybe<EventSchema>;
88381
89946
  eventSchemas: Array<EventSchema>;
89947
+ /** The most recent persisted decision of one kind for an event, or null when none has been generated. */
89948
+ eventfullyManagedAiDecision?: Maybe<EventfullyManagedAiDecisionRecord>;
88382
89949
  eventfullyManagedAnalyticsSnapshots: EventfullyManagedSimpleEntityList;
88383
89950
  eventfullyManagedAnnouncements: EventfullyManagedSimpleEntityList;
88384
89951
  eventfullyManagedAttendees: EventfullyManagedAttendeeList;
@@ -88408,6 +89975,8 @@ export type Query = {
88408
89975
  eventfullyManagedNetworkingMatches: EventfullyManagedNetworkingMatchList;
88409
89976
  eventfullyManagedNetworkingProfiles: EventfullyManagedNetworkingProfileList;
88410
89977
  eventfullyManagedPromoCodes: EventfullyManagedPromoCodeList;
89978
+ /** BOFF-3764 — personalized session recommendations for one attendee at an event. Deterministic and explainable (see SessionRecommendationService): ranks upcoming sessions by overlap between the attendee's networking-profile interests/asks/industry and each session's track, title, description and speakers, boosted by tracks the attendee has checked into before. Read-only. */
89979
+ eventfullyManagedRecommendSessions: EventfullyManagedSessionRecommendationList;
88411
89980
  eventfullyManagedRegistrations: EventfullyManagedRegistrationList;
88412
89981
  eventfullyManagedSessionConflicts: Array<EventfullyManagedSessionConflict>;
88413
89982
  eventfullyManagedSpeakers: EventfullyManagedSpeakerList;
@@ -89579,6 +91148,8 @@ export type Query = {
89579
91148
  healthyBowlSuppliers: Array<Supplier>;
89580
91149
  /** List watering runs for the workspace. Pass scheduleId or fieldId to filter. */
89581
91150
  healthyBowlWateringRuns: Array<WateringRun>;
91151
+ /** Workspace activation dashboard: real counts for each HookMovies activation event. */
91152
+ hokActivationFunnel: HokActivationFunnel;
89582
91153
  /** Schedule blocks for a channel overlapping the [from, to] window (defaults to an open-ended window when omitted), ordered by start time. */
89583
91154
  hokChannelSchedule: HokScheduleBlockConnection;
89584
91155
  /** Check whether the calling user can watch a title now (self-scoped). When `viewerTerritory` is supplied (ISO 3166-1 alpha-2, e.g. "IN", "US"), the check additionally enforces territory restrictions: the entitlement's territory (if set) must match, and at least one active rights window for the title must cover the viewer's territory (empty territories = worldwide). */
@@ -89639,6 +91210,8 @@ export type Query = {
89639
91210
  hokMyWatchProgress: HokWatchProgressConnection;
89640
91211
  /** The block currently airing on a channel (startAt <= now < endAt), or null. */
89641
91212
  hokNowPlaying?: Maybe<HokScheduleBlock>;
91213
+ /** Getting-started checklist progress for the calling user in this workspace. */
91214
+ hokOnboardingStatus: HokOnboardingStatus;
89642
91215
  hokProduction?: Maybe<HokProduction>;
89643
91216
  /** Two-sided reputation for a talent (PERSON) or a studio (STUDIO). */
89644
91217
  hokReputation: HokReputation;
@@ -90134,7 +91707,10 @@ export type Query = {
90134
91707
  myPendingInvitations: Array<Invitation>;
90135
91708
  /** Invitee-side: list pending invites whose `inviteeEmail` matches the caller's email (resolved from the tenant backend). `scopeType: "self"` because access is the user's own email — membership in any workspace is irrelevant. */
90136
91709
  myPendingInvites: Array<WorkspaceInvite>;
90137
- /** Get current user's permissions in a workspace (self-service). Returns full permission details including roles, permission strings, and cache TTL. */
91710
+ /**
91711
+ * Get current user's permissions in a workspace (self-service).
91712
+ * Returns full permission details including roles, permission strings, and cache TTL.
91713
+ */
90138
91714
  myPermissions: EffectivePermissions;
90139
91715
  myPersonalDataSummary: TimeCampusPersonalDataSummary;
90140
91716
  /** Get projects for the current authenticated user Self-list (Type C): resolver filters by ctx.userId, so the returned set IS the access list. Any authenticated user may call this; no RBAC permission is checked. (BOFF-2655) */
@@ -90143,7 +91719,10 @@ export type Query = {
90143
91719
  myRecommendations: Array<TimeCampusRecommendation>;
90144
91720
  /** Get resources created by the current authenticated user. Self-scoped: the resolver filters by ctx.actorId (createdBy). */
90145
91721
  myResources: WorkspaceResourceList;
90146
- /** Get current user's roles in a workspace (lightweight, self-service). Use this for quick role checks without fetching full permissions. */
91722
+ /**
91723
+ * Get current user's roles in a workspace (lightweight, self-service).
91724
+ * Use this for quick role checks without fetching full permissions.
91725
+ */
90147
91726
  myRoles: MyRolesResult;
90148
91727
  /** Usage the assistant LLM proxy recorded for the caller's OWN Ask or Take-action sandbox. Another user's sandbox, or one that is not an assistant sandbox, is NOT_FOUND. */
90149
91728
  mySandboxLlmUsage: SandboxLlmUsage;
@@ -90155,10 +91734,14 @@ export type Query = {
90155
91734
  /** Credentials shared with the calling actor (across all workspaces). */
90156
91735
  mySharedCredentials: SecretShareList;
90157
91736
  mySourceConsents: Array<TimeCampusSourceConsent>;
91737
+ /** The calling actor's own sustained-load signal over the last `weeks` full weeks (default 4, clamped to 2..12). Self-scoped: takes no user argument and only ever reads the caller's rows. */
91738
+ mySustainedLoad: TimeCampusSustainedLoadSignal;
90158
91739
  /** One of the calling user's capture channels. */
90159
91740
  myTimeCampusCaptureChannel: TimeCampusCaptureChannel;
90160
91741
  /** The calling user's capture channels, newest first. Disconnected channels are included unless excluded. */
90161
91742
  myTimeCampusCaptureChannels: Array<TimeCampusCaptureChannel>;
91743
+ /** The caller's own recent day summaries and weekly digests, newest first. */
91744
+ myTimeIntelligenceDeliveries: Array<TimeCampusTimeIntelligenceDelivery>;
90162
91745
  myTimeWellSpent: TimeCampusTimeWellSpent;
90163
91746
  myVibeLlmContextPreview: VibeLlmContextPreview;
90164
91747
  myVibeLlmContextSettings: VibeLlmContextSettings;
@@ -90729,11 +92312,24 @@ export type Query = {
90729
92312
  resourceTree: Array<Resource>;
90730
92313
  /** Get root resources for a tree view with bounded offset metadata. */
90731
92314
  resourceTreePage: ResourcePage;
90732
- /** Get all resource types. Optionally filter by product (PlatformProduct.slug): returns resource types mapped to that product, plus cross-product types (those with no product mapping) unless includeUnmapped is false. With no product arg, returns every resource type (backward compatible). */
92315
+ /**
92316
+ * Get all resource types. Optionally filter by product (PlatformProduct.slug):
92317
+ * returns resource types mapped to that product, plus cross-product types (those
92318
+ * with no product mapping) unless includeUnmapped is false. With no product arg,
92319
+ * returns every resource type (backward compatible).
92320
+ */
90733
92321
  resourceTypes: Array<Scalars['String']['output']>;
90734
- /** Get all resource types together with the product slugs each is mapped to. Drives the permission-management UI (badges, product assignment). A resource type with an empty products list is cross-product ("All"). */
92322
+ /**
92323
+ * Get all resource types together with the product slugs each is mapped to.
92324
+ * Drives the permission-management UI (badges, product assignment). A resource
92325
+ * type with an empty products list is cross-product ("All").
92326
+ */
90735
92327
  resourceTypesWithProducts: Array<ResourceTypeProductInfo>;
90736
- /** List registered resources in a scope, optionally filtered by type, owner, active state, or a free-text search against `identifier`/`name`. Returns only resources registered via `registerResource`. */
92328
+ /**
92329
+ * List registered resources in a scope, optionally filtered by type, owner,
92330
+ * active state, or a free-text search against `identifier`/`name`.
92331
+ * Returns only resources registered via `registerResource`.
92332
+ */
90737
92333
  resources: Array<Resource>;
90738
92334
  /** Get resources by type across all workspaces (admin only) */
90739
92335
  resourcesByType: WorkspaceResourceList;
@@ -90861,6 +92457,8 @@ export type Query = {
90861
92457
  semListQueryRuns: SemQueryRunConnection;
90862
92458
  semListRelationships: Array<SemRelationship>;
90863
92459
  semModel?: Maybe<SemSemanticModel>;
92460
+ /** Getting-started checklist progress for the calling workspace, derived from the records the workspace actually holds (so it persists across sessions and devices). */
92461
+ semOnboardingProgress: SemOnboardingProgress;
90864
92462
  semQuery?: Maybe<SemQuery>;
90865
92463
  /** A single query run by id (workspace-scoped). Poll this after semRunQuery: runs execute asynchronously and move QUEUED -> PLANNING -> RUNNING -> SUCCEEDED/FAILED. */
90866
92464
  semQueryRun?: Maybe<SemQueryRun>;
@@ -90908,17 +92506,28 @@ export type Query = {
90908
92506
  siemDestinations: Array<SiemDestination>;
90909
92507
  softwareAssets: Array<SoftwareAsset>;
90910
92508
  subAgent?: Maybe<SubAiAgent>;
92509
+ /** The workspace's scheduled-sweep registration, if any. */
92510
+ subAgentSchedule?: Maybe<SubAgentSchedule>;
90911
92511
  /** Benchmark dataset: aggregated min/median/max for one (provider, plan) tuple. Used by the /vs pages and the renewal assistant to surface "what others pay for <X>" in a single network round-trip. */
90912
92512
  subBenchmarkSummary?: Maybe<SubBenchmarkSummary>;
92513
+ subDecision?: Maybe<SubDecision>;
92514
+ /** Duplicate and overlapping relationships in the current workspace, largest annual saving first. Paginate with `pagination.offset`. */
92515
+ subDetectOverlaps: SubOverlapConnection;
92516
+ /** Enterprise SaaS spend dashboard. `currency` defaults to the currency most relationships are billed in; `highCostThreshold` (monthly, default 500) sets when an AI service is flagged as high cost. */
92517
+ subEnterpriseSpendDashboard: SubEnterpriseSpendDashboard;
90913
92518
  /** Liveness/identity probe for the Subscriber Bot subgraph. */
90914
92519
  subHealth: Scalars['String']['output'];
90915
92520
  subListAdapterSubmissions: SubAdapterSubmissionConnection;
92521
+ /** Recent sweeps of the workspace, newest first. */
92522
+ subListAgentSweeps: SubAgentSweepConnection;
90916
92523
  subListAgents: SubAiAgentConnection;
90917
92524
  /** List assets. Pass `relationshipId` to scope to one subscription, or omit it to list every asset in the workspace (the Digital Asset Vault). */
90918
92525
  subListAssets: SubAssetConnection;
90919
92526
  /** Benchmark dataset: list observed price points (Phase 1 BOFF-4156). Public read so the marketing /vs pages can show "what others pay" without a workspace context; filtered to a single (provider, region, currency) combination when those inputs are supplied. */
90920
92527
  subListBenchmarkDataPoints: SubBenchmarkDataPointConnection;
90921
92528
  subListChannels: SubCommunicationChannelConnection;
92529
+ /** The agent decision queue, newest first. */
92530
+ subListDecisions: SubDecisionConnection;
90922
92531
  subListEntitlements: SubEntitlementConnection;
90923
92532
  /** The Universal Inbox — every merged subscription communication. */
90924
92533
  subListInboxMessages: SubInboxMessageConnection;
@@ -90931,9 +92540,12 @@ export type Query = {
90931
92540
  subListProviders: SubProviderConnection;
90932
92541
  subListRelationships: SubRelationshipConnection;
90933
92542
  subListRenewalEvents: SubRenewalEventConnection;
92543
+ subListSpendBudgets: Array<SubSpendBudget>;
90934
92544
  subListWorkflows: SubWorkflowConnection;
90935
92545
  subProvider?: Maybe<SubProvider>;
90936
92546
  subRelationship?: Maybe<SubRelationship>;
92547
+ /** The cost-optimization dashboard: headline yearly savings, open decisions by recommendation and bundle suggestions. */
92548
+ subSavingsOverview: SubSavingsOverview;
90937
92549
  /** Get a single subscribed product by ID */
90938
92550
  subscribedProduct?: Maybe<SubscribedProduct>;
90939
92551
  /** Get all subscribed products for the current workspace. Workspace ID is read from gateway context (x-workspace-id header). */
@@ -90965,12 +92577,15 @@ export type Query = {
90965
92577
  tcpListDiscussions: TcpDiscussionConnection;
90966
92578
  /** Oral histories at PUBLIC/COMMUNITY access level only. RESTRICTED and EMBARGOED testimonies (narrator identity + full transcript) are never returned here — use `tcpListRestrictedOralHistories` for those. */
90967
92579
  tcpListOralHistories: TcpOralHistoryConnection;
92580
+ /** Replies to a discussion, oldest first. Items are EntityComment references; the gateway resolves their content from wspace-conversations-svc. */
90968
92581
  tcpListReplies: TcpReplyConnection;
90969
92582
  /** Elevated-access archive items: RESTRICTED and EMBARGOED only. Requires the separate `theculturepost-archive-item-restricted` permission — holding generic `theculturepost-archive-item:read` is NOT sufficient. */
90970
92583
  tcpListRestrictedArchiveItems: TcpArchiveItemConnection;
90971
92584
  /** Elevated-access oral histories: RESTRICTED and EMBARGOED only — narrator identities and full testimony transcripts of named third parties. Requires the separate `theculturepost-oral-history-restricted` permission — holding generic `theculturepost-oral-history:read` is NOT sufficient. */
90972
92585
  tcpListRestrictedOralHistories: TcpOralHistoryConnection;
90973
92586
  tcpListStories: TcpStoryConnection;
92587
+ /** A story's evidence trail — its numbered claims in display order. Claims are part of the citation/fact-checking surface, so they share the citation permission resource. */
92588
+ tcpListStoryClaims: Array<TcpStoryClaim>;
90974
92589
  tcpListTopics: TcpTopicConnection;
90975
92590
  /** The calling actor's own bookmarked stories (personal reading list). Self-scoped: the resolver filters by the caller's actor id — that filter IS the access control, no other actor's list is ever reachable. */
90976
92591
  tcpMySavedStories: TcpStoryConnection;
@@ -91099,6 +92714,8 @@ export type Query = {
91099
92714
  timeCampusApplets: Array<TimeCampusApplet>;
91100
92715
  timeCampusCaptureEvent?: Maybe<TimeCampusCaptureEvent>;
91101
92716
  timeCampusCaptureEvents: TimeCampusCaptureEventListResponse;
92717
+ /** The OAuth-backed sources a capture channel can pull from. */
92718
+ timeCampusCapturePullProviders: Array<TimeCampusCapturePullProvider>;
91102
92719
  timeCampusDataErasureRequests: Array<TimeCampusDataErasureRequest>;
91103
92720
  timeCampusFeatureFlags: TimeCampusFeatureFlagList;
91104
92721
  /** Adaptive focus-block suggestions for one local day. `dayStart` is the instant of the caller's local midnight for that day (yesterday up to 14 days ahead). Ranked from the caller's own work patterns, meetings and past focus sessions; slots already accepted, snoozed or dismissed are excluded. */
@@ -91146,6 +92763,10 @@ export type Query = {
91146
92763
  timeEntry?: Maybe<TimeEntry>;
91147
92764
  timeEntryCount: Scalars['Int']['output'];
91148
92765
  timeEntryStats: TimeEntryStats;
92766
+ /** The workspace's scheduler registration, if any member has opted in. */
92767
+ timeIntelligenceSchedule?: Maybe<TimeCampusTimeIntelligenceSchedule>;
92768
+ /** Recent sweeps of the workspace, newest first. */
92769
+ timeIntelligenceSweeps: Array<TimeCampusTimeIntelligenceSweep>;
91149
92770
  todayFocusScore?: Maybe<FocusScore>;
91150
92771
  todayWorkPattern?: Maybe<WorkPattern>;
91151
92772
  toolApprovalRequest?: Maybe<ToolApprovalRequest>;
@@ -92648,6 +94269,16 @@ export type QueryBuiMyTutorSessionsArgs = {
92648
94269
  pagination?: InputMaybe<PaginationInput>;
92649
94270
  };
92650
94271
  /** Base Query type with placeholder field. Extended by individual query files. */
94272
+ export type QueryBuiProctoringIdentityFileArgs = {
94273
+ sessionId: Scalars['ID']['input'];
94274
+ };
94275
+ /** Base Query type with placeholder field. Extended by individual query files. */
94276
+ export type QueryBuiProctoringSessionSignalsArgs = {
94277
+ after?: InputMaybe<Scalars['ID']['input']>;
94278
+ limit?: InputMaybe<Scalars['Int']['input']>;
94279
+ sessionId: Scalars['ID']['input'];
94280
+ };
94281
+ /** Base Query type with placeholder field. Extended by individual query files. */
92651
94282
  export type QueryBuiSubmissionArgs = {
92652
94283
  id: Scalars['ID']['input'];
92653
94284
  };
@@ -93174,6 +94805,11 @@ export type QueryConnectionsExpiringSoonArgs = {
93174
94805
  withinDays?: InputMaybe<Scalars['Int']['input']>;
93175
94806
  };
93176
94807
  /** Base Query type with placeholder field. Extended by individual query files. */
94808
+ export type QueryConnectionsNotUsableByArgs = {
94809
+ connectionIds: Array<Scalars['ID']['input']>;
94810
+ principalId: Scalars['ID']['input'];
94811
+ };
94812
+ /** Base Query type with placeholder field. Extended by individual query files. */
93177
94813
  export type QueryConversationArgs = {
93178
94814
  id: Scalars['ID']['input'];
93179
94815
  };
@@ -93437,6 +95073,10 @@ export type QueryCosRunArgs = {
93437
95073
  id: Scalars['ID']['input'];
93438
95074
  };
93439
95075
  /** Base Query type with placeholder field. Extended by individual query files. */
95076
+ export type QueryCosSemanticSearchArgs = {
95077
+ input: CosSemanticSearchInput;
95078
+ };
95079
+ /** Base Query type with placeholder field. Extended by individual query files. */
93440
95080
  export type QueryCosSourceArgs = {
93441
95081
  id: Scalars['ID']['input'];
93442
95082
  };
@@ -94135,6 +95775,11 @@ export type QueryEventSchemasArgs = {
94135
95775
  offset?: InputMaybe<Scalars['Int']['input']>;
94136
95776
  };
94137
95777
  /** Base Query type with placeholder field. Extended by individual query files. */
95778
+ export type QueryEventfullyManagedAiDecisionArgs = {
95779
+ eventId: Scalars['ID']['input'];
95780
+ kind: EventfullyManagedAiDecisionKind;
95781
+ };
95782
+ /** Base Query type with placeholder field. Extended by individual query files. */
94138
95783
  export type QueryEventfullyManagedAnalyticsSnapshotsArgs = {
94139
95784
  eventId?: InputMaybe<Scalars['ID']['input']>;
94140
95785
  limit?: InputMaybe<Scalars['Int']['input']>;
@@ -94303,6 +95948,12 @@ export type QueryEventfullyManagedPromoCodesArgs = {
94303
95948
  workspaceId?: InputMaybe<Scalars['ID']['input']>;
94304
95949
  };
94305
95950
  /** Base Query type with placeholder field. Extended by individual query files. */
95951
+ export type QueryEventfullyManagedRecommendSessionsArgs = {
95952
+ attendeeId: Scalars['ID']['input'];
95953
+ eventId: Scalars['ID']['input'];
95954
+ limit?: InputMaybe<Scalars['Int']['input']>;
95955
+ };
95956
+ /** Base Query type with placeholder field. Extended by individual query files. */
94306
95957
  export type QueryEventfullyManagedRegistrationsArgs = {
94307
95958
  eventId?: InputMaybe<Scalars['ID']['input']>;
94308
95959
  limit?: InputMaybe<Scalars['Int']['input']>;
@@ -94786,6 +96437,7 @@ export type QueryGetConnectionTagsArgs = {
94786
96437
  /** Base Query type with placeholder field. Extended by individual query files. */
94787
96438
  export type QueryGetConnectionTokenArgs = {
94788
96439
  connectionId: Scalars['ID']['input'];
96440
+ principalId?: InputMaybe<Scalars['ID']['input']>;
94789
96441
  workspaceId: Scalars['ID']['input'];
94790
96442
  };
94791
96443
  /** Base Query type with placeholder field. Extended by individual query files. */
@@ -97883,6 +99535,10 @@ export type QueryHealthyBowlWateringRunsArgs = {
97883
99535
  scheduleId?: InputMaybe<Scalars['ID']['input']>;
97884
99536
  };
97885
99537
  /** Base Query type with placeholder field. Extended by individual query files. */
99538
+ export type QueryHokActivationFunnelArgs = {
99539
+ period?: InputMaybe<Scalars['String']['input']>;
99540
+ };
99541
+ /** Base Query type with placeholder field. Extended by individual query files. */
97886
99542
  export type QueryHokChannelScheduleArgs = {
97887
99543
  channelId: Scalars['ID']['input'];
97888
99544
  from?: InputMaybe<Scalars['DateTime']['input']>;
@@ -99899,6 +101555,10 @@ export type QueryMySourceConsentsArgs = {
99899
101555
  pagination?: InputMaybe<PaginationInput>;
99900
101556
  };
99901
101557
  /** Base Query type with placeholder field. Extended by individual query files. */
101558
+ export type QueryMySustainedLoadArgs = {
101559
+ weeks?: InputMaybe<Scalars['Int']['input']>;
101560
+ };
101561
+ /** Base Query type with placeholder field. Extended by individual query files. */
99902
101562
  export type QueryMyTimeCampusCaptureChannelArgs = {
99903
101563
  id: Scalars['ID']['input'];
99904
101564
  };
@@ -99907,6 +101567,10 @@ export type QueryMyTimeCampusCaptureChannelsArgs = {
99907
101567
  includeDisconnected?: InputMaybe<Scalars['Boolean']['input']>;
99908
101568
  };
99909
101569
  /** Base Query type with placeholder field. Extended by individual query files. */
101570
+ export type QueryMyTimeIntelligenceDeliveriesArgs = {
101571
+ limit?: InputMaybe<Scalars['Int']['input']>;
101572
+ };
101573
+ /** Base Query type with placeholder field. Extended by individual query files. */
99910
101574
  export type QueryMyTimeWellSpentArgs = {
99911
101575
  from: Scalars['DateTime']['input'];
99912
101576
  to: Scalars['DateTime']['input'];
@@ -102173,11 +103837,28 @@ export type QuerySubBenchmarkSummaryArgs = {
102173
103837
  region?: InputMaybe<Scalars['String']['input']>;
102174
103838
  };
102175
103839
  /** Base Query type with placeholder field. Extended by individual query files. */
103840
+ export type QuerySubDecisionArgs = {
103841
+ id: Scalars['ID']['input'];
103842
+ };
103843
+ /** Base Query type with placeholder field. Extended by individual query files. */
103844
+ export type QuerySubDetectOverlapsArgs = {
103845
+ pagination?: InputMaybe<PaginationInput>;
103846
+ };
103847
+ /** Base Query type with placeholder field. Extended by individual query files. */
103848
+ export type QuerySubEnterpriseSpendDashboardArgs = {
103849
+ currency?: InputMaybe<Scalars['String']['input']>;
103850
+ highCostThreshold?: InputMaybe<Scalars['Float']['input']>;
103851
+ };
103852
+ /** Base Query type with placeholder field. Extended by individual query files. */
102176
103853
  export type QuerySubListAdapterSubmissionsArgs = {
102177
103854
  pagination?: InputMaybe<PaginationInput>;
102178
103855
  status?: InputMaybe<SubSubmissionStatus>;
102179
103856
  };
102180
103857
  /** Base Query type with placeholder field. Extended by individual query files. */
103858
+ export type QuerySubListAgentSweepsArgs = {
103859
+ pagination?: InputMaybe<PaginationInput>;
103860
+ };
103861
+ /** Base Query type with placeholder field. Extended by individual query files. */
102181
103862
  export type QuerySubListAgentsArgs = {
102182
103863
  kind?: InputMaybe<SubAgentKind>;
102183
103864
  ownerId?: InputMaybe<Scalars['ID']['input']>;
@@ -102200,6 +103881,11 @@ export type QuerySubListChannelsArgs = {
102200
103881
  pagination?: InputMaybe<PaginationInput>;
102201
103882
  };
102202
103883
  /** Base Query type with placeholder field. Extended by individual query files. */
103884
+ export type QuerySubListDecisionsArgs = {
103885
+ filter?: InputMaybe<SubDecisionFilter>;
103886
+ pagination?: InputMaybe<PaginationInput>;
103887
+ };
103888
+ /** Base Query type with placeholder field. Extended by individual query files. */
102203
103889
  export type QuerySubListEntitlementsArgs = {
102204
103890
  pagination?: InputMaybe<PaginationInput>;
102205
103891
  relationshipId: Scalars['ID']['input'];
@@ -102376,6 +104062,10 @@ export type QueryTcpListStoriesArgs = {
102376
104062
  topicId?: InputMaybe<Scalars['ID']['input']>;
102377
104063
  };
102378
104064
  /** Base Query type with placeholder field. Extended by individual query files. */
104065
+ export type QueryTcpListStoryClaimsArgs = {
104066
+ storyId: Scalars['ID']['input'];
104067
+ };
104068
+ /** Base Query type with placeholder field. Extended by individual query files. */
102379
104069
  export type QueryTcpListTopicsArgs = {
102380
104070
  category?: InputMaybe<TcpTopicCategory>;
102381
104071
  pagination?: InputMaybe<PaginationInput>;
@@ -102895,6 +104585,10 @@ export type QueryTimeEntryStatsArgs = {
102895
104585
  startDate?: InputMaybe<Scalars['DateTime']['input']>;
102896
104586
  };
102897
104587
  /** Base Query type with placeholder field. Extended by individual query files. */
104588
+ export type QueryTimeIntelligenceSweepsArgs = {
104589
+ limit?: InputMaybe<Scalars['Int']['input']>;
104590
+ };
104591
+ /** Base Query type with placeholder field. Extended by individual query files. */
102898
104592
  export type QueryToolApprovalRequestArgs = {
102899
104593
  id: Scalars['ID']['input'];
102900
104594
  };
@@ -105078,7 +106772,11 @@ export type ResolvedSecret = {
105078
106772
  value: Scalars['String']['output'];
105079
106773
  vaultId: Scalars['String']['output'];
105080
106774
  };
105081
- /** Registered resource with custom permission configurations. Resources are only registered when they have non-default permissions (overrides, visibility rules, or scoped assignments). */
106775
+ /**
106776
+ * Registered resource with custom permission configurations.
106777
+ * Resources are only registered when they have non-default permissions
106778
+ * (overrides, visibility rules, or scoped assignments).
106779
+ */
105082
106780
  export type Resource = {
105083
106781
  __typename?: 'Resource';
105084
106782
  children: Array<Resource>;
@@ -105128,11 +106826,22 @@ export declare enum ResourceBookingStatus {
105128
106826
  }
105129
106827
  /** Filter for querying resources */
105130
106828
  export type ResourceFilterInput = {
105131
- /** Defaults to `true` — only active resources are returned. Omit the field or pass `null` to use the default; pass `false` to find deactivated resources. To list both, issue two separate queries (`true` then `false`) and merge client-side; tracked in BOFF-2419. */
106829
+ /**
106830
+ * Defaults to `true` — only active resources are returned. Omit the field
106831
+ * or pass `null` to use the default; pass `false` to find deactivated
106832
+ * resources. To list both, issue two separate queries (`true` then
106833
+ * `false`) and merge client-side; tracked in BOFF-2419.
106834
+ */
105132
106835
  isActive?: InputMaybe<Scalars['Boolean']['input']>;
105133
106836
  ownerId?: InputMaybe<Scalars['String']['input']>;
105134
106837
  resourceType?: InputMaybe<Scalars['String']['input']>;
105135
- /** Case-insensitive substring match against resource `identifier` and `name`. Blank or whitespace-only values are ignored. Input is capped at 200 characters server-side (truncation happens before LIKE-escaping, so the cap applies to user content). PostgreSQL LIKE wildcards (`%`, `_`) and the escape character (`\\`) match literally, not as wildcards. */
106838
+ /**
106839
+ * Case-insensitive substring match against resource `identifier` and `name`.
106840
+ * Blank or whitespace-only values are ignored. Input is capped at 200
106841
+ * characters server-side (truncation happens before LIKE-escaping, so the
106842
+ * cap applies to user content). PostgreSQL LIKE wildcards (`%`, `_`) and
106843
+ * the escape character (`\\`) match literally, not as wildcards.
106844
+ */
105136
106845
  search?: InputMaybe<Scalars['String']['input']>;
105137
106846
  };
105138
106847
  /** Resource limits snapshot for a specific point in time */
@@ -105198,7 +106907,10 @@ export type ResourcePlanListResponse = {
105198
106907
  items: Array<ResourcePlan>;
105199
106908
  total: Scalars['Int']['output'];
105200
106909
  };
105201
- /** A resource type (permission group) together with the products it is mapped to. An empty products list means the resource type is cross-product ("All"). */
106910
+ /**
106911
+ * A resource type (permission group) together with the products it is mapped to.
106912
+ * An empty products list means the resource type is cross-product ("All").
106913
+ */
105202
106914
  export type ResourceTypeProductInfo = {
105203
106915
  __typename?: 'ResourceTypeProductInfo';
105204
106916
  /** Product slugs (PlatformProduct.slug) this resource type is relevant to. */
@@ -105688,7 +107400,10 @@ export type Role = {
105688
107400
  /** Role-level permission overrides */
105689
107401
  permissionOverrides: Array<RolePermissionOverride>;
105690
107402
  priority: Scalars['Int']['output'];
105691
- /** Product this role belongs to (PlatformProduct.slug). Null = cross-product / platform role (e.g. Workspace Owner, Editor, Viewer) shown under every product. */
107403
+ /**
107404
+ * Product this role belongs to (PlatformProduct.slug). Null = cross-product /
107405
+ * platform role (e.g. Workspace Owner, Editor, Viewer) shown under every product.
107406
+ */
105692
107407
  productSlug?: Maybe<Scalars['String']['output']>;
105693
107408
  scopeId: Scalars['String']['output'];
105694
107409
  scopeType: Scalars['String']['output'];
@@ -105717,14 +107432,27 @@ export type RoleDefaultPermission = {
105717
107432
  resourceType: Scalars['String']['output'];
105718
107433
  roleId: Scalars['String']['output'];
105719
107434
  };
105720
- /** Filter for querying roles. Note: scopeId is intentionally not part of this filter — the workspace scope is derived from the request context (x-workspace-id) and cannot be overridden by the client. This prevents cross-workspace reads. */
107435
+ /**
107436
+ * Filter for querying roles.
107437
+ *
107438
+ * Note: scopeId is intentionally not part of this filter — the workspace scope
107439
+ * is derived from the request context (x-workspace-id) and cannot be overridden
107440
+ * by the client. This prevents cross-workspace reads.
107441
+ */
105721
107442
  export type RoleFilterInput = {
105722
- /** Whether to include cross-product/platform roles (productSlug = null) when a product filter is applied. Defaults to true. Ignored when product is unset. */
107443
+ /**
107444
+ * Whether to include cross-product/platform roles (productSlug = null) when a
107445
+ * product filter is applied. Defaults to true. Ignored when product is unset.
107446
+ */
105723
107447
  includePlatformRoles?: InputMaybe<Scalars['Boolean']['input']>;
105724
107448
  includeSystem?: InputMaybe<Scalars['Boolean']['input']>;
105725
107449
  isSystem?: InputMaybe<Scalars['Boolean']['input']>;
105726
107450
  parentId?: InputMaybe<Scalars['ID']['input']>;
105727
- /** Filter roles by product (PlatformProduct.slug). When set, returns roles for that product. Cross-product/platform roles (productSlug = null) are included unless includePlatformRoles is explicitly false. */
107451
+ /**
107452
+ * Filter roles by product (PlatformProduct.slug). When set, returns roles for
107453
+ * that product. Cross-product/platform roles (productSlug = null) are included
107454
+ * unless includePlatformRoles is explicitly false.
107455
+ */
105728
107456
  product?: InputMaybe<Scalars['String']['input']>;
105729
107457
  };
105730
107458
  /** Input for checkRoleGrant: may the requester grant these roles in scopeId? */
@@ -105740,9 +107468,17 @@ export type RoleGrantCheckResult = {
105740
107468
  __typename?: 'RoleGrantCheckResult';
105741
107469
  /** True when setActorRoles would let the requester add every requested role */
105742
107470
  allowed: Scalars['Boolean']['output'];
105743
- /** Null when allowed; otherwise ROLE_NOT_FOUND | ROLE_SCOPE_MISMATCH | MAX_ROLES_EXCEEDED | ASSIGNMENT_CREATE_REQUIRED | PROTECTED_ROLE_OWNER_ONLY | ROLE_ESCALATION */
107471
+ /**
107472
+ * Null when allowed; otherwise ROLE_NOT_FOUND | ROLE_SCOPE_MISMATCH | MAX_ROLES_EXCEEDED |
107473
+ * ASSIGNMENT_CREATE_REQUIRED | PROTECTED_ROLE_OWNER_ONLY | ROLE_ESCALATION
107474
+ */
105744
107475
  reasonCode?: Maybe<Scalars['String']['output']>;
105745
- /** The roles refused for reasonCode: the missing or out-of-scope roles, every requested role (ASSIGNMENT_CREATE_REQUIRED), the Owner/Admin roles (PROTECTED_ROLE_OWNER_ONLY), or the first role found above the requester's own authority (ROLE_ESCALATION). Empty when allowed or for MAX_ROLES_EXCEEDED. */
107476
+ /**
107477
+ * The roles refused for reasonCode: the missing or out-of-scope roles, every requested role
107478
+ * (ASSIGNMENT_CREATE_REQUIRED), the Owner/Admin roles (PROTECTED_ROLE_OWNER_ONLY), or the first
107479
+ * role found above the requester's own authority (ROLE_ESCALATION). Empty when allowed or for
107480
+ * MAX_ROLES_EXCEEDED.
107481
+ */
105746
107482
  refusedRoleIds: Array<Scalars['ID']['output']>;
105747
107483
  };
105748
107484
  /** Basic role information */
@@ -108486,6 +110222,33 @@ export declare enum SemModelStatus {
108486
110222
  Draft = "DRAFT",
108487
110223
  Published = "PUBLISHED"
108488
110224
  }
110225
+ export type SemOnboardingProgress = {
110226
+ __typename?: 'SemOnboardingProgress';
110227
+ completedCount: Scalars['Int']['output'];
110228
+ /** True while the workspace still holds the getting-started demo data. */
110229
+ demoDataPresent: Scalars['Boolean']['output'];
110230
+ isComplete: Scalars['Boolean']['output'];
110231
+ steps: Array<SemOnboardingStep>;
110232
+ totalCount: Scalars['Int']['output'];
110233
+ workspaceId: Scalars['ID']['output'];
110234
+ };
110235
+ /** One getting-started step. A step is complete once the workspace holds at least one record of the matching kind that the user created themselves; records added by the demo-data seed are never counted. */
110236
+ export type SemOnboardingStep = {
110237
+ __typename?: 'SemOnboardingStep';
110238
+ completed: Scalars['Boolean']['output'];
110239
+ /** How many of the user's own records satisfy this step. */
110240
+ count: Scalars['Int']['output'];
110241
+ key: SemOnboardingStepKey;
110242
+ };
110243
+ /** The getting-started steps a new SemanticFed workspace works through, in order. */
110244
+ export declare enum SemOnboardingStepKey {
110245
+ AddDataSource = "ADD_DATA_SOURCE",
110246
+ AddPolicy = "ADD_POLICY",
110247
+ CreateModel = "CREATE_MODEL",
110248
+ DefineMetric = "DEFINE_METRIC",
110249
+ RegisterConnector = "REGISTER_CONNECTOR",
110250
+ RunQuery = "RUN_QUERY"
110251
+ }
108489
110252
  export type SemPageInfo = {
108490
110253
  __typename?: 'SemPageInfo';
108491
110254
  cursor?: Maybe<Scalars['String']['output']>;
@@ -108626,6 +110389,24 @@ export declare enum SemRelationshipKind {
108626
110389
  OneToMany = "ONE_TO_MANY",
108627
110390
  OneToOne = "ONE_TO_ONE"
108628
110391
  }
110392
+ export type SemRemoveWorkspaceDemoDataResult = {
110393
+ __typename?: 'SemRemoveWorkspaceDemoDataResult';
110394
+ removedConnectors: Scalars['Int']['output'];
110395
+ removedDataSources: Scalars['Int']['output'];
110396
+ removedModels: Scalars['Int']['output'];
110397
+ removedQueries: Scalars['Int']['output'];
110398
+ };
110399
+ /** Identifiers of the demo records. `created` is false when the workspace already held the demo data and the call returned the existing records unchanged. */
110400
+ export type SemSeedWorkspaceDemoDataResult = {
110401
+ __typename?: 'SemSeedWorkspaceDemoDataResult';
110402
+ connectorId: Scalars['ID']['output'];
110403
+ created: Scalars['Boolean']['output'];
110404
+ dataSourceId: Scalars['ID']['output'];
110405
+ entityIds: Array<Scalars['ID']['output']>;
110406
+ metricIds: Array<Scalars['ID']['output']>;
110407
+ modelId: Scalars['ID']['output'];
110408
+ queryId: Scalars['ID']['output'];
110409
+ };
108629
110410
  export type SemSemanticModel = {
108630
110411
  __typename?: 'SemSemanticModel';
108631
110412
  createdAt: Scalars['DateTime']['output'];
@@ -109246,6 +111027,14 @@ export type SetAgentVisibilityInput = {
109246
111027
  /** `PRIVATE` = owner only. `WORKSPACE` = every member with the matching `@rbac` permission. */
109247
111028
  visibility: VibecontrolsAgentVisibility;
109248
111029
  };
111030
+ /** Ask for a skill on a job posting by `skillId`, or by `skillName` (resolved through the taxonomy aliases; an unknown name becomes a custom workspace skill). Setting an already-listed skill updates it. `required` defaults to true; a nice-to-have skill is removed from the legacy `requirements` strings. */
111031
+ export type SetCrewJobPostingSkillInput = {
111032
+ jobPostingId: Scalars['ID']['input'];
111033
+ minProficiency?: InputMaybe<Scalars['Int']['input']>;
111034
+ required?: InputMaybe<Scalars['Boolean']['input']>;
111035
+ skillId?: InputMaybe<Scalars['ID']['input']>;
111036
+ skillName?: InputMaybe<Scalars['String']['input']>;
111037
+ };
109249
111038
  /** BOFF-3938 — sets every date from startDate to endDate (inclusive, YYYY-MM-DD, at most 366 days) to exactly these values, replacing what those dates had. AVAILABLE with no price, minStay or note returns the dates to the property's normal rules. */
109250
111039
  export type SetGgnomadPropertyAvailabilityInput = {
109251
111040
  endDate: Scalars['String']['input'];
@@ -109449,6 +111238,18 @@ export type ShareCollectionInput = {
109449
111238
  message?: InputMaybe<Scalars['String']['input']>;
109450
111239
  userId?: InputMaybe<Scalars['ID']['input']>;
109451
111240
  };
111241
+ /** The complete sharing of a connection: replaces its visibility and every current grant. */
111242
+ export type ShareConnectionInput = {
111243
+ connectionId: Scalars['ID']['input'];
111244
+ /**
111245
+ * Hand the connection to this person in the same change, so the new owner and the new sharing
111246
+ * apply together or not at all. Workspace administrators only; omit to keep the owner.
111247
+ */
111248
+ ownerId?: InputMaybe<Scalars['ID']['input']>;
111249
+ /** At most 100 grants; the owner never needs one */
111250
+ shares: Array<ConnectionShareInput>;
111251
+ visibility: ConnectionVisibility;
111252
+ };
109452
111253
  /** Input for sharing an entity with a specific person by email. */
109453
111254
  export type ShareEntityInput = {
109454
111255
  email: Scalars['String']['input'];
@@ -110305,11 +112106,111 @@ export declare enum SubAgentKind {
110305
112106
  Renewal = "RENEWAL",
110306
112107
  Vendor = "VENDOR"
110307
112108
  }
112109
+ export type SubAgentRunResult = {
112110
+ __typename?: 'SubAgentRunResult';
112111
+ agentId: Scalars['ID']['output'];
112112
+ applied: Scalars['Int']['output'];
112113
+ decisions: Array<SubDecision>;
112114
+ dryRun: Scalars['Boolean']['output'];
112115
+ /** Relationships evaluated (ACTIVE and TRIAL only). */
112116
+ evaluated: Scalars['Int']['output'];
112117
+ flagged: Scalars['Int']['output'];
112118
+ invocationRef?: Maybe<Scalars['String']['output']>;
112119
+ kind: SubAgentKind;
112120
+ proposed: Scalars['Int']['output'];
112121
+ ranAt: Scalars['DateTime']['output'];
112122
+ runId: Scalars['ID']['output'];
112123
+ /** True when the workspace has more relationships than one run evaluates. */
112124
+ truncated: Scalars['Boolean']['output'];
112125
+ };
112126
+ /** The workspace's registration with wspace-scheduler-svc. A workspace admin can pause the job on the shared Schedules screen; the loop leaves it paused. */
112127
+ export type SubAgentSchedule = {
112128
+ __typename?: 'SubAgentSchedule';
112129
+ cronExpression: Scalars['String']['output'];
112130
+ id: Scalars['ID']['output'];
112131
+ lastError?: Maybe<Scalars['String']['output']>;
112132
+ lastSweepAt?: Maybe<Scalars['DateTime']['output']>;
112133
+ schedulerJobId?: Maybe<Scalars['ID']['output']>;
112134
+ status: SubAgentScheduleStatus;
112135
+ timezone: Scalars['String']['output'];
112136
+ updatedAt: Scalars['DateTime']['output'];
112137
+ workspaceId: Scalars['ID']['output'];
112138
+ };
112139
+ export type SubAgentScheduleReconcileResult = {
112140
+ __typename?: 'SubAgentScheduleReconcileResult';
112141
+ ensured: Scalars['Int']['output'];
112142
+ failed: Scalars['Int']['output'];
112143
+ schedules: Array<SubAgentSchedule>;
112144
+ /** Workspaces with an enabled, schedulable agent. */
112145
+ workspaces: Scalars['Int']['output'];
112146
+ };
112147
+ export declare enum SubAgentScheduleStatus {
112148
+ Active = "ACTIVE",
112149
+ Failed = "FAILED",
112150
+ Pending = "PENDING"
112151
+ }
110308
112152
  export declare enum SubAgentStatus {
110309
112153
  Autonomous = "AUTONOMOUS",
110310
112154
  Disabled = "DISABLED",
110311
112155
  SuggestOnly = "SUGGEST_ONLY"
110312
112156
  }
112157
+ export type SubAgentSweep = {
112158
+ __typename?: 'SubAgentSweep';
112159
+ agents: Array<SubAgentSweepAgentOutcome>;
112160
+ agentsConsidered: Scalars['Int']['output'];
112161
+ agentsRun: Scalars['Int']['output'];
112162
+ agentsSkipped: Scalars['Int']['output'];
112163
+ decisionsCreated: Scalars['Int']['output'];
112164
+ decisionsRefreshed: Scalars['Int']['output'];
112165
+ /** True when this call was a redelivery of an earlier fire with the same idempotency key; the original sweep is returned and nothing ran again. */
112166
+ duplicate: Scalars['Boolean']['output'];
112167
+ durationMs?: Maybe<Scalars['Int']['output']>;
112168
+ error?: Maybe<Scalars['String']['output']>;
112169
+ finishedAt?: Maybe<Scalars['DateTime']['output']>;
112170
+ id: Scalars['ID']['output'];
112171
+ notificationsSent: Scalars['Int']['output'];
112172
+ scheduledFor?: Maybe<Scalars['DateTime']['output']>;
112173
+ /** KILL_SWITCH, AGENTS_MODULE_DISABLED, NO_DUE_AGENTS, DAILY_DECISION_CAP, AI_QUOTA_EXHAUSTED or AI_QUOTA_NOT_PROVISIONED when the sweep was skipped. */
112174
+ skippedReason?: Maybe<Scalars['String']['output']>;
112175
+ startedAt: Scalars['DateTime']['output'];
112176
+ status: SubAgentSweepStatus;
112177
+ trigger: SubAgentSweepTrigger;
112178
+ workspaceId: Scalars['ID']['output'];
112179
+ };
112180
+ /** What one sweep did with one agent. */
112181
+ export type SubAgentSweepAgentOutcome = {
112182
+ __typename?: 'SubAgentSweepAgentOutcome';
112183
+ agentId: Scalars['ID']['output'];
112184
+ applied: Scalars['Int']['output'];
112185
+ created: Scalars['Int']['output'];
112186
+ dryRun: Scalars['Boolean']['output'];
112187
+ durationMs: Scalars['Int']['output'];
112188
+ error?: Maybe<Scalars['String']['output']>;
112189
+ kind: SubAgentKind;
112190
+ /** RAN, FAILED, NOT_DUE (ran too recently for its cadence) or CAPPED (over the per-sweep agent cap or the AI-action quota). */
112191
+ outcome: Scalars['String']['output'];
112192
+ refreshed: Scalars['Int']['output'];
112193
+ runId?: Maybe<Scalars['ID']['output']>;
112194
+ /** New advice held back by a recent dismissal or the daily decision cap. */
112195
+ suppressed: Scalars['Int']['output'];
112196
+ };
112197
+ export type SubAgentSweepConnection = {
112198
+ __typename?: 'SubAgentSweepConnection';
112199
+ items: Array<SubAgentSweep>;
112200
+ pageInfo: SubPageInfo;
112201
+ };
112202
+ export declare enum SubAgentSweepStatus {
112203
+ Completed = "COMPLETED",
112204
+ Failed = "FAILED",
112205
+ Running = "RUNNING",
112206
+ Skipped = "SKIPPED"
112207
+ }
112208
+ export declare enum SubAgentSweepTrigger {
112209
+ /** Run on demand by a super admin. */
112210
+ Manual = "MANUAL",
112211
+ /** Fired by wspace-scheduler-svc. */
112212
+ Scheduled = "SCHEDULED"
112213
+ }
110313
112214
  export type SubAiAgent = {
110314
112215
  __typename?: 'SubAiAgent';
110315
112216
  config?: Maybe<Scalars['JSON']['output']>;
@@ -110417,6 +112318,15 @@ export declare enum SubBillingInterval {
110417
112318
  Weekly = "WEEKLY",
110418
112319
  Yearly = "YEARLY"
110419
112320
  }
112321
+ export type SubBudgetStatus = {
112322
+ __typename?: 'SubBudgetStatus';
112323
+ monthlyBudget: Scalars['Float']['output'];
112324
+ monthlySpend: Scalars['Float']['output'];
112325
+ overBudget: Scalars['Boolean']['output'];
112326
+ utilizationPct: Scalars['Float']['output'];
112327
+ /** Budget minus spend; negative when over budget. */
112328
+ variance: Scalars['Float']['output'];
112329
+ };
110420
112330
  export declare enum SubChannelStatus {
110421
112331
  Disabled = "DISABLED",
110422
112332
  Pending = "PENDING",
@@ -110450,6 +112360,29 @@ export type SubCommunicationChannelConnection = {
110450
112360
  items: Array<SubCommunicationChannel>;
110451
112361
  pageInfo: SubPageInfo;
110452
112362
  };
112363
+ export type SubConsolidateRelationshipsInput = {
112364
+ amount?: InputMaybe<Scalars['Float']['input']>;
112365
+ /** Subscriptions to cancel (1 to 9, without the kept one). */
112366
+ cancelRelationshipIds: Array<Scalars['ID']['input']>;
112367
+ interval?: InputMaybe<SubBillingInterval>;
112368
+ keepRelationshipId: Scalars['ID']['input'];
112369
+ /** Optional bundled plan for the kept subscription. */
112370
+ planId?: InputMaybe<Scalars['ID']['input']>;
112371
+ };
112372
+ export type SubConsolidationFailure = {
112373
+ __typename?: 'SubConsolidationFailure';
112374
+ message: Scalars['String']['output'];
112375
+ relationshipId: Scalars['ID']['output'];
112376
+ };
112377
+ export type SubConsolidationResult = {
112378
+ __typename?: 'SubConsolidationResult';
112379
+ cancelled: Array<SubRelationship>;
112380
+ currency: Scalars['String']['output'];
112381
+ /** Yearly saving of the subscriptions actually cancelled, after any plan change. */
112382
+ estimatedSavings: Scalars['Float']['output'];
112383
+ failed: Array<SubConsolidationFailure>;
112384
+ kept: SubRelationship;
112385
+ };
110453
112386
  export type SubCreateAgentInput = {
110454
112387
  config?: InputMaybe<Scalars['JSON']['input']>;
110455
112388
  description?: InputMaybe<Scalars['String']['input']>;
@@ -110554,6 +112487,7 @@ export type SubCreateRelationshipInput = {
110554
112487
  amount?: InputMaybe<Scalars['Float']['input']>;
110555
112488
  autoRenew?: InputMaybe<Scalars['Boolean']['input']>;
110556
112489
  currency?: InputMaybe<Scalars['String']['input']>;
112490
+ department?: InputMaybe<Scalars['String']['input']>;
110557
112491
  discoverySource?: InputMaybe<SubDiscoverySource>;
110558
112492
  interval?: InputMaybe<SubBillingInterval>;
110559
112493
  kind?: InputMaybe<SubRelationshipKind>;
@@ -110574,6 +112508,98 @@ export type SubCreateWorkflowInput = {
110574
112508
  steps?: InputMaybe<Scalars['JSON']['input']>;
110575
112509
  triggerEvent: Scalars['String']['input'];
110576
112510
  };
112511
+ export type SubCurrencySpend = {
112512
+ __typename?: 'SubCurrencySpend';
112513
+ currency: Scalars['String']['output'];
112514
+ monthlySpend: Scalars['Float']['output'];
112515
+ relationshipCount: Scalars['Int']['output'];
112516
+ };
112517
+ /** One recommendation an agent run made about one relationship. `evidence` holds the rows the strategy reasoned over; `proposedChange` the relationship change applying it makes. `invocationRef` is the run's entry in the shared AI invocation ledger (wspace-prompts-svc `PromptInvocation.id`). */
112518
+ export type SubDecision = {
112519
+ __typename?: 'SubDecision';
112520
+ agent?: Maybe<SubAiAgent>;
112521
+ agentId: Scalars['ID']['output'];
112522
+ appliedAt?: Maybe<Scalars['DateTime']['output']>;
112523
+ appliedBy?: Maybe<Scalars['ID']['output']>;
112524
+ applyInvocationRef?: Maybe<Scalars['String']['output']>;
112525
+ /** 0..1 */
112526
+ confidence: Scalars['Float']['output'];
112527
+ createdAt: Scalars['DateTime']['output'];
112528
+ currency: Scalars['String']['output'];
112529
+ dismissedAt?: Maybe<Scalars['DateTime']['output']>;
112530
+ dismissedReason?: Maybe<Scalars['String']['output']>;
112531
+ /** Annualised saving if applied, in `currency`. */
112532
+ estimatedSavings: Scalars['Float']['output'];
112533
+ evidence: Scalars['JSON']['output'];
112534
+ id: Scalars['ID']['output'];
112535
+ invocationRef?: Maybe<Scalars['String']['output']>;
112536
+ kind: SubDecisionKind;
112537
+ proposedChange: Scalars['JSON']['output'];
112538
+ rationale: Scalars['String']['output'];
112539
+ recommendation: SubDecisionRecommendation;
112540
+ relationship?: Maybe<SubRelationship>;
112541
+ relationshipId: Scalars['ID']['output'];
112542
+ runId: Scalars['ID']['output'];
112543
+ status: SubDecisionStatus;
112544
+ updatedAt: Scalars['DateTime']['output'];
112545
+ validationErrors: Array<Scalars['String']['output']>;
112546
+ workspaceId: Scalars['ID']['output'];
112547
+ };
112548
+ export type SubDecisionConnection = {
112549
+ __typename?: 'SubDecisionConnection';
112550
+ items: Array<SubDecision>;
112551
+ pageInfo: SubPageInfo;
112552
+ };
112553
+ export type SubDecisionFilter = {
112554
+ agentId?: InputMaybe<Scalars['ID']['input']>;
112555
+ kind?: InputMaybe<SubDecisionKind>;
112556
+ recommendation?: InputMaybe<SubDecisionRecommendation>;
112557
+ relationshipId?: InputMaybe<Scalars['ID']['input']>;
112558
+ status?: InputMaybe<SubDecisionStatus>;
112559
+ };
112560
+ /** The portfolio decision an agent strategy made (BOFF-3634). COST agents find CANCEL_CANDIDATE, RENEWAL agents RENEWAL_TRIAGE, VENDOR agents PLAN_RIGHT_SIZE and CONSOLIDATE_OVERLAP (BOFF-3703), and DISCOVERY agents TRIAL_EXPIRY. */
112561
+ export declare enum SubDecisionKind {
112562
+ CancelCandidate = "CANCEL_CANDIDATE",
112563
+ /** Cancel a relationship that another one in the portfolio already covers (duplicate provider, shared capability or subsumed entitlements). */
112564
+ ConsolidateOverlap = "CONSOLIDATE_OVERLAP",
112565
+ PlanRightSize = "PLAN_RIGHT_SIZE",
112566
+ RenewalTriage = "RENEWAL_TRIAGE",
112567
+ TrialExpiry = "TRIAL_EXPIRY"
112568
+ }
112569
+ /** What a decision recommends. Applying it runs the matching relationship mutation: CANCEL -> subCancelRelationship, PAUSE / CONVERT_TRIAL -> subTransitionRelationship, DOWNGRADE / SWITCH_TO_ANNUAL -> subUpdateRelationship. RENEW keeps the auto-renewal and writes nothing. */
112570
+ export declare enum SubDecisionRecommendation {
112571
+ Cancel = "CANCEL",
112572
+ ConvertTrial = "CONVERT_TRIAL",
112573
+ Downgrade = "DOWNGRADE",
112574
+ Pause = "PAUSE",
112575
+ Renew = "RENEW",
112576
+ SwitchToAnnual = "SWITCH_TO_ANNUAL"
112577
+ }
112578
+ export type SubDecisionResult = {
112579
+ __typename?: 'SubDecisionResult';
112580
+ decision: SubDecision;
112581
+ /** The relationship after the applied change. */
112582
+ relationship?: Maybe<SubRelationship>;
112583
+ };
112584
+ /** PROPOSED decisions wait for review. FLAGGED decisions failed output validation and can never be applied. STALE decisions were superseded, or their relationship changed after they were made. */
112585
+ export declare enum SubDecisionStatus {
112586
+ Applied = "APPLIED",
112587
+ Applying = "APPLYING",
112588
+ Dismissed = "DISMISSED",
112589
+ Flagged = "FLAGGED",
112590
+ Proposed = "PROPOSED",
112591
+ Stale = "STALE"
112592
+ }
112593
+ export type SubDepartmentSpend = {
112594
+ __typename?: 'SubDepartmentSpend';
112595
+ annualSpend: Scalars['Float']['output'];
112596
+ budget?: Maybe<SubBudgetStatus>;
112597
+ /** Department / team / cost centre; null for spend not yet allocated. */
112598
+ department?: Maybe<Scalars['String']['output']>;
112599
+ monthlySpend: Scalars['Float']['output'];
112600
+ relationshipCount: Scalars['Int']['output'];
112601
+ sharePct: Scalars['Float']['output'];
112602
+ };
110577
112603
  export declare enum SubDiscoverySource {
110578
112604
  AiAgent = "AI_AGENT",
110579
112605
  EmailScan = "EMAIL_SCAN",
@@ -110582,6 +112608,68 @@ export declare enum SubDiscoverySource {
110582
112608
  PaymentScan = "PAYMENT_SCAN",
110583
112609
  ProviderConnect = "PROVIDER_CONNECT"
110584
112610
  }
112611
+ /** A duplicate-tool warning: one BOFF-3703 overlap group (see subDetectOverlaps) in the dashboard currency, with the departments that pay for its members. */
112612
+ export type SubDuplicateToolGroup = {
112613
+ __typename?: 'SubDuplicateToolGroup';
112614
+ departments: Array<Scalars['String']['output']>;
112615
+ keepRelationshipId: Scalars['ID']['output'];
112616
+ /** The overlap group id (stable across runs). */
112617
+ key: Scalars['String']['output'];
112618
+ monthlySpend: Scalars['Float']['output'];
112619
+ name: Scalars['String']['output'];
112620
+ /** Monthly spend of the members the kept relationship fully covers. */
112621
+ potentialMonthlySavings: Scalars['Float']['output'];
112622
+ /** The shared provider for an EXACT_DUPLICATE group; null otherwise. */
112623
+ providerId?: Maybe<Scalars['ID']['output']>;
112624
+ rationale: Scalars['String']['output'];
112625
+ relationshipCount: Scalars['Int']['output'];
112626
+ relationships: Array<SubDuplicateToolMember>;
112627
+ type: SubOverlapType;
112628
+ };
112629
+ export type SubDuplicateToolMember = {
112630
+ __typename?: 'SubDuplicateToolMember';
112631
+ department?: Maybe<Scalars['String']['output']>;
112632
+ /** The member the overlap detector recommends keeping. */
112633
+ keep: Scalars['Boolean']['output'];
112634
+ label: Scalars['String']['output'];
112635
+ monthlySpend: Scalars['Float']['output'];
112636
+ relationshipId: Scalars['ID']['output'];
112637
+ };
112638
+ export type SubEnterpriseSpendDashboard = {
112639
+ __typename?: 'SubEnterpriseSpendDashboard';
112640
+ activeRelationshipCount: Scalars['Int']['output'];
112641
+ annualSpend: Scalars['Float']['output'];
112642
+ /** Company-wide budget status; null when no company budget is set for this currency. */
112643
+ budget?: Maybe<SubBudgetStatus>;
112644
+ currency: Scalars['String']['output'];
112645
+ departments: Array<SubDepartmentSpend>;
112646
+ /** Monthly saving if every recommended consolidation is made (each relationship counted once). */
112647
+ duplicatePotentialMonthlySavings: Scalars['Float']['output'];
112648
+ duplicateTools: Array<SubDuplicateToolGroup>;
112649
+ generatedAt: Scalars['DateTime']['output'];
112650
+ /** Relationships billing now, most expensive first (top 50). */
112651
+ licenses: Array<SubLicenseRow>;
112652
+ monthlySpend: Scalars['Float']['output'];
112653
+ monthlySpendChangePct?: Maybe<Scalars['Float']['output']>;
112654
+ /** Spend billed in other currencies, which this dashboard does not include. */
112655
+ otherCurrencies: Array<SubCurrencySpend>;
112656
+ /** Monthly run-rate 30 days ago. */
112657
+ previousMonthlySpend: Scalars['Float']['output'];
112658
+ renewalPipeline: Array<SubRenewalQuarter>;
112659
+ riskFlagCount: Scalars['Int']['output'];
112660
+ riskFlags: Array<SubSpendRiskFlag>;
112661
+ /** Seats used as a percentage of seats assigned; null when no seats are tracked. */
112662
+ seatUtilizationPct?: Maybe<Scalars['Float']['output']>;
112663
+ /** Seats across relationships billing now that track SEAT entitlements. */
112664
+ seatsAssigned: Scalars['Int']['output'];
112665
+ seatsUsed: Scalars['Int']['output'];
112666
+ shadowIt: Array<SubShadowItItem>;
112667
+ shadowItCount: Scalars['Int']['output'];
112668
+ shadowItMonthlySpend: Scalars['Float']['output'];
112669
+ trend: Array<SubSpendTrendPoint>;
112670
+ /** True when the workspace has more relationships than one dashboard aggregates. */
112671
+ truncated: Scalars['Boolean']['output'];
112672
+ };
110585
112673
  export type SubEntitlement = {
110586
112674
  __typename?: 'SubEntitlement';
110587
112675
  createdAt: Scalars['DateTime']['output'];
@@ -110610,6 +112698,12 @@ export declare enum SubEntitlementType {
110610
112698
  SupportTier = "SUPPORT_TIER",
110611
112699
  UsageQuota = "USAGE_QUOTA"
110612
112700
  }
112701
+ export type SubHealthRecomputeResult = {
112702
+ __typename?: 'SubHealthRecomputeResult';
112703
+ evaluated: Scalars['Int']['output'];
112704
+ truncated: Scalars['Boolean']['output'];
112705
+ updated: Scalars['Int']['output'];
112706
+ };
110613
112707
  export type SubInboxMessage = {
110614
112708
  __typename?: 'SubInboxMessage';
110615
112709
  actionRequired: Scalars['Boolean']['output'];
@@ -110678,6 +112772,20 @@ export declare enum SubInvoiceStatus {
110678
112772
  Paid = "PAID",
110679
112773
  Refunded = "REFUNDED"
110680
112774
  }
112775
+ export type SubLicenseRow = {
112776
+ __typename?: 'SubLicenseRow';
112777
+ annualCost: Scalars['Float']['output'];
112778
+ department?: Maybe<Scalars['String']['output']>;
112779
+ label: Scalars['String']['output'];
112780
+ monthlySpend: Scalars['Float']['output'];
112781
+ providerName?: Maybe<Scalars['String']['output']>;
112782
+ relationshipId: Scalars['ID']['output'];
112783
+ renewsAt?: Maybe<Scalars['DateTime']['output']>;
112784
+ /** Seats purchased (sum of active SEAT entitlement quotas); null when seats are not tracked. */
112785
+ seatsAssigned?: Maybe<Scalars['Int']['output']>;
112786
+ seatsUsed?: Maybe<Scalars['Int']['output']>;
112787
+ utilizationPct?: Maybe<Scalars['Float']['output']>;
112788
+ };
110681
112789
  export type SubMarketplaceReport = {
110682
112790
  __typename?: 'SubMarketplaceReport';
110683
112791
  createdAt: Scalars['DateTime']['output'];
@@ -110708,6 +112816,64 @@ export declare enum SubModerationAction {
110708
112816
  Dismiss = "DISMISS",
110709
112817
  RemoveListing = "REMOVE_LISTING"
110710
112818
  }
112819
+ export type SubMoneyAmount = {
112820
+ __typename?: 'SubMoneyAmount';
112821
+ amount: Scalars['Float']['output'];
112822
+ currency: Scalars['String']['output'];
112823
+ };
112824
+ export type SubOverlap = {
112825
+ __typename?: 'SubOverlap';
112826
+ annualSavings: Scalars['Float']['output'];
112827
+ annualSpend: Scalars['Float']['output'];
112828
+ confidence: Scalars['Float']['output'];
112829
+ currency: Scalars['String']['output'];
112830
+ /** Members the kept relationship fully covers; consolidating cancels these. */
112831
+ dropRelationshipIds: Array<Scalars['ID']['output']>;
112832
+ /** Stable across runs for the same overlap. */
112833
+ id: Scalars['ID']['output'];
112834
+ keepRelationshipId: Scalars['ID']['output'];
112835
+ /** Provider id, capability name or the subsuming relationship id. */
112836
+ key: Scalars['String']['output'];
112837
+ members: Array<SubOverlapMember>;
112838
+ rationale: Scalars['String']['output'];
112839
+ title: Scalars['String']['output'];
112840
+ type: SubOverlapType;
112841
+ };
112842
+ export type SubOverlapConnection = {
112843
+ __typename?: 'SubOverlapConnection';
112844
+ items: Array<SubOverlap>;
112845
+ pageInfo: SubPageInfo;
112846
+ /** Annualised savings if every recommended consolidation is made, per currency. Each relationship is counted once. */
112847
+ totalAnnualSavings: Array<SubMoneyAmount>;
112848
+ totalCount: Scalars['Int']['output'];
112849
+ /** True when the workspace has more ACTIVE relationships than one detection reads. */
112850
+ truncated: Scalars['Boolean']['output'];
112851
+ };
112852
+ export type SubOverlapMember = {
112853
+ __typename?: 'SubOverlapMember';
112854
+ amount: Scalars['Float']['output'];
112855
+ /** `amount` normalised to a year (0 for non-recurring intervals). */
112856
+ annualCost: Scalars['Float']['output'];
112857
+ capabilities: Array<Scalars['String']['output']>;
112858
+ currency: Scalars['String']['output'];
112859
+ entitlementNames: Array<Scalars['String']['output']>;
112860
+ interval: SubBillingInterval;
112861
+ label: Scalars['String']['output'];
112862
+ providerId?: Maybe<Scalars['ID']['output']>;
112863
+ providerName?: Maybe<Scalars['String']['output']>;
112864
+ relationship?: Maybe<SubRelationship>;
112865
+ relationshipId: Scalars['ID']['output'];
112866
+ /** Total recorded usage across the relationship's active entitlements. */
112867
+ usage: Scalars['Int']['output'];
112868
+ };
112869
+ export declare enum SubOverlapType {
112870
+ /** Different providers that share a `capability:` tag (e.g. `capability:cloud-storage`). */
112871
+ Capability = "CAPABILITY",
112872
+ /** A relationship whose entitlements are substantially included in another provider's. */
112873
+ Entitlement = "ENTITLEMENT",
112874
+ /** Two or more ACTIVE relationships with the same provider. */
112875
+ ExactDuplicate = "EXACT_DUPLICATE"
112876
+ }
110711
112877
  export type SubPageInfo = {
110712
112878
  __typename?: 'SubPageInfo';
110713
112879
  cursor?: Maybe<Scalars['String']['output']>;
@@ -110856,8 +113022,11 @@ export type SubRelationship = {
110856
113022
  cancelledAt?: Maybe<Scalars['DateTime']['output']>;
110857
113023
  createdAt: Scalars['DateTime']['output'];
110858
113024
  currency: Scalars['String']['output'];
113025
+ /** Department / team / cost centre the spend is allocated to (null = unallocated). */
113026
+ department?: Maybe<Scalars['String']['output']>;
110859
113027
  discoverySource: SubDiscoverySource;
110860
113028
  entitlements: Array<SubEntitlement>;
113029
+ /** Computed Subscription Health Score, 0-100: entitlement usage (40%), paid invoice share (25%), renewal price stability (20%) and portfolio overlap (15%). Refreshed by every agent run and by `subRecomputeHealthScores`; null until first computed. */
110861
113030
  healthScore?: Maybe<Scalars['Int']['output']>;
110862
113031
  id: Scalars['ID']['output'];
110863
113032
  interval: SubBillingInterval;
@@ -110921,16 +113090,139 @@ export type SubRenewalEventConnection = {
110921
113090
  items: Array<SubRenewalEvent>;
110922
113091
  pageInfo: SubPageInfo;
110923
113092
  };
113093
+ export type SubRenewalQuarter = {
113094
+ __typename?: 'SubRenewalQuarter';
113095
+ amount: Scalars['Float']['output'];
113096
+ endsAt: Scalars['DateTime']['output'];
113097
+ label: Scalars['String']['output'];
113098
+ quarter: Scalars['Int']['output'];
113099
+ relationshipCount: Scalars['Int']['output'];
113100
+ renewalCount: Scalars['Int']['output'];
113101
+ startsAt: Scalars['DateTime']['output'];
113102
+ topRenewals: Array<SubUpcomingRenewal>;
113103
+ year: Scalars['Int']['output'];
113104
+ };
110924
113105
  export declare enum SubReportStatus {
110925
113106
  Dismissed = "DISMISSED",
110926
113107
  Pending = "PENDING",
110927
113108
  Resolved = "RESOLVED"
110928
113109
  }
113110
+ /** Set by wspace-scheduler-svc at fire time: idempotencyKey is "<scheduleId>:<scheduledTime>" and triggerData carries scheduledTime, firedAt, timezone, scheduleId and eventId. */
113111
+ export type SubRunAgentSweepInput = {
113112
+ /** Run every enabled agent even if it ran recently. Status gating, the kill switch, the decision cap and the quota pre-flight still apply. */
113113
+ force?: InputMaybe<Scalars['Boolean']['input']>;
113114
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
113115
+ triggerData?: InputMaybe<Scalars['JSON']['input']>;
113116
+ };
113117
+ /** Open (PROPOSED) decisions of one recommendation in one currency. */
113118
+ export type SubSavingsGroup = {
113119
+ __typename?: 'SubSavingsGroup';
113120
+ annualSavings: Scalars['Float']['output'];
113121
+ count: Scalars['Int']['output'];
113122
+ currency: Scalars['String']['output'];
113123
+ recommendation: SubDecisionRecommendation;
113124
+ };
113125
+ export type SubSavingsOverview = {
113126
+ __typename?: 'SubSavingsOverview';
113127
+ /** Bundle suggestions: the duplicate and overlap groups (subDetectOverlaps) that recommend cancelling something and were not dismissed. Consolidating one keeps `keepRelationshipId` and cancels `dropRelationshipIds`. */
113128
+ bundles: Array<SubOverlap>;
113129
+ generatedAt: Scalars['DateTime']['output'];
113130
+ groups: Array<SubSavingsGroup>;
113131
+ /** Open (PROPOSED) decisions counted. */
113132
+ openDecisions: Scalars['Int']['output'];
113133
+ totals: Array<SubSavingsTotal>;
113134
+ /** True when the workspace has more open decisions or live subscriptions than one overview scans. */
113135
+ truncated: Scalars['Boolean']['output'];
113136
+ };
113137
+ /** Headline yearly saving in one currency, counting every subscription once (the largest saving among its open recommendations and bundle suggestions). */
113138
+ export type SubSavingsTotal = {
113139
+ __typename?: 'SubSavingsTotal';
113140
+ annualSavings: Scalars['Float']['output'];
113141
+ currency: Scalars['String']['output'];
113142
+ /** Part of `annualSavings` that comes from bundle suggestions. */
113143
+ fromBundles: Scalars['Float']['output'];
113144
+ /** Part of `annualSavings` that comes from open decisions. */
113145
+ fromDecisions: Scalars['Float']['output'];
113146
+ };
113147
+ export type SubSetSpendBudgetInput = {
113148
+ currency: Scalars['String']['input'];
113149
+ /** Department to budget; omit or leave empty for the company-wide budget. */
113150
+ department?: InputMaybe<Scalars['String']['input']>;
113151
+ /** Monthly budget. Null, zero or a negative amount removes the budget. */
113152
+ monthlyAmount?: InputMaybe<Scalars['Float']['input']>;
113153
+ };
113154
+ export type SubShadowItItem = {
113155
+ __typename?: 'SubShadowItItem';
113156
+ department?: Maybe<Scalars['String']['output']>;
113157
+ detectedAt: Scalars['DateTime']['output'];
113158
+ discoverySource: SubDiscoverySource;
113159
+ label: Scalars['String']['output'];
113160
+ monthlySpend: Scalars['Float']['output'];
113161
+ providerId?: Maybe<Scalars['ID']['output']>;
113162
+ providerName?: Maybe<Scalars['String']['output']>;
113163
+ reason: SubShadowItReason;
113164
+ relationshipId: Scalars['ID']['output'];
113165
+ };
113166
+ export declare enum SubShadowItReason {
113167
+ /** Linked to a provider that has been deprecated (removed from the catalogue). */
113168
+ DeprecatedProvider = "DEPRECATED_PROVIDER",
113169
+ /** Discovered automatically and not linked to any provider in the catalogue. */
113170
+ Uncatalogued = "UNCATALOGUED",
113171
+ /** Discovered automatically and linked to a provider nobody has verified. */
113172
+ UnverifiedProvider = "UNVERIFIED_PROVIDER"
113173
+ }
113174
+ export type SubSpendBudget = {
113175
+ __typename?: 'SubSpendBudget';
113176
+ currency: Scalars['String']['output'];
113177
+ /** Department the budget applies to; null for the company-wide budget. */
113178
+ department?: Maybe<Scalars['String']['output']>;
113179
+ id: Scalars['ID']['output'];
113180
+ monthlyAmount: Scalars['Float']['output'];
113181
+ updatedAt: Scalars['DateTime']['output'];
113182
+ };
113183
+ export type SubSpendRiskFlag = {
113184
+ __typename?: 'SubSpendRiskFlag';
113185
+ department?: Maybe<Scalars['String']['output']>;
113186
+ detail: Scalars['String']['output'];
113187
+ kind: SubSpendRiskKind;
113188
+ label: Scalars['String']['output'];
113189
+ monthlySpend: Scalars['Float']['output'];
113190
+ relationshipId: Scalars['ID']['output'];
113191
+ severity: SubSpendRiskSeverity;
113192
+ };
113193
+ export declare enum SubSpendRiskKind {
113194
+ HighCostAi = "HIGH_COST_AI",
113195
+ MissingInvoice = "MISSING_INVOICE",
113196
+ PastDue = "PAST_DUE",
113197
+ UntrackedTrial = "UNTRACKED_TRIAL"
113198
+ }
113199
+ export declare enum SubSpendRiskSeverity {
113200
+ High = "HIGH",
113201
+ Low = "LOW",
113202
+ Medium = "MEDIUM"
113203
+ }
113204
+ export type SubSpendTrendPoint = {
113205
+ __typename?: 'SubSpendTrendPoint';
113206
+ at: Scalars['DateTime']['output'];
113207
+ /** Monthly run-rate of recurring spend at this instant. */
113208
+ monthlySpend: Scalars['Float']['output'];
113209
+ };
110929
113210
  export declare enum SubSubmissionStatus {
110930
113211
  Approved = "APPROVED",
110931
113212
  Pending = "PENDING",
110932
113213
  Rejected = "REJECTED"
110933
113214
  }
113215
+ export type SubUpcomingRenewal = {
113216
+ __typename?: 'SubUpcomingRenewal';
113217
+ /** Total renewal charges of this relationship in the quarter. */
113218
+ amount: Scalars['Float']['output'];
113219
+ autoRenew: Scalars['Boolean']['output'];
113220
+ department?: Maybe<Scalars['String']['output']>;
113221
+ label: Scalars['String']['output'];
113222
+ relationshipId: Scalars['ID']['output'];
113223
+ /** First renewal of this relationship in the quarter. */
113224
+ renewsAt: Scalars['DateTime']['output'];
113225
+ };
110934
113226
  export type SubUpdateProviderInput = {
110935
113227
  category?: InputMaybe<SubProviderCategory>;
110936
113228
  churnRiskScore?: InputMaybe<Scalars['Int']['input']>;
@@ -110950,6 +113242,9 @@ export type SubUpdateRelationshipInput = {
110950
113242
  amount?: InputMaybe<Scalars['Float']['input']>;
110951
113243
  autoRenew?: InputMaybe<Scalars['Boolean']['input']>;
110952
113244
  currency?: InputMaybe<Scalars['String']['input']>;
113245
+ /** Department / team / cost centre; an empty string clears it. */
113246
+ department?: InputMaybe<Scalars['String']['input']>;
113247
+ /** @deprecated healthScore is computed from recorded signals; a supplied value is ignored. Use subRecomputeHealthScores. */
110953
113248
  healthScore?: InputMaybe<Scalars['Int']['input']>;
110954
113249
  interval?: InputMaybe<SubBillingInterval>;
110955
113250
  kind?: InputMaybe<SubRelationshipKind>;
@@ -112548,6 +114843,9 @@ export declare enum TcpArchiveItemKind {
112548
114843
  export type TcpCitation = {
112549
114844
  __typename?: 'TcpCitation';
112550
114845
  author?: Maybe<Scalars['String']['output']>;
114846
+ claim?: Maybe<TcpStoryClaim>;
114847
+ /** The claim in the story's evidence trail this citation supports (null when the citation is a general source not yet tied to a specific claim). */
114848
+ claimId?: Maybe<Scalars['ID']['output']>;
112551
114849
  createdAt: Scalars['DateTime']['output'];
112552
114850
  excerpt?: Maybe<Scalars['String']['output']>;
112553
114851
  id: Scalars['ID']['output'];
@@ -112612,6 +114910,8 @@ export type TcpCreateArchiveItemInput = {
112612
114910
  };
112613
114911
  export type TcpCreateCitationInput = {
112614
114912
  author?: InputMaybe<Scalars['String']['input']>;
114913
+ /** Optional claim (on the same story) this citation supports. */
114914
+ claimId?: InputMaybe<Scalars['ID']['input']>;
112615
114915
  excerpt?: InputMaybe<Scalars['String']['input']>;
112616
114916
  provenance?: InputMaybe<Scalars['String']['input']>;
112617
114917
  publishedOn?: InputMaybe<Scalars['DateTime']['input']>;
@@ -112657,6 +114957,13 @@ export type TcpCreateReplyInput = {
112657
114957
  discussionId: Scalars['ID']['input'];
112658
114958
  perspective?: InputMaybe<Scalars['String']['input']>;
112659
114959
  };
114960
+ export type TcpCreateStoryClaimInput = {
114961
+ bodyEnd?: InputMaybe<Scalars['Int']['input']>;
114962
+ /** Explicit anchor offsets into the story body. Omit both to have the service locate `text` in the body (the claim stays unanchored if it is not found). */
114963
+ bodyStart?: InputMaybe<Scalars['Int']['input']>;
114964
+ storyId: Scalars['ID']['input'];
114965
+ text: Scalars['String']['input'];
114966
+ };
112660
114967
  export type TcpCreateStoryInput = {
112661
114968
  authorId?: InputMaybe<Scalars['ID']['input']>;
112662
114969
  body?: InputMaybe<Scalars['String']['input']>;
@@ -112757,21 +115064,9 @@ export type TcpPageInfo = {
112757
115064
  cursor?: Maybe<Scalars['String']['output']>;
112758
115065
  hasMore: Scalars['Boolean']['output'];
112759
115066
  };
112760
- export type TcpReply = {
112761
- __typename?: 'TcpReply';
112762
- authorId?: Maybe<Scalars['ID']['output']>;
112763
- body: Scalars['String']['output'];
112764
- createdAt: Scalars['DateTime']['output'];
112765
- discussionId: Scalars['ID']['output'];
112766
- id: Scalars['ID']['output'];
112767
- perspective?: Maybe<Scalars['String']['output']>;
112768
- status: TcpModerationStatus;
112769
- updatedAt: Scalars['DateTime']['output'];
112770
- workspaceId: Scalars['ID']['output'];
112771
- };
112772
115067
  export type TcpReplyConnection = {
112773
115068
  __typename?: 'TcpReplyConnection';
112774
- items: Array<TcpReply>;
115069
+ items: Array<EntityComment>;
112775
115070
  pageInfo: TcpPageInfo;
112776
115071
  };
112777
115072
  export declare enum TcpSourceType {
@@ -112789,6 +115084,8 @@ export type TcpStory = {
112789
115084
  authorId?: Maybe<Scalars['ID']['output']>;
112790
115085
  body?: Maybe<Scalars['String']['output']>;
112791
115086
  citations: TcpCitationConnection;
115087
+ /** The story's evidence trail: numbered claims made in the body, in display order, each linked to the citations that support it. */
115088
+ claims: Array<TcpStoryClaim>;
112792
115089
  /** Hero/cover image — references a wspace-files-svc File (blobs live there). */
112793
115090
  cover?: Maybe<File>;
112794
115091
  createdAt: Scalars['DateTime']['output'];
@@ -112815,6 +115112,23 @@ export type TcpStory = {
112815
115112
  export type TcpStoryCitationsArgs = {
112816
115113
  pagination?: InputMaybe<PaginationInput>;
112817
115114
  };
115115
+ /** A factual claim made in a story's body, numbered in the story's evidence trail and backed by one or more citations. `bodyStart`/`bodyEnd` are character offsets into `TcpStory.body` (null when the claim paraphrases the body and is not anchored to an exact passage). */
115116
+ export type TcpStoryClaim = {
115117
+ __typename?: 'TcpStoryClaim';
115118
+ bodyEnd?: Maybe<Scalars['Int']['output']>;
115119
+ bodyStart?: Maybe<Scalars['Int']['output']>;
115120
+ /** Citations supporting this claim, oldest first. */
115121
+ citations: Array<TcpCitation>;
115122
+ createdAt: Scalars['DateTime']['output'];
115123
+ id: Scalars['ID']['output'];
115124
+ /** 1-based position in the evidence trail. */
115125
+ position: Scalars['Int']['output'];
115126
+ story?: Maybe<TcpStory>;
115127
+ storyId: Scalars['ID']['output'];
115128
+ text: Scalars['String']['output'];
115129
+ updatedAt: Scalars['DateTime']['output'];
115130
+ workspaceId: Scalars['ID']['output'];
115131
+ };
112818
115132
  export type TcpStoryConnection = {
112819
115133
  __typename?: 'TcpStoryConnection';
112820
115134
  items: Array<TcpStory>;
@@ -112896,6 +115210,15 @@ export type TcpUpdateOralHistoryInput = {
112896
115210
  title?: InputMaybe<Scalars['String']['input']>;
112897
115211
  transcript?: InputMaybe<Scalars['String']['input']>;
112898
115212
  };
115213
+ export type TcpUpdateStoryClaimInput = {
115214
+ bodyEnd?: InputMaybe<Scalars['Int']['input']>;
115215
+ bodyStart?: InputMaybe<Scalars['Int']['input']>;
115216
+ /** Drop the body anchor and keep the claim as an unanchored paraphrase. */
115217
+ clearAnchor?: InputMaybe<Scalars['Boolean']['input']>;
115218
+ /** Move the claim to this 1-based position; the trail is renumbered 1..n. */
115219
+ position?: InputMaybe<Scalars['Int']['input']>;
115220
+ text?: InputMaybe<Scalars['String']['input']>;
115221
+ };
112899
115222
  export type TcpUpdateStoryInput = {
112900
115223
  authorId?: InputMaybe<Scalars['ID']['input']>;
112901
115224
  body?: InputMaybe<Scalars['String']['input']>;
@@ -112979,6 +115302,10 @@ export type TecBookSessionInput = {
112979
115302
  };
112980
115303
  export type TecCertificate = {
112981
115304
  __typename?: 'TecCertificate';
115305
+ /** BOFF-3134: id of the canonical certificate in Buildmyiq; null until mirrored. */
115306
+ buiCertificateId?: Maybe<Scalars['ID']['output']>;
115307
+ /** BOFF-3134: the canonical Buildmyiq certificate this certificate is mirrored to. */
115308
+ canonicalCertificate?: Maybe<BuiCertificate>;
112982
115309
  course?: Maybe<TecCourse>;
112983
115310
  courseId: Scalars['ID']['output'];
112984
115311
  createdAt: Scalars['DateTime']['output'];
@@ -112999,6 +115326,10 @@ export declare enum TecCertificateStatus {
112999
115326
  }
113000
115327
  export type TecCourse = {
113001
115328
  __typename?: 'TecCourse';
115329
+ /** BOFF-3134: id of the canonical course in Buildmyiq, the platform's LMS system of record. Null until the course has been mirrored there (normally within seconds of a write; the reconcile sweep catches up any backlog). */
115330
+ buiCourseId?: Maybe<Scalars['ID']['output']>;
115331
+ /** BOFF-3134: the canonical Buildmyiq course this course is mirrored to. */
115332
+ canonicalCourse?: Maybe<BuiCourse>;
113002
115333
  /** Reference to a wspace-files-svc File for the cover image (blobs live there). */
113003
115334
  cover?: Maybe<File>;
113004
115335
  createdAt: Scalars['DateTime']['output'];
@@ -113118,6 +115449,10 @@ export type TecEnrollInput = {
113118
115449
  };
113119
115450
  export type TecEnrollment = {
113120
115451
  __typename?: 'TecEnrollment';
115452
+ /** BOFF-3134: id of the canonical enrollment in Buildmyiq; null until mirrored. */
115453
+ buiEnrollmentId?: Maybe<Scalars['ID']['output']>;
115454
+ /** BOFF-3134: the canonical Buildmyiq enrollment this enrollment is mirrored to. */
115455
+ canonicalEnrollment?: Maybe<BuiEnrollment>;
113121
115456
  completedAt?: Maybe<Scalars['DateTime']['output']>;
113122
115457
  /** Lessons finished in this enrollment (BOFF-4107), oldest first. */
113123
115458
  completions: Array<TecLessonCompletion>;
@@ -114794,11 +117129,21 @@ export type TimeCampusCaptureChannel = {
114794
117129
  id: Scalars['ID']['output'];
114795
117130
  /** Opaque reference to a wspace-integrations-svc connection for OAuth-backed connectors. */
114796
117131
  integrationConnectionId?: Maybe<Scalars['String']['output']>;
117132
+ /** When the integration connection was revoked. A revoked channel needs a new connection to resume. */
117133
+ integrationRevokedAt?: Maybe<Scalars['DateTime']['output']>;
114797
117134
  lastEventAt?: Maybe<Scalars['DateTime']['output']>;
114798
117135
  lastSyncAt?: Maybe<Scalars['DateTime']['output']>;
117136
+ /** When a sync of this pull channel last started. */
117137
+ lastSyncAttemptAt?: Maybe<Scalars['DateTime']['output']>;
117138
+ /** Why the last sync (or the integration revoke) failed; null after a successful sync. */
117139
+ lastSyncError?: Maybe<Scalars['String']['output']>;
117140
+ /** How the last sync of this pull channel ended; null before the first sync. */
117141
+ lastSyncStatus?: Maybe<TimeCampusCaptureChannelSyncStatus>;
114799
117142
  name: Scalars['String']['output'];
114800
117143
  privacyMode: TimeCampusCaptureChannelPrivacyMode;
114801
117144
  provider?: Maybe<Scalars['String']['output']>;
117145
+ /** True when TimeCampus pulls this channel from its provider on a schedule (OAuth-backed connectors). */
117146
+ pullSync: Scalars['Boolean']['output'];
114802
117147
  /** Captured events from this channel older than this many days are purged. Null keeps them. */
114803
117148
  retentionDays?: Maybe<Scalars['Int']['output']>;
114804
117149
  status: TimeCampusCaptureChannelStatus;
@@ -114832,6 +117177,24 @@ export declare enum TimeCampusCaptureChannelStatus {
114832
117177
  /** Temporarily paused: events sent while paused are refused and never stored. */
114833
117178
  Paused = "PAUSED"
114834
117179
  }
117180
+ export type TimeCampusCaptureChannelSyncResult = {
117181
+ __typename?: 'TimeCampusCaptureChannelSyncResult';
117182
+ channel: TimeCampusCaptureChannel;
117183
+ duplicates: Scalars['Int']['output'];
117184
+ error?: Maybe<Scalars['String']['output']>;
117185
+ ingested: Scalars['Int']['output'];
117186
+ status: TimeCampusCaptureChannelSyncStatus;
117187
+ };
117188
+ export declare enum TimeCampusCaptureChannelSyncStatus {
117189
+ /** The provider or the integrations service failed; the next scheduled sync retries. */
117190
+ Failed = "FAILED",
117191
+ /** The integration connection is revoked, expired or rejected by the provider: connect the account again. */
117192
+ ReconnectRequired = "RECONNECT_REQUIRED",
117193
+ /** Nothing was pulled (the channel stopped accepting events, or capture is turned off for the source). */
117194
+ Skipped = "SKIPPED",
117195
+ /** Pulled and ingested. */
117196
+ Synced = "SYNCED"
117197
+ }
114835
117198
  export declare enum TimeCampusCaptureChannelType {
114836
117199
  Api = "API",
114837
117200
  Browser = "BROWSER",
@@ -114840,14 +117203,16 @@ export declare enum TimeCampusCaptureChannelType {
114840
117203
  Custom = "CUSTOM",
114841
117204
  Desktop = "DESKTOP",
114842
117205
  Ide = "IDE",
117206
+ /** Activity pulled from a connected third-party app through wspace-integrations-svc, e.g. GitHub. */
117207
+ Integration = "INTEGRATION",
114843
117208
  Mobile = "MOBILE"
114844
117209
  }
114845
117210
  export type TimeCampusCaptureEvent = {
114846
117211
  __typename?: 'TimeCampusCaptureEvent';
114847
117212
  app?: Maybe<Scalars['String']['output']>;
114848
- /** Which path produced the suggestion/correction: RULE_BASED, LLM, or USER (manual). */
117213
+ /** Which path produced the suggestion/correction: HISTORY (learned from the user's own earlier project choices), RULE_BASED, LLM, or USER (manual). */
114849
117214
  categorizationMethod?: Maybe<Scalars['String']['output']>;
114850
- /** Model identifier, e.g. "keyword-match-v1" or "gemini:gemini-2.5-flash". */
117215
+ /** Model identifier, e.g. "keyword-match-v1", "correction-history-v1" or "gemini:gemini-2.5-flash". */
114851
117216
  categorizationModel?: Maybe<Scalars['String']['output']>;
114852
117217
  category: TimeCampusTimelineCategory;
114853
117218
  /** Model confidence (0..1) for `category`. Set only when `categorySource` is "ai" (BOFF-3880); null for channel, user and rule-based categories. */
@@ -114902,6 +117267,17 @@ export type TimeCampusCaptureEventListResponse = {
114902
117267
  items: Array<TimeCampusCaptureEvent>;
114903
117268
  total: Scalars['Int']['output'];
114904
117269
  };
117270
+ /** An OAuth-backed source TimeCampus can pull from (BOFF-10441). Connect it by creating a wspace-integrations-svc connection for `integrationProviderKey`, then `connectTimeCampusCaptureChannel` with `type: channelType`, `provider: key` and the connection id. */
117271
+ export type TimeCampusCapturePullProvider = {
117272
+ __typename?: 'TimeCampusCapturePullProvider';
117273
+ channelType: TimeCampusCaptureChannelType;
117274
+ defaultSyncIntervalMinutes: Scalars['Int']['output'];
117275
+ description: Scalars['String']['output'];
117276
+ integrationProviderKey: Scalars['String']['output'];
117277
+ key: Scalars['String']['output'];
117278
+ label: Scalars['String']['output'];
117279
+ minSyncIntervalMinutes: Scalars['Int']['output'];
117280
+ };
114905
117281
  /** Result of computing (and persisting) a project suggestion for a capture event — see `suggestTimeCampusCaptureEventCategory`. */
114906
117282
  export type TimeCampusCategorySuggestion = {
114907
117283
  __typename?: 'TimeCampusCategorySuggestion';
@@ -115519,6 +117895,80 @@ export type TimeCampusLifeValueUpdateInput = {
115519
117895
  name?: InputMaybe<Scalars['String']['input']>;
115520
117896
  weight?: InputMaybe<Scalars['Float']['input']>;
115521
117897
  };
117898
+ /** One fact behind the signal, tied to a week and to the rows it came from. */
117899
+ export type TimeCampusLoadEvidence = {
117900
+ __typename?: 'TimeCampusLoadEvidence';
117901
+ kind: TimeCampusLoadEvidenceKind;
117902
+ observation: Scalars['String']['output'];
117903
+ /** How many rows are behind this fact in total. */
117904
+ refCount: Scalars['Int']['output'];
117905
+ /** Up to 20 of the rows behind this fact. */
117906
+ refs: Array<TimeCampusLoadEvidenceRef>;
117907
+ /** The rules threshold the value is compared against. */
117908
+ threshold?: Maybe<Scalars['Float']['output']>;
117909
+ /** The measured value (hours, share, days or rate, by kind). */
117910
+ value?: Maybe<Scalars['Float']['output']>;
117911
+ /** Last local day (YYYY-MM-DD) of that week. */
117912
+ weekEnd: Scalars['String']['output'];
117913
+ /** First local day (YYYY-MM-DD) of the week the fact is about. */
117914
+ weekStart: Scalars['String']['output'];
117915
+ };
117916
+ export declare enum TimeCampusLoadEvidenceKind {
117917
+ AfterHours = "AFTER_HOURS",
117918
+ Fragmentation = "FRAGMENTATION",
117919
+ LongHours = "LONG_HOURS",
117920
+ NoRecovery = "NO_RECOVERY",
117921
+ WithinRange = "WITHIN_RANGE"
117922
+ }
117923
+ /** A row the signal read: one of the caller's own time entries, work-pattern rows or app-usage rows. */
117924
+ export type TimeCampusLoadEvidenceRef = {
117925
+ __typename?: 'TimeCampusLoadEvidenceRef';
117926
+ id: Scalars['ID']['output'];
117927
+ type: TimeCampusLoadEvidenceRefType;
117928
+ };
117929
+ export declare enum TimeCampusLoadEvidenceRefType {
117930
+ AppUsage = "APP_USAGE",
117931
+ TimeEntry = "TIME_ENTRY",
117932
+ WorkPattern = "WORK_PATTERN"
117933
+ }
117934
+ export declare enum TimeCampusLoadFallbackReason {
117935
+ AiNotEnabled = "AI_NOT_ENABLED",
117936
+ InsufficientData = "INSUFFICIENT_DATA",
117937
+ InvalidReply = "INVALID_REPLY",
117938
+ LowConfidence = "LOW_CONFIDENCE",
117939
+ ProviderFailed = "PROVIDER_FAILED",
117940
+ ProviderNotConfigured = "PROVIDER_NOT_CONFIGURED"
117941
+ }
117942
+ export declare enum TimeCampusLoadLevel {
117943
+ Elevated = "ELEVATED",
117944
+ High = "HIGH",
117945
+ InsufficientData = "INSUFFICIENT_DATA",
117946
+ Low = "LOW"
117947
+ }
117948
+ export declare enum TimeCampusLoadSignalMethod {
117949
+ Model = "MODEL",
117950
+ Rules = "RULES"
117951
+ }
117952
+ /** Load facts for one week of local days. */
117953
+ export type TimeCampusLoadWeek = {
117954
+ __typename?: 'TimeCampusLoadWeek';
117955
+ activeDays: Scalars['Int']['output'];
117956
+ afterHoursHours?: Maybe<Scalars['Float']['output']>;
117957
+ /** Share (0..1) of time-entry time outside the workday window or on a weekend. */
117958
+ afterHoursShare?: Maybe<Scalars['Float']['output']>;
117959
+ contextSwitchesPerHour?: Maybe<Scalars['Float']['output']>;
117960
+ interruptionsPerDay?: Maybe<Scalars['Float']['output']>;
117961
+ /** Days with over ten hours of tracked work. */
117962
+ longDays: Scalars['Int']['output'];
117963
+ meetingHours?: Maybe<Scalars['Float']['output']>;
117964
+ /** Days with under one hour of tracked work. */
117965
+ recoveryDays: Scalars['Int']['output'];
117966
+ /** True when the week crossed two or more load thresholds. */
117967
+ strained: Scalars['Boolean']['output'];
117968
+ trackedHours: Scalars['Float']['output'];
117969
+ weekEnd: Scalars['String']['output'];
117970
+ weekStart: Scalars['String']['output'];
117971
+ };
115522
117972
  export declare enum TimeCampusOwnershipContext {
115523
117973
  Corporate = "CORPORATE",
115524
117974
  Personal = "PERSONAL"
@@ -115587,6 +118037,8 @@ export declare enum TimeCampusProjectStatus {
115587
118037
  }
115588
118038
  export type TimeCampusRecommendation = {
115589
118039
  __typename?: 'TimeCampusRecommendation';
118040
+ /** The provider:model that proposed an AI recommendation; null for rule-based ones. */
118041
+ aiModel?: Maybe<Scalars['String']['output']>;
115590
118042
  confidence?: Maybe<Scalars['Float']['output']>;
115591
118043
  createdAt: Scalars['DateTime']['output'];
115592
118044
  dismissReason?: Maybe<Scalars['String']['output']>;
@@ -115598,6 +118050,8 @@ export type TimeCampusRecommendation = {
115598
118050
  kind: Scalars['String']['output'];
115599
118051
  rationale: Scalars['String']['output'];
115600
118052
  snoozeUntil?: Maybe<Scalars['DateTime']['output']>;
118053
+ /** Who proposed it: RULES (the deterministic weekly rules) or AI (the opt-in model step). */
118054
+ source: TimeCampusRecommendationSource;
115601
118055
  state: Scalars['String']['output'];
115602
118056
  suggestedAction?: Maybe<Scalars['JSON']['output']>;
115603
118057
  title: Scalars['String']['output'];
@@ -115608,8 +118062,13 @@ export type TimeCampusRecommendation = {
115608
118062
  };
115609
118063
  export type TimeCampusRecommendationPreference = {
115610
118064
  __typename?: 'TimeCampusRecommendationPreference';
118065
+ /** Whether the autonomous loop may send this user a day summary and weekly digest unprompted. Off by default. */
118066
+ autonomousEnabled: Scalars['Boolean']['output'];
118067
+ autonomousEnabledAt?: Maybe<Scalars['DateTime']['output']>;
115611
118068
  cadence: Scalars['String']['output'];
115612
118069
  createdAt: Scalars['DateTime']['output'];
118070
+ /** Hour of the day (0-23, UTC) from which digests may be sent. */
118071
+ digestHourUtc: Scalars['Int']['output'];
115613
118072
  id: Scalars['ID']['output'];
115614
118073
  mutedKinds: Array<Scalars['String']['output']>;
115615
118074
  neverOptimiseForOutput: Scalars['Boolean']['output'];
@@ -115618,16 +118077,27 @@ export type TimeCampusRecommendationPreference = {
115618
118077
  quietHoursStart?: Maybe<Scalars['Int']['output']>;
115619
118078
  updatedAt: Scalars['DateTime']['output'];
115620
118079
  userId: Scalars['ID']['output'];
118080
+ /** ISO weekday (1 = Monday .. 7 = Sunday) of the weekly digest. */
118081
+ weeklyDigestDay: Scalars['Int']['output'];
115621
118082
  workspaceId: Scalars['ID']['output'];
115622
118083
  };
115623
118084
  export type TimeCampusRecommendationPreferenceInput = {
118085
+ /** Opt in to (true) or out of (false) the autonomous day summary and weekly digest. */
118086
+ autonomousEnabled?: InputMaybe<Scalars['Boolean']['input']>;
118087
+ /** DAILY (day summary and weekly digest) or WEEKLY (weekly digest only). */
115624
118088
  cadence?: InputMaybe<Scalars['String']['input']>;
118089
+ digestHourUtc?: InputMaybe<Scalars['Int']['input']>;
115625
118090
  mutedKinds?: InputMaybe<Array<Scalars['String']['input']>>;
115626
118091
  neverOptimiseForOutput?: InputMaybe<Scalars['Boolean']['input']>;
115627
118092
  optedInDomains?: InputMaybe<Array<TimeCampusLifeDomain>>;
115628
118093
  quietHoursEnd?: InputMaybe<Scalars['Int']['input']>;
115629
118094
  quietHoursStart?: InputMaybe<Scalars['Int']['input']>;
118095
+ weeklyDigestDay?: InputMaybe<Scalars['Int']['input']>;
115630
118096
  };
118097
+ export declare enum TimeCampusRecommendationSource {
118098
+ Ai = "AI",
118099
+ Rules = "RULES"
118100
+ }
115631
118101
  export declare enum TimeCampusSortDirection {
115632
118102
  Asc = "asc",
115633
118103
  Desc = "desc"
@@ -115645,6 +118115,26 @@ export type TimeCampusSourceConsent = {
115645
118115
  userId: Scalars['ID']['output'];
115646
118116
  workspaceId: Scalars['ID']['output'];
115647
118117
  };
118118
+ /** Whether the caller's own work load has been heavy for several weeks running, with a plain-language rationale and the evidence behind it. Never a productivity score. `method` says whether the rules or a model (workspace opt-in `timecampus.ai.sustained-load`) produced the level; `fallbackReason` says why the rules were used. */
118119
+ export type TimeCampusSustainedLoadSignal = {
118120
+ __typename?: 'TimeCampusSustainedLoadSignal';
118121
+ confidence?: Maybe<Scalars['Float']['output']>;
118122
+ evidence: Array<TimeCampusLoadEvidence>;
118123
+ fallbackReason?: Maybe<TimeCampusLoadFallbackReason>;
118124
+ generatedAt: Scalars['DateTime']['output'];
118125
+ level: TimeCampusLoadLevel;
118126
+ method: TimeCampusLoadSignalMethod;
118127
+ /** provider:model that produced the level when method is MODEL. */
118128
+ model?: Maybe<Scalars['String']['output']>;
118129
+ rationale: Scalars['String']['output'];
118130
+ /** The rules engine's level, shown next to a model level for comparison. */
118131
+ rulesLevel: TimeCampusLoadLevel;
118132
+ timezone: Scalars['String']['output'];
118133
+ /** The weeks read, oldest first. */
118134
+ weeks: Array<TimeCampusLoadWeek>;
118135
+ windowEnd: Scalars['String']['output'];
118136
+ windowStart: Scalars['String']['output'];
118137
+ };
115648
118138
  export type TimeCampusTemplateApplication = {
115649
118139
  __typename?: 'TimeCampusTemplateApplication';
115650
118140
  appliedBy: Scalars['ID']['output'];
@@ -115676,6 +118166,74 @@ export type TimeCampusTemplateProject = {
115676
118166
  name: Scalars['String']['output'];
115677
118167
  tasks: Array<Scalars['String']['output']>;
115678
118168
  };
118169
+ /** A day summary or weekly digest the loop handled for the calling user. */
118170
+ export type TimeCampusTimeIntelligenceDelivery = {
118171
+ __typename?: 'TimeCampusTimeIntelligenceDelivery';
118172
+ createdAt: Scalars['DateTime']['output'];
118173
+ id: Scalars['ID']['output'];
118174
+ notified: Scalars['Boolean']['output'];
118175
+ /** DAILY or WEEKLY. */
118176
+ period: Scalars['String']['output'];
118177
+ /** YYYY-MM-DD (UTC day) or YYYY-Www (ISO week). */
118178
+ periodKey: Scalars['String']['output'];
118179
+ recommendationIds: Array<Scalars['ID']['output']>;
118180
+ /** SENT, EMPTY (nothing to report, so nothing was sent) or FAILED (the notification was not accepted). */
118181
+ status: Scalars['String']['output'];
118182
+ /** Aggregate figures only (seconds, ratios, counts). */
118183
+ summary?: Maybe<Scalars['JSON']['output']>;
118184
+ /** SCHEDULED or MANUAL. */
118185
+ trigger: Scalars['String']['output'];
118186
+ };
118187
+ export type TimeCampusTimeIntelligenceReconcileResult = {
118188
+ __typename?: 'TimeCampusTimeIntelligenceReconcileResult';
118189
+ ensured: Scalars['Int']['output'];
118190
+ failed: Scalars['Int']['output'];
118191
+ workspaces: Scalars['Int']['output'];
118192
+ };
118193
+ /** The workspace's registration with wspace-scheduler-svc. */
118194
+ export type TimeCampusTimeIntelligenceSchedule = {
118195
+ __typename?: 'TimeCampusTimeIntelligenceSchedule';
118196
+ cronExpression: Scalars['String']['output'];
118197
+ id: Scalars['ID']['output'];
118198
+ lastError?: Maybe<Scalars['String']['output']>;
118199
+ lastSweepAt?: Maybe<Scalars['DateTime']['output']>;
118200
+ /** Id of the job on the shared Schedules screen. */
118201
+ schedulerJobId?: Maybe<Scalars['ID']['output']>;
118202
+ /** PENDING, ACTIVE or FAILED. */
118203
+ status: Scalars['String']['output'];
118204
+ timezone: Scalars['String']['output'];
118205
+ updatedAt: Scalars['DateTime']['output'];
118206
+ workspaceId: Scalars['ID']['output'];
118207
+ };
118208
+ /** One execution of the loop for a workspace. */
118209
+ export type TimeCampusTimeIntelligenceSweep = {
118210
+ __typename?: 'TimeCampusTimeIntelligenceSweep';
118211
+ /** AI credits the sweep consumed. The loop makes no model call today, so this is 0. */
118212
+ aiCreditsUsed: Scalars['Int']['output'];
118213
+ dailySummariesSent: Scalars['Int']['output'];
118214
+ /** True when this fire repeated an idempotency key and returned the original sweep. */
118215
+ duplicate: Scalars['Boolean']['output'];
118216
+ error?: Maybe<Scalars['String']['output']>;
118217
+ finishedAt?: Maybe<Scalars['DateTime']['output']>;
118218
+ id: Scalars['ID']['output'];
118219
+ recommendationsCreated: Scalars['Int']['output'];
118220
+ scheduledFor?: Maybe<Scalars['DateTime']['output']>;
118221
+ /** RATE_LIMITED, KILL_SWITCH or NO_OPTED_IN_USERS when status is SKIPPED. */
118222
+ skippedReason?: Maybe<Scalars['String']['output']>;
118223
+ startedAt: Scalars['DateTime']['output'];
118224
+ /** RUNNING, COMPLETED, SKIPPED or FAILED. */
118225
+ status: Scalars['String']['output'];
118226
+ /** SCHEDULED (fired by wspace-scheduler-svc) or MANUAL (run by a super admin). */
118227
+ trigger: Scalars['String']['output'];
118228
+ usersConsidered: Scalars['Int']['output'];
118229
+ weeklyDigestsSent: Scalars['Int']['output'];
118230
+ workspaceId: Scalars['ID']['output'];
118231
+ };
118232
+ /** Execution context the scheduler adds at fire time. idempotencyKey is "<scheduleId>:<scheduledTime>" and triggerData carries scheduledTime, firedAt, timezone, scheduleId and eventId. */
118233
+ export type TimeCampusTimeIntelligenceSweepInput = {
118234
+ idempotencyKey?: InputMaybe<Scalars['String']['input']>;
118235
+ triggerData?: InputMaybe<Scalars['JSON']['input']>;
118236
+ };
115679
118237
  export type TimeCampusTimeWellSpent = {
115680
118238
  __typename?: 'TimeCampusTimeWellSpent';
115681
118239
  byDomain: Array<TimeCampusDomainAlignment>;
@@ -115723,8 +118281,16 @@ export type TimeCampusTimelineFocusDetail = {
115723
118281
  export type TimeCampusTimelineSegment = {
115724
118282
  __typename?: 'TimeCampusTimelineSegment';
115725
118283
  app?: Maybe<Scalars['String']['output']>;
118284
+ /** How the project was suggested or chosen: HISTORY (learned from your past choices), RULE_BASED (project-name match), LLM, or USER (set by hand). */
118285
+ categorizationMethod?: Maybe<Scalars['String']['output']>;
115726
118286
  category: TimeCampusTimelineCategory;
118287
+ /** Model confidence (0..1) for `category`. Set only when `categorySource` is "ai"; null for channel, user and rule-based categories and for every non-capture segment. */
118288
+ categoryConfidence?: Maybe<Scalars['Float']['output']>;
118289
+ /** The "provider:model" that decided `category` when `categorySource` is "ai". */
118290
+ categoryModel?: Maybe<Scalars['String']['output']>;
115727
118291
  categorySource?: Maybe<Scalars['String']['output']>;
118292
+ /** Confidence (0..1) of the pending project suggestion; null without one. */
118293
+ categorySuggestionConfidence?: Maybe<Scalars['Float']['output']>;
115728
118294
  channelId?: Maybe<Scalars['ID']['output']>;
115729
118295
  durationSeconds: Scalars['Int']['output'];
115730
118296
  endTime?: Maybe<Scalars['DateTime']['output']>;
@@ -115740,6 +118306,8 @@ export type TimeCampusTimelineSegment = {
115740
118306
  source: TimeCampusTimelineSource;
115741
118307
  sourceId: Scalars['ID']['output'];
115742
118308
  startTime: Scalars['DateTime']['output'];
118309
+ /** CAPTURE only (BOFF-4146): the project suggested for this activity and waiting for approval (acceptTimeCampusCaptureEventSuggestion / rejectTimeCampusCaptureEventSuggestion), or null. */
118310
+ suggestedProjectId?: Maybe<Scalars['ID']['output']>;
115743
118311
  title?: Maybe<Scalars['String']['output']>;
115744
118312
  url?: Maybe<Scalars['String']['output']>;
115745
118313
  };
@@ -117767,6 +120335,14 @@ export type UpdateCrewServiceListingInput = {
117767
120335
  status?: InputMaybe<Scalars['String']['input']>;
117768
120336
  title?: InputMaybe<Scalars['String']['input']>;
117769
120337
  };
120338
+ /** Edit a skill. Omitted fields are left unchanged; `aliases` replaces the list. A rename keeps the old name as an alias. Editing a BACKFILL skill marks it reviewed (source becomes CUSTOM). */
120339
+ export type UpdateCrewSkillInput = {
120340
+ aliases?: InputMaybe<Array<Scalars['String']['input']>>;
120341
+ category?: InputMaybe<Scalars['String']['input']>;
120342
+ /** Empty string clears it. */
120343
+ description?: InputMaybe<Scalars['String']['input']>;
120344
+ name?: InputMaybe<Scalars['String']['input']>;
120345
+ };
117770
120346
  export type UpdateCrewTeamInput = {
117771
120347
  department?: InputMaybe<Scalars['String']['input']>;
117772
120348
  description?: InputMaybe<Scalars['String']['input']>;
@@ -119723,7 +122299,10 @@ export type UpdateRoleInput = {
119723
122299
  name?: InputMaybe<Scalars['String']['input']>;
119724
122300
  parentId?: InputMaybe<Scalars['ID']['input']>;
119725
122301
  priority?: InputMaybe<Scalars['Int']['input']>;
119726
- /** Product this role belongs to (PlatformProduct.slug). Set to null only from admin-app flows that intentionally manage cross-product platform roles. */
122302
+ /**
122303
+ * Product this role belongs to (PlatformProduct.slug). Set to null only from
122304
+ * admin-app flows that intentionally manage cross-product platform roles.
122305
+ */
119727
122306
  productSlug?: InputMaybe<Scalars['String']['input']>;
119728
122307
  };
119729
122308
  export type UpdateRouteInput = {