diff --git a/.github/workflows/code-quality.yml b/.github/workflows/code-quality.yml index 24922edc..fd6fa758 100644 --- a/.github/workflows/code-quality.yml +++ b/.github/workflows/code-quality.yml @@ -42,8 +42,10 @@ jobs: - name: Install dependencies run: bun ci - - name: Build Agent SDK package - run: bun run build:agent-sdk + - name: Run codegen + run: bun run --cwd apps/agent codegen - name: Run Typecheck run: bun run typecheck + env: + NODE_OPTIONS: --max-old-space-size=4096 diff --git a/apps/agent/.env.example b/apps/agent/.env.example index fc776464..3ba30eaa 100644 --- a/apps/agent/.env.example +++ b/apps/agent/.env.example @@ -15,7 +15,7 @@ VITE_PUBLIC_SENTRY_DSN= # BrowserOS API URL VITE_PUBLIC_BROWSEROS_API=https://api.browseros.com -# GraphQL Schema Path +# GraphQL Schema Path (optional — falls back to schema/schema.graphql) GRAPHQL_SCHEMA_PATH= # Sentry build (source maps) diff --git a/apps/agent/README.md b/apps/agent/README.md index e550204a..c74d5e51 100644 --- a/apps/agent/README.md +++ b/apps/agent/README.md @@ -151,6 +151,14 @@ SENTRY_PROJECT=your-project SENTRY_AUTH_TOKEN=your-token ``` +### GraphQL Schema + +Codegen requires a GraphQL schema. By default it uses the bundled `schema/schema.graphql`, so no extra setup is needed. If you have access to the original API source, you can set the following environment variable + +```env +GRAPHQL_SCHEMA_PATH=/path/to/api-repo/.../schema.graphql +``` + ## Scripts | Script | Description | diff --git a/apps/agent/codegen.ts b/apps/agent/codegen.ts index 4a05e09d..4425bba8 100644 --- a/apps/agent/codegen.ts +++ b/apps/agent/codegen.ts @@ -1,3 +1,4 @@ +import { existsSync } from 'node:fs' import path from 'node:path' import { includeIgnoreFile } from '@eslint/compat' import type { CodegenConfig } from '@graphql-codegen/cli' @@ -5,11 +6,12 @@ import type { CodegenConfig } from '@graphql-codegen/cli' // biome-ignore lint/style/noProcessEnv: env needed for codegen config const env = process.env -const schemaPath = env.GRAPHQL_SCHEMA_PATH -if (!schemaPath) { +const schemaPath = + env.GRAPHQL_SCHEMA_PATH ?? path.resolve(__dirname, 'schema/schema.graphql') +if (!existsSync(schemaPath)) { throw new Error( - 'GRAPHQL_SCHEMA_PATH is not set. Set it in .env.development to the local path of:\n' + - 'https://github.com/browseros-ai/BrowserOS-workers/blob/main/apps/api/src/modules/graphql/schema.graphql', + 'No schema found. Either set GRAPHQL_SCHEMA_PATH in .env.development ' + + 'or ensure schema/schema.graphql exists', ) } diff --git a/apps/agent/schema/schema.graphql b/apps/agent/schema/schema.graphql new file mode 100644 index 00000000..48789d62 --- /dev/null +++ b/apps/agent/schema/schema.graphql @@ -0,0 +1,1626 @@ +schema { + query: Query + mutation: Mutation +} + +""" +All input for the `bulkCreateConversationMessages` mutation. +""" +input BulkCreateConversationMessagesInput { + """ + An arbitrary string value with no semantic meaning. Will be included in the + payload verbatim. May be used to track mutations by the client. + """ + clientMutationId: String + pConversationId: String + pMessages: [ConversationMessageInputRecordInput] +} + +""" +The output of our `bulkCreateConversationMessages` mutation. +""" +type BulkCreateConversationMessagesPayload { + """ + The exact same `clientMutationId` that was provided in the mutation input, + unchanged and unused. May be used by a client to track mutations. + """ + clientMutationId: String + """ + Our root query field type. Allows us to run any query from our mutation payload. + """ + query: Query + result: [ConversationMessage] +} + +type Conversation implements Node { + """ + Reads and enables pagination through a set of `ConversationMessage`. + """ + conversationMessages( + """ + Read all values in the set after (below) this cursor. + """ + after: Cursor + """ + Read all values in the set before (above) this cursor. + """ + before: Cursor + """ + A condition to be used in determining which values should be returned by the collection. + """ + condition: ConversationMessageCondition + """ + Only read the first `n` values of the set. + Max: 100 + """ + first: Int = 10 + """ + Only read the last `n` values of the set. + Max: 100 + """ + last: Int + """ + Skip the first `n` values from our `after` cursor, an alternative to cursor + based pagination. May not be used with `last`. + """ + offset: Int + """ + The method to use when ordering `ConversationMessage`. + """ + orderBy: [ConversationMessageOrderBy!] = [PRIMARY_KEY_ASC] + ): ConversationMessageConnection! + createdAt: Datetime! + """ + A globally unique identifier. Can be used in various places throughout the system to identify this single value. + """ + id: ID! + lastMessagedAt: Datetime! + """ + Reads a single `Profile` that is related to this `Conversation`. + """ + profile: Profile + profileId: String! + rowId: String! +} + +""" +A condition to be used against `Conversation` object types. All fields are +tested for equality and combined with a logical ‘and.’ +""" +input ConversationCondition { + """ + Checks for equality with the object’s `lastMessagedAt` field. + """ + lastMessagedAt: Datetime + """ + Checks for equality with the object’s `profileId` field. + """ + profileId: String + """ + Checks for equality with the object’s `rowId` field. + """ + rowId: String +} + +""" +A connection to a list of `Conversation` values. +""" +type ConversationConnection { + """ + A list of edges which contains the `Conversation` and cursor to aid in pagination. + """ + edges: [ConversationEdge]! + """ + A list of `Conversation` objects. + """ + nodes: [Conversation]! + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + """ + The count of *all* `Conversation` you could get from the connection. + """ + totalCount: Int! +} + +""" +A `Conversation` edge in the connection. +""" +type ConversationEdge { + """ + A cursor for use in pagination. + """ + cursor: Cursor + """ + The `Conversation` at the end of the edge. + """ + node: Conversation +} + +""" +An input for mutations affecting `Conversation` +""" +input ConversationInput { + createdAt: Datetime + lastMessagedAt: Datetime + profileId: String! + rowId: String! +} + +type ConversationMessage implements Node { + """ + Reads a single `Conversation` that is related to this `ConversationMessage`. + """ + conversation: Conversation + conversationId: String! + createdAt: Datetime! + """ + A globally unique identifier. Can be used in various places throughout the system to identify this single value. + """ + id: ID! + message: JSON! + orderIndex: Int! + rowId: String! +} + +""" +A condition to be used against `ConversationMessage` object types. All fields +are tested for equality and combined with a logical ‘and.’ +""" +input ConversationMessageCondition { + """ + Checks for equality with the object’s `conversationId` field. + """ + conversationId: String + """ + Checks for equality with the object’s `orderIndex` field. + """ + orderIndex: Int + """ + Checks for equality with the object’s `rowId` field. + """ + rowId: String +} + +""" +A connection to a list of `ConversationMessage` values. +""" +type ConversationMessageConnection { + """ + A list of edges which contains the `ConversationMessage` and cursor to aid in pagination. + """ + edges: [ConversationMessageEdge]! + """ + A list of `ConversationMessage` objects. + """ + nodes: [ConversationMessage]! + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + """ + The count of *all* `ConversationMessage` you could get from the connection. + """ + totalCount: Int! +} + +""" +A `ConversationMessage` edge in the connection. +""" +type ConversationMessageEdge { + """ + A cursor for use in pagination. + """ + cursor: Cursor + """ + The `ConversationMessage` at the end of the edge. + """ + node: ConversationMessage +} + +""" +An input for mutations affecting `ConversationMessage` +""" +input ConversationMessageInput { + conversationId: String! + createdAt: Datetime + message: JSON! + orderIndex: Int! + rowId: String! +} + +""" +An input for mutations affecting `ConversationMessageInputRecord` +""" +input ConversationMessageInputRecordInput { + message: JSON + orderIndex: Int +} + +""" +Methods to use when ordering `ConversationMessage`. +""" +enum ConversationMessageOrderBy { + CONVERSATION_ID_ASC + CONVERSATION_ID_DESC + NATURAL + ORDER_INDEX_ASC + ORDER_INDEX_DESC + PRIMARY_KEY_ASC + PRIMARY_KEY_DESC + ROW_ID_ASC + ROW_ID_DESC +} + +""" +Methods to use when ordering `Conversation`. +""" +enum ConversationOrderBy { + LAST_MESSAGED_AT_ASC + LAST_MESSAGED_AT_DESC + NATURAL + PRIMARY_KEY_ASC + PRIMARY_KEY_DESC + PROFILE_ID_ASC + PROFILE_ID_DESC + ROW_ID_ASC + ROW_ID_DESC +} + +""" +Represents an update to a `Conversation`. Fields that are set will be updated. +""" +input ConversationPatch { + createdAt: Datetime + lastMessagedAt: Datetime + profileId: String + rowId: String +} + +""" +All input for the create `Conversation` mutation. +""" +input CreateConversationInput { + """ + An arbitrary string value with no semantic meaning. Will be included in the + payload verbatim. May be used to track mutations by the client. + """ + clientMutationId: String + """ + The `Conversation` to be created by this mutation. + """ + conversation: ConversationInput! +} + +""" +All input for the create `ConversationMessage` mutation. +""" +input CreateConversationMessageInput { + """ + An arbitrary string value with no semantic meaning. Will be included in the + payload verbatim. May be used to track mutations by the client. + """ + clientMutationId: String + """ + The `ConversationMessage` to be created by this mutation. + """ + conversationMessage: ConversationMessageInput! +} + +""" +The output of our create `ConversationMessage` mutation. +""" +type CreateConversationMessagePayload { + """ + The exact same `clientMutationId` that was provided in the mutation input, + unchanged and unused. May be used by a client to track mutations. + """ + clientMutationId: String + """ + The `ConversationMessage` that was created by this mutation. + """ + conversationMessage: ConversationMessage + """ + An edge for our `ConversationMessage`. May be used by Relay 1. + """ + conversationMessageEdge( + """ + The method to use when ordering `ConversationMessage`. + """ + orderBy: [ConversationMessageOrderBy!]! = [PRIMARY_KEY_ASC] + ): ConversationMessageEdge + """ + Our root query field type. Allows us to run any query from our mutation payload. + """ + query: Query +} + +""" +The output of our create `Conversation` mutation. +""" +type CreateConversationPayload { + """ + The exact same `clientMutationId` that was provided in the mutation input, + unchanged and unused. May be used by a client to track mutations. + """ + clientMutationId: String + """ + The `Conversation` that was created by this mutation. + """ + conversation: Conversation + """ + An edge for our `Conversation`. May be used by Relay 1. + """ + conversationEdge( + """ + The method to use when ordering `Conversation`. + """ + orderBy: [ConversationOrderBy!]! = [PRIMARY_KEY_ASC] + ): ConversationEdge + """ + Our root query field type. Allows us to run any query from our mutation payload. + """ + query: Query +} + +""" +All input for the create `LlmProvider` mutation. +""" +input CreateLlmProviderInput { + """ + An arbitrary string value with no semantic meaning. Will be included in the + payload verbatim. May be used to track mutations by the client. + """ + clientMutationId: String + """ + The `LlmProvider` to be created by this mutation. + """ + llmProvider: LlmProviderInput! +} + +""" +The output of our create `LlmProvider` mutation. +""" +type CreateLlmProviderPayload { + """ + The exact same `clientMutationId` that was provided in the mutation input, + unchanged and unused. May be used by a client to track mutations. + """ + clientMutationId: String + """ + The `LlmProvider` that was created by this mutation. + """ + llmProvider: LlmProvider + """ + An edge for our `LlmProvider`. May be used by Relay 1. + """ + llmProviderEdge( + """ + The method to use when ordering `LlmProvider`. + """ + orderBy: [LlmProviderOrderBy!]! = [PRIMARY_KEY_ASC] + ): LlmProviderEdge + """ + Our root query field type. Allows us to run any query from our mutation payload. + """ + query: Query +} + +""" +All input for the create `ScheduledJob` mutation. +""" +input CreateScheduledJobInput { + """ + An arbitrary string value with no semantic meaning. Will be included in the + payload verbatim. May be used to track mutations by the client. + """ + clientMutationId: String + """ + The `ScheduledJob` to be created by this mutation. + """ + scheduledJob: ScheduledJobInput! +} + +""" +The output of our create `ScheduledJob` mutation. +""" +type CreateScheduledJobPayload { + """ + The exact same `clientMutationId` that was provided in the mutation input, + unchanged and unused. May be used by a client to track mutations. + """ + clientMutationId: String + """ + Our root query field type. Allows us to run any query from our mutation payload. + """ + query: Query + """ + The `ScheduledJob` that was created by this mutation. + """ + scheduledJob: ScheduledJob + """ + An edge for our `ScheduledJob`. May be used by Relay 1. + """ + scheduledJobEdge( + """ + The method to use when ordering `ScheduledJob`. + """ + orderBy: [ScheduledJobOrderBy!]! = [PRIMARY_KEY_ASC] + ): ScheduledJobEdge +} + +""" +A location in a connection that can be used for resuming pagination. +""" +scalar Cursor + +""" +A point in time as described by the [ISO +8601](https://en.wikipedia.org/wiki/ISO_8601) and, if it has a timezone, [RFC +3339](https://datatracker.ietf.org/doc/html/rfc3339) standards. Input values +that do not conform to both ISO 8601 and RFC 3339 may be coerced, which may lead +to unexpected results. +""" +scalar Datetime + +""" +All input for the `deleteConversation` mutation. +""" +input DeleteConversationInput { + """ + An arbitrary string value with no semantic meaning. Will be included in the + payload verbatim. May be used to track mutations by the client. + """ + clientMutationId: String + rowId: String! +} + +""" +The output of our delete `Conversation` mutation. +""" +type DeleteConversationPayload { + """ + The exact same `clientMutationId` that was provided in the mutation input, + unchanged and unused. May be used by a client to track mutations. + """ + clientMutationId: String + """ + The `Conversation` that was deleted by this mutation. + """ + conversation: Conversation + """ + An edge for our `Conversation`. May be used by Relay 1. + """ + conversationEdge( + """ + The method to use when ordering `Conversation`. + """ + orderBy: [ConversationOrderBy!]! = [PRIMARY_KEY_ASC] + ): ConversationEdge + deletedConversationId: ID + """ + Our root query field type. Allows us to run any query from our mutation payload. + """ + query: Query +} + +""" +All input for the `deleteLlmProvider` mutation. +""" +input DeleteLlmProviderInput { + """ + An arbitrary string value with no semantic meaning. Will be included in the + payload verbatim. May be used to track mutations by the client. + """ + clientMutationId: String + rowId: String! +} + +""" +The output of our delete `LlmProvider` mutation. +""" +type DeleteLlmProviderPayload { + """ + The exact same `clientMutationId` that was provided in the mutation input, + unchanged and unused. May be used by a client to track mutations. + """ + clientMutationId: String + deletedLlmProviderId: ID + """ + The `LlmProvider` that was deleted by this mutation. + """ + llmProvider: LlmProvider + """ + An edge for our `LlmProvider`. May be used by Relay 1. + """ + llmProviderEdge( + """ + The method to use when ordering `LlmProvider`. + """ + orderBy: [LlmProviderOrderBy!]! = [PRIMARY_KEY_ASC] + ): LlmProviderEdge + """ + Our root query field type. Allows us to run any query from our mutation payload. + """ + query: Query +} + +""" +All input for the `deleteScheduledJob` mutation. +""" +input DeleteScheduledJobInput { + """ + An arbitrary string value with no semantic meaning. Will be included in the + payload verbatim. May be used to track mutations by the client. + """ + clientMutationId: String + rowId: String! +} + +""" +The output of our delete `ScheduledJob` mutation. +""" +type DeleteScheduledJobPayload { + """ + The exact same `clientMutationId` that was provided in the mutation input, + unchanged and unused. May be used by a client to track mutations. + """ + clientMutationId: String + deletedScheduledJobId: ID + """ + Our root query field type. Allows us to run any query from our mutation payload. + """ + query: Query + """ + The `ScheduledJob` that was deleted by this mutation. + """ + scheduledJob: ScheduledJob + """ + An edge for our `ScheduledJob`. May be used by Relay 1. + """ + scheduledJobEdge( + """ + The method to use when ordering `ScheduledJob`. + """ + orderBy: [ScheduledJobOrderBy!]! = [PRIMARY_KEY_ASC] + ): ScheduledJobEdge +} + +""" +Represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). +""" +scalar JSON + +type LlmProvider implements Node { + baseUrl: String + contextWindow: Int + createdAt: Datetime! + """ + A globally unique identifier. Can be used in various places throughout the system to identify this single value. + """ + id: ID! + modelId: String! + name: String! + """ + Reads a single `Profile` that is related to this `LlmProvider`. + """ + profile: Profile + profileId: String! + region: String + resourceName: String + rowId: String! + supportsImages: Boolean! + temperature: Float + type: String! + updatedAt: Datetime! +} + +""" +A condition to be used against `LlmProvider` object types. All fields are tested +for equality and combined with a logical ‘and.’ +""" +input LlmProviderCondition { + """ + Checks for equality with the object’s `profileId` field. + """ + profileId: String + """ + Checks for equality with the object’s `rowId` field. + """ + rowId: String +} + +""" +A connection to a list of `LlmProvider` values. +""" +type LlmProviderConnection { + """ + A list of edges which contains the `LlmProvider` and cursor to aid in pagination. + """ + edges: [LlmProviderEdge]! + """ + A list of `LlmProvider` objects. + """ + nodes: [LlmProvider]! + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + """ + The count of *all* `LlmProvider` you could get from the connection. + """ + totalCount: Int! +} + +""" +A `LlmProvider` edge in the connection. +""" +type LlmProviderEdge { + """ + A cursor for use in pagination. + """ + cursor: Cursor + """ + The `LlmProvider` at the end of the edge. + """ + node: LlmProvider +} + +""" +An input for mutations affecting `LlmProvider` +""" +input LlmProviderInput { + baseUrl: String + contextWindow: Int + createdAt: Datetime + modelId: String! + name: String! + profileId: String! + region: String + resourceName: String + rowId: String! + supportsImages: Boolean + temperature: Float + type: String! + updatedAt: Datetime +} + +""" +Methods to use when ordering `LlmProvider`. +""" +enum LlmProviderOrderBy { + NATURAL + PRIMARY_KEY_ASC + PRIMARY_KEY_DESC + PROFILE_ID_ASC + PROFILE_ID_DESC + ROW_ID_ASC + ROW_ID_DESC +} + +""" +Represents an update to a `LlmProvider`. Fields that are set will be updated. +""" +input LlmProviderPatch { + baseUrl: String + contextWindow: Int + createdAt: Datetime + modelId: String + name: String + profileId: String + region: String + resourceName: String + rowId: String + supportsImages: Boolean + temperature: Float + type: String + updatedAt: Datetime +} + +""" +The root mutation type which contains root level fields which mutate data. +""" +type Mutation { + """ + Bulk insert up to 50 messages into a conversation. Each item must have {orderIndex: number, message: object}. Returns the created messages. + """ + bulkCreateConversationMessages( + """ + The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields. + """ + input: BulkCreateConversationMessagesInput! + ): BulkCreateConversationMessagesPayload + """ + Creates a single `Conversation`. + """ + createConversation( + """ + The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields. + """ + input: CreateConversationInput! + ): CreateConversationPayload + """ + Creates a single `ConversationMessage`. + """ + createConversationMessage( + """ + The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields. + """ + input: CreateConversationMessageInput! + ): CreateConversationMessagePayload + """ + Creates a single `LlmProvider`. + """ + createLlmProvider( + """ + The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields. + """ + input: CreateLlmProviderInput! + ): CreateLlmProviderPayload + """ + Creates a single `ScheduledJob`. + """ + createScheduledJob( + """ + The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields. + """ + input: CreateScheduledJobInput! + ): CreateScheduledJobPayload + """ + Deletes a single `Conversation` using a unique key. + """ + deleteConversation( + """ + The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields. + """ + input: DeleteConversationInput! + ): DeleteConversationPayload + """ + Deletes a single `LlmProvider` using a unique key. + """ + deleteLlmProvider( + """ + The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields. + """ + input: DeleteLlmProviderInput! + ): DeleteLlmProviderPayload + """ + Deletes a single `ScheduledJob` using a unique key. + """ + deleteScheduledJob( + """ + The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields. + """ + input: DeleteScheduledJobInput! + ): DeleteScheduledJobPayload + """ + Updates a single `Conversation` using a unique key and a patch. + """ + updateConversation( + """ + The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields. + """ + input: UpdateConversationInput! + ): UpdateConversationPayload + """ + Updates a single `LlmProvider` using a unique key and a patch. + """ + updateLlmProvider( + """ + The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields. + """ + input: UpdateLlmProviderInput! + ): UpdateLlmProviderPayload + """ + Updates a single `Profile` using a unique key and a patch. + """ + updateProfileByUserId( + """ + The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields. + """ + input: UpdateProfileByUserIdInput! + ): UpdateProfilePayload + """ + Updates a single `ScheduledJob` using a unique key and a patch. + """ + updateScheduledJob( + """ + The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields. + """ + input: UpdateScheduledJobInput! + ): UpdateScheduledJobPayload +} + +""" +An object with a globally unique `ID`. +""" +interface Node { + """ + A globally unique identifier. Can be used in various places throughout the system to identify this single value. + """ + id: ID! +} + +""" +Information about pagination in a connection. +""" +type PageInfo { + """ + When paginating forwards, the cursor to continue. + """ + endCursor: Cursor + """ + When paginating forwards, are there more items? + """ + hasNextPage: Boolean! + """ + When paginating backwards, are there more items? + """ + hasPreviousPage: Boolean! + """ + When paginating backwards, the cursor to continue. + """ + startCursor: Cursor +} + +type Profile implements Node { + avatarUrl: String + """ + Reads and enables pagination through a set of `Conversation`. + """ + conversations( + """ + Read all values in the set after (below) this cursor. + """ + after: Cursor + """ + Read all values in the set before (above) this cursor. + """ + before: Cursor + """ + A condition to be used in determining which values should be returned by the collection. + """ + condition: ConversationCondition + """ + Only read the first `n` values of the set. + Max: 100 + """ + first: Int = 10 + """ + Only read the last `n` values of the set. + Max: 100 + """ + last: Int + """ + Skip the first `n` values from our `after` cursor, an alternative to cursor + based pagination. May not be used with `last`. + """ + offset: Int + """ + The method to use when ordering `Conversation`. + """ + orderBy: [ConversationOrderBy!] = [PRIMARY_KEY_ASC] + ): ConversationConnection! + createdAt: Datetime! + firstName: String + """ + A globally unique identifier. Can be used in various places throughout the system to identify this single value. + """ + id: ID! + lastName: String + """ + Reads and enables pagination through a set of `LlmProvider`. + """ + llmProviders( + """ + Read all values in the set after (below) this cursor. + """ + after: Cursor + """ + Read all values in the set before (above) this cursor. + """ + before: Cursor + """ + A condition to be used in determining which values should be returned by the collection. + """ + condition: LlmProviderCondition + """ + Only read the first `n` values of the set. + Max: 100 + """ + first: Int = 10 + """ + Only read the last `n` values of the set. + Max: 100 + """ + last: Int + """ + Skip the first `n` values from our `after` cursor, an alternative to cursor + based pagination. May not be used with `last`. + """ + offset: Int + """ + The method to use when ordering `LlmProvider`. + """ + orderBy: [LlmProviderOrderBy!] = [PRIMARY_KEY_ASC] + ): LlmProviderConnection! + preferences: JSON + rowId: String! + """ + Reads and enables pagination through a set of `ScheduledJob`. + """ + scheduledJobs( + """ + Read all values in the set after (below) this cursor. + """ + after: Cursor + """ + Read all values in the set before (above) this cursor. + """ + before: Cursor + """ + A condition to be used in determining which values should be returned by the collection. + """ + condition: ScheduledJobCondition + """ + Only read the first `n` values of the set. + Max: 100 + """ + first: Int = 10 + """ + Only read the last `n` values of the set. + Max: 100 + """ + last: Int + """ + Skip the first `n` values from our `after` cursor, an alternative to cursor + based pagination. May not be used with `last`. + """ + offset: Int + """ + The method to use when ordering `ScheduledJob`. + """ + orderBy: [ScheduledJobOrderBy!] = [PRIMARY_KEY_ASC] + ): ScheduledJobConnection! + updatedAt: Datetime! + userId: String! +} + +""" +A `Profile` edge in the connection. +""" +type ProfileEdge { + """ + A cursor for use in pagination. + """ + cursor: Cursor + """ + The `Profile` at the end of the edge. + """ + node: Profile +} + +""" +Methods to use when ordering `Profile`. +""" +enum ProfileOrderBy { + NATURAL + PRIMARY_KEY_ASC + PRIMARY_KEY_DESC + ROW_ID_ASC + ROW_ID_DESC + USER_ID_ASC + USER_ID_DESC +} + +""" +Represents an update to a `Profile`. Fields that are set will be updated. +""" +input ProfilePatch { + avatarUrl: String + createdAt: Datetime + firstName: String + lastName: String + preferences: JSON + rowId: String + updatedAt: Datetime + userId: String +} + +""" +The root query type which gives access points into the data universe. +""" +type Query implements Node { + """ + Get a single `Conversation`. + """ + conversation(rowId: String!): Conversation + """ + Check if a conversation exists and is accessible to the current user. + """ + conversationExists(pConversationId: String): Boolean + """ + Reads and enables pagination through a set of `ConversationMessage`. + """ + conversationMessages( + """ + Read all values in the set after (below) this cursor. + """ + after: Cursor + """ + Read all values in the set before (above) this cursor. + """ + before: Cursor + """ + A condition to be used in determining which values should be returned by the collection. + """ + condition: ConversationMessageCondition + """ + Only read the first `n` values of the set. + Max: 100 + """ + first: Int = 10 + """ + Only read the last `n` values of the set. + Max: 100 + """ + last: Int + """ + Skip the first `n` values from our `after` cursor, an alternative to cursor + based pagination. May not be used with `last`. + """ + offset: Int + """ + The method to use when ordering `ConversationMessage`. + """ + orderBy: [ConversationMessageOrderBy!] = [PRIMARY_KEY_ASC] + ): ConversationMessageConnection + """ + Reads and enables pagination through a set of `Conversation`. + """ + conversations( + """ + Read all values in the set after (below) this cursor. + """ + after: Cursor + """ + Read all values in the set before (above) this cursor. + """ + before: Cursor + """ + A condition to be used in determining which values should be returned by the collection. + """ + condition: ConversationCondition + """ + Only read the first `n` values of the set. + Max: 100 + """ + first: Int = 10 + """ + Only read the last `n` values of the set. + Max: 100 + """ + last: Int + """ + Skip the first `n` values from our `after` cursor, an alternative to cursor + based pagination. May not be used with `last`. + """ + offset: Int + """ + The method to use when ordering `Conversation`. + """ + orderBy: [ConversationOrderBy!] = [PRIMARY_KEY_ASC] + ): ConversationConnection + """ + The root query type must be a `Node` to work well with Relay 1 mutations. This just resolves to `query`. + """ + id: ID! + """ + Reads and enables pagination through a set of `LlmProvider`. + """ + llmProviders( + """ + Read all values in the set after (below) this cursor. + """ + after: Cursor + """ + Read all values in the set before (above) this cursor. + """ + before: Cursor + """ + A condition to be used in determining which values should be returned by the collection. + """ + condition: LlmProviderCondition + """ + Only read the first `n` values of the set. + Max: 100 + """ + first: Int = 10 + """ + Only read the last `n` values of the set. + Max: 100 + """ + last: Int + """ + Skip the first `n` values from our `after` cursor, an alternative to cursor + based pagination. May not be used with `last`. + """ + offset: Int + """ + The method to use when ordering `LlmProvider`. + """ + orderBy: [LlmProviderOrderBy!] = [PRIMARY_KEY_ASC] + ): LlmProviderConnection + """ + Fetches an object given its globally unique `ID`. + """ + node( + """ + The globally unique `ID`. + """ + id: ID! + ): Node + """ + Get a single `Profile`. + """ + profileByUserId(userId: String!): Profile + """ + Exposes the root query type nested one level down. This is helpful for Relay 1 + which can only query top level fields if they are in a particular form. + """ + query: Query! + """ + Reads and enables pagination through a set of `ScheduledJob`. + """ + scheduledJobs( + """ + Read all values in the set after (below) this cursor. + """ + after: Cursor + """ + Read all values in the set before (above) this cursor. + """ + before: Cursor + """ + A condition to be used in determining which values should be returned by the collection. + """ + condition: ScheduledJobCondition + """ + Only read the first `n` values of the set. + Max: 100 + """ + first: Int = 10 + """ + Only read the last `n` values of the set. + Max: 100 + """ + last: Int + """ + Skip the first `n` values from our `after` cursor, an alternative to cursor + based pagination. May not be used with `last`. + """ + offset: Int + """ + The method to use when ordering `ScheduledJob`. + """ + orderBy: [ScheduledJobOrderBy!] = [PRIMARY_KEY_ASC] + ): ScheduledJobConnection +} + +type ScheduledJob implements Node { + createdAt: Datetime! + enabled: Boolean! + """ + A globally unique identifier. Can be used in various places throughout the system to identify this single value. + """ + id: ID! + lastRunAt: Datetime + name: String! + """ + Reads a single `Profile` that is related to this `ScheduledJob`. + """ + profile: Profile + profileId: String! + query: String! + rowId: String! + scheduleInterval: Int + scheduleTime: String + scheduleType: String! + """ + Reads and enables pagination through a set of `ScheduledJobRun`. + """ + scheduledJobRunsByJobId( + """ + Read all values in the set after (below) this cursor. + """ + after: Cursor + """ + Read all values in the set before (above) this cursor. + """ + before: Cursor + """ + A condition to be used in determining which values should be returned by the collection. + """ + condition: ScheduledJobRunCondition + """ + Only read the first `n` values of the set. + Max: 100 + """ + first: Int = 10 + """ + Only read the last `n` values of the set. + Max: 100 + """ + last: Int + """ + Skip the first `n` values from our `after` cursor, an alternative to cursor + based pagination. May not be used with `last`. + """ + offset: Int + """ + The method to use when ordering `ScheduledJobRun`. + """ + orderBy: [ScheduledJobRunOrderBy!] = [PRIMARY_KEY_ASC] + ): ScheduledJobRunConnection! + updatedAt: Datetime! +} + +""" +A condition to be used against `ScheduledJob` object types. All fields are +tested for equality and combined with a logical ‘and.’ +""" +input ScheduledJobCondition { + """ + Checks for equality with the object’s `profileId` field. + """ + profileId: String + """ + Checks for equality with the object’s `rowId` field. + """ + rowId: String +} + +""" +A connection to a list of `ScheduledJob` values. +""" +type ScheduledJobConnection { + """ + A list of edges which contains the `ScheduledJob` and cursor to aid in pagination. + """ + edges: [ScheduledJobEdge]! + """ + A list of `ScheduledJob` objects. + """ + nodes: [ScheduledJob]! + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + """ + The count of *all* `ScheduledJob` you could get from the connection. + """ + totalCount: Int! +} + +""" +A `ScheduledJob` edge in the connection. +""" +type ScheduledJobEdge { + """ + A cursor for use in pagination. + """ + cursor: Cursor + """ + The `ScheduledJob` at the end of the edge. + """ + node: ScheduledJob +} + +""" +An input for mutations affecting `ScheduledJob` +""" +input ScheduledJobInput { + createdAt: Datetime + enabled: Boolean + lastRunAt: Datetime + name: String! + profileId: String! + query: String! + rowId: String! + scheduleInterval: Int + scheduleTime: String + scheduleType: String! + updatedAt: Datetime +} + +""" +Methods to use when ordering `ScheduledJob`. +""" +enum ScheduledJobOrderBy { + NATURAL + PRIMARY_KEY_ASC + PRIMARY_KEY_DESC + PROFILE_ID_ASC + PROFILE_ID_DESC + ROW_ID_ASC + ROW_ID_DESC +} + +""" +Represents an update to a `ScheduledJob`. Fields that are set will be updated. +""" +input ScheduledJobPatch { + createdAt: Datetime + enabled: Boolean + lastRunAt: Datetime + name: String + profileId: String + query: String + rowId: String + scheduleInterval: Int + scheduleTime: String + scheduleType: String + updatedAt: Datetime +} + +type ScheduledJobRun implements Node { + completedAt: Datetime + error: String + executionLog: String + finalResult: String + """ + A globally unique identifier. Can be used in various places throughout the system to identify this single value. + """ + id: ID! + """ + Reads a single `ScheduledJob` that is related to this `ScheduledJobRun`. + """ + job: ScheduledJob + jobId: String! + result: String + rowId: String! + startedAt: Datetime! + status: String! + toolCalls: JSON +} + +""" +A condition to be used against `ScheduledJobRun` object types. All fields are +tested for equality and combined with a logical ‘and.’ +""" +input ScheduledJobRunCondition { + """ + Checks for equality with the object’s `jobId` field. + """ + jobId: String + """ + Checks for equality with the object’s `rowId` field. + """ + rowId: String +} + +""" +A connection to a list of `ScheduledJobRun` values. +""" +type ScheduledJobRunConnection { + """ + A list of edges which contains the `ScheduledJobRun` and cursor to aid in pagination. + """ + edges: [ScheduledJobRunEdge]! + """ + A list of `ScheduledJobRun` objects. + """ + nodes: [ScheduledJobRun]! + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + """ + The count of *all* `ScheduledJobRun` you could get from the connection. + """ + totalCount: Int! +} + +""" +A `ScheduledJobRun` edge in the connection. +""" +type ScheduledJobRunEdge { + """ + A cursor for use in pagination. + """ + cursor: Cursor + """ + The `ScheduledJobRun` at the end of the edge. + """ + node: ScheduledJobRun +} + +""" +Methods to use when ordering `ScheduledJobRun`. +""" +enum ScheduledJobRunOrderBy { + JOB_ID_ASC + JOB_ID_DESC + NATURAL + PRIMARY_KEY_ASC + PRIMARY_KEY_DESC + ROW_ID_ASC + ROW_ID_DESC +} + +""" +All input for the `updateConversation` mutation. +""" +input UpdateConversationInput { + """ + An arbitrary string value with no semantic meaning. Will be included in the + payload verbatim. May be used to track mutations by the client. + """ + clientMutationId: String + """ + An object where the defined keys will be set on the `Conversation` being updated. + """ + patch: ConversationPatch! + rowId: String! +} + +""" +The output of our update `Conversation` mutation. +""" +type UpdateConversationPayload { + """ + The exact same `clientMutationId` that was provided in the mutation input, + unchanged and unused. May be used by a client to track mutations. + """ + clientMutationId: String + """ + The `Conversation` that was updated by this mutation. + """ + conversation: Conversation + """ + An edge for our `Conversation`. May be used by Relay 1. + """ + conversationEdge( + """ + The method to use when ordering `Conversation`. + """ + orderBy: [ConversationOrderBy!]! = [PRIMARY_KEY_ASC] + ): ConversationEdge + """ + Our root query field type. Allows us to run any query from our mutation payload. + """ + query: Query +} + +""" +All input for the `updateLlmProvider` mutation. +""" +input UpdateLlmProviderInput { + """ + An arbitrary string value with no semantic meaning. Will be included in the + payload verbatim. May be used to track mutations by the client. + """ + clientMutationId: String + """ + An object where the defined keys will be set on the `LlmProvider` being updated. + """ + patch: LlmProviderPatch! + rowId: String! +} + +""" +The output of our update `LlmProvider` mutation. +""" +type UpdateLlmProviderPayload { + """ + The exact same `clientMutationId` that was provided in the mutation input, + unchanged and unused. May be used by a client to track mutations. + """ + clientMutationId: String + """ + The `LlmProvider` that was updated by this mutation. + """ + llmProvider: LlmProvider + """ + An edge for our `LlmProvider`. May be used by Relay 1. + """ + llmProviderEdge( + """ + The method to use when ordering `LlmProvider`. + """ + orderBy: [LlmProviderOrderBy!]! = [PRIMARY_KEY_ASC] + ): LlmProviderEdge + """ + Our root query field type. Allows us to run any query from our mutation payload. + """ + query: Query +} + +""" +All input for the `updateProfileByUserId` mutation. +""" +input UpdateProfileByUserIdInput { + """ + An arbitrary string value with no semantic meaning. Will be included in the + payload verbatim. May be used to track mutations by the client. + """ + clientMutationId: String + """ + An object where the defined keys will be set on the `Profile` being updated. + """ + patch: ProfilePatch! + userId: String! +} + +""" +The output of our update `Profile` mutation. +""" +type UpdateProfilePayload { + """ + The exact same `clientMutationId` that was provided in the mutation input, + unchanged and unused. May be used by a client to track mutations. + """ + clientMutationId: String + """ + The `Profile` that was updated by this mutation. + """ + profile: Profile + """ + An edge for our `Profile`. May be used by Relay 1. + """ + profileEdge( + """ + The method to use when ordering `Profile`. + """ + orderBy: [ProfileOrderBy!]! = [PRIMARY_KEY_ASC] + ): ProfileEdge + """ + Our root query field type. Allows us to run any query from our mutation payload. + """ + query: Query +} + +""" +All input for the `updateScheduledJob` mutation. +""" +input UpdateScheduledJobInput { + """ + An arbitrary string value with no semantic meaning. Will be included in the + payload verbatim. May be used to track mutations by the client. + """ + clientMutationId: String + """ + An object where the defined keys will be set on the `ScheduledJob` being updated. + """ + patch: ScheduledJobPatch! + rowId: String! +} + +""" +The output of our update `ScheduledJob` mutation. +""" +type UpdateScheduledJobPayload { + """ + The exact same `clientMutationId` that was provided in the mutation input, + unchanged and unused. May be used by a client to track mutations. + """ + clientMutationId: String + """ + Our root query field type. Allows us to run any query from our mutation payload. + """ + query: Query + """ + The `ScheduledJob` that was updated by this mutation. + """ + scheduledJob: ScheduledJob + """ + An edge for our `ScheduledJob`. May be used by Relay 1. + """ + scheduledJobEdge( + """ + The method to use when ordering `ScheduledJob`. + """ + orderBy: [ScheduledJobOrderBy!]! = [PRIMARY_KEY_ASC] + ): ScheduledJobEdge +}