### This file was generated by Nexus Schema
### Do not make changes to this file directly


"""Represents state of auth based on most recent message from login flow"""
type AuthState {
  """Whether the browser was successfully opened for login"""
  browserOpened: Boolean!

  """Message for the auth state"""
  message: String

  """Name of auth state, e.g. AUTH_BROWSER_LAUNCHED"""
  name: AuthStateNameEnum
}

enum AuthStateNameEnum {
  AUTH_BROWSER_LAUNCHED
  AUTH_COULD_NOT_LAUNCH_BROWSER
  AUTH_ERROR_DURING_LOGIN
}

"""Container representing a browser"""
type Browser implements Node {
  channel: String!
  disabled: Boolean
  displayName: String!
  family: BrowserFamily!

  """Relay style Node ID field for the Browser field"""
  id: ID!
  isFocusSupported: Boolean!
  isSelected: Boolean!
  isVersionSupported: Boolean!
  majorVersion: String
  name: String!
  path: String!
  version: String!
  warning: String
}

enum BrowserFamily {
  chromium
  firefox
  webkit
}

enum BrowserStatus {
  closed
  open
  opening
}

"""
When we don't have an immediate response for the cloudViewer request, we'll use this as a fallback to 
render the avatar in the header bar / signal authenticated state immediately
"""
type CachedUser implements Node {
  """Email address of the cached user"""
  email: String

  """Name of the cached user"""
  fullName: String

  """Relay style Node ID field for the CachedUser field"""
  id: ID!
}

"""
In-app banner content. Audience filtering (channel flag, version, cohort) is applied server-side before delivery.
"""
type CloudAppMessage {
  analytics: CloudAppMessageAnalytics!

  """
  Banner body text. Rendered as markdown (bold, italic, inline code, links). Raw HTML is escaped.
  """
  body: String!
  ctas: [CloudAppMessageCta!]!
  dismissal: CloudAppMessageDismissal!
  enabled: Boolean!

  """Cloud-defined id. Bump to re-show a previously-dismissed message."""
  id: String!

  """Higher wins when multiple messages are eligible."""
  priority: Int!
  title: String!
  visualStyle: CloudAppMessageVisualStyle!
}

"""
Analytics metadata flowed through to recordEvent on impression / click / dismissal
"""
type CloudAppMessageAnalytics {
  campaign: String!
  category: String!
  utm: CloudAppMessageUtm
}

"""
Call-to-action button rendered alongside an in-app cloud message banner
"""
type CloudAppMessageCta {
  href: String!

  """
  Message-scoped analytical key (e.g. `learn_cy_prompt`). Sent as `ctaId` on click events; survives URL revisions.
  """
  id: String!
  style: CloudAppMessageCtaStyle!
  text: String!
  utm: CloudAppMessageUtm
}

enum CloudAppMessageCtaStyle {
  primary
  secondary
}

type CloudAppMessageDismissal {
  scope: CloudAppMessageDismissalScope!
}

enum CloudAppMessageDismissalScope {
  project
  user
}

"""
Optional UTM params for CTA destination URLs. CTA-level overrides message-level. utm_source/medium/campaign are auto-injected by the binary.
"""
type CloudAppMessageUtm {
  content: String
  id: String
  term: String
}

enum CloudAppMessageVisualStyle {
  info
  warning
}

"""Information about the browser the tests were run on"""
type CloudBrowserInfo implements Node {
  """The formatted name of the browser, e.g. `Electron`"""
  formattedName: String

  """
  The formatted name of the browser with the current version i.e `Electron 59.0.278`
  """
  formattedNameWithVersion: String

  """The version of the browser, i.e. `59`"""
  formattedVersion: String
  id: ID!

  """The ID of the browser, e.g. `electron`"""
  unformattedName: String

  """The unformatted version of the browser, i.e. `59.0.278`"""
  unformattedVersion: String
}

"""Information about the CI provider that performed a run"""
type CloudCiBuildInfo implements Node {
  """CI build ID as extracted from the CI worker environment (if available)"""
  ciBuildNumber: String

  """
  Formatted CI build ID as extracted from the CI worker environment (if available)
  """
  ciBuildNumberFormatted: String

  """
  The formatted name of the provider that performed the associated run, e.g. `CircleCI`
  """
  formattedProvider: String

  """Globally unique identifier representing a concrete GraphQL ObjectType"""
  id: ID!

  """
  The ID of the provider that performed the associated run, e.g. `circleci`
  """
  provider: String

  """
  A link to the build details for the associated run within the CI provider (if available)
  """
  url: String
}

"""Feature not available for subscription"""
type CloudFeatureNotEnabled {
  """an error message"""
  message: String!
}

"""
Represents a pollable status for clients to know when refetching data is required.
"""
type CloudLatestRunUpdateSpecData {
  """DateTime of the latest update in a project."""
  mostRecentUpdate: DateTime

  """Recommended seconds to wait before next poll."""
  pollingInterval: Int
}

"""The operating system the tests were run on"""
type CloudOperatingSystem implements Node {
  id: ID!

  """The formatted name of the operating system, e.g. `linux`"""
  name: String

  """
  The formatted name of the operating system with the version, e.g. `linux 14.04`
  """
  nameWithVersion: String

  """The platform of the OS, e.g. `linux`"""
  platform: OperatingSystemsEnum
  unformattedName: String

  """The version of the operating system, e.g. `14.04`"""
  version: String
}

"""
A CloudOrganization represents an Organization stored in the Cypress Cloud
"""
type CloudOrganization implements Node {
  """Globally unique identifier representing a concrete GraphQL ObjectType"""
  id: ID!

  """Name of the organization"""
  name: String

  """A connection for cloud projects associated with this organization"""
  projects(
    """Returns the elements in the list that come after the specified cursor"""
    after: String

    """Returns the elements in the list that come before the specified cursor"""
    before: String

    """Returns the first n elements from the list."""
    first: Int

    """Returns the last n elements from the list."""
    last: Int
  ): CloudProjectConnection
}

type CloudOrganizationConnection {
  """
  https://facebook.github.io/relay/graphql/connections.htm#sec-Edge-Types
  """
  edges: [CloudOrganizationEdge!]!

  """Flattened list of CloudOrganization type"""
  nodes: [CloudOrganization!]!

  """
  https://facebook.github.io/relay/graphql/connections.htm#sec-undefined.PageInfo
  """
  pageInfo: PageInfo!
}

type CloudOrganizationEdge {
  """https://facebook.github.io/relay/graphql/connections.htm#sec-Cursor"""
  cursor: String!

  """https://facebook.github.io/relay/graphql/connections.htm#sec-Node"""
  node: CloudOrganization!
}

type CloudPollingIntervals {
  """
  The frequency with which the CloudProject.runByNumber field should be polled, in seconds.
  """
  runByNumber: Int

  """
  The frequency with which the CloudProject.runsByCommitShas field should be polled, in seconds.
  """
  runsByCommitShas: Int
}

"""A CloudProject represents a Project stored in the Cypress Cloud"""
type CloudProject implements Node {
  """A link to the settings page of the project in the dashboard"""
  cloudProjectSettingsUrl: String!

  """A link to the project in the dashboard"""
  cloudProjectUrl: String!

  """Globally unique identifier representing a concrete GraphQL ObjectType"""
  id: ID!

  """The latest run for a given spec"""
  latestRun: CloudRun

  """Given name of the project"""
  name: String!

  """The organization the project is a member of"""
  organization: CloudOrganization

  """Record keys for the service"""
  recordKeys: [CloudRecordKey!]

  """Gets a single CloudRun by runNumber"""
  runByNumber(runNumber: Int!): CloudRun

  """A connection field type"""
  runs(
    """Returns the elements in the list that come after the specified cursor"""
    after: String

    """Returns the elements in the list that come before the specified cursor"""
    before: String
    cypressVersion: String

    """Returns the first n elements from the list."""
    first: Int

    """Returns the last n elements from the list."""
    last: Int
    status: CloudRunStatus
  ): CloudRunConnection

  """
  Returns runs associated to the given git commit SHAs hashes. The returned runs are ordered in the same way as the provided hashes.
  """
  runsByCommitShas(
    """An ordered list of git commit sha1 hashes."""
    commitShas: [String!]!

    """A limit to apply to the sorted list of found runs."""
    runLimit: Int! = 100
  ): [CloudRun]

  """Unique identifier for a Project"""
  slug: String!
}

type CloudProjectConnection {
  """
  https://facebook.github.io/relay/graphql/connections.htm#sec-Edge-Types
  """
  edges: [CloudProjectEdge!]!

  """Flattened list of CloudProject type"""
  nodes: [CloudProject!]!

  """
  https://facebook.github.io/relay/graphql/connections.htm#sec-undefined.PageInfo
  """
  pageInfo: PageInfo!
}

type CloudProjectEdge {
  """https://facebook.github.io/relay/graphql/connections.htm#sec-Cursor"""
  cursor: String!

  """https://facebook.github.io/relay/graphql/connections.htm#sec-Node"""
  node: CloudProject!
}

"""Unable to find cloud project"""
type CloudProjectNotFound {
  """an error message"""
  message: String!
}

union CloudProjectResult = CloudProject | CloudProjectNotFound | CloudProjectUnauthorized

type CloudProjectSpec implements Node {
  """Average duration the spec takes to run"""
  averageDuration(
    """
    The branch to measure average duration against. This will fallback to the closest branch with data.
    """
    fromBranch: String!
  ): Float

  """
  Average duration the spec takes to run within the context of the provided CloudRun ids.
  """
  averageDurationForRunIds(
    """
    The ids for the CloudRuns to use to derive the average duration. When provided, the fromBranch argument is ignored, as the provided run ids define the search space.
    """
    cloudRunIds: [ID!]!
  ): Float
  flakyStatus(
    """The number of runs to consider when counting flaky runs."""
    flakyRunsWindow: Int!

    """
    The branch to measure average duration against. This will fallback to the closest branch with data.
    """
    fromBranch: String!
  ): CloudProjectSpecFlakyResult

  """
  The flaky metadata for the spec within the context of the provided CloudRun ids.
  """
  flakyStatusForRunIds(
    """
    The ids for the CloudRuns, ordered from most to least relevant, to use to derive the flaky status.
    """
    cloudRunIds: [ID!]!
  ): CloudProjectSpecFlakyResult

  """Globally unique identifier representing a concrete GraphQL ObjectType"""
  id: ID!
  isConsideredFlaky(
    """The branch to measure flakiness against"""
    fromBranch: String!
  ): Boolean

  """
  Indicator that a spec is considered flaky within the context of the provided CloudRun ids.
  """
  isConsideredFlakyForRunIds(
    """
    The ids for the CloudRuns to use to derive the flake indicator. When provided, the fromBranch argument is ignored, as the provided run ids define the search space.
    """
    cloudRunIds: [ID!]!
  ): Boolean

  """
  Current DateTime on the server. Used in connection with CloudLatestRunUpdateSpecData.
  """
  retrievedAt: DateTime

  """Shortened spec path"""
  specPath: String

  """Runs this spec has been involved with."""
  specRuns(
    """Returns the elements in the list that come after the specified cursor"""
    after: String

    """Returns the elements in the list that come before the specified cursor"""
    before: String

    """Returns the first n elements from the list."""
    first: Int

    """
    The branch to filter on for the specs. This will fallback to the closest branch with data.
    """
    fromBranch: String!

    """Returns the last n elements from the list."""
    last: Int
  ): CloudSpecRunConnection @deprecated(reason: "Cypress app should utilize specRunsForRunIds to retrieve more relevant data based on local state")

  """
  Runs this spec has been involved with, limited to the provided list of CloudRun ids.
  Runs will be returned in the same order as the runs provided, where matches are found.
  """
  specRunsForRunIds(
    """A list of IDs for a CloudRun Node, conforming to the Relay spec"""
    cloudRunIds: [ID!]!
  ): [CloudSpecRun]
}

union CloudProjectSpecFlakyResult = CloudFeatureNotEnabled | CloudProjectSpecFlakyStatus

type CloudProjectSpecFlakyStatus {
  """URL linking to the flaky data in the Cypress dashboard for this spec"""
  dashboardUrl: String

  """Number of flaky runs from the considered runs"""
  flakyRuns: Int
  flakyRunsWindow: Int

  """
  The last flaky run occurrence, interpreted as "n runs ago" - ex: a value of 5 means a flaky run last occurred 5 runs ago. Will be null if field is a child of flayStatusForRunIds
  """
  lastFlaky: Int

  """
  The associated commit_sha of the CloudRun containing the most recent flaky occurrence of the spec. Will be populated if field is a child of flayStatusForRunIds.
  """
  lastFlakyRunCommitSha: String

  """
  The run number of the CloudRun containing the most recent flaky occurrence of the spec. Will be populated if field is a child of flayStatusForRunIds.
  """
  lastFlakyRunNumber: Int
  severity: String
}

"""Unable to find cloud spec in project"""
type CloudProjectSpecNotFound {
  """an error message"""
  message: String!
  retrievedAt: DateTime
}

union CloudProjectSpecResult = CloudProjectSpec | CloudProjectSpecNotFound | CloudProjectUnauthorized

"""Unauthorized access"""
type CloudProjectUnauthorized {
  """does the user have a requested access pending"""
  hasRequestedAccess: Boolean

  """an error message"""
  message: String!
}

type CloudRecordKey implements Node {
  createdAt: DateTime

  """Globally unique identifier representing a concrete GraphQL ObjectType"""
  id: ID!

  """The Record Key"""
  key: String
  lastUsedAt: DateTime
}

"""A Recorded run of the Test Runner, typically to the cloud"""
type CloudRun implements Node {
  """Whether or not the run was canceled due to a failure"""
  cancelOnFailure: Boolean

  """When the run was cancelled, null if not cancelled"""
  cancelledAt: DateTime

  """
  The user who manually cancelled the run, null if not cancelled manually
  """
  cancelledBy: CloudUser

  """Information about the CI provider that performed the run"""
  ci: CloudCiBuildInfo!
  commitInfo: CloudRunCommitInfo
  completedAt: DateTime

  """Number of specs instances that have been completed within a run"""
  completedInstanceCount: Int

  """When the run was created"""
  createdAt: DateTime!

  """
  Errors recorded against tests within this run, as reported by the Cypress App during recording
  """
  errors: [String!]!

  """All groups within this run"""
  groups: [CloudRunGroup!]!

  """Globally unique identifier representing a concrete GraphQL ObjectType"""
  id: ID!

  """
  Whether this run is hidden to the user due to data limits. Specific reasons are provided in the reasonsRunIsHidden field.
  """
  isHidden: Boolean!

  """Action user can perform when the run is over a usage limit"""
  overLimitActionType: OverLimitActionTypeEnum!

  """A link a user can navigate to when the run is over a usage limit"""
  overLimitActionUrl: String!

  """
  Reasons why this run is hidden. List will be empty if the run is not hidden.
  """
  reasonsRunIsHidden: [CloudRunHidingReason]!
  runNumber: Int

  """
  The datetime at which the run is currently scheduled to be completed. Will be null if not currently scheduled for completion or if already completed.
  """
  scheduledToCompleteAt: DateTime

  """All specs within this run"""
  specs: [CloudSpecRun!]!
  status: CloudRunStatus
  tags: [CloudRunTag]

  """Tests within this run that failed and need to be reviewed"""
  testsForReview(limit: Int! = 100): [CloudTestResult!]!

  """
  Total duration of the run in milliseconds, accounting for any parallelization
  """
  totalDuration: Int

  """This is the number of failed tests across all groups in the run"""
  totalFailed: Int

  """Number of flaky tests, null if flake detection is not enabled"""
  totalFlakyTests: Int

  """Number of instances within a run"""
  totalInstanceCount: Int

  """This is the number of passed tests across all groups in the run"""
  totalPassed: Int

  """This is the number of pending tests across all groups in the run"""
  totalPending: Int

  """This is the number of running tests across all groups in the run"""
  totalRunning: Int

  """This is the number of skipped tests across all groups in the run"""
  totalSkipped: Int

  """This is the number of tests across all groups in the run"""
  totalTests: Int

  """A link to the run page"""
  url: String
}

type CloudRunCommitInfo {
  authorAvatar: String
  authorEmail: String
  authorName: String
  branch: String
  branchUrl: String
  message(
    """Number of characters to truncate the commit message to"""
    truncate: Int
  ): String
  sha: String
  summary: String
  url: String
}

type CloudRunConnection {
  """
  https://facebook.github.io/relay/graphql/connections.htm#sec-Edge-Types
  """
  edges: [CloudRunEdge!]!

  """Flattened list of CloudRun type"""
  nodes: [CloudRun!]!

  """
  https://facebook.github.io/relay/graphql/connections.htm#sec-undefined.PageInfo
  """
  pageInfo: PageInfo!
}

type CloudRunEdge {
  """https://facebook.github.io/relay/graphql/connections.htm#sec-Cursor"""
  cursor: String!

  """https://facebook.github.io/relay/graphql/connections.htm#sec-Node"""
  node: CloudRun!
}

"""A group of tests that are executed together within a run"""
type CloudRunGroup implements Node {
  """The browser the tests were run on"""
  browser: CloudBrowserInfo!

  """The date and time the group was completed"""
  completedAt: DateTime

  """The date and time the group was created"""
  createdAt: DateTime!

  """The overall duration of the tests in the group in milliseconds"""
  duration: Int!

  """The name of the group"""
  groupName: String
  id: ID!

  """The operating system the tests were run on"""
  os: CloudOperatingSystem!
  status: CloudRunGroupStatusEnum!

  """The type of the test"""
  testingType: String!

  """The total number of tests that failed within the group"""
  totalFailures: Int!

  """The total number of tests that passed within the group"""
  totalPasses: Int!

  """The total number of tests that are pending within the group"""
  totalPending: Int!

  """The total number of tests that are skipped within the group"""
  totalSkipped: Int!
}

"""Possible check status of a run group"""
enum CloudRunGroupStatusEnum {
  CANCELLED
  ERRORED
  FAILED
  NOTESTS
  PASSED
  RUNNING
  TIMEDOUT
  UNCLAIMED
}

"""The reason a run was hidden, along with any details"""
union CloudRunHidingReason = DataRetentionLimitExceeded | UsageLimitExceeded

"""An instance of executing a single test within a run"""
type CloudRunInstance implements Node {
  """The ID of the group that this instance belongs to"""
  groupId: String!

  """Used to determine if the instance has test replay"""
  hasReplay: Boolean

  """Used to determine if the instance has screenshots"""
  hasScreenshots: Boolean!

  """Used to determine if the instance has stdout"""
  hasStdout: Boolean!

  """Used to determine if the instance has screenshots"""
  hasVideo: Boolean!
  id: ID!

  """Link to Cypress Cloud to view test replay, if available"""
  replayUrl: String

  """Link to Cypress Cloud to view stdout, if available"""
  screenshotsUrl: String

  """The status of the instance"""
  status: RunInstanceStatusEnum!

  """Link to Cypress Cloud to view stdout, if available"""
  stdoutUrl: String

  """This is the number of failed tests for the instance"""
  totalFailed: Int

  """This is the number of passed tests for the instance"""
  totalPassed: Int

  """This is the number of pending tests for the instance"""
  totalPending: Int

  """This is the number of running tests for the instance"""
  totalRunning: Int

  """This is the number of skipped tests for the instance"""
  totalSkipped: Int

  """Link to Cypress Cloud to view stdout, if available"""
  videoUrl: String
}

"""Possible check status of the test run"""
enum CloudRunStatus {
  CANCELLED
  ERRORED
  FAILED
  NOTESTS
  OVERLIMIT
  PASSED
  RUNNING
  TIMEDOUT
}

type CloudRunTag implements Node {
  """Globally unique identifier representing a concrete GraphQL ObjectType"""
  id: ID!
  name: String
}

"""
Details of test recording in Cypress Cloud for a spec file within a run
"""
type CloudSpecRun implements Node {
  """Basename of the spec file"""
  basename: String!

  """When the spec was completed"""
  completedAt: DateTime

  """When the spec was registered to run"""
  createdAt: DateTime

  """Extension of the spec file"""
  extension: String!

  """Amount of groups this spec was run in"""
  groupCount: Int

  """Unique identifiers for each group this spec was run in"""
  groupIds: [String]
  id: ID!

  """Full path to the spec file"""
  path: String!

  """Incremental run number assigned"""
  runNumber: Int

  """Short path to the spec file without leading Cypress directories"""
  shortPath: String

  """
  Aggregate information about how long the spec took to run in the groups
  """
  specDuration: SpecDataAggregate

  """Most important status for the spec shared between all groups"""
  status: CloudSpecStatus

  """Aggregate information about how many tests failed in the groups"""
  testsFailed: SpecDataAggregate

  """Aggregate information about how many tests passed in the groups"""
  testsPassed: SpecDataAggregate

  """Aggregate information about how many tests are pending in the groups"""
  testsPending: SpecDataAggregate

  """Aggregate information about how many tests were skipped in the groups"""
  testsSkipped: SpecDataAggregate

  """A link to the run overview page in Cypress Cloud filtered by spec"""
  url: String
}

type CloudSpecRunConnection {
  """
  https://facebook.github.io/relay/graphql/connections.htm#sec-Edge-Types
  """
  edges: [CloudSpecRunEdge!]!

  """Flattened list of CloudSpecRun type"""
  nodes: [CloudSpecRun!]!

  """
  https://facebook.github.io/relay/graphql/connections.htm#sec-undefined.PageInfo
  """
  pageInfo: PageInfo!
}

type CloudSpecRunEdge {
  """https://facebook.github.io/relay/graphql/connections.htm#sec-Cursor"""
  cursor: String!

  """https://facebook.github.io/relay/graphql/connections.htm#sec-Node"""
  node: CloudSpecRun!
}

"""Possible check status of the spec within a run"""
enum CloudSpecStatus {
  CANCELLED
  ERRORED
  FAILED
  NOTESTS
  PASSED
  RUNNING
  TIMEDOUT
  UNCLAIMED
}

"""Details of a recording in Cypress Cloud for a single test within a run"""
type CloudTestResult implements Node {
  """This is the duration of the test result in milliseconds"""
  duration: Int
  id: ID!

  """The instance of running the test result within the corresponding run"""
  instance: CloudRunInstance

  """If the test result was flaky in the current run"""
  isFlaky: Boolean!

  """The spec ID of the test result"""
  specId: String!

  """The state of the test result"""
  state: CloudTestResultStateEnum!

  """The URL to the test result in Cypress Cloud"""
  testUrl: String!

  """
  The thumbprint of the test result, allows for deduping tests sharing the same title in the same spec
  """
  thumbprint: String!

  """The title of the test result: describe/context > it/test"""
  title(
    """This will trim the test title to the provided depth"""
    depth: Int!
  ): String!

  """The title of the test result split into parts"""
  titleParts: [String!]!
}

"""State of the test result"""
enum CloudTestResultStateEnum {
  CANCELLED
  ERRORED
  FAILED
  PASSED
  PENDING
  RUNNING
  SKIPPED
  TIMEDOUT
  UNKNOWN
}

"""Type of tests"""
enum CloudTestingTypeEnum {
  COMPONENT
  E2E
}

"""A CloudUser represents an User stored in the Cypress Cloud"""
type CloudUser implements Node {
  """Url to manage cloud organizations for this user"""
  cloudOrganizationsUrl: String

  """Url to the profile of the current user on the dashboard"""
  cloudProfileUrl: String

  """Url to create a cloud organization for this user"""
  createCloudOrganizationUrl: String
  email: String

  """The display name of the user, if we have one"""
  fullName: String

  """Globally unique identifier representing a concrete GraphQL ObjectType"""
  id: ID!

  """A connection field type"""
  organizations(
    """Returns the elements in the list that come after the specified cursor"""
    after: String

    """Returns the elements in the list that come before the specified cursor"""
    before: String

    """Returns the first n elements from the list."""
    first: Int

    """Returns the last n elements from the list."""
    last: Int
  ): CloudOrganizationConnection

  """Whether this user is the currently authenticated user"""
  userIsViewer: Boolean!
}

"""
A code frame to display for a file, used when displaying code related to errors
"""
type CodeFrame {
  """Source of the code frame to display"""
  codeBlock: String

  """The column of the error to display"""
  column: Int
  file: FileParts!

  """The line number of the code snippet to display"""
  line: Int
}

"""Glob patterns for detecting files for code gen."""
type CodeGenGlobs implements Node {
  component: String!

  """Relay style Node ID field for the CodeGenGlobs field"""
  id: ID!
}

enum CodeGenType {
  component
  componentEmpty
  e2e
  e2eExamples
}

enum CodeLanguageEnum {
  js
  ts
}

"""used to distinguish one group of users from another"""
type Cohort {
  """value used to indicate the cohort (e.g. "A" or "B")"""
  cohort: String!

  """name used to identify the cohort topic (e.g. "LoginBanner" ) """
  name: String!
}

input CohortInput {
  """Array of cohort options to choose from.  Ex: A or B """
  cohorts: [String!]!

  """Name of the cohort"""
  name: String!

  """
  Optional array of integer weights to use for determining cohort. Defaults to even weighting
  """
  weights: [Int!]
}

""""""
type CommitInfo {
  """Commit message"""
  message: String!

  """Commit hash"""
  sha: String!
}

"""
The currently opened Cypress project, represented by a cypress.config.{js,ts,mjs,cjs} file
"""
type CurrentProject implements Node & ProjectLike {
  """The currently selected browser for the project"""
  activeBrowser: Browser

  """The current branch of the project"""
  branch: String

  """If the browser is open or not"""
  browserStatus: BrowserStatus!

  """Browsers found that are compatible with Cypress"""
  browsers: [Browser!]

  """The remote associated project from Cypress Cloud"""
  cloudProject: CloudProjectResult

  """
  A refetchable remote field implementation to fetch the cloudProject,
  this can safely be used when rendering a list of projects
  """
  cloudProjectRemote(
    """A globally unique name for this field"""
    name: String!
  ): RemoteFetchableCloudProjectResult

  """List of all code generation candidates stories"""
  codeGenCandidates(glob: String!): [FileParts]
  codeGenFramework: String
  codeGenGlobs: CodeGenGlobs!

  """Project configuration"""
  config: JSON!

  """Config File, specified by the CLI or """
  configFile: String

  """Config File Absolute Path"""
  configFileAbsolutePath: String

  """The mode the interactive runner was launched in"""
  currentTestingType: TestingTypeEnum

  """
  Default spec file name for spec creation, nullable so we can throw if it can't be decided
  """
  defaultSpecFileName: String

  """File extension to use based on if the project has typescript or not"""
  fileExtensionToUse: FileExtensionEnum

  """
  Whether the project has any specs found that do not match an example spec
  """
  hasNonExampleSpec: Boolean

  """Whether the project has a valid config file"""
  hasValidConfigFile: Boolean

  """Relay style Node ID field for the CurrentProject field"""
  id: ID!

  """Whether the user configured this project to use Component Testing"""
  isCTConfigured: Boolean

  """True if the project is using the default spec pattern"""
  isDefaultSpecPattern: Boolean!

  """Whether the user configured this project to use e2e Testing"""
  isE2EConfigured: Boolean

  """Whether or not the full config is ready"""
  isFullConfigReady: Boolean

  """Whether we are currently loading the configFile"""
  isLoadingConfigFile: Boolean

  """Whether we are currently loading the setupNodeEvents"""
  isLoadingNodeEvents: Boolean

  """Whether the project has Typescript"""
  isUsingTypeScript: Boolean
  packageManager: PackageManagerEnum!

  """Cached preferences for this project"""
  preferences: ProjectPreferences

  """Used to associate project with Cypress Cloud"""
  projectId: String

  """Absolute path to the project on the filesystem"""
  projectRoot: String!

  """Project saved state"""
  savedState: JSON

  """base64 encoded config used on the runner page"""
  serveConfig: JSON!

  """A list of specs for the currently open testing type of a project"""
  specs: [Spec!]!
  title: String!
}

"""A run was hidden because it was over the data retention limit"""
type DataRetentionLimitExceeded {
  """The number of days of data retention"""
  dataRetentionDays: Int
}

"""
A date string, such as 2007-12-03, compliant with the `full-date` format outlined in section 5.6 of the RFC 3339 profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.
"""
scalar Date

"""
A date-time string at UTC, such as 2007-12-03T10:15:30Z, compliant with the `date-time` format outlined in section 5.6 of the RFC 3339 profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.
"""
scalar DateTime

enum DevRelaunchAction {
  dismiss
  trigger
}

"""State associated/helpful for local development of Cypress"""
type DevState {
  """
  When we have edited server related files, we may want to relaunch the client.
  """
  needsRelaunch: Boolean

  """For debugging, the current application state"""
  state: JSON
}

"""Represents an editor on the local machine"""
type Editor {
  """Binary that opens the editor"""
  binary: String
  id: String!

  """name of editor"""
  name: String!
}

enum ErrorTypeEnum {
  AUTOMATION_SERVER_DISCONNECTED
  BAD_POLICY_WARNING
  BROWSER_CRASHED
  BROWSER_NOT_FOUND_BY_NAME
  BROWSER_NOT_FOUND_BY_PATH
  BROWSER_PAGE_CLOSED_UNEXPECTEDLY
  BROWSER_PROCESS_CLOSED_UNEXPECTEDLY
  BROWSER_UNSUPPORTED_LAUNCH_OPTION
  BUNDLE_ERROR
  CANNOT_CONNECT_BASE_URL
  CANNOT_CONNECT_BASE_URL_RETRYING
  CANNOT_CONNECT_BASE_URL_WARNING
  CANNOT_ENABLE_FEATURE_WITH_NO_TESTS
  CANNOT_RECORD_NO_PROJECT_ID
  CANNOT_REMOVE_OLD_BROWSER_PROFILES
  CANNOT_TRASH_ASSETS
  CDP_COULD_NOT_CONNECT
  CDP_COULD_NOT_RECONNECT
  CDP_RETRYING_CONNECTION
  CHROME_137_LOAD_EXTENSION_NOT_SUPPORTED
  CHROME_WEB_SECURITY_NOT_SUPPORTED
  CLOUD_ALREADY_COMPLETE
  CLOUD_API_RESPONSE_FAILED_RETRYING
  CLOUD_AUTO_CANCEL_MISMATCH
  CLOUD_AUTO_CANCEL_NOT_AVAILABLE_IN_PLAN
  CLOUD_CANCEL_SKIPPED_SPEC
  CLOUD_CANNOT_CONFIRM_ARTIFACTS
  CLOUD_CANNOT_CREATE_RUN_OR_INSTANCE
  CLOUD_CANNOT_PROCEED_IN_PARALLEL
  CLOUD_CANNOT_PROCEED_IN_PARALLEL_NETWORK
  CLOUD_CANNOT_PROCEED_IN_SERIAL
  CLOUD_CANNOT_PROCEED_IN_SERIAL_NETWORK
  CLOUD_CANNOT_UPLOAD_ARTIFACTS
  CLOUD_GRAPHQL_ERROR
  CLOUD_INVALID_RUN_REQUEST
  CLOUD_PARALLEL_DISALLOWED
  CLOUD_PARALLEL_GROUP_PARAMS_MISMATCH
  CLOUD_PARALLEL_REQUIRED
  CLOUD_PROJECT_NOT_FOUND
  CLOUD_PROTOCOL_CANNOT_UPLOAD_ARTIFACT
  CLOUD_PROTOCOL_CAPTURE_FAILURE
  CLOUD_PROTOCOL_INITIALIZATION_FAILURE
  CLOUD_PROTOCOL_UPLOAD_AGGREGATE_ERROR
  CLOUD_PROTOCOL_UPLOAD_HTTP_FAILURE
  CLOUD_PROTOCOL_UPLOAD_NETWORK_FAILURE
  CLOUD_PROTOCOL_UPLOAD_STREAM_STALL_FAILURE
  CLOUD_PROTOCOL_UPLOAD_UNKNOWN_ERROR
  CLOUD_RECORD_KEY_NOT_VALID
  CLOUD_RUN_GROUP_NAME_NOT_UNIQUE
  CLOUD_STALE_RUN
  CLOUD_UNKNOWN_CREATE_RUN_WARNING
  CLOUD_UNKNOWN_INVALID_REQUEST
  COMPONENT_TESTING_MISMATCHED_DEPENDENCIES
  CONFIG_FILES_LANGUAGE_CONFLICT
  CONFIG_FILE_DEV_SERVER_INVALID_RETURN
  CONFIG_FILE_DEV_SERVER_IS_NOT_VALID
  CONFIG_FILE_INVALID_ROOT_CONFIG
  CONFIG_FILE_INVALID_ROOT_CONFIG_COMPONENT
  CONFIG_FILE_INVALID_ROOT_CONFIG_E2E
  CONFIG_FILE_INVALID_TESTING_TYPE_CONFIG_COMPONENT
  CONFIG_FILE_INVALID_TESTING_TYPE_CONFIG_E2E
  CONFIG_FILE_NOT_FOUND
  CONFIG_FILE_REQUIRE_ERROR
  CONFIG_FILE_SETUP_NODE_EVENTS_ERROR
  CONFIG_FILE_UNEXPECTED_ERROR
  CONFIG_VALIDATION_ERROR
  CONFIG_VALIDATION_MSG_ERROR
  COULD_NOT_PARSE_ARGUMENTS
  CYPRESS_ENV_DEPRECATION
  DEFAULT_SUPPORT_FILE_NOT_FOUND
  DEV_SERVER_CONFIG_FILE_NOT_FOUND
  DUPLICATE_TASK_KEY
  ERROR_READING_FILE
  ERROR_WRITING_FILE
  EXPERIMENTAL_JIT_COMPILE_REMOVED
  EXPERIMENTAL_ORIGIN_DEPENDENCIES_E2E_ONLY
  EXPERIMENTAL_PROMPT_COMMAND_REMOVED
  EXPERIMENTAL_SESSION_AND_ORIGIN_REMOVED
  EXPERIMENTAL_SINGLE_TAB_RUN_MODE
  EXPERIMENTAL_SKIP_DOMAIN_INJECTION_REMOVED
  EXPERIMENTAL_STUDIO_REMOVED
  EXTENSION_NOT_LOADED
  FIREFOX_COULD_NOT_CONNECT
  FIXTURE_NOT_FOUND
  FOLDER_NOT_WRITABLE
  FREE_PLAN_EXCEEDS_MONTHLY_TESTS
  FREE_PLAN_IN_GRACE_PERIOD_EXCEEDS_MONTHLY_TESTS
  FREE_PLAN_IN_GRACE_PERIOD_PARALLEL_FEATURE
  INCORRECT_CI_BUILD_ID_USAGE
  INDETERMINATE_CI_BUILD_ID
  INJECT_DOCUMENT_DOMAIN_DEPRECATION
  INJECT_DOCUMENT_DOMAIN_E2E_ONLY
  INVALID_CONFIG_OPTION
  INVALID_CYPRESS_INTERNAL_ENV
  INVALID_REPORTER_NAME
  INVOKED_BINARY_OUTSIDE_NPM_MODULE
  JIT_COMPONENT_TESTING
  MULTIPLE_SUPPORT_FILES_FOUND
  NO_DEFAULT_CONFIG_FILE_FOUND
  NO_PROJECT_FOUND_AT_PROJECT_ROOT
  NO_PROJECT_ID
  NO_SPECS_FOUND
  PARALLEL_FEATURE_NOT_AVAILABLE_IN_PLAN
  PLAN_EXCEEDS_MONTHLY_TESTS
  PLAN_IN_GRACE_PERIOD_RUN_GROUPING_FEATURE_USED
  PLUGINS_RUN_EVENT_ERROR
  PORT_IN_USE_SHORT
  PROJECT_ID_AND_KEY_BUT_MISSING_RECORD_OPTION
  PROXY_ENCOUNTERED_INVALID_HEADER_NAME
  PROXY_ENCOUNTERED_INVALID_HEADER_VALUE
  RECORDING_FROM_FORK_PR
  RECORD_KEY_MISSING
  RECORD_PARAMS_WITHOUT_RECORDING
  RENAMED_CONFIG_OPTION
  RENDERER_CRASHED
  RUN_GROUPING_FEATURE_NOT_AVAILABLE_IN_PLAN
  SETUP_NODE_EVENTS_INVALID_EVENT_NAME_ERROR
  SETUP_NODE_EVENTS_IS_NOT_FUNCTION
  SUPPORT_FILE_NOT_FOUND
  SYNCHRONOUS_XHR_REQUEST_COOKIES_NOT_APPLIED
  SYNCHRONOUS_XHR_REQUEST_COOKIES_NOT_SET
  SYNCHRONOUS_XHR_REQUEST_NOT_INTERCEPTED
  TESTING_TYPE_NOT_CONFIGURED
  TESTS_DID_NOT_START_FAILED
  TESTS_DID_NOT_START_RETRYING
  UNEXPECTED_BEFORE_BROWSER_LAUNCH_PROPERTIES
  UNEXPECTED_INTERNAL_ERROR
  UNEXPECTED_MUTATION_ERROR
  UNSUPPORTED_BROWSER_VERSION
  VIDEO_CAPTURE_FAILED
  VIDEO_COMPRESSION_FAILED
  VIDEO_RECORDING_FAILED
  VIDEO_UPLOAD_ON_PASSES_REMOVED
}

"""Base error"""
type ErrorWrapper {
  """The code frame to display in relation to the error"""
  codeFrame: CodeFrame

  """The markdown formatted content associated with the ErrorTypeEnum"""
  errorMessage: String!

  """Name of the error class"""
  errorName: String!

  """
  The error stack of either the original error from the user or from where the internal Cypress error was created
  """
  errorStack: String!
  errorType: ErrorTypeEnum!

  """The ID for the error, used to clear the error"""
  id: ID!

  """
  Whether the error came from user code, can be used to determine whether to open a stack trace by default
  """
  isUserCodeError: Boolean!

  """
  Optional title of the error. Used to optionally display a title above the error
  """
  title: String
}

input FileDetailsInput {
  column: Int

  """
  When we open a file we take a filePath, either relative to the project root, or absolute on disk
  """
  filePath: String!
  line: Int
}

enum FileExtensionEnum {
  js
  jsx
  ts
  tsx
}

"""Represents a file on the file system"""
type FileParts implements Node {
  """
  Absolute path to file (e.g. /Users/jess/my-project/src/component/MySpec.test.tsx)
  """
  absolute: String!

  """Full name of the file (e.g. MySpec.test.tsx)"""
  baseName: String!

  """
  If provided, used to specify the column of the file to open in openFileInIDE
  """
  column: Int

  """The contents of the file"""
  contents: String!

  """The file's extension"""
  fileExtension: String!

  """The first part of the file, without extensions (e.g. MySpec)"""
  fileName: String!

  """Relay style Node ID field for the FileParts field"""
  id: ID!

  """
  If provided, used to specify the line of the file to open in openFileInIDE
  """
  line: Int

  """Full name of spec file (e.g. MySpec.test.tsx)"""
  name: String!

  """Relative path to file (e.g. src/component/MySpec.test.tsx)"""
  relative: String!
}

"""Error from generated spec"""
type GenerateSpecResponse {
  """The currently opened project"""
  currentProject: CurrentProject

  """The file that have just been scaffolded or the fileName that errored"""
  generatedSpecResult: GeneratedSpecResult
}

"""Error from generated spec"""
type GeneratedSpecError {
  erroredCodegenCandidate: String!
  fileName: String!
}

union GeneratedSpecResult = GeneratedSpecError | ScaffoldedFile

"""Git information about a spec file"""
type GitInfo {
  """Last person to change the file in git"""
  author: String

  """last modified as a pretty string, eg 2 days ago"""
  lastModifiedHumanReadable: String

  """last modified timestamp, eg 2021-09-14 13:43:19 +1000"""
  lastModifiedTimestamp: String

  """short hash for latest commit"""
  shortHash: String

  """status type - created or modified"""
  statusType: GitInfoStatusType

  """subject for latest commit"""
  subject: String
}

enum GitInfoStatusType {
  created
  modified
  noGitInfo
  unmodified
}

"""A project which exists on the filesystem but has not been opened"""
type GlobalProject implements Node & ProjectLike {
  """
  A refetchable remote field implementation to fetch the cloudProject,
  this can safely be used when rendering a list of projects
  """
  cloudProjectRemote(
    """A globally unique name for this field"""
    name: String!
  ): RemoteFetchableCloudProjectResult

  """Relay style Node ID field for the GlobalProject field"""
  id: ID!

  """Used to associate project with Cypress Cloud"""
  projectId: String

  """Absolute path to the project on the filesystem"""
  projectRoot: String!
  title: String!
}

"""
The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).
"""
scalar JSON

"""local settings on a device-by-device basis"""
type LocalSettings {
  availableEditors: [Editor!]!
  preferences: LocalSettingsPreferences!
}

"""local setting preferences"""
type LocalSettingsPreferences {
  autoScrollingEnabled: Boolean

  """
  User-scoped banner state — used by cloud-driven messages whose `dismissal.scope` is `user`. The shape mirrors `currentProject.savedState.banners` but lives in global appData.
  """
  banners: JSON
  codeEditorLineWrap: Boolean
  debugSlideshowComplete: Boolean
  desktopNotificationsEnabled: Boolean
  dismissNotificationBannerUntil: DateTime
  isSideNavigationOpen: Boolean
  isSpecsListOpen: Boolean
  majorVersionWelcomeDismissed: JSON
  notifyWhenRunCompletes: JSON
  notifyWhenRunStarts: Boolean
  notifyWhenRunStartsFailing: Boolean
  preferredEditorBinary: String
  proxyBypass: String
  proxyServer: String
  reporterWidth: Int

  """
  Determine if the browser should launch when the browser flag is passed alone
  """
  shouldLaunchBrowserFromOpenBrowser: Boolean
  showFetchRequests: Boolean
  specListWidth: Int
  studioWidth: Int
  wasBrowserSetInCLI: Boolean
}

"""Counts for specs and tests from a local project at a point in time"""
input LocalTestCountsInput {
  """Current Git branch name for local project"""
  branch: String

  """Total number of example specs found in project"""
  exampleSpecs: Int!

  """Total number of tests found in example specs. This can be an estimate"""
  exampleTests: Int!

  """Project slug for project"""
  projectSlug: String

  """Testing type"""
  testingType: CloudTestingTypeEnum!

  """Total number of specs found in project"""
  totalSpecs: Int!

  """
  Total number of tests found in all specs in project. This can be an estimate
  """
  totalTests: Int!
}

type Mutation {
  """Internal use only, clears the cloud cache"""
  _clearCloudCache: Boolean

  """Used internally to update the URQL cache in the CloudDataSource"""
  _cloudCacheInvalidate(args: JSON): Boolean

  """Internal use only, clears the cloud cache"""
  _showUrqlCache: JSON

  """Add project to projects array and cache it"""
  addProject(
    """Whether to open the project when added"""
    open: Boolean
    path: String
  ): Query

  """Clears the currently active project"""
  clearCurrentProject: Query
  clearCurrentTestingType: Query

  """Close active browser"""
  closeBrowser: Boolean

  """Create a project in the dashboard and return its object"""
  cloudProjectCreate(campaign: String, ciProviders: [String!], cohort: String, medium: String, name: String!, orgId: ID!, public: Boolean!, source: String): CloudProject

  """Request access to an organization from a projectId"""
  cloudProjectRequestAccess(projectSlug: String!): CloudProjectResult

  """Record event"""
  cloudRecordEvent(localTestCounts: LocalTestCountsInput): Boolean
  completeSetup: Query

  """add the passed text to the local clipboard"""
  copyTextToClipboard(text: String!): Boolean

  """
  Determine the cohort based on the given configuration.  This will either return the cached cohort for a given name or choose a new one and store it.
  """
  determineCohort(cohortConfig: CohortInput!): Cohort

  """
  Development only: Triggers or dismisses a prompted refresh by touching the file watched by our development scripts
  """
  devRelaunch(action: DevRelaunchAction!): Boolean

  """Dismisses a warning displayed by the frontend"""
  dismissWarning(id: ID!): Query
  e2eExamples: [ScaffoldedFile!]!

  """Sets focus to the active browser window"""
  focusActiveBrowserWindow: Boolean!

  """Generate spec from source"""
  generateSpecFromSource(codeGenCandidate: String!, componentName: String, isDefault: Boolean, type: CodeGenType!): GenerateSpecResponse

  """
  Parse a JS or TS file to see any exported React components that are defined in the file
  """
  getReactComponentsFromFile(filePath: String!): ReactComponentResponse

  """
  Scan dependencies to determine what, if any, CT frameworks are installed
  """
  initializeCtFrameworks: Boolean
  internal_clearAllProjectPreferencesCache: Boolean
  internal_clearLatestProjectCache: Boolean
  internal_clearProjectPreferencesCache(projectTitle: String!): Boolean

  """Launches project from open_project global singleton"""
  launchOpenProject(shouldLaunchNewTab: Boolean, specPath: String): CurrentProject

  """Sets the active browser"""
  launchpadSetBrowser(
    """ID of the browser that we want to set"""
    id: ID!
  ): CurrentProject

  """Fetches the remote data for a RemoteFetchable ID"""
  loadRemoteFetchables(
    """The identifier for the RemoteFetchable we are loading"""
    ids: [ID!]!
  ): [RemoteFetchable]!

  """Auth with Cypress Cloud"""
  login(utmContent: String, utmMedium: String!, utmSource: String!): Query

  """Log out of Cypress Cloud"""
  logout: Query

  """Check if a give spec file will match the project spec pattern"""
  matchesSpecPattern(specFile: String!): Boolean!

  """
  Allow the relevant run for debugging marked as next to be considered the current relevant run
  """
  moveToRelevantRun(runNumber: Int!): Boolean

  """Open a path in preferred IDE"""
  openDirectoryInIDE(path: String!): Boolean
  openExternal(includeGraphqlPort: Boolean, url: String!): Boolean

  """Open a file on specified line and column in preferred IDE"""
  openFileInIDE(input: FileDetailsInput!): Boolean

  """Open a path in the local file explorer"""
  openInFinder(path: String!): Boolean

  """Ping configured Base URL"""
  pingBaseUrl: Query

  """show the launchpad windows"""
  reconfigureProject: Boolean!

  """
  Dispatch an event to Cypress Cloud to be recorded. Events are used only to derive aggregate usage patterns across all Cypress instances.
  """
  recordEvent(
    campaign: String!
    cohort: String
    includeMachineId: Boolean
    medium: String!
    messageId: String!

    """(optional) stringified JSON object with supplemental data"""
    payload: String
  ): Boolean

  """
  Signal that we are explicitly refetching remote data and should not use the server cache
  """
  refetchRemote: Query

  """Clears the cloudViewer cache to refresh the organizations and projects"""
  refreshCloudViewer: Query

  """Remove project from projects array and cache"""
  removeProject(path: String!): Query

  """Reset the Auth State"""
  resetAuthState: Query!

  """Resets error and attempts to reload the config"""
  resetErrorAndLoadConfig(id: ID!): Query

  """
  Resets the latest version call to capture additional telemetry for the current user
  """
  resetLatestVersionTelemetry: Boolean!

  """Reset the Wizard to the starting position"""
  resetWizard: Boolean!

  """Retry studio initialization after an error"""
  retryStudio: Boolean

  """
  Run a single spec file using a supplied path. This initiates but does not wait for completion of the requested spec run.
  """
  runSpec(
    """
    Absolute path of the spec to run - must match e2e or component specPattern
    """
    specPath: String!
  ): RunSpecResult
  scaffoldTestingType: Query
  setAndLoadCurrentTestingType(testingType: TestingTypeEnum!): Query

  """Set active project to run tests on"""
  setCurrentProject(path: String!): Query

  """
  Update local preferences (also known as  appData). The payload, `value`, should be a `JSON.stringified()` object of the new values you'd like to persist. Example: `setPreferences (value: JSON.stringify({ lastOpened: Date.now() }), "local")`
  """
  setPreferences(type: PreferencesTypeEnum!, value: String!): Query

  """Set the projectId field in the config file of the current project"""
  setProjectIdInConfigFile(projectId: String!): Query

  """
  Save the projects preferences to cache, e.g. in dev: Library/Application Support/Cypress/cy/staging/cache
  """
  setProjectPreferencesInGlobalCache(testingType: TestingTypeEnum!): Query!

  """Save the prompt-shown state for this project"""
  setPromptShown(slug: String!): Boolean

  """List of specs to run for the "Run All Specs" Feature"""
  setRunAllSpecs(runAllSpecs: [String!]!): Boolean

  """Set failed tests for the current run to be used by the runner"""
  setTestsForRun(testsBySpec: [TestsBySpecInput!]!): Boolean

  """Set the route to debug and show the specified CloudRun"""
  showDebugForCloudRun(runNumber: Int!): Boolean

  """Show system notification via Electron"""
  showSystemNotification(body: String!, title: String!): Boolean

  """Switch Testing type and relaunch browser"""
  switchTestingTypeAndRelaunch(testingType: TestingTypeEnum!): Boolean

  """Return the set of test titles for the given spec path"""
  testsForRun(
    """Spec path relative to the project in posix format"""
    spec: String!
  ): [String!]

  """Updates the different fields of the wizard data store"""
  wizardUpdate(input: WizardUpdateInput!): Wizard
}

"""Implements the Relay Node spec"""
interface Node {
  """Globally unique identifier representing a concrete GraphQL ObjectType"""
  id: ID!
}

"""Possible operating systems for a build"""
enum OperatingSystemsEnum {
  LINUX
  MAC
  UNKNOWN
  WINDOWS
}

"""What to do when the run is over the limit"""
enum OverLimitActionTypeEnum {
  CONTACT_ADMIN
  UPGRADE
}

enum PackageManagerEnum {
  npm
  pnpm
  yarn
}

"""
PageInfo cursor, as defined in https://facebook.github.io/relay/graphql/connections.htm#sec-undefined.PageInfo
"""
type PageInfo {
  """
  The cursor corresponding to the last nodes in edges. Null if the connection is empty.
  """
  endCursor: String

  """
  Used to indicate whether more edges exist following the set defined by the clients arguments.
  """
  hasNextPage: Boolean!

  """
  Used to indicate whether more edges exist prior to the set defined by the clients arguments.
  """
  hasPreviousPage: Boolean!

  """
  The cursor corresponding to the first nodes in edges. Null if the connection is empty.
  """
  startCursor: String
}

enum PluginsState {
  error
  initialized
  initializing
  uninitialized
}

enum PreferencesTypeEnum {
  global
  project
}

"""Common base fields inherited by GlobalProject / CurrentProject"""
interface ProjectLike {
  """
  A refetchable remote field implementation to fetch the cloudProject,
  this can safely be used when rendering a list of projects
  """
  cloudProjectRemote(
    """A globally unique name for this field"""
    name: String!
  ): RemoteFetchableCloudProjectResult

  """Used to associate project with Cypress Cloud"""
  projectId: String

  """Absolute path to the project on the filesystem"""
  projectRoot: String!
  title: String!
}

"""Preferences specific to a project"""
type ProjectPreferences {
  """The preferred testing type to start in"""
  testingType: String
}

type PushFragmentPayload {
  """Raw data associated with the fragment to be written into the cache"""
  data: JSON

  """Any errors encountered when executing the operation"""
  errors: JSON
  fragment: JSON!

  """If present, indicates we need to invalidate the client-side cache"""
  invalidateCache: Boolean
  target: String!

  """Variables associated with the fragment"""
  variables: JSON
}

"""The root "Query" type containing all entry fields for our querying"""
type Query {
  """The latest state of the auth process"""
  authState: AuthState!
  baseError: ErrorWrapper
  cachedUser: CachedUser

  """
  Cloud-driven in-app banner content. Local override of the merged cloud field so we can inject the current project slug for per-project feature-flag scoping.
  """
  cloudAppMessages: [CloudAppMessage!]

  """
  Polling query to determine when to refetch spec data. A null value here means no data available in the cloud.
  """
  cloudLatestRunUpdateSpecData(
    """
    Clients active branch to search for builds. This will fallback to the closest branch with data.
    """
    commitBranch: String!

    """A list of Project slugs"""
    projectSlug: String!

    """DateTime since the fetched data"""
    sinceDateTime: DateTime
  ): CloudLatestRunUpdateSpecData

  """Returns an object conforming to the Relay spec"""
  cloudNode(
    """An ID for a Node conforming to the Relay spec"""
    id: ID!
  ): Node

  """Returns a list of cloud nodes, by ID. Max 100 nodes per batch"""
  cloudNodesByIds(
    """A list of IDs for a Node, conforming to the Relay spec"""
    ids: [ID!]!
  ): [Node]

  """Lookup an individual project by the slug"""
  cloudProjectBySlug(slug: String!): CloudProjectResult

  """Lookup a list of projects by their slug"""
  cloudProjectsBySlugs(
    """A list of Project slugs"""
    slugs: [String!]!
  ): [CloudProjectResult]

  """Gets a set of specs on a given project and branch"""
  cloudSpecByPath(
    """Slug of the project to which the set of specs belong"""
    projectSlug: String!

    """The spec path to find"""
    specPath: String!
  ): CloudProjectSpecResult

  """A user within the Cypress Cloud"""
  cloudViewer: CloudUser

  """Return the cohort for the given name"""
  cohort(
    """the name of the cohort to find"""
    name: String!
  ): Cohort

  """The currently opened project"""
  currentProject: CurrentProject

  """The state of any info related to local development of the runner"""
  dev: DevState!

  """
  Whether the app was invoked from the CLI, false if user is using the binary directly (not invoked from package manager e.g. npm)
  """
  invokedFromCli: Boolean!

  """
  Whether the app is in global mode or not. This is based off the presence of a project, which is set by the CLI (or absent if the app is run directly). See cli/lib/exec/open.js for the logic that sets the project or not.
  """
  isGlobalMode: Boolean!

  """local settings on a device-by-device basis"""
  localSettings: LocalSettings!

  """
  Unique node machine identifier for this instance - may be nil if unable to resolve
  """
  machineId: String
  node(id: ID!): Node

  """Defines the suggested polling intervals for various schema resources"""
  pollingIntervals: CloudPollingIntervals

  """All known projects for the app"""
  projects: [ProjectLike!]!

  """The files that have just been scaffolded"""
  scaffoldedFiles: [ScaffoldedFile!]

  """Previous versions of cypress and their release date"""
  versions: VersionData

  """A list of warnings"""
  warnings: [ErrorWrapper!]!

  """Metadata about the wizard"""
  wizard: Wizard!
}

"""Properties describing a React component"""
type ReactComponentDescriptor {
  """
  The name of the component export e.g. "export const Foo"
  """
  exportName: String!

  """
  Whether the component is a default export e.g. "export default Foo"
  """
  isDefault: Boolean!
}

"""Response from getReactComponentsFromFile"""
type ReactComponentResponse {
  """Components that are exported from the parsed file"""
  components: [ReactComponentDescriptor!]!

  """Whether or not there was there an error when parsing the file"""
  errored: Boolean
}

"""
Indicates builds from the Cypress Cloud that most closely align with the current local Git commit
"""
type RelevantRun {
  """
  All relevant runs to fetch for the debug page prior to the latest completed run
  """
  all: [RelevantRunInfo!]!

  """
  How many commits ahead the current local commit is from the commit of the current run
  """
  commitsAhead: Int!

  """Information about the current commit for the local project"""
  currentCommitInfo: CommitInfo

  """Latest relevant runs to fetch for the specs and runs page"""
  latest: [RelevantRunInfo!]!

  """Run number of the selected run in use on the Debug page"""
  selectedRunNumber: Int
}

"""runNumber and commitSha for a given run"""
type RelevantRunInfo {
  """The run id"""
  runId: ID!

  """The runNumber that these spec counts belong to"""
  runNumber: Int!

  """sha associated with the run"""
  sha: String!

  """Status for run"""
  status: CloudRunStatus

  """The total number of failed specs in the run."""
  totalFailed: Int!
}

enum RelevantRunLocationEnum {
  DEBUG
  RUNS
  SIDEBAR
  SPECS
}

"""
Represents a container for a piece of remote data stitched into the graph
"""
interface RemoteFetchable implements Node {
  """The raw data response when resolving the data"""
  dataRaw: JSON

  """JSON representation of the error response"""
  error: JSON

  """The current fetching status of the fetchable data"""
  fetchingStatus: RemoteFetchableStatus!

  """Globally unique identifier representing a concrete GraphQL ObjectType"""
  id: ID!

  """Prints the full operation sent for this query, for debugging purposes"""
  operation: String!

  """The hash of the operation, for debugging purposes"""
  operationHash: String!

  """The variables passed to the operation, for debugging purposes"""
  operationVariables: JSON!
}

"""
Wrapper for the resolution remote RemoteFetchableCloudProjectResult data
"""
type RemoteFetchableCloudProjectResult implements Node & RemoteFetchable {
  """Data resolved for the RemoteFetchableCloudProjectResult from the cloud"""
  data: CloudProjectResult

  """The raw data response when resolving the data"""
  dataRaw: JSON

  """JSON representation of the error response"""
  error: JSON

  """The current fetching status of the fetchable data"""
  fetchingStatus: RemoteFetchableStatus!

  """
  This ID is generated based on hashes of the queried data, and should be passed to the loadRemoteFetchables mutation to initiate loading the remote data
  """
  id: ID!

  """Prints the full operation sent for this query, for debugging purposes"""
  operation: String!

  """The hash of the operation, for debugging purposes"""
  operationHash: String!

  """The variables passed to the operation, for debugging purposes"""
  operationVariables: JSON!
}

"""
Wrapper for the resolution remote RemoteFetchableCloudProjectSpecResult data
"""
type RemoteFetchableCloudProjectSpecResult implements Node & RemoteFetchable {
  """
  Data resolved for the RemoteFetchableCloudProjectSpecResult from the cloud
  """
  data: CloudProjectSpecResult

  """The raw data response when resolving the data"""
  dataRaw: JSON

  """JSON representation of the error response"""
  error: JSON

  """The current fetching status of the fetchable data"""
  fetchingStatus: RemoteFetchableStatus!

  """
  This ID is generated based on hashes of the queried data, and should be passed to the loadRemoteFetchables mutation to initiate loading the remote data
  """
  id: ID!

  """Prints the full operation sent for this query, for debugging purposes"""
  operation: String!

  """The hash of the operation, for debugging purposes"""
  operationHash: String!

  """The variables passed to the operation, for debugging purposes"""
  operationVariables: JSON!
}

enum RemoteFetchableStatus {
  """Errored while fetching"""
  ERRORED

  """We have loaded the remote data"""
  FETCHED

  """Currently fetching"""
  FETCHING

  """Has not been fetched yet"""
  NOT_FETCHED
}

"""Possible check status of the instances run"""
enum RunInstanceStatusEnum {
  CANCELLED
  ERRORED
  FAILED
  NOTESTS
  PASSED
  RUNNING
  TIMEDOUT
  UNCLAIMED
}

"""Error encountered during a runSpec mutation"""
type RunSpecError {
  code: RunSpecErrorCode!

  """
  Contextual information for the error (typically an expanded error message)
  """
  detailMessage: String
}

enum RunSpecErrorCode {
  GENERAL_ERROR
  NO_PROJECT
  NO_SPEC_PATH
  NO_SPEC_PATTERN_MATCH
  SPEC_NOT_FOUND
  TESTING_TYPE_NOT_CONFIGURED
}

"""Result of a runSpec mutation"""
type RunSpecResponse {
  """Browser test was launched in"""
  browser: Browser!

  """Matched spec that was launched"""
  spec: Spec!

  """Testing Type that spec was launched in"""
  testingType: String!
}

union RunSpecResult = RunSpecError | RunSpecResponse

"""A file that we just added to the filesystem during project setup"""
type ScaffoldedFile {
  """Info about the file we just scaffolded"""
  description: String!

  """Info about the file"""
  file: FileParts!

  """Info about the field"""
  status: WizardConfigFileStatusEnum!
}

"""Represents a spec on the file system"""
type Spec implements Node {
  """
  Absolute path to spec (e.g. /Users/jess/my-project/src/component/MySpec.test.tsx)
  """
  absolute: String!

  """Full name of spec file (e.g. MySpec.test.tsx)"""
  baseName: String!

  """Wrapper for resolving remote data associated with this field"""
  cloudSpec(
    """A globally unique name for this field"""
    name: String!
  ): RemoteFetchableCloudProjectSpecResult

  """The file extension (e.g. tsx, jsx)"""
  fileExtension: String!

  """The first part of the file, without extensions (e.g. MySpec)"""
  fileName: String!

  """Git information about the spec file"""
  gitInfo: GitInfo

  """Relay style Node ID field for the Spec field"""
  id: ID!

  """Full name of spec file (e.g. MySpec.test.tsx)"""
  name: String!

  """Relative path to spec (e.g. src/component/MySpec.test.tsx)"""
  relative: String!

  """
  The spec file's extension, including "spec" pattern (e.g. .spec.tsx, -spec.tsx, -test.tsx)
  """
  specFileExtension: String!

  """Type of spec (e.g. component | integration)"""
  specType: SpecType!
}

"""Aggregate data from multiple groups for a spec run"""
type SpecDataAggregate {
  """Maximum value in the groups"""
  max: Int

  """Minimum value in the groups"""
  min: Int
}

enum SpecType {
  component
  integration
}

type StudioStatusPayload {
  canAccessStudioAI: Boolean!

  """Whether the studio status is an IN_ERROR due to a certificate error"""
  isCertError: Boolean
  status: StudioStatusType!
}

enum StudioStatusType {
  ENABLED
  INITIALIZING
  IN_ERROR
  NOT_INITIALIZED
}

type Subscription {
  """Triggered when the auth state changes"""
  authChange: Query

  """Issued when the current branch of a project changes"""
  branchChange: CurrentProject

  """Status of the currently opened browser"""
  browserStatusChange: CurrentProject

  """
  Triggered when there is a change to the info associated with the cloud project (org added, project added)
  """
  cloudViewerChange: Query

  """Issued when cypress.config.js is re-executed due to a change"""
  configChange: CurrentProject

  """Issued for internal development changes"""
  devChange: DevState

  """Triggered when the base error or warning state changes"""
  errorWarningChange: Query

  """
  Triggered when there is a change to the automatically-detected framework/bundler for a CT project
  """
  frameworkDetectionChange: Wizard

  """
  When the git info has refreshed for some or all of the specs, we fire this event with the specs updated
  """
  gitInfoChange: [Spec]

  """
  When we have resolved a section of a query, and want to update the local normalized cache, we "push" the fragment to the frontend to merge in the client side cache
  """
  pushFragment: [PushFragmentPayload!]!

  """
  Subscription that watches the given CloudRun id for changes and emits if changes are detected on the fields provided
  """
  relevantRunSpecChange(runId: ID!): CloudRun

  """
  Subscription that polls the cloud for new relevant runs that match local git commit hashes
  """
  relevantRuns(location: RelevantRunLocationEnum!): RelevantRun

  """Issued when the watched specs for the project changes"""
  specsChange: CurrentProject

  """Status of the studio manager and AI access"""
  studioStatusChange: StudioStatusPayload!
}

enum SupportStatusEnum {
  alpha
  beta
  community
  full
}

"""The bundlers that we can use with Cypress"""
enum SupportedBundlers {
  vite
  webpack
}

enum TestingTypeEnum {
  component
  e2e
}

type TestingTypeInfo implements Node {
  description: String!

  """Relay style Node ID field for the TestingTypeInfo field"""
  id: ID!
  title: String!
  type: TestingTypeEnum!
}

"""
Represents the input for setting a mapping of test titles by the spec path
"""
input TestsBySpecInput {
  """Path to the spec relative to the project"""
  specPath: String!

  """Full test title which should be all parts joined by a space"""
  tests: [String!]!
}

"""A run was hidden because it was over the usage limit"""
type UsageLimitExceeded {
  """The number of tests allowed per month"""
  monthlyTests: Int
}

"""Version of Cypress and release date"""
type Version {
  """unique id"""
  id: String!

  """Release date as an iso8601 timestamp"""
  released: String!

  """Version number (follows semantic versioning)"""
  version: String!
}

"""Version of Cypress and release date"""
type VersionData {
  """current version of cypress you are using"""
  current: Version!

  """latest version of cypress"""
  latest: Version!
}

"""
The Wizard is a container for any state associated with initial onboarding to Cypress
"""
type Wizard {
  """All of the bundlers to choose from"""
  allBundlers: [WizardBundler!]!
  bundler: WizardBundler

  """
  Framework definitions that had a package.json detected but could not be loaded due to an error
  """
  erroredFrameworks: [WizardErroredFramework!]!
  framework: WizardFrontendFramework

  """All of the component testing frameworks to choose from"""
  frameworks: [WizardFrontendFramework!]!

  """Command to install required command"""
  installDependenciesCommand: String

  """
  A list of packages to install, null if we have not chosen both a framework and bundler
  """
  packagesToInstall: [WizardNpmPackage!]!
}

"""Wizard bundler"""
type WizardBundler implements Node {
  """Relay style Node ID field for the WizardBundler field"""
  id: ID!

  """Whether this is the detected bundler"""
  isDetected: Boolean!

  """Display name of the bundler"""
  name: String!

  """The name of the framework"""
  type: SupportedBundlers!
}

enum WizardConfigFileStatusEnum {
  changes
  error
  skipped
  valid
}

"""Represents a Framework Definition that failed to load when detected"""
type WizardErroredFramework implements Node {
  """Relay style Node ID field for the WizardErroredFramework field"""
  id: ID!

  """The location of the framework's package.json file"""
  path: String
}

"""A frontend framework that we can setup within the app"""
type WizardFrontendFramework implements Node {
  """The category (framework, like next.js, or library, like react"""
  category: String!

  """Raw SVG icon of framework"""
  icon: String

  """Relay style Node ID field for the WizardFrontendFramework field"""
  id: ID!

  """Whether this is the detected framework"""
  isDetected: Boolean!

  """Whether this is the selected framework in the wizard"""
  isSelected: Boolean!

  """The display name of the framework"""
  name: String!

  """Current support status of the framework"""
  supportStatus: SupportStatusEnum!

  """All of the supported bundlers for this framework"""
  supportedBundlers: [WizardBundler!]!

  """The unique identifier for a framework or library"""
  type: String!
}

"""Details about an NPM Package listed during the wizard install"""
type WizardNpmPackage implements Node {
  """Short description about the purpose of the package"""
  description: String!

  """Version of the package the user has installed"""
  detectedVersion: String

  """Relay style Node ID field for the WizardNpmPackage field"""
  id: ID!

  """Minimum version of the package that Cypress works with"""
  minVersion: String!

  """The package name that you would npm install"""
  name: String!

  """Name of the package on npm"""
  package: String!

  """
  If the package is installed, does the version satisfy Cypress minimum requirements
  """
  satisfied: Boolean!
}

input WizardUpdateInput {
  bundler: SupportedBundlers
  framework: String
}
