From 35ddfc2d428ed007184b10b16d1011d58a9907a0 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Fri, 24 Jul 2026 14:08:48 +0200 Subject: [PATCH 01/50] update client --- assets/src/generated/graphql.ts | 31 ++++++++++++++----- .../generated/persisted-queries/client.json | 24 +++++++------- assets/src/graph/workbench.graphql | 15 +++++++++ 3 files changed, 50 insertions(+), 20 deletions(-) diff --git a/assets/src/generated/graphql.ts b/assets/src/generated/graphql.ts index 8b549c0368..239d8d957f 100644 --- a/assets/src/generated/graphql.ts +++ b/assets/src/generated/graphql.ts @@ -21066,11 +21066,11 @@ export type IssueWebhookTinyFragment = { __typename?: 'IssueWebhook', id: string export type WorkbenchWebhookTinyFragment = { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null }; -export type WorkbenchFragment = { __typename?: 'Workbench', systemPrompt?: string | null, id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, repository?: { __typename?: 'GitRepository', id: string } | null, configuration?: { __typename?: 'WorkbenchConfiguration', infrastructure?: { __typename?: 'WorkbenchInfrastructure', services?: boolean | null, stacks?: boolean | null, kubernetes?: boolean | null, podLogs?: boolean | null, vulnerabilities?: boolean | null } | null, observability?: { __typename?: 'WorkbenchObservability', logs?: boolean | null, metrics?: boolean | null } | null, coding?: { __typename?: 'WorkbenchCoding', mode?: AgentRunMode | null, repositories?: Array | null, enableBabysitting?: boolean | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, skills?: { __typename?: 'WorkbenchSkills', files?: Array | null, ref?: { __typename?: 'GitRef', ref: string, folder: string } | null } | null, workbenchSkills?: { __typename?: 'WorkbenchSkillConnection', edges?: Array<{ __typename?: 'WorkbenchSkillEdge', node?: { __typename?: 'WorkbenchSkill', id: string, name?: string | null, description?: string | null, contents?: string | null, subagents?: Array | null } | null } | null> | null } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, botUser?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null }; +export type WorkbenchFragment = { __typename?: 'Workbench', systemPrompt?: string | null, id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, repository?: { __typename?: 'GitRepository', id: string } | null, configuration?: { __typename?: 'WorkbenchConfiguration', infrastructure?: { __typename?: 'WorkbenchInfrastructure', services?: boolean | null, stacks?: boolean | null, kubernetes?: boolean | null, podLogs?: boolean | null, vulnerabilities?: boolean | null } | null, observability?: { __typename?: 'WorkbenchObservability', logs?: boolean | null, metrics?: boolean | null } | null, coding?: { __typename?: 'WorkbenchCoding', mode?: AgentRunMode | null, repositories?: Array | null, enableBabysitting?: boolean | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, skills?: { __typename?: 'WorkbenchSkills', files?: Array | null, ref?: { __typename?: 'GitRef', ref: string, folder: string } | null } | null, workbenchSkills?: { __typename?: 'WorkbenchSkillConnection', edges?: Array<{ __typename?: 'WorkbenchSkillEdge', node?: { __typename?: 'WorkbenchSkill', id: string, name?: string | null, description?: string | null, contents?: string | null, subagents?: Array | null } | null } | null> | null } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, botUser?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null }; export type WorkbenchToolTinyFragment = { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null }; -export type WorkbenchToolFragment = { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null }; +export type WorkbenchToolFragment = { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null }; export type WorkbenchJobThoughtFragment = { __typename?: 'WorkbenchJobThought', id: string, content?: string | null, toolName?: string | null, toolArgs?: Record | null, activity?: { __typename?: 'WorkbenchJobActivity', id: string } | null, attributes?: { __typename?: 'WorkbenchJobThoughtAttributes', logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, metrics?: Array<{ __typename?: 'WorkbenchJobActivityMetric', timestamp?: string | null, name?: string | null, value?: number | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null } | null }; @@ -21182,7 +21182,7 @@ export type WorkbenchQueryVariables = Exact<{ }>; -export type WorkbenchQuery = { __typename?: 'RootQueryType', workbench?: { __typename?: 'Workbench', systemPrompt?: string | null, id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, repository?: { __typename?: 'GitRepository', id: string } | null, configuration?: { __typename?: 'WorkbenchConfiguration', infrastructure?: { __typename?: 'WorkbenchInfrastructure', services?: boolean | null, stacks?: boolean | null, kubernetes?: boolean | null, podLogs?: boolean | null, vulnerabilities?: boolean | null } | null, observability?: { __typename?: 'WorkbenchObservability', logs?: boolean | null, metrics?: boolean | null } | null, coding?: { __typename?: 'WorkbenchCoding', mode?: AgentRunMode | null, repositories?: Array | null, enableBabysitting?: boolean | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, skills?: { __typename?: 'WorkbenchSkills', files?: Array | null, ref?: { __typename?: 'GitRef', ref: string, folder: string } | null } | null, workbenchSkills?: { __typename?: 'WorkbenchSkillConnection', edges?: Array<{ __typename?: 'WorkbenchSkillEdge', node?: { __typename?: 'WorkbenchSkill', id: string, name?: string | null, description?: string | null, contents?: string | null, subagents?: Array | null } | null } | null> | null } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, botUser?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null } | null }; +export type WorkbenchQuery = { __typename?: 'RootQueryType', workbench?: { __typename?: 'Workbench', systemPrompt?: string | null, id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, repository?: { __typename?: 'GitRepository', id: string } | null, configuration?: { __typename?: 'WorkbenchConfiguration', infrastructure?: { __typename?: 'WorkbenchInfrastructure', services?: boolean | null, stacks?: boolean | null, kubernetes?: boolean | null, podLogs?: boolean | null, vulnerabilities?: boolean | null } | null, observability?: { __typename?: 'WorkbenchObservability', logs?: boolean | null, metrics?: boolean | null } | null, coding?: { __typename?: 'WorkbenchCoding', mode?: AgentRunMode | null, repositories?: Array | null, enableBabysitting?: boolean | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, skills?: { __typename?: 'WorkbenchSkills', files?: Array | null, ref?: { __typename?: 'GitRef', ref: string, folder: string } | null } | null, workbenchSkills?: { __typename?: 'WorkbenchSkillConnection', edges?: Array<{ __typename?: 'WorkbenchSkillEdge', node?: { __typename?: 'WorkbenchSkill', id: string, name?: string | null, description?: string | null, contents?: string | null, subagents?: Array | null } | null } | null> | null } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, botUser?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null } | null }; export type WorkbenchAccessibleUserFragment = { __typename?: 'User', id: string, name: string, email: string, profile?: string | null }; @@ -21452,14 +21452,14 @@ export type WorkbenchToolQueryVariables = Exact<{ }>; -export type WorkbenchToolQuery = { __typename?: 'RootQueryType', workbenchTool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null }; +export type WorkbenchToolQuery = { __typename?: 'RootQueryType', workbenchTool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null }; export type CreateWorkbenchMutationVariables = Exact<{ attributes: WorkbenchAttributes; }>; -export type CreateWorkbenchMutation = { __typename?: 'RootMutationType', createWorkbench?: { __typename?: 'Workbench', systemPrompt?: string | null, id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, repository?: { __typename?: 'GitRepository', id: string } | null, configuration?: { __typename?: 'WorkbenchConfiguration', infrastructure?: { __typename?: 'WorkbenchInfrastructure', services?: boolean | null, stacks?: boolean | null, kubernetes?: boolean | null, podLogs?: boolean | null, vulnerabilities?: boolean | null } | null, observability?: { __typename?: 'WorkbenchObservability', logs?: boolean | null, metrics?: boolean | null } | null, coding?: { __typename?: 'WorkbenchCoding', mode?: AgentRunMode | null, repositories?: Array | null, enableBabysitting?: boolean | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, skills?: { __typename?: 'WorkbenchSkills', files?: Array | null, ref?: { __typename?: 'GitRef', ref: string, folder: string } | null } | null, workbenchSkills?: { __typename?: 'WorkbenchSkillConnection', edges?: Array<{ __typename?: 'WorkbenchSkillEdge', node?: { __typename?: 'WorkbenchSkill', id: string, name?: string | null, description?: string | null, contents?: string | null, subagents?: Array | null } | null } | null> | null } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, botUser?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null } | null }; +export type CreateWorkbenchMutation = { __typename?: 'RootMutationType', createWorkbench?: { __typename?: 'Workbench', systemPrompt?: string | null, id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, repository?: { __typename?: 'GitRepository', id: string } | null, configuration?: { __typename?: 'WorkbenchConfiguration', infrastructure?: { __typename?: 'WorkbenchInfrastructure', services?: boolean | null, stacks?: boolean | null, kubernetes?: boolean | null, podLogs?: boolean | null, vulnerabilities?: boolean | null } | null, observability?: { __typename?: 'WorkbenchObservability', logs?: boolean | null, metrics?: boolean | null } | null, coding?: { __typename?: 'WorkbenchCoding', mode?: AgentRunMode | null, repositories?: Array | null, enableBabysitting?: boolean | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, skills?: { __typename?: 'WorkbenchSkills', files?: Array | null, ref?: { __typename?: 'GitRef', ref: string, folder: string } | null } | null, workbenchSkills?: { __typename?: 'WorkbenchSkillConnection', edges?: Array<{ __typename?: 'WorkbenchSkillEdge', node?: { __typename?: 'WorkbenchSkill', id: string, name?: string | null, description?: string | null, contents?: string | null, subagents?: Array | null } | null } | null> | null } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, botUser?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null } | null }; export type UpdateWorkbenchMutationVariables = Exact<{ id: Scalars['ID']['input']; @@ -21467,7 +21467,7 @@ export type UpdateWorkbenchMutationVariables = Exact<{ }>; -export type UpdateWorkbenchMutation = { __typename?: 'RootMutationType', updateWorkbench?: { __typename?: 'Workbench', systemPrompt?: string | null, id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, repository?: { __typename?: 'GitRepository', id: string } | null, configuration?: { __typename?: 'WorkbenchConfiguration', infrastructure?: { __typename?: 'WorkbenchInfrastructure', services?: boolean | null, stacks?: boolean | null, kubernetes?: boolean | null, podLogs?: boolean | null, vulnerabilities?: boolean | null } | null, observability?: { __typename?: 'WorkbenchObservability', logs?: boolean | null, metrics?: boolean | null } | null, coding?: { __typename?: 'WorkbenchCoding', mode?: AgentRunMode | null, repositories?: Array | null, enableBabysitting?: boolean | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, skills?: { __typename?: 'WorkbenchSkills', files?: Array | null, ref?: { __typename?: 'GitRef', ref: string, folder: string } | null } | null, workbenchSkills?: { __typename?: 'WorkbenchSkillConnection', edges?: Array<{ __typename?: 'WorkbenchSkillEdge', node?: { __typename?: 'WorkbenchSkill', id: string, name?: string | null, description?: string | null, contents?: string | null, subagents?: Array | null } | null } | null> | null } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, botUser?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null } | null }; +export type UpdateWorkbenchMutation = { __typename?: 'RootMutationType', updateWorkbench?: { __typename?: 'Workbench', systemPrompt?: string | null, id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, repository?: { __typename?: 'GitRepository', id: string } | null, configuration?: { __typename?: 'WorkbenchConfiguration', infrastructure?: { __typename?: 'WorkbenchInfrastructure', services?: boolean | null, stacks?: boolean | null, kubernetes?: boolean | null, podLogs?: boolean | null, vulnerabilities?: boolean | null } | null, observability?: { __typename?: 'WorkbenchObservability', logs?: boolean | null, metrics?: boolean | null } | null, coding?: { __typename?: 'WorkbenchCoding', mode?: AgentRunMode | null, repositories?: Array | null, enableBabysitting?: boolean | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, skills?: { __typename?: 'WorkbenchSkills', files?: Array | null, ref?: { __typename?: 'GitRef', ref: string, folder: string } | null } | null, workbenchSkills?: { __typename?: 'WorkbenchSkillConnection', edges?: Array<{ __typename?: 'WorkbenchSkillEdge', node?: { __typename?: 'WorkbenchSkill', id: string, name?: string | null, description?: string | null, contents?: string | null, subagents?: Array | null } | null } | null> | null } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, botUser?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null } | null }; export type CreateWorkbenchEvalMutationVariables = Exact<{ workbenchId: Scalars['ID']['input']; @@ -21512,7 +21512,7 @@ export type CreateWorkbenchToolMutationVariables = Exact<{ }>; -export type CreateWorkbenchToolMutation = { __typename?: 'RootMutationType', createWorkbenchTool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null }; +export type CreateWorkbenchToolMutation = { __typename?: 'RootMutationType', createWorkbenchTool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null }; export type UpdateWorkbenchToolMutationVariables = Exact<{ id: Scalars['ID']['input']; @@ -21520,7 +21520,7 @@ export type UpdateWorkbenchToolMutationVariables = Exact<{ }>; -export type UpdateWorkbenchToolMutation = { __typename?: 'RootMutationType', updateWorkbenchTool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null }; +export type UpdateWorkbenchToolMutation = { __typename?: 'RootMutationType', updateWorkbenchTool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null }; export type DeleteWorkbenchToolMutationVariables = Exact<{ id: Scalars['ID']['input']; @@ -26823,6 +26823,21 @@ export const WorkbenchToolFragmentDoc = gql` azureDevops { url } + lambda { + lambdaArn + description + inputSchema + } + cloudRun { + identifier + description + inputSchema + } + azureFunction { + identifier + description + inputSchema + } docker { url provider diff --git a/assets/src/generated/persisted-queries/client.json b/assets/src/generated/persisted-queries/client.json index cd46307727..027e7a2f8c 100644 --- a/assets/src/generated/persisted-queries/client.json +++ b/assets/src/generated/persisted-queries/client.json @@ -1872,10 +1872,10 @@ "name": "WorkbenchesAlerts", "body": "query WorkbenchesAlerts($first: Int = 100, $after: String) {\n workbenchAlerts(first: $first, after: $after) {\n pageInfo {\n ...PageInfo\n __typename\n }\n edges {\n node {\n ...Alert\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment PageInfo on PageInfo {\n hasNextPage\n endCursor\n hasPreviousPage\n startCursor\n __typename\n}\n\nfragment Alert on Alert {\n id\n title\n message\n type\n severity\n state\n fingerprint\n url\n annotations\n tags {\n id\n name\n value\n __typename\n }\n insight {\n ...AiInsight\n __typename\n }\n resolution {\n ...AlertResolution\n __typename\n }\n workbench {\n id\n __typename\n }\n workbenchJob {\n id\n status\n __typename\n }\n updatedAt\n __typename\n}\n\nfragment AiInsight on AiInsight {\n id\n text\n summary\n sha\n freshness\n updatedAt\n insertedAt\n error {\n message\n source\n __typename\n }\n ...AiInsightContext\n __typename\n}\n\nfragment AiInsightContext on AiInsight {\n evidence {\n ...AiInsightEvidence\n __typename\n }\n cluster {\n id\n name\n distro\n provider {\n cloud\n __typename\n }\n __typename\n }\n clusterInsightComponent {\n id\n name\n __typename\n }\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n serviceComponent {\n id\n name\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n __typename\n }\n stack {\n id\n name\n type\n __typename\n }\n stackRun {\n id\n message\n type\n stack {\n id\n name\n __typename\n }\n __typename\n }\n alert {\n id\n title\n message\n __typename\n }\n __typename\n}\n\nfragment AiInsightEvidence on AiInsightEvidence {\n id\n type\n logs {\n ...LogsEvidence\n __typename\n }\n pullRequest {\n ...PullRequestEvidence\n __typename\n }\n alert {\n ...AlertEvidence\n __typename\n }\n knowledge {\n ...KnowledgeEvidence\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment LogsEvidence on LogsEvidence {\n clusterId\n serviceId\n line\n lines {\n ...LogLine\n __typename\n }\n __typename\n}\n\nfragment LogLine on LogLine {\n facets {\n ...LogFacet\n __typename\n }\n log\n timestamp\n __typename\n}\n\nfragment LogFacet on LogFacet {\n key\n value\n __typename\n}\n\nfragment PullRequestEvidence on PullRequestEvidence {\n contents\n filename\n patch\n repo\n sha\n title\n url\n __typename\n}\n\nfragment AlertEvidence on AlertEvidence {\n alertId\n title\n resolution\n __typename\n}\n\nfragment KnowledgeEvidence on KnowledgeEvidence {\n name\n observations\n type\n __typename\n}\n\nfragment ClusterMinimal on Cluster {\n id\n name\n handle\n provider {\n name\n cloud\n __typename\n }\n distro\n __typename\n}\n\nfragment AlertResolution on AlertResolution {\n resolution\n __typename\n}" }, - "sha256:d681cc4a1cb90b28bd22b3d7b3ea9cbc2c9a9549dcd062f6e86f6e2a543a589f": { + "sha256:08dee30e3633b9be935fa40aeb2d31c9b274f5a609a5539ef5ba4023bc49369e": { "type": "query", "name": "Workbench", - "body": "query Workbench($id: ID, $name: String) {\n workbench(id: $id, name: $name) {\n ...Workbench\n __typename\n }\n}\n\nfragment Workbench on Workbench {\n ...WorkbenchTiny\n systemPrompt\n agentRuntime {\n id\n name\n __typename\n }\n repository {\n id\n __typename\n }\n configuration {\n infrastructure {\n services\n stacks\n kubernetes\n podLogs\n vulnerabilities\n __typename\n }\n observability {\n logs\n metrics\n __typename\n }\n coding {\n mode\n repositories\n enableBabysitting\n __typename\n }\n __typename\n }\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n skills {\n ref {\n ref\n folder\n __typename\n }\n files\n __typename\n }\n workbenchSkills(first: 500) {\n edges {\n node {\n id\n name\n description\n contents\n subagents\n __typename\n }\n __typename\n }\n __typename\n }\n tools {\n ...WorkbenchTool\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n botUser {\n id\n name\n email\n profile\n __typename\n }\n __typename\n}\n\nfragment WorkbenchTiny on Workbench {\n id\n name\n description\n agentRuntime {\n id\n name\n type\n __typename\n }\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n webhooks(first: 50) {\n edges {\n node {\n ...WorkbenchWebhookTiny\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment WorkbenchWebhookTiny on WorkbenchWebhook {\n id\n name\n priority\n webhook {\n id\n type\n __typename\n }\n issueWebhook {\n ...IssueWebhookTiny\n __typename\n }\n __typename\n}\n\nfragment IssueWebhookTiny on IssueWebhook {\n id\n provider\n __typename\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" + "body": "query Workbench($id: ID, $name: String) {\n workbench(id: $id, name: $name) {\n ...Workbench\n __typename\n }\n}\n\nfragment Workbench on Workbench {\n ...WorkbenchTiny\n systemPrompt\n agentRuntime {\n id\n name\n __typename\n }\n repository {\n id\n __typename\n }\n configuration {\n infrastructure {\n services\n stacks\n kubernetes\n podLogs\n vulnerabilities\n __typename\n }\n observability {\n logs\n metrics\n __typename\n }\n coding {\n mode\n repositories\n enableBabysitting\n __typename\n }\n __typename\n }\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n skills {\n ref {\n ref\n folder\n __typename\n }\n files\n __typename\n }\n workbenchSkills(first: 500) {\n edges {\n node {\n id\n name\n description\n contents\n subagents\n __typename\n }\n __typename\n }\n __typename\n }\n tools {\n ...WorkbenchTool\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n botUser {\n id\n name\n email\n profile\n __typename\n }\n __typename\n}\n\nfragment WorkbenchTiny on Workbench {\n id\n name\n description\n agentRuntime {\n id\n name\n type\n __typename\n }\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n webhooks(first: 50) {\n edges {\n node {\n ...WorkbenchWebhookTiny\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment WorkbenchWebhookTiny on WorkbenchWebhook {\n id\n name\n priority\n webhook {\n id\n type\n __typename\n }\n issueWebhook {\n ...IssueWebhookTiny\n __typename\n }\n __typename\n}\n\nfragment IssueWebhookTiny on IssueWebhook {\n id\n provider\n __typename\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n lambda {\n lambdaArn\n description\n inputSchema\n __typename\n }\n cloudRun {\n identifier\n description\n inputSchema\n __typename\n }\n azureFunction {\n identifier\n description\n inputSchema\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" }, "sha256:6c3686838d1372371451664e8d6b593929eeca76e340065ed6dda5691e325b56": { "type": "query", @@ -2037,20 +2037,20 @@ "name": "WorkbenchTools", "body": "query WorkbenchTools($first: Int = 100, $after: String, $q: String) {\n workbenchTools(first: $first, after: $after, q: $q) {\n pageInfo {\n ...PageInfo\n __typename\n }\n edges {\n node {\n ...WorkbenchToolTiny\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment PageInfo on PageInfo {\n hasNextPage\n endCursor\n hasPreviousPage\n startCursor\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}" }, - "sha256:3c46397dac105d41477dbe615144decaa5ca6811536d68de3f22b677a31447e2": { + "sha256:c2007e345a13b0f55fd8a05b4586f94eb4140a6512a333014f11e94d75c8b383": { "type": "query", "name": "WorkbenchTool", - "body": "query WorkbenchTool($id: ID, $name: String) {\n workbenchTool(id: $id, name: $name) {\n ...WorkbenchTool\n __typename\n }\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" + "body": "query WorkbenchTool($id: ID, $name: String) {\n workbenchTool(id: $id, name: $name) {\n ...WorkbenchTool\n __typename\n }\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n lambda {\n lambdaArn\n description\n inputSchema\n __typename\n }\n cloudRun {\n identifier\n description\n inputSchema\n __typename\n }\n azureFunction {\n identifier\n description\n inputSchema\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" }, - "sha256:0f553c65a6d78cb36aed5133a3fe09652423546808d1b7844488bbeac47be7b7": { + "sha256:2e158e96611723ba1a6fb26c0d244a581269b31c5316d105786ccc46341d5008": { "type": "mutation", "name": "CreateWorkbench", - "body": "mutation CreateWorkbench($attributes: WorkbenchAttributes!) {\n createWorkbench(attributes: $attributes) {\n ...Workbench\n __typename\n }\n}\n\nfragment Workbench on Workbench {\n ...WorkbenchTiny\n systemPrompt\n agentRuntime {\n id\n name\n __typename\n }\n repository {\n id\n __typename\n }\n configuration {\n infrastructure {\n services\n stacks\n kubernetes\n podLogs\n vulnerabilities\n __typename\n }\n observability {\n logs\n metrics\n __typename\n }\n coding {\n mode\n repositories\n enableBabysitting\n __typename\n }\n __typename\n }\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n skills {\n ref {\n ref\n folder\n __typename\n }\n files\n __typename\n }\n workbenchSkills(first: 500) {\n edges {\n node {\n id\n name\n description\n contents\n subagents\n __typename\n }\n __typename\n }\n __typename\n }\n tools {\n ...WorkbenchTool\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n botUser {\n id\n name\n email\n profile\n __typename\n }\n __typename\n}\n\nfragment WorkbenchTiny on Workbench {\n id\n name\n description\n agentRuntime {\n id\n name\n type\n __typename\n }\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n webhooks(first: 50) {\n edges {\n node {\n ...WorkbenchWebhookTiny\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment WorkbenchWebhookTiny on WorkbenchWebhook {\n id\n name\n priority\n webhook {\n id\n type\n __typename\n }\n issueWebhook {\n ...IssueWebhookTiny\n __typename\n }\n __typename\n}\n\nfragment IssueWebhookTiny on IssueWebhook {\n id\n provider\n __typename\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" + "body": "mutation CreateWorkbench($attributes: WorkbenchAttributes!) {\n createWorkbench(attributes: $attributes) {\n ...Workbench\n __typename\n }\n}\n\nfragment Workbench on Workbench {\n ...WorkbenchTiny\n systemPrompt\n agentRuntime {\n id\n name\n __typename\n }\n repository {\n id\n __typename\n }\n configuration {\n infrastructure {\n services\n stacks\n kubernetes\n podLogs\n vulnerabilities\n __typename\n }\n observability {\n logs\n metrics\n __typename\n }\n coding {\n mode\n repositories\n enableBabysitting\n __typename\n }\n __typename\n }\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n skills {\n ref {\n ref\n folder\n __typename\n }\n files\n __typename\n }\n workbenchSkills(first: 500) {\n edges {\n node {\n id\n name\n description\n contents\n subagents\n __typename\n }\n __typename\n }\n __typename\n }\n tools {\n ...WorkbenchTool\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n botUser {\n id\n name\n email\n profile\n __typename\n }\n __typename\n}\n\nfragment WorkbenchTiny on Workbench {\n id\n name\n description\n agentRuntime {\n id\n name\n type\n __typename\n }\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n webhooks(first: 50) {\n edges {\n node {\n ...WorkbenchWebhookTiny\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment WorkbenchWebhookTiny on WorkbenchWebhook {\n id\n name\n priority\n webhook {\n id\n type\n __typename\n }\n issueWebhook {\n ...IssueWebhookTiny\n __typename\n }\n __typename\n}\n\nfragment IssueWebhookTiny on IssueWebhook {\n id\n provider\n __typename\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n lambda {\n lambdaArn\n description\n inputSchema\n __typename\n }\n cloudRun {\n identifier\n description\n inputSchema\n __typename\n }\n azureFunction {\n identifier\n description\n inputSchema\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" }, - "sha256:d08f4d9610c661062614b67dff3f9b5bb1305e6f88d993c41698a78d7c044914": { + "sha256:e08ce872015df2eeffabc216b83809b1f6015f2b7688206fc918c223d08181d0": { "type": "mutation", "name": "UpdateWorkbench", - "body": "mutation UpdateWorkbench($id: ID!, $attributes: WorkbenchAttributes!) {\n updateWorkbench(id: $id, attributes: $attributes) {\n ...Workbench\n __typename\n }\n}\n\nfragment Workbench on Workbench {\n ...WorkbenchTiny\n systemPrompt\n agentRuntime {\n id\n name\n __typename\n }\n repository {\n id\n __typename\n }\n configuration {\n infrastructure {\n services\n stacks\n kubernetes\n podLogs\n vulnerabilities\n __typename\n }\n observability {\n logs\n metrics\n __typename\n }\n coding {\n mode\n repositories\n enableBabysitting\n __typename\n }\n __typename\n }\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n skills {\n ref {\n ref\n folder\n __typename\n }\n files\n __typename\n }\n workbenchSkills(first: 500) {\n edges {\n node {\n id\n name\n description\n contents\n subagents\n __typename\n }\n __typename\n }\n __typename\n }\n tools {\n ...WorkbenchTool\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n botUser {\n id\n name\n email\n profile\n __typename\n }\n __typename\n}\n\nfragment WorkbenchTiny on Workbench {\n id\n name\n description\n agentRuntime {\n id\n name\n type\n __typename\n }\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n webhooks(first: 50) {\n edges {\n node {\n ...WorkbenchWebhookTiny\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment WorkbenchWebhookTiny on WorkbenchWebhook {\n id\n name\n priority\n webhook {\n id\n type\n __typename\n }\n issueWebhook {\n ...IssueWebhookTiny\n __typename\n }\n __typename\n}\n\nfragment IssueWebhookTiny on IssueWebhook {\n id\n provider\n __typename\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" + "body": "mutation UpdateWorkbench($id: ID!, $attributes: WorkbenchAttributes!) {\n updateWorkbench(id: $id, attributes: $attributes) {\n ...Workbench\n __typename\n }\n}\n\nfragment Workbench on Workbench {\n ...WorkbenchTiny\n systemPrompt\n agentRuntime {\n id\n name\n __typename\n }\n repository {\n id\n __typename\n }\n configuration {\n infrastructure {\n services\n stacks\n kubernetes\n podLogs\n vulnerabilities\n __typename\n }\n observability {\n logs\n metrics\n __typename\n }\n coding {\n mode\n repositories\n enableBabysitting\n __typename\n }\n __typename\n }\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n skills {\n ref {\n ref\n folder\n __typename\n }\n files\n __typename\n }\n workbenchSkills(first: 500) {\n edges {\n node {\n id\n name\n description\n contents\n subagents\n __typename\n }\n __typename\n }\n __typename\n }\n tools {\n ...WorkbenchTool\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n botUser {\n id\n name\n email\n profile\n __typename\n }\n __typename\n}\n\nfragment WorkbenchTiny on Workbench {\n id\n name\n description\n agentRuntime {\n id\n name\n type\n __typename\n }\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n webhooks(first: 50) {\n edges {\n node {\n ...WorkbenchWebhookTiny\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment WorkbenchWebhookTiny on WorkbenchWebhook {\n id\n name\n priority\n webhook {\n id\n type\n __typename\n }\n issueWebhook {\n ...IssueWebhookTiny\n __typename\n }\n __typename\n}\n\nfragment IssueWebhookTiny on IssueWebhook {\n id\n provider\n __typename\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n lambda {\n lambdaArn\n description\n inputSchema\n __typename\n }\n cloudRun {\n identifier\n description\n inputSchema\n __typename\n }\n azureFunction {\n identifier\n description\n inputSchema\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" }, "sha256:6bdd9295cb14dc91a238b8bb12b0b9b2781f2c6789194acd1364f8fe10bb3f6a": { "type": "mutation", @@ -2077,15 +2077,15 @@ "name": "DeleteWorkbench", "body": "mutation DeleteWorkbench($id: ID!) {\n deleteWorkbench(id: $id) {\n id\n __typename\n }\n}" }, - "sha256:a9736a14721a59755abe2c76e98ebdc36fd63b330e704524b348a42f8b638e10": { + "sha256:947348f2cc36d68b0a39405af2ae6d932a605597eb02bc79d7ed9e8e076bd9bc": { "type": "mutation", "name": "CreateWorkbenchTool", - "body": "mutation CreateWorkbenchTool($attributes: WorkbenchToolAttributes!) {\n createWorkbenchTool(attributes: $attributes) {\n ...WorkbenchTool\n __typename\n }\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" + "body": "mutation CreateWorkbenchTool($attributes: WorkbenchToolAttributes!) {\n createWorkbenchTool(attributes: $attributes) {\n ...WorkbenchTool\n __typename\n }\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n lambda {\n lambdaArn\n description\n inputSchema\n __typename\n }\n cloudRun {\n identifier\n description\n inputSchema\n __typename\n }\n azureFunction {\n identifier\n description\n inputSchema\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" }, - "sha256:2c69e6f3ba75206af80cd3e7105e609dc3dbdb9457e8ac2cfdd23f124d3ca809": { + "sha256:5a7c216f30218bd9ba0be8885386641f99a0b7f839b18763394fdd3df3fbb0e0": { "type": "mutation", "name": "UpdateWorkbenchTool", - "body": "mutation UpdateWorkbenchTool($id: ID!, $attributes: WorkbenchToolAttributes!) {\n updateWorkbenchTool(id: $id, attributes: $attributes) {\n ...WorkbenchTool\n __typename\n }\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" + "body": "mutation UpdateWorkbenchTool($id: ID!, $attributes: WorkbenchToolAttributes!) {\n updateWorkbenchTool(id: $id, attributes: $attributes) {\n ...WorkbenchTool\n __typename\n }\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n lambda {\n lambdaArn\n description\n inputSchema\n __typename\n }\n cloudRun {\n identifier\n description\n inputSchema\n __typename\n }\n azureFunction {\n identifier\n description\n inputSchema\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" }, "sha256:c48b92f91779f79e1feb98e23d681a30cc7bc2f045519d3998ba022a38a9b460": { "type": "mutation", diff --git a/assets/src/graph/workbench.graphql b/assets/src/graph/workbench.graphql index 2ad0400cf7..d67db66cce 100644 --- a/assets/src/graph/workbench.graphql +++ b/assets/src/graph/workbench.graphql @@ -264,6 +264,21 @@ fragment WorkbenchTool on WorkbenchTool { azureDevops { url } + lambda { + lambdaArn + description + inputSchema + } + cloudRun { + identifier + description + inputSchema + } + azureFunction { + identifier + description + inputSchema + } docker { url provider From c7c4bd92f8a3061f6ce28e3d59b6997f9320aa3f Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Fri, 24 Jul 2026 14:19:26 +0200 Subject: [PATCH 02/50] add icons --- .../components/icons/GoogleCloudRunIcon.tsx | 42 +++++++++++++++++++ .../src/components/icons/LambdaIcon.tsx | 42 +++++++++++++++++++ .../components/icons/MicrosoftActionsIcon.tsx | 42 +++++++++++++++++++ assets/design-system/src/icons.ts | 3 ++ 4 files changed, 129 insertions(+) create mode 100644 assets/design-system/src/components/icons/GoogleCloudRunIcon.tsx create mode 100644 assets/design-system/src/components/icons/LambdaIcon.tsx create mode 100644 assets/design-system/src/components/icons/MicrosoftActionsIcon.tsx diff --git a/assets/design-system/src/components/icons/GoogleCloudRunIcon.tsx b/assets/design-system/src/components/icons/GoogleCloudRunIcon.tsx new file mode 100644 index 0000000000..94b811d960 --- /dev/null +++ b/assets/design-system/src/components/icons/GoogleCloudRunIcon.tsx @@ -0,0 +1,42 @@ +import createIcon from './createIcon' + +const icon = + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAERElEQVR4AZxVW0xcVRRd+9x7y2OAMsC0QAtCLZq2iUCT1sTQShsf1JjAD1/GtDb+NtH0o/Jh5Mf0A43xmWjU6GdRY6IQf7S2VFpSE5uY2DagplKttjyEeTN37tnuMzPMiymoO2fdu++5e691zt7nziiUNKbBUbZ6h9n+NzCxAFMpqjUChvDQ6eje+enIx8qOTioncnFdSIyJPfBytNvkFosUCTBpK9hOmkeI8BSI90vCvnUhMSbWIR4xucU7KRB4bASVFqkjDPTiPxozDtlw+gxHfmpOYJhVLBG5F4QTUkwZ+WEb+5JAUN6JFIdwIWNZgV4s1ViMZwi0M/Puf9yowwaOPVKO6tXklMDgIFuWY3crwtHVF+Ze7gB1PoLMw1cGbK5M+1jHCDjqJcJdhtOEpQTm9oT8DPWcTPgF2bGlhvDwLgvtAUJbA+HwbgsdjQpGOBu01qmDwvOL3aFa80pB6mU5qo/BR8xEPhIesL2O8OgegvaS6NgKPNmlsLdNob6KIKcnPzznEz2hWT1uuNVBe3GbBk4SIAXJxRhvKcK4uchokrVoL4GZWyuIxBJornHxkHRq51ZCmRTdxObDcAlOHrZjTUrxpuPy0JkfsOrHXeD3BYZSCqZcS2EXC6Ekfv4zDn+li74HFHrut+CXPpXYTbdm75j0j44LoWjItcRYCGtEE4TWgI25oId7Ag4G9lehfYuDfTssPN2zScpmobZCvp7CfBJ7VoEQKpwvfiIQATJg7i0NDg7srsRBQbPfgdYe3EQcXiIG1kkUGCGumPlNmZR2yrXEaKgmOaKM2TkXzX47BRMWXdGYvBbFR2eX8cX3YSwGRcTNiciCNLN6W1kWfyoJE4I1wxzHlnqC52ncXpbySFk2+xRm512MXgzhw7NBXLgWx3JUwxSIPVd2Ek3thBnfeco7o74Zql4EaEQQRpGZ5rXIMb25kISsCI21Fqam4/jg62V8PhXGL7ddJJKGOpdoypR0o1HP069cGKqalx4Ql7mVk/Jr/kkuLO1ZxHI0Y/jqhwhkE7g8E8f7Qj55PY6/I7LqQu50klzZ8z5zoskJELGSZzwIhFnjHfH/EGTHnaDGxNUV3Ljj4ob04NxPMfxaYtXZBOMQbslu3+qp8KcOT0pgeJg0kpHrHvhdWZQMEwkkPEIwsQkgB9EVRih291UjY6z5PcspuzpsOGUuJSB3nHspEFG2MyrqV8xzGgRl2VBOOUjZ2Nj4isf6jOFajc0KmHrF/5qb1Yw35GXesaWMSMUGIpTUsF5H3P7NcCFjOQGZuPTa9jgs9zxAX6LASEQc2cndReR7GvM893yKAzkrEID8Cfeu1M6y9l7QGq+CMcbA+CrIcsaVXTYOqHEhTAM8BqaRBLunpsrbZg0H8qxIADDN+fbF6unAj75T9ff5Bho6fP35COyq62/s3Nbf1NWaRmfrQOPMpaHLp3fMINNY5Nk/AAAA///Eup1SAAAABklEQVQDAKtD2E0fWLTJAAAAAElFTkSuQmCC' + +export default createIcon(({ size, color, fullColor }) => ( + + {fullColor ? ( + + ) : ( + <> + + + + + + )} + +)) diff --git a/assets/design-system/src/components/icons/LambdaIcon.tsx b/assets/design-system/src/components/icons/LambdaIcon.tsx new file mode 100644 index 0000000000..e46a2360b8 --- /dev/null +++ b/assets/design-system/src/components/icons/LambdaIcon.tsx @@ -0,0 +1,42 @@ +import createIcon from './createIcon' + +const icon = + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAYCAYAAAARfGZ1AAAD5UlEQVR4AYxVXWhcVRD+5tx79yfZ/DSbRJv0oSi1SvWhUAoRlEqeJKKVmqIgIhRa9MmiIKKWa4sW9EUQrQiCPvkHPolCRXwUIS+C0FJ8qKBttbtpm2x2s/fnjN/Zzf6km11zdubOOTNzvpk7d85Zg9vG6mt3TkWnijeiN4sJZdrhydX49fGH9TiC27b0XfaANz3FQMjoZmTV89/BzEyggGAbw2zDp+XicbI/RnQvvsa29vU4FcaTdab1s0DPE+wnQJeh/KEBmBOLR/DLrgxt/0s94KiV1vzZ0qJ/o/xEYOQwwT8nSkJ2ZBjneUyv5lQhTjGIe8AlhJUTiOUD1BFeX7M2/ZABVtogKnuiqlnACfhtXZ9JD3i3nxA1Su1N5nipS58x4j2O8clcl27L6UBwt2MkHlqnXGLVlRIMxJh4sBboKBVujn5jILjbXAlkiPU9gC4Y1n0q8PACwsE9PxD8ajiTz3jRiyKyH+iCV3G9/hzi4hQGjL7gGsLssPU5Y8xJ7s+SOyQukExExj7k/DqGzbMtwRsbKnfkPZU3WJICtwjZkbrHBjOgOXIZyNCnZd8wNcWW4DT5ST5+mXKOOXqUjiwfrmuc5BSeiMzvTsZmcbRxwJxuE/eAa4hMrToxrZCXCNy6pHiI9EKQ6rwC/xLBBRB26nBqglexD60EaOrQJnBlnSv1wliQM19CZIxuZqMFK8bSulIuEfBXMoPRCvEtdA7ZsWFd7A2wCRysc+BnF9lqB7m1ZXN3zaeeP/qdO7Ue9Auo1Gl3RB/ZG9eDu7Fvd+stnb7BNDYkmJdfL9R2eoK3AWk6KlIVlH1j35fwsjtM8IbN98z8LwCWDCh8tfgKuVtZBVgqtEcbHBgveGlwViGjbavoLVF9Cli+0tYtlapE+IzrZvZckHbGa+YehPA0hHElcrIBvsR/lyiWRyGyADS+vFImfJz72yv/JuFGllTKN0gjCK9iVLh0xNsZOVE5hGi6mNiJ+fi+4nEkxb2NKA/MTOwR432sAHvX+SPl+17KGH2X923U0HQ9hmreRdr/pCohAwJRg1OJl15QmG+5fC8xeszgwOSQWHmFDnkArjtSprKSpHqM5aiGYSdr2pt08J91EXOSi8Z3oHRUUJEdnBR4qHgfmUMmraQshTwDhbufLY1Vq/gkHywvSYhmZlR2kxxF6kv8O7Mnd1uIonxrQY1aa1S8Z6m6qoIrClxj1j9mvJG3+gFzU5PKNx2A6/mYQVzpqjSsCPCDGPtkPfEXTHC69FjmTOmu7OnSLvJscKZ8RMJm29G5PxUR21g+YmJ/0OkcO+PpwNj7/Yulw0G4fH7k7LXr/wEAAP//oYg0lgAAAAZJREFUAwB8uWLGeMjfdQAAAABJRU5ErkJggg==' + +export default createIcon(({ size, color, fullColor }) => ( + + {fullColor ? ( + + ) : ( + <> + + + + + + )} + +)) diff --git a/assets/design-system/src/components/icons/MicrosoftActionsIcon.tsx b/assets/design-system/src/components/icons/MicrosoftActionsIcon.tsx new file mode 100644 index 0000000000..ab7a2b75c9 --- /dev/null +++ b/assets/design-system/src/components/icons/MicrosoftActionsIcon.tsx @@ -0,0 +1,42 @@ +import createIcon from './createIcon' + +const icon = + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAVCAYAAABc6S4mAAACP0lEQVR4AaSVsW4TQRCGZ9e5hiYpAuItkKCJkyI2JQWPAUKCltZ2QUUJEgqPQY1wIoGDQATBYyCEoEgi4rvd7Le6ueyd75KTYvnP7s78/z+j2fPFSs/P8setaf7z5jzi6+ZH92H9myI/2HzYZdO7gBGZiDcjYE6KHe/kLpDwWdv9/S4srd9eBZbfb48q9dKJgDLgBtms3LYuvQqYQTFRtTkudCt+YF5f1j3EzgLDt4v59t6naeye0cAGZffGytHa+O+zrTeHI7ik2rBSIAr2Ft54f7B4vDOtiU4uutfRfH4y3Ic7DBq0NX441ApAMNbPjfiZmtfHkweJrIwGLhq0eERS+acqQAICRATka+MpR0PcFP5p8X7dK/L5xis0aPHACx6IBZg1CQgQSYC0e1l6kcxKDYGkdxG2ghYPvPAkZtl4MRMSEAhWSC/3xkD8RlZBOXoXesYDLzzxtt6YXZIkWFN4kVmKKse4Aroe09TLHj7aHouRfR61dHaYZXd+TVMQA/wW0tEQS4EXnhSyJGKRsGF2zSIhHL/xwtmFR9UU7sje/3ePYxOY89iqZywAiQCz6yqiF26Oc2nOHT2N8VvAnM6JgaoABxKdRbjw0H3b3DGnMbR44KWoFSAIASIChMTieMKl2tM8vh6IKeDARYNW47quFCABEQF7EMdz6r50zd07M0YDt4nWApAQ8J6J3Z/5kTj7gngTcEAzrufOAkpg9bl7edVrGV4bri7w/+xBtvXneZu4T+zSAvyvvY45DZwDAAD//45G9PoAAAAGSURBVAMARbFYWb7haUoAAAAASUVORK5CYII=' + +export default createIcon(({ size, color, fullColor }) => ( + + {fullColor ? ( + + ) : ( + <> + + + + + + )} + +)) diff --git a/assets/design-system/src/icons.ts b/assets/design-system/src/icons.ts index 46c5ab2f92..56b0899d59 100644 --- a/assets/design-system/src/icons.ts +++ b/assets/design-system/src/icons.ts @@ -134,6 +134,7 @@ export { default as GitPullIcon } from './components/icons/GitPullIcon' export { default as GKEIcon } from './components/icons/GKEIcon' export { default as GlobeIcon } from './components/icons/GlobeIcon' export { default as GoogleCloudLogoIcon } from './components/icons/GoogleCloudLogoIcon' +export { default as GoogleCloudRunIcon } from './components/icons/GoogleCloudRunIcon' export { default as GoogleLogoIcon } from './components/icons/GoogleLogoIcon' export { default as GrafanaLogoIcon } from './components/icons/GrafanaLogoIcon' export { default as GraphIcon } from './components/icons/GraphIcon' @@ -161,6 +162,7 @@ export { default as KeyIcon } from './components/icons/KeyIcon' export { default as KeyPairIcon } from './components/icons/KeyPairIcon' export { default as KubernetesIcon } from './components/icons/Kubernetes' export { default as KubernetesAltIcon } from './components/icons/KubernetesAltIcon' +export { default as LambdaIcon } from './components/icons/LambdaIcon' export { default as LifePreserverIcon } from './components/icons/LifePreserverIcon' export { default as LightningIcon } from './components/icons/LightningIcon' export { default as LinearLogoIcon } from './components/icons/LinearLogoIcon' @@ -180,6 +182,7 @@ export { default as MarketPlusIcon } from './components/icons/MarketPlusIcon' export { default as McpLogoIcon } from './components/icons/McpLogoIcon' export { default as MegaphoneIcon } from './components/icons/MegaphoneIcon' export { default as MessagesIcon } from './components/icons/MessagesIcon' +export { default as MicrosoftActionsIcon } from './components/icons/MicrosoftActionsIcon' export { default as MinusIcon } from './components/icons/MinusIcon' export { default as MinimizeIcon } from './components/icons/MinimizeIcon' export { default as MoonIcon } from './components/icons/MoonIcon' From 37132d160ad3ca1e47bca3e033bb3e54e0a058ab Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Fri, 24 Jul 2026 14:32:56 +0200 Subject: [PATCH 03/50] add new custom actions --- .../WorkbenchesConfiguredToolMetadata.tsx | 26 ++++- .../tools/WorkbenchToolCreateOrEdit.tsx | 20 +++- .../workbenches/tools/WorkbenchToolForm.tsx | 60 +++++++++-- .../tools/WorkbenchToolFormFields.tsx | 99 +++++++++++++++++++ .../workbenches/tools/workbenchToolsUtils.tsx | 32 +++++- 5 files changed, 222 insertions(+), 15 deletions(-) diff --git a/assets/src/components/workbenches/WorkbenchesConfiguredToolMetadata.tsx b/assets/src/components/workbenches/WorkbenchesConfiguredToolMetadata.tsx index bfb14155dd..349cad5cf9 100644 --- a/assets/src/components/workbenches/WorkbenchesConfiguredToolMetadata.tsx +++ b/assets/src/components/workbenches/WorkbenchesConfiguredToolMetadata.tsx @@ -45,9 +45,9 @@ const metadataExtractors: Record = { [WorkbenchToolType.AzureDevops]: extractAzureDevopsMetadata, [WorkbenchToolType.Docker]: extractDockerMetadata, [WorkbenchToolType.Cloud]: () => [], - [WorkbenchToolType.Lambda]: () => [], - [WorkbenchToolType.CloudRun]: () => [], - [WorkbenchToolType.AzureFunction]: () => [], + [WorkbenchToolType.Lambda]: extractLambdaMetadata, + [WorkbenchToolType.CloudRun]: extractCloudRunMetadata, + [WorkbenchToolType.AzureFunction]: extractAzureFunctionMetadata, } export function WorkbenchesConfiguredToolMetadata({ @@ -325,6 +325,26 @@ function extractDockerMetadata( ] } +function extractLambdaMetadata( + configuration: WorkbenchToolConfiguration | null +): MetadataRow[] { + return [{ label: 'ARN', value: configuration?.lambda?.lambdaArn }] +} + +function extractCloudRunMetadata( + configuration: WorkbenchToolConfiguration | null +): MetadataRow[] { + return [{ label: 'Service', value: configuration?.cloudRun?.identifier }] +} + +function extractAzureFunctionMetadata( + configuration: WorkbenchToolConfiguration | null +): MetadataRow[] { + return [ + { label: 'Function', value: configuration?.azureFunction?.identifier }, + ] +} + function getConfiguredHeadersCount( headers?: (WorkbenchToolHttpHeader | null)[] | null ): number { diff --git a/assets/src/components/workbenches/tools/WorkbenchToolCreateOrEdit.tsx b/assets/src/components/workbenches/tools/WorkbenchToolCreateOrEdit.tsx index 3ec1b04c66..35d972cfc1 100644 --- a/assets/src/components/workbenches/tools/WorkbenchToolCreateOrEdit.tsx +++ b/assets/src/components/workbenches/tools/WorkbenchToolCreateOrEdit.tsx @@ -34,6 +34,7 @@ import { deepOmitBlank } from 'utils/graphql' import { getWorkbenchesBreadcrumbs } from '../Workbenches' import { WorkbenchToolForm, WorkbenchToolFormState } from './WorkbenchToolForm' import { + cloudFunctionProviderForWorkbenchTool, CONFIGURABLE_TOOL_TYPE_TO_CONFIG_KEY, getWorkbenchToolLabel, isConfigurableWorkbenchToolType, @@ -283,11 +284,16 @@ function formStateToAttributes( const scmType = scmTypeForWorkbenchTool(type) const scmPatch = scmType ? { scmConnectionId: scmConnectionId ?? null } : {} + const cloudConnectionPatch = + type === WorkbenchToolType.Cloud || + !!cloudFunctionProviderForWorkbenchTool(type) + ? { cloudConnectionId: cloudConnectionId ?? null } + : {} if (type === WorkbenchToolType.Cloud) return { ...base, - cloudConnectionId: cloudConnectionId ?? null, + ...cloudConnectionPatch, ...scmPatch, } @@ -299,14 +305,20 @@ function formStateToAttributes( } if (!isConfigurableWorkbenchToolType(type) || !configuration) - return { ...base, ...scmPatch } + return { ...base, ...cloudConnectionPatch, ...scmPatch } const configKey = CONFIGURABLE_TOOL_TYPE_TO_CONFIG_KEY[type] const sanitized = deepOmitBlank(configuration[configKey]) - if (isEmpty(sanitized)) return { ...base, ...scmPatch } + if (isEmpty(sanitized)) + return { ...base, ...cloudConnectionPatch, ...scmPatch } - return { ...base, ...scmPatch, configuration: { [configKey]: sanitized } } + return { + ...base, + ...cloudConnectionPatch, + ...scmPatch, + configuration: { [configKey]: sanitized }, + } } const WrapperSC = styled.div(({ theme }) => ({ diff --git a/assets/src/components/workbenches/tools/WorkbenchToolForm.tsx b/assets/src/components/workbenches/tools/WorkbenchToolForm.tsx index 5cc8418a32..5cae88577f 100644 --- a/assets/src/components/workbenches/tools/WorkbenchToolForm.tsx +++ b/assets/src/components/workbenches/tools/WorkbenchToolForm.tsx @@ -33,6 +33,7 @@ import { WorkbenchToolDeleteModal } from './WorkbenchToolDeleteModal' import { WorkbenchToolFormFields } from './WorkbenchToolFormFields' import { categoryToLabel, + cloudFunctionProviderForWorkbenchTool, ConfigForToolType, CONFIGURABLE_TOOL_TYPE_TO_CONFIG_KEY, ConfigurableWorkbenchToolType, @@ -178,9 +179,11 @@ export function WorkbenchToolForm({ const categories = TOOL_TYPE_TO_CATEGORIES[type] ?? [] const hasRegisteredScm = Boolean(state.scmConnectionId) const scmType = scmTypeForWorkbenchTool(type) + const cloudConnectionProvider = + provider ?? cloudFunctionProviderForWorkbenchTool(type) const configurationStepComplete = !!state.name.trim() && - (type !== WorkbenchToolType.Cloud || !!state.cloudConnectionId) && + (!cloudConnectionProvider || !!state.cloudConnectionId) && (type !== WorkbenchToolType.Mcp || !!state.mcpServerId) && (type !== WorkbenchToolType.Github || hasRegisteredScm || @@ -211,7 +214,19 @@ export function WorkbenchToolForm({ pagerdutyConfigurationIsComplete(state.configuration?.pagerduty)) && (type !== WorkbenchToolType.Sentry || !!tool?.id || - sentryConfigurationIsComplete(state.configuration?.sentry)) + sentryConfigurationIsComplete(state.configuration?.sentry)) && + (type !== WorkbenchToolType.Lambda || + (!!state.configuration?.lambda?.lambdaArn.trim() && + !!state.configuration.lambda.description.trim() && + !!state.configuration.lambda.inputSchema)) && + (type !== WorkbenchToolType.CloudRun || + (!!state.configuration?.cloudRun?.identifier.trim() && + !!state.configuration.cloudRun.description.trim() && + !!state.configuration.cloudRun.inputSchema)) && + (type !== WorkbenchToolType.AzureFunction || + (!!state.configuration?.azureFunction?.identifier.trim() && + !!state.configuration.azureFunction.description.trim() && + !!state.configuration.azureFunction.inputSchema)) const allowSave = hasUpdates && configurationStepComplete return ( update({ name: e.target.value })} /> - {type === WorkbenchToolType.Cloud && provider ? ( + {cloudConnectionProvider && ( update({ cloudConnectionId: id })} /> - ) : type === WorkbenchToolType.Mcp ? ( + )} + {type === WorkbenchToolType.Mcp ? ( update({ mcpServerId: id })} /> - ) : ( + ) : type !== WorkbenchToolType.Cloud ? ( <> {scmType ? ( - )} + ) : null} {categories.length > 1 && ( { + const { lambdaArn, description, inputSchema } = config?.lambda ?? {} + return { + lambda: { + lambdaArn: lambdaArn ?? '', + description: description ?? '', + inputSchema: inputSchema ?? undefined, + }, + } + }, + [WorkbenchToolType.CloudRun]: (config) => { + const { identifier, description, inputSchema } = config?.cloudRun ?? {} + return { + cloudRun: { + identifier: identifier ?? '', + description: description ?? '', + inputSchema: inputSchema ?? undefined, + }, + } + }, + [WorkbenchToolType.AzureFunction]: (config) => { + const { identifier, description, inputSchema } = config?.azureFunction ?? {} + return { + azureFunction: { + identifier: identifier ?? '', + description: description ?? '', + inputSchema: inputSchema ?? undefined, + }, + } + }, } function sanitizeInitialConfiguration( diff --git a/assets/src/components/workbenches/tools/WorkbenchToolFormFields.tsx b/assets/src/components/workbenches/tools/WorkbenchToolFormFields.tsx index 00d8383e88..11be8fafe7 100644 --- a/assets/src/components/workbenches/tools/WorkbenchToolFormFields.tsx +++ b/assets/src/components/workbenches/tools/WorkbenchToolFormFields.tsx @@ -121,6 +121,12 @@ export function WorkbenchToolFormFields({ return render(type, SentryFormFields) case WorkbenchToolType.Docker: return render(type, DockerFormFields) + case WorkbenchToolType.Lambda: + return render(type, LambdaFormFields) + case WorkbenchToolType.CloudRun: + return render(type, CloudRunFormFields) + case WorkbenchToolType.AzureFunction: + return render(type, AzureFunctionFormFields) } } @@ -398,6 +404,99 @@ function HttpFormFields({ ) } +function LambdaFormFields({ + config: c, + setConfig: set, +}: ToolFormFieldProps) { + return ( + <> + set({ ...c, lambdaArn: e.target.value })} + /> + set({ ...c, description: value ?? '' })} + css={{ minHeight: 80 }} + /> + | string | undefined} + onChange={(inputSchema) => set({ ...c, inputSchema })} + /> + + ) +} + +function CloudRunFormFields({ + config: c, + setConfig: set, +}: ToolFormFieldProps) { + return ( + <> + set({ ...c, identifier: e.target.value })} + /> + set({ ...c, description: value ?? '' })} + css={{ minHeight: 80 }} + /> + | string | undefined} + onChange={(inputSchema) => set({ ...c, inputSchema })} + /> + + ) +} + +function AzureFunctionFormFields({ + config: c, + setConfig: set, +}: ToolFormFieldProps) { + return ( + <> + set({ ...c, identifier: e.target.value })} + /> + set({ ...c, description: value ?? '' })} + css={{ minHeight: 80 }} + /> + | string | undefined} + onChange={(inputSchema) => set({ ...c, inputSchema })} + /> + + ) +} + function UrlUsernamePasswordTokenTenantFormFields< T extends | WorkbenchToolType.Loki diff --git a/assets/src/components/workbenches/tools/workbenchToolsUtils.tsx b/assets/src/components/workbenches/tools/workbenchToolsUtils.tsx index ea15ccd05a..f8758ad02a 100644 --- a/assets/src/components/workbenches/tools/workbenchToolsUtils.tsx +++ b/assets/src/components/workbenches/tools/workbenchToolsUtils.tsx @@ -10,10 +10,13 @@ import { GitHubLogoIcon, GitLabLogoIcon, GoogleCloudLogoIcon, + GoogleCloudRunIcon, IconProps, + LambdaIcon, LinearLogoIcon, LokiLogoIcon, McpLogoIcon, + MicrosoftActionsIcon, MsTeamsLogoIcon, OpenSearchLogoIcon, PrometheusLogoIcon, @@ -63,6 +66,9 @@ const CONFIGURABLE_WORKBENCH_TOOL_TYPES = [ WorkbenchToolType.Azure, WorkbenchToolType.Sentry, WorkbenchToolType.Docker, + WorkbenchToolType.Lambda, + WorkbenchToolType.CloudRun, + WorkbenchToolType.AzureFunction, ] as const const CONFIGURABLE_SET = new Set( @@ -98,6 +104,9 @@ export const CONFIGURABLE_TOOL_TYPE_TO_CONFIG_KEY = { [WorkbenchToolType.Azure]: 'azure', [WorkbenchToolType.Sentry]: 'sentry', [WorkbenchToolType.Docker]: 'docker', + [WorkbenchToolType.Lambda]: 'lambda', + [WorkbenchToolType.CloudRun]: 'cloudRun', + [WorkbenchToolType.AzureFunction]: 'azureFunction', } as const satisfies Record< ConfigurableWorkbenchToolType, keyof WorkbenchToolConfigurationAttributes @@ -131,6 +140,18 @@ export function scmTypeForWorkbenchTool( return WORKBENCH_TOOL_TO_SCM_TYPE[type] } +const CLOUD_FUNCTION_TOOL_TO_PROVIDER: Partial< + Record +> = { + [WorkbenchToolType.Lambda]: Provider.Aws, + [WorkbenchToolType.CloudRun]: Provider.Gcp, + [WorkbenchToolType.AzureFunction]: Provider.Azure, +} + +export const cloudFunctionProviderForWorkbenchTool = ( + type: WorkbenchToolType +): Provider | undefined => CLOUD_FUNCTION_TOOL_TO_PROVIDER[type] + const WORKBENCH_TOOL_LABELS: Record< WorkbenchToolType | `${WorkbenchToolType.Cloud}:${Provider}`, string @@ -163,7 +184,7 @@ const WORKBENCH_TOOL_LABELS: Record< [WorkbenchToolType.Cloud]: 'Cloud', [WorkbenchToolType.Lambda]: 'AWS Lambda', [WorkbenchToolType.CloudRun]: 'GCP Cloud Run', - [WorkbenchToolType.AzureFunction]: 'Azure Function', + [WorkbenchToolType.AzureFunction]: 'Azure Cloud Function', [WorkbenchToolType.Docker]: 'Docker / OCI registry', [`${WorkbenchToolType.Cloud}:${Provider.Aws}`]: 'AWS', [`${WorkbenchToolType.Cloud}:${Provider.Gcp}`]: 'GCP', @@ -279,6 +300,12 @@ const CONFIGURABLE_TOOL_TYPE_CARD_DESCRIPTIONS: Record< 'Connect to Sentry to list issues, inspect error details, and read stack traces.', [WorkbenchToolType.Docker]: 'Inspect Docker and OCI registries by listing tags and fetching manifests.', + [WorkbenchToolType.Lambda]: + 'Run custom code with AWS Lambda without provisioning or managing servers.', + [WorkbenchToolType.CloudRun]: + 'Run custom containerized applications on GCP Cloud Run.', + [WorkbenchToolType.AzureFunction]: + 'Run custom code with Azure Functions without managing infrastructure.', } export const categoryToLabel: Record = { @@ -439,4 +466,7 @@ const toolToIcon: Record< [WorkbenchToolType.Jaeger]: ToolsIcon, [WorkbenchToolType.Sentry]: SentryLogoIcon, [WorkbenchToolType.Docker]: DockerLogoIcon, + [WorkbenchToolType.Lambda]: LambdaIcon, + [WorkbenchToolType.CloudRun]: GoogleCloudRunIcon, + [WorkbenchToolType.AzureFunction]: MicrosoftActionsIcon, } From a415135658ab489ba8ad1da2e996659b415ce6ad Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Fri, 24 Jul 2026 14:39:03 +0200 Subject: [PATCH 04/50] add approval setting --- .../tools/WorkbenchToolCreateOrEdit.tsx | 3 + .../workbenches/tools/WorkbenchToolForm.tsx | 83 ++++++++++++++++--- .../workbenches/tools/workbenchToolsUtils.tsx | 4 + .../WorkbenchPromptSupervisionOption.tsx | 2 +- assets/src/generated/graphql.ts | 37 +++++---- .../generated/persisted-queries/client.json | 52 ++++++------ assets/src/graph/workbench.graphql | 1 + 7 files changed, 126 insertions(+), 56 deletions(-) diff --git a/assets/src/components/workbenches/tools/WorkbenchToolCreateOrEdit.tsx b/assets/src/components/workbenches/tools/WorkbenchToolCreateOrEdit.tsx index 35d972cfc1..cfb5b2d532 100644 --- a/assets/src/components/workbenches/tools/WorkbenchToolCreateOrEdit.tsx +++ b/assets/src/components/workbenches/tools/WorkbenchToolCreateOrEdit.tsx @@ -40,6 +40,7 @@ import { isConfigurableWorkbenchToolType, isProvider, scmTypeForWorkbenchTool, + workbenchToolSupportsApproval, WorkbenchToolIcon, } from './workbenchToolsUtils' import { @@ -271,6 +272,7 @@ function formStateToAttributes( cloudConnectionId, mcpServerId, scmConnectionId, + approval, readBindings, writeBindings, } = state @@ -278,6 +280,7 @@ function formStateToAttributes( tool: type, name, categories, + ...(workbenchToolSupportsApproval(type) ? { approval: !!approval } : {}), readBindings: readBindings.map(bindingToBindingAttributes), writeBindings: writeBindings.map(bindingToBindingAttributes), } diff --git a/assets/src/components/workbenches/tools/WorkbenchToolForm.tsx b/assets/src/components/workbenches/tools/WorkbenchToolForm.tsx index 5cae88577f..ecb3bea804 100644 --- a/assets/src/components/workbenches/tools/WorkbenchToolForm.tsx +++ b/assets/src/components/workbenches/tools/WorkbenchToolForm.tsx @@ -5,7 +5,9 @@ import { Flex, FormField, Input2, + WarningShieldIcon, } from '@pluralsh/design-system' +import { Overline } from 'components/cd/utils/PermissionsModal' import { useUpdateState } from 'components/hooks/useUpdateState' import { FormBindings } from 'components/utils/bindings' import { @@ -19,13 +21,14 @@ import { HelmAuthProvider, } from 'generated/graphql' import { isNonNullable } from 'utils/isNonNullable' -import { useState } from 'react' +import { useMemo, useState } from 'react' import { FormCardSC, SidebarBtnSC, StickyActionsFooterSC, WorkbenchSplitLayoutSC, } from '../workbench/create-edit/WorkbenchCreateOrEdit' +import { WorkbenchPromptSupervisionOption } from '../workbench/WorkbenchPromptModeSelector/WorkbenchPromptSupervisionOption' import { CloudConnectionSelectField } from './cloud-connection/CloudConnectionSelectField' import { McpServerSelectField } from './mcp-server/McpServerSelectField' import { ScmConnectionWorkbenchSelect } from './scm-connection/ScmConnectionWorkbenchSelect' @@ -41,6 +44,7 @@ import { isConfigurableWorkbenchToolType, scmTypeForWorkbenchTool, TOOL_TYPE_TO_CATEGORIES, + workbenchToolSupportsApproval, } from './workbenchToolsUtils' import { Link } from 'react-router-dom' @@ -130,6 +134,7 @@ export type WorkbenchToolFormState = Omit< | 'cloudConnectionId' | 'mcpServerId' | 'scmConnectionId' + | 'approval' | 'readBindings' | 'writeBindings' >, @@ -139,12 +144,17 @@ export type WorkbenchToolFormState = Omit< writeBindings: PolicyBindingFragment[] } -type WorkbenchToolFormStep = 'configuration' | 'access-policy' +type WorkbenchToolFormStep = 'configuration' | 'access-policy' | 'approvals' -const TOOL_FORM_STEPS = [ - { key: 'configuration', label: 'Configuration' }, - { key: 'access-policy', label: 'Access policy' }, -] as const +const BASE_TOOL_FORM_STEPS = [ + { key: 'configuration' as const, label: 'Configuration' }, + { key: 'access-policy' as const, label: 'Access policy' }, +] + +const APPROVALS_TOOL_FORM_STEP = { + key: 'approvals' as const, + label: 'Approvals', +} export function WorkbenchToolForm({ type, @@ -166,6 +176,14 @@ export function WorkbenchToolForm({ const [deleteOpen, setDeleteOpen] = useState(false) const [currentStep, setCurrentStep] = useState('configuration') + const supportsApproval = workbenchToolSupportsApproval(type) + const toolFormSteps = useMemo( + () => + supportsApproval + ? [...BASE_TOOL_FORM_STEPS, APPROVALS_TOOL_FORM_STEP] + : BASE_TOOL_FORM_STEPS, + [supportsApproval] + ) const { state, update, hasUpdates } = useUpdateState({ name: tool?.name ?? '', categories: tool?.categories ?? TOOL_TYPE_TO_CATEGORIES[type], @@ -173,6 +191,7 @@ export function WorkbenchToolForm({ cloudConnectionId: tool?.cloudConnection?.id, mcpServerId: tool?.mcpServer?.id, scmConnectionId: tool?.scmConnection?.id, + approval: tool?.approval ?? false, readBindings: tool?.readBindings?.filter(isNonNullable) ?? [], writeBindings: tool?.writeBindings?.filter(isNonNullable) ?? [], }) @@ -228,6 +247,8 @@ export function WorkbenchToolForm({ !!state.configuration.azureFunction.description.trim() && !!state.configuration.azureFunction.inputSchema)) const allowSave = hasUpdates && configurationStepComplete + const isLastStep = + currentStep === toolFormSteps[toolFormSteps.length - 1]?.key return ( - {TOOL_FORM_STEPS.map(({ key, label }) => ( + {toolFormSteps.map(({ key, label }) => ( )} - ) : ( + ) : currentStep === 'access-policy' ? ( + ) : ( + )} {tool?.id ? ( @@ -379,18 +405,24 @@ export function WorkbenchToolForm({ disabled={ currentStep === 'configuration' ? !configurationStepComplete - : !allowSave + : isLastStep + ? !allowSave + : false } - loading={currentStep === 'access-policy' && mutationLoading} + loading={isLastStep && mutationLoading} onClick={() => { if (currentStep === 'configuration') { setCurrentStep('access-policy') return } + if (currentStep === 'access-policy' && supportsApproval) { + setCurrentStep('approvals') + return + } onSave(state) }} > - {currentStep === 'configuration' ? 'Next' : 'Save'} + {isLastStep ? 'Save' : 'Next'} @@ -405,6 +437,35 @@ export function WorkbenchToolForm({ ) } +function ToolApprovalsStep({ + approval, + update, +}: { + approval: boolean + update: (next: Partial) => void +}) { + return ( + + Supervision + + } + label="Requires approval" + hint="Pause for your sign-off before this action executes." + checked={approval} + onChange={(checked) => update({ approval: checked })} + /> + + ) +} + function ToolAccessPolicyStep({ readBindings, writeBindings, diff --git a/assets/src/components/workbenches/tools/workbenchToolsUtils.tsx b/assets/src/components/workbenches/tools/workbenchToolsUtils.tsx index f8758ad02a..287b63d068 100644 --- a/assets/src/components/workbenches/tools/workbenchToolsUtils.tsx +++ b/assets/src/components/workbenches/tools/workbenchToolsUtils.tsx @@ -152,6 +152,10 @@ export const cloudFunctionProviderForWorkbenchTool = ( type: WorkbenchToolType ): Provider | undefined => CLOUD_FUNCTION_TOOL_TO_PROVIDER[type] +export const workbenchToolSupportsApproval = ( + type: WorkbenchToolType +): boolean => !!cloudFunctionProviderForWorkbenchTool(type) + const WORKBENCH_TOOL_LABELS: Record< WorkbenchToolType | `${WorkbenchToolType.Cloud}:${Provider}`, string diff --git a/assets/src/components/workbenches/workbench/WorkbenchPromptModeSelector/WorkbenchPromptSupervisionOption.tsx b/assets/src/components/workbenches/workbench/WorkbenchPromptModeSelector/WorkbenchPromptSupervisionOption.tsx index 0edb3b6c4a..6de89d0a4e 100644 --- a/assets/src/components/workbenches/workbench/WorkbenchPromptModeSelector/WorkbenchPromptSupervisionOption.tsx +++ b/assets/src/components/workbenches/workbench/WorkbenchPromptModeSelector/WorkbenchPromptSupervisionOption.tsx @@ -25,7 +25,7 @@ export function WorkbenchPromptSupervisionOption({ css={{ display: 'flex', alignItems: 'flex-start', - gap: theme.spacing.xxsmall, + gap: theme.spacing.xsmall, width: '100%', padding: theme.spacing.xxsmall, border: 'none', diff --git a/assets/src/generated/graphql.ts b/assets/src/generated/graphql.ts index 239d8d957f..1066d4de77 100644 --- a/assets/src/generated/graphql.ts +++ b/assets/src/generated/graphql.ts @@ -19605,7 +19605,7 @@ export type FlowWorkbenchesQueryVariables = Exact<{ }>; -export type FlowWorkbenchesQuery = { __typename?: 'RootQueryType', flow?: { __typename?: 'Flow', id: string, workbenches?: Array<{ __typename?: 'Workbench', id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null } | null> | null } | null }; +export type FlowWorkbenchesQuery = { __typename?: 'RootQueryType', flow?: { __typename?: 'Flow', id: string, workbenches?: Array<{ __typename?: 'Workbench', id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null } | null> | null } | null }; export type FlowWorkbenchJobsQueryVariables = Exact<{ id: Scalars['ID']['input']; @@ -21058,7 +21058,7 @@ export type ClusterVulnerabilityAggregateQueryVariables = Exact<{ export type ClusterVulnerabilityAggregateQuery = { __typename?: 'RootQueryType', clusterVulnerabilityAggregate?: Array<{ __typename?: 'ClusterVulnAggregate', count: number, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, project?: { __typename?: 'Project', name: string } | null } | null } | null> | null }; -export type WorkbenchTinyFragment = { __typename?: 'Workbench', id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null }; +export type WorkbenchTinyFragment = { __typename?: 'Workbench', id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null }; export type IssueWebhookFragment = { __typename?: 'IssueWebhook', id: string, name: string, provider: IssueWebhookProvider, url: string, insertedAt?: string | null, updatedAt?: string | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null }; @@ -21066,11 +21066,11 @@ export type IssueWebhookTinyFragment = { __typename?: 'IssueWebhook', id: string export type WorkbenchWebhookTinyFragment = { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null }; -export type WorkbenchFragment = { __typename?: 'Workbench', systemPrompt?: string | null, id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, repository?: { __typename?: 'GitRepository', id: string } | null, configuration?: { __typename?: 'WorkbenchConfiguration', infrastructure?: { __typename?: 'WorkbenchInfrastructure', services?: boolean | null, stacks?: boolean | null, kubernetes?: boolean | null, podLogs?: boolean | null, vulnerabilities?: boolean | null } | null, observability?: { __typename?: 'WorkbenchObservability', logs?: boolean | null, metrics?: boolean | null } | null, coding?: { __typename?: 'WorkbenchCoding', mode?: AgentRunMode | null, repositories?: Array | null, enableBabysitting?: boolean | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, skills?: { __typename?: 'WorkbenchSkills', files?: Array | null, ref?: { __typename?: 'GitRef', ref: string, folder: string } | null } | null, workbenchSkills?: { __typename?: 'WorkbenchSkillConnection', edges?: Array<{ __typename?: 'WorkbenchSkillEdge', node?: { __typename?: 'WorkbenchSkill', id: string, name?: string | null, description?: string | null, contents?: string | null, subagents?: Array | null } | null } | null> | null } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, botUser?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null }; +export type WorkbenchFragment = { __typename?: 'Workbench', systemPrompt?: string | null, id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, repository?: { __typename?: 'GitRepository', id: string } | null, configuration?: { __typename?: 'WorkbenchConfiguration', infrastructure?: { __typename?: 'WorkbenchInfrastructure', services?: boolean | null, stacks?: boolean | null, kubernetes?: boolean | null, podLogs?: boolean | null, vulnerabilities?: boolean | null } | null, observability?: { __typename?: 'WorkbenchObservability', logs?: boolean | null, metrics?: boolean | null } | null, coding?: { __typename?: 'WorkbenchCoding', mode?: AgentRunMode | null, repositories?: Array | null, enableBabysitting?: boolean | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, skills?: { __typename?: 'WorkbenchSkills', files?: Array | null, ref?: { __typename?: 'GitRef', ref: string, folder: string } | null } | null, workbenchSkills?: { __typename?: 'WorkbenchSkillConnection', edges?: Array<{ __typename?: 'WorkbenchSkillEdge', node?: { __typename?: 'WorkbenchSkill', id: string, name?: string | null, description?: string | null, contents?: string | null, subagents?: Array | null } | null } | null> | null } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, botUser?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null }; -export type WorkbenchToolTinyFragment = { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null }; +export type WorkbenchToolTinyFragment = { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null }; -export type WorkbenchToolFragment = { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null }; +export type WorkbenchToolFragment = { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null }; export type WorkbenchJobThoughtFragment = { __typename?: 'WorkbenchJobThought', id: string, content?: string | null, toolName?: string | null, toolArgs?: Record | null, activity?: { __typename?: 'WorkbenchJobActivity', id: string } | null, attributes?: { __typename?: 'WorkbenchJobThoughtAttributes', logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, metrics?: Array<{ __typename?: 'WorkbenchJobActivityMetric', timestamp?: string | null, name?: string | null, value?: number | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null } | null }; @@ -21122,7 +21122,7 @@ export type WorkbenchJobUsageFragment = { __typename?: 'WorkbenchJobUsage', cach export type WorkbenchJobTinyFragment = { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, status: WorkbenchJobStatus, error?: string | null, insertedAt?: string | null, usage?: { __typename?: 'WorkbenchJobUsage', totalCost?: number | null, totalTokens?: number | null } | null, modes?: { __typename?: 'WorkbenchJobModes', budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, user?: { __typename?: 'User', id: string, name: string, profile?: string | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string } | null, alert?: { __typename?: 'Alert', id: string, state: AlertState, url?: string | null } | null, issue?: { __typename?: 'Issue', id: string, status: IssueStatus, url: string } | null, pullRequests?: Array<{ __typename?: 'PullRequest', patch?: string | null, id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, result?: { __typename?: 'WorkbenchJobResult', id: string, conclusion?: string | null } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null } | null, chatbotMessage?: { __typename?: 'ChatbotMessage', id: string, channel?: string | null, message?: string | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType } | null } | null }; -export type WorkbenchJobFragment = { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, status: WorkbenchJobStatus, error?: string | null, insertedAt?: string | null, usage?: { __typename?: 'WorkbenchJobUsage', cachedTokens?: number | null, inputCost?: number | null, inputTokens?: number | null, outputCost?: number | null, outputTokens?: number | null, reasoningTokens?: number | null, totalCost?: number | null, totalTokens?: number | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null } | null, alert?: { __typename?: 'Alert', id: string, state: AlertState, url?: string | null, title?: string | null, message?: string | null, type: ObservabilityWebhookType, severity: AlertSeverity, fingerprint?: string | null, annotations?: Record | null, updatedAt?: string | null, tags?: Array<{ __typename?: 'Tag', id: string, name: string, value: string } | null> | null, insight?: { __typename?: 'AiInsight', id: string, text?: string | null, summary?: string | null, sha?: string | null, freshness?: InsightFreshness | null, updatedAt?: string | null, insertedAt?: string | null, error?: Array<{ __typename?: 'ServiceError', message: string, source: string } | null> | null, evidence?: Array<{ __typename?: 'AiInsightEvidence', id: string, type: EvidenceType, insertedAt?: string | null, updatedAt?: string | null, logs?: { __typename?: 'LogsEvidence', clusterId?: string | null, serviceId?: string | null, line?: string | null, lines?: Array<{ __typename?: 'LogLine', log?: string | null, timestamp?: string | null, facets?: Array<{ __typename?: 'LogFacet', key: string, value?: string | null } | null> | null } | null> | null } | null, pullRequest?: { __typename?: 'PullRequestEvidence', contents?: string | null, filename?: string | null, patch?: string | null, repo?: string | null, sha?: string | null, title?: string | null, url?: string | null } | null, alert?: { __typename?: 'AlertEvidence', alertId?: string | null, title?: string | null, resolution?: string | null } | null, knowledge?: { __typename?: 'KnowledgeEvidence', name?: string | null, observations?: Array | null, type?: string | null } | null } | null> | null, cluster?: { __typename?: 'Cluster', id: string, name: string, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', cloud: string } | null } | null, clusterInsightComponent?: { __typename?: 'ClusterInsightComponent', id: string, name: string } | null, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null, serviceComponent?: { __typename?: 'ServiceComponent', id: string, name: string, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null } | null, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string, type: StackType } | null, stackRun?: { __typename?: 'StackRun', id: string, message?: string | null, type: StackType, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string } | null } | null, alert?: { __typename?: 'Alert', id: string, title?: string | null, message?: string | null } | null } | null, resolution?: { __typename?: 'AlertResolution', resolution: string } | null, workbench?: { __typename?: 'Workbench', id: string } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus } | null } | null, issue?: { __typename?: 'Issue', id: string, title: string, externalId: string, insertedAt?: string | null, status: IssueStatus, url: string, provider: IssueWebhookProvider } | null, result?: { __typename?: 'WorkbenchJobResult', id: string, conclusion?: string | null, workingTheory?: string | null, criticism?: string | null, topology?: string | null, todos?: Array<{ __typename?: 'WorkbenchJobResultTodo', name?: string | null, description?: string | null, done?: boolean | null } | null> | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null, feedback?: { __typename?: 'WorkbenchEvalFeedback', summary?: string | null, prompt?: string | null, result?: string | null, logic?: string | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, user?: { __typename?: 'User', id: string, name: string, profile?: string | null } | null, pullRequests?: Array<{ __typename?: 'PullRequest', patch?: string | null, id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, chatbotMessage?: { __typename?: 'ChatbotMessage', id: string, channel?: string | null, message?: string | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType } | null } | null }; +export type WorkbenchJobFragment = { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, status: WorkbenchJobStatus, error?: string | null, insertedAt?: string | null, usage?: { __typename?: 'WorkbenchJobUsage', cachedTokens?: number | null, inputCost?: number | null, inputTokens?: number | null, outputCost?: number | null, outputTokens?: number | null, reasoningTokens?: number | null, totalCost?: number | null, totalTokens?: number | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null } | null, alert?: { __typename?: 'Alert', id: string, state: AlertState, url?: string | null, title?: string | null, message?: string | null, type: ObservabilityWebhookType, severity: AlertSeverity, fingerprint?: string | null, annotations?: Record | null, updatedAt?: string | null, tags?: Array<{ __typename?: 'Tag', id: string, name: string, value: string } | null> | null, insight?: { __typename?: 'AiInsight', id: string, text?: string | null, summary?: string | null, sha?: string | null, freshness?: InsightFreshness | null, updatedAt?: string | null, insertedAt?: string | null, error?: Array<{ __typename?: 'ServiceError', message: string, source: string } | null> | null, evidence?: Array<{ __typename?: 'AiInsightEvidence', id: string, type: EvidenceType, insertedAt?: string | null, updatedAt?: string | null, logs?: { __typename?: 'LogsEvidence', clusterId?: string | null, serviceId?: string | null, line?: string | null, lines?: Array<{ __typename?: 'LogLine', log?: string | null, timestamp?: string | null, facets?: Array<{ __typename?: 'LogFacet', key: string, value?: string | null } | null> | null } | null> | null } | null, pullRequest?: { __typename?: 'PullRequestEvidence', contents?: string | null, filename?: string | null, patch?: string | null, repo?: string | null, sha?: string | null, title?: string | null, url?: string | null } | null, alert?: { __typename?: 'AlertEvidence', alertId?: string | null, title?: string | null, resolution?: string | null } | null, knowledge?: { __typename?: 'KnowledgeEvidence', name?: string | null, observations?: Array | null, type?: string | null } | null } | null> | null, cluster?: { __typename?: 'Cluster', id: string, name: string, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', cloud: string } | null } | null, clusterInsightComponent?: { __typename?: 'ClusterInsightComponent', id: string, name: string } | null, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null, serviceComponent?: { __typename?: 'ServiceComponent', id: string, name: string, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null } | null, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string, type: StackType } | null, stackRun?: { __typename?: 'StackRun', id: string, message?: string | null, type: StackType, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string } | null } | null, alert?: { __typename?: 'Alert', id: string, title?: string | null, message?: string | null } | null } | null, resolution?: { __typename?: 'AlertResolution', resolution: string } | null, workbench?: { __typename?: 'Workbench', id: string } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus } | null } | null, issue?: { __typename?: 'Issue', id: string, title: string, externalId: string, insertedAt?: string | null, status: IssueStatus, url: string, provider: IssueWebhookProvider } | null, result?: { __typename?: 'WorkbenchJobResult', id: string, conclusion?: string | null, workingTheory?: string | null, criticism?: string | null, topology?: string | null, todos?: Array<{ __typename?: 'WorkbenchJobResultTodo', name?: string | null, description?: string | null, done?: boolean | null } | null> | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null, feedback?: { __typename?: 'WorkbenchEvalFeedback', summary?: string | null, prompt?: string | null, result?: string | null, logic?: string | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, user?: { __typename?: 'User', id: string, name: string, profile?: string | null } | null, pullRequests?: Array<{ __typename?: 'PullRequest', patch?: string | null, id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, chatbotMessage?: { __typename?: 'ChatbotMessage', id: string, channel?: string | null, message?: string | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType } | null } | null }; export type WorkbenchEvalResultRowFragment = { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null, feedback?: { __typename?: 'WorkbenchEvalFeedback', summary?: string | null, prompt?: string | null, result?: string | null, logic?: string | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, insertedAt?: string | null, startedAt?: string | null, completedAt?: string | null } | null }; @@ -21133,7 +21133,7 @@ export type WorkbenchesQueryVariables = Exact<{ }>; -export type WorkbenchesQuery = { __typename?: 'RootQueryType', workbenches?: { __typename?: 'WorkbenchConnection', pageInfo: { __typename?: 'PageInfo', hasNextPage: boolean, endCursor?: string | null, hasPreviousPage: boolean, startCursor?: string | null }, edges?: Array<{ __typename?: 'WorkbenchEdge', node?: { __typename?: 'Workbench', id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null } | null } | null> | null } | null }; +export type WorkbenchesQuery = { __typename?: 'RootQueryType', workbenches?: { __typename?: 'WorkbenchConnection', pageInfo: { __typename?: 'PageInfo', hasNextPage: boolean, endCursor?: string | null, hasPreviousPage: boolean, startCursor?: string | null }, edges?: Array<{ __typename?: 'WorkbenchEdge', node?: { __typename?: 'Workbench', id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null } | null } | null> | null } | null }; export type WorkbenchDashboardQueryVariables = Exact<{ [key: string]: never; }>; @@ -21182,7 +21182,7 @@ export type WorkbenchQueryVariables = Exact<{ }>; -export type WorkbenchQuery = { __typename?: 'RootQueryType', workbench?: { __typename?: 'Workbench', systemPrompt?: string | null, id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, repository?: { __typename?: 'GitRepository', id: string } | null, configuration?: { __typename?: 'WorkbenchConfiguration', infrastructure?: { __typename?: 'WorkbenchInfrastructure', services?: boolean | null, stacks?: boolean | null, kubernetes?: boolean | null, podLogs?: boolean | null, vulnerabilities?: boolean | null } | null, observability?: { __typename?: 'WorkbenchObservability', logs?: boolean | null, metrics?: boolean | null } | null, coding?: { __typename?: 'WorkbenchCoding', mode?: AgentRunMode | null, repositories?: Array | null, enableBabysitting?: boolean | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, skills?: { __typename?: 'WorkbenchSkills', files?: Array | null, ref?: { __typename?: 'GitRef', ref: string, folder: string } | null } | null, workbenchSkills?: { __typename?: 'WorkbenchSkillConnection', edges?: Array<{ __typename?: 'WorkbenchSkillEdge', node?: { __typename?: 'WorkbenchSkill', id: string, name?: string | null, description?: string | null, contents?: string | null, subagents?: Array | null } | null } | null> | null } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, botUser?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null } | null }; +export type WorkbenchQuery = { __typename?: 'RootQueryType', workbench?: { __typename?: 'Workbench', systemPrompt?: string | null, id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, repository?: { __typename?: 'GitRepository', id: string } | null, configuration?: { __typename?: 'WorkbenchConfiguration', infrastructure?: { __typename?: 'WorkbenchInfrastructure', services?: boolean | null, stacks?: boolean | null, kubernetes?: boolean | null, podLogs?: boolean | null, vulnerabilities?: boolean | null } | null, observability?: { __typename?: 'WorkbenchObservability', logs?: boolean | null, metrics?: boolean | null } | null, coding?: { __typename?: 'WorkbenchCoding', mode?: AgentRunMode | null, repositories?: Array | null, enableBabysitting?: boolean | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, skills?: { __typename?: 'WorkbenchSkills', files?: Array | null, ref?: { __typename?: 'GitRef', ref: string, folder: string } | null } | null, workbenchSkills?: { __typename?: 'WorkbenchSkillConnection', edges?: Array<{ __typename?: 'WorkbenchSkillEdge', node?: { __typename?: 'WorkbenchSkill', id: string, name?: string | null, description?: string | null, contents?: string | null, subagents?: Array | null } | null } | null> | null } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, botUser?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null } | null }; export type WorkbenchAccessibleUserFragment = { __typename?: 'User', id: string, name: string, email: string, profile?: string | null }; @@ -21373,14 +21373,14 @@ export type WorkbenchTriggersSummaryQueryVariables = Exact<{ }>; -export type WorkbenchTriggersSummaryQuery = { __typename?: 'RootQueryType', workbench?: { __typename?: 'Workbench', id: string, name: string, description?: string | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, crons?: { __typename?: 'WorkbenchCronConnection', edges?: Array<{ __typename?: 'WorkbenchCronEdge', node?: { __typename?: 'WorkbenchCron', id: string, crontab?: string | null, prompt?: string | null, nextRunAt?: string | null } | null } | null> | null } | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, prompt?: string | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, name: string, type: ObservabilityWebhookType, url: string } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, name: string, provider: IssueWebhookProvider, url: string, insertedAt?: string | null, updatedAt?: string | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null } | null } | null } | null> | null } | null, chatbots?: { __typename?: 'WorkbenchChatbotConnection', edges?: Array<{ __typename?: 'WorkbenchChatbotEdge', node?: { __typename?: 'WorkbenchChatbot', id: string, channel: string, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType, configuration: { __typename?: 'ChatProviderConnectionConfiguration', slack?: { __typename?: 'SlackConnectionConfiguration', botId?: string | null } | null, teams?: { __typename?: 'TeamsConnectionConfiguration', clientId?: string | null, tenantId?: string | null } | null }, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null } | null } | null } | null> | null } | null } | null }; +export type WorkbenchTriggersSummaryQuery = { __typename?: 'RootQueryType', workbench?: { __typename?: 'Workbench', id: string, name: string, description?: string | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, crons?: { __typename?: 'WorkbenchCronConnection', edges?: Array<{ __typename?: 'WorkbenchCronEdge', node?: { __typename?: 'WorkbenchCron', id: string, crontab?: string | null, prompt?: string | null, nextRunAt?: string | null } | null } | null> | null } | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, prompt?: string | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, name: string, type: ObservabilityWebhookType, url: string } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, name: string, provider: IssueWebhookProvider, url: string, insertedAt?: string | null, updatedAt?: string | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null } | null } | null } | null> | null } | null, chatbots?: { __typename?: 'WorkbenchChatbotConnection', edges?: Array<{ __typename?: 'WorkbenchChatbotEdge', node?: { __typename?: 'WorkbenchChatbot', id: string, channel: string, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType, configuration: { __typename?: 'ChatProviderConnectionConfiguration', slack?: { __typename?: 'SlackConnectionConfiguration', botId?: string | null } | null, teams?: { __typename?: 'TeamsConnectionConfiguration', clientId?: string | null, tenantId?: string | null } | null }, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null } | null } | null } | null> | null } | null } | null }; export type WorkbenchJobQueryVariables = Exact<{ id: Scalars['ID']['input']; }>; -export type WorkbenchJobQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, status: WorkbenchJobStatus, error?: string | null, insertedAt?: string | null, usage?: { __typename?: 'WorkbenchJobUsage', cachedTokens?: number | null, inputCost?: number | null, inputTokens?: number | null, outputCost?: number | null, outputTokens?: number | null, reasoningTokens?: number | null, totalCost?: number | null, totalTokens?: number | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null } | null, alert?: { __typename?: 'Alert', id: string, state: AlertState, url?: string | null, title?: string | null, message?: string | null, type: ObservabilityWebhookType, severity: AlertSeverity, fingerprint?: string | null, annotations?: Record | null, updatedAt?: string | null, tags?: Array<{ __typename?: 'Tag', id: string, name: string, value: string } | null> | null, insight?: { __typename?: 'AiInsight', id: string, text?: string | null, summary?: string | null, sha?: string | null, freshness?: InsightFreshness | null, updatedAt?: string | null, insertedAt?: string | null, error?: Array<{ __typename?: 'ServiceError', message: string, source: string } | null> | null, evidence?: Array<{ __typename?: 'AiInsightEvidence', id: string, type: EvidenceType, insertedAt?: string | null, updatedAt?: string | null, logs?: { __typename?: 'LogsEvidence', clusterId?: string | null, serviceId?: string | null, line?: string | null, lines?: Array<{ __typename?: 'LogLine', log?: string | null, timestamp?: string | null, facets?: Array<{ __typename?: 'LogFacet', key: string, value?: string | null } | null> | null } | null> | null } | null, pullRequest?: { __typename?: 'PullRequestEvidence', contents?: string | null, filename?: string | null, patch?: string | null, repo?: string | null, sha?: string | null, title?: string | null, url?: string | null } | null, alert?: { __typename?: 'AlertEvidence', alertId?: string | null, title?: string | null, resolution?: string | null } | null, knowledge?: { __typename?: 'KnowledgeEvidence', name?: string | null, observations?: Array | null, type?: string | null } | null } | null> | null, cluster?: { __typename?: 'Cluster', id: string, name: string, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', cloud: string } | null } | null, clusterInsightComponent?: { __typename?: 'ClusterInsightComponent', id: string, name: string } | null, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null, serviceComponent?: { __typename?: 'ServiceComponent', id: string, name: string, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null } | null, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string, type: StackType } | null, stackRun?: { __typename?: 'StackRun', id: string, message?: string | null, type: StackType, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string } | null } | null, alert?: { __typename?: 'Alert', id: string, title?: string | null, message?: string | null } | null } | null, resolution?: { __typename?: 'AlertResolution', resolution: string } | null, workbench?: { __typename?: 'Workbench', id: string } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus } | null } | null, issue?: { __typename?: 'Issue', id: string, title: string, externalId: string, insertedAt?: string | null, status: IssueStatus, url: string, provider: IssueWebhookProvider } | null, result?: { __typename?: 'WorkbenchJobResult', id: string, conclusion?: string | null, workingTheory?: string | null, criticism?: string | null, topology?: string | null, todos?: Array<{ __typename?: 'WorkbenchJobResultTodo', name?: string | null, description?: string | null, done?: boolean | null } | null> | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null, feedback?: { __typename?: 'WorkbenchEvalFeedback', summary?: string | null, prompt?: string | null, result?: string | null, logic?: string | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, user?: { __typename?: 'User', id: string, name: string, profile?: string | null } | null, pullRequests?: Array<{ __typename?: 'PullRequest', patch?: string | null, id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, chatbotMessage?: { __typename?: 'ChatbotMessage', id: string, channel?: string | null, message?: string | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType } | null } | null } | null }; +export type WorkbenchJobQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, status: WorkbenchJobStatus, error?: string | null, insertedAt?: string | null, usage?: { __typename?: 'WorkbenchJobUsage', cachedTokens?: number | null, inputCost?: number | null, inputTokens?: number | null, outputCost?: number | null, outputTokens?: number | null, reasoningTokens?: number | null, totalCost?: number | null, totalTokens?: number | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null } | null, alert?: { __typename?: 'Alert', id: string, state: AlertState, url?: string | null, title?: string | null, message?: string | null, type: ObservabilityWebhookType, severity: AlertSeverity, fingerprint?: string | null, annotations?: Record | null, updatedAt?: string | null, tags?: Array<{ __typename?: 'Tag', id: string, name: string, value: string } | null> | null, insight?: { __typename?: 'AiInsight', id: string, text?: string | null, summary?: string | null, sha?: string | null, freshness?: InsightFreshness | null, updatedAt?: string | null, insertedAt?: string | null, error?: Array<{ __typename?: 'ServiceError', message: string, source: string } | null> | null, evidence?: Array<{ __typename?: 'AiInsightEvidence', id: string, type: EvidenceType, insertedAt?: string | null, updatedAt?: string | null, logs?: { __typename?: 'LogsEvidence', clusterId?: string | null, serviceId?: string | null, line?: string | null, lines?: Array<{ __typename?: 'LogLine', log?: string | null, timestamp?: string | null, facets?: Array<{ __typename?: 'LogFacet', key: string, value?: string | null } | null> | null } | null> | null } | null, pullRequest?: { __typename?: 'PullRequestEvidence', contents?: string | null, filename?: string | null, patch?: string | null, repo?: string | null, sha?: string | null, title?: string | null, url?: string | null } | null, alert?: { __typename?: 'AlertEvidence', alertId?: string | null, title?: string | null, resolution?: string | null } | null, knowledge?: { __typename?: 'KnowledgeEvidence', name?: string | null, observations?: Array | null, type?: string | null } | null } | null> | null, cluster?: { __typename?: 'Cluster', id: string, name: string, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', cloud: string } | null } | null, clusterInsightComponent?: { __typename?: 'ClusterInsightComponent', id: string, name: string } | null, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null, serviceComponent?: { __typename?: 'ServiceComponent', id: string, name: string, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null } | null, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string, type: StackType } | null, stackRun?: { __typename?: 'StackRun', id: string, message?: string | null, type: StackType, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string } | null } | null, alert?: { __typename?: 'Alert', id: string, title?: string | null, message?: string | null } | null } | null, resolution?: { __typename?: 'AlertResolution', resolution: string } | null, workbench?: { __typename?: 'Workbench', id: string } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus } | null } | null, issue?: { __typename?: 'Issue', id: string, title: string, externalId: string, insertedAt?: string | null, status: IssueStatus, url: string, provider: IssueWebhookProvider } | null, result?: { __typename?: 'WorkbenchJobResult', id: string, conclusion?: string | null, workingTheory?: string | null, criticism?: string | null, topology?: string | null, todos?: Array<{ __typename?: 'WorkbenchJobResultTodo', name?: string | null, description?: string | null, done?: boolean | null } | null> | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null, feedback?: { __typename?: 'WorkbenchEvalFeedback', summary?: string | null, prompt?: string | null, result?: string | null, logic?: string | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, user?: { __typename?: 'User', id: string, name: string, profile?: string | null } | null, pullRequests?: Array<{ __typename?: 'PullRequest', patch?: string | null, id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, chatbotMessage?: { __typename?: 'ChatbotMessage', id: string, channel?: string | null, message?: string | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType } | null } | null } | null }; export type WorkbenchJobMetricsToolQueryVariables = Exact<{ id: Scalars['ID']['input']; @@ -21444,7 +21444,7 @@ export type WorkbenchToolsQueryVariables = Exact<{ }>; -export type WorkbenchToolsQuery = { __typename?: 'RootQueryType', workbenchTools?: { __typename?: 'WorkbenchToolConnection', pageInfo: { __typename?: 'PageInfo', hasNextPage: boolean, endCursor?: string | null, hasPreviousPage: boolean, startCursor?: string | null }, edges?: Array<{ __typename?: 'WorkbenchToolEdge', node?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null } | null> | null } | null }; +export type WorkbenchToolsQuery = { __typename?: 'RootQueryType', workbenchTools?: { __typename?: 'WorkbenchToolConnection', pageInfo: { __typename?: 'PageInfo', hasNextPage: boolean, endCursor?: string | null, hasPreviousPage: boolean, startCursor?: string | null }, edges?: Array<{ __typename?: 'WorkbenchToolEdge', node?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null } | null> | null } | null }; export type WorkbenchToolQueryVariables = Exact<{ id?: InputMaybe; @@ -21452,14 +21452,14 @@ export type WorkbenchToolQueryVariables = Exact<{ }>; -export type WorkbenchToolQuery = { __typename?: 'RootQueryType', workbenchTool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null }; +export type WorkbenchToolQuery = { __typename?: 'RootQueryType', workbenchTool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null }; export type CreateWorkbenchMutationVariables = Exact<{ attributes: WorkbenchAttributes; }>; -export type CreateWorkbenchMutation = { __typename?: 'RootMutationType', createWorkbench?: { __typename?: 'Workbench', systemPrompt?: string | null, id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, repository?: { __typename?: 'GitRepository', id: string } | null, configuration?: { __typename?: 'WorkbenchConfiguration', infrastructure?: { __typename?: 'WorkbenchInfrastructure', services?: boolean | null, stacks?: boolean | null, kubernetes?: boolean | null, podLogs?: boolean | null, vulnerabilities?: boolean | null } | null, observability?: { __typename?: 'WorkbenchObservability', logs?: boolean | null, metrics?: boolean | null } | null, coding?: { __typename?: 'WorkbenchCoding', mode?: AgentRunMode | null, repositories?: Array | null, enableBabysitting?: boolean | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, skills?: { __typename?: 'WorkbenchSkills', files?: Array | null, ref?: { __typename?: 'GitRef', ref: string, folder: string } | null } | null, workbenchSkills?: { __typename?: 'WorkbenchSkillConnection', edges?: Array<{ __typename?: 'WorkbenchSkillEdge', node?: { __typename?: 'WorkbenchSkill', id: string, name?: string | null, description?: string | null, contents?: string | null, subagents?: Array | null } | null } | null> | null } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, botUser?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null } | null }; +export type CreateWorkbenchMutation = { __typename?: 'RootMutationType', createWorkbench?: { __typename?: 'Workbench', systemPrompt?: string | null, id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, repository?: { __typename?: 'GitRepository', id: string } | null, configuration?: { __typename?: 'WorkbenchConfiguration', infrastructure?: { __typename?: 'WorkbenchInfrastructure', services?: boolean | null, stacks?: boolean | null, kubernetes?: boolean | null, podLogs?: boolean | null, vulnerabilities?: boolean | null } | null, observability?: { __typename?: 'WorkbenchObservability', logs?: boolean | null, metrics?: boolean | null } | null, coding?: { __typename?: 'WorkbenchCoding', mode?: AgentRunMode | null, repositories?: Array | null, enableBabysitting?: boolean | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, skills?: { __typename?: 'WorkbenchSkills', files?: Array | null, ref?: { __typename?: 'GitRef', ref: string, folder: string } | null } | null, workbenchSkills?: { __typename?: 'WorkbenchSkillConnection', edges?: Array<{ __typename?: 'WorkbenchSkillEdge', node?: { __typename?: 'WorkbenchSkill', id: string, name?: string | null, description?: string | null, contents?: string | null, subagents?: Array | null } | null } | null> | null } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, botUser?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null } | null }; export type UpdateWorkbenchMutationVariables = Exact<{ id: Scalars['ID']['input']; @@ -21467,7 +21467,7 @@ export type UpdateWorkbenchMutationVariables = Exact<{ }>; -export type UpdateWorkbenchMutation = { __typename?: 'RootMutationType', updateWorkbench?: { __typename?: 'Workbench', systemPrompt?: string | null, id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, repository?: { __typename?: 'GitRepository', id: string } | null, configuration?: { __typename?: 'WorkbenchConfiguration', infrastructure?: { __typename?: 'WorkbenchInfrastructure', services?: boolean | null, stacks?: boolean | null, kubernetes?: boolean | null, podLogs?: boolean | null, vulnerabilities?: boolean | null } | null, observability?: { __typename?: 'WorkbenchObservability', logs?: boolean | null, metrics?: boolean | null } | null, coding?: { __typename?: 'WorkbenchCoding', mode?: AgentRunMode | null, repositories?: Array | null, enableBabysitting?: boolean | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, skills?: { __typename?: 'WorkbenchSkills', files?: Array | null, ref?: { __typename?: 'GitRef', ref: string, folder: string } | null } | null, workbenchSkills?: { __typename?: 'WorkbenchSkillConnection', edges?: Array<{ __typename?: 'WorkbenchSkillEdge', node?: { __typename?: 'WorkbenchSkill', id: string, name?: string | null, description?: string | null, contents?: string | null, subagents?: Array | null } | null } | null> | null } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, botUser?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null } | null }; +export type UpdateWorkbenchMutation = { __typename?: 'RootMutationType', updateWorkbench?: { __typename?: 'Workbench', systemPrompt?: string | null, id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, repository?: { __typename?: 'GitRepository', id: string } | null, configuration?: { __typename?: 'WorkbenchConfiguration', infrastructure?: { __typename?: 'WorkbenchInfrastructure', services?: boolean | null, stacks?: boolean | null, kubernetes?: boolean | null, podLogs?: boolean | null, vulnerabilities?: boolean | null } | null, observability?: { __typename?: 'WorkbenchObservability', logs?: boolean | null, metrics?: boolean | null } | null, coding?: { __typename?: 'WorkbenchCoding', mode?: AgentRunMode | null, repositories?: Array | null, enableBabysitting?: boolean | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, skills?: { __typename?: 'WorkbenchSkills', files?: Array | null, ref?: { __typename?: 'GitRef', ref: string, folder: string } | null } | null, workbenchSkills?: { __typename?: 'WorkbenchSkillConnection', edges?: Array<{ __typename?: 'WorkbenchSkillEdge', node?: { __typename?: 'WorkbenchSkill', id: string, name?: string | null, description?: string | null, contents?: string | null, subagents?: Array | null } | null } | null> | null } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, botUser?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null } | null }; export type CreateWorkbenchEvalMutationVariables = Exact<{ workbenchId: Scalars['ID']['input']; @@ -21498,7 +21498,7 @@ export type WorkbenchEvalSkillMutationVariables = Exact<{ }>; -export type WorkbenchEvalSkillMutation = { __typename?: 'RootMutationType', workbenchEvalSkill?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, status: WorkbenchJobStatus, error?: string | null, insertedAt?: string | null, usage?: { __typename?: 'WorkbenchJobUsage', cachedTokens?: number | null, inputCost?: number | null, inputTokens?: number | null, outputCost?: number | null, outputTokens?: number | null, reasoningTokens?: number | null, totalCost?: number | null, totalTokens?: number | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null } | null, alert?: { __typename?: 'Alert', id: string, state: AlertState, url?: string | null, title?: string | null, message?: string | null, type: ObservabilityWebhookType, severity: AlertSeverity, fingerprint?: string | null, annotations?: Record | null, updatedAt?: string | null, tags?: Array<{ __typename?: 'Tag', id: string, name: string, value: string } | null> | null, insight?: { __typename?: 'AiInsight', id: string, text?: string | null, summary?: string | null, sha?: string | null, freshness?: InsightFreshness | null, updatedAt?: string | null, insertedAt?: string | null, error?: Array<{ __typename?: 'ServiceError', message: string, source: string } | null> | null, evidence?: Array<{ __typename?: 'AiInsightEvidence', id: string, type: EvidenceType, insertedAt?: string | null, updatedAt?: string | null, logs?: { __typename?: 'LogsEvidence', clusterId?: string | null, serviceId?: string | null, line?: string | null, lines?: Array<{ __typename?: 'LogLine', log?: string | null, timestamp?: string | null, facets?: Array<{ __typename?: 'LogFacet', key: string, value?: string | null } | null> | null } | null> | null } | null, pullRequest?: { __typename?: 'PullRequestEvidence', contents?: string | null, filename?: string | null, patch?: string | null, repo?: string | null, sha?: string | null, title?: string | null, url?: string | null } | null, alert?: { __typename?: 'AlertEvidence', alertId?: string | null, title?: string | null, resolution?: string | null } | null, knowledge?: { __typename?: 'KnowledgeEvidence', name?: string | null, observations?: Array | null, type?: string | null } | null } | null> | null, cluster?: { __typename?: 'Cluster', id: string, name: string, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', cloud: string } | null } | null, clusterInsightComponent?: { __typename?: 'ClusterInsightComponent', id: string, name: string } | null, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null, serviceComponent?: { __typename?: 'ServiceComponent', id: string, name: string, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null } | null, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string, type: StackType } | null, stackRun?: { __typename?: 'StackRun', id: string, message?: string | null, type: StackType, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string } | null } | null, alert?: { __typename?: 'Alert', id: string, title?: string | null, message?: string | null } | null } | null, resolution?: { __typename?: 'AlertResolution', resolution: string } | null, workbench?: { __typename?: 'Workbench', id: string } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus } | null } | null, issue?: { __typename?: 'Issue', id: string, title: string, externalId: string, insertedAt?: string | null, status: IssueStatus, url: string, provider: IssueWebhookProvider } | null, result?: { __typename?: 'WorkbenchJobResult', id: string, conclusion?: string | null, workingTheory?: string | null, criticism?: string | null, topology?: string | null, todos?: Array<{ __typename?: 'WorkbenchJobResultTodo', name?: string | null, description?: string | null, done?: boolean | null } | null> | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null, feedback?: { __typename?: 'WorkbenchEvalFeedback', summary?: string | null, prompt?: string | null, result?: string | null, logic?: string | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, user?: { __typename?: 'User', id: string, name: string, profile?: string | null } | null, pullRequests?: Array<{ __typename?: 'PullRequest', patch?: string | null, id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, chatbotMessage?: { __typename?: 'ChatbotMessage', id: string, channel?: string | null, message?: string | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType } | null } | null } | null }; +export type WorkbenchEvalSkillMutation = { __typename?: 'RootMutationType', workbenchEvalSkill?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, status: WorkbenchJobStatus, error?: string | null, insertedAt?: string | null, usage?: { __typename?: 'WorkbenchJobUsage', cachedTokens?: number | null, inputCost?: number | null, inputTokens?: number | null, outputCost?: number | null, outputTokens?: number | null, reasoningTokens?: number | null, totalCost?: number | null, totalTokens?: number | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null } | null, alert?: { __typename?: 'Alert', id: string, state: AlertState, url?: string | null, title?: string | null, message?: string | null, type: ObservabilityWebhookType, severity: AlertSeverity, fingerprint?: string | null, annotations?: Record | null, updatedAt?: string | null, tags?: Array<{ __typename?: 'Tag', id: string, name: string, value: string } | null> | null, insight?: { __typename?: 'AiInsight', id: string, text?: string | null, summary?: string | null, sha?: string | null, freshness?: InsightFreshness | null, updatedAt?: string | null, insertedAt?: string | null, error?: Array<{ __typename?: 'ServiceError', message: string, source: string } | null> | null, evidence?: Array<{ __typename?: 'AiInsightEvidence', id: string, type: EvidenceType, insertedAt?: string | null, updatedAt?: string | null, logs?: { __typename?: 'LogsEvidence', clusterId?: string | null, serviceId?: string | null, line?: string | null, lines?: Array<{ __typename?: 'LogLine', log?: string | null, timestamp?: string | null, facets?: Array<{ __typename?: 'LogFacet', key: string, value?: string | null } | null> | null } | null> | null } | null, pullRequest?: { __typename?: 'PullRequestEvidence', contents?: string | null, filename?: string | null, patch?: string | null, repo?: string | null, sha?: string | null, title?: string | null, url?: string | null } | null, alert?: { __typename?: 'AlertEvidence', alertId?: string | null, title?: string | null, resolution?: string | null } | null, knowledge?: { __typename?: 'KnowledgeEvidence', name?: string | null, observations?: Array | null, type?: string | null } | null } | null> | null, cluster?: { __typename?: 'Cluster', id: string, name: string, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', cloud: string } | null } | null, clusterInsightComponent?: { __typename?: 'ClusterInsightComponent', id: string, name: string } | null, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null, serviceComponent?: { __typename?: 'ServiceComponent', id: string, name: string, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null } | null, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string, type: StackType } | null, stackRun?: { __typename?: 'StackRun', id: string, message?: string | null, type: StackType, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string } | null } | null, alert?: { __typename?: 'Alert', id: string, title?: string | null, message?: string | null } | null } | null, resolution?: { __typename?: 'AlertResolution', resolution: string } | null, workbench?: { __typename?: 'Workbench', id: string } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus } | null } | null, issue?: { __typename?: 'Issue', id: string, title: string, externalId: string, insertedAt?: string | null, status: IssueStatus, url: string, provider: IssueWebhookProvider } | null, result?: { __typename?: 'WorkbenchJobResult', id: string, conclusion?: string | null, workingTheory?: string | null, criticism?: string | null, topology?: string | null, todos?: Array<{ __typename?: 'WorkbenchJobResultTodo', name?: string | null, description?: string | null, done?: boolean | null } | null> | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null, feedback?: { __typename?: 'WorkbenchEvalFeedback', summary?: string | null, prompt?: string | null, result?: string | null, logic?: string | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, user?: { __typename?: 'User', id: string, name: string, profile?: string | null } | null, pullRequests?: Array<{ __typename?: 'PullRequest', patch?: string | null, id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, chatbotMessage?: { __typename?: 'ChatbotMessage', id: string, channel?: string | null, message?: string | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType } | null } | null } | null }; export type DeleteWorkbenchMutationVariables = Exact<{ id: Scalars['ID']['input']; @@ -21512,7 +21512,7 @@ export type CreateWorkbenchToolMutationVariables = Exact<{ }>; -export type CreateWorkbenchToolMutation = { __typename?: 'RootMutationType', createWorkbenchTool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null }; +export type CreateWorkbenchToolMutation = { __typename?: 'RootMutationType', createWorkbenchTool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null }; export type UpdateWorkbenchToolMutationVariables = Exact<{ id: Scalars['ID']['input']; @@ -21520,7 +21520,7 @@ export type UpdateWorkbenchToolMutationVariables = Exact<{ }>; -export type UpdateWorkbenchToolMutation = { __typename?: 'RootMutationType', updateWorkbenchTool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null }; +export type UpdateWorkbenchToolMutation = { __typename?: 'RootMutationType', updateWorkbenchTool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null }; export type DeleteWorkbenchToolMutationVariables = Exact<{ id: Scalars['ID']['input']; @@ -21535,7 +21535,7 @@ export type CreateWorkbenchJobMutationVariables = Exact<{ }>; -export type CreateWorkbenchJobMutation = { __typename?: 'RootMutationType', createWorkbenchJob?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, status: WorkbenchJobStatus, error?: string | null, insertedAt?: string | null, usage?: { __typename?: 'WorkbenchJobUsage', cachedTokens?: number | null, inputCost?: number | null, inputTokens?: number | null, outputCost?: number | null, outputTokens?: number | null, reasoningTokens?: number | null, totalCost?: number | null, totalTokens?: number | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null } | null, alert?: { __typename?: 'Alert', id: string, state: AlertState, url?: string | null, title?: string | null, message?: string | null, type: ObservabilityWebhookType, severity: AlertSeverity, fingerprint?: string | null, annotations?: Record | null, updatedAt?: string | null, tags?: Array<{ __typename?: 'Tag', id: string, name: string, value: string } | null> | null, insight?: { __typename?: 'AiInsight', id: string, text?: string | null, summary?: string | null, sha?: string | null, freshness?: InsightFreshness | null, updatedAt?: string | null, insertedAt?: string | null, error?: Array<{ __typename?: 'ServiceError', message: string, source: string } | null> | null, evidence?: Array<{ __typename?: 'AiInsightEvidence', id: string, type: EvidenceType, insertedAt?: string | null, updatedAt?: string | null, logs?: { __typename?: 'LogsEvidence', clusterId?: string | null, serviceId?: string | null, line?: string | null, lines?: Array<{ __typename?: 'LogLine', log?: string | null, timestamp?: string | null, facets?: Array<{ __typename?: 'LogFacet', key: string, value?: string | null } | null> | null } | null> | null } | null, pullRequest?: { __typename?: 'PullRequestEvidence', contents?: string | null, filename?: string | null, patch?: string | null, repo?: string | null, sha?: string | null, title?: string | null, url?: string | null } | null, alert?: { __typename?: 'AlertEvidence', alertId?: string | null, title?: string | null, resolution?: string | null } | null, knowledge?: { __typename?: 'KnowledgeEvidence', name?: string | null, observations?: Array | null, type?: string | null } | null } | null> | null, cluster?: { __typename?: 'Cluster', id: string, name: string, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', cloud: string } | null } | null, clusterInsightComponent?: { __typename?: 'ClusterInsightComponent', id: string, name: string } | null, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null, serviceComponent?: { __typename?: 'ServiceComponent', id: string, name: string, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null } | null, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string, type: StackType } | null, stackRun?: { __typename?: 'StackRun', id: string, message?: string | null, type: StackType, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string } | null } | null, alert?: { __typename?: 'Alert', id: string, title?: string | null, message?: string | null } | null } | null, resolution?: { __typename?: 'AlertResolution', resolution: string } | null, workbench?: { __typename?: 'Workbench', id: string } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus } | null } | null, issue?: { __typename?: 'Issue', id: string, title: string, externalId: string, insertedAt?: string | null, status: IssueStatus, url: string, provider: IssueWebhookProvider } | null, result?: { __typename?: 'WorkbenchJobResult', id: string, conclusion?: string | null, workingTheory?: string | null, criticism?: string | null, topology?: string | null, todos?: Array<{ __typename?: 'WorkbenchJobResultTodo', name?: string | null, description?: string | null, done?: boolean | null } | null> | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null, feedback?: { __typename?: 'WorkbenchEvalFeedback', summary?: string | null, prompt?: string | null, result?: string | null, logic?: string | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, user?: { __typename?: 'User', id: string, name: string, profile?: string | null } | null, pullRequests?: Array<{ __typename?: 'PullRequest', patch?: string | null, id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, chatbotMessage?: { __typename?: 'ChatbotMessage', id: string, channel?: string | null, message?: string | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType } | null } | null } | null }; +export type CreateWorkbenchJobMutation = { __typename?: 'RootMutationType', createWorkbenchJob?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, status: WorkbenchJobStatus, error?: string | null, insertedAt?: string | null, usage?: { __typename?: 'WorkbenchJobUsage', cachedTokens?: number | null, inputCost?: number | null, inputTokens?: number | null, outputCost?: number | null, outputTokens?: number | null, reasoningTokens?: number | null, totalCost?: number | null, totalTokens?: number | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null } | null, alert?: { __typename?: 'Alert', id: string, state: AlertState, url?: string | null, title?: string | null, message?: string | null, type: ObservabilityWebhookType, severity: AlertSeverity, fingerprint?: string | null, annotations?: Record | null, updatedAt?: string | null, tags?: Array<{ __typename?: 'Tag', id: string, name: string, value: string } | null> | null, insight?: { __typename?: 'AiInsight', id: string, text?: string | null, summary?: string | null, sha?: string | null, freshness?: InsightFreshness | null, updatedAt?: string | null, insertedAt?: string | null, error?: Array<{ __typename?: 'ServiceError', message: string, source: string } | null> | null, evidence?: Array<{ __typename?: 'AiInsightEvidence', id: string, type: EvidenceType, insertedAt?: string | null, updatedAt?: string | null, logs?: { __typename?: 'LogsEvidence', clusterId?: string | null, serviceId?: string | null, line?: string | null, lines?: Array<{ __typename?: 'LogLine', log?: string | null, timestamp?: string | null, facets?: Array<{ __typename?: 'LogFacet', key: string, value?: string | null } | null> | null } | null> | null } | null, pullRequest?: { __typename?: 'PullRequestEvidence', contents?: string | null, filename?: string | null, patch?: string | null, repo?: string | null, sha?: string | null, title?: string | null, url?: string | null } | null, alert?: { __typename?: 'AlertEvidence', alertId?: string | null, title?: string | null, resolution?: string | null } | null, knowledge?: { __typename?: 'KnowledgeEvidence', name?: string | null, observations?: Array | null, type?: string | null } | null } | null> | null, cluster?: { __typename?: 'Cluster', id: string, name: string, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', cloud: string } | null } | null, clusterInsightComponent?: { __typename?: 'ClusterInsightComponent', id: string, name: string } | null, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null, serviceComponent?: { __typename?: 'ServiceComponent', id: string, name: string, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null } | null, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string, type: StackType } | null, stackRun?: { __typename?: 'StackRun', id: string, message?: string | null, type: StackType, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string } | null } | null, alert?: { __typename?: 'Alert', id: string, title?: string | null, message?: string | null } | null } | null, resolution?: { __typename?: 'AlertResolution', resolution: string } | null, workbench?: { __typename?: 'Workbench', id: string } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus } | null } | null, issue?: { __typename?: 'Issue', id: string, title: string, externalId: string, insertedAt?: string | null, status: IssueStatus, url: string, provider: IssueWebhookProvider } | null, result?: { __typename?: 'WorkbenchJobResult', id: string, conclusion?: string | null, workingTheory?: string | null, criticism?: string | null, topology?: string | null, todos?: Array<{ __typename?: 'WorkbenchJobResultTodo', name?: string | null, description?: string | null, done?: boolean | null } | null> | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null, feedback?: { __typename?: 'WorkbenchEvalFeedback', summary?: string | null, prompt?: string | null, result?: string | null, logic?: string | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, user?: { __typename?: 'User', id: string, name: string, profile?: string | null } | null, pullRequests?: Array<{ __typename?: 'PullRequest', patch?: string | null, id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, chatbotMessage?: { __typename?: 'ChatbotMessage', id: string, channel?: string | null, message?: string | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType } | null } | null } | null }; export type CancelWorkbenchJobMutationVariables = Exact<{ jobId: Scalars['ID']['input']; @@ -26650,6 +26650,7 @@ export const WorkbenchToolTinyFragmentDoc = gql` name tool categories + approval cloudConnection { ...CloudConnectionTiny } diff --git a/assets/src/generated/persisted-queries/client.json b/assets/src/generated/persisted-queries/client.json index 027e7a2f8c..5074101339 100644 --- a/assets/src/generated/persisted-queries/client.json +++ b/assets/src/generated/persisted-queries/client.json @@ -1092,10 +1092,10 @@ "name": "FlowServices", "body": "query FlowServices($id: ID!, $first: Int = 100, $after: String) {\n flow(id: $id) {\n id\n name\n services(first: $first, after: $after) {\n ...ServiceDeploymentsConnection\n __typename\n }\n __typename\n }\n}\n\nfragment ServiceDeploymentsConnection on ServiceDeploymentConnection {\n pageInfo {\n ...PageInfo\n __typename\n }\n edges {\n node {\n ...ServiceDeploymentsRow\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment PageInfo on PageInfo {\n hasNextPage\n endCursor\n hasPreviousPage\n startCursor\n __typename\n}\n\nfragment ServiceDeploymentsRow on ServiceDeployment {\n id\n name\n namespace\n protect\n promotion\n message\n git {\n ref\n folder\n __typename\n }\n helm {\n chart\n version\n url\n repository {\n namespace\n name\n __typename\n }\n __typename\n }\n cluster {\n ...ClusterMinimal\n __typename\n }\n helmRepository {\n spec {\n url\n __typename\n }\n status {\n ready\n message\n __typename\n }\n __typename\n }\n repository {\n id\n url\n httpsPath\n __typename\n }\n insertedAt\n updatedAt\n deletedAt\n componentStatus\n status\n errors {\n message\n source\n warning\n __typename\n }\n globalService {\n id\n name\n __typename\n }\n dryRun\n insight {\n ...AiInsightSummary\n __typename\n }\n __typename\n}\n\nfragment ClusterMinimal on Cluster {\n id\n name\n handle\n provider {\n name\n cloud\n __typename\n }\n distro\n __typename\n}\n\nfragment AiInsightSummary on AiInsight {\n id\n summary\n freshness\n insertedAt\n updatedAt\n ...AiInsightContext\n __typename\n}\n\nfragment AiInsightContext on AiInsight {\n evidence {\n ...AiInsightEvidence\n __typename\n }\n cluster {\n id\n name\n distro\n provider {\n cloud\n __typename\n }\n __typename\n }\n clusterInsightComponent {\n id\n name\n __typename\n }\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n serviceComponent {\n id\n name\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n __typename\n }\n stack {\n id\n name\n type\n __typename\n }\n stackRun {\n id\n message\n type\n stack {\n id\n name\n __typename\n }\n __typename\n }\n alert {\n id\n title\n message\n __typename\n }\n __typename\n}\n\nfragment AiInsightEvidence on AiInsightEvidence {\n id\n type\n logs {\n ...LogsEvidence\n __typename\n }\n pullRequest {\n ...PullRequestEvidence\n __typename\n }\n alert {\n ...AlertEvidence\n __typename\n }\n knowledge {\n ...KnowledgeEvidence\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment LogsEvidence on LogsEvidence {\n clusterId\n serviceId\n line\n lines {\n ...LogLine\n __typename\n }\n __typename\n}\n\nfragment LogLine on LogLine {\n facets {\n ...LogFacet\n __typename\n }\n log\n timestamp\n __typename\n}\n\nfragment LogFacet on LogFacet {\n key\n value\n __typename\n}\n\nfragment PullRequestEvidence on PullRequestEvidence {\n contents\n filename\n patch\n repo\n sha\n title\n url\n __typename\n}\n\nfragment AlertEvidence on AlertEvidence {\n alertId\n title\n resolution\n __typename\n}\n\nfragment KnowledgeEvidence on KnowledgeEvidence {\n name\n observations\n type\n __typename\n}" }, - "sha256:40c0a9d9ac15aee6093ab13f077dab703c05bf4e8a023e937ac2732ee6f13940": { + "sha256:362471fe8162055e450e7f1e46c2ba95b0e793aa4feb5ef3a3fd6fbac86f105b": { "type": "query", "name": "FlowWorkbenches", - "body": "query FlowWorkbenches($id: ID!) {\n flow(id: $id) {\n id\n workbenches {\n ...WorkbenchTiny\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchTiny on Workbench {\n id\n name\n description\n agentRuntime {\n id\n name\n type\n __typename\n }\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n webhooks(first: 50) {\n edges {\n node {\n ...WorkbenchWebhookTiny\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment WorkbenchWebhookTiny on WorkbenchWebhook {\n id\n name\n priority\n webhook {\n id\n type\n __typename\n }\n issueWebhook {\n ...IssueWebhookTiny\n __typename\n }\n __typename\n}\n\nfragment IssueWebhookTiny on IssueWebhook {\n id\n provider\n __typename\n}" + "body": "query FlowWorkbenches($id: ID!) {\n flow(id: $id) {\n id\n workbenches {\n ...WorkbenchTiny\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchTiny on Workbench {\n id\n name\n description\n agentRuntime {\n id\n name\n type\n __typename\n }\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n webhooks(first: 50) {\n edges {\n node {\n ...WorkbenchWebhookTiny\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment WorkbenchWebhookTiny on WorkbenchWebhook {\n id\n name\n priority\n webhook {\n id\n type\n __typename\n }\n issueWebhook {\n ...IssueWebhookTiny\n __typename\n }\n __typename\n}\n\nfragment IssueWebhookTiny on IssueWebhook {\n id\n provider\n __typename\n}" }, "sha256:39ce3dd47d43775ca9c488c51ab1253afea3668fb5610f37f704b671c1ea8931": { "type": "query", @@ -1837,10 +1837,10 @@ "name": "ClusterVulnerabilityAggregate", "body": "query ClusterVulnerabilityAggregate($grade: VulnReportGrade!) {\n clusterVulnerabilityAggregate(grade: $grade) {\n ...ClusterVulnAggregate\n __typename\n }\n}\n\nfragment ClusterVulnAggregate on ClusterVulnAggregate {\n cluster {\n id\n name\n handle\n project {\n name\n __typename\n }\n __typename\n }\n count\n __typename\n}" }, - "sha256:3f24a2ed2b62946cd9dbcbb9ca402b714b30c58b1879ee30adb3fa1019bfd248": { + "sha256:11852c9b332656a7dae1adb959bb5bb793eb46b23147a306f9b87c221bf46cda": { "type": "query", "name": "Workbenches", - "body": "query Workbenches($first: Int = 100, $after: String, $q: String) {\n workbenches(first: $first, after: $after, q: $q) {\n pageInfo {\n ...PageInfo\n __typename\n }\n edges {\n node {\n ...WorkbenchTiny\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment PageInfo on PageInfo {\n hasNextPage\n endCursor\n hasPreviousPage\n startCursor\n __typename\n}\n\nfragment WorkbenchTiny on Workbench {\n id\n name\n description\n agentRuntime {\n id\n name\n type\n __typename\n }\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n webhooks(first: 50) {\n edges {\n node {\n ...WorkbenchWebhookTiny\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment WorkbenchWebhookTiny on WorkbenchWebhook {\n id\n name\n priority\n webhook {\n id\n type\n __typename\n }\n issueWebhook {\n ...IssueWebhookTiny\n __typename\n }\n __typename\n}\n\nfragment IssueWebhookTiny on IssueWebhook {\n id\n provider\n __typename\n}" + "body": "query Workbenches($first: Int = 100, $after: String, $q: String) {\n workbenches(first: $first, after: $after, q: $q) {\n pageInfo {\n ...PageInfo\n __typename\n }\n edges {\n node {\n ...WorkbenchTiny\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment PageInfo on PageInfo {\n hasNextPage\n endCursor\n hasPreviousPage\n startCursor\n __typename\n}\n\nfragment WorkbenchTiny on Workbench {\n id\n name\n description\n agentRuntime {\n id\n name\n type\n __typename\n }\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n webhooks(first: 50) {\n edges {\n node {\n ...WorkbenchWebhookTiny\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment WorkbenchWebhookTiny on WorkbenchWebhook {\n id\n name\n priority\n webhook {\n id\n type\n __typename\n }\n issueWebhook {\n ...IssueWebhookTiny\n __typename\n }\n __typename\n}\n\nfragment IssueWebhookTiny on IssueWebhook {\n id\n provider\n __typename\n}" }, "sha256:e24312281ff0bdee07c7efba9eb661487ae11140e5956fb74b9c455c14c916d2": { "type": "query", @@ -1872,10 +1872,10 @@ "name": "WorkbenchesAlerts", "body": "query WorkbenchesAlerts($first: Int = 100, $after: String) {\n workbenchAlerts(first: $first, after: $after) {\n pageInfo {\n ...PageInfo\n __typename\n }\n edges {\n node {\n ...Alert\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment PageInfo on PageInfo {\n hasNextPage\n endCursor\n hasPreviousPage\n startCursor\n __typename\n}\n\nfragment Alert on Alert {\n id\n title\n message\n type\n severity\n state\n fingerprint\n url\n annotations\n tags {\n id\n name\n value\n __typename\n }\n insight {\n ...AiInsight\n __typename\n }\n resolution {\n ...AlertResolution\n __typename\n }\n workbench {\n id\n __typename\n }\n workbenchJob {\n id\n status\n __typename\n }\n updatedAt\n __typename\n}\n\nfragment AiInsight on AiInsight {\n id\n text\n summary\n sha\n freshness\n updatedAt\n insertedAt\n error {\n message\n source\n __typename\n }\n ...AiInsightContext\n __typename\n}\n\nfragment AiInsightContext on AiInsight {\n evidence {\n ...AiInsightEvidence\n __typename\n }\n cluster {\n id\n name\n distro\n provider {\n cloud\n __typename\n }\n __typename\n }\n clusterInsightComponent {\n id\n name\n __typename\n }\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n serviceComponent {\n id\n name\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n __typename\n }\n stack {\n id\n name\n type\n __typename\n }\n stackRun {\n id\n message\n type\n stack {\n id\n name\n __typename\n }\n __typename\n }\n alert {\n id\n title\n message\n __typename\n }\n __typename\n}\n\nfragment AiInsightEvidence on AiInsightEvidence {\n id\n type\n logs {\n ...LogsEvidence\n __typename\n }\n pullRequest {\n ...PullRequestEvidence\n __typename\n }\n alert {\n ...AlertEvidence\n __typename\n }\n knowledge {\n ...KnowledgeEvidence\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment LogsEvidence on LogsEvidence {\n clusterId\n serviceId\n line\n lines {\n ...LogLine\n __typename\n }\n __typename\n}\n\nfragment LogLine on LogLine {\n facets {\n ...LogFacet\n __typename\n }\n log\n timestamp\n __typename\n}\n\nfragment LogFacet on LogFacet {\n key\n value\n __typename\n}\n\nfragment PullRequestEvidence on PullRequestEvidence {\n contents\n filename\n patch\n repo\n sha\n title\n url\n __typename\n}\n\nfragment AlertEvidence on AlertEvidence {\n alertId\n title\n resolution\n __typename\n}\n\nfragment KnowledgeEvidence on KnowledgeEvidence {\n name\n observations\n type\n __typename\n}\n\nfragment ClusterMinimal on Cluster {\n id\n name\n handle\n provider {\n name\n cloud\n __typename\n }\n distro\n __typename\n}\n\nfragment AlertResolution on AlertResolution {\n resolution\n __typename\n}" }, - "sha256:08dee30e3633b9be935fa40aeb2d31c9b274f5a609a5539ef5ba4023bc49369e": { + "sha256:af6dfb4a2d2be34a94efaf7f2c56d7ca28350f1d145b5662d9adff10cc4bf47e": { "type": "query", "name": "Workbench", - "body": "query Workbench($id: ID, $name: String) {\n workbench(id: $id, name: $name) {\n ...Workbench\n __typename\n }\n}\n\nfragment Workbench on Workbench {\n ...WorkbenchTiny\n systemPrompt\n agentRuntime {\n id\n name\n __typename\n }\n repository {\n id\n __typename\n }\n configuration {\n infrastructure {\n services\n stacks\n kubernetes\n podLogs\n vulnerabilities\n __typename\n }\n observability {\n logs\n metrics\n __typename\n }\n coding {\n mode\n repositories\n enableBabysitting\n __typename\n }\n __typename\n }\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n skills {\n ref {\n ref\n folder\n __typename\n }\n files\n __typename\n }\n workbenchSkills(first: 500) {\n edges {\n node {\n id\n name\n description\n contents\n subagents\n __typename\n }\n __typename\n }\n __typename\n }\n tools {\n ...WorkbenchTool\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n botUser {\n id\n name\n email\n profile\n __typename\n }\n __typename\n}\n\nfragment WorkbenchTiny on Workbench {\n id\n name\n description\n agentRuntime {\n id\n name\n type\n __typename\n }\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n webhooks(first: 50) {\n edges {\n node {\n ...WorkbenchWebhookTiny\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment WorkbenchWebhookTiny on WorkbenchWebhook {\n id\n name\n priority\n webhook {\n id\n type\n __typename\n }\n issueWebhook {\n ...IssueWebhookTiny\n __typename\n }\n __typename\n}\n\nfragment IssueWebhookTiny on IssueWebhook {\n id\n provider\n __typename\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n lambda {\n lambdaArn\n description\n inputSchema\n __typename\n }\n cloudRun {\n identifier\n description\n inputSchema\n __typename\n }\n azureFunction {\n identifier\n description\n inputSchema\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" + "body": "query Workbench($id: ID, $name: String) {\n workbench(id: $id, name: $name) {\n ...Workbench\n __typename\n }\n}\n\nfragment Workbench on Workbench {\n ...WorkbenchTiny\n systemPrompt\n agentRuntime {\n id\n name\n __typename\n }\n repository {\n id\n __typename\n }\n configuration {\n infrastructure {\n services\n stacks\n kubernetes\n podLogs\n vulnerabilities\n __typename\n }\n observability {\n logs\n metrics\n __typename\n }\n coding {\n mode\n repositories\n enableBabysitting\n __typename\n }\n __typename\n }\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n skills {\n ref {\n ref\n folder\n __typename\n }\n files\n __typename\n }\n workbenchSkills(first: 500) {\n edges {\n node {\n id\n name\n description\n contents\n subagents\n __typename\n }\n __typename\n }\n __typename\n }\n tools {\n ...WorkbenchTool\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n botUser {\n id\n name\n email\n profile\n __typename\n }\n __typename\n}\n\nfragment WorkbenchTiny on Workbench {\n id\n name\n description\n agentRuntime {\n id\n name\n type\n __typename\n }\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n webhooks(first: 50) {\n edges {\n node {\n ...WorkbenchWebhookTiny\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment WorkbenchWebhookTiny on WorkbenchWebhook {\n id\n name\n priority\n webhook {\n id\n type\n __typename\n }\n issueWebhook {\n ...IssueWebhookTiny\n __typename\n }\n __typename\n}\n\nfragment IssueWebhookTiny on IssueWebhook {\n id\n provider\n __typename\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n lambda {\n lambdaArn\n description\n inputSchema\n __typename\n }\n cloudRun {\n identifier\n description\n inputSchema\n __typename\n }\n azureFunction {\n identifier\n description\n inputSchema\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" }, "sha256:6c3686838d1372371451664e8d6b593929eeca76e340065ed6dda5691e325b56": { "type": "query", @@ -1987,15 +1987,15 @@ "name": "IssueWebhook", "body": "query IssueWebhook($id: ID, $name: String) {\n issueWebhook(id: $id, name: $name) {\n ...IssueWebhook\n __typename\n }\n}\n\nfragment IssueWebhook on IssueWebhook {\n id\n name\n provider\n url\n insertedAt\n updatedAt\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" }, - "sha256:2b8a3634af7ae0514d12f4d9d2065aec6f664ce452dfd9d003e12a111ccdd7aa": { + "sha256:e28cb0f0171e0f4c626968d9d57ee04f259b4cbdae02291745cce0a28808cef6": { "type": "query", "name": "WorkbenchTriggersSummary", - "body": "query WorkbenchTriggersSummary($id: ID!) {\n workbench(id: $id) {\n id\n name\n description\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n crons(first: 30) {\n edges {\n node {\n id\n crontab\n prompt\n nextRunAt\n __typename\n }\n __typename\n }\n __typename\n }\n webhooks(first: 30) {\n edges {\n node {\n id\n name\n prompt\n webhook {\n id\n name\n type\n url\n __typename\n }\n issueWebhook {\n ...IssueWebhook\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n chatbots(first: 30) {\n edges {\n node {\n id\n channel\n chatConnection {\n ...ChatProviderConnection\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment IssueWebhook on IssueWebhook {\n id\n name\n provider\n url\n insertedAt\n updatedAt\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}\n\nfragment ChatProviderConnection on ChatProviderConnection {\n id\n name\n type\n configuration {\n slack {\n botId\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n __typename\n}" + "body": "query WorkbenchTriggersSummary($id: ID!) {\n workbench(id: $id) {\n id\n name\n description\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n crons(first: 30) {\n edges {\n node {\n id\n crontab\n prompt\n nextRunAt\n __typename\n }\n __typename\n }\n __typename\n }\n webhooks(first: 30) {\n edges {\n node {\n id\n name\n prompt\n webhook {\n id\n name\n type\n url\n __typename\n }\n issueWebhook {\n ...IssueWebhook\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n chatbots(first: 30) {\n edges {\n node {\n id\n channel\n chatConnection {\n ...ChatProviderConnection\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment IssueWebhook on IssueWebhook {\n id\n name\n provider\n url\n insertedAt\n updatedAt\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}\n\nfragment ChatProviderConnection on ChatProviderConnection {\n id\n name\n type\n configuration {\n slack {\n botId\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n __typename\n}" }, - "sha256:5c9c3d16b0c37f2f943daef94015608432c991d4452116908353c005b536521c": { + "sha256:df284a9a636d2fe8e1db56363fe285cef7b2fe0d0ad2a976a531102e64292efe": { "type": "query", "name": "WorkbenchJob", - "body": "query WorkbenchJob($id: ID!) {\n workbenchJob(id: $id) {\n ...WorkbenchJob\n __typename\n }\n}\n\nfragment WorkbenchJob on WorkbenchJob {\n ...WorkbenchJobTiny\n usage {\n ...WorkbenchJobUsage\n __typename\n }\n workbench {\n id\n name\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n __typename\n }\n alert {\n ...Alert\n __typename\n }\n issue {\n id\n title\n externalId\n insertedAt\n status\n url\n provider\n __typename\n }\n result {\n ...WorkbenchJobResult\n __typename\n }\n evalResult {\n feedback {\n summary\n prompt\n result\n logic\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobTiny on WorkbenchJob {\n id\n prompt\n status\n error\n insertedAt\n usage {\n ...WorkbenchJobUsageTiny\n __typename\n }\n modes {\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n user {\n id\n name\n profile\n __typename\n }\n workbench {\n id\n name\n __typename\n }\n alert {\n id\n state\n url\n __typename\n }\n issue {\n id\n status\n url\n __typename\n }\n pullRequests {\n ...WorkbenchJobPullRequest\n __typename\n }\n result {\n id\n conclusion\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n chatbotMessage {\n id\n channel\n message\n chatConnection {\n id\n name\n type\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobUsageTiny on WorkbenchJobUsage {\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchJobPullRequest on PullRequest {\n ...PullRequestBasic\n patch\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment WorkbenchJobUsage on WorkbenchJobUsage {\n cachedTokens\n inputCost\n inputTokens\n outputCost\n outputTokens\n reasoningTokens\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment Alert on Alert {\n id\n title\n message\n type\n severity\n state\n fingerprint\n url\n annotations\n tags {\n id\n name\n value\n __typename\n }\n insight {\n ...AiInsight\n __typename\n }\n resolution {\n ...AlertResolution\n __typename\n }\n workbench {\n id\n __typename\n }\n workbenchJob {\n id\n status\n __typename\n }\n updatedAt\n __typename\n}\n\nfragment AiInsight on AiInsight {\n id\n text\n summary\n sha\n freshness\n updatedAt\n insertedAt\n error {\n message\n source\n __typename\n }\n ...AiInsightContext\n __typename\n}\n\nfragment AiInsightContext on AiInsight {\n evidence {\n ...AiInsightEvidence\n __typename\n }\n cluster {\n id\n name\n distro\n provider {\n cloud\n __typename\n }\n __typename\n }\n clusterInsightComponent {\n id\n name\n __typename\n }\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n serviceComponent {\n id\n name\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n __typename\n }\n stack {\n id\n name\n type\n __typename\n }\n stackRun {\n id\n message\n type\n stack {\n id\n name\n __typename\n }\n __typename\n }\n alert {\n id\n title\n message\n __typename\n }\n __typename\n}\n\nfragment AiInsightEvidence on AiInsightEvidence {\n id\n type\n logs {\n ...LogsEvidence\n __typename\n }\n pullRequest {\n ...PullRequestEvidence\n __typename\n }\n alert {\n ...AlertEvidence\n __typename\n }\n knowledge {\n ...KnowledgeEvidence\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment LogsEvidence on LogsEvidence {\n clusterId\n serviceId\n line\n lines {\n ...LogLine\n __typename\n }\n __typename\n}\n\nfragment LogLine on LogLine {\n facets {\n ...LogFacet\n __typename\n }\n log\n timestamp\n __typename\n}\n\nfragment LogFacet on LogFacet {\n key\n value\n __typename\n}\n\nfragment PullRequestEvidence on PullRequestEvidence {\n contents\n filename\n patch\n repo\n sha\n title\n url\n __typename\n}\n\nfragment AlertEvidence on AlertEvidence {\n alertId\n title\n resolution\n __typename\n}\n\nfragment KnowledgeEvidence on KnowledgeEvidence {\n name\n observations\n type\n __typename\n}\n\nfragment ClusterMinimal on Cluster {\n id\n name\n handle\n provider {\n name\n cloud\n __typename\n }\n distro\n __typename\n}\n\nfragment AlertResolution on AlertResolution {\n resolution\n __typename\n}\n\nfragment WorkbenchJobResult on WorkbenchJobResult {\n id\n workingTheory\n criticism\n conclusion\n topology\n todos {\n ...WorkbenchJobResultTodo\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobResultTodo on WorkbenchJobResultTodo {\n name\n description\n done\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}" + "body": "query WorkbenchJob($id: ID!) {\n workbenchJob(id: $id) {\n ...WorkbenchJob\n __typename\n }\n}\n\nfragment WorkbenchJob on WorkbenchJob {\n ...WorkbenchJobTiny\n usage {\n ...WorkbenchJobUsage\n __typename\n }\n workbench {\n id\n name\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n __typename\n }\n alert {\n ...Alert\n __typename\n }\n issue {\n id\n title\n externalId\n insertedAt\n status\n url\n provider\n __typename\n }\n result {\n ...WorkbenchJobResult\n __typename\n }\n evalResult {\n feedback {\n summary\n prompt\n result\n logic\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobTiny on WorkbenchJob {\n id\n prompt\n status\n error\n insertedAt\n usage {\n ...WorkbenchJobUsageTiny\n __typename\n }\n modes {\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n user {\n id\n name\n profile\n __typename\n }\n workbench {\n id\n name\n __typename\n }\n alert {\n id\n state\n url\n __typename\n }\n issue {\n id\n status\n url\n __typename\n }\n pullRequests {\n ...WorkbenchJobPullRequest\n __typename\n }\n result {\n id\n conclusion\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n chatbotMessage {\n id\n channel\n message\n chatConnection {\n id\n name\n type\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobUsageTiny on WorkbenchJobUsage {\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchJobPullRequest on PullRequest {\n ...PullRequestBasic\n patch\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment WorkbenchJobUsage on WorkbenchJobUsage {\n cachedTokens\n inputCost\n inputTokens\n outputCost\n outputTokens\n reasoningTokens\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment Alert on Alert {\n id\n title\n message\n type\n severity\n state\n fingerprint\n url\n annotations\n tags {\n id\n name\n value\n __typename\n }\n insight {\n ...AiInsight\n __typename\n }\n resolution {\n ...AlertResolution\n __typename\n }\n workbench {\n id\n __typename\n }\n workbenchJob {\n id\n status\n __typename\n }\n updatedAt\n __typename\n}\n\nfragment AiInsight on AiInsight {\n id\n text\n summary\n sha\n freshness\n updatedAt\n insertedAt\n error {\n message\n source\n __typename\n }\n ...AiInsightContext\n __typename\n}\n\nfragment AiInsightContext on AiInsight {\n evidence {\n ...AiInsightEvidence\n __typename\n }\n cluster {\n id\n name\n distro\n provider {\n cloud\n __typename\n }\n __typename\n }\n clusterInsightComponent {\n id\n name\n __typename\n }\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n serviceComponent {\n id\n name\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n __typename\n }\n stack {\n id\n name\n type\n __typename\n }\n stackRun {\n id\n message\n type\n stack {\n id\n name\n __typename\n }\n __typename\n }\n alert {\n id\n title\n message\n __typename\n }\n __typename\n}\n\nfragment AiInsightEvidence on AiInsightEvidence {\n id\n type\n logs {\n ...LogsEvidence\n __typename\n }\n pullRequest {\n ...PullRequestEvidence\n __typename\n }\n alert {\n ...AlertEvidence\n __typename\n }\n knowledge {\n ...KnowledgeEvidence\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment LogsEvidence on LogsEvidence {\n clusterId\n serviceId\n line\n lines {\n ...LogLine\n __typename\n }\n __typename\n}\n\nfragment LogLine on LogLine {\n facets {\n ...LogFacet\n __typename\n }\n log\n timestamp\n __typename\n}\n\nfragment LogFacet on LogFacet {\n key\n value\n __typename\n}\n\nfragment PullRequestEvidence on PullRequestEvidence {\n contents\n filename\n patch\n repo\n sha\n title\n url\n __typename\n}\n\nfragment AlertEvidence on AlertEvidence {\n alertId\n title\n resolution\n __typename\n}\n\nfragment KnowledgeEvidence on KnowledgeEvidence {\n name\n observations\n type\n __typename\n}\n\nfragment ClusterMinimal on Cluster {\n id\n name\n handle\n provider {\n name\n cloud\n __typename\n }\n distro\n __typename\n}\n\nfragment AlertResolution on AlertResolution {\n resolution\n __typename\n}\n\nfragment WorkbenchJobResult on WorkbenchJobResult {\n id\n workingTheory\n criticism\n conclusion\n topology\n todos {\n ...WorkbenchJobResultTodo\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobResultTodo on WorkbenchJobResultTodo {\n name\n description\n done\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}" }, "sha256:7bbf8dc92479eaf54d2eae5bfcce896824482ef79c88df0fc1be12c64b4158ba": { "type": "query", @@ -2032,25 +2032,25 @@ "name": "WorkbenchJobActivity", "body": "query WorkbenchJobActivity($id: ID!) {\n workbenchJobActivity(id: $id) {\n ...WorkbenchJobActivityWithThoughts\n __typename\n }\n}\n\nfragment WorkbenchJobActivityWithThoughts on WorkbenchJobActivity {\n ...WorkbenchJobActivity\n thoughts {\n ...WorkbenchJobThought\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}\n\nfragment WorkbenchJobThought on WorkbenchJobThought {\n id\n content\n toolName\n toolArgs\n activity {\n id\n __typename\n }\n attributes {\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n metrics {\n ...WorkbenchJobActivityMetric\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityMetric on WorkbenchJobActivityMetric {\n timestamp\n name\n value\n labels\n __typename\n}" }, - "sha256:e0438f6d3a5650a71ec3df99e7e73f218aae5e457accc71195a075aa1d359ea0": { + "sha256:13ca0786672355db1deeaf3a29d7f2681d5d34cff26a07ae9509aff09dcebe94": { "type": "query", "name": "WorkbenchTools", - "body": "query WorkbenchTools($first: Int = 100, $after: String, $q: String) {\n workbenchTools(first: $first, after: $after, q: $q) {\n pageInfo {\n ...PageInfo\n __typename\n }\n edges {\n node {\n ...WorkbenchToolTiny\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment PageInfo on PageInfo {\n hasNextPage\n endCursor\n hasPreviousPage\n startCursor\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}" + "body": "query WorkbenchTools($first: Int = 100, $after: String, $q: String) {\n workbenchTools(first: $first, after: $after, q: $q) {\n pageInfo {\n ...PageInfo\n __typename\n }\n edges {\n node {\n ...WorkbenchToolTiny\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment PageInfo on PageInfo {\n hasNextPage\n endCursor\n hasPreviousPage\n startCursor\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}" }, - "sha256:c2007e345a13b0f55fd8a05b4586f94eb4140a6512a333014f11e94d75c8b383": { + "sha256:53680cf7767fe323b55d30ed33f9914ad4694bc246edb87d7e8d58093de140c0": { "type": "query", "name": "WorkbenchTool", - "body": "query WorkbenchTool($id: ID, $name: String) {\n workbenchTool(id: $id, name: $name) {\n ...WorkbenchTool\n __typename\n }\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n lambda {\n lambdaArn\n description\n inputSchema\n __typename\n }\n cloudRun {\n identifier\n description\n inputSchema\n __typename\n }\n azureFunction {\n identifier\n description\n inputSchema\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" + "body": "query WorkbenchTool($id: ID, $name: String) {\n workbenchTool(id: $id, name: $name) {\n ...WorkbenchTool\n __typename\n }\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n lambda {\n lambdaArn\n description\n inputSchema\n __typename\n }\n cloudRun {\n identifier\n description\n inputSchema\n __typename\n }\n azureFunction {\n identifier\n description\n inputSchema\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" }, - "sha256:2e158e96611723ba1a6fb26c0d244a581269b31c5316d105786ccc46341d5008": { + "sha256:b7e980904486638ac5e2a44b334bcc3c8b13b2ad5094623bc8af8896145bb20e": { "type": "mutation", "name": "CreateWorkbench", - "body": "mutation CreateWorkbench($attributes: WorkbenchAttributes!) {\n createWorkbench(attributes: $attributes) {\n ...Workbench\n __typename\n }\n}\n\nfragment Workbench on Workbench {\n ...WorkbenchTiny\n systemPrompt\n agentRuntime {\n id\n name\n __typename\n }\n repository {\n id\n __typename\n }\n configuration {\n infrastructure {\n services\n stacks\n kubernetes\n podLogs\n vulnerabilities\n __typename\n }\n observability {\n logs\n metrics\n __typename\n }\n coding {\n mode\n repositories\n enableBabysitting\n __typename\n }\n __typename\n }\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n skills {\n ref {\n ref\n folder\n __typename\n }\n files\n __typename\n }\n workbenchSkills(first: 500) {\n edges {\n node {\n id\n name\n description\n contents\n subagents\n __typename\n }\n __typename\n }\n __typename\n }\n tools {\n ...WorkbenchTool\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n botUser {\n id\n name\n email\n profile\n __typename\n }\n __typename\n}\n\nfragment WorkbenchTiny on Workbench {\n id\n name\n description\n agentRuntime {\n id\n name\n type\n __typename\n }\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n webhooks(first: 50) {\n edges {\n node {\n ...WorkbenchWebhookTiny\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment WorkbenchWebhookTiny on WorkbenchWebhook {\n id\n name\n priority\n webhook {\n id\n type\n __typename\n }\n issueWebhook {\n ...IssueWebhookTiny\n __typename\n }\n __typename\n}\n\nfragment IssueWebhookTiny on IssueWebhook {\n id\n provider\n __typename\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n lambda {\n lambdaArn\n description\n inputSchema\n __typename\n }\n cloudRun {\n identifier\n description\n inputSchema\n __typename\n }\n azureFunction {\n identifier\n description\n inputSchema\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" + "body": "mutation CreateWorkbench($attributes: WorkbenchAttributes!) {\n createWorkbench(attributes: $attributes) {\n ...Workbench\n __typename\n }\n}\n\nfragment Workbench on Workbench {\n ...WorkbenchTiny\n systemPrompt\n agentRuntime {\n id\n name\n __typename\n }\n repository {\n id\n __typename\n }\n configuration {\n infrastructure {\n services\n stacks\n kubernetes\n podLogs\n vulnerabilities\n __typename\n }\n observability {\n logs\n metrics\n __typename\n }\n coding {\n mode\n repositories\n enableBabysitting\n __typename\n }\n __typename\n }\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n skills {\n ref {\n ref\n folder\n __typename\n }\n files\n __typename\n }\n workbenchSkills(first: 500) {\n edges {\n node {\n id\n name\n description\n contents\n subagents\n __typename\n }\n __typename\n }\n __typename\n }\n tools {\n ...WorkbenchTool\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n botUser {\n id\n name\n email\n profile\n __typename\n }\n __typename\n}\n\nfragment WorkbenchTiny on Workbench {\n id\n name\n description\n agentRuntime {\n id\n name\n type\n __typename\n }\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n webhooks(first: 50) {\n edges {\n node {\n ...WorkbenchWebhookTiny\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment WorkbenchWebhookTiny on WorkbenchWebhook {\n id\n name\n priority\n webhook {\n id\n type\n __typename\n }\n issueWebhook {\n ...IssueWebhookTiny\n __typename\n }\n __typename\n}\n\nfragment IssueWebhookTiny on IssueWebhook {\n id\n provider\n __typename\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n lambda {\n lambdaArn\n description\n inputSchema\n __typename\n }\n cloudRun {\n identifier\n description\n inputSchema\n __typename\n }\n azureFunction {\n identifier\n description\n inputSchema\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" }, - "sha256:e08ce872015df2eeffabc216b83809b1f6015f2b7688206fc918c223d08181d0": { + "sha256:8432a3ff783bdbea428c6405695e55f7ef17555e23b5b96c87751eb6f9743aea": { "type": "mutation", "name": "UpdateWorkbench", - "body": "mutation UpdateWorkbench($id: ID!, $attributes: WorkbenchAttributes!) {\n updateWorkbench(id: $id, attributes: $attributes) {\n ...Workbench\n __typename\n }\n}\n\nfragment Workbench on Workbench {\n ...WorkbenchTiny\n systemPrompt\n agentRuntime {\n id\n name\n __typename\n }\n repository {\n id\n __typename\n }\n configuration {\n infrastructure {\n services\n stacks\n kubernetes\n podLogs\n vulnerabilities\n __typename\n }\n observability {\n logs\n metrics\n __typename\n }\n coding {\n mode\n repositories\n enableBabysitting\n __typename\n }\n __typename\n }\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n skills {\n ref {\n ref\n folder\n __typename\n }\n files\n __typename\n }\n workbenchSkills(first: 500) {\n edges {\n node {\n id\n name\n description\n contents\n subagents\n __typename\n }\n __typename\n }\n __typename\n }\n tools {\n ...WorkbenchTool\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n botUser {\n id\n name\n email\n profile\n __typename\n }\n __typename\n}\n\nfragment WorkbenchTiny on Workbench {\n id\n name\n description\n agentRuntime {\n id\n name\n type\n __typename\n }\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n webhooks(first: 50) {\n edges {\n node {\n ...WorkbenchWebhookTiny\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment WorkbenchWebhookTiny on WorkbenchWebhook {\n id\n name\n priority\n webhook {\n id\n type\n __typename\n }\n issueWebhook {\n ...IssueWebhookTiny\n __typename\n }\n __typename\n}\n\nfragment IssueWebhookTiny on IssueWebhook {\n id\n provider\n __typename\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n lambda {\n lambdaArn\n description\n inputSchema\n __typename\n }\n cloudRun {\n identifier\n description\n inputSchema\n __typename\n }\n azureFunction {\n identifier\n description\n inputSchema\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" + "body": "mutation UpdateWorkbench($id: ID!, $attributes: WorkbenchAttributes!) {\n updateWorkbench(id: $id, attributes: $attributes) {\n ...Workbench\n __typename\n }\n}\n\nfragment Workbench on Workbench {\n ...WorkbenchTiny\n systemPrompt\n agentRuntime {\n id\n name\n __typename\n }\n repository {\n id\n __typename\n }\n configuration {\n infrastructure {\n services\n stacks\n kubernetes\n podLogs\n vulnerabilities\n __typename\n }\n observability {\n logs\n metrics\n __typename\n }\n coding {\n mode\n repositories\n enableBabysitting\n __typename\n }\n __typename\n }\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n skills {\n ref {\n ref\n folder\n __typename\n }\n files\n __typename\n }\n workbenchSkills(first: 500) {\n edges {\n node {\n id\n name\n description\n contents\n subagents\n __typename\n }\n __typename\n }\n __typename\n }\n tools {\n ...WorkbenchTool\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n botUser {\n id\n name\n email\n profile\n __typename\n }\n __typename\n}\n\nfragment WorkbenchTiny on Workbench {\n id\n name\n description\n agentRuntime {\n id\n name\n type\n __typename\n }\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n webhooks(first: 50) {\n edges {\n node {\n ...WorkbenchWebhookTiny\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment WorkbenchWebhookTiny on WorkbenchWebhook {\n id\n name\n priority\n webhook {\n id\n type\n __typename\n }\n issueWebhook {\n ...IssueWebhookTiny\n __typename\n }\n __typename\n}\n\nfragment IssueWebhookTiny on IssueWebhook {\n id\n provider\n __typename\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n lambda {\n lambdaArn\n description\n inputSchema\n __typename\n }\n cloudRun {\n identifier\n description\n inputSchema\n __typename\n }\n azureFunction {\n identifier\n description\n inputSchema\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" }, "sha256:6bdd9295cb14dc91a238b8bb12b0b9b2781f2c6789194acd1364f8fe10bb3f6a": { "type": "mutation", @@ -2067,35 +2067,35 @@ "name": "DeleteWorkbenchEval", "body": "mutation DeleteWorkbenchEval($id: ID!) {\n deleteWorkbenchEval(id: $id) {\n id\n __typename\n }\n}" }, - "sha256:b04c99b8bd711fc0e914d4110ad35a9dd915ad13897d3185e9c09862b39e0716": { + "sha256:4bfdc8b6b2ee06f0bf0a902a490d01a0b1c80d55a68a598d1fe8506a530de385": { "type": "mutation", "name": "WorkbenchEvalSkill", - "body": "mutation WorkbenchEvalSkill($id: ID!, $prompt: String) {\n workbenchEvalSkill(id: $id, prompt: $prompt) {\n ...WorkbenchJob\n __typename\n }\n}\n\nfragment WorkbenchJob on WorkbenchJob {\n ...WorkbenchJobTiny\n usage {\n ...WorkbenchJobUsage\n __typename\n }\n workbench {\n id\n name\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n __typename\n }\n alert {\n ...Alert\n __typename\n }\n issue {\n id\n title\n externalId\n insertedAt\n status\n url\n provider\n __typename\n }\n result {\n ...WorkbenchJobResult\n __typename\n }\n evalResult {\n feedback {\n summary\n prompt\n result\n logic\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobTiny on WorkbenchJob {\n id\n prompt\n status\n error\n insertedAt\n usage {\n ...WorkbenchJobUsageTiny\n __typename\n }\n modes {\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n user {\n id\n name\n profile\n __typename\n }\n workbench {\n id\n name\n __typename\n }\n alert {\n id\n state\n url\n __typename\n }\n issue {\n id\n status\n url\n __typename\n }\n pullRequests {\n ...WorkbenchJobPullRequest\n __typename\n }\n result {\n id\n conclusion\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n chatbotMessage {\n id\n channel\n message\n chatConnection {\n id\n name\n type\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobUsageTiny on WorkbenchJobUsage {\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchJobPullRequest on PullRequest {\n ...PullRequestBasic\n patch\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment WorkbenchJobUsage on WorkbenchJobUsage {\n cachedTokens\n inputCost\n inputTokens\n outputCost\n outputTokens\n reasoningTokens\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment Alert on Alert {\n id\n title\n message\n type\n severity\n state\n fingerprint\n url\n annotations\n tags {\n id\n name\n value\n __typename\n }\n insight {\n ...AiInsight\n __typename\n }\n resolution {\n ...AlertResolution\n __typename\n }\n workbench {\n id\n __typename\n }\n workbenchJob {\n id\n status\n __typename\n }\n updatedAt\n __typename\n}\n\nfragment AiInsight on AiInsight {\n id\n text\n summary\n sha\n freshness\n updatedAt\n insertedAt\n error {\n message\n source\n __typename\n }\n ...AiInsightContext\n __typename\n}\n\nfragment AiInsightContext on AiInsight {\n evidence {\n ...AiInsightEvidence\n __typename\n }\n cluster {\n id\n name\n distro\n provider {\n cloud\n __typename\n }\n __typename\n }\n clusterInsightComponent {\n id\n name\n __typename\n }\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n serviceComponent {\n id\n name\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n __typename\n }\n stack {\n id\n name\n type\n __typename\n }\n stackRun {\n id\n message\n type\n stack {\n id\n name\n __typename\n }\n __typename\n }\n alert {\n id\n title\n message\n __typename\n }\n __typename\n}\n\nfragment AiInsightEvidence on AiInsightEvidence {\n id\n type\n logs {\n ...LogsEvidence\n __typename\n }\n pullRequest {\n ...PullRequestEvidence\n __typename\n }\n alert {\n ...AlertEvidence\n __typename\n }\n knowledge {\n ...KnowledgeEvidence\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment LogsEvidence on LogsEvidence {\n clusterId\n serviceId\n line\n lines {\n ...LogLine\n __typename\n }\n __typename\n}\n\nfragment LogLine on LogLine {\n facets {\n ...LogFacet\n __typename\n }\n log\n timestamp\n __typename\n}\n\nfragment LogFacet on LogFacet {\n key\n value\n __typename\n}\n\nfragment PullRequestEvidence on PullRequestEvidence {\n contents\n filename\n patch\n repo\n sha\n title\n url\n __typename\n}\n\nfragment AlertEvidence on AlertEvidence {\n alertId\n title\n resolution\n __typename\n}\n\nfragment KnowledgeEvidence on KnowledgeEvidence {\n name\n observations\n type\n __typename\n}\n\nfragment ClusterMinimal on Cluster {\n id\n name\n handle\n provider {\n name\n cloud\n __typename\n }\n distro\n __typename\n}\n\nfragment AlertResolution on AlertResolution {\n resolution\n __typename\n}\n\nfragment WorkbenchJobResult on WorkbenchJobResult {\n id\n workingTheory\n criticism\n conclusion\n topology\n todos {\n ...WorkbenchJobResultTodo\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobResultTodo on WorkbenchJobResultTodo {\n name\n description\n done\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}" + "body": "mutation WorkbenchEvalSkill($id: ID!, $prompt: String) {\n workbenchEvalSkill(id: $id, prompt: $prompt) {\n ...WorkbenchJob\n __typename\n }\n}\n\nfragment WorkbenchJob on WorkbenchJob {\n ...WorkbenchJobTiny\n usage {\n ...WorkbenchJobUsage\n __typename\n }\n workbench {\n id\n name\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n __typename\n }\n alert {\n ...Alert\n __typename\n }\n issue {\n id\n title\n externalId\n insertedAt\n status\n url\n provider\n __typename\n }\n result {\n ...WorkbenchJobResult\n __typename\n }\n evalResult {\n feedback {\n summary\n prompt\n result\n logic\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobTiny on WorkbenchJob {\n id\n prompt\n status\n error\n insertedAt\n usage {\n ...WorkbenchJobUsageTiny\n __typename\n }\n modes {\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n user {\n id\n name\n profile\n __typename\n }\n workbench {\n id\n name\n __typename\n }\n alert {\n id\n state\n url\n __typename\n }\n issue {\n id\n status\n url\n __typename\n }\n pullRequests {\n ...WorkbenchJobPullRequest\n __typename\n }\n result {\n id\n conclusion\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n chatbotMessage {\n id\n channel\n message\n chatConnection {\n id\n name\n type\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobUsageTiny on WorkbenchJobUsage {\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchJobPullRequest on PullRequest {\n ...PullRequestBasic\n patch\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment WorkbenchJobUsage on WorkbenchJobUsage {\n cachedTokens\n inputCost\n inputTokens\n outputCost\n outputTokens\n reasoningTokens\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment Alert on Alert {\n id\n title\n message\n type\n severity\n state\n fingerprint\n url\n annotations\n tags {\n id\n name\n value\n __typename\n }\n insight {\n ...AiInsight\n __typename\n }\n resolution {\n ...AlertResolution\n __typename\n }\n workbench {\n id\n __typename\n }\n workbenchJob {\n id\n status\n __typename\n }\n updatedAt\n __typename\n}\n\nfragment AiInsight on AiInsight {\n id\n text\n summary\n sha\n freshness\n updatedAt\n insertedAt\n error {\n message\n source\n __typename\n }\n ...AiInsightContext\n __typename\n}\n\nfragment AiInsightContext on AiInsight {\n evidence {\n ...AiInsightEvidence\n __typename\n }\n cluster {\n id\n name\n distro\n provider {\n cloud\n __typename\n }\n __typename\n }\n clusterInsightComponent {\n id\n name\n __typename\n }\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n serviceComponent {\n id\n name\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n __typename\n }\n stack {\n id\n name\n type\n __typename\n }\n stackRun {\n id\n message\n type\n stack {\n id\n name\n __typename\n }\n __typename\n }\n alert {\n id\n title\n message\n __typename\n }\n __typename\n}\n\nfragment AiInsightEvidence on AiInsightEvidence {\n id\n type\n logs {\n ...LogsEvidence\n __typename\n }\n pullRequest {\n ...PullRequestEvidence\n __typename\n }\n alert {\n ...AlertEvidence\n __typename\n }\n knowledge {\n ...KnowledgeEvidence\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment LogsEvidence on LogsEvidence {\n clusterId\n serviceId\n line\n lines {\n ...LogLine\n __typename\n }\n __typename\n}\n\nfragment LogLine on LogLine {\n facets {\n ...LogFacet\n __typename\n }\n log\n timestamp\n __typename\n}\n\nfragment LogFacet on LogFacet {\n key\n value\n __typename\n}\n\nfragment PullRequestEvidence on PullRequestEvidence {\n contents\n filename\n patch\n repo\n sha\n title\n url\n __typename\n}\n\nfragment AlertEvidence on AlertEvidence {\n alertId\n title\n resolution\n __typename\n}\n\nfragment KnowledgeEvidence on KnowledgeEvidence {\n name\n observations\n type\n __typename\n}\n\nfragment ClusterMinimal on Cluster {\n id\n name\n handle\n provider {\n name\n cloud\n __typename\n }\n distro\n __typename\n}\n\nfragment AlertResolution on AlertResolution {\n resolution\n __typename\n}\n\nfragment WorkbenchJobResult on WorkbenchJobResult {\n id\n workingTheory\n criticism\n conclusion\n topology\n todos {\n ...WorkbenchJobResultTodo\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobResultTodo on WorkbenchJobResultTodo {\n name\n description\n done\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}" }, "sha256:7b6b450c0f286e31340ab42bfb2ab3d7137c56ed0885c120769c51d006ac14e2": { "type": "mutation", "name": "DeleteWorkbench", "body": "mutation DeleteWorkbench($id: ID!) {\n deleteWorkbench(id: $id) {\n id\n __typename\n }\n}" }, - "sha256:947348f2cc36d68b0a39405af2ae6d932a605597eb02bc79d7ed9e8e076bd9bc": { + "sha256:80ab043927385b3aad0e630266cca291616e58e827f9e64ae569832bcb8be2ac": { "type": "mutation", "name": "CreateWorkbenchTool", - "body": "mutation CreateWorkbenchTool($attributes: WorkbenchToolAttributes!) {\n createWorkbenchTool(attributes: $attributes) {\n ...WorkbenchTool\n __typename\n }\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n lambda {\n lambdaArn\n description\n inputSchema\n __typename\n }\n cloudRun {\n identifier\n description\n inputSchema\n __typename\n }\n azureFunction {\n identifier\n description\n inputSchema\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" + "body": "mutation CreateWorkbenchTool($attributes: WorkbenchToolAttributes!) {\n createWorkbenchTool(attributes: $attributes) {\n ...WorkbenchTool\n __typename\n }\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n lambda {\n lambdaArn\n description\n inputSchema\n __typename\n }\n cloudRun {\n identifier\n description\n inputSchema\n __typename\n }\n azureFunction {\n identifier\n description\n inputSchema\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" }, - "sha256:5a7c216f30218bd9ba0be8885386641f99a0b7f839b18763394fdd3df3fbb0e0": { + "sha256:a172236ffe1b891da22ca7ccf0645567d5d78b0d8c501d46d2e915d30b9aa69e": { "type": "mutation", "name": "UpdateWorkbenchTool", - "body": "mutation UpdateWorkbenchTool($id: ID!, $attributes: WorkbenchToolAttributes!) {\n updateWorkbenchTool(id: $id, attributes: $attributes) {\n ...WorkbenchTool\n __typename\n }\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n lambda {\n lambdaArn\n description\n inputSchema\n __typename\n }\n cloudRun {\n identifier\n description\n inputSchema\n __typename\n }\n azureFunction {\n identifier\n description\n inputSchema\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" + "body": "mutation UpdateWorkbenchTool($id: ID!, $attributes: WorkbenchToolAttributes!) {\n updateWorkbenchTool(id: $id, attributes: $attributes) {\n ...WorkbenchTool\n __typename\n }\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n lambda {\n lambdaArn\n description\n inputSchema\n __typename\n }\n cloudRun {\n identifier\n description\n inputSchema\n __typename\n }\n azureFunction {\n identifier\n description\n inputSchema\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" }, "sha256:c48b92f91779f79e1feb98e23d681a30cc7bc2f045519d3998ba022a38a9b460": { "type": "mutation", "name": "DeleteWorkbenchTool", "body": "mutation DeleteWorkbenchTool($id: ID!) {\n deleteWorkbenchTool(id: $id) {\n id\n __typename\n }\n}" }, - "sha256:5cca232f23700b424eabcc3215d30a044c8b583ea6a8f7e2906802a44aacb5a0": { + "sha256:b52fdbc20a4db4115bc6b076065f99997b6674933286c2dc791a8fb7bf68253a": { "type": "mutation", "name": "CreateWorkbenchJob", - "body": "mutation CreateWorkbenchJob($workbenchId: ID!, $attributes: WorkbenchJobAttributes!) {\n createWorkbenchJob(workbenchId: $workbenchId, attributes: $attributes) {\n ...WorkbenchJob\n __typename\n }\n}\n\nfragment WorkbenchJob on WorkbenchJob {\n ...WorkbenchJobTiny\n usage {\n ...WorkbenchJobUsage\n __typename\n }\n workbench {\n id\n name\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n __typename\n }\n alert {\n ...Alert\n __typename\n }\n issue {\n id\n title\n externalId\n insertedAt\n status\n url\n provider\n __typename\n }\n result {\n ...WorkbenchJobResult\n __typename\n }\n evalResult {\n feedback {\n summary\n prompt\n result\n logic\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobTiny on WorkbenchJob {\n id\n prompt\n status\n error\n insertedAt\n usage {\n ...WorkbenchJobUsageTiny\n __typename\n }\n modes {\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n user {\n id\n name\n profile\n __typename\n }\n workbench {\n id\n name\n __typename\n }\n alert {\n id\n state\n url\n __typename\n }\n issue {\n id\n status\n url\n __typename\n }\n pullRequests {\n ...WorkbenchJobPullRequest\n __typename\n }\n result {\n id\n conclusion\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n chatbotMessage {\n id\n channel\n message\n chatConnection {\n id\n name\n type\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobUsageTiny on WorkbenchJobUsage {\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchJobPullRequest on PullRequest {\n ...PullRequestBasic\n patch\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment WorkbenchJobUsage on WorkbenchJobUsage {\n cachedTokens\n inputCost\n inputTokens\n outputCost\n outputTokens\n reasoningTokens\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment Alert on Alert {\n id\n title\n message\n type\n severity\n state\n fingerprint\n url\n annotations\n tags {\n id\n name\n value\n __typename\n }\n insight {\n ...AiInsight\n __typename\n }\n resolution {\n ...AlertResolution\n __typename\n }\n workbench {\n id\n __typename\n }\n workbenchJob {\n id\n status\n __typename\n }\n updatedAt\n __typename\n}\n\nfragment AiInsight on AiInsight {\n id\n text\n summary\n sha\n freshness\n updatedAt\n insertedAt\n error {\n message\n source\n __typename\n }\n ...AiInsightContext\n __typename\n}\n\nfragment AiInsightContext on AiInsight {\n evidence {\n ...AiInsightEvidence\n __typename\n }\n cluster {\n id\n name\n distro\n provider {\n cloud\n __typename\n }\n __typename\n }\n clusterInsightComponent {\n id\n name\n __typename\n }\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n serviceComponent {\n id\n name\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n __typename\n }\n stack {\n id\n name\n type\n __typename\n }\n stackRun {\n id\n message\n type\n stack {\n id\n name\n __typename\n }\n __typename\n }\n alert {\n id\n title\n message\n __typename\n }\n __typename\n}\n\nfragment AiInsightEvidence on AiInsightEvidence {\n id\n type\n logs {\n ...LogsEvidence\n __typename\n }\n pullRequest {\n ...PullRequestEvidence\n __typename\n }\n alert {\n ...AlertEvidence\n __typename\n }\n knowledge {\n ...KnowledgeEvidence\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment LogsEvidence on LogsEvidence {\n clusterId\n serviceId\n line\n lines {\n ...LogLine\n __typename\n }\n __typename\n}\n\nfragment LogLine on LogLine {\n facets {\n ...LogFacet\n __typename\n }\n log\n timestamp\n __typename\n}\n\nfragment LogFacet on LogFacet {\n key\n value\n __typename\n}\n\nfragment PullRequestEvidence on PullRequestEvidence {\n contents\n filename\n patch\n repo\n sha\n title\n url\n __typename\n}\n\nfragment AlertEvidence on AlertEvidence {\n alertId\n title\n resolution\n __typename\n}\n\nfragment KnowledgeEvidence on KnowledgeEvidence {\n name\n observations\n type\n __typename\n}\n\nfragment ClusterMinimal on Cluster {\n id\n name\n handle\n provider {\n name\n cloud\n __typename\n }\n distro\n __typename\n}\n\nfragment AlertResolution on AlertResolution {\n resolution\n __typename\n}\n\nfragment WorkbenchJobResult on WorkbenchJobResult {\n id\n workingTheory\n criticism\n conclusion\n topology\n todos {\n ...WorkbenchJobResultTodo\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobResultTodo on WorkbenchJobResultTodo {\n name\n description\n done\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}" + "body": "mutation CreateWorkbenchJob($workbenchId: ID!, $attributes: WorkbenchJobAttributes!) {\n createWorkbenchJob(workbenchId: $workbenchId, attributes: $attributes) {\n ...WorkbenchJob\n __typename\n }\n}\n\nfragment WorkbenchJob on WorkbenchJob {\n ...WorkbenchJobTiny\n usage {\n ...WorkbenchJobUsage\n __typename\n }\n workbench {\n id\n name\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n __typename\n }\n alert {\n ...Alert\n __typename\n }\n issue {\n id\n title\n externalId\n insertedAt\n status\n url\n provider\n __typename\n }\n result {\n ...WorkbenchJobResult\n __typename\n }\n evalResult {\n feedback {\n summary\n prompt\n result\n logic\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobTiny on WorkbenchJob {\n id\n prompt\n status\n error\n insertedAt\n usage {\n ...WorkbenchJobUsageTiny\n __typename\n }\n modes {\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n user {\n id\n name\n profile\n __typename\n }\n workbench {\n id\n name\n __typename\n }\n alert {\n id\n state\n url\n __typename\n }\n issue {\n id\n status\n url\n __typename\n }\n pullRequests {\n ...WorkbenchJobPullRequest\n __typename\n }\n result {\n id\n conclusion\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n chatbotMessage {\n id\n channel\n message\n chatConnection {\n id\n name\n type\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobUsageTiny on WorkbenchJobUsage {\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchJobPullRequest on PullRequest {\n ...PullRequestBasic\n patch\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment WorkbenchJobUsage on WorkbenchJobUsage {\n cachedTokens\n inputCost\n inputTokens\n outputCost\n outputTokens\n reasoningTokens\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment Alert on Alert {\n id\n title\n message\n type\n severity\n state\n fingerprint\n url\n annotations\n tags {\n id\n name\n value\n __typename\n }\n insight {\n ...AiInsight\n __typename\n }\n resolution {\n ...AlertResolution\n __typename\n }\n workbench {\n id\n __typename\n }\n workbenchJob {\n id\n status\n __typename\n }\n updatedAt\n __typename\n}\n\nfragment AiInsight on AiInsight {\n id\n text\n summary\n sha\n freshness\n updatedAt\n insertedAt\n error {\n message\n source\n __typename\n }\n ...AiInsightContext\n __typename\n}\n\nfragment AiInsightContext on AiInsight {\n evidence {\n ...AiInsightEvidence\n __typename\n }\n cluster {\n id\n name\n distro\n provider {\n cloud\n __typename\n }\n __typename\n }\n clusterInsightComponent {\n id\n name\n __typename\n }\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n serviceComponent {\n id\n name\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n __typename\n }\n stack {\n id\n name\n type\n __typename\n }\n stackRun {\n id\n message\n type\n stack {\n id\n name\n __typename\n }\n __typename\n }\n alert {\n id\n title\n message\n __typename\n }\n __typename\n}\n\nfragment AiInsightEvidence on AiInsightEvidence {\n id\n type\n logs {\n ...LogsEvidence\n __typename\n }\n pullRequest {\n ...PullRequestEvidence\n __typename\n }\n alert {\n ...AlertEvidence\n __typename\n }\n knowledge {\n ...KnowledgeEvidence\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment LogsEvidence on LogsEvidence {\n clusterId\n serviceId\n line\n lines {\n ...LogLine\n __typename\n }\n __typename\n}\n\nfragment LogLine on LogLine {\n facets {\n ...LogFacet\n __typename\n }\n log\n timestamp\n __typename\n}\n\nfragment LogFacet on LogFacet {\n key\n value\n __typename\n}\n\nfragment PullRequestEvidence on PullRequestEvidence {\n contents\n filename\n patch\n repo\n sha\n title\n url\n __typename\n}\n\nfragment AlertEvidence on AlertEvidence {\n alertId\n title\n resolution\n __typename\n}\n\nfragment KnowledgeEvidence on KnowledgeEvidence {\n name\n observations\n type\n __typename\n}\n\nfragment ClusterMinimal on Cluster {\n id\n name\n handle\n provider {\n name\n cloud\n __typename\n }\n distro\n __typename\n}\n\nfragment AlertResolution on AlertResolution {\n resolution\n __typename\n}\n\nfragment WorkbenchJobResult on WorkbenchJobResult {\n id\n workingTheory\n criticism\n conclusion\n topology\n todos {\n ...WorkbenchJobResultTodo\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobResultTodo on WorkbenchJobResultTodo {\n name\n description\n done\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}" }, "sha256:dd0eb022c0aaaa8c305761cc3b9a52731a3df2a825b3af5722f2ed293400db36": { "type": "mutation", diff --git a/assets/src/graph/workbench.graphql b/assets/src/graph/workbench.graphql index d67db66cce..a533cc2b54 100644 --- a/assets/src/graph/workbench.graphql +++ b/assets/src/graph/workbench.graphql @@ -135,6 +135,7 @@ fragment WorkbenchToolTiny on WorkbenchTool { name tool categories + approval cloudConnection { ...CloudConnectionTiny } From 4c6f71978cd2a71949f534502f674d93ef13289f Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Fri, 24 Jul 2026 15:15:08 +0200 Subject: [PATCH 05/50] add missing query --- assets/src/generated/graphql.ts | 121 ++++++++++++++++++ .../generated/persisted-queries/client.json | 5 + assets/src/graph/awaitingReview.graphql | 56 ++++++++ lib/console/graphql/deployments/workbench.ex | 12 ++ .../resolvers/deployments/workbench.ex | 19 +++ lib/console/schema/workbench_job_activity.ex | 7 + schema/schema.graphql | 19 +++ .../deployments/workbench_queries_test.exs | 34 +++++ 8 files changed, 273 insertions(+) diff --git a/assets/src/generated/graphql.ts b/assets/src/generated/graphql.ts index 1066d4de77..47d32c52cf 100644 --- a/assets/src/generated/graphql.ts +++ b/assets/src/generated/graphql.ts @@ -11043,6 +11043,7 @@ export type RootQueryType = { workbenchChatbot?: Maybe; workbenchIssues?: Maybe; workbenchJob?: Maybe; + workbenchJobActivities?: Maybe; workbenchJobActivity?: Maybe; /** Semantic search over vector-indexed workbench jobs */ workbenchJobSearch?: Maybe>>; @@ -12462,6 +12463,16 @@ export type RootQueryTypeWorkbenchJobArgs = { }; +export type RootQueryTypeWorkbenchJobActivitiesArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + status?: InputMaybe; + type?: InputMaybe; +}; + + export type RootQueryTypeWorkbenchJobActivityArgs = { id: Scalars['ID']['input']; }; @@ -16057,6 +16068,8 @@ export type WorkbenchJobActivityFunctionCall = { input?: Maybe; /** the function name to invoke */ name?: Maybe; + /** the workbench tool backing this function call */ + tool?: Maybe; /** the workbench tool id backing this function */ toolId?: Maybe; }; @@ -18257,6 +18270,8 @@ export type AwaitingReviewStackFragment = { __typename?: 'InfrastructureStack', export type AwaitingReviewAgentRunFragment = { __typename?: 'AgentRun', id: string, status: AgentRunStatus, approvedAt?: string | null, prompt: string, repository: string, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, analysis?: { __typename?: 'AgentAnalysis', summary: string } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null }; +export type AwaitingReviewWorkbenchActivityFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null, http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null } | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, result?: { __typename?: 'WorkbenchJobResult', workingTheory?: string | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null }; + export type PendingApprovalStacksQueryVariables = Exact<{ first?: InputMaybe; }>; @@ -18271,6 +18286,13 @@ export type PendingApprovalAgentRunsQueryVariables = Exact<{ export type PendingApprovalAgentRunsQuery = { __typename?: 'RootQueryType', agentRuns?: { __typename?: 'AgentRunConnection', edges?: Array<{ __typename?: 'AgentRunEdge', node?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, approvedAt?: string | null, prompt: string, repository: string, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, analysis?: { __typename?: 'AgentAnalysis', summary: string } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null } | null } | null> | null } | null }; +export type PendingApprovalWorkbenchActivitiesQueryVariables = Exact<{ + first?: InputMaybe; +}>; + + +export type PendingApprovalWorkbenchActivitiesQuery = { __typename?: 'RootQueryType', workbenchJobActivities?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null, http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null } | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, result?: { __typename?: 'WorkbenchJobResult', workingTheory?: string | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null } | null } | null> | null } | null }; + export type ObjectStoreFragment = { __typename?: 'ObjectStore', id: string, name: string, insertedAt?: string | null, updatedAt?: string | null, s3?: { __typename?: 'S3Store', bucket: string, region?: string | null, endpoint?: string | null, accessKeyId: string } | null, azure?: { __typename?: 'AzureStore', container: string, storageAccount: string, resourceGroup: string, subscriptionId: string, clientId: string, tenantId: string } | null, gcs?: { __typename?: 'GcsStore', bucket: string } | null }; export type ClustersObjectStoresFragment = { __typename?: 'Cluster', protect?: boolean | null, deletedAt?: string | null, version?: string | null, currentVersion?: string | null, self?: boolean | null, virtual?: boolean | null, id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, objectStore?: { __typename?: 'ObjectStore', id: string, name: string, insertedAt?: string | null, updatedAt?: string | null, s3?: { __typename?: 'S3Store', bucket: string, region?: string | null, endpoint?: string | null, accessKeyId: string } | null, azure?: { __typename?: 'AzureStore', container: string, storageAccount: string, resourceGroup: string, subscriptionId: string, clientId: string, tenantId: string } | null, gcs?: { __typename?: 'GcsStore', bucket: string } | null } | null, upgradePlan?: { __typename?: 'ClusterUpgradePlan', compatibilities?: boolean | null, deprecations?: boolean | null, incompatibilities?: boolean | null } | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null }; @@ -22971,6 +22993,56 @@ export const AwaitingReviewAgentRunFragmentDoc = gql` } } ${PullRequestBasicFragmentDoc}`; +export const AwaitingReviewWorkbenchActivityFragmentDoc = gql` + fragment AwaitingReviewWorkbenchActivity on WorkbenchJobActivity { + id + type + status + prompt + result { + functionCall { + name + input + toolId + tool { + id + name + tool + configuration { + lambda { + description + } + cloudRun { + description + } + azureFunction { + description + } + http { + url + } + } + } + } + kubeRequest { + handle + method + path + } + } + workbenchJob { + id + prompt + result { + workingTheory + } + workbench { + id + name + } + } +} + `; export const ObjectStoreFragmentDoc = gql` fragment ObjectStore on ObjectStore { id @@ -31065,6 +31137,53 @@ export type PendingApprovalAgentRunsQueryHookResult = ReturnType; export type PendingApprovalAgentRunsSuspenseQueryHookResult = ReturnType; export type PendingApprovalAgentRunsQueryResult = Apollo.QueryResult; +export const PendingApprovalWorkbenchActivitiesDocument = gql` + query PendingApprovalWorkbenchActivities($first: Int = 100) { + workbenchJobActivities(first: $first, status: NEEDS_APPROVAL) { + edges { + node { + ...AwaitingReviewWorkbenchActivity + } + } + } +} + ${AwaitingReviewWorkbenchActivityFragmentDoc}`; + +/** + * __usePendingApprovalWorkbenchActivitiesQuery__ + * + * To run a query within a React component, call `usePendingApprovalWorkbenchActivitiesQuery` and pass it any options that fit your needs. + * When your component renders, `usePendingApprovalWorkbenchActivitiesQuery` returns an object from Apollo Client that contains loading, error, and data properties + * you can use to render your UI. + * + * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; + * + * @example + * const { data, loading, error } = usePendingApprovalWorkbenchActivitiesQuery({ + * variables: { + * first: // value for 'first' + * }, + * }); + */ +export function usePendingApprovalWorkbenchActivitiesQuery(baseOptions?: Apollo.QueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useQuery(PendingApprovalWorkbenchActivitiesDocument, options); + } +export function usePendingApprovalWorkbenchActivitiesLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useLazyQuery(PendingApprovalWorkbenchActivitiesDocument, options); + } +// @ts-ignore +export function usePendingApprovalWorkbenchActivitiesSuspenseQuery(baseOptions?: Apollo.SuspenseQueryHookOptions): Apollo.UseSuspenseQueryResult; +export function usePendingApprovalWorkbenchActivitiesSuspenseQuery(baseOptions?: Apollo.SkipToken | Apollo.SuspenseQueryHookOptions): Apollo.UseSuspenseQueryResult; +export function usePendingApprovalWorkbenchActivitiesSuspenseQuery(baseOptions?: Apollo.SkipToken | Apollo.SuspenseQueryHookOptions) { + const options = baseOptions === Apollo.skipToken ? baseOptions : {...defaultOptions, ...baseOptions} + return Apollo.useSuspenseQuery(PendingApprovalWorkbenchActivitiesDocument, options); + } +export type PendingApprovalWorkbenchActivitiesQueryHookResult = ReturnType; +export type PendingApprovalWorkbenchActivitiesLazyQueryHookResult = ReturnType; +export type PendingApprovalWorkbenchActivitiesSuspenseQueryHookResult = ReturnType; +export type PendingApprovalWorkbenchActivitiesQueryResult = Apollo.QueryResult; export const ObjectStoresDocument = gql` query ObjectStores($after: String, $first: Int = 100, $before: String, $last: Int) { objectStores(after: $after, first: $first, before: $before, last: $last) { @@ -46771,6 +46890,7 @@ export const namedOperations = { ScmWebhooks: 'ScmWebhooks', PendingApprovalStacks: 'PendingApprovalStacks', PendingApprovalAgentRuns: 'PendingApprovalAgentRuns', + PendingApprovalWorkbenchActivities: 'PendingApprovalWorkbenchActivities', ObjectStores: 'ObjectStores', ClustersObjectStores: 'ClustersObjectStores', ClusterBackup: 'ClusterBackup', @@ -47240,6 +47360,7 @@ export const namedOperations = { ScmWebhook: 'ScmWebhook', AwaitingReviewStack: 'AwaitingReviewStack', AwaitingReviewAgentRun: 'AwaitingReviewAgentRun', + AwaitingReviewWorkbenchActivity: 'AwaitingReviewWorkbenchActivity', ObjectStore: 'ObjectStore', ClustersObjectStores: 'ClustersObjectStores', ClusterBackup: 'ClusterBackup', diff --git a/assets/src/generated/persisted-queries/client.json b/assets/src/generated/persisted-queries/client.json index 5074101339..d9cacc154a 100644 --- a/assets/src/generated/persisted-queries/client.json +++ b/assets/src/generated/persisted-queries/client.json @@ -427,6 +427,11 @@ "name": "PendingApprovalAgentRuns", "body": "query PendingApprovalAgentRuns($first: Int = 100) {\n agentRuns(first: $first, status: PENDING_APPROVAL) {\n edges {\n node {\n ...AwaitingReviewAgentRun\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment AwaitingReviewAgentRun on AgentRun {\n id\n status\n approvedAt\n prompt\n repository\n runtime {\n id\n name\n type\n __typename\n }\n analysis {\n summary\n __typename\n }\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}" }, + "sha256:a81b7adfbf4589377c35ec37ef3da3bf3cda4e646adeec16f9ef70e106e899e2": { + "type": "query", + "name": "PendingApprovalWorkbenchActivities", + "body": "query PendingApprovalWorkbenchActivities($first: Int = 100) {\n workbenchJobActivities(first: $first, status: NEEDS_APPROVAL) {\n edges {\n node {\n ...AwaitingReviewWorkbenchActivity\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment AwaitingReviewWorkbenchActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n result {\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n http {\n url\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n __typename\n }\n __typename\n }\n workbenchJob {\n id\n prompt\n result {\n workingTheory\n __typename\n }\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n __typename\n}" + }, "sha256:988ccffca43dd7f6a0d38dc29d76ea7b85bb4b829d0df9f1ae79511ca4472221": { "type": "query", "name": "ObjectStores", diff --git a/assets/src/graph/awaitingReview.graphql b/assets/src/graph/awaitingReview.graphql index e82daed964..c105ee0af7 100644 --- a/assets/src/graph/awaitingReview.graphql +++ b/assets/src/graph/awaitingReview.graphql @@ -52,6 +52,52 @@ fragment AwaitingReviewAgentRun on AgentRun { } } +fragment AwaitingReviewWorkbenchActivity on WorkbenchJobActivity { + id + type + status + prompt + result { + functionCall { + name + input + toolId + tool { + id + name + tool + configuration { + lambda { + description + } + cloudRun { + description + } + azureFunction { + description + } + } + } + } + kubeRequest { + handle + method + path + } + } + workbenchJob { + id + prompt + result { + workingTheory + } + workbench { + id + name + } + } +} + query PendingApprovalStacks($first: Int = 50) { infrastructureStacks(first: $first, status: PENDING_APPROVAL) { edges { @@ -71,3 +117,13 @@ query PendingApprovalAgentRuns($first: Int = 100) { } } } + +query PendingApprovalWorkbenchActivities($first: Int = 100) { + workbenchJobActivities(first: $first, status: NEEDS_APPROVAL) { + edges { + node { + ...AwaitingReviewWorkbenchActivity + } + } + } +} diff --git a/lib/console/graphql/deployments/workbench.ex b/lib/console/graphql/deployments/workbench.ex index 24695e36c4..76acff628c 100644 --- a/lib/console/graphql/deployments/workbench.ex +++ b/lib/console/graphql/deployments/workbench.ex @@ -652,6 +652,7 @@ defmodule Console.GraphQl.Deployments.Workbench do field :name, :string, description: "the function name to invoke" field :input, :map, description: "input passed to the function" field :tool_id, :id, description: "the workbench tool id backing this function" + field :tool, :workbench_tool, resolve: &Deployments.function_call_tool/3, description: "the workbench tool backing this function call" end object :workbench_job_activity_kube_request do @@ -1348,6 +1349,17 @@ defmodule Console.GraphQl.Deployments.Workbench do resolve &Deployments.workbench_job_activity/2 end + connection field :workbench_job_activities, node_type: :workbench_job_activity do + middleware Authenticated + middleware Scope, + resource: :workbench, + action: :read + arg :status, :workbench_job_activity_status, description: "filter activities by status" + arg :type, :workbench_job_activity_type, description: "filter activities by type" + + resolve &Deployments.workbench_job_activities/2 + end + connection field :workbench_alerts, node_type: :alert do middleware Authenticated middleware Scope, diff --git a/lib/console/graphql/resolvers/deployments/workbench.ex b/lib/console/graphql/resolvers/deployments/workbench.ex index 36f8ef3e6b..5e32275644 100644 --- a/lib/console/graphql/resolvers/deployments/workbench.ex +++ b/lib/console/graphql/resolvers/deployments/workbench.ex @@ -141,6 +141,17 @@ defmodule Console.GraphQl.Resolvers.Deployments.Workbench do |> paginate(args) end + def workbench_job_activities(args, %{context: %{current_user: user}}) do + WorkbenchJobActivity.ordered([desc: :inserted_at]) + |> WorkbenchJobActivity.for_user(user) + |> activity_filters(args) + |> paginate(args) + end + + def function_call_tool(%{tool_id: id}, _, _) when is_binary(id), + do: {:ok, Workbenches.get_workbench_tool(id)} + def function_call_tool(_, _, _), do: {:ok, nil} + def all_workbench_alerts(args, %{context: %{current_user: user}}) do Alert.for_user(user) |> Alert.ordered() @@ -380,4 +391,12 @@ defmodule Console.GraphQl.Resolvers.Deployments.Workbench do _, q -> q end) end + + defp activity_filters(query, args) do + Enum.reduce(args, query, fn + {:status, status}, q when not is_nil(status) -> WorkbenchJobActivity.for_status(q, status) + {:type, type}, q when not is_nil(type) -> WorkbenchJobActivity.for_type(q, type) + _, q -> q + end) + end end diff --git a/lib/console/schema/workbench_job_activity.ex b/lib/console/schema/workbench_job_activity.ex index e02d772fb7..df3468e60b 100644 --- a/lib/console/schema/workbench_job_activity.ex +++ b/lib/console/schema/workbench_job_activity.ex @@ -120,6 +120,13 @@ defmodule Console.Schema.WorkbenchJobActivity do from(a in query, where: a.type == ^type) end + def for_user(query \\ __MODULE__, %User{} = user) do + from(a in query, + join: j in subquery(WorkbenchJob.for_user(user)), + on: j.id == a.workbench_job_id + ) + end + def ordered(query \\ __MODULE__, order \\ [asc: :inserted_at]) do from(a in query, order_by: ^order) end diff --git a/schema/schema.graphql b/schema/schema.graphql index 93f5a0461f..8799a65560 100644 --- a/schema/schema.graphql +++ b/schema/schema.graphql @@ -571,6 +571,22 @@ type RootQueryType { workbenchJobActivity(id: ID!): WorkbenchJobActivity + workbenchJobActivities( + after: String + + first: Int + + before: String + + last: Int + + "filter activities by status" + status: WorkbenchJobActivityStatus + + "filter activities by type" + type: WorkbenchJobActivityType + ): WorkbenchJobActivityConnection + workbenchAlerts(after: String, first: Int, before: String, last: Int): AlertConnection workbenchIssues(after: String, first: Int, before: String, last: Int): IssueConnection @@ -3862,6 +3878,9 @@ type WorkbenchJobActivityFunctionCall { "the workbench tool id backing this function" toolId: ID + + "the workbench tool backing this function call" + tool: WorkbenchTool } type WorkbenchJobActivityKubeRequest { diff --git a/test/console/graphql/queries/deployments/workbench_queries_test.exs b/test/console/graphql/queries/deployments/workbench_queries_test.exs index a1381bf600..d669a082f7 100644 --- a/test/console/graphql/queries/deployments/workbench_queries_test.exs +++ b/test/console/graphql/queries/deployments/workbench_queries_test.exs @@ -1027,6 +1027,40 @@ defmodule Console.GraphQl.Deployments.WorkbenchQueriesTest do end end + describe "workbenchJobActivities" do + test "it can list activities needing approval for readable workbenches" do + user = insert(:user) + project = insert(:project, read_bindings: [%{user_id: user.id}]) + workbench = insert(:workbench, project: project) + job = insert(:workbench_job, workbench: workbench) + pending = + insert_list(2, :workbench_job_activity, + workbench_job: job, + type: :function, + status: :needs_approval + ) + insert(:workbench_job_activity, + workbench_job: job, + type: :function, + status: :successful + ) + insert(:workbench_job_activity, type: :function, status: :needs_approval) + + {:ok, %{data: %{"workbenchJobActivities" => found}}} = run_query(""" + query WorkbenchJobActivities($status: WorkbenchJobActivityStatus!) { + workbenchJobActivities(first: 10, status: $status) { + edges { node { id status type } } + } + } + """, %{"status" => "NEEDS_APPROVAL"}, %{current_user: user}) + + nodes = from_connection(found) + assert length(nodes) == 2 + assert Enum.all?(nodes, &(&1["status"] == "NEEDS_APPROVAL")) + assert ids_equal(nodes, pending) + end + end + describe "workbenchJobActivity" do test "it can fetch a workbench job activity by id" do user = insert(:user) From d6fd2b4ab1c1804cecd8b76b3b2ebe3971fa7ac0 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Fri, 24 Jul 2026 15:16:21 +0200 Subject: [PATCH 06/50] update awaiting review panel --- .../AwaitingReviewLauncher.tsx | 4 +- .../awaiting-review/AwaitingReviewPanel.tsx | 14 +- .../AwaitingReviewWorkbenchActivityItem.tsx | 208 ++++++++++++++++++ .../contexts/AwaitingReviewContext.tsx | 28 ++- 4 files changed, 249 insertions(+), 5 deletions(-) create mode 100644 assets/src/components/awaiting-review/AwaitingReviewWorkbenchActivityItem.tsx diff --git a/assets/src/components/awaiting-review/AwaitingReviewLauncher.tsx b/assets/src/components/awaiting-review/AwaitingReviewLauncher.tsx index 66897e5a31..f1021b093d 100644 --- a/assets/src/components/awaiting-review/AwaitingReviewLauncher.tsx +++ b/assets/src/components/awaiting-review/AwaitingReviewLauncher.tsx @@ -47,7 +47,8 @@ export default function AwaitingReviewLauncher() { setOpen(false) }) - const { stacks, agentRuns, count, loading, error } = useAwaitingReview() + const { stacks, agentRuns, activities, count, loading, error } = + useAwaitingReview() useLayoutEffect(() => { if (!open) return @@ -95,6 +96,7 @@ export default function AwaitingReviewLauncher() { setOpen(false)} diff --git a/assets/src/components/awaiting-review/AwaitingReviewPanel.tsx b/assets/src/components/awaiting-review/AwaitingReviewPanel.tsx index 70fbfb1e5d..7481695a5a 100644 --- a/assets/src/components/awaiting-review/AwaitingReviewPanel.tsx +++ b/assets/src/components/awaiting-review/AwaitingReviewPanel.tsx @@ -10,6 +10,7 @@ import { RectangleSkeleton } from 'components/utils/SkeletonLoaders.tsx' import { AwaitingReviewAgentRunFragment, AwaitingReviewStackFragment, + AwaitingReviewWorkbenchActivityFragment, } from 'generated/graphql' import { ApolloError } from '@apollo/client' import isEmpty from 'lodash/isEmpty' @@ -17,11 +18,13 @@ import { ComponentProps } from 'react' import { useTheme } from 'styled-components' import { AwaitingReviewAgentRunItem } from './AwaitingReviewAgentRunItem' import { AwaitingReviewItem } from './AwaitingReviewItem' +import { AwaitingReviewWorkbenchActivityItem } from './AwaitingReviewWorkbenchActivityItem' import { Overline } from 'components/cd/utils/PermissionsModal' export function AwaitingReviewPanel({ stacks, agentRuns, + activities, loading, error, onClose, @@ -29,12 +32,14 @@ export function AwaitingReviewPanel({ }: ComponentProps & { stacks: AwaitingReviewStackFragment[] agentRuns: AwaitingReviewAgentRunFragment[] + activities: AwaitingReviewWorkbenchActivityFragment[] loading: boolean error?: ApolloError onClose: () => void }) { const theme = useTheme() - const hasItems = !isEmpty(stacks) || !isEmpty(agentRuns) + const hasItems = + !isEmpty(stacks) || !isEmpty(agentRuns) || !isEmpty(activities) return ( ) : ( <> + {activities.map((activity) => ( + + ))} {agentRuns.map((agentRun) => ( ['functionCall'] + >['tool'] +> + +type KubeRequest = NonNullable< + NonNullable['kubeRequest'] +> + +export function AwaitingReviewWorkbenchActivityItem({ + activity, + onNavigate, +}: { + activity: AwaitingReviewWorkbenchActivityFragment + onNavigate: () => void +}) { + const theme = useTheme() + const { workbenchJob, result } = activity + const workbench = workbenchJob?.workbench + const functionCall = result?.functionCall + const tool = functionCall?.tool + const toolType = tool?.tool + const kubeRequest = result?.kubeRequest + const isKubernetes = activity.type === WorkbenchJobActivityType.Kubernetes + + const subtitle = isKubernetes + ? kubeRequestSubtitle(kubeRequest) + : toolType + ? getWorkbenchToolLabel(toolType) + : (functionCall?.name ?? 'Action') + + const title = isKubernetes + ? kubernetesTitle(kubeRequest) + : 'Approval required' + + const description = + workbenchJob?.result?.workingTheory?.trim() || + toolDescription(tool) || + activity.prompt?.trim() || + null + + const viewPath = + workbenchJob?.id && workbench?.id + ? getWorkbenchJobAbsPath({ + workbenchId: workbench.id, + jobId: workbenchJob.id, + }) + : null + + return ( +
+ + + ) : ( + + ) + } + css={{ + flexShrink: 0, + border: theme.borders['fill-two'], + backgroundColor: 'transparent', + }} + /> + + {workbenchJob?.id && workbench?.id && workbench.name && ( + + )} + + + {description && ( + + {description} + + )} + + + } + > + Pending approval + + {viewPath && ( + + )} + +
+ ) +} + +function toolDescription(tool: ActivityTool | null | undefined): string | null { + if (!tool?.configuration) return null + const { configuration, tool: toolType } = tool + switch (toolType) { + case WorkbenchToolType.Lambda: + return configuration.lambda?.description?.trim() || null + case WorkbenchToolType.CloudRun: + return configuration.cloudRun?.description?.trim() || null + case WorkbenchToolType.AzureFunction: + return configuration.azureFunction?.description?.trim() || null + default: + return null + } +} + +function kubernetesTitle(kubeRequest: KubeRequest | null | undefined): string { + const path = kubeRequest?.path?.trim() + if (!path) return 'Kubernetes action' + const segments = path.split('/').filter(Boolean) + const resource = segments.at(-2) + if (resource) return capitalizeKind(resource) + return kubeRequest?.method?.toUpperCase() || 'Kubernetes action' +} + +function kubeRequestSubtitle( + kubeRequest: KubeRequest | null | undefined +): string { + const path = kubeRequest?.path?.trim() + if (!path) return kubeRequest?.handle || 'Kubernetes' + return [kubeRequest?.handle, path].filter(Boolean).join(' · ') +} + +function capitalizeKind(kind: string) { + return kind + .split(/[-_]/) + .map((part) => part.charAt(0).toUpperCase() + part.slice(1)) + .join('') +} diff --git a/assets/src/components/contexts/AwaitingReviewContext.tsx b/assets/src/components/contexts/AwaitingReviewContext.tsx index a190f23e61..1a2bdcd593 100644 --- a/assets/src/components/contexts/AwaitingReviewContext.tsx +++ b/assets/src/components/contexts/AwaitingReviewContext.tsx @@ -2,8 +2,10 @@ import { ApolloError } from '@apollo/client' import { AwaitingReviewAgentRunFragment, AwaitingReviewStackFragment, + AwaitingReviewWorkbenchActivityFragment, usePendingApprovalAgentRunsQuery, usePendingApprovalStacksQuery, + usePendingApprovalWorkbenchActivitiesQuery, } from 'generated/graphql' import { createContext, ReactNode, use, useMemo } from 'react' import { mapExistingNodes } from 'utils/graphql' @@ -13,6 +15,7 @@ const POLL_INTERVAL = 60 * 1000 type AwaitingReviewContextValue = { stacks: AwaitingReviewStackFragment[] agentRuns: AwaitingReviewAgentRunFragment[] + activities: AwaitingReviewWorkbenchActivityFragment[] count: number loading: boolean error?: ApolloError @@ -21,6 +24,7 @@ type AwaitingReviewContextValue = { const AwaitingReviewContext = createContext({ stacks: [], agentRuns: [], + activities: [], count: 0, loading: false, }) @@ -48,6 +52,15 @@ export function AwaitingReviewProvider({ children }: { children: ReactNode }) { fetchPolicy: 'cache-and-network', }) + const { + data: activitiesData, + loading: activitiesLoading, + error: activitiesError, + } = usePendingApprovalWorkbenchActivitiesQuery({ + pollInterval: POLL_INTERVAL, + fetchPolicy: 'cache-and-network', + }) + const stacks = useMemo( () => mapExistingNodes(stacksData?.infrastructureStacks), [stacksData?.infrastructureStacks] @@ -58,21 +71,30 @@ export function AwaitingReviewProvider({ children }: { children: ReactNode }) { [agentRunsData?.agentRuns] ) + const activities = useMemo( + () => mapExistingNodes(activitiesData?.workbenchJobActivities), + [activitiesData?.workbenchJobActivities] + ) + const value = useMemo( () => ({ stacks, agentRuns, - count: stacks.length + agentRuns.length, - loading: stacksLoading || agentRunsLoading, - error: stacksError ?? agentRunsError, + activities, + count: stacks.length + agentRuns.length + activities.length, + loading: stacksLoading || agentRunsLoading || activitiesLoading, + error: stacksError ?? agentRunsError ?? activitiesError, }), [ stacks, agentRuns, + activities, stacksLoading, agentRunsLoading, + activitiesLoading, stacksError, agentRunsError, + activitiesError, ] ) From 67f95475d82168a98259a44f393fe476a6298c57 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Fri, 24 Jul 2026 15:18:10 +0200 Subject: [PATCH 07/50] regenerate client --- assets/src/generated/graphql.ts | 7 ++----- assets/src/generated/persisted-queries/client.json | 4 ++-- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/assets/src/generated/graphql.ts b/assets/src/generated/graphql.ts index 47d32c52cf..baa446d816 100644 --- a/assets/src/generated/graphql.ts +++ b/assets/src/generated/graphql.ts @@ -18270,7 +18270,7 @@ export type AwaitingReviewStackFragment = { __typename?: 'InfrastructureStack', export type AwaitingReviewAgentRunFragment = { __typename?: 'AgentRun', id: string, status: AgentRunStatus, approvedAt?: string | null, prompt: string, repository: string, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, analysis?: { __typename?: 'AgentAnalysis', summary: string } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null }; -export type AwaitingReviewWorkbenchActivityFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null, http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null } | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, result?: { __typename?: 'WorkbenchJobResult', workingTheory?: string | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null }; +export type AwaitingReviewWorkbenchActivityFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null } | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, result?: { __typename?: 'WorkbenchJobResult', workingTheory?: string | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null }; export type PendingApprovalStacksQueryVariables = Exact<{ first?: InputMaybe; @@ -18291,7 +18291,7 @@ export type PendingApprovalWorkbenchActivitiesQueryVariables = Exact<{ }>; -export type PendingApprovalWorkbenchActivitiesQuery = { __typename?: 'RootQueryType', workbenchJobActivities?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null, http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null } | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, result?: { __typename?: 'WorkbenchJobResult', workingTheory?: string | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null } | null } | null> | null } | null }; +export type PendingApprovalWorkbenchActivitiesQuery = { __typename?: 'RootQueryType', workbenchJobActivities?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null } | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, result?: { __typename?: 'WorkbenchJobResult', workingTheory?: string | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null } | null } | null> | null } | null }; export type ObjectStoreFragment = { __typename?: 'ObjectStore', id: string, name: string, insertedAt?: string | null, updatedAt?: string | null, s3?: { __typename?: 'S3Store', bucket: string, region?: string | null, endpoint?: string | null, accessKeyId: string } | null, azure?: { __typename?: 'AzureStore', container: string, storageAccount: string, resourceGroup: string, subscriptionId: string, clientId: string, tenantId: string } | null, gcs?: { __typename?: 'GcsStore', bucket: string } | null }; @@ -23018,9 +23018,6 @@ export const AwaitingReviewWorkbenchActivityFragmentDoc = gql` azureFunction { description } - http { - url - } } } } diff --git a/assets/src/generated/persisted-queries/client.json b/assets/src/generated/persisted-queries/client.json index d9cacc154a..aded568628 100644 --- a/assets/src/generated/persisted-queries/client.json +++ b/assets/src/generated/persisted-queries/client.json @@ -427,10 +427,10 @@ "name": "PendingApprovalAgentRuns", "body": "query PendingApprovalAgentRuns($first: Int = 100) {\n agentRuns(first: $first, status: PENDING_APPROVAL) {\n edges {\n node {\n ...AwaitingReviewAgentRun\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment AwaitingReviewAgentRun on AgentRun {\n id\n status\n approvedAt\n prompt\n repository\n runtime {\n id\n name\n type\n __typename\n }\n analysis {\n summary\n __typename\n }\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}" }, - "sha256:a81b7adfbf4589377c35ec37ef3da3bf3cda4e646adeec16f9ef70e106e899e2": { + "sha256:e14698a699b0024d725f6f8f7a07571113aa335acaa9d3cb26d411b581cce182": { "type": "query", "name": "PendingApprovalWorkbenchActivities", - "body": "query PendingApprovalWorkbenchActivities($first: Int = 100) {\n workbenchJobActivities(first: $first, status: NEEDS_APPROVAL) {\n edges {\n node {\n ...AwaitingReviewWorkbenchActivity\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment AwaitingReviewWorkbenchActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n result {\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n http {\n url\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n __typename\n }\n __typename\n }\n workbenchJob {\n id\n prompt\n result {\n workingTheory\n __typename\n }\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n __typename\n}" + "body": "query PendingApprovalWorkbenchActivities($first: Int = 100) {\n workbenchJobActivities(first: $first, status: NEEDS_APPROVAL) {\n edges {\n node {\n ...AwaitingReviewWorkbenchActivity\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment AwaitingReviewWorkbenchActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n result {\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n __typename\n }\n __typename\n }\n workbenchJob {\n id\n prompt\n result {\n workingTheory\n __typename\n }\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n __typename\n}" }, "sha256:988ccffca43dd7f6a0d38dc29d76ea7b85bb4b829d0df9f1ae79511ca4472221": { "type": "query", From 127ccffce4c8d1843c3e52950acfe60e1039b6ea Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Fri, 24 Jul 2026 15:19:16 +0200 Subject: [PATCH 08/50] regenerate client --- go/client/models_gen.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/go/client/models_gen.go b/go/client/models_gen.go index 8ff7756609..2335bfad2d 100644 --- a/go/client/models_gen.go +++ b/go/client/models_gen.go @@ -10360,6 +10360,8 @@ type WorkbenchJobActivityFunctionCall struct { Input map[string]any `json:"input,omitempty"` // the workbench tool id backing this function ToolID *string `json:"toolId,omitempty"` + // the workbench tool backing this function call + Tool *WorkbenchTool `json:"tool,omitempty"` } type WorkbenchJobActivityJobUpdate struct { From 1bf292430c385a7c9b7d249233850c875e9c7650 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Fri, 24 Jul 2026 15:59:43 +0200 Subject: [PATCH 09/50] fix server code --- lib/console/graphql/resolvers/deployments/workbench.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/console/graphql/resolvers/deployments/workbench.ex b/lib/console/graphql/resolvers/deployments/workbench.ex index 5e32275644..f7368ef5d3 100644 --- a/lib/console/graphql/resolvers/deployments/workbench.ex +++ b/lib/console/graphql/resolvers/deployments/workbench.ex @@ -142,7 +142,7 @@ defmodule Console.GraphQl.Resolvers.Deployments.Workbench do end def workbench_job_activities(args, %{context: %{current_user: user}}) do - WorkbenchJobActivity.ordered([desc: :inserted_at]) + WorkbenchJobActivity.ordered(WorkbenchJobActivity, [desc: :inserted_at]) |> WorkbenchJobActivity.for_user(user) |> activity_filters(args) |> paginate(args) From 6c31eced476fd4d815f638bec9e7541cc2115d28 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Fri, 24 Jul 2026 16:26:00 +0200 Subject: [PATCH 10/50] update query --- assets/src/generated/graphql.ts | 10 ++++++---- assets/src/generated/persisted-queries/client.json | 8 ++++---- assets/src/graph/awaitingReview.graphql | 2 ++ 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/assets/src/generated/graphql.ts b/assets/src/generated/graphql.ts index baa446d816..14a58065b2 100644 --- a/assets/src/generated/graphql.ts +++ b/assets/src/generated/graphql.ts @@ -18268,9 +18268,9 @@ export type RegisterGitHubAppMutation = { __typename?: 'RootMutationType', regis export type AwaitingReviewStackFragment = { __typename?: 'InfrastructureStack', id?: string | null, name: string, status: StackStatus, runs?: { __typename?: 'StackRunConnection', edges?: Array<{ __typename?: 'StackRunEdge', node?: { __typename?: 'StackRun', id: string, status: StackStatus, message?: string | null, approvalResult?: { __typename?: 'StackRunApprovalResult', reason?: string | null, result?: ApprovalResult | null } | null, configuration: { __typename?: 'StackConfiguration', aiApproval?: { __typename?: 'AiApprovalConfiguration', enabled: boolean } | null }, pullRequest?: { __typename?: 'PullRequest', id: string, title?: string | null } | null } | null } | null> | null } | null }; -export type AwaitingReviewAgentRunFragment = { __typename?: 'AgentRun', id: string, status: AgentRunStatus, approvedAt?: string | null, prompt: string, repository: string, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, analysis?: { __typename?: 'AgentAnalysis', summary: string } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null }; +export type AwaitingReviewAgentRunFragment = { __typename?: 'AgentRun', id: string, status: AgentRunStatus, approvedAt?: string | null, prompt: string, repository: string, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, analysis?: { __typename?: 'AgentAnalysis', summary: string } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, insertedAt?: string | null, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null }; -export type AwaitingReviewWorkbenchActivityFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null } | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, result?: { __typename?: 'WorkbenchJobResult', workingTheory?: string | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null }; +export type AwaitingReviewWorkbenchActivityFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null } | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobResult', workingTheory?: string | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null }; export type PendingApprovalStacksQueryVariables = Exact<{ first?: InputMaybe; @@ -18284,14 +18284,14 @@ export type PendingApprovalAgentRunsQueryVariables = Exact<{ }>; -export type PendingApprovalAgentRunsQuery = { __typename?: 'RootQueryType', agentRuns?: { __typename?: 'AgentRunConnection', edges?: Array<{ __typename?: 'AgentRunEdge', node?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, approvedAt?: string | null, prompt: string, repository: string, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, analysis?: { __typename?: 'AgentAnalysis', summary: string } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null } | null } | null> | null } | null }; +export type PendingApprovalAgentRunsQuery = { __typename?: 'RootQueryType', agentRuns?: { __typename?: 'AgentRunConnection', edges?: Array<{ __typename?: 'AgentRunEdge', node?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, approvedAt?: string | null, prompt: string, repository: string, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, analysis?: { __typename?: 'AgentAnalysis', summary: string } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, insertedAt?: string | null, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null } | null } | null> | null } | null }; export type PendingApprovalWorkbenchActivitiesQueryVariables = Exact<{ first?: InputMaybe; }>; -export type PendingApprovalWorkbenchActivitiesQuery = { __typename?: 'RootQueryType', workbenchJobActivities?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null } | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, result?: { __typename?: 'WorkbenchJobResult', workingTheory?: string | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null } | null } | null> | null } | null }; +export type PendingApprovalWorkbenchActivitiesQuery = { __typename?: 'RootQueryType', workbenchJobActivities?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null } | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobResult', workingTheory?: string | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null } | null } | null> | null } | null }; export type ObjectStoreFragment = { __typename?: 'ObjectStore', id: string, name: string, insertedAt?: string | null, updatedAt?: string | null, s3?: { __typename?: 'S3Store', bucket: string, region?: string | null, endpoint?: string | null, accessKeyId: string } | null, azure?: { __typename?: 'AzureStore', container: string, storageAccount: string, resourceGroup: string, subscriptionId: string, clientId: string, tenantId: string } | null, gcs?: { __typename?: 'GcsStore', bucket: string } | null }; @@ -22986,6 +22986,7 @@ export const AwaitingReviewAgentRunFragmentDoc = gql` } workbenchJob { id + insertedAt workbench { id name @@ -23030,6 +23031,7 @@ export const AwaitingReviewWorkbenchActivityFragmentDoc = gql` workbenchJob { id prompt + insertedAt result { workingTheory } diff --git a/assets/src/generated/persisted-queries/client.json b/assets/src/generated/persisted-queries/client.json index aded568628..15fca3fa54 100644 --- a/assets/src/generated/persisted-queries/client.json +++ b/assets/src/generated/persisted-queries/client.json @@ -422,15 +422,15 @@ "name": "PendingApprovalStacks", "body": "query PendingApprovalStacks($first: Int = 50) {\n infrastructureStacks(first: $first, status: PENDING_APPROVAL) {\n edges {\n node {\n ...AwaitingReviewStack\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment AwaitingReviewStack on InfrastructureStack {\n id\n name\n status\n runs(first: 50) {\n edges {\n node {\n id\n status\n message\n approvalResult {\n reason\n result\n __typename\n }\n configuration {\n aiApproval {\n enabled\n __typename\n }\n __typename\n }\n pullRequest {\n id\n title\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}" }, - "sha256:889b429fc27f76a2f9525100fd7754554439fcf3432d6ac68c4ecab07ef42b84": { + "sha256:5cb0329ff57c67cea17fbeb4796df76ce3572b9c9ee7a132aeda2f1528821aa4": { "type": "query", "name": "PendingApprovalAgentRuns", - "body": "query PendingApprovalAgentRuns($first: Int = 100) {\n agentRuns(first: $first, status: PENDING_APPROVAL) {\n edges {\n node {\n ...AwaitingReviewAgentRun\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment AwaitingReviewAgentRun on AgentRun {\n id\n status\n approvedAt\n prompt\n repository\n runtime {\n id\n name\n type\n __typename\n }\n analysis {\n summary\n __typename\n }\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}" + "body": "query PendingApprovalAgentRuns($first: Int = 100) {\n agentRuns(first: $first, status: PENDING_APPROVAL) {\n edges {\n node {\n ...AwaitingReviewAgentRun\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment AwaitingReviewAgentRun on AgentRun {\n id\n status\n approvedAt\n prompt\n repository\n runtime {\n id\n name\n type\n __typename\n }\n analysis {\n summary\n __typename\n }\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n workbenchJob {\n id\n insertedAt\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}" }, - "sha256:e14698a699b0024d725f6f8f7a07571113aa335acaa9d3cb26d411b581cce182": { + "sha256:f990718125ae298a7a56e2f63c9ed923921f70f2a94d1ef5b03f9373e80f0590": { "type": "query", "name": "PendingApprovalWorkbenchActivities", - "body": "query PendingApprovalWorkbenchActivities($first: Int = 100) {\n workbenchJobActivities(first: $first, status: NEEDS_APPROVAL) {\n edges {\n node {\n ...AwaitingReviewWorkbenchActivity\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment AwaitingReviewWorkbenchActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n result {\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n __typename\n }\n __typename\n }\n workbenchJob {\n id\n prompt\n result {\n workingTheory\n __typename\n }\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n __typename\n}" + "body": "query PendingApprovalWorkbenchActivities($first: Int = 100) {\n workbenchJobActivities(first: $first, status: NEEDS_APPROVAL) {\n edges {\n node {\n ...AwaitingReviewWorkbenchActivity\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment AwaitingReviewWorkbenchActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n result {\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n __typename\n }\n __typename\n }\n workbenchJob {\n id\n prompt\n insertedAt\n result {\n workingTheory\n __typename\n }\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n __typename\n}" }, "sha256:988ccffca43dd7f6a0d38dc29d76ea7b85bb4b829d0df9f1ae79511ca4472221": { "type": "query", diff --git a/assets/src/graph/awaitingReview.graphql b/assets/src/graph/awaitingReview.graphql index c105ee0af7..5e213b1e31 100644 --- a/assets/src/graph/awaitingReview.graphql +++ b/assets/src/graph/awaitingReview.graphql @@ -45,6 +45,7 @@ fragment AwaitingReviewAgentRun on AgentRun { } workbenchJob { id + insertedAt workbench { id name @@ -88,6 +89,7 @@ fragment AwaitingReviewWorkbenchActivity on WorkbenchJobActivity { workbenchJob { id prompt + insertedAt result { workingTheory } From 045f9b613e6c293ffa69dc944b244cae451b8271 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Fri, 24 Jul 2026 16:35:12 +0200 Subject: [PATCH 11/50] update workbench tooltip --- .../AwaitingReviewAgentRunItem.tsx | 1 + .../AwaitingReviewWorkbenchActivityItem.tsx | 1 + .../workbenches/common/WorkbenchLinkChip.tsx | 5 +- .../common/WorkbenchLinkHoverCard.tsx | 169 ++++++++++-------- 4 files changed, 105 insertions(+), 71 deletions(-) diff --git a/assets/src/components/awaiting-review/AwaitingReviewAgentRunItem.tsx b/assets/src/components/awaiting-review/AwaitingReviewAgentRunItem.tsx index e31e3ed48c..1f36ccd078 100644 --- a/assets/src/components/awaiting-review/AwaitingReviewAgentRunItem.tsx +++ b/assets/src/components/awaiting-review/AwaitingReviewAgentRunItem.tsx @@ -82,6 +82,7 @@ export function AwaitingReviewAgentRunItem({ workbenchId={workbench.id} workbenchName={workbench.name} workbenchJobId={workbenchJob.id} + jobInsertedAt={workbenchJob.insertedAt} onNavigate={onNavigate} css={{ flexShrink: 0 }} /> diff --git a/assets/src/components/awaiting-review/AwaitingReviewWorkbenchActivityItem.tsx b/assets/src/components/awaiting-review/AwaitingReviewWorkbenchActivityItem.tsx index 1c754a7581..a734ae642e 100644 --- a/assets/src/components/awaiting-review/AwaitingReviewWorkbenchActivityItem.tsx +++ b/assets/src/components/awaiting-review/AwaitingReviewWorkbenchActivityItem.tsx @@ -122,6 +122,7 @@ export function AwaitingReviewWorkbenchActivityItem({ workbenchId={workbench.id} workbenchName={workbench.name} workbenchJobId={workbenchJob.id} + jobInsertedAt={workbenchJob.insertedAt} onNavigate={onNavigate} css={{ flexShrink: 0 }} /> diff --git a/assets/src/components/workbenches/common/WorkbenchLinkChip.tsx b/assets/src/components/workbenches/common/WorkbenchLinkChip.tsx index ec8db53b2f..8edf7584de 100644 --- a/assets/src/components/workbenches/common/WorkbenchLinkChip.tsx +++ b/assets/src/components/workbenches/common/WorkbenchLinkChip.tsx @@ -24,6 +24,7 @@ type WorkbenchLinkChipProps = { workbenchId: string workbenchName: string workbenchJobId?: string + jobInsertedAt?: string | null stopPropagation?: boolean onNavigate?: () => void } & Partial< @@ -39,6 +40,7 @@ export function WorkbenchLinkChip({ workbenchId, workbenchName, workbenchJobId, + jobInsertedAt, stopPropagation = false, onNavigate, fillLevel = 1, @@ -66,7 +68,7 @@ export function WorkbenchLinkChip({ }) const { data: pendingData } = useWorkbenchLinkCardPendingAgentRunsQuery({ - skip: !open, + skip: !open || !!workbenchJobId, fetchPolicy: 'cache-first', }) @@ -144,6 +146,7 @@ export function WorkbenchLinkChip({ workbenchName={workbenchName} workbenchId={workbenchId} workbenchJobId={workbenchJobId} + jobInsertedAt={jobInsertedAt} workbench={data?.workbench} pendingAgentRuns={pendingAgentRuns} onNavigate={() => { diff --git a/assets/src/components/workbenches/common/WorkbenchLinkHoverCard.tsx b/assets/src/components/workbenches/common/WorkbenchLinkHoverCard.tsx index ec206653df..759445fc48 100644 --- a/assets/src/components/workbenches/common/WorkbenchLinkHoverCard.tsx +++ b/assets/src/components/workbenches/common/WorkbenchLinkHoverCard.tsx @@ -1,7 +1,6 @@ import { ArrowTopRightIcon, Button, - Card, Flex, prettifyRepoUrl, WorkbenchIcon, @@ -14,13 +13,15 @@ import { getWorkbenchJobAbsPath, } from 'routes/workbenchesRoutesConsts' import styled, { useTheme } from 'styled-components' +import { formatDateTime } from 'utils/datetime' -export const WORKBENCH_LINK_HOVER_CARD_WIDTH = 220 +export const WORKBENCH_LINK_HOVER_CARD_WIDTH = 260 type WorkbenchLinkHoverCardProps = { workbenchName: string workbenchId?: string workbenchJobId?: string + jobInsertedAt?: string | null workbench?: WorkbenchLinkCardFragment | null pendingAgentRuns?: number onNavigate?: () => void @@ -35,7 +36,7 @@ function DetailRow({ label, value }: { label: string; value: string }) { > {label} {value} @@ -48,6 +49,7 @@ export function WorkbenchLinkHoverCard({ workbenchName, workbenchId, workbenchJobId, + jobInsertedAt, workbench, pendingAgentRuns = 0, onNavigate, @@ -61,6 +63,9 @@ export function WorkbenchLinkHoverCard({ workbench?.repository?.httpsPath ?? workbench?.repository?.url ?? '' ) const pendingCount = pendingAgentRuns + const startTime = jobInsertedAt + ? formatDateTime(jobInsertedAt, 'HH:mm:ss [UTC]', false, true) + : null const workbenchPath = workbenchId && workbenchJobId ? getWorkbenchJobAbsPath({ workbenchId, jobId: workbenchJobId }) @@ -68,93 +73,117 @@ export function WorkbenchLinkHoverCard({ ? getWorkbenchAbsPath(workbenchId) : undefined + const detailRows = workbenchJobId + ? [ + owner ? { label: 'Owner', value: owner } : null, + startTime ? { label: 'Start time', value: startTime } : null, + ].filter(isDetailRow) + : [ + cluster ? { label: 'Cluster', value: cluster } : null, + owner ? { label: 'Owner', value: owner } : null, + repo ? { label: 'Repo', value: repo } : null, + ].filter(isDetailRow) + return ( - - - + + + + + {workbenchName} - - - - {cluster && ( - - )} - {owner && ( - - )} - {repo && ( - - )} - {pendingCount > 0 && ( + + + {(detailRows.length > 0 || (!workbenchJobId && pendingCount > 0)) && ( - Agent runs - - {pendingCount} pending - + {detailRows.map(({ label, value }) => ( + + ))} + {!workbenchJobId && pendingCount > 0 && ( + + Agent runs + + {pendingCount} pending + + + )} )} - - {workbenchPath && ( - - )} + {workbenchPath && ( + + )} + ) } -const CardSC = styled(Card)(({ theme }) => ({ - '&&': { - width: WORKBENCH_LINK_HOVER_CARD_WIDTH, - maxWidth: WORKBENCH_LINK_HOVER_CARD_WIDTH, - flexGrow: 0, - }, +function isDetailRow( + row: { label: string; value: string } | null +): row is { label: string; value: string } { + return row != null +} + +const CardSC = styled.div(({ theme }) => ({ + width: WORKBENCH_LINK_HOVER_CARD_WIDTH, + maxWidth: WORKBENCH_LINK_HOVER_CARD_WIDTH, display: 'flex', flexDirection: 'column', - gap: theme.spacing.small, - padding: theme.spacing.medium, + backgroundColor: theme.colors['fill-one'], border: theme.borders['fill-two'], + borderRadius: 6, + boxShadow: theme.boxShadows.moderate, + overflow: 'hidden', pointerEvents: 'auto', })) -const DividerSC = styled.div(({ theme }) => ({ - borderTop: `1px solid ${theme.colors['border-fill-two']}`, - marginLeft: -theme.spacing.medium, - marginRight: -theme.spacing.medium, +const HeaderSC = styled.div(({ theme }) => ({ + display: 'flex', + alignItems: 'center', + gap: theme.spacing.xsmall, + padding: 10, + borderBottom: theme.borders['fill-two'], +})) + +const IconWrapSC = styled.div({ + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + width: 32, + height: 32, flexShrink: 0, +}) + +const ContentSC = styled.div(({ theme }) => ({ + display: 'flex', + flexDirection: 'column', + gap: theme.spacing.medium, + padding: theme.spacing.small, })) From f7ec88846f83dcb8f6a7c3438cea9073850c242d Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Mon, 27 Jul 2026 12:11:31 +0200 Subject: [PATCH 12/50] update lightning icon --- .../src/components/icons/LightningIcon.tsx | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/assets/design-system/src/components/icons/LightningIcon.tsx b/assets/design-system/src/components/icons/LightningIcon.tsx index 4a3f2c77de..26f2e40bf0 100644 --- a/assets/design-system/src/components/icons/LightningIcon.tsx +++ b/assets/design-system/src/components/icons/LightningIcon.tsx @@ -3,21 +3,17 @@ import createIcon from './createIcon' export default createIcon(({ size, color }) => ( - )) From 7dcfef0859f02b388b5e0c10869f03bd3eb51de8 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Mon, 27 Jul 2026 12:11:46 +0200 Subject: [PATCH 13/50] initialize actions tab --- .../workbenches/workbench/job/WorkbenchJob.tsx | 2 +- .../workbench/job/WorkbenchJobActions.tsx | 3 +++ .../workbench/job/WorkbenchJobPanel.tsx | 15 ++++++++++++++- 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 assets/src/components/workbenches/workbench/job/WorkbenchJobActions.tsx diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJob.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJob.tsx index 17dc00487f..55dde77091 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJob.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJob.tsx @@ -196,7 +196,7 @@ export function WorkbenchJob() { workbenchName={workbenchName} /> - {hasResultContent && !isOpen && ( + {!!job?.id && !isOpen && ( setOpen(true)} diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobActions.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobActions.tsx new file mode 100644 index 0000000000..3681493384 --- /dev/null +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobActions.tsx @@ -0,0 +1,3 @@ +export function WorkbenchJobActions() { + return null +} diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobPanel.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobPanel.tsx index f1856b933e..a78638d051 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobPanel.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobPanel.tsx @@ -5,6 +5,7 @@ import { GaugeIcon, GraphIcon, IconFrame, + LightningIcon, PaperCheckIcon, PrIcon, SubTab, @@ -44,6 +45,7 @@ import { import styled, { useTheme } from 'styled-components' import { isNonNullable } from 'utils/isNonNullable' import { isJobRunning } from './WorkbenchJobActivity' +import { WorkbenchJobActions } from './WorkbenchJobActions' import { WorkbenchJobCanvas } from './WorkbenchJobCanvas' import { PATCH_PR_URL, @@ -58,7 +60,13 @@ import { WorkbenchJobUsage } from './WorkbenchJobUsage' const SIDE_PANEL_TYPE: SidePanel = 'workbench-job' type JobPanelTab = - 'Result' | 'Dashboard' | 'Topology' | 'Pull requests' | 'Eval' | 'Usage' + | 'Result' + | 'Dashboard' + | 'Topology' + | 'Pull requests' + | 'Eval' + | 'Usage' + | 'Actions' export function WorkbenchJobPanelContent() { const { spacing } = useTheme() @@ -235,6 +243,7 @@ export function WorkbenchJobPanelContent() { {selectedTab === 'Usage' && job?.usage && ( )} + {selectedTab === 'Actions' && } @@ -329,6 +338,10 @@ const getPanelTabs = ( label: 'Usage', icon: , }, + { + label: 'Actions', + icon: , + }, ].filter( ( tab From 240d8df17103506383faae0392c95bd40f9cdf12 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Mon, 27 Jul 2026 12:14:44 +0200 Subject: [PATCH 14/50] fix panel content check --- .../workbenches/workbench/job/WorkbenchJob.tsx | 8 +++----- .../workbench/job/workbenchJobResultUtils.ts | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJob.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJob.tsx index 55dde77091..62663d146e 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJob.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJob.tsx @@ -31,7 +31,7 @@ import { WorkbenchJobActivities } from './WorkbenchJobActivities' import { isJobRunning } from './WorkbenchJobActivity' import { useWorkbenchJobPanel } from './WorkbenchJobPanel' import { prettifyPrompt } from 'components/utils/contentEditableChips' -import { hasWorkbenchJobResultContent } from './workbenchJobResultUtils' +import { hasWorkbenchJobPanelContent } from './workbenchJobResultUtils' export function WorkbenchJob() { const theme = useTheme() @@ -49,11 +49,9 @@ export function WorkbenchJob() { const job = data?.workbenchJob const isLoading = loading && !job - const hasResultContent = hasWorkbenchJobResultContent(job) + const hasPanelContent = hasWorkbenchJobPanelContent(job) - const { isOpen, setOpen } = useWorkbenchJobPanel( - !!job?.id && hasResultContent - ) + const { isOpen, setOpen } = useWorkbenchJobPanel(!!job?.id && hasPanelContent) useSidePanelWidth({ maxWidthVw: 60, initialWidthVw: diff --git a/assets/src/components/workbenches/workbench/job/workbenchJobResultUtils.ts b/assets/src/components/workbenches/workbench/job/workbenchJobResultUtils.ts index dbe714cda7..bd6694e5fb 100644 --- a/assets/src/components/workbenches/workbench/job/workbenchJobResultUtils.ts +++ b/assets/src/components/workbenches/workbench/job/workbenchJobResultUtils.ts @@ -2,6 +2,7 @@ import { WorkbenchJobFragment, WorkbenchJobResultFragment, } from 'generated/graphql' +import { isEmpty } from 'lodash' import { isJobRunning } from './WorkbenchJobActivity' export function getWorkbenchJobTodos( @@ -34,3 +35,16 @@ export function hasWorkbenchJobResultContent( getWorkbenchJobTodos(job?.result).length > 0 ) } + +export function hasWorkbenchJobPanelContent( + job: Nullable +) { + return ( + hasWorkbenchJobResultContent(job) || + !isEmpty(job?.result?.canvas) || + !!job?.result?.topology || + !isEmpty(job?.pullRequests) || + !!job?.evalResult || + !!job?.usage + ) +} From 8a6af6409b633558f1cd027e9e204efb2b879345 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Mon, 27 Jul 2026 12:21:21 +0200 Subject: [PATCH 15/50] allow activities filtering --- assets/src/generated/graphql.ts | 62 +++++++++++++++++++ .../generated/persisted-queries/client.json | 5 ++ assets/src/graph/workbench.graphql | 13 ++++ lib/console/graphql/deployments/workbench.ex | 3 + .../resolvers/deployments/workbench.ex | 1 + schema/schema.graphql | 13 +++- .../deployments/workbench_queries_test.exs | 25 ++++++++ 7 files changed, 121 insertions(+), 1 deletion(-) diff --git a/assets/src/generated/graphql.ts b/assets/src/generated/graphql.ts index 14a58065b2..2cddc3af71 100644 --- a/assets/src/generated/graphql.ts +++ b/assets/src/generated/graphql.ts @@ -15996,6 +15996,8 @@ export type WorkbenchJobActivitiesArgs = { before?: InputMaybe; first?: InputMaybe; last?: InputMaybe; + status?: InputMaybe; + type?: InputMaybe; }; @@ -21438,6 +21440,14 @@ export type WorkbenchJobActivitiesQueryVariables = Exact<{ export type WorkbenchJobActivitiesQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus, prompt?: string | null, workbench?: { __typename?: 'Workbench', id: string } | null, referencedJob?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, status: WorkbenchJobStatus, workbench?: { __typename?: 'Workbench', id: string } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null } | null } | null, activities?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null } | null> | null } | null } | null }; +export type WorkbenchJobPendingActionsQueryVariables = Exact<{ + id: Scalars['ID']['input']; + first?: InputMaybe; +}>; + + +export type WorkbenchJobPendingActionsQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, activities?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string } | null } | null> | null } | null } | null }; + export type WorkbenchJobWhimseyTextQueryVariables = Exact<{ id: Scalars['ID']['input']; }>; @@ -45309,6 +45319,57 @@ export type WorkbenchJobActivitiesQueryHookResult = ReturnType; export type WorkbenchJobActivitiesSuspenseQueryHookResult = ReturnType; export type WorkbenchJobActivitiesQueryResult = Apollo.QueryResult; +export const WorkbenchJobPendingActionsDocument = gql` + query WorkbenchJobPendingActions($id: ID!, $first: Int = 1) { + workbenchJob(id: $id) { + id + activities(first: $first, status: NEEDS_APPROVAL) { + edges { + node { + id + } + } + } + } +} + `; + +/** + * __useWorkbenchJobPendingActionsQuery__ + * + * To run a query within a React component, call `useWorkbenchJobPendingActionsQuery` and pass it any options that fit your needs. + * When your component renders, `useWorkbenchJobPendingActionsQuery` returns an object from Apollo Client that contains loading, error, and data properties + * you can use to render your UI. + * + * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; + * + * @example + * const { data, loading, error } = useWorkbenchJobPendingActionsQuery({ + * variables: { + * id: // value for 'id' + * first: // value for 'first' + * }, + * }); + */ +export function useWorkbenchJobPendingActionsQuery(baseOptions: Apollo.QueryHookOptions & ({ variables: WorkbenchJobPendingActionsQueryVariables; skip?: boolean; } | { skip: boolean; }) ) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useQuery(WorkbenchJobPendingActionsDocument, options); + } +export function useWorkbenchJobPendingActionsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useLazyQuery(WorkbenchJobPendingActionsDocument, options); + } +// @ts-ignore +export function useWorkbenchJobPendingActionsSuspenseQuery(baseOptions?: Apollo.SuspenseQueryHookOptions): Apollo.UseSuspenseQueryResult; +export function useWorkbenchJobPendingActionsSuspenseQuery(baseOptions?: Apollo.SkipToken | Apollo.SuspenseQueryHookOptions): Apollo.UseSuspenseQueryResult; +export function useWorkbenchJobPendingActionsSuspenseQuery(baseOptions?: Apollo.SkipToken | Apollo.SuspenseQueryHookOptions) { + const options = baseOptions === Apollo.skipToken ? baseOptions : {...defaultOptions, ...baseOptions} + return Apollo.useSuspenseQuery(WorkbenchJobPendingActionsDocument, options); + } +export type WorkbenchJobPendingActionsQueryHookResult = ReturnType; +export type WorkbenchJobPendingActionsLazyQueryHookResult = ReturnType; +export type WorkbenchJobPendingActionsSuspenseQueryHookResult = ReturnType; +export type WorkbenchJobPendingActionsQueryResult = Apollo.QueryResult; export const WorkbenchJobWhimseyTextDocument = gql` query WorkbenchJobWhimseyText($id: ID!) { workbenchJob(id: $id) { @@ -47091,6 +47152,7 @@ export const namedOperations = { WorkbenchJobLogsTool: 'WorkbenchJobLogsTool', WorkbenchJobTracesTool: 'WorkbenchJobTracesTool', WorkbenchJobActivities: 'WorkbenchJobActivities', + WorkbenchJobPendingActions: 'WorkbenchJobPendingActions', WorkbenchJobWhimseyText: 'WorkbenchJobWhimseyText', WorkbenchJobActivityWhimseyText: 'WorkbenchJobActivityWhimseyText', WorkbenchJobActivity: 'WorkbenchJobActivity', diff --git a/assets/src/generated/persisted-queries/client.json b/assets/src/generated/persisted-queries/client.json index 15fca3fa54..3fd8b208c9 100644 --- a/assets/src/generated/persisted-queries/client.json +++ b/assets/src/generated/persisted-queries/client.json @@ -2022,6 +2022,11 @@ "name": "WorkbenchJobActivities", "body": "query WorkbenchJobActivities($id: ID!) {\n workbenchJob(id: $id) {\n id\n status\n prompt\n workbench {\n id\n __typename\n }\n referencedJob {\n id\n prompt\n status\n workbench {\n id\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n __typename\n }\n activities(first: 100) {\n edges {\n node {\n ...WorkbenchJobActivity\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" }, + "sha256:51ecdb714c1a875ca724c5213bf6549282f178da1877e8ae8c4a07a70fe9a2e1": { + "type": "query", + "name": "WorkbenchJobPendingActions", + "body": "query WorkbenchJobPendingActions($id: ID!, $first: Int = 1) {\n workbenchJob(id: $id) {\n id\n activities(first: $first, status: NEEDS_APPROVAL) {\n edges {\n node {\n id\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}" + }, "sha256:1367ab87fa3cb2913dca622df4606e0b0e2217e1abedeae5807cbcaf496114ac": { "type": "query", "name": "WorkbenchJobWhimseyText", diff --git a/assets/src/graph/workbench.graphql b/assets/src/graph/workbench.graphql index a533cc2b54..ee0d55465d 100644 --- a/assets/src/graph/workbench.graphql +++ b/assets/src/graph/workbench.graphql @@ -1229,6 +1229,19 @@ query WorkbenchJobActivities($id: ID!) { } } +query WorkbenchJobPendingActions($id: ID!, $first: Int = 1) { + workbenchJob(id: $id) { + id + activities(first: $first, status: NEEDS_APPROVAL) { + edges { + node { + id + } + } + } + } +} + query WorkbenchJobWhimseyText($id: ID!) { workbenchJob(id: $id) { id diff --git a/lib/console/graphql/deployments/workbench.ex b/lib/console/graphql/deployments/workbench.ex index 76acff628c..e8fa5f9dd6 100644 --- a/lib/console/graphql/deployments/workbench.ex +++ b/lib/console/graphql/deployments/workbench.ex @@ -532,6 +532,9 @@ defmodule Console.GraphQl.Deployments.Workbench do field :referenced_job, :workbench_job, resolve: dataloader(Deployments), description: "the original job this job was spawned from (e.g. eval skill jobs) (sideloadable)" connection field :activities, node_type: :workbench_job_activity do + arg :status, :workbench_job_activity_status, description: "filter activities by status" + arg :type, :workbench_job_activity_type, description: "filter activities by type" + resolve &Deployments.list_workbench_job_activities/3 end diff --git a/lib/console/graphql/resolvers/deployments/workbench.ex b/lib/console/graphql/resolvers/deployments/workbench.ex index f7368ef5d3..dced047d6f 100644 --- a/lib/console/graphql/resolvers/deployments/workbench.ex +++ b/lib/console/graphql/resolvers/deployments/workbench.ex @@ -138,6 +138,7 @@ defmodule Console.GraphQl.Resolvers.Deployments.Workbench do def list_workbench_job_activities(job, args, _) do WorkbenchJobActivity.for_workbench_job(job.id) |> WorkbenchJobActivity.ordered() + |> activity_filters(args) |> paginate(args) end diff --git a/schema/schema.graphql b/schema/schema.graphql index 8799a65560..0b5e9f8161 100644 --- a/schema/schema.graphql +++ b/schema/schema.graphql @@ -3650,7 +3650,18 @@ type WorkbenchJob { "the original job this job was spawned from (e.g. eval skill jobs) (sideloadable)" referencedJob: WorkbenchJob - activities(after: String, first: Int, before: String, last: Int): WorkbenchJobActivityConnection + activities( + after: String + first: Int + before: String + last: Int + + "filter activities by status" + status: WorkbenchJobActivityStatus + + "filter activities by type" + type: WorkbenchJobActivityType + ): WorkbenchJobActivityConnection metricsTool( "the name of the metrics tool" diff --git a/test/console/graphql/queries/deployments/workbench_queries_test.exs b/test/console/graphql/queries/deployments/workbench_queries_test.exs index d669a082f7..6f71bedfe2 100644 --- a/test/console/graphql/queries/deployments/workbench_queries_test.exs +++ b/test/console/graphql/queries/deployments/workbench_queries_test.exs @@ -784,6 +784,31 @@ defmodule Console.GraphQl.Deployments.WorkbenchQueriesTest do |> ids_equal(activities) end + test "it can filter activities by status" do + job = insert(:workbench_job) + pending = insert(:workbench_job_activity, + workbench_job: job, + type: :function, + status: :needs_approval + ) + insert(:workbench_job_activity, workbench_job: job, type: :coding, status: :successful) + + {:ok, %{data: %{"workbenchJob" => found}}} = run_query(""" + query WorkbenchJob($id: ID!, $status: WorkbenchJobActivityStatus) { + workbenchJob(id: $id) { + id + activities(first: 10, status: $status) { + edges { node { id status } } + } + } + } + """, %{"id" => job.id, "status" => "NEEDS_APPROVAL"}, %{current_user: admin_user()}) + + [node] = from_connection(found["activities"]) + assert node["id"] == pending.id + assert node["status"] == "NEEDS_APPROVAL" + end + test "it can paginate activities" do job = insert(:workbench_job) insert_list(5, :workbench_job_activity, workbench_job: job, type: :coding) From cfc1e7c2da37008d6ea14b45ca63c15c3b89d088 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Mon, 27 Jul 2026 12:21:37 +0200 Subject: [PATCH 16/50] add pending actions icon --- .../workbench/job/WorkbenchJobPanel.tsx | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobPanel.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobPanel.tsx index a78638d051..74d42f34dd 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobPanel.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobPanel.tsx @@ -15,6 +15,7 @@ import { PanelHeaderSC, SidePanelContent, } from 'components/ai/chatbot/SidePanelShared' +import { POLL_INTERVAL } from 'components/cd/ContinuousDeployment' import { SidePanel, useTopLevelSidePanel, @@ -24,6 +25,7 @@ import { AgentRunStatus, PullRequestBasicFragment, useWorkbenchJobActivitiesQuery, + useWorkbenchJobPendingActionsQuery, useWorkbenchJobQuery, WorkbenchJobFragment, } from 'generated/graphql' @@ -90,6 +92,12 @@ export function WorkbenchJobPanelContent() { variables: { id: jobId }, fetchPolicy: 'cache-first', }) + const { data: pendingActionsData } = useWorkbenchJobPendingActionsQuery({ + skip: !jobId, + variables: { id: jobId }, + fetchPolicy: 'cache-and-network', + pollInterval: POLL_INTERVAL, + }) const job = data?.workbenchJob const isLoading = loading && !job const activities = useMemo( @@ -148,10 +156,19 @@ export function WorkbenchJobPanelContent() { return [...agentRunDrafts, ...patchPrDrafts] }, [activities, pullRequests]) const hasDraftPrsAwaitingApproval = draftPrs.length > 0 + const hasActionsAwaitingApproval = ( + pendingActionsData?.workbenchJob?.activities?.edges ?? [] + ).some((edge) => !!edge?.node?.id) const tabs = useMemo( - () => getPanelTabs(job, hasDraftPrsAwaitingApproval, isLoading), - [hasDraftPrsAwaitingApproval, isLoading, job] + () => + getPanelTabs( + job, + hasDraftPrsAwaitingApproval, + hasActionsAwaitingApproval, + isLoading + ), + [hasActionsAwaitingApproval, hasDraftPrsAwaitingApproval, isLoading, job] ) useEffect(() => { @@ -310,6 +327,7 @@ const PanelSubTabSC = styled(SubTab)(({ theme, active }) => ({ const getPanelTabs = ( job: Nullable, hasDraftPrsAwaitingApproval: boolean, + hasActionsAwaitingApproval: boolean, isLoading: boolean ) => [ @@ -341,6 +359,7 @@ const getPanelTabs = ( { label: 'Actions', icon: , + showDot: hasActionsAwaitingApproval, }, ].filter( ( From 6f1acd61b74e0dac4cdf2d670d9b548af9cb6fac Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Mon, 27 Jul 2026 12:40:45 +0200 Subject: [PATCH 17/50] fix activity rejection --- assets/src/generated/graphql.ts | 195 +++++++++++++++++- .../generated/persisted-queries/client.json | 31 ++- assets/src/graph/workbench.graphql | 60 ++++++ lib/console/deployments/workbenches.ex | 4 +- test/console/deployments/workbenches_test.exs | 6 +- .../deployments/workbench_mutations_test.exs | 4 +- 6 files changed, 278 insertions(+), 22 deletions(-) diff --git a/assets/src/generated/graphql.ts b/assets/src/generated/graphql.ts index 2cddc3af71..ca1a72d0ad 100644 --- a/assets/src/generated/graphql.ts +++ b/assets/src/generated/graphql.ts @@ -21116,11 +21116,11 @@ export type WorkbenchCanvasBlockFragment = { __typename?: 'WorkbenchCanvasBlock' export type WorkbenchJobResultFragment = { __typename?: 'WorkbenchJobResult', id: string, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null, topology?: string | null, todos?: Array<{ __typename?: 'WorkbenchJobResultTodo', name?: string | null, description?: string | null, done?: boolean | null } | null> | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null }; -export type WorkbenchJobActivityResultFragment = { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null }; +export type WorkbenchJobActivityResultFragment = { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null }; -export type WorkbenchJobActivityFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null }; +export type WorkbenchJobActivityFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null }; -export type WorkbenchJobActivityWithThoughtsFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, thoughts?: Array<{ __typename?: 'WorkbenchJobThought', id: string, content?: string | null, toolName?: string | null, toolArgs?: Record | null, activity?: { __typename?: 'WorkbenchJobActivity', id: string } | null, attributes?: { __typename?: 'WorkbenchJobThoughtAttributes', logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, metrics?: Array<{ __typename?: 'WorkbenchJobActivityMetric', timestamp?: string | null, name?: string | null, value?: number | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null } | null } | null> | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null }; +export type WorkbenchJobActivityWithThoughtsFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, thoughts?: Array<{ __typename?: 'WorkbenchJobThought', id: string, content?: string | null, toolName?: string | null, toolArgs?: Record | null, activity?: { __typename?: 'WorkbenchJobActivity', id: string } | null, attributes?: { __typename?: 'WorkbenchJobThoughtAttributes', logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, metrics?: Array<{ __typename?: 'WorkbenchJobActivityMetric', timestamp?: string | null, name?: string | null, value?: number | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null } | null } | null> | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null }; export type WorkbenchJobProgressFragment = { __typename?: 'WorkbenchJobProgress', activityId?: string | null, tool?: string | null, text?: string | null, arguments?: Record | null }; @@ -21438,7 +21438,7 @@ export type WorkbenchJobActivitiesQueryVariables = Exact<{ }>; -export type WorkbenchJobActivitiesQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus, prompt?: string | null, workbench?: { __typename?: 'Workbench', id: string } | null, referencedJob?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, status: WorkbenchJobStatus, workbench?: { __typename?: 'Workbench', id: string } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null } | null } | null, activities?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null } | null> | null } | null } | null }; +export type WorkbenchJobActivitiesQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus, prompt?: string | null, workbench?: { __typename?: 'Workbench', id: string } | null, referencedJob?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, status: WorkbenchJobStatus, workbench?: { __typename?: 'Workbench', id: string } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null } | null } | null, activities?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null } | null> | null } | null } | null }; export type WorkbenchJobPendingActionsQueryVariables = Exact<{ id: Scalars['ID']['input']; @@ -21448,6 +21448,30 @@ export type WorkbenchJobPendingActionsQueryVariables = Exact<{ export type WorkbenchJobPendingActionsQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, activities?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string } | null } | null> | null } | null } | null }; +export type WorkbenchJobActionFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null }; + +export type WorkbenchJobActionsQueryVariables = Exact<{ + id: Scalars['ID']['input']; +}>; + + +export type WorkbenchJobActionsQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, activities?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null } | null } | null> | null } | null } | null }; + +export type ApproveWorkbenchJobActivityMutationVariables = Exact<{ + id: Scalars['ID']['input']; +}>; + + +export type ApproveWorkbenchJobActivityMutation = { __typename?: 'RootMutationType', approveWorkbenchJobActivity?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null } | null }; + +export type RejectWorkbenchJobActivityMutationVariables = Exact<{ + id: Scalars['ID']['input']; + reason?: InputMaybe; +}>; + + +export type RejectWorkbenchJobActivityMutation = { __typename?: 'RootMutationType', rejectWorkbenchJobActivity?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null } | null }; + export type WorkbenchJobWhimseyTextQueryVariables = Exact<{ id: Scalars['ID']['input']; }>; @@ -21467,7 +21491,7 @@ export type WorkbenchJobActivityQueryVariables = Exact<{ }>; -export type WorkbenchJobActivityQuery = { __typename?: 'RootQueryType', workbenchJobActivity?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, thoughts?: Array<{ __typename?: 'WorkbenchJobThought', id: string, content?: string | null, toolName?: string | null, toolArgs?: Record | null, activity?: { __typename?: 'WorkbenchJobActivity', id: string } | null, attributes?: { __typename?: 'WorkbenchJobThoughtAttributes', logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, metrics?: Array<{ __typename?: 'WorkbenchJobActivityMetric', timestamp?: string | null, name?: string | null, value?: number | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null } | null } | null> | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null }; +export type WorkbenchJobActivityQuery = { __typename?: 'RootQueryType', workbenchJobActivity?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, thoughts?: Array<{ __typename?: 'WorkbenchJobThought', id: string, content?: string | null, toolName?: string | null, toolArgs?: Record | null, activity?: { __typename?: 'WorkbenchJobActivity', id: string } | null, attributes?: { __typename?: 'WorkbenchJobThoughtAttributes', logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, metrics?: Array<{ __typename?: 'WorkbenchJobActivityMetric', timestamp?: string | null, name?: string | null, value?: number | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null } | null } | null> | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null }; export type WorkbenchToolsQueryVariables = Exact<{ first?: InputMaybe; @@ -21582,7 +21606,7 @@ export type CreateWorkbenchMessageMutationVariables = Exact<{ }>; -export type CreateWorkbenchMessageMutation = { __typename?: 'RootMutationType', createWorkbenchMessage?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null }; +export type CreateWorkbenchMessageMutation = { __typename?: 'RootMutationType', createWorkbenchMessage?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null }; export type CreateWorkbenchPromptMutationVariables = Exact<{ workbenchId: Scalars['ID']['input']; @@ -21725,7 +21749,7 @@ export type WorkbenchJobActivityDeltaSubscriptionVariables = Exact<{ }>; -export type WorkbenchJobActivityDeltaSubscription = { __typename?: 'RootSubscriptionType', workbenchJobActivityDelta?: { __typename?: 'WorkbenchJobActivityDelta', delta?: Delta | null, payload?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null } | null }; +export type WorkbenchJobActivityDeltaSubscription = { __typename?: 'RootSubscriptionType', workbenchJobActivityDelta?: { __typename?: 'WorkbenchJobActivityDelta', delta?: Delta | null, payload?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null } | null }; export type WorkbenchJobThoughtDeltaSubscriptionVariables = Exact<{ jobId: Scalars['ID']['input']; @@ -27096,6 +27120,11 @@ export const WorkbenchJobActivityResultFragmentDoc = gql` name input toolId + tool { + id + name + tool + } } kubeRequest { handle @@ -27571,6 +27600,37 @@ export const UnifiedWorkbenchSkillTinyFragmentDoc = gql` subagents } `; +export const WorkbenchJobActionFragmentDoc = gql` + fragment WorkbenchJobAction on WorkbenchJobActivity { + id + type + status + prompt + insertedAt + result { + output + error + functionCall { + name + input + toolId + tool { + id + name + tool + } + } + kubeRequest { + handle + method + path + body + queryParams + contentType + } + } +} + `; export const WorkbenchLinkCardFragmentDoc = gql` fragment WorkbenchLinkCard on Workbench { id @@ -45370,6 +45430,123 @@ export type WorkbenchJobPendingActionsQueryHookResult = ReturnType; export type WorkbenchJobPendingActionsSuspenseQueryHookResult = ReturnType; export type WorkbenchJobPendingActionsQueryResult = Apollo.QueryResult; +export const WorkbenchJobActionsDocument = gql` + query WorkbenchJobActions($id: ID!) { + workbenchJob(id: $id) { + id + activities(first: 100) { + edges { + node { + ...WorkbenchJobAction + } + } + } + } +} + ${WorkbenchJobActionFragmentDoc}`; + +/** + * __useWorkbenchJobActionsQuery__ + * + * To run a query within a React component, call `useWorkbenchJobActionsQuery` and pass it any options that fit your needs. + * When your component renders, `useWorkbenchJobActionsQuery` returns an object from Apollo Client that contains loading, error, and data properties + * you can use to render your UI. + * + * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; + * + * @example + * const { data, loading, error } = useWorkbenchJobActionsQuery({ + * variables: { + * id: // value for 'id' + * }, + * }); + */ +export function useWorkbenchJobActionsQuery(baseOptions: Apollo.QueryHookOptions & ({ variables: WorkbenchJobActionsQueryVariables; skip?: boolean; } | { skip: boolean; }) ) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useQuery(WorkbenchJobActionsDocument, options); + } +export function useWorkbenchJobActionsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useLazyQuery(WorkbenchJobActionsDocument, options); + } +// @ts-ignore +export function useWorkbenchJobActionsSuspenseQuery(baseOptions?: Apollo.SuspenseQueryHookOptions): Apollo.UseSuspenseQueryResult; +export function useWorkbenchJobActionsSuspenseQuery(baseOptions?: Apollo.SkipToken | Apollo.SuspenseQueryHookOptions): Apollo.UseSuspenseQueryResult; +export function useWorkbenchJobActionsSuspenseQuery(baseOptions?: Apollo.SkipToken | Apollo.SuspenseQueryHookOptions) { + const options = baseOptions === Apollo.skipToken ? baseOptions : {...defaultOptions, ...baseOptions} + return Apollo.useSuspenseQuery(WorkbenchJobActionsDocument, options); + } +export type WorkbenchJobActionsQueryHookResult = ReturnType; +export type WorkbenchJobActionsLazyQueryHookResult = ReturnType; +export type WorkbenchJobActionsSuspenseQueryHookResult = ReturnType; +export type WorkbenchJobActionsQueryResult = Apollo.QueryResult; +export const ApproveWorkbenchJobActivityDocument = gql` + mutation ApproveWorkbenchJobActivity($id: ID!) { + approveWorkbenchJobActivity(id: $id) { + ...WorkbenchJobAction + } +} + ${WorkbenchJobActionFragmentDoc}`; +export type ApproveWorkbenchJobActivityMutationFn = Apollo.MutationFunction; + +/** + * __useApproveWorkbenchJobActivityMutation__ + * + * To run a mutation, you first call `useApproveWorkbenchJobActivityMutation` within a React component and pass it any options that fit your needs. + * When your component renders, `useApproveWorkbenchJobActivityMutation` returns a tuple that includes: + * - A mutate function that you can call at any time to execute the mutation + * - An object with fields that represent the current status of the mutation's execution + * + * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; + * + * @example + * const [approveWorkbenchJobActivityMutation, { data, loading, error }] = useApproveWorkbenchJobActivityMutation({ + * variables: { + * id: // value for 'id' + * }, + * }); + */ +export function useApproveWorkbenchJobActivityMutation(baseOptions?: Apollo.MutationHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useMutation(ApproveWorkbenchJobActivityDocument, options); + } +export type ApproveWorkbenchJobActivityMutationHookResult = ReturnType; +export type ApproveWorkbenchJobActivityMutationResult = Apollo.MutationResult; +export type ApproveWorkbenchJobActivityMutationOptions = Apollo.BaseMutationOptions; +export const RejectWorkbenchJobActivityDocument = gql` + mutation RejectWorkbenchJobActivity($id: ID!, $reason: String) { + rejectWorkbenchJobActivity(id: $id, reason: $reason) { + ...WorkbenchJobAction + } +} + ${WorkbenchJobActionFragmentDoc}`; +export type RejectWorkbenchJobActivityMutationFn = Apollo.MutationFunction; + +/** + * __useRejectWorkbenchJobActivityMutation__ + * + * To run a mutation, you first call `useRejectWorkbenchJobActivityMutation` within a React component and pass it any options that fit your needs. + * When your component renders, `useRejectWorkbenchJobActivityMutation` returns a tuple that includes: + * - A mutate function that you can call at any time to execute the mutation + * - An object with fields that represent the current status of the mutation's execution + * + * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; + * + * @example + * const [rejectWorkbenchJobActivityMutation, { data, loading, error }] = useRejectWorkbenchJobActivityMutation({ + * variables: { + * id: // value for 'id' + * reason: // value for 'reason' + * }, + * }); + */ +export function useRejectWorkbenchJobActivityMutation(baseOptions?: Apollo.MutationHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useMutation(RejectWorkbenchJobActivityDocument, options); + } +export type RejectWorkbenchJobActivityMutationHookResult = ReturnType; +export type RejectWorkbenchJobActivityMutationResult = Apollo.MutationResult; +export type RejectWorkbenchJobActivityMutationOptions = Apollo.BaseMutationOptions; export const WorkbenchJobWhimseyTextDocument = gql` query WorkbenchJobWhimseyText($id: ID!) { workbenchJob(id: $id) { @@ -47153,6 +47330,7 @@ export const namedOperations = { WorkbenchJobTracesTool: 'WorkbenchJobTracesTool', WorkbenchJobActivities: 'WorkbenchJobActivities', WorkbenchJobPendingActions: 'WorkbenchJobPendingActions', + WorkbenchJobActions: 'WorkbenchJobActions', WorkbenchJobWhimseyText: 'WorkbenchJobWhimseyText', WorkbenchJobActivityWhimseyText: 'WorkbenchJobActivityWhimseyText', WorkbenchJobActivity: 'WorkbenchJobActivity', @@ -47316,6 +47494,8 @@ export const namedOperations = { CreateInvite: 'CreateInvite', GetWorkbenchCron: 'GetWorkbenchCron', GetWorkbenchWebhook: 'GetWorkbenchWebhook', + ApproveWorkbenchJobActivity: 'ApproveWorkbenchJobActivity', + RejectWorkbenchJobActivity: 'RejectWorkbenchJobActivity', CreateWorkbench: 'CreateWorkbench', UpdateWorkbench: 'UpdateWorkbench', CreateWorkbenchEval: 'CreateWorkbenchEval', @@ -47683,6 +47863,7 @@ export const namedOperations = { WorkbenchAccessibleUser: 'WorkbenchAccessibleUser', WorkbenchJobSearchRow: 'WorkbenchJobSearchRow', UnifiedWorkbenchSkillTiny: 'UnifiedWorkbenchSkillTiny', + WorkbenchJobAction: 'WorkbenchJobAction', WorkbenchLinkCard: 'WorkbenchLinkCard' } } \ No newline at end of file diff --git a/assets/src/generated/persisted-queries/client.json b/assets/src/generated/persisted-queries/client.json index 3fd8b208c9..92d7c6ddb2 100644 --- a/assets/src/generated/persisted-queries/client.json +++ b/assets/src/generated/persisted-queries/client.json @@ -2017,16 +2017,31 @@ "name": "WorkbenchJobTracesTool", "body": "query WorkbenchJobTracesTool($id: ID!, $name: String, $arguments: Json) {\n workbenchJob(id: $id) {\n id\n tracesTool(name: $name, arguments: $arguments) {\n ...WorkbenchJobActivityTrace\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}" }, - "sha256:766ef19189729b5b2be624c0c3e48affe9150e1b369d7c186585d44e6a1686dc": { + "sha256:af4eb45dad97f25ee0925e80b2bbc3507ed0f9e0d7a8d549d20e003cdc5d90e3": { "type": "query", "name": "WorkbenchJobActivities", - "body": "query WorkbenchJobActivities($id: ID!) {\n workbenchJob(id: $id) {\n id\n status\n prompt\n workbench {\n id\n __typename\n }\n referencedJob {\n id\n prompt\n status\n workbench {\n id\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n __typename\n }\n activities(first: 100) {\n edges {\n node {\n ...WorkbenchJobActivity\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" + "body": "query WorkbenchJobActivities($id: ID!) {\n workbenchJob(id: $id) {\n id\n status\n prompt\n workbench {\n id\n __typename\n }\n referencedJob {\n id\n prompt\n status\n workbench {\n id\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n __typename\n }\n activities(first: 100) {\n edges {\n node {\n ...WorkbenchJobActivity\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" }, "sha256:51ecdb714c1a875ca724c5213bf6549282f178da1877e8ae8c4a07a70fe9a2e1": { "type": "query", "name": "WorkbenchJobPendingActions", "body": "query WorkbenchJobPendingActions($id: ID!, $first: Int = 1) {\n workbenchJob(id: $id) {\n id\n activities(first: $first, status: NEEDS_APPROVAL) {\n edges {\n node {\n id\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}" }, + "sha256:2790a0f3390eae583a000125149f549afad043d615fdea4c0a0a1080472d9d7b": { + "type": "query", + "name": "WorkbenchJobActions", + "body": "query WorkbenchJobActions($id: ID!) {\n workbenchJob(id: $id) {\n id\n activities(first: 100) {\n edges {\n node {\n ...WorkbenchJobAction\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobAction on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n __typename\n }\n __typename\n}" + }, + "sha256:c59ebfc382f6e4855c9af2c089c6aea5c419958d3ae10207dbc692828e50836c": { + "type": "mutation", + "name": "ApproveWorkbenchJobActivity", + "body": "mutation ApproveWorkbenchJobActivity($id: ID!) {\n approveWorkbenchJobActivity(id: $id) {\n ...WorkbenchJobAction\n __typename\n }\n}\n\nfragment WorkbenchJobAction on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n __typename\n }\n __typename\n}" + }, + "sha256:0f70ddf4c75b557a7942b65a338215357cab30f31c4f91ad2a6b73fc129dcb5d": { + "type": "mutation", + "name": "RejectWorkbenchJobActivity", + "body": "mutation RejectWorkbenchJobActivity($id: ID!, $reason: String) {\n rejectWorkbenchJobActivity(id: $id, reason: $reason) {\n ...WorkbenchJobAction\n __typename\n }\n}\n\nfragment WorkbenchJobAction on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n __typename\n }\n __typename\n}" + }, "sha256:1367ab87fa3cb2913dca622df4606e0b0e2217e1abedeae5807cbcaf496114ac": { "type": "query", "name": "WorkbenchJobWhimseyText", @@ -2037,10 +2052,10 @@ "name": "WorkbenchJobActivityWhimseyText", "body": "query WorkbenchJobActivityWhimseyText($id: ID!) {\n workbenchJobActivity(id: $id) {\n id\n whimsey\n __typename\n }\n}" }, - "sha256:1c990e678cb74a3281b7212cb6f260cb9b08a35a50b57e94aba469a99af7029a": { + "sha256:583c4f2888306b3c8a53446fcd6106b71ab689f2682a6a697f5371a9b7802197": { "type": "query", "name": "WorkbenchJobActivity", - "body": "query WorkbenchJobActivity($id: ID!) {\n workbenchJobActivity(id: $id) {\n ...WorkbenchJobActivityWithThoughts\n __typename\n }\n}\n\nfragment WorkbenchJobActivityWithThoughts on WorkbenchJobActivity {\n ...WorkbenchJobActivity\n thoughts {\n ...WorkbenchJobThought\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}\n\nfragment WorkbenchJobThought on WorkbenchJobThought {\n id\n content\n toolName\n toolArgs\n activity {\n id\n __typename\n }\n attributes {\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n metrics {\n ...WorkbenchJobActivityMetric\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityMetric on WorkbenchJobActivityMetric {\n timestamp\n name\n value\n labels\n __typename\n}" + "body": "query WorkbenchJobActivity($id: ID!) {\n workbenchJobActivity(id: $id) {\n ...WorkbenchJobActivityWithThoughts\n __typename\n }\n}\n\nfragment WorkbenchJobActivityWithThoughts on WorkbenchJobActivity {\n ...WorkbenchJobActivity\n thoughts {\n ...WorkbenchJobThought\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}\n\nfragment WorkbenchJobThought on WorkbenchJobThought {\n id\n content\n toolName\n toolArgs\n activity {\n id\n __typename\n }\n attributes {\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n metrics {\n ...WorkbenchJobActivityMetric\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityMetric on WorkbenchJobActivityMetric {\n timestamp\n name\n value\n labels\n __typename\n}" }, "sha256:13ca0786672355db1deeaf3a29d7f2681d5d34cff26a07ae9509aff09dcebe94": { "type": "query", @@ -2112,10 +2127,10 @@ "name": "CancelWorkbenchJob", "body": "mutation CancelWorkbenchJob($jobId: ID!) {\n cancelWorkbenchJob(jobId: $jobId) {\n id\n status\n __typename\n }\n}" }, - "sha256:43ef1af9e7359631c0f50a04ed7be82613fedcdef77eb0f0220253e000103758": { + "sha256:29eda20af7117dc04b8c898912de66a0e42df13f9c01c29d82cbefae569a4a3f": { "type": "mutation", "name": "CreateWorkbenchMessage", - "body": "mutation CreateWorkbenchMessage($jobId: ID!, $attributes: WorkbenchMessageAttributes!) {\n createWorkbenchMessage(jobId: $jobId, attributes: $attributes) {\n ...WorkbenchJobActivity\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" + "body": "mutation CreateWorkbenchMessage($jobId: ID!, $attributes: WorkbenchMessageAttributes!) {\n createWorkbenchMessage(jobId: $jobId, attributes: $attributes) {\n ...WorkbenchJobActivity\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" }, "sha256:aec27aea620d94d724229e982ca5b06f6c40291b1488ebcb52c02655b989f534": { "type": "mutation", @@ -2207,10 +2222,10 @@ "name": "WorkbenchJobDelta", "body": "subscription WorkbenchJobDelta($id: ID, $workbenchId: ID) {\n workbenchJobDelta(id: $id, workbenchId: $workbenchId) {\n delta\n payload {\n ...WorkbenchJobTiny\n error\n result {\n ...WorkbenchJobResult\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobTiny on WorkbenchJob {\n id\n prompt\n status\n error\n insertedAt\n usage {\n ...WorkbenchJobUsageTiny\n __typename\n }\n modes {\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n user {\n id\n name\n profile\n __typename\n }\n workbench {\n id\n name\n __typename\n }\n alert {\n id\n state\n url\n __typename\n }\n issue {\n id\n status\n url\n __typename\n }\n pullRequests {\n ...WorkbenchJobPullRequest\n __typename\n }\n result {\n id\n conclusion\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n chatbotMessage {\n id\n channel\n message\n chatConnection {\n id\n name\n type\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobUsageTiny on WorkbenchJobUsage {\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchJobPullRequest on PullRequest {\n ...PullRequestBasic\n patch\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment WorkbenchJobResult on WorkbenchJobResult {\n id\n workingTheory\n criticism\n conclusion\n topology\n todos {\n ...WorkbenchJobResultTodo\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobResultTodo on WorkbenchJobResultTodo {\n name\n description\n done\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}" }, - "sha256:092a66acb224fe031f26e578fba2a619df4112a4f7552a998f17ef5ebce383d7": { + "sha256:3adb8b27db468ab092f4d02850726ffb17c26cb3f4ef2f1affdafbba6173f9d5": { "type": "subscription", "name": "WorkbenchJobActivityDelta", - "body": "subscription WorkbenchJobActivityDelta($jobId: ID!) {\n workbenchJobActivityDelta(jobId: $jobId) {\n delta\n payload {\n ...WorkbenchJobActivity\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" + "body": "subscription WorkbenchJobActivityDelta($jobId: ID!) {\n workbenchJobActivityDelta(jobId: $jobId) {\n delta\n payload {\n ...WorkbenchJobActivity\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" }, "sha256:84e024a73a5d1c07d1ce00b74b6addad8b4d6eb7a1d9daaa5afbe57abd3f5f9a": { "type": "subscription", diff --git a/assets/src/graph/workbench.graphql b/assets/src/graph/workbench.graphql index ee0d55465d..dfe62bcc60 100644 --- a/assets/src/graph/workbench.graphql +++ b/assets/src/graph/workbench.graphql @@ -414,6 +414,11 @@ fragment WorkbenchJobActivityResult on WorkbenchJobActivityResult { name input toolId + tool { + id + name + tool + } } kubeRequest { handle @@ -1242,6 +1247,61 @@ query WorkbenchJobPendingActions($id: ID!, $first: Int = 1) { } } +fragment WorkbenchJobAction on WorkbenchJobActivity { + id + type + status + prompt + insertedAt + result { + output + error + functionCall { + name + input + toolId + tool { + id + name + tool + } + } + kubeRequest { + handle + method + path + body + queryParams + contentType + } + } +} + +query WorkbenchJobActions($id: ID!) { + workbenchJob(id: $id) { + id + activities(first: 100) { + edges { + node { + ...WorkbenchJobAction + } + } + } + } +} + +mutation ApproveWorkbenchJobActivity($id: ID!) { + approveWorkbenchJobActivity(id: $id) { + ...WorkbenchJobAction + } +} + +mutation RejectWorkbenchJobActivity($id: ID!, $reason: String) { + rejectWorkbenchJobActivity(id: $id, reason: $reason) { + ...WorkbenchJobAction + } +} + query WorkbenchJobWhimseyText($id: ID!) { workbenchJob(id: $id) { id diff --git a/lib/console/deployments/workbenches.ex b/lib/console/deployments/workbenches.ex index ca31890bbf..0830624657 100644 --- a/lib/console/deployments/workbenches.ex +++ b/lib/console/deployments/workbenches.ex @@ -852,7 +852,7 @@ defmodule Console.Deployments.Workbenches do end @doc """ - Rejects a job activity by setting status to successful and setting the output to the reason. + Rejects a job activity by setting status to cancelled and storing the reason as output. """ @spec reject_job_activity(binary | nil, binary, User.t()) :: activity_resp def reject_job_activity(reason \\ nil, activity_id, %User{} = user) when is_binary(activity_id) do @@ -860,7 +860,7 @@ defmodule Console.Deployments.Workbenches do |> allow(user, :approve) |> when_ok(fn activity -> WorkbenchJobActivity.changeset(activity, %{ - status: :successful, + status: :cancelled, result: %{output: reason || "Execution rejected by user"} }) end) diff --git a/test/console/deployments/workbenches_test.exs b/test/console/deployments/workbenches_test.exs index 2487abeb0c..d2e1c2a17c 100644 --- a/test/console/deployments/workbenches_test.exs +++ b/test/console/deployments/workbenches_test.exs @@ -1405,12 +1405,12 @@ defmodule Console.Deployments.WorkbenchesTest do {:ok, updated} = Workbenches.reject_job_activity("too risky", activity.id, user) assert updated.id == activity.id - assert updated.status == :successful + assert updated.status == :cancelled assert updated.result.output == "too risky" assert_receive {:event, %PubSub.WorkbenchJobActivityUpdated{item: ^updated}} reloaded = refetch(activity) - assert reloaded.status == :successful + assert reloaded.status == :cancelled assert reloaded.result.output == "too risky" end @@ -1431,7 +1431,7 @@ defmodule Console.Deployments.WorkbenchesTest do {:ok, updated} = Workbenches.reject_job_activity(activity.id, user) assert updated.id == activity.id - assert updated.status == :successful + assert updated.status == :cancelled assert updated.result.output == "Execution rejected by user" assert_receive {:event, %PubSub.WorkbenchJobActivityUpdated{item: ^updated}} end diff --git a/test/console/graphql/mutations/deployments/workbench_mutations_test.exs b/test/console/graphql/mutations/deployments/workbench_mutations_test.exs index 793cf21eff..409bee0531 100644 --- a/test/console/graphql/mutations/deployments/workbench_mutations_test.exs +++ b/test/console/graphql/mutations/deployments/workbench_mutations_test.exs @@ -712,11 +712,11 @@ defmodule Console.GraphQl.Deployments.WorkbenchMutationsTest do """, %{"id" => activity.id, "reason" => "not approved"}, %{current_user: user}) assert updated["id"] == activity.id - assert updated["status"] == "SUCCESSFUL" + assert updated["status"] == "CANCELLED" assert updated["result"]["output"] == "not approved" reloaded = refetch(activity) - assert reloaded.status == :successful + assert reloaded.status == :cancelled assert reloaded.result.output == "not approved" end end From 2a54607c144fc20321cc79b91a0eeb1135098e93 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Mon, 27 Jul 2026 12:59:03 +0200 Subject: [PATCH 18/50] initial list action implementation --- .../workbench/job/WorkbenchJobActionCard.tsx | 75 +++++ .../job/WorkbenchJobActionDetail.tsx | 221 +++++++++++++++ .../workbench/job/WorkbenchJobActions.tsx | 122 +++++++- .../workbench/job/WorkbenchJobPanel.tsx | 4 +- .../job/workbenchJobActionsUtils.tsx | 261 ++++++++++++++++++ 5 files changed, 680 insertions(+), 3 deletions(-) create mode 100644 assets/src/components/workbenches/workbench/job/WorkbenchJobActionCard.tsx create mode 100644 assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx create mode 100644 assets/src/components/workbenches/workbench/job/workbenchJobActionsUtils.tsx diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionCard.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionCard.tsx new file mode 100644 index 0000000000..c2efcbed3a --- /dev/null +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionCard.tsx @@ -0,0 +1,75 @@ +import { + Button, + Flex, + IconFrame, + KubernetesIcon, +} from '@pluralsh/design-system' +import { StackedText } from 'components/utils/table/StackedText' +import { WorkbenchJobActionFragment } from 'generated/graphql' +import styled, { useTheme } from 'styled-components' +import { + getActionDetailButtonLabel, + getActionIcon, + getActionSubtitle, + getActionTitle, +} from './workbenchJobActionsUtils' + +export function WorkbenchJobActionCard({ + activity, + onView, +}: { + activity: WorkbenchJobActionFragment + onView: () => void +}) { + const theme = useTheme() + const icon = getActionIcon(activity) + + return ( + + + } + css={{ + flexShrink: 0, + border: theme.borders['fill-two'], + backgroundColor: 'transparent', + }} + /> + + + + + ) +} + +const CardSC = styled.div(({ theme }) => ({ + display: 'flex', + alignItems: 'center', + gap: theme.spacing.medium, + padding: theme.spacing.medium, + borderRadius: theme.borderRadiuses.large, + background: theme.colors['fill-two'], + border: theme.borders['fill-two'], +})) diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx new file mode 100644 index 0000000000..dd96fba476 --- /dev/null +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx @@ -0,0 +1,221 @@ +import { + ArrowLeftIcon, + Button, + Chip, + Code, + Flex, + IconFrame, + KubernetesIcon, + WarningIcon, +} from '@pluralsh/design-system' +import { GqlError } from 'components/utils/Alert' +import { StackedText } from 'components/utils/table/StackedText' +import { CaptionP } from 'components/utils/typography/Text' +import { + useApproveWorkbenchJobActivityMutation, + useRejectWorkbenchJobActivityMutation, + WorkbenchJobActionFragment, + WorkbenchJobActivityStatus, +} from 'generated/graphql' +import { useState } from 'react' +import styled, { useTheme } from 'styled-components' +import { + getActionIcon, + getActionInputJson, + getActionResultJson, + getActionSubtitle, + getActionTitle, +} from './workbenchJobActionsUtils' + +export function WorkbenchJobActionDetail({ + activity, + onBack, +}: { + activity: WorkbenchJobActionFragment + onBack: () => void +}) { + const theme = useTheme() + const [error, setError] = useState(null) + const needsApproval = + activity.status === WorkbenchJobActivityStatus.NeedsApproval + const icon = getActionIcon(activity) + const inputJson = getActionInputJson(activity) + const resultJson = getActionResultJson(activity) + + const [approve, { loading: approving }] = + useApproveWorkbenchJobActivityMutation({ + variables: { id: activity.id }, + onCompleted: onBack, + onError: (err) => setError(err.message), + refetchQueries: ['WorkbenchJobActions', 'WorkbenchJobPendingActions'], + }) + + const [reject, { loading: rejecting }] = + useRejectWorkbenchJobActivityMutation({ + variables: { id: activity.id }, + onCompleted: onBack, + onError: (err) => setError(err.message), + refetchQueries: ['WorkbenchJobActions', 'WorkbenchJobPendingActions'], + }) + + return ( + + + + + Back to all actions + + + + + } + css={{ + flexShrink: 0, + border: theme.borders['fill-two'], + backgroundColor: 'transparent', + }} + /> + + + {needsApproval && ( + } + > + Pending approval + + )} + + + {error && } + + {!!inputJson && ( + + INPUT + + {inputJson} + + + )} + + {!!resultJson && ( + + + {activity.status === WorkbenchJobActivityStatus.Failed + ? 'ERROR' + : activity.status === WorkbenchJobActivityStatus.Cancelled + ? 'REASON' + : 'RESULT'} + + + {resultJson} + + + )} + + + {needsApproval && ( + + + + + )} + + ) +} + +const DetailSC = styled.div(({ theme }) => ({ + display: 'flex', + flexDirection: 'column', + gap: theme.spacing.large, + minHeight: '100%', + flex: 1, +})) + +const BackBtnSC = styled.button(({ theme }) => ({ + ...theme.partials.reset.button, + ...theme.partials.text.body2, + display: 'inline-flex', + alignItems: 'center', + gap: theme.spacing.xsmall, + color: theme.colors['text-light'], + width: 'fit-content', + '&:hover': { color: theme.colors.text }, +})) + +const FooterSC = styled.div(({ theme }) => ({ + display: 'flex', + gap: theme.spacing.small, + marginTop: 'auto', + paddingTop: theme.spacing.medium, + borderTop: theme.borders.default, +})) diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobActions.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobActions.tsx index 3681493384..a95f246adf 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobActions.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobActions.tsx @@ -1,3 +1,121 @@ -export function WorkbenchJobActions() { - return null +import { EmptyState, Flex } from '@pluralsh/design-system' +import { POLL_INTERVAL } from 'components/cd/ContinuousDeployment' +import { GqlError } from 'components/utils/Alert' +import { TableSkeleton } from 'components/utils/SkeletonLoaders' +import { CaptionP } from 'components/utils/typography/Text' +import { + useWorkbenchJobActionsQuery, + WorkbenchJobActionFragment, +} from 'generated/graphql' +import { isEmpty } from 'lodash' +import { useMemo, useState } from 'react' +import styled, { useTheme } from 'styled-components' +import { WorkbenchJobActionCard } from './WorkbenchJobActionCard' +import { WorkbenchJobActionDetail } from './WorkbenchJobActionDetail' +import { + groupWorkbenchJobActions, + mapActionNodes, +} from './workbenchJobActionsUtils' + +export function WorkbenchJobActions({ jobId }: { jobId: string }) { + const theme = useTheme() + const [selectedId, setSelectedId] = useState(null) + + const { data, loading, error } = useWorkbenchJobActionsQuery({ + variables: { id: jobId }, + skip: !jobId, + fetchPolicy: 'cache-and-network', + pollInterval: POLL_INTERVAL, + }) + + const actions = useMemo( + () => mapActionNodes(data?.workbenchJob?.activities?.edges), + [data] + ) + const sections = useMemo( + () => groupWorkbenchJobActions(actions, theme), + [actions, theme] + ) + const selected = useMemo( + () => actions.find((action) => action.id === selectedId) ?? null, + [actions, selectedId] + ) + + if (selected) { + return ( + setSelectedId(null)} + /> + ) + } + + if (error && isEmpty(actions)) { + return + } + + if (loading && isEmpty(actions)) { + return ( + + ) + } + + if (isEmpty(sections)) { + return + } + + return ( + + {sections.map((section) => ( + + + {section.icon} + + {section.label} ({section.count}) + + + + {section.actions.map((activity: WorkbenchJobActionFragment) => ( + setSelectedId(activity.id)} + /> + ))} + + + ))} + + ) } + +const ListSC = styled.div(({ theme }) => ({ + display: 'flex', + flexDirection: 'column', + gap: theme.spacing.xlarge, +})) + +const SectionSC = styled.div(({ theme }) => ({ + display: 'flex', + flexDirection: 'column', + gap: theme.spacing.small, +})) + +const CardsSC = styled.div(({ theme }) => ({ + display: 'flex', + flexDirection: 'column', + gap: theme.spacing.xsmall, +})) diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobPanel.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobPanel.tsx index 74d42f34dd..08804084fa 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobPanel.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobPanel.tsx @@ -260,7 +260,9 @@ export function WorkbenchJobPanelContent() { {selectedTab === 'Usage' && job?.usage && ( )} - {selectedTab === 'Actions' && } + {selectedTab === 'Actions' && job?.id && ( + + )} diff --git a/assets/src/components/workbenches/workbench/job/workbenchJobActionsUtils.tsx b/assets/src/components/workbenches/workbench/job/workbenchJobActionsUtils.tsx new file mode 100644 index 0000000000..beba91f733 --- /dev/null +++ b/assets/src/components/workbenches/workbench/job/workbenchJobActionsUtils.tsx @@ -0,0 +1,261 @@ +import { + CancelledFilledIcon, + StatusOkIcon, + WarningIcon, +} from '@pluralsh/design-system' +import { + getWorkbenchToolLabel, + WorkbenchToolIcon, +} from 'components/workbenches/tools/workbenchToolsUtils' +import { + WorkbenchJobActionFragment, + WorkbenchJobActivityStatus, + WorkbenchJobActivityType, +} from 'generated/graphql' +import { ComponentType, ReactElement } from 'react' +import { DefaultTheme } from 'styled-components' +import { isNonNullable } from 'utils/isNonNullable' + +export type WorkbenchJobActionSectionKey = + 'awaiting' | 'failed' | 'succeeded' | 'denied' + +export type WorkbenchJobActionSection = { + key: WorkbenchJobActionSectionKey + label: string + count: number + actions: WorkbenchJobActionFragment[] + icon: ReactElement + iconColor: string +} + +const ACTION_TYPES = new Set([ + WorkbenchJobActivityType.Function, + WorkbenchJobActivityType.Kubernetes, +]) + +export function isWorkbenchJobAction( + activity: WorkbenchJobActionFragment +): boolean { + return !!activity.type && ACTION_TYPES.has(activity.type) +} + +export function getActionSectionKey( + status: Nullable +): WorkbenchJobActionSectionKey | null { + switch (status) { + case WorkbenchJobActivityStatus.NeedsApproval: + return 'awaiting' + case WorkbenchJobActivityStatus.Failed: + return 'failed' + case WorkbenchJobActivityStatus.Successful: + return 'succeeded' + case WorkbenchJobActivityStatus.Cancelled: + return 'denied' + default: + return null + } +} + +export function groupWorkbenchJobActions( + activities: WorkbenchJobActionFragment[], + theme: DefaultTheme +): WorkbenchJobActionSection[] { + const buckets: Record< + WorkbenchJobActionSectionKey, + WorkbenchJobActionFragment[] + > = { + awaiting: [], + failed: [], + succeeded: [], + denied: [], + } + + for (const activity of activities) { + if (!isWorkbenchJobAction(activity)) continue + const key = getActionSectionKey(activity.status) + if (key) buckets[key].push(activity) + } + + const meta: Record< + WorkbenchJobActionSectionKey, + { + label: string + icon: ComponentType<{ size?: number; color?: string }> + iconColor: string + } + > = { + awaiting: { + label: 'Awaiting approval', + icon: WarningIcon, + iconColor: theme.colors['icon-warning'], + }, + failed: { + label: 'Failed', + icon: CancelledFilledIcon, + iconColor: theme.colors['icon-danger'], + }, + succeeded: { + label: 'Succeeded', + icon: StatusOkIcon, + iconColor: theme.colors['icon-success'], + }, + denied: { + label: 'Denied', + icon: CancelledFilledIcon, + iconColor: theme.colors['icon-light'], + }, + } + + return (Object.keys(buckets) as WorkbenchJobActionSectionKey[]) + .map((key) => { + const actions = buckets[key] + const { label, icon: Icon, iconColor } = meta[key] + return { + key, + label, + count: actions.length, + actions, + icon: ( + + ), + iconColor, + } + }) + .filter((section) => section.count > 0) +} + +export function getActionDetailButtonLabel( + status: Nullable +): string { + switch (status) { + case WorkbenchJobActivityStatus.NeedsApproval: + return 'View diff' + case WorkbenchJobActivityStatus.Failed: + return 'View error' + case WorkbenchJobActivityStatus.Successful: + return 'View json' + case WorkbenchJobActivityStatus.Cancelled: + return 'View reason' + default: + return 'View details' + } +} + +export function getActionTitle(activity: WorkbenchJobActionFragment): string { + const toolName = activity.result?.functionCall?.tool?.name?.trim() + if (toolName) return toolName + + if (activity.type === WorkbenchJobActivityType.Kubernetes) { + const path = activity.result?.kubeRequest?.path?.trim() + if (path) { + const segments = path.split('/').filter(Boolean) + const resource = segments.at(-2) + if (resource) { + return resource + .split(/[-_]/) + .map((part) => part.charAt(0).toUpperCase() + part.slice(1)) + .join('') + } + } + return 'Kubernetes action' + } + + return ( + activity.result?.functionCall?.name?.trim() || + activity.prompt?.trim() || + 'Action' + ) +} + +export function getActionSubtitle( + activity: WorkbenchJobActionFragment +): string { + if (activity.type === WorkbenchJobActivityType.Kubernetes) { + const kube = activity.result?.kubeRequest + return ( + [kube?.handle, kube?.path].filter(Boolean).join(' · ') || 'Kubernetes' + ) + } + + const toolType = activity.result?.functionCall?.tool?.tool + if (toolType) return getWorkbenchToolLabel(toolType) + + return activity.result?.functionCall?.name?.trim() || 'Function' +} + +export function getActionIcon(activity: WorkbenchJobActionFragment) { + if (activity.type === WorkbenchJobActivityType.Kubernetes) { + return null + } + + const toolType = activity.result?.functionCall?.tool?.tool + if (!toolType) return null + + return ( + + ) +} + +export function formatActionJson(value: unknown): string { + if (value == null) return '' + if (typeof value === 'string') { + try { + return JSON.stringify(JSON.parse(value), null, 2) + } catch { + return value + } + } + try { + return JSON.stringify(value, null, 2) + } catch { + return String(value) + } +} + +export function getActionInputJson( + activity: WorkbenchJobActionFragment +): string { + const input = activity.result?.functionCall?.input + if (input != null) return formatActionJson(input) + + const kube = activity.result?.kubeRequest + if (kube) { + return formatActionJson({ + handle: kube.handle, + method: kube.method, + path: kube.path, + body: kube.body, + queryParams: kube.queryParams, + contentType: kube.contentType, + }) + } + + return '' +} + +export function getActionResultJson( + activity: WorkbenchJobActionFragment +): string { + if (activity.result?.error?.trim()) { + return activity.result.error.trim() + } + if (activity.result?.output != null) { + return formatActionJson(activity.result.output) + } + return '' +} + +export function mapActionNodes( + edges: Nullable }>[]> +): WorkbenchJobActionFragment[] { + return (edges?.map((edge) => edge?.node).filter(isNonNullable) ?? []).filter( + isWorkbenchJobAction + ) +} From 8db02ce8a2d4b034457d8e129bbb520b34cd8433 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Mon, 27 Jul 2026 14:08:32 +0200 Subject: [PATCH 19/50] fix tool form --- .../tools/WorkbenchToolCreateOrEdit.tsx | 18 +++++++++++++++++- .../workbenches/tools/WorkbenchToolForm.tsx | 16 ++++++++++++---- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/assets/src/components/workbenches/tools/WorkbenchToolCreateOrEdit.tsx b/assets/src/components/workbenches/tools/WorkbenchToolCreateOrEdit.tsx index cfb5b2d532..02015a607d 100644 --- a/assets/src/components/workbenches/tools/WorkbenchToolCreateOrEdit.tsx +++ b/assets/src/components/workbenches/tools/WorkbenchToolCreateOrEdit.tsx @@ -320,7 +320,23 @@ function formStateToAttributes( ...base, ...cloudConnectionPatch, ...scmPatch, - configuration: { [configKey]: sanitized }, + configuration: { + [configKey]: coerceConfigurationJsonFields(sanitized), + }, + } +} + +function coerceConfigurationJsonFields>( + config: T +): T { + if (!('inputSchema' in config)) return config + + const inputSchema = config.inputSchema + if (inputSchema == null || typeof inputSchema === 'string') return config + + return { + ...config, + inputSchema: JSON.stringify(inputSchema), } } diff --git a/assets/src/components/workbenches/tools/WorkbenchToolForm.tsx b/assets/src/components/workbenches/tools/WorkbenchToolForm.tsx index ecb3bea804..5bcb522f81 100644 --- a/assets/src/components/workbenches/tools/WorkbenchToolForm.tsx +++ b/assets/src/components/workbenches/tools/WorkbenchToolForm.tsx @@ -519,6 +519,14 @@ function ToolAccessPolicyStep({ ) } +function normalizeJsonField( + value: Nullable | string> +): string | undefined { + if (value == null || value === '') return undefined + if (typeof value === 'string') return value + return JSON.stringify(value, null, 2) +} + // done this way so TS will catch new tool types that aren't fully implemented yet /** Build initial form configuration from fragment data. Keyed by configurable tool type. */ export const INITIAL_TOOL_CONFIG_BY_TYPE: { @@ -575,7 +583,7 @@ export const INITIAL_TOOL_CONFIG_BY_TYPE: { WorkbenchToolHttpMethod.Get, body: body ?? undefined, headers: headers?.filter(isNonNullable), - inputSchema: inputSchema ?? undefined, + inputSchema: normalizeJsonField(inputSchema), }, } }, @@ -708,7 +716,7 @@ export const INITIAL_TOOL_CONFIG_BY_TYPE: { lambda: { lambdaArn: lambdaArn ?? '', description: description ?? '', - inputSchema: inputSchema ?? undefined, + inputSchema: normalizeJsonField(inputSchema), }, } }, @@ -718,7 +726,7 @@ export const INITIAL_TOOL_CONFIG_BY_TYPE: { cloudRun: { identifier: identifier ?? '', description: description ?? '', - inputSchema: inputSchema ?? undefined, + inputSchema: normalizeJsonField(inputSchema), }, } }, @@ -728,7 +736,7 @@ export const INITIAL_TOOL_CONFIG_BY_TYPE: { azureFunction: { identifier: identifier ?? '', description: description ?? '', - inputSchema: inputSchema ?? undefined, + inputSchema: normalizeJsonField(inputSchema), }, } }, From 1c86a2c232b738910a9e02336568159740e7a41a Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Mon, 27 Jul 2026 14:17:03 +0200 Subject: [PATCH 20/50] update action buttons --- .../job/WorkbenchJobActionDetail.tsx | 185 +++++++++--------- 1 file changed, 88 insertions(+), 97 deletions(-) diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx index dd96fba476..39190b5e04 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx @@ -60,103 +60,98 @@ export function WorkbenchJobActionDetail({ return ( - - - - Back to all actions - + + Back to all actions + + - } + css={{ + flexShrink: 0, + border: theme.borders['fill-two'], + backgroundColor: 'transparent', + }} + /> + - } - css={{ - flexShrink: 0, - border: theme.borders['fill-two'], - backgroundColor: 'transparent', - }} - /> - - - {needsApproval && ( - } - > - Pending approval - - )} + /> + {needsApproval && ( + } + > + Pending approval + + )} + - {error && } + {error && } - {!!inputJson && ( - + INPUT + - INPUT - - {inputJson} - - - )} + {inputJson} + + + )} - {!!resultJson && ( - + + {activity.status === WorkbenchJobActivityStatus.Failed + ? 'ERROR' + : activity.status === WorkbenchJobActivityStatus.Cancelled + ? 'REASON' + : 'RESULT'} + + - - {activity.status === WorkbenchJobActivityStatus.Failed - ? 'ERROR' - : activity.status === WorkbenchJobActivityStatus.Cancelled - ? 'REASON' - : 'RESULT'} - - - {resultJson} - - - )} - + {resultJson} + + + )} {needsApproval && ( - + - + )} ) @@ -197,8 +191,6 @@ const DetailSC = styled.div(({ theme }) => ({ display: 'flex', flexDirection: 'column', gap: theme.spacing.large, - minHeight: '100%', - flex: 1, })) const BackBtnSC = styled.button(({ theme }) => ({ @@ -207,15 +199,14 @@ const BackBtnSC = styled.button(({ theme }) => ({ display: 'inline-flex', alignItems: 'center', gap: theme.spacing.xsmall, - color: theme.colors['text-light'], + color: theme.colors['text-xlight'], width: 'fit-content', '&:hover': { color: theme.colors.text }, })) -const FooterSC = styled.div(({ theme }) => ({ +const ActionsRowSC = styled.div({ display: 'flex', - gap: theme.spacing.small, - marginTop: 'auto', - paddingTop: theme.spacing.medium, - borderTop: theme.borders.default, -})) + alignItems: 'center', + justifyContent: 'space-between', + width: '100%', +}) From f78c536594e651ce100c1ca9a90b2e033c863cd9 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Mon, 27 Jul 2026 14:44:21 +0200 Subject: [PATCH 21/50] add status chip --- .../job/WorkbenchJobActionDetail.tsx | 55 ++++++++++++++++--- 1 file changed, 46 insertions(+), 9 deletions(-) diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx index 39190b5e04..362f22026d 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx @@ -3,9 +3,11 @@ import { Button, Chip, Code, + FailedFilledIcon, Flex, IconFrame, KubernetesIcon, + StatusOkIcon, WarningIcon, } from '@pluralsh/design-system' import { GqlError } from 'components/utils/Alert' @@ -99,15 +101,7 @@ export function WorkbenchJobActionDetail({ css={{ minWidth: 0 }} /> - {needsApproval && ( - } - > - Pending approval - - )} + {error && } @@ -187,6 +181,49 @@ export function WorkbenchJobActionDetail({ ) } +function ActionStatusChip({ + status, +}: { + status: Nullable +}) { + switch (status) { + case WorkbenchJobActivityStatus.NeedsApproval: + return ( + } + > + Pending approval + + ) + case WorkbenchJobActivityStatus.Failed: + return ( + } + > + Failed + + ) + case WorkbenchJobActivityStatus.Successful: + return ( + } + > + Succeeded + + ) + case WorkbenchJobActivityStatus.Cancelled: + return Denied + default: + return null + } +} + const DetailSC = styled.div(({ theme }) => ({ display: 'flex', flexDirection: 'column', From a2724c67b4a2f8d2b013106bc7156929836f5d64 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Mon, 27 Jul 2026 14:50:18 +0200 Subject: [PATCH 22/50] add deny modal with optional reason field --- .../job/WorkbenchJobActionDetail.tsx | 84 +++++++++++++++++-- 1 file changed, 75 insertions(+), 9 deletions(-) diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx index 362f22026d..bbd65acd78 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx @@ -5,8 +5,11 @@ import { Code, FailedFilledIcon, Flex, + FormField, IconFrame, + Input, KubernetesIcon, + Modal, StatusOkIcon, WarningIcon, } from '@pluralsh/design-system' @@ -19,7 +22,7 @@ import { WorkbenchJobActionFragment, WorkbenchJobActivityStatus, } from 'generated/graphql' -import { useState } from 'react' +import { FormEvent, useState } from 'react' import styled, { useTheme } from 'styled-components' import { getActionIcon, @@ -38,6 +41,8 @@ export function WorkbenchJobActionDetail({ }) { const theme = useTheme() const [error, setError] = useState(null) + const [denyOpen, setDenyOpen] = useState(false) + const [denyReason, setDenyReason] = useState('') const needsApproval = activity.status === WorkbenchJobActivityStatus.NeedsApproval const icon = getActionIcon(activity) @@ -52,14 +57,32 @@ export function WorkbenchJobActionDetail({ refetchQueries: ['WorkbenchJobActions', 'WorkbenchJobPendingActions'], }) - const [reject, { loading: rejecting }] = + const [reject, { loading: rejecting, error: rejectError }] = useRejectWorkbenchJobActivityMutation({ - variables: { id: activity.id }, - onCompleted: onBack, - onError: (err) => setError(err.message), + onCompleted: () => { + setDenyOpen(false) + setDenyReason('') + onBack() + }, refetchQueries: ['WorkbenchJobActions', 'WorkbenchJobPendingActions'], }) + const closeDenyModal = () => { + if (rejecting) return + setDenyOpen(false) + setDenyReason('') + } + + const onDeny = (e?: FormEvent) => { + e?.preventDefault() + reject({ + variables: { + id: activity.id, + reason: denyReason.trim() || undefined, + }, + }) + } + return ( { setError(null) - reject() + setDenyOpen(true) }} css={{ color: theme.colors['text-danger-light'], @@ -167,7 +189,7 @@ export function WorkbenchJobActionDetail({ )} + + + + + + } + > + + {rejectError && } + + setDenyReason(e.target.value)} + placeholder="Explain why this action was denied" + /> + + + ) } From 032513f3e4bf2fa6e105f545055df3f229dcf9da Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Mon, 27 Jul 2026 14:53:06 +0200 Subject: [PATCH 23/50] show action tab only if not empty --- .../workbench/job/WorkbenchJobPanel.tsx | 31 ++++++++++++++++--- assets/src/generated/graphql.ts | 19 ++++++++++-- .../generated/persisted-queries/client.json | 4 +-- assets/src/graph/workbench.graphql | 17 +++++++++- 4 files changed, 62 insertions(+), 9 deletions(-) diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobPanel.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobPanel.tsx index 08804084fa..793f5eea94 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobPanel.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobPanel.tsx @@ -27,6 +27,7 @@ import { useWorkbenchJobActivitiesQuery, useWorkbenchJobPendingActionsQuery, useWorkbenchJobQuery, + WorkbenchJobActivityType, WorkbenchJobFragment, } from 'generated/graphql' import { isEmpty, isNil, uniqBy } from 'lodash' @@ -156,19 +157,40 @@ export function WorkbenchJobPanelContent() { return [...agentRunDrafts, ...patchPrDrafts] }, [activities, pullRequests]) const hasDraftPrsAwaitingApproval = draftPrs.length > 0 + const actionTypes = new Set([ + WorkbenchJobActivityType.Function, + WorkbenchJobActivityType.Kubernetes, + ]) + const hasActions = + (pendingActionsData?.workbenchJob?.functionActions?.edges ?? []).some( + (edge) => !!edge?.node?.id + ) || + (pendingActionsData?.workbenchJob?.kubernetesActions?.edges ?? []).some( + (edge) => !!edge?.node?.id + ) const hasActionsAwaitingApproval = ( - pendingActionsData?.workbenchJob?.activities?.edges ?? [] - ).some((edge) => !!edge?.node?.id) + pendingActionsData?.workbenchJob?.pendingActions?.edges ?? [] + ).some( + (edge) => + !!edge?.node?.id && !!edge.node.type && actionTypes.has(edge.node.type) + ) const tabs = useMemo( () => getPanelTabs( job, hasDraftPrsAwaitingApproval, + hasActions, hasActionsAwaitingApproval, isLoading ), - [hasActionsAwaitingApproval, hasDraftPrsAwaitingApproval, isLoading, job] + [ + hasActions, + hasActionsAwaitingApproval, + hasDraftPrsAwaitingApproval, + isLoading, + job, + ] ) useEffect(() => { @@ -329,6 +351,7 @@ const PanelSubTabSC = styled(SubTab)(({ theme, active }) => ({ const getPanelTabs = ( job: Nullable, hasDraftPrsAwaitingApproval: boolean, + hasActions: boolean, hasActionsAwaitingApproval: boolean, isLoading: boolean ) => @@ -358,7 +381,7 @@ const getPanelTabs = ( label: 'Usage', icon: , }, - { + hasActions && { label: 'Actions', icon: , showDot: hasActionsAwaitingApproval, diff --git a/assets/src/generated/graphql.ts b/assets/src/generated/graphql.ts index ca1a72d0ad..d774084159 100644 --- a/assets/src/generated/graphql.ts +++ b/assets/src/generated/graphql.ts @@ -21446,7 +21446,7 @@ export type WorkbenchJobPendingActionsQueryVariables = Exact<{ }>; -export type WorkbenchJobPendingActionsQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, activities?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string } | null } | null> | null } | null } | null }; +export type WorkbenchJobPendingActionsQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, pendingActions?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null } | null } | null> | null } | null, functionActions?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string } | null } | null> | null } | null, kubernetesActions?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string } | null } | null> | null } | null } | null }; export type WorkbenchJobActionFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null }; @@ -45383,7 +45383,22 @@ export const WorkbenchJobPendingActionsDocument = gql` query WorkbenchJobPendingActions($id: ID!, $first: Int = 1) { workbenchJob(id: $id) { id - activities(first: $first, status: NEEDS_APPROVAL) { + pendingActions: activities(first: $first, status: NEEDS_APPROVAL) { + edges { + node { + id + type + } + } + } + functionActions: activities(first: $first, type: FUNCTION) { + edges { + node { + id + } + } + } + kubernetesActions: activities(first: $first, type: KUBERNETES) { edges { node { id diff --git a/assets/src/generated/persisted-queries/client.json b/assets/src/generated/persisted-queries/client.json index 92d7c6ddb2..5f9956dfca 100644 --- a/assets/src/generated/persisted-queries/client.json +++ b/assets/src/generated/persisted-queries/client.json @@ -2022,10 +2022,10 @@ "name": "WorkbenchJobActivities", "body": "query WorkbenchJobActivities($id: ID!) {\n workbenchJob(id: $id) {\n id\n status\n prompt\n workbench {\n id\n __typename\n }\n referencedJob {\n id\n prompt\n status\n workbench {\n id\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n __typename\n }\n activities(first: 100) {\n edges {\n node {\n ...WorkbenchJobActivity\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" }, - "sha256:51ecdb714c1a875ca724c5213bf6549282f178da1877e8ae8c4a07a70fe9a2e1": { + "sha256:02b7f31932000cdd314894a1a1b314741bd2aeaf161b3ddbfd5261dabef07c7d": { "type": "query", "name": "WorkbenchJobPendingActions", - "body": "query WorkbenchJobPendingActions($id: ID!, $first: Int = 1) {\n workbenchJob(id: $id) {\n id\n activities(first: $first, status: NEEDS_APPROVAL) {\n edges {\n node {\n id\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}" + "body": "query WorkbenchJobPendingActions($id: ID!, $first: Int = 1) {\n workbenchJob(id: $id) {\n id\n pendingActions: activities(first: $first, status: NEEDS_APPROVAL) {\n edges {\n node {\n id\n type\n __typename\n }\n __typename\n }\n __typename\n }\n functionActions: activities(first: $first, type: FUNCTION) {\n edges {\n node {\n id\n __typename\n }\n __typename\n }\n __typename\n }\n kubernetesActions: activities(first: $first, type: KUBERNETES) {\n edges {\n node {\n id\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}" }, "sha256:2790a0f3390eae583a000125149f549afad043d615fdea4c0a0a1080472d9d7b": { "type": "query", diff --git a/assets/src/graph/workbench.graphql b/assets/src/graph/workbench.graphql index dfe62bcc60..45ef727468 100644 --- a/assets/src/graph/workbench.graphql +++ b/assets/src/graph/workbench.graphql @@ -1237,7 +1237,22 @@ query WorkbenchJobActivities($id: ID!) { query WorkbenchJobPendingActions($id: ID!, $first: Int = 1) { workbenchJob(id: $id) { id - activities(first: $first, status: NEEDS_APPROVAL) { + pendingActions: activities(first: $first, status: NEEDS_APPROVAL) { + edges { + node { + id + type + } + } + } + functionActions: activities(first: $first, type: FUNCTION) { + edges { + node { + id + } + } + } + kubernetesActions: activities(first: $first, type: KUBERNETES) { edges { node { id From 2220bedc3a425b3b57a2b70c80725f37697b8304 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Mon, 27 Jul 2026 14:55:04 +0200 Subject: [PATCH 24/50] update styling --- .../workbenches/workbench/job/WorkbenchJobActions.tsx | 2 +- .../workbenches/workbench/job/workbenchJobActionsUtils.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobActions.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobActions.tsx index a95f246adf..14dd80f39c 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobActions.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobActions.tsx @@ -84,7 +84,7 @@ export function WorkbenchJobActions({ jobId }: { jobId: string }) { letterSpacing: '0.5px', }} > - {section.label} ({section.count}) + {section.label} {section.count} diff --git a/assets/src/components/workbenches/workbench/job/workbenchJobActionsUtils.tsx b/assets/src/components/workbenches/workbench/job/workbenchJobActionsUtils.tsx index beba91f733..63793b2018 100644 --- a/assets/src/components/workbenches/workbench/job/workbenchJobActionsUtils.tsx +++ b/assets/src/components/workbenches/workbench/job/workbenchJobActionsUtils.tsx @@ -136,7 +136,7 @@ export function getActionDetailButtonLabel( case WorkbenchJobActivityStatus.Failed: return 'View error' case WorkbenchJobActivityStatus.Successful: - return 'View json' + return 'View JSON' case WorkbenchJobActivityStatus.Cancelled: return 'View reason' default: From 29260db72cdc7b5eeafbf7d7a74df28de137f8ea Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Mon, 27 Jul 2026 14:56:05 +0200 Subject: [PATCH 25/50] update styling --- .../workbenches/workbench/job/WorkbenchJobActionCard.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionCard.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionCard.tsx index c2efcbed3a..20477ad3ed 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionCard.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionCard.tsx @@ -70,6 +70,5 @@ const CardSC = styled.div(({ theme }) => ({ gap: theme.spacing.medium, padding: theme.spacing.medium, borderRadius: theme.borderRadiuses.large, - background: theme.colors['fill-two'], - border: theme.borders['fill-two'], + background: theme.colors['fill-one'], })) From e21a27f402794bbba0025aaf9164b45fed225869 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Mon, 27 Jul 2026 14:57:12 +0200 Subject: [PATCH 26/50] update icon --- .../workbenches/workbench/job/WorkbenchJobActionDetail.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx index bbd65acd78..2c65b1b13b 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx @@ -1,5 +1,4 @@ import { - ArrowLeftIcon, Button, Chip, Code, @@ -10,6 +9,7 @@ import { Input, KubernetesIcon, Modal, + ReturnIcon, StatusOkIcon, WarningIcon, } from '@pluralsh/design-system' @@ -89,7 +89,7 @@ export function WorkbenchJobActionDetail({ type="button" onClick={onBack} > - + Back to all actions From 7cf6469b47a8591326473f16786e1d37ad493365 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Mon, 27 Jul 2026 15:02:16 +0200 Subject: [PATCH 27/50] handle all statuses --- .../job/WorkbenchJobActionDetail.tsx | 21 ++++++++++++++++++ .../job/workbenchJobActionsUtils.tsx | 22 ++++++++++++++++++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx index 2c65b1b13b..d7cfa9edee 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx @@ -10,6 +10,8 @@ import { KubernetesIcon, Modal, ReturnIcon, + SpinnerAlt, + StatusIpIcon, StatusOkIcon, WarningIcon, } from '@pluralsh/design-system' @@ -263,6 +265,25 @@ function ActionStatusChip({ Pending approval ) + case WorkbenchJobActivityStatus.Pending: + return ( + } + > + Pending + + ) + case WorkbenchJobActivityStatus.Running: + return ( + } + > + Running + + ) case WorkbenchJobActivityStatus.Failed: return ( = { awaiting: [], + pending: [], + running: [], failed: [], succeeded: [], denied: [], @@ -89,6 +96,16 @@ export function groupWorkbenchJobActions( icon: WarningIcon, iconColor: theme.colors['icon-warning'], }, + pending: { + label: 'Pending', + icon: StatusIpIcon, + iconColor: theme.colors['icon-light'], + }, + running: { + label: 'Running', + icon: StatusIpIcon, + iconColor: theme.colors['icon-light'], + }, failed: { label: 'Failed', icon: CancelledFilledIcon, @@ -139,6 +156,9 @@ export function getActionDetailButtonLabel( return 'View JSON' case WorkbenchJobActivityStatus.Cancelled: return 'View reason' + case WorkbenchJobActivityStatus.Pending: + case WorkbenchJobActivityStatus.Running: + return 'View details' default: return 'View details' } From 53360c86a5279afe82c1528a0c7fe76cdfe0eed4 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Mon, 27 Jul 2026 15:46:02 +0200 Subject: [PATCH 28/50] add cards in chat --- .../job/WorkbenchJobActionDetail.tsx | 71 +-- .../job/WorkbenchJobActionStatusChip.tsx | 71 +++ .../workbench/job/WorkbenchJobActivity.tsx | 7 + .../job/WorkbenchJobInlineActionCard.tsx | 408 ++++++++++++++++++ .../job/workbenchJobActionsUtils.tsx | 20 + assets/src/generated/graphql.ts | 44 +- .../generated/persisted-queries/client.json | 28 +- assets/src/graph/workbench.graphql | 22 + 8 files changed, 577 insertions(+), 94 deletions(-) create mode 100644 assets/src/components/workbenches/workbench/job/WorkbenchJobActionStatusChip.tsx create mode 100644 assets/src/components/workbenches/workbench/job/WorkbenchJobInlineActionCard.tsx diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx index d7cfa9edee..9f07ce9021 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx @@ -1,8 +1,6 @@ import { Button, - Chip, Code, - FailedFilledIcon, Flex, FormField, IconFrame, @@ -10,10 +8,6 @@ import { KubernetesIcon, Modal, ReturnIcon, - SpinnerAlt, - StatusIpIcon, - StatusOkIcon, - WarningIcon, } from '@pluralsh/design-system' import { GqlError } from 'components/utils/Alert' import { StackedText } from 'components/utils/table/StackedText' @@ -33,6 +27,7 @@ import { getActionSubtitle, getActionTitle, } from './workbenchJobActionsUtils' +import { WorkbenchJobActionStatusChip } from './WorkbenchJobActionStatusChip' export function WorkbenchJobActionDetail({ activity, @@ -126,7 +121,7 @@ export function WorkbenchJobActionDetail({ css={{ minWidth: 0 }} /> - + {error && } @@ -249,68 +244,6 @@ export function WorkbenchJobActionDetail({ ) } -function ActionStatusChip({ - status, -}: { - status: Nullable -}) { - switch (status) { - case WorkbenchJobActivityStatus.NeedsApproval: - return ( - } - > - Pending approval - - ) - case WorkbenchJobActivityStatus.Pending: - return ( - } - > - Pending - - ) - case WorkbenchJobActivityStatus.Running: - return ( - } - > - Running - - ) - case WorkbenchJobActivityStatus.Failed: - return ( - } - > - Failed - - ) - case WorkbenchJobActivityStatus.Successful: - return ( - } - > - Succeeded - - ) - case WorkbenchJobActivityStatus.Cancelled: - return Denied - default: - return null - } -} - const DetailSC = styled.div(({ theme }) => ({ display: 'flex', flexDirection: 'column', diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionStatusChip.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionStatusChip.tsx new file mode 100644 index 0000000000..3fd4d022da --- /dev/null +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionStatusChip.tsx @@ -0,0 +1,71 @@ +import { + Chip, + FailedFilledIcon, + SpinnerAlt, + StatusIpIcon, + StatusOkIcon, + WarningIcon, +} from '@pluralsh/design-system' +import { WorkbenchJobActivityStatus } from 'generated/graphql' + +export function WorkbenchJobActionStatusChip({ + status, +}: { + status: Nullable +}) { + switch (status) { + case WorkbenchJobActivityStatus.NeedsApproval: + return ( + } + > + Pending approval + + ) + case WorkbenchJobActivityStatus.Pending: + return ( + } + > + Pending + + ) + case WorkbenchJobActivityStatus.Running: + return ( + } + > + Running + + ) + case WorkbenchJobActivityStatus.Failed: + return ( + } + > + Failed + + ) + case WorkbenchJobActivityStatus.Successful: + return ( + } + > + Succeeded + + ) + case WorkbenchJobActivityStatus.Cancelled: + return Denied + default: + return null + } +} diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobActivity.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobActivity.tsx index f7fa065ba1..8f964460d1 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobActivity.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobActivity.tsx @@ -56,6 +56,7 @@ import { ExpandableUserPrompt, } from './WorkbenchJobActivityResults' import { WorkbenchJobCanvas } from './WorkbenchJobCanvas' +import { WorkbenchJobInlineActionCard } from './WorkbenchJobInlineActionCard' export function WorkbenchJobActivity({ isOpen, @@ -76,6 +77,12 @@ export function WorkbenchJobActivity({ const { id, status, type, prompt, agentRun, result } = activity const isRunning = isJobRunning(status) + if ( + type === WorkbenchJobActivityType.Function || + type === WorkbenchJobActivityType.Kubernetes + ) + return + if (type === WorkbenchJobActivityType.Conclusion) return (
diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobInlineActionCard.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobInlineActionCard.tsx new file mode 100644 index 0000000000..5204ba4065 --- /dev/null +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobInlineActionCard.tsx @@ -0,0 +1,408 @@ +import { + Button, + CaretDownIcon, + Code, + FailedFilledIcon, + Flex, + FormField, + IconFrame, + Input, + KubernetesIcon, + Modal, + StatusOkIcon, +} from '@pluralsh/design-system' +import { GqlError } from 'components/utils/Alert' +import { StackedText } from 'components/utils/table/StackedText' +import { CaptionP } from 'components/utils/typography/Text' +import { + useApproveWorkbenchJobActivityMutation, + useRejectWorkbenchJobActivityMutation, + WorkbenchJobActivityFragment, + WorkbenchJobActivityStatus, +} from 'generated/graphql' +import { FormEvent, useState } from 'react' +import styled, { DefaultTheme, useTheme } from 'styled-components' +import { formatDateTime } from 'utils/datetime' +import { + getActionDescription, + getActionIcon, + getActionInputJson, + getActionResultJson, + getActionSubtitle, + getActionTitle, +} from './workbenchJobActionsUtils' +import { WorkbenchJobActionStatusChip } from './WorkbenchJobActionStatusChip' + +export function WorkbenchJobInlineActionCard({ + activity, +}: { + activity: WorkbenchJobActivityFragment +}) { + const theme = useTheme() + const [expanded, setExpanded] = useState( + activity.status === WorkbenchJobActivityStatus.NeedsApproval + ) + const [error, setError] = useState(null) + const [denyOpen, setDenyOpen] = useState(false) + const [denyReason, setDenyReason] = useState('') + const needsApproval = + activity.status === WorkbenchJobActivityStatus.NeedsApproval + const isRunning = + activity.status === WorkbenchJobActivityStatus.Pending || + activity.status === WorkbenchJobActivityStatus.Running + const isTerminal = + activity.status === WorkbenchJobActivityStatus.Successful || + activity.status === WorkbenchJobActivityStatus.Failed || + activity.status === WorkbenchJobActivityStatus.Cancelled + const inputJson = getActionInputJson(activity) + const resultJson = getActionResultJson(activity) + const icon = getActionIcon(activity) + + const refetchQueries = [ + 'WorkbenchJobActivities', + 'WorkbenchJobActions', + 'WorkbenchJobPendingActions', + ] + const [approve, { loading: approving }] = + useApproveWorkbenchJobActivityMutation({ + variables: { id: activity.id }, + onError: (err) => setError(err.message), + refetchQueries, + }) + const [reject, { loading: rejecting, error: rejectError }] = + useRejectWorkbenchJobActivityMutation({ + onCompleted: () => { + setDenyOpen(false) + setDenyReason('') + }, + refetchQueries, + }) + + const closeDenyModal = () => { + if (rejecting) return + setDenyOpen(false) + setDenyReason('') + } + + const onDeny = (e?: FormEvent) => { + e?.preventDefault() + reject({ + variables: { + id: activity.id, + reason: denyReason.trim() || undefined, + }, + }) + } + + return ( + + + + } + css={{ + flexShrink: 0, + border: theme.borders.default, + backgroundColor: 'transparent', + }} + /> + + + + + {!expanded && ( + + )} + {(!isTerminal || expanded) && ( + setExpanded((value) => !value)} + $expanded={expanded} + > + + + )} + + + + {expanded ? ( + <> + {error && } + {!!inputJson && ( + + INPUT + + {inputJson} + + + )} + {!!resultJson && ( + + + {activity.status === WorkbenchJobActivityStatus.Failed + ? 'ERROR' + : activity.status === WorkbenchJobActivityStatus.Cancelled + ? 'REASON' + : 'RESULT'} + + + {resultJson} + + + )} + {needsApproval && ( + + + + + )} + + ) : ( + <> + {getActionDescription(activity)} + {!!activity.insertedAt && ( + + Start time + + {formatDateTime( + activity.insertedAt, + 'YYYY-MM-DD HH:mm:ss [UTC]', + false, + true + )} + + + )} + + )} + + + + + + } + > + + {rejectError && } + + setDenyReason(e.target.value)} + placeholder="Explain why this action was denied" + /> + + + + + ) +} + +function InlineActionStatus({ + activity, +}: { + activity: WorkbenchJobActivityFragment +}) { + if (activity.status === WorkbenchJobActivityStatus.Successful) + return ( + + ) + if (activity.status === WorkbenchJobActivityStatus.Failed) + return ( + + ) + + return +} + +function statusBorderColor( + theme: DefaultTheme, + status: WorkbenchJobActivityStatus +) { + switch (status) { + case WorkbenchJobActivityStatus.NeedsApproval: + return theme.colors['border-warning'] + case WorkbenchJobActivityStatus.Pending: + case WorkbenchJobActivityStatus.Running: + return theme.colors['border-info'] + case WorkbenchJobActivityStatus.Successful: + return theme.colors['border-success'] + case WorkbenchJobActivityStatus.Failed: + return theme.colors['border-danger'] + default: + return theme.colors.border + } +} + +const CardSC = styled.div<{ $status: WorkbenchJobActivityStatus }>( + ({ theme, $status }) => ({ + display: 'flex', + flexDirection: 'column', + gap: theme.spacing.medium, + width: '100%', + minWidth: 0, + padding: theme.spacing.medium, + border: theme.borders.default, + borderLeft: `2px solid ${statusBorderColor(theme, $status)}`, + borderRadius: theme.borderRadiuses.large, + background: theme.colors['fill-zero'], + overflow: 'hidden', + marginBottom: theme.spacing.small, + }) +) + +const HeaderSC = styled.div({ + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + gap: 16, + minWidth: 0, + width: '100%', +}) + +const HeaderActionsSC = styled.div({ + display: 'flex', + alignItems: 'center', + gap: 16, + flexShrink: 0, +}) + +const ExpandButtonSC = styled.button<{ $expanded: boolean }>( + ({ theme, $expanded }) => ({ + ...theme.partials.reset.button, + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + color: theme.colors['icon-light'], + transform: $expanded ? 'rotate(180deg)' : undefined, + transition: 'transform 150ms ease', + '&:hover': { color: theme.colors['icon-default'] }, + '&:focus-visible': { outline: theme.borders['outline-focused'] }, + }) +) + +const ActionData = styled.div(({ theme }) => ({ + display: 'flex', + flexDirection: 'column', + gap: theme.spacing.xxsmall, + minWidth: 0, + width: '100%', +})) + +const ApprovalActionsSC = styled.div({ + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + width: '100%', +}) + +const SummarySC = styled(CaptionP)(({ theme }) => ({ + color: theme.colors['text-xlight'], + overflow: 'hidden', + textOverflow: 'ellipsis', + whiteSpace: 'nowrap', +})) + +const TimeSC = styled.div(({ theme }) => ({ + ...theme.partials.text.caption, + display: 'flex', + alignItems: 'center', + gap: theme.spacing.xxsmall, + color: theme.colors['text-xlight'], + fontSize: 10, + strong: { + color: theme.colors['text-light'], + fontWeight: 400, + }, +})) diff --git a/assets/src/components/workbenches/workbench/job/workbenchJobActionsUtils.tsx b/assets/src/components/workbenches/workbench/job/workbenchJobActionsUtils.tsx index 15837b58eb..689b7a6d0f 100644 --- a/assets/src/components/workbenches/workbench/job/workbenchJobActionsUtils.tsx +++ b/assets/src/components/workbenches/workbench/job/workbenchJobActionsUtils.tsx @@ -206,6 +206,26 @@ export function getActionSubtitle( return activity.result?.functionCall?.name?.trim() || 'Function' } +export function getActionDescription( + activity: WorkbenchJobActionFragment +): string { + const tool = activity.result?.functionCall?.tool + const description = + tool?.configuration?.lambda?.description?.trim() || + tool?.configuration?.cloudRun?.description?.trim() || + tool?.configuration?.azureFunction?.description?.trim() + if (description) return description + + const output = activity.result?.output?.trim() + if (output && output !== 'waiting for user approval') return output + + const prompt = activity.prompt?.trim() + if (prompt && !prompt.toLowerCase().startsWith('function call:')) + return prompt + + return `${getActionTitle(activity)} action` +} + export function getActionIcon(activity: WorkbenchJobActionFragment) { if (activity.type === WorkbenchJobActivityType.Kubernetes) { return null diff --git a/assets/src/generated/graphql.ts b/assets/src/generated/graphql.ts index d774084159..ba0525bac6 100644 --- a/assets/src/generated/graphql.ts +++ b/assets/src/generated/graphql.ts @@ -21116,11 +21116,11 @@ export type WorkbenchCanvasBlockFragment = { __typename?: 'WorkbenchCanvasBlock' export type WorkbenchJobResultFragment = { __typename?: 'WorkbenchJobResult', id: string, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null, topology?: string | null, todos?: Array<{ __typename?: 'WorkbenchJobResultTodo', name?: string | null, description?: string | null, done?: boolean | null } | null> | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null }; -export type WorkbenchJobActivityResultFragment = { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null }; +export type WorkbenchJobActivityResultFragment = { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null }; -export type WorkbenchJobActivityFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null }; +export type WorkbenchJobActivityFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null }; -export type WorkbenchJobActivityWithThoughtsFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, thoughts?: Array<{ __typename?: 'WorkbenchJobThought', id: string, content?: string | null, toolName?: string | null, toolArgs?: Record | null, activity?: { __typename?: 'WorkbenchJobActivity', id: string } | null, attributes?: { __typename?: 'WorkbenchJobThoughtAttributes', logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, metrics?: Array<{ __typename?: 'WorkbenchJobActivityMetric', timestamp?: string | null, name?: string | null, value?: number | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null } | null } | null> | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null }; +export type WorkbenchJobActivityWithThoughtsFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, thoughts?: Array<{ __typename?: 'WorkbenchJobThought', id: string, content?: string | null, toolName?: string | null, toolArgs?: Record | null, activity?: { __typename?: 'WorkbenchJobActivity', id: string } | null, attributes?: { __typename?: 'WorkbenchJobThoughtAttributes', logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, metrics?: Array<{ __typename?: 'WorkbenchJobActivityMetric', timestamp?: string | null, name?: string | null, value?: number | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null } | null } | null> | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null }; export type WorkbenchJobProgressFragment = { __typename?: 'WorkbenchJobProgress', activityId?: string | null, tool?: string | null, text?: string | null, arguments?: Record | null }; @@ -21438,7 +21438,7 @@ export type WorkbenchJobActivitiesQueryVariables = Exact<{ }>; -export type WorkbenchJobActivitiesQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus, prompt?: string | null, workbench?: { __typename?: 'Workbench', id: string } | null, referencedJob?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, status: WorkbenchJobStatus, workbench?: { __typename?: 'Workbench', id: string } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null } | null } | null, activities?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null } | null> | null } | null } | null }; +export type WorkbenchJobActivitiesQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus, prompt?: string | null, workbench?: { __typename?: 'Workbench', id: string } | null, referencedJob?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, status: WorkbenchJobStatus, workbench?: { __typename?: 'Workbench', id: string } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null } | null } | null, activities?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null } | null> | null } | null } | null }; export type WorkbenchJobPendingActionsQueryVariables = Exact<{ id: Scalars['ID']['input']; @@ -21448,21 +21448,21 @@ export type WorkbenchJobPendingActionsQueryVariables = Exact<{ export type WorkbenchJobPendingActionsQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, pendingActions?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null } | null } | null> | null } | null, functionActions?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string } | null } | null> | null } | null, kubernetesActions?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string } | null } | null> | null } | null } | null }; -export type WorkbenchJobActionFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null }; +export type WorkbenchJobActionFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null }; export type WorkbenchJobActionsQueryVariables = Exact<{ id: Scalars['ID']['input']; }>; -export type WorkbenchJobActionsQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, activities?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null } | null } | null> | null } | null } | null }; +export type WorkbenchJobActionsQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, activities?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null } | null } | null> | null } | null } | null }; export type ApproveWorkbenchJobActivityMutationVariables = Exact<{ id: Scalars['ID']['input']; }>; -export type ApproveWorkbenchJobActivityMutation = { __typename?: 'RootMutationType', approveWorkbenchJobActivity?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null } | null }; +export type ApproveWorkbenchJobActivityMutation = { __typename?: 'RootMutationType', approveWorkbenchJobActivity?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null } | null }; export type RejectWorkbenchJobActivityMutationVariables = Exact<{ id: Scalars['ID']['input']; @@ -21470,7 +21470,7 @@ export type RejectWorkbenchJobActivityMutationVariables = Exact<{ }>; -export type RejectWorkbenchJobActivityMutation = { __typename?: 'RootMutationType', rejectWorkbenchJobActivity?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null } | null }; +export type RejectWorkbenchJobActivityMutation = { __typename?: 'RootMutationType', rejectWorkbenchJobActivity?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null } | null }; export type WorkbenchJobWhimseyTextQueryVariables = Exact<{ id: Scalars['ID']['input']; @@ -21491,7 +21491,7 @@ export type WorkbenchJobActivityQueryVariables = Exact<{ }>; -export type WorkbenchJobActivityQuery = { __typename?: 'RootQueryType', workbenchJobActivity?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, thoughts?: Array<{ __typename?: 'WorkbenchJobThought', id: string, content?: string | null, toolName?: string | null, toolArgs?: Record | null, activity?: { __typename?: 'WorkbenchJobActivity', id: string } | null, attributes?: { __typename?: 'WorkbenchJobThoughtAttributes', logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, metrics?: Array<{ __typename?: 'WorkbenchJobActivityMetric', timestamp?: string | null, name?: string | null, value?: number | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null } | null } | null> | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null }; +export type WorkbenchJobActivityQuery = { __typename?: 'RootQueryType', workbenchJobActivity?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, thoughts?: Array<{ __typename?: 'WorkbenchJobThought', id: string, content?: string | null, toolName?: string | null, toolArgs?: Record | null, activity?: { __typename?: 'WorkbenchJobActivity', id: string } | null, attributes?: { __typename?: 'WorkbenchJobThoughtAttributes', logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, metrics?: Array<{ __typename?: 'WorkbenchJobActivityMetric', timestamp?: string | null, name?: string | null, value?: number | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null } | null } | null> | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null }; export type WorkbenchToolsQueryVariables = Exact<{ first?: InputMaybe; @@ -21606,7 +21606,7 @@ export type CreateWorkbenchMessageMutationVariables = Exact<{ }>; -export type CreateWorkbenchMessageMutation = { __typename?: 'RootMutationType', createWorkbenchMessage?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null }; +export type CreateWorkbenchMessageMutation = { __typename?: 'RootMutationType', createWorkbenchMessage?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null }; export type CreateWorkbenchPromptMutationVariables = Exact<{ workbenchId: Scalars['ID']['input']; @@ -21749,7 +21749,7 @@ export type WorkbenchJobActivityDeltaSubscriptionVariables = Exact<{ }>; -export type WorkbenchJobActivityDeltaSubscription = { __typename?: 'RootSubscriptionType', workbenchJobActivityDelta?: { __typename?: 'WorkbenchJobActivityDelta', delta?: Delta | null, payload?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null } | null }; +export type WorkbenchJobActivityDeltaSubscription = { __typename?: 'RootSubscriptionType', workbenchJobActivityDelta?: { __typename?: 'WorkbenchJobActivityDelta', delta?: Delta | null, payload?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null } | null }; export type WorkbenchJobThoughtDeltaSubscriptionVariables = Exact<{ jobId: Scalars['ID']['input']; @@ -27124,6 +27124,17 @@ export const WorkbenchJobActivityResultFragmentDoc = gql` id name tool + configuration { + lambda { + description + } + cloudRun { + description + } + azureFunction { + description + } + } } } kubeRequest { @@ -27618,6 +27629,17 @@ export const WorkbenchJobActionFragmentDoc = gql` id name tool + configuration { + lambda { + description + } + cloudRun { + description + } + azureFunction { + description + } + } } } kubeRequest { diff --git a/assets/src/generated/persisted-queries/client.json b/assets/src/generated/persisted-queries/client.json index 5f9956dfca..90394ce86e 100644 --- a/assets/src/generated/persisted-queries/client.json +++ b/assets/src/generated/persisted-queries/client.json @@ -2017,30 +2017,30 @@ "name": "WorkbenchJobTracesTool", "body": "query WorkbenchJobTracesTool($id: ID!, $name: String, $arguments: Json) {\n workbenchJob(id: $id) {\n id\n tracesTool(name: $name, arguments: $arguments) {\n ...WorkbenchJobActivityTrace\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}" }, - "sha256:af4eb45dad97f25ee0925e80b2bbc3507ed0f9e0d7a8d549d20e003cdc5d90e3": { + "sha256:163039eb0bbc0ac2caaa8c3dea555d4521ca9a138b9df91dffc227ecb5ac4f26": { "type": "query", "name": "WorkbenchJobActivities", - "body": "query WorkbenchJobActivities($id: ID!) {\n workbenchJob(id: $id) {\n id\n status\n prompt\n workbench {\n id\n __typename\n }\n referencedJob {\n id\n prompt\n status\n workbench {\n id\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n __typename\n }\n activities(first: 100) {\n edges {\n node {\n ...WorkbenchJobActivity\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" + "body": "query WorkbenchJobActivities($id: ID!) {\n workbenchJob(id: $id) {\n id\n status\n prompt\n workbench {\n id\n __typename\n }\n referencedJob {\n id\n prompt\n status\n workbench {\n id\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n __typename\n }\n activities(first: 100) {\n edges {\n node {\n ...WorkbenchJobActivity\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" }, "sha256:02b7f31932000cdd314894a1a1b314741bd2aeaf161b3ddbfd5261dabef07c7d": { "type": "query", "name": "WorkbenchJobPendingActions", "body": "query WorkbenchJobPendingActions($id: ID!, $first: Int = 1) {\n workbenchJob(id: $id) {\n id\n pendingActions: activities(first: $first, status: NEEDS_APPROVAL) {\n edges {\n node {\n id\n type\n __typename\n }\n __typename\n }\n __typename\n }\n functionActions: activities(first: $first, type: FUNCTION) {\n edges {\n node {\n id\n __typename\n }\n __typename\n }\n __typename\n }\n kubernetesActions: activities(first: $first, type: KUBERNETES) {\n edges {\n node {\n id\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}" }, - "sha256:2790a0f3390eae583a000125149f549afad043d615fdea4c0a0a1080472d9d7b": { + "sha256:bfaf2eee8990f27c578fca68de3213f52ccdd1e5e065605fce0723d6ee2f1e9e": { "type": "query", "name": "WorkbenchJobActions", - "body": "query WorkbenchJobActions($id: ID!) {\n workbenchJob(id: $id) {\n id\n activities(first: 100) {\n edges {\n node {\n ...WorkbenchJobAction\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobAction on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n __typename\n }\n __typename\n}" + "body": "query WorkbenchJobActions($id: ID!) {\n workbenchJob(id: $id) {\n id\n activities(first: 100) {\n edges {\n node {\n ...WorkbenchJobAction\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobAction on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n __typename\n }\n __typename\n}" }, - "sha256:c59ebfc382f6e4855c9af2c089c6aea5c419958d3ae10207dbc692828e50836c": { + "sha256:09e4d26b175d7f45cebc00082da116e0ed37195c13cb0af43ac6bd1d35d074d8": { "type": "mutation", "name": "ApproveWorkbenchJobActivity", - "body": "mutation ApproveWorkbenchJobActivity($id: ID!) {\n approveWorkbenchJobActivity(id: $id) {\n ...WorkbenchJobAction\n __typename\n }\n}\n\nfragment WorkbenchJobAction on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n __typename\n }\n __typename\n}" + "body": "mutation ApproveWorkbenchJobActivity($id: ID!) {\n approveWorkbenchJobActivity(id: $id) {\n ...WorkbenchJobAction\n __typename\n }\n}\n\nfragment WorkbenchJobAction on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n __typename\n }\n __typename\n}" }, - "sha256:0f70ddf4c75b557a7942b65a338215357cab30f31c4f91ad2a6b73fc129dcb5d": { + "sha256:897762a23f2a3eb3921a6e8bb7c597f0ad24237d4aac08afe32b9ba588e21dea": { "type": "mutation", "name": "RejectWorkbenchJobActivity", - "body": "mutation RejectWorkbenchJobActivity($id: ID!, $reason: String) {\n rejectWorkbenchJobActivity(id: $id, reason: $reason) {\n ...WorkbenchJobAction\n __typename\n }\n}\n\nfragment WorkbenchJobAction on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n __typename\n }\n __typename\n}" + "body": "mutation RejectWorkbenchJobActivity($id: ID!, $reason: String) {\n rejectWorkbenchJobActivity(id: $id, reason: $reason) {\n ...WorkbenchJobAction\n __typename\n }\n}\n\nfragment WorkbenchJobAction on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n __typename\n }\n __typename\n}" }, "sha256:1367ab87fa3cb2913dca622df4606e0b0e2217e1abedeae5807cbcaf496114ac": { "type": "query", @@ -2052,10 +2052,10 @@ "name": "WorkbenchJobActivityWhimseyText", "body": "query WorkbenchJobActivityWhimseyText($id: ID!) {\n workbenchJobActivity(id: $id) {\n id\n whimsey\n __typename\n }\n}" }, - "sha256:583c4f2888306b3c8a53446fcd6106b71ab689f2682a6a697f5371a9b7802197": { + "sha256:2b8e8021b76be5f6942867fc0d3ec25020f75d8e31025cc2abbce4a0c94c4381": { "type": "query", "name": "WorkbenchJobActivity", - "body": "query WorkbenchJobActivity($id: ID!) {\n workbenchJobActivity(id: $id) {\n ...WorkbenchJobActivityWithThoughts\n __typename\n }\n}\n\nfragment WorkbenchJobActivityWithThoughts on WorkbenchJobActivity {\n ...WorkbenchJobActivity\n thoughts {\n ...WorkbenchJobThought\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}\n\nfragment WorkbenchJobThought on WorkbenchJobThought {\n id\n content\n toolName\n toolArgs\n activity {\n id\n __typename\n }\n attributes {\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n metrics {\n ...WorkbenchJobActivityMetric\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityMetric on WorkbenchJobActivityMetric {\n timestamp\n name\n value\n labels\n __typename\n}" + "body": "query WorkbenchJobActivity($id: ID!) {\n workbenchJobActivity(id: $id) {\n ...WorkbenchJobActivityWithThoughts\n __typename\n }\n}\n\nfragment WorkbenchJobActivityWithThoughts on WorkbenchJobActivity {\n ...WorkbenchJobActivity\n thoughts {\n ...WorkbenchJobThought\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}\n\nfragment WorkbenchJobThought on WorkbenchJobThought {\n id\n content\n toolName\n toolArgs\n activity {\n id\n __typename\n }\n attributes {\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n metrics {\n ...WorkbenchJobActivityMetric\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityMetric on WorkbenchJobActivityMetric {\n timestamp\n name\n value\n labels\n __typename\n}" }, "sha256:13ca0786672355db1deeaf3a29d7f2681d5d34cff26a07ae9509aff09dcebe94": { "type": "query", @@ -2127,10 +2127,10 @@ "name": "CancelWorkbenchJob", "body": "mutation CancelWorkbenchJob($jobId: ID!) {\n cancelWorkbenchJob(jobId: $jobId) {\n id\n status\n __typename\n }\n}" }, - "sha256:29eda20af7117dc04b8c898912de66a0e42df13f9c01c29d82cbefae569a4a3f": { + "sha256:a30b467674204111ca693c0f4a5c493b851e72eebc4e67931e10338e56cb51ef": { "type": "mutation", "name": "CreateWorkbenchMessage", - "body": "mutation CreateWorkbenchMessage($jobId: ID!, $attributes: WorkbenchMessageAttributes!) {\n createWorkbenchMessage(jobId: $jobId, attributes: $attributes) {\n ...WorkbenchJobActivity\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" + "body": "mutation CreateWorkbenchMessage($jobId: ID!, $attributes: WorkbenchMessageAttributes!) {\n createWorkbenchMessage(jobId: $jobId, attributes: $attributes) {\n ...WorkbenchJobActivity\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" }, "sha256:aec27aea620d94d724229e982ca5b06f6c40291b1488ebcb52c02655b989f534": { "type": "mutation", @@ -2222,10 +2222,10 @@ "name": "WorkbenchJobDelta", "body": "subscription WorkbenchJobDelta($id: ID, $workbenchId: ID) {\n workbenchJobDelta(id: $id, workbenchId: $workbenchId) {\n delta\n payload {\n ...WorkbenchJobTiny\n error\n result {\n ...WorkbenchJobResult\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobTiny on WorkbenchJob {\n id\n prompt\n status\n error\n insertedAt\n usage {\n ...WorkbenchJobUsageTiny\n __typename\n }\n modes {\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n user {\n id\n name\n profile\n __typename\n }\n workbench {\n id\n name\n __typename\n }\n alert {\n id\n state\n url\n __typename\n }\n issue {\n id\n status\n url\n __typename\n }\n pullRequests {\n ...WorkbenchJobPullRequest\n __typename\n }\n result {\n id\n conclusion\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n chatbotMessage {\n id\n channel\n message\n chatConnection {\n id\n name\n type\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobUsageTiny on WorkbenchJobUsage {\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchJobPullRequest on PullRequest {\n ...PullRequestBasic\n patch\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment WorkbenchJobResult on WorkbenchJobResult {\n id\n workingTheory\n criticism\n conclusion\n topology\n todos {\n ...WorkbenchJobResultTodo\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobResultTodo on WorkbenchJobResultTodo {\n name\n description\n done\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}" }, - "sha256:3adb8b27db468ab092f4d02850726ffb17c26cb3f4ef2f1affdafbba6173f9d5": { + "sha256:1438318fa0e0e5d2241c161d5dcd03f52db4ee7d359d1e69a48968dbc5b30c46": { "type": "subscription", "name": "WorkbenchJobActivityDelta", - "body": "subscription WorkbenchJobActivityDelta($jobId: ID!) {\n workbenchJobActivityDelta(jobId: $jobId) {\n delta\n payload {\n ...WorkbenchJobActivity\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" + "body": "subscription WorkbenchJobActivityDelta($jobId: ID!) {\n workbenchJobActivityDelta(jobId: $jobId) {\n delta\n payload {\n ...WorkbenchJobActivity\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" }, "sha256:84e024a73a5d1c07d1ce00b74b6addad8b4d6eb7a1d9daaa5afbe57abd3f5f9a": { "type": "subscription", diff --git a/assets/src/graph/workbench.graphql b/assets/src/graph/workbench.graphql index 45ef727468..972a4ffa1a 100644 --- a/assets/src/graph/workbench.graphql +++ b/assets/src/graph/workbench.graphql @@ -418,6 +418,17 @@ fragment WorkbenchJobActivityResult on WorkbenchJobActivityResult { id name tool + configuration { + lambda { + description + } + cloudRun { + description + } + azureFunction { + description + } + } } } kubeRequest { @@ -1279,6 +1290,17 @@ fragment WorkbenchJobAction on WorkbenchJobActivity { id name tool + configuration { + lambda { + description + } + cloudRun { + description + } + azureFunction { + description + } + } } } kubeRequest { From add858416015735e2d30fcec75e19fdaeb399de5 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Mon, 27 Jul 2026 15:54:13 +0200 Subject: [PATCH 29/50] update actions --- .../job/WorkbenchJobInlineActionCard.tsx | 35 +++++-------------- 1 file changed, 8 insertions(+), 27 deletions(-) diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobInlineActionCard.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobInlineActionCard.tsx index 5204ba4065..f2ab41292d 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobInlineActionCard.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobInlineActionCard.tsx @@ -50,10 +50,6 @@ export function WorkbenchJobInlineActionCard({ const isRunning = activity.status === WorkbenchJobActivityStatus.Pending || activity.status === WorkbenchJobActivityStatus.Running - const isTerminal = - activity.status === WorkbenchJobActivityStatus.Successful || - activity.status === WorkbenchJobActivityStatus.Failed || - activity.status === WorkbenchJobActivityStatus.Cancelled const inputJson = getActionInputJson(activity) const resultJson = getActionResultJson(activity) const icon = getActionIcon(activity) @@ -125,29 +121,14 @@ export function WorkbenchJobInlineActionCard({ - {!expanded && ( - - )} - {(!isTerminal || expanded) && ( - setExpanded((value) => !value)} - $expanded={expanded} - > - - - )} + setExpanded((value) => !value)} + $expanded={expanded} + > + + From c98c2b5aadf11a14ec3f7808be778ddf805e880b Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Mon, 27 Jul 2026 16:22:25 +0200 Subject: [PATCH 30/50] refactor --- .../workbench/job/WorkbenchJob.tsx | 8 ++-- .../job/WorkbenchJobActionDetail.tsx | 4 +- .../job/WorkbenchJobInlineActionCard.tsx | 5 +-- .../workbench/job/WorkbenchJobPanel.tsx | 37 ++++------------ .../job/useWorkbenchJobActionSummary.ts | 22 ++++++++++ .../workbench/job/workbenchJobResultUtils.ts | 6 ++- assets/src/generated/graphql.ts | 43 +++++++++---------- .../generated/persisted-queries/client.json | 6 +-- assets/src/graph/workbench.graphql | 3 +- 9 files changed, 68 insertions(+), 66 deletions(-) create mode 100644 assets/src/components/workbenches/workbench/job/useWorkbenchJobActionSummary.ts diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJob.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJob.tsx index 62663d146e..346e8d00a1 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJob.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJob.tsx @@ -9,6 +9,7 @@ import { RunStatusIcon } from 'components/ai/agent-runs/AgentRunInfoDisplays' import { POLL_INTERVAL } from 'components/cd/ContinuousDeployment' import { useSidePanelWidth } from 'components/layout/TopLevelSidePanel' import { GqlError } from 'components/utils/Alert' +import { prettifyPrompt } from 'components/utils/contentEditableChips' import { MetadataIcons } from 'components/utils/MetadataIcons' import { StretchedFlex } from 'components/utils/StretchedFlex' import { StackedText } from 'components/utils/table/StackedText' @@ -30,8 +31,8 @@ import { SaveWorkbenchPromptButton } from '../SaveWorkbenchPromptButton' import { WorkbenchJobActivities } from './WorkbenchJobActivities' import { isJobRunning } from './WorkbenchJobActivity' import { useWorkbenchJobPanel } from './WorkbenchJobPanel' -import { prettifyPrompt } from 'components/utils/contentEditableChips' import { hasWorkbenchJobPanelContent } from './workbenchJobResultUtils' +import { useWorkbenchJobActionSummary } from './useWorkbenchJobActionSummary' export function WorkbenchJob() { const theme = useTheme() @@ -49,7 +50,8 @@ export function WorkbenchJob() { const job = data?.workbenchJob const isLoading = loading && !job - const hasPanelContent = hasWorkbenchJobPanelContent(job) + const { hasActions } = useWorkbenchJobActionSummary(jobId) + const hasPanelContent = hasWorkbenchJobPanelContent(job, hasActions) const { isOpen, setOpen } = useWorkbenchJobPanel(!!job?.id && hasPanelContent) useSidePanelWidth({ @@ -194,7 +196,7 @@ export function WorkbenchJob() { workbenchName={workbenchName} /> - {!!job?.id && !isOpen && ( + {!!job?.id && hasPanelContent && !isOpen && ( setOpen(true)} diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx index 9f07ce9021..9627031da3 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx @@ -51,7 +51,7 @@ export function WorkbenchJobActionDetail({ variables: { id: activity.id }, onCompleted: onBack, onError: (err) => setError(err.message), - refetchQueries: ['WorkbenchJobActions', 'WorkbenchJobPendingActions'], + refetchQueries: ['WorkbenchJobActions', 'WorkbenchJobActionSummary'], }) const [reject, { loading: rejecting, error: rejectError }] = @@ -61,7 +61,7 @@ export function WorkbenchJobActionDetail({ setDenyReason('') onBack() }, - refetchQueries: ['WorkbenchJobActions', 'WorkbenchJobPendingActions'], + refetchQueries: ['WorkbenchJobActions', 'WorkbenchJobActionSummary'], }) const closeDenyModal = () => { diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobInlineActionCard.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobInlineActionCard.tsx index f2ab41292d..ac52cf5609 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobInlineActionCard.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobInlineActionCard.tsx @@ -47,9 +47,6 @@ export function WorkbenchJobInlineActionCard({ const [denyReason, setDenyReason] = useState('') const needsApproval = activity.status === WorkbenchJobActivityStatus.NeedsApproval - const isRunning = - activity.status === WorkbenchJobActivityStatus.Pending || - activity.status === WorkbenchJobActivityStatus.Running const inputJson = getActionInputJson(activity) const resultJson = getActionResultJson(activity) const icon = getActionIcon(activity) @@ -57,7 +54,7 @@ export function WorkbenchJobInlineActionCard({ const refetchQueries = [ 'WorkbenchJobActivities', 'WorkbenchJobActions', - 'WorkbenchJobPendingActions', + 'WorkbenchJobActionSummary', ] const [approve, { loading: approving }] = useApproveWorkbenchJobActivityMutation({ diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobPanel.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobPanel.tsx index 793f5eea94..a93e8f3adc 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobPanel.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobPanel.tsx @@ -15,7 +15,6 @@ import { PanelHeaderSC, SidePanelContent, } from 'components/ai/chatbot/SidePanelShared' -import { POLL_INTERVAL } from 'components/cd/ContinuousDeployment' import { SidePanel, useTopLevelSidePanel, @@ -25,9 +24,7 @@ import { AgentRunStatus, PullRequestBasicFragment, useWorkbenchJobActivitiesQuery, - useWorkbenchJobPendingActionsQuery, useWorkbenchJobQuery, - WorkbenchJobActivityType, WorkbenchJobFragment, } from 'generated/graphql' import { isEmpty, isNil, uniqBy } from 'lodash' @@ -60,6 +57,7 @@ import { } from './WorkbenchJobResult' import { hasWorkbenchJobResultContent } from './workbenchJobResultUtils' import { WorkbenchJobUsage } from './WorkbenchJobUsage' +import { useWorkbenchJobActionSummary } from './useWorkbenchJobActionSummary' const SIDE_PANEL_TYPE: SidePanel = 'workbench-job' type JobPanelTab = @@ -93,12 +91,11 @@ export function WorkbenchJobPanelContent() { variables: { id: jobId }, fetchPolicy: 'cache-first', }) - const { data: pendingActionsData } = useWorkbenchJobPendingActionsQuery({ - skip: !jobId, - variables: { id: jobId }, - fetchPolicy: 'cache-and-network', - pollInterval: POLL_INTERVAL, - }) + const { + hasActions, + hasActionsAwaitingApproval, + isLoading: areActionsLoading, + } = useWorkbenchJobActionSummary(jobId) const job = data?.workbenchJob const isLoading = loading && !job const activities = useMemo( @@ -157,23 +154,6 @@ export function WorkbenchJobPanelContent() { return [...agentRunDrafts, ...patchPrDrafts] }, [activities, pullRequests]) const hasDraftPrsAwaitingApproval = draftPrs.length > 0 - const actionTypes = new Set([ - WorkbenchJobActivityType.Function, - WorkbenchJobActivityType.Kubernetes, - ]) - const hasActions = - (pendingActionsData?.workbenchJob?.functionActions?.edges ?? []).some( - (edge) => !!edge?.node?.id - ) || - (pendingActionsData?.workbenchJob?.kubernetesActions?.edges ?? []).some( - (edge) => !!edge?.node?.id - ) - const hasActionsAwaitingApproval = ( - pendingActionsData?.workbenchJob?.pendingActions?.edges ?? [] - ).some( - (edge) => - !!edge?.node?.id && !!edge.node.type && actionTypes.has(edge.node.type) - ) const tabs = useMemo( () => @@ -200,8 +180,9 @@ export function WorkbenchJobPanelContent() { }, [selectedTab, tabs]) useEffect(() => { - if (!isLoading && job && isEmpty(tabs)) setOpen(false) - }, [isLoading, job, setOpen, tabs]) + if (isLoading || areActionsLoading) return + if (job && isEmpty(tabs)) setOpen(false) + }, [areActionsLoading, isLoading, job, setOpen, tabs]) return ( diff --git a/assets/src/components/workbenches/workbench/job/useWorkbenchJobActionSummary.ts b/assets/src/components/workbenches/workbench/job/useWorkbenchJobActionSummary.ts new file mode 100644 index 0000000000..df03eb3597 --- /dev/null +++ b/assets/src/components/workbenches/workbench/job/useWorkbenchJobActionSummary.ts @@ -0,0 +1,22 @@ +import { POLL_INTERVAL } from 'components/cd/ContinuousDeployment' +import { useWorkbenchJobActionSummaryQuery } from 'generated/graphql' + +export function useWorkbenchJobActionSummary(jobId: string) { + const { data, loading } = useWorkbenchJobActionSummaryQuery({ + skip: !jobId, + variables: { id: jobId }, + fetchPolicy: 'cache-and-network', + pollInterval: POLL_INTERVAL, + }) + const job = data?.workbenchJob + + return { + hasActions: + (job?.functionActions?.edges ?? []).some((edge) => !!edge?.node?.id) || + (job?.kubernetesActions?.edges ?? []).some((edge) => !!edge?.node?.id), + hasActionsAwaitingApproval: (job?.pendingActions?.edges ?? []).some( + (edge) => !!edge?.node?.id + ), + isLoading: loading && !data, + } +} diff --git a/assets/src/components/workbenches/workbench/job/workbenchJobResultUtils.ts b/assets/src/components/workbenches/workbench/job/workbenchJobResultUtils.ts index bd6694e5fb..76867a577d 100644 --- a/assets/src/components/workbenches/workbench/job/workbenchJobResultUtils.ts +++ b/assets/src/components/workbenches/workbench/job/workbenchJobResultUtils.ts @@ -37,7 +37,8 @@ export function hasWorkbenchJobResultContent( } export function hasWorkbenchJobPanelContent( - job: Nullable + job: Nullable, + hasActions = false ) { return ( hasWorkbenchJobResultContent(job) || @@ -45,6 +46,7 @@ export function hasWorkbenchJobPanelContent( !!job?.result?.topology || !isEmpty(job?.pullRequests) || !!job?.evalResult || - !!job?.usage + !!job?.usage || + hasActions ) } diff --git a/assets/src/generated/graphql.ts b/assets/src/generated/graphql.ts index ba0525bac6..c76dcb23a9 100644 --- a/assets/src/generated/graphql.ts +++ b/assets/src/generated/graphql.ts @@ -21440,13 +21440,13 @@ export type WorkbenchJobActivitiesQueryVariables = Exact<{ export type WorkbenchJobActivitiesQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus, prompt?: string | null, workbench?: { __typename?: 'Workbench', id: string } | null, referencedJob?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, status: WorkbenchJobStatus, workbench?: { __typename?: 'Workbench', id: string } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null } | null } | null, activities?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null } | null> | null } | null } | null }; -export type WorkbenchJobPendingActionsQueryVariables = Exact<{ +export type WorkbenchJobActionSummaryQueryVariables = Exact<{ id: Scalars['ID']['input']; first?: InputMaybe; }>; -export type WorkbenchJobPendingActionsQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, pendingActions?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null } | null } | null> | null } | null, functionActions?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string } | null } | null> | null } | null, kubernetesActions?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string } | null } | null> | null } | null } | null }; +export type WorkbenchJobActionSummaryQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, pendingActions?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string } | null } | null> | null } | null, functionActions?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string } | null } | null> | null } | null, kubernetesActions?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string } | null } | null> | null } | null } | null }; export type WorkbenchJobActionFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null }; @@ -45401,15 +45401,14 @@ export type WorkbenchJobActivitiesQueryHookResult = ReturnType; export type WorkbenchJobActivitiesSuspenseQueryHookResult = ReturnType; export type WorkbenchJobActivitiesQueryResult = Apollo.QueryResult; -export const WorkbenchJobPendingActionsDocument = gql` - query WorkbenchJobPendingActions($id: ID!, $first: Int = 1) { +export const WorkbenchJobActionSummaryDocument = gql` + query WorkbenchJobActionSummary($id: ID!, $first: Int = 1) { workbenchJob(id: $id) { id pendingActions: activities(first: $first, status: NEEDS_APPROVAL) { edges { node { id - type } } } @@ -45432,41 +45431,41 @@ export const WorkbenchJobPendingActionsDocument = gql` `; /** - * __useWorkbenchJobPendingActionsQuery__ + * __useWorkbenchJobActionSummaryQuery__ * - * To run a query within a React component, call `useWorkbenchJobPendingActionsQuery` and pass it any options that fit your needs. - * When your component renders, `useWorkbenchJobPendingActionsQuery` returns an object from Apollo Client that contains loading, error, and data properties + * To run a query within a React component, call `useWorkbenchJobActionSummaryQuery` and pass it any options that fit your needs. + * When your component renders, `useWorkbenchJobActionSummaryQuery` returns an object from Apollo Client that contains loading, error, and data properties * you can use to render your UI. * * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; * * @example - * const { data, loading, error } = useWorkbenchJobPendingActionsQuery({ + * const { data, loading, error } = useWorkbenchJobActionSummaryQuery({ * variables: { * id: // value for 'id' * first: // value for 'first' * }, * }); */ -export function useWorkbenchJobPendingActionsQuery(baseOptions: Apollo.QueryHookOptions & ({ variables: WorkbenchJobPendingActionsQueryVariables; skip?: boolean; } | { skip: boolean; }) ) { +export function useWorkbenchJobActionSummaryQuery(baseOptions: Apollo.QueryHookOptions & ({ variables: WorkbenchJobActionSummaryQueryVariables; skip?: boolean; } | { skip: boolean; }) ) { const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(WorkbenchJobPendingActionsDocument, options); + return Apollo.useQuery(WorkbenchJobActionSummaryDocument, options); } -export function useWorkbenchJobPendingActionsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { +export function useWorkbenchJobActionSummaryLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(WorkbenchJobPendingActionsDocument, options); + return Apollo.useLazyQuery(WorkbenchJobActionSummaryDocument, options); } // @ts-ignore -export function useWorkbenchJobPendingActionsSuspenseQuery(baseOptions?: Apollo.SuspenseQueryHookOptions): Apollo.UseSuspenseQueryResult; -export function useWorkbenchJobPendingActionsSuspenseQuery(baseOptions?: Apollo.SkipToken | Apollo.SuspenseQueryHookOptions): Apollo.UseSuspenseQueryResult; -export function useWorkbenchJobPendingActionsSuspenseQuery(baseOptions?: Apollo.SkipToken | Apollo.SuspenseQueryHookOptions) { +export function useWorkbenchJobActionSummarySuspenseQuery(baseOptions?: Apollo.SuspenseQueryHookOptions): Apollo.UseSuspenseQueryResult; +export function useWorkbenchJobActionSummarySuspenseQuery(baseOptions?: Apollo.SkipToken | Apollo.SuspenseQueryHookOptions): Apollo.UseSuspenseQueryResult; +export function useWorkbenchJobActionSummarySuspenseQuery(baseOptions?: Apollo.SkipToken | Apollo.SuspenseQueryHookOptions) { const options = baseOptions === Apollo.skipToken ? baseOptions : {...defaultOptions, ...baseOptions} - return Apollo.useSuspenseQuery(WorkbenchJobPendingActionsDocument, options); + return Apollo.useSuspenseQuery(WorkbenchJobActionSummaryDocument, options); } -export type WorkbenchJobPendingActionsQueryHookResult = ReturnType; -export type WorkbenchJobPendingActionsLazyQueryHookResult = ReturnType; -export type WorkbenchJobPendingActionsSuspenseQueryHookResult = ReturnType; -export type WorkbenchJobPendingActionsQueryResult = Apollo.QueryResult; +export type WorkbenchJobActionSummaryQueryHookResult = ReturnType; +export type WorkbenchJobActionSummaryLazyQueryHookResult = ReturnType; +export type WorkbenchJobActionSummarySuspenseQueryHookResult = ReturnType; +export type WorkbenchJobActionSummaryQueryResult = Apollo.QueryResult; export const WorkbenchJobActionsDocument = gql` query WorkbenchJobActions($id: ID!) { workbenchJob(id: $id) { @@ -47366,7 +47365,7 @@ export const namedOperations = { WorkbenchJobLogsTool: 'WorkbenchJobLogsTool', WorkbenchJobTracesTool: 'WorkbenchJobTracesTool', WorkbenchJobActivities: 'WorkbenchJobActivities', - WorkbenchJobPendingActions: 'WorkbenchJobPendingActions', + WorkbenchJobActionSummary: 'WorkbenchJobActionSummary', WorkbenchJobActions: 'WorkbenchJobActions', WorkbenchJobWhimseyText: 'WorkbenchJobWhimseyText', WorkbenchJobActivityWhimseyText: 'WorkbenchJobActivityWhimseyText', diff --git a/assets/src/generated/persisted-queries/client.json b/assets/src/generated/persisted-queries/client.json index 90394ce86e..731ccda3b0 100644 --- a/assets/src/generated/persisted-queries/client.json +++ b/assets/src/generated/persisted-queries/client.json @@ -2022,10 +2022,10 @@ "name": "WorkbenchJobActivities", "body": "query WorkbenchJobActivities($id: ID!) {\n workbenchJob(id: $id) {\n id\n status\n prompt\n workbench {\n id\n __typename\n }\n referencedJob {\n id\n prompt\n status\n workbench {\n id\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n __typename\n }\n activities(first: 100) {\n edges {\n node {\n ...WorkbenchJobActivity\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" }, - "sha256:02b7f31932000cdd314894a1a1b314741bd2aeaf161b3ddbfd5261dabef07c7d": { + "sha256:58e06a37b563b9ad7356ba2e596b3c6e5e5be8323b8472e1fa8f30da7552dec2": { "type": "query", - "name": "WorkbenchJobPendingActions", - "body": "query WorkbenchJobPendingActions($id: ID!, $first: Int = 1) {\n workbenchJob(id: $id) {\n id\n pendingActions: activities(first: $first, status: NEEDS_APPROVAL) {\n edges {\n node {\n id\n type\n __typename\n }\n __typename\n }\n __typename\n }\n functionActions: activities(first: $first, type: FUNCTION) {\n edges {\n node {\n id\n __typename\n }\n __typename\n }\n __typename\n }\n kubernetesActions: activities(first: $first, type: KUBERNETES) {\n edges {\n node {\n id\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}" + "name": "WorkbenchJobActionSummary", + "body": "query WorkbenchJobActionSummary($id: ID!, $first: Int = 1) {\n workbenchJob(id: $id) {\n id\n pendingActions: activities(first: $first, status: NEEDS_APPROVAL) {\n edges {\n node {\n id\n __typename\n }\n __typename\n }\n __typename\n }\n functionActions: activities(first: $first, type: FUNCTION) {\n edges {\n node {\n id\n __typename\n }\n __typename\n }\n __typename\n }\n kubernetesActions: activities(first: $first, type: KUBERNETES) {\n edges {\n node {\n id\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}" }, "sha256:bfaf2eee8990f27c578fca68de3213f52ccdd1e5e065605fce0723d6ee2f1e9e": { "type": "query", diff --git a/assets/src/graph/workbench.graphql b/assets/src/graph/workbench.graphql index 972a4ffa1a..b70652703f 100644 --- a/assets/src/graph/workbench.graphql +++ b/assets/src/graph/workbench.graphql @@ -1245,14 +1245,13 @@ query WorkbenchJobActivities($id: ID!) { } } -query WorkbenchJobPendingActions($id: ID!, $first: Int = 1) { +query WorkbenchJobActionSummary($id: ID!, $first: Int = 1) { workbenchJob(id: $id) { id pendingActions: activities(first: $first, status: NEEDS_APPROVAL) { edges { node { id - type } } } From 6d09bcb491f3e38f8e9acb510fa7cb39edd51aaa Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Mon, 27 Jul 2026 16:33:11 +0200 Subject: [PATCH 31/50] store info about user rejecting action --- assets/src/generated/graphql.ts | 31 ++++++++++++------- .../generated/persisted-queries/client.json | 28 ++++++++--------- assets/src/graph/workbench.graphql | 6 ++++ lib/console/deployments/workbenches.ex | 1 + lib/console/graphql/deployments/workbench.ex | 2 +- lib/console/schema/workbench_job_activity.ex | 2 +- test/console/deployments/workbenches_test.exs | 3 ++ .../deployments/workbench_mutations_test.exs | 3 ++ 8 files changed, 48 insertions(+), 28 deletions(-) diff --git a/assets/src/generated/graphql.ts b/assets/src/generated/graphql.ts index c76dcb23a9..44603f2b05 100644 --- a/assets/src/generated/graphql.ts +++ b/assets/src/generated/graphql.ts @@ -21118,9 +21118,9 @@ export type WorkbenchJobResultFragment = { __typename?: 'WorkbenchJobResult', id export type WorkbenchJobActivityResultFragment = { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null }; -export type WorkbenchJobActivityFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null }; +export type WorkbenchJobActivityFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null }; -export type WorkbenchJobActivityWithThoughtsFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, thoughts?: Array<{ __typename?: 'WorkbenchJobThought', id: string, content?: string | null, toolName?: string | null, toolArgs?: Record | null, activity?: { __typename?: 'WorkbenchJobActivity', id: string } | null, attributes?: { __typename?: 'WorkbenchJobThoughtAttributes', logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, metrics?: Array<{ __typename?: 'WorkbenchJobActivityMetric', timestamp?: string | null, name?: string | null, value?: number | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null } | null } | null> | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null }; +export type WorkbenchJobActivityWithThoughtsFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, thoughts?: Array<{ __typename?: 'WorkbenchJobThought', id: string, content?: string | null, toolName?: string | null, toolArgs?: Record | null, activity?: { __typename?: 'WorkbenchJobActivity', id: string } | null, attributes?: { __typename?: 'WorkbenchJobThoughtAttributes', logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, metrics?: Array<{ __typename?: 'WorkbenchJobActivityMetric', timestamp?: string | null, name?: string | null, value?: number | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null } | null } | null> | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null }; export type WorkbenchJobProgressFragment = { __typename?: 'WorkbenchJobProgress', activityId?: string | null, tool?: string | null, text?: string | null, arguments?: Record | null }; @@ -21438,7 +21438,7 @@ export type WorkbenchJobActivitiesQueryVariables = Exact<{ }>; -export type WorkbenchJobActivitiesQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus, prompt?: string | null, workbench?: { __typename?: 'Workbench', id: string } | null, referencedJob?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, status: WorkbenchJobStatus, workbench?: { __typename?: 'Workbench', id: string } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null } | null } | null, activities?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null } | null> | null } | null } | null }; +export type WorkbenchJobActivitiesQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus, prompt?: string | null, workbench?: { __typename?: 'Workbench', id: string } | null, referencedJob?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, status: WorkbenchJobStatus, workbench?: { __typename?: 'Workbench', id: string } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null } | null } | null, activities?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null } | null> | null } | null } | null }; export type WorkbenchJobActionSummaryQueryVariables = Exact<{ id: Scalars['ID']['input']; @@ -21448,21 +21448,21 @@ export type WorkbenchJobActionSummaryQueryVariables = Exact<{ export type WorkbenchJobActionSummaryQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, pendingActions?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string } | null } | null> | null } | null, functionActions?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string } | null } | null> | null } | null, kubernetesActions?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string } | null } | null> | null } | null } | null }; -export type WorkbenchJobActionFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null }; +export type WorkbenchJobActionFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null }; export type WorkbenchJobActionsQueryVariables = Exact<{ id: Scalars['ID']['input']; }>; -export type WorkbenchJobActionsQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, activities?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null } | null } | null> | null } | null } | null }; +export type WorkbenchJobActionsQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, activities?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null } | null } | null> | null } | null } | null }; export type ApproveWorkbenchJobActivityMutationVariables = Exact<{ id: Scalars['ID']['input']; }>; -export type ApproveWorkbenchJobActivityMutation = { __typename?: 'RootMutationType', approveWorkbenchJobActivity?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null } | null }; +export type ApproveWorkbenchJobActivityMutation = { __typename?: 'RootMutationType', approveWorkbenchJobActivity?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null } | null }; export type RejectWorkbenchJobActivityMutationVariables = Exact<{ id: Scalars['ID']['input']; @@ -21470,7 +21470,7 @@ export type RejectWorkbenchJobActivityMutationVariables = Exact<{ }>; -export type RejectWorkbenchJobActivityMutation = { __typename?: 'RootMutationType', rejectWorkbenchJobActivity?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null } | null }; +export type RejectWorkbenchJobActivityMutation = { __typename?: 'RootMutationType', rejectWorkbenchJobActivity?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null } | null }; export type WorkbenchJobWhimseyTextQueryVariables = Exact<{ id: Scalars['ID']['input']; @@ -21491,7 +21491,7 @@ export type WorkbenchJobActivityQueryVariables = Exact<{ }>; -export type WorkbenchJobActivityQuery = { __typename?: 'RootQueryType', workbenchJobActivity?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, thoughts?: Array<{ __typename?: 'WorkbenchJobThought', id: string, content?: string | null, toolName?: string | null, toolArgs?: Record | null, activity?: { __typename?: 'WorkbenchJobActivity', id: string } | null, attributes?: { __typename?: 'WorkbenchJobThoughtAttributes', logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, metrics?: Array<{ __typename?: 'WorkbenchJobActivityMetric', timestamp?: string | null, name?: string | null, value?: number | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null } | null } | null> | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null }; +export type WorkbenchJobActivityQuery = { __typename?: 'RootQueryType', workbenchJobActivity?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, thoughts?: Array<{ __typename?: 'WorkbenchJobThought', id: string, content?: string | null, toolName?: string | null, toolArgs?: Record | null, activity?: { __typename?: 'WorkbenchJobActivity', id: string } | null, attributes?: { __typename?: 'WorkbenchJobThoughtAttributes', logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, metrics?: Array<{ __typename?: 'WorkbenchJobActivityMetric', timestamp?: string | null, name?: string | null, value?: number | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null } | null } | null> | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null }; export type WorkbenchToolsQueryVariables = Exact<{ first?: InputMaybe; @@ -21606,7 +21606,7 @@ export type CreateWorkbenchMessageMutationVariables = Exact<{ }>; -export type CreateWorkbenchMessageMutation = { __typename?: 'RootMutationType', createWorkbenchMessage?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null }; +export type CreateWorkbenchMessageMutation = { __typename?: 'RootMutationType', createWorkbenchMessage?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null }; export type CreateWorkbenchPromptMutationVariables = Exact<{ workbenchId: Scalars['ID']['input']; @@ -21749,7 +21749,7 @@ export type WorkbenchJobActivityDeltaSubscriptionVariables = Exact<{ }>; -export type WorkbenchJobActivityDeltaSubscription = { __typename?: 'RootSubscriptionType', workbenchJobActivityDelta?: { __typename?: 'WorkbenchJobActivityDelta', delta?: Delta | null, payload?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null } | null }; +export type WorkbenchJobActivityDeltaSubscription = { __typename?: 'RootSubscriptionType', workbenchJobActivityDelta?: { __typename?: 'WorkbenchJobActivityDelta', delta?: Delta | null, payload?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null } | null }; export type WorkbenchJobThoughtDeltaSubscriptionVariables = Exact<{ jobId: Scalars['ID']['input']; @@ -27178,6 +27178,9 @@ export const WorkbenchJobActivityFragmentDoc = gql` status prompt insertedAt + user { + ...UserTiny + } result { ...WorkbenchJobActivityResult } @@ -27188,7 +27191,8 @@ export const WorkbenchJobActivityFragmentDoc = gql` ...AgentRunTiny } } - ${WorkbenchJobActivityResultFragmentDoc} + ${UserTinyFragmentDoc} +${WorkbenchJobActivityResultFragmentDoc} ${AgentRunTinyFragmentDoc}`; export const WorkbenchJobActivityMetricFragmentDoc = gql` fragment WorkbenchJobActivityMetric on WorkbenchJobActivityMetric { @@ -27618,6 +27622,9 @@ export const WorkbenchJobActionFragmentDoc = gql` status prompt insertedAt + user { + ...UserTiny + } result { output error @@ -27652,7 +27659,7 @@ export const WorkbenchJobActionFragmentDoc = gql` } } } - `; + ${UserTinyFragmentDoc}`; export const WorkbenchLinkCardFragmentDoc = gql` fragment WorkbenchLinkCard on Workbench { id diff --git a/assets/src/generated/persisted-queries/client.json b/assets/src/generated/persisted-queries/client.json index 731ccda3b0..616ba9c2ec 100644 --- a/assets/src/generated/persisted-queries/client.json +++ b/assets/src/generated/persisted-queries/client.json @@ -2017,30 +2017,30 @@ "name": "WorkbenchJobTracesTool", "body": "query WorkbenchJobTracesTool($id: ID!, $name: String, $arguments: Json) {\n workbenchJob(id: $id) {\n id\n tracesTool(name: $name, arguments: $arguments) {\n ...WorkbenchJobActivityTrace\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}" }, - "sha256:163039eb0bbc0ac2caaa8c3dea555d4521ca9a138b9df91dffc227ecb5ac4f26": { + "sha256:4747c233e450400ceba664b6d6017835ab23bbded33e347ee7dce1420a319eb5": { "type": "query", "name": "WorkbenchJobActivities", - "body": "query WorkbenchJobActivities($id: ID!) {\n workbenchJob(id: $id) {\n id\n status\n prompt\n workbench {\n id\n __typename\n }\n referencedJob {\n id\n prompt\n status\n workbench {\n id\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n __typename\n }\n activities(first: 100) {\n edges {\n node {\n ...WorkbenchJobActivity\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" + "body": "query WorkbenchJobActivities($id: ID!) {\n workbenchJob(id: $id) {\n id\n status\n prompt\n workbench {\n id\n __typename\n }\n referencedJob {\n id\n prompt\n status\n workbench {\n id\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n __typename\n }\n activities(first: 100) {\n edges {\n node {\n ...WorkbenchJobActivity\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n user {\n ...UserTiny\n __typename\n }\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment UserTiny on User {\n name\n email\n profile\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" }, "sha256:58e06a37b563b9ad7356ba2e596b3c6e5e5be8323b8472e1fa8f30da7552dec2": { "type": "query", "name": "WorkbenchJobActionSummary", "body": "query WorkbenchJobActionSummary($id: ID!, $first: Int = 1) {\n workbenchJob(id: $id) {\n id\n pendingActions: activities(first: $first, status: NEEDS_APPROVAL) {\n edges {\n node {\n id\n __typename\n }\n __typename\n }\n __typename\n }\n functionActions: activities(first: $first, type: FUNCTION) {\n edges {\n node {\n id\n __typename\n }\n __typename\n }\n __typename\n }\n kubernetesActions: activities(first: $first, type: KUBERNETES) {\n edges {\n node {\n id\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}" }, - "sha256:bfaf2eee8990f27c578fca68de3213f52ccdd1e5e065605fce0723d6ee2f1e9e": { + "sha256:ce88538577a44429ce369b15748ceb5f145b8d3e4f5f836e065fffa26fff80fb": { "type": "query", "name": "WorkbenchJobActions", - "body": "query WorkbenchJobActions($id: ID!) {\n workbenchJob(id: $id) {\n id\n activities(first: 100) {\n edges {\n node {\n ...WorkbenchJobAction\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobAction on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n __typename\n }\n __typename\n}" + "body": "query WorkbenchJobActions($id: ID!) {\n workbenchJob(id: $id) {\n id\n activities(first: 100) {\n edges {\n node {\n ...WorkbenchJobAction\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobAction on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n user {\n ...UserTiny\n __typename\n }\n result {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment UserTiny on User {\n name\n email\n profile\n __typename\n}" }, - "sha256:09e4d26b175d7f45cebc00082da116e0ed37195c13cb0af43ac6bd1d35d074d8": { + "sha256:cd4a36a3ce5f7ba271a23812a391ea572227cb1d79019062a3df8a5d34591701": { "type": "mutation", "name": "ApproveWorkbenchJobActivity", - "body": "mutation ApproveWorkbenchJobActivity($id: ID!) {\n approveWorkbenchJobActivity(id: $id) {\n ...WorkbenchJobAction\n __typename\n }\n}\n\nfragment WorkbenchJobAction on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n __typename\n }\n __typename\n}" + "body": "mutation ApproveWorkbenchJobActivity($id: ID!) {\n approveWorkbenchJobActivity(id: $id) {\n ...WorkbenchJobAction\n __typename\n }\n}\n\nfragment WorkbenchJobAction on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n user {\n ...UserTiny\n __typename\n }\n result {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment UserTiny on User {\n name\n email\n profile\n __typename\n}" }, - "sha256:897762a23f2a3eb3921a6e8bb7c597f0ad24237d4aac08afe32b9ba588e21dea": { + "sha256:696e189dbff6680c3b9ba3a13ae12e6f540715965cce9a72901fbc3a2d56bfff": { "type": "mutation", "name": "RejectWorkbenchJobActivity", - "body": "mutation RejectWorkbenchJobActivity($id: ID!, $reason: String) {\n rejectWorkbenchJobActivity(id: $id, reason: $reason) {\n ...WorkbenchJobAction\n __typename\n }\n}\n\nfragment WorkbenchJobAction on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n __typename\n }\n __typename\n}" + "body": "mutation RejectWorkbenchJobActivity($id: ID!, $reason: String) {\n rejectWorkbenchJobActivity(id: $id, reason: $reason) {\n ...WorkbenchJobAction\n __typename\n }\n}\n\nfragment WorkbenchJobAction on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n user {\n ...UserTiny\n __typename\n }\n result {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment UserTiny on User {\n name\n email\n profile\n __typename\n}" }, "sha256:1367ab87fa3cb2913dca622df4606e0b0e2217e1abedeae5807cbcaf496114ac": { "type": "query", @@ -2052,10 +2052,10 @@ "name": "WorkbenchJobActivityWhimseyText", "body": "query WorkbenchJobActivityWhimseyText($id: ID!) {\n workbenchJobActivity(id: $id) {\n id\n whimsey\n __typename\n }\n}" }, - "sha256:2b8e8021b76be5f6942867fc0d3ec25020f75d8e31025cc2abbce4a0c94c4381": { + "sha256:850ef94eef811eeb59c9d949b15b76a74e0c972509b98c7d7eb64593d49d95c4": { "type": "query", "name": "WorkbenchJobActivity", - "body": "query WorkbenchJobActivity($id: ID!) {\n workbenchJobActivity(id: $id) {\n ...WorkbenchJobActivityWithThoughts\n __typename\n }\n}\n\nfragment WorkbenchJobActivityWithThoughts on WorkbenchJobActivity {\n ...WorkbenchJobActivity\n thoughts {\n ...WorkbenchJobThought\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}\n\nfragment WorkbenchJobThought on WorkbenchJobThought {\n id\n content\n toolName\n toolArgs\n activity {\n id\n __typename\n }\n attributes {\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n metrics {\n ...WorkbenchJobActivityMetric\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityMetric on WorkbenchJobActivityMetric {\n timestamp\n name\n value\n labels\n __typename\n}" + "body": "query WorkbenchJobActivity($id: ID!) {\n workbenchJobActivity(id: $id) {\n ...WorkbenchJobActivityWithThoughts\n __typename\n }\n}\n\nfragment WorkbenchJobActivityWithThoughts on WorkbenchJobActivity {\n ...WorkbenchJobActivity\n thoughts {\n ...WorkbenchJobThought\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n user {\n ...UserTiny\n __typename\n }\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment UserTiny on User {\n name\n email\n profile\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}\n\nfragment WorkbenchJobThought on WorkbenchJobThought {\n id\n content\n toolName\n toolArgs\n activity {\n id\n __typename\n }\n attributes {\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n metrics {\n ...WorkbenchJobActivityMetric\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityMetric on WorkbenchJobActivityMetric {\n timestamp\n name\n value\n labels\n __typename\n}" }, "sha256:13ca0786672355db1deeaf3a29d7f2681d5d34cff26a07ae9509aff09dcebe94": { "type": "query", @@ -2127,10 +2127,10 @@ "name": "CancelWorkbenchJob", "body": "mutation CancelWorkbenchJob($jobId: ID!) {\n cancelWorkbenchJob(jobId: $jobId) {\n id\n status\n __typename\n }\n}" }, - "sha256:a30b467674204111ca693c0f4a5c493b851e72eebc4e67931e10338e56cb51ef": { + "sha256:f4eb3cb080e6396274c2ea1b550d4e6a196f25cbcb7e79a1d44a78c38202b476": { "type": "mutation", "name": "CreateWorkbenchMessage", - "body": "mutation CreateWorkbenchMessage($jobId: ID!, $attributes: WorkbenchMessageAttributes!) {\n createWorkbenchMessage(jobId: $jobId, attributes: $attributes) {\n ...WorkbenchJobActivity\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" + "body": "mutation CreateWorkbenchMessage($jobId: ID!, $attributes: WorkbenchMessageAttributes!) {\n createWorkbenchMessage(jobId: $jobId, attributes: $attributes) {\n ...WorkbenchJobActivity\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n user {\n ...UserTiny\n __typename\n }\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment UserTiny on User {\n name\n email\n profile\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" }, "sha256:aec27aea620d94d724229e982ca5b06f6c40291b1488ebcb52c02655b989f534": { "type": "mutation", @@ -2222,10 +2222,10 @@ "name": "WorkbenchJobDelta", "body": "subscription WorkbenchJobDelta($id: ID, $workbenchId: ID) {\n workbenchJobDelta(id: $id, workbenchId: $workbenchId) {\n delta\n payload {\n ...WorkbenchJobTiny\n error\n result {\n ...WorkbenchJobResult\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobTiny on WorkbenchJob {\n id\n prompt\n status\n error\n insertedAt\n usage {\n ...WorkbenchJobUsageTiny\n __typename\n }\n modes {\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n user {\n id\n name\n profile\n __typename\n }\n workbench {\n id\n name\n __typename\n }\n alert {\n id\n state\n url\n __typename\n }\n issue {\n id\n status\n url\n __typename\n }\n pullRequests {\n ...WorkbenchJobPullRequest\n __typename\n }\n result {\n id\n conclusion\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n chatbotMessage {\n id\n channel\n message\n chatConnection {\n id\n name\n type\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobUsageTiny on WorkbenchJobUsage {\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchJobPullRequest on PullRequest {\n ...PullRequestBasic\n patch\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment WorkbenchJobResult on WorkbenchJobResult {\n id\n workingTheory\n criticism\n conclusion\n topology\n todos {\n ...WorkbenchJobResultTodo\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobResultTodo on WorkbenchJobResultTodo {\n name\n description\n done\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}" }, - "sha256:1438318fa0e0e5d2241c161d5dcd03f52db4ee7d359d1e69a48968dbc5b30c46": { + "sha256:7494e4222b67c89e99354381bdffbe52787b197107ed61d93824cefbda9b683d": { "type": "subscription", "name": "WorkbenchJobActivityDelta", - "body": "subscription WorkbenchJobActivityDelta($jobId: ID!) {\n workbenchJobActivityDelta(jobId: $jobId) {\n delta\n payload {\n ...WorkbenchJobActivity\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" + "body": "subscription WorkbenchJobActivityDelta($jobId: ID!) {\n workbenchJobActivityDelta(jobId: $jobId) {\n delta\n payload {\n ...WorkbenchJobActivity\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n user {\n ...UserTiny\n __typename\n }\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment UserTiny on User {\n name\n email\n profile\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" }, "sha256:84e024a73a5d1c07d1ce00b74b6addad8b4d6eb7a1d9daaa5afbe57abd3f5f9a": { "type": "subscription", diff --git a/assets/src/graph/workbench.graphql b/assets/src/graph/workbench.graphql index b70652703f..3f4116a75d 100644 --- a/assets/src/graph/workbench.graphql +++ b/assets/src/graph/workbench.graphql @@ -468,6 +468,9 @@ fragment WorkbenchJobActivity on WorkbenchJobActivity { status prompt insertedAt + user { + ...UserTiny + } result { ...WorkbenchJobActivityResult } @@ -1278,6 +1281,9 @@ fragment WorkbenchJobAction on WorkbenchJobActivity { status prompt insertedAt + user { + ...UserTiny + } result { output error diff --git a/lib/console/deployments/workbenches.ex b/lib/console/deployments/workbenches.ex index 0830624657..109eccec1a 100644 --- a/lib/console/deployments/workbenches.ex +++ b/lib/console/deployments/workbenches.ex @@ -861,6 +861,7 @@ defmodule Console.Deployments.Workbenches do |> when_ok(fn activity -> WorkbenchJobActivity.changeset(activity, %{ status: :cancelled, + user_id: user.id, result: %{output: reason || "Execution rejected by user"} }) end) diff --git a/lib/console/graphql/deployments/workbench.ex b/lib/console/graphql/deployments/workbench.ex index e8fa5f9dd6..528b51fe55 100644 --- a/lib/console/graphql/deployments/workbench.ex +++ b/lib/console/graphql/deployments/workbench.ex @@ -610,7 +610,7 @@ defmodule Console.GraphQl.Deployments.Workbench do field :workbench_job, :workbench_job, resolve: dataloader(Deployments), description: "the job this activity belongs to" field :agent_run, :agent_run, resolve: dataloader(Deployments), description: "the agent run that executed this activity" field :agent_runs, list_of(:agent_run), resolve: dataloader(Deployments), description: "all agent runs associated with this activity (sideloadable)" - field :user, :user, resolve: dataloader(User), description: "the user who created this activity" + field :user, :user, resolve: dataloader(User), description: "the user who created or denied this activity" timestamps() end diff --git a/lib/console/schema/workbench_job_activity.ex b/lib/console/schema/workbench_job_activity.ex index df3468e60b..8bebbdaf4c 100644 --- a/lib/console/schema/workbench_job_activity.ex +++ b/lib/console/schema/workbench_job_activity.ex @@ -131,7 +131,7 @@ defmodule Console.Schema.WorkbenchJobActivity do from(a in query, order_by: ^order) end - @valid ~w(status type prompt workbench_job_id agent_run_id)a + @valid ~w(status type prompt workbench_job_id agent_run_id user_id)a def changeset(model, attrs \\ %{}) do model diff --git a/test/console/deployments/workbenches_test.exs b/test/console/deployments/workbenches_test.exs index d2e1c2a17c..ce8e948cb0 100644 --- a/test/console/deployments/workbenches_test.exs +++ b/test/console/deployments/workbenches_test.exs @@ -1406,11 +1406,13 @@ defmodule Console.Deployments.WorkbenchesTest do assert updated.id == activity.id assert updated.status == :cancelled + assert updated.user_id == user.id assert updated.result.output == "too risky" assert_receive {:event, %PubSub.WorkbenchJobActivityUpdated{item: ^updated}} reloaded = refetch(activity) assert reloaded.status == :cancelled + assert reloaded.user_id == user.id assert reloaded.result.output == "too risky" end @@ -1432,6 +1434,7 @@ defmodule Console.Deployments.WorkbenchesTest do assert updated.id == activity.id assert updated.status == :cancelled + assert updated.user_id == user.id assert updated.result.output == "Execution rejected by user" assert_receive {:event, %PubSub.WorkbenchJobActivityUpdated{item: ^updated}} end diff --git a/test/console/graphql/mutations/deployments/workbench_mutations_test.exs b/test/console/graphql/mutations/deployments/workbench_mutations_test.exs index 409bee0531..ac630b3761 100644 --- a/test/console/graphql/mutations/deployments/workbench_mutations_test.exs +++ b/test/console/graphql/mutations/deployments/workbench_mutations_test.exs @@ -707,6 +707,7 @@ defmodule Console.GraphQl.Deployments.WorkbenchMutationsTest do id status result { output } + user { name } } } """, %{"id" => activity.id, "reason" => "not approved"}, %{current_user: user}) @@ -714,9 +715,11 @@ defmodule Console.GraphQl.Deployments.WorkbenchMutationsTest do assert updated["id"] == activity.id assert updated["status"] == "CANCELLED" assert updated["result"]["output"] == "not approved" + assert updated["user"]["name"] == user.name reloaded = refetch(activity) assert reloaded.status == :cancelled + assert reloaded.user_id == user.id assert reloaded.result.output == "not approved" end end From 80e7b4742444853a2135ffd15d78c5c8d0850164 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Mon, 27 Jul 2026 16:39:29 +0200 Subject: [PATCH 32/50] add denial result --- .../job/WorkbenchJobActionDenialResult.tsx | 42 +++++++++++++++++++ .../job/WorkbenchJobActionDetail.tsx | 10 +++-- .../job/WorkbenchJobInlineActionCard.tsx | 9 ++-- 3 files changed, 53 insertions(+), 8 deletions(-) create mode 100644 assets/src/components/workbenches/workbench/job/WorkbenchJobActionDenialResult.tsx diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDenialResult.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDenialResult.tsx new file mode 100644 index 0000000000..f52dc6aa14 --- /dev/null +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDenialResult.tsx @@ -0,0 +1,42 @@ +import { Flex } from '@pluralsh/design-system' +import { Body2P, CaptionP } from 'components/utils/typography/Text' +import { + WorkbenchJobActionFragment, + WorkbenchJobActivityFragment, + WorkbenchJobActivityStatus, +} from 'generated/graphql' +import { useTheme } from 'styled-components' + +type ActionActivity = WorkbenchJobActionFragment | WorkbenchJobActivityFragment + +export function getActionDenialReason(activity: ActionActivity): string | null { + if (activity.status !== WorkbenchJobActivityStatus.Cancelled) return null + return activity.result?.output?.trim() || null +} + +export function WorkbenchJobActionDenialResult({ + activity, +}: { + activity: ActionActivity +}) { + const theme = useTheme() + const reason = getActionDenialReason(activity) + if (!reason) return null + + const deniedBy = activity.user?.name?.trim() + + return ( + + {`“${reason}”`} + {!!deniedBy && ( + + Denied by{' '} + {deniedBy} + + )} + + ) +} diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx index 9627031da3..8e02ad69ef 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx @@ -27,6 +27,7 @@ import { getActionSubtitle, getActionTitle, } from './workbenchJobActionsUtils' +import { WorkbenchJobActionDenialResult } from './WorkbenchJobActionDenialResult' import { WorkbenchJobActionStatusChip } from './WorkbenchJobActionStatusChip' export function WorkbenchJobActionDetail({ @@ -44,7 +45,8 @@ export function WorkbenchJobActionDetail({ activity.status === WorkbenchJobActivityStatus.NeedsApproval const icon = getActionIcon(activity) const inputJson = getActionInputJson(activity) - const resultJson = getActionResultJson(activity) + const isDenied = activity.status === WorkbenchJobActivityStatus.Cancelled + const resultJson = isDenied ? '' : getActionResultJson(activity) const [approve, { loading: approving }] = useApproveWorkbenchJobActivityMutation({ @@ -149,9 +151,7 @@ export function WorkbenchJobActionDetail({ {activity.status === WorkbenchJobActivityStatus.Failed ? 'ERROR' - : activity.status === WorkbenchJobActivityStatus.Cancelled - ? 'REASON' - : 'RESULT'} + : 'RESULT'} )} + + {needsApproval && ( + {open && ( + + + + + + Reason for denial + } + disabled={rejecting} + onClick={close} + /> + + + The agent will acknowledge your reasoning as it progresses. + + {rejectError && } + setReason(e.target.value)} + placeholder="Explain why this action should not run." + /> + + + + + + + + + )} + + ) +} + +const DenyPopoverSC = styled.form(({ theme }) => ({ + display: 'flex', + flexDirection: 'column', + gap: theme.spacing.medium, + width: '100%', + padding: theme.spacing.medium, + borderRadius: theme.borderRadiuses.large, + border: theme.borders['fill-two'], + backgroundColor: theme.colors['fill-two'], + boxShadow: theme.boxShadows.moderate, +})) + +const ActionsSC = styled.div(({ theme }) => ({ + display: 'flex', + justifyContent: 'flex-end', + gap: theme.spacing.small, +})) diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx index b4470b5253..63b1533daa 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx @@ -2,11 +2,8 @@ import { Button, Code, Flex, - FormField, IconFrame, - Input, KubernetesIcon, - Modal, ReturnIcon, } from '@pluralsh/design-system' import { GqlError } from 'components/utils/Alert' @@ -18,7 +15,7 @@ import { WorkbenchJobActionFragment, WorkbenchJobActivityStatus, } from 'generated/graphql' -import { FormEvent, useState } from 'react' +import { useState } from 'react' import styled, { useTheme } from 'styled-components' import { getActionIcon, @@ -28,6 +25,7 @@ import { getActionTitle, } from './workbenchJobActionsUtils' import { WorkbenchJobActionDenialResult } from './WorkbenchJobActionDenialResult' +import { WorkbenchJobActionDenyButton } from './WorkbenchJobActionDenyPopover' import { WorkbenchJobActionStatusChip } from './WorkbenchJobActionStatusChip' export function WorkbenchJobActionDetail({ @@ -39,8 +37,6 @@ export function WorkbenchJobActionDetail({ }) { const theme = useTheme() const [error, setError] = useState(null) - const [denyOpen, setDenyOpen] = useState(false) - const [denyReason, setDenyReason] = useState('') const needsApproval = activity.status === WorkbenchJobActivityStatus.NeedsApproval const icon = getActionIcon(activity) @@ -58,30 +54,10 @@ export function WorkbenchJobActionDetail({ const [reject, { loading: rejecting, error: rejectError }] = useRejectWorkbenchJobActivityMutation({ - onCompleted: () => { - setDenyOpen(false) - setDenyReason('') - onBack() - }, + onCompleted: onBack, refetchQueries: ['WorkbenchJobActions', 'WorkbenchJobActionSummary'], }) - const closeDenyModal = () => { - if (rejecting) return - setDenyOpen(false) - setDenyReason('') - } - - const onDeny = (e?: FormEvent) => { - e?.preventDefault() - reject({ - variables: { - id: activity.id, - reason: denyReason.trim() || undefined, - }, - }) - } - return ( - + rejecting={rejecting} + rejectError={rejectError} + onDeny={(reason) => + reject({ + variables: { + id: activity.id, + reason: reason || undefined, + }, + }) + } + /> - - - } - > - - {rejectError && } - - setDenyReason(e.target.value)} - placeholder="Explain why this action was denied" - /> - - - ) } diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobInlineActionCard.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobInlineActionCard.tsx index afa132049e..4b9b38e59d 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobInlineActionCard.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobInlineActionCard.tsx @@ -4,11 +4,8 @@ import { Code, FailedFilledIcon, Flex, - FormField, IconFrame, - Input, KubernetesIcon, - Modal, StatusOkIcon, } from '@pluralsh/design-system' import { GqlError } from 'components/utils/Alert' @@ -20,7 +17,7 @@ import { WorkbenchJobActivityFragment, WorkbenchJobActivityStatus, } from 'generated/graphql' -import { FormEvent, useState } from 'react' +import { useState } from 'react' import styled, { DefaultTheme, useTheme } from 'styled-components' import { formatDateTime } from 'utils/datetime' import { @@ -32,6 +29,7 @@ import { getActionTitle, } from './workbenchJobActionsUtils' import { WorkbenchJobActionDenialResult } from './WorkbenchJobActionDenialResult' +import { WorkbenchJobActionDenyButton } from './WorkbenchJobActionDenyPopover' import { WorkbenchJobActionStatusChip } from './WorkbenchJobActionStatusChip' export function WorkbenchJobInlineActionCard({ @@ -44,8 +42,6 @@ export function WorkbenchJobInlineActionCard({ activity.status === WorkbenchJobActivityStatus.NeedsApproval ) const [error, setError] = useState(null) - const [denyOpen, setDenyOpen] = useState(false) - const [denyReason, setDenyReason] = useState('') const needsApproval = activity.status === WorkbenchJobActivityStatus.NeedsApproval const inputJson = getActionInputJson(activity) @@ -66,29 +62,9 @@ export function WorkbenchJobInlineActionCard({ }) const [reject, { loading: rejecting, error: rejectError }] = useRejectWorkbenchJobActivityMutation({ - onCompleted: () => { - setDenyOpen(false) - setDenyReason('') - }, refetchQueries, }) - const closeDenyModal = () => { - if (rejecting) return - setDenyOpen(false) - setDenyReason('') - } - - const onDeny = (e?: FormEvent) => { - e?.preventDefault() - reject({ - variables: { - id: activity.id, - reason: denyReason.trim() || undefined, - }, - }) - } - return ( @@ -180,25 +156,19 @@ export function WorkbenchJobInlineActionCard({ )} {needsApproval && ( - + rejecting={rejecting} + rejectError={rejectError} + onDeny={(reason) => + reject({ + variables: { + id: activity.id, + reason: reason || undefined, + }, + }) + } + /> - - - } - > - - {rejectError && } - - setDenyReason(e.target.value)} - placeholder="Explain why this action was denied" - /> - - - ) } From f19649701c68373e6e6b38aa53331070a3764357 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Mon, 27 Jul 2026 17:09:45 +0200 Subject: [PATCH 36/50] update card borders --- .../workbench/job/WorkbenchJobActionCard.tsx | 8 +++++-- .../job/WorkbenchJobInlineActionCard.tsx | 24 +++---------------- .../job/workbenchJobActionsUtils.tsx | 22 +++++++++++++++++ 3 files changed, 31 insertions(+), 23 deletions(-) diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionCard.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionCard.tsx index 20477ad3ed..8e0ddee3a6 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionCard.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionCard.tsx @@ -10,6 +10,7 @@ import styled, { useTheme } from 'styled-components' import { getActionDetailButtonLabel, getActionIcon, + getActionStatusBorderColor, getActionSubtitle, getActionTitle, } from './workbenchJobActionsUtils' @@ -25,7 +26,7 @@ export function WorkbenchJobActionCard({ const icon = getActionIcon(activity) return ( - + ({ +const CardSC = styled.div<{ + $status: WorkbenchJobActionFragment['status'] +}>(({ theme, $status }) => ({ display: 'flex', alignItems: 'center', gap: theme.spacing.medium, padding: theme.spacing.medium, borderRadius: theme.borderRadiuses.large, background: theme.colors['fill-one'], + borderLeft: `2px solid ${getActionStatusBorderColor(theme, $status)}`, })) diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobInlineActionCard.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobInlineActionCard.tsx index 4b9b38e59d..e161f4be21 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobInlineActionCard.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobInlineActionCard.tsx @@ -18,13 +18,14 @@ import { WorkbenchJobActivityStatus, } from 'generated/graphql' import { useState } from 'react' -import styled, { DefaultTheme, useTheme } from 'styled-components' +import styled, { useTheme } from 'styled-components' import { formatDateTime } from 'utils/datetime' import { getActionDescription, getActionIcon, getActionInputJson, getActionResultJson, + getActionStatusBorderColor, getActionSubtitle, getActionTitle, } from './workbenchJobActionsUtils' @@ -211,25 +212,6 @@ function InlineActionStatus({ return } -function statusBorderColor( - theme: DefaultTheme, - status: WorkbenchJobActivityStatus -) { - switch (status) { - case WorkbenchJobActivityStatus.NeedsApproval: - return theme.colors['border-warning'] - case WorkbenchJobActivityStatus.Pending: - case WorkbenchJobActivityStatus.Running: - return theme.colors['border-info'] - case WorkbenchJobActivityStatus.Successful: - return theme.colors['border-success'] - case WorkbenchJobActivityStatus.Failed: - return theme.colors['border-danger'] - default: - return theme.colors.border - } -} - const CardSC = styled.div<{ $status: WorkbenchJobActivityStatus }>( ({ theme, $status }) => ({ display: 'flex', @@ -239,7 +221,7 @@ const CardSC = styled.div<{ $status: WorkbenchJobActivityStatus }>( minWidth: 0, padding: theme.spacing.medium, border: theme.borders.default, - borderLeft: `2px solid ${statusBorderColor(theme, $status)}`, + borderLeft: `2px solid ${getActionStatusBorderColor(theme, $status)}`, borderRadius: theme.borderRadiuses.large, background: theme.colors['fill-zero'], overflow: 'hidden', diff --git a/assets/src/components/workbenches/workbench/job/workbenchJobActionsUtils.tsx b/assets/src/components/workbenches/workbench/job/workbenchJobActionsUtils.tsx index 689b7a6d0f..147456b6f9 100644 --- a/assets/src/components/workbenches/workbench/job/workbenchJobActionsUtils.tsx +++ b/assets/src/components/workbenches/workbench/job/workbenchJobActionsUtils.tsx @@ -40,6 +40,28 @@ export function isWorkbenchJobAction( return !!activity.type && ACTION_TYPES.has(activity.type) } +export function getActionStatusBorderColor( + theme: DefaultTheme, + status: Nullable +) { + switch (status) { + case WorkbenchJobActivityStatus.NeedsApproval: + return theme.colors['border-warning'] + case WorkbenchJobActivityStatus.Pending: + return theme.colors['border-input'] + case WorkbenchJobActivityStatus.Running: + return theme.colors['border-info'] + case WorkbenchJobActivityStatus.Successful: + return theme.colors['border-success'] + case WorkbenchJobActivityStatus.Failed: + return theme.colors['border-danger'] + case WorkbenchJobActivityStatus.Cancelled: + return theme.colors['border-input'] + default: + return theme.colors.border + } +} + export function getActionSectionKey( status: Nullable ): WorkbenchJobActionSectionKey | null { From 319824f1c8ec9dc5b70f72b28779997d0e3d51ee Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Tue, 28 Jul 2026 12:41:14 +0200 Subject: [PATCH 37/50] add configure actions step --- .../create-edit/WorkbenchCreateOrEdit.tsx | 24 ++ .../create-edit/WorkbenchFormSteps.tsx | 230 ++++++++++++++++++ assets/src/generated/graphql.ts | 89 +++++-- .../generated/persisted-queries/client.json | 60 ++--- assets/src/graph/workbench.graphql | 24 ++ lib/console/graphql/deployments/workbench.ex | 16 ++ schema/schema.graphql | 34 +++ 7 files changed, 428 insertions(+), 49 deletions(-) diff --git a/assets/src/components/workbenches/workbench/create-edit/WorkbenchCreateOrEdit.tsx b/assets/src/components/workbenches/workbench/create-edit/WorkbenchCreateOrEdit.tsx index d6b722352e..e1c83f06e6 100644 --- a/assets/src/components/workbenches/workbench/create-edit/WorkbenchCreateOrEdit.tsx +++ b/assets/src/components/workbenches/workbench/create-edit/WorkbenchCreateOrEdit.tsx @@ -451,6 +451,18 @@ function formStateToAttributes(state: WorkbenchFormState): WorkbenchAttributes { // Keep explicit empty list so "delete all skills" is persisted. rest.workbenchSkills = (state.workbenchSkills ?? []).filter(isNonNullable) + // Keep explicit namespace lists so clearing required/blacklisted namespaces persists. + if (state.modes?.kubernetes) { + rest.modes ??= {} + rest.modes.kubernetes = { + ...rest.modes.kubernetes, + update: state.modes.kubernetes.update ?? false, + delete: state.modes.kubernetes.delete ?? false, + requireNamespaces: state.modes.kubernetes.requireNamespaces ?? [], + excludeNamespaces: state.modes.kubernetes.excludeNamespaces ?? [], + } + } + return { name: name ?? '', ...(r && { readBindings: r.map(bindingToBindingAttributes) }), @@ -567,5 +579,17 @@ function workbenchModesToAttributes( }, } : {}), + ...(modes.kubernetes + ? { + kubernetes: { + update: modes.kubernetes.update, + delete: modes.kubernetes.delete, + requireNamespaces: + modes.kubernetes.requireNamespaces?.filter(isNonNullable) ?? [], + excludeNamespaces: + modes.kubernetes.excludeNamespaces?.filter(isNonNullable) ?? [], + }, + } + : {}), } } diff --git a/assets/src/components/workbenches/workbench/create-edit/WorkbenchFormSteps.tsx b/assets/src/components/workbenches/workbench/create-edit/WorkbenchFormSteps.tsx index 7475ce8cdf..7ccaa69e7e 100644 --- a/assets/src/components/workbenches/workbench/create-edit/WorkbenchFormSteps.tsx +++ b/assets/src/components/workbenches/workbench/create-edit/WorkbenchFormSteps.tsx @@ -1,4 +1,5 @@ import { + AddIcon, ArrowTopRightIcon, Button, Card, @@ -6,7 +7,9 @@ import { CardTabs, Checkbox, Chip, + ChipList, CloseIcon, + ComboBox, Divider, Flex, FormField, @@ -14,6 +17,7 @@ import { InfoOutlineIcon, Input2, isValidRepoUrl, + ListBoxFooterPlus, ListBoxItem, Radio, RadioGroup, @@ -25,14 +29,18 @@ import { import { AgentRunMode, PolicyBindingFragment, + useAgentRuntimeQuery, useAgentRuntimeReposQuery, + useClusterNamespacesQuery, useGitRepositoriesQuery, useGitRepositoryQuery, useWorkbenchToolsQuery, } from 'generated/graphql' import { produce } from 'immer' +import Fuse from 'fuse.js' import { Dispatch, + KeyboardEvent, ReactNode, SetStateAction, useCallback, @@ -747,6 +755,226 @@ export function WorkbenchCodingAgentStep({ ) } +export function WorkbenchConfigureActionsStep({ + formState, + setFormState, +}: WorkbenchFormStepProps) { + const update = createFormUpdater(setFormState) + const kubernetes = formState.modes?.kubernetes + const allowUpdates = kubernetes?.update ?? false + const allowDeletes = kubernetes?.delete ?? false + const requireNamespaces = (kubernetes?.requireNamespaces ?? []).filter( + (ns): ns is string => !!ns + ) + const excludeNamespaces = (kubernetes?.excludeNamespaces ?? []).filter( + (ns): ns is string => !!ns + ) + + const { data: runtimeData } = useAgentRuntimeQuery({ + variables: { id: formState.agentRuntimeId ?? '' }, + skip: !formState.agentRuntimeId, + }) + const clusterId = runtimeData?.agentRuntime?.cluster?.id + const { data: namespacesData, loading: namespacesLoading } = + useClusterNamespacesQuery({ + variables: { clusterId }, + skip: !clusterId, + }) + const namespaceOptions = useMemo( + () => + (namespacesData?.namespaces ?? []) + .map((ns) => ns?.metadata?.name) + .filter(isNonNullable) + .sort((a, b) => a.localeCompare(b)), + [namespacesData?.namespaces] + ) + + const setKubernetes = ( + patch: Partial<{ + update: boolean + delete: boolean + requireNamespaces: string[] + excludeNamespaces: string[] + }> + ) => + update((d) => { + d.modes ??= {} + d.modes.kubernetes = { + update: allowUpdates, + delete: allowDeletes, + requireNamespaces, + excludeNamespaces, + ...d.modes.kubernetes, + ...patch, + } + }) + + return ( + + + + setKubernetes({ update: e.target.checked })} + > + Allow updates + + setKubernetes({ delete: e.target.checked })} + > + Allow deletes + + + + + setKubernetes({ requireNamespaces: next })} + /> + + setKubernetes({ excludeNamespaces: next })} + /> + + ) +} + +function NamespaceListField({ + label, + hint, + values, + namespaces, + loading, + severity, + onChange, +}: { + label: string + hint: string + values: string[] + namespaces: string[] + loading?: boolean + severity?: 'danger' + onChange: (next: string[]) => void +}) { + const [draft, setDraft] = useState('') + const [isOpen, setIsOpen] = useState(false) + const trimmed = draft.trim() + + const suggestions = useMemo(() => { + const available = namespaces.filter((ns) => !values.includes(ns)) + if (!trimmed) return available + return new Fuse(available, { threshold: 0.25 }) + .search(trimmed) + .map(({ item }) => item) + }, [namespaces, values, trimmed]) + + const canAddCustom = + !!trimmed && !values.includes(trimmed) && !namespaces.includes(trimmed) + + const addNamespace = (raw: string) => { + const value = raw.trim() + if (!value || values.includes(value)) { + setDraft('') + return + } + onChange([...values, value]) + setDraft('') + setIsOpen(false) + } + + return ( + + + { + if (key) addNamespace(String(key)) + }} + isOpen={isOpen} + onOpenChange={setIsOpen} + loading={loading} + allowsEmptyCollection={canAddCustom} + inputProps={{ + placeholder: 'Search namespace name', + onKeyDown: (e: KeyboardEvent) => { + if (e.key !== 'Enter' || !canAddCustom) return + e.preventDefault() + addNamespace(trimmed) + }, + }} + onFooterClick={canAddCustom ? () => addNamespace(trimmed) : undefined} + dropdownFooter={ + canAddCustom ? ( + + } + > + Use "{trimmed}" + + ) : undefined + } + > + {suggestions.map((ns) => ( + + ))} + + {values.length > 0 && ( + true} + onClick={(value) => onChange(values.filter((ns) => ns !== value))} + /> + )} + + + ) +} + export function WorkbenchAccessPolicyStep({ formState, setFormState, @@ -1044,6 +1272,7 @@ export const WORKBENCH_STEP_LABELS = [ 'Workbench setup', 'Skills configuration', 'Coding agent', + 'Configure actions', 'Access policy', 'Attach tools', ] as const @@ -1056,6 +1285,7 @@ export const workbenchFormSteps: WorkbenchFormStep[] = [ { label: 'Workbench setup', component: WorkbenchSetupStep }, { label: 'Skills configuration', component: WorkbenchSkillsConfigStep }, { label: 'Coding agent', component: WorkbenchCodingAgentStep }, + { label: 'Configure actions', component: WorkbenchConfigureActionsStep }, { label: 'Access policy', component: WorkbenchAccessPolicyStep }, { label: 'Attach tools', component: WorkbenchAttachToolsStep }, ] diff --git a/assets/src/generated/graphql.ts b/assets/src/generated/graphql.ts index 44603f2b05..a3f5be82a2 100644 --- a/assets/src/generated/graphql.ts +++ b/assets/src/generated/graphql.ts @@ -16248,6 +16248,29 @@ export type WorkbenchJobEdge = { node?: Maybe; }; +export type WorkbenchJobKubernetesModes = { + __typename?: 'WorkbenchJobKubernetesModes'; + /** whether kubernetes delete actions are enabled */ + delete?: Maybe; + /** namespaces the agent can never act in */ + excludeNamespaces?: Maybe>>; + /** if set, actions are only allowed in these namespaces */ + requireNamespaces?: Maybe>>; + /** whether kubernetes update actions are enabled */ + update?: Maybe; +}; + +export type WorkbenchJobKubernetesModesAttributes = { + /** whether kubernetes delete actions are enabled */ + delete?: InputMaybe; + /** namespaces the agent can never act in */ + excludeNamespaces?: InputMaybe>>; + /** if set, actions are only allowed in these namespaces */ + requireNamespaces?: InputMaybe>>; + /** whether kubernetes update actions are enabled */ + update?: InputMaybe; +}; + export type WorkbenchJobModel = { __typename?: 'WorkbenchJobModel'; /** the model name for this job */ @@ -16269,6 +16292,8 @@ export type WorkbenchJobModes = { budget?: Maybe; /** coding mode options for this job */ coding?: Maybe; + /** kubernetes action options for this job */ + kubernetes?: Maybe; /** model override for this job */ model?: Maybe; /** whether planning mode is enabled for this job */ @@ -16280,6 +16305,8 @@ export type WorkbenchJobModesAttributes = { budget?: InputMaybe; /** coding mode options for this job */ coding?: InputMaybe; + /** kubernetes action options for this job */ + kubernetes?: InputMaybe; /** model override for this job */ model?: InputMaybe; /** whether planning mode is enabled for this job */ @@ -21090,7 +21117,7 @@ export type IssueWebhookTinyFragment = { __typename?: 'IssueWebhook', id: string export type WorkbenchWebhookTinyFragment = { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null }; -export type WorkbenchFragment = { __typename?: 'Workbench', systemPrompt?: string | null, id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, repository?: { __typename?: 'GitRepository', id: string } | null, configuration?: { __typename?: 'WorkbenchConfiguration', infrastructure?: { __typename?: 'WorkbenchInfrastructure', services?: boolean | null, stacks?: boolean | null, kubernetes?: boolean | null, podLogs?: boolean | null, vulnerabilities?: boolean | null } | null, observability?: { __typename?: 'WorkbenchObservability', logs?: boolean | null, metrics?: boolean | null } | null, coding?: { __typename?: 'WorkbenchCoding', mode?: AgentRunMode | null, repositories?: Array | null, enableBabysitting?: boolean | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, skills?: { __typename?: 'WorkbenchSkills', files?: Array | null, ref?: { __typename?: 'GitRef', ref: string, folder: string } | null } | null, workbenchSkills?: { __typename?: 'WorkbenchSkillConnection', edges?: Array<{ __typename?: 'WorkbenchSkillEdge', node?: { __typename?: 'WorkbenchSkill', id: string, name?: string | null, description?: string | null, contents?: string | null, subagents?: Array | null } | null } | null> | null } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, botUser?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null }; +export type WorkbenchFragment = { __typename?: 'Workbench', systemPrompt?: string | null, id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, repository?: { __typename?: 'GitRepository', id: string } | null, configuration?: { __typename?: 'WorkbenchConfiguration', infrastructure?: { __typename?: 'WorkbenchInfrastructure', services?: boolean | null, stacks?: boolean | null, kubernetes?: boolean | null, podLogs?: boolean | null, vulnerabilities?: boolean | null } | null, observability?: { __typename?: 'WorkbenchObservability', logs?: boolean | null, metrics?: boolean | null } | null, coding?: { __typename?: 'WorkbenchCoding', mode?: AgentRunMode | null, repositories?: Array | null, enableBabysitting?: boolean | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null, kubernetes?: { __typename?: 'WorkbenchJobKubernetesModes', update?: boolean | null, delete?: boolean | null, excludeNamespaces?: Array | null, requireNamespaces?: Array | null } | null } | null, skills?: { __typename?: 'WorkbenchSkills', files?: Array | null, ref?: { __typename?: 'GitRef', ref: string, folder: string } | null } | null, workbenchSkills?: { __typename?: 'WorkbenchSkillConnection', edges?: Array<{ __typename?: 'WorkbenchSkillEdge', node?: { __typename?: 'WorkbenchSkill', id: string, name?: string | null, description?: string | null, contents?: string | null, subagents?: Array | null } | null } | null> | null } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, botUser?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null }; export type WorkbenchToolTinyFragment = { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null }; @@ -21126,15 +21153,15 @@ export type WorkbenchJobProgressFragment = { __typename?: 'WorkbenchJobProgress' export type WorkbenchTextStreamFragment = { __typename?: 'WorkbenchTextStream', activityId?: string | null, text?: string | null }; -export type WorkbenchCronFragment = { __typename?: 'WorkbenchCron', id: string, crontab?: string | null, prompt?: string | null, userId?: string | null, lastRunAt?: string | null, nextRunAt?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null }; +export type WorkbenchCronFragment = { __typename?: 'WorkbenchCron', id: string, crontab?: string | null, prompt?: string | null, userId?: string | null, lastRunAt?: string | null, nextRunAt?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null, kubernetes?: { __typename?: 'WorkbenchJobKubernetesModes', update?: boolean | null, delete?: boolean | null, excludeNamespaces?: Array | null, requireNamespaces?: Array | null } | null } | null }; export type WorkbenchPromptFragment = { __typename?: 'WorkbenchPrompt', id: string, title: string, category: string, prompt?: string | null, insertedAt?: string | null, updatedAt?: string | null }; -export type WorkbenchWebhookFragment = { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, prompt?: string | null, priority?: number | null, userId?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, matches?: { __typename?: 'WorkbenchWebhookMatches', regex?: string | null, substring?: string | null, caseInsensitive?: boolean | null } | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, name: string, type: ObservabilityWebhookType, url: string } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, name: string, provider: IssueWebhookProvider, url: string, insertedAt?: string | null, updatedAt?: string | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null } | null }; +export type WorkbenchWebhookFragment = { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, prompt?: string | null, priority?: number | null, userId?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null, kubernetes?: { __typename?: 'WorkbenchJobKubernetesModes', update?: boolean | null, delete?: boolean | null, excludeNamespaces?: Array | null, requireNamespaces?: Array | null } | null } | null, matches?: { __typename?: 'WorkbenchWebhookMatches', regex?: string | null, substring?: string | null, caseInsensitive?: boolean | null } | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, name: string, type: ObservabilityWebhookType, url: string } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, name: string, provider: IssueWebhookProvider, url: string, insertedAt?: string | null, updatedAt?: string | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null } | null }; export type ChatProviderConnectionFragment = { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType, configuration: { __typename?: 'ChatProviderConnectionConfiguration', slack?: { __typename?: 'SlackConnectionConfiguration', botId?: string | null } | null, teams?: { __typename?: 'TeamsConnectionConfiguration', clientId?: string | null, tenantId?: string | null } | null }, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null }; -export type WorkbenchChatbotFragment = { __typename?: 'WorkbenchChatbot', id: string, channel: string, prompt?: string | null, messageBehavior: WorkbenchChatbotMessageBehavior, userId?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType, configuration: { __typename?: 'ChatProviderConnectionConfiguration', slack?: { __typename?: 'SlackConnectionConfiguration', botId?: string | null } | null, teams?: { __typename?: 'TeamsConnectionConfiguration', clientId?: string | null, tenantId?: string | null } | null }, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null } | null, user?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null }; +export type WorkbenchChatbotFragment = { __typename?: 'WorkbenchChatbot', id: string, channel: string, prompt?: string | null, messageBehavior: WorkbenchChatbotMessageBehavior, userId?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null, kubernetes?: { __typename?: 'WorkbenchJobKubernetesModes', update?: boolean | null, delete?: boolean | null, excludeNamespaces?: Array | null, requireNamespaces?: Array | null } | null } | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType, configuration: { __typename?: 'ChatProviderConnectionConfiguration', slack?: { __typename?: 'SlackConnectionConfiguration', botId?: string | null } | null, teams?: { __typename?: 'TeamsConnectionConfiguration', clientId?: string | null, tenantId?: string | null } | null }, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null } | null, user?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null }; export type WorkbenchIssueFragment = { __typename?: 'Issue', id: string, title: string, externalId: string, provider: IssueWebhookProvider, status: IssueStatus, url: string, insertedAt?: string | null, updatedAt?: string | null, workbench?: { __typename?: 'Workbench', id: string } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus } | null }; @@ -21206,7 +21233,7 @@ export type WorkbenchQueryVariables = Exact<{ }>; -export type WorkbenchQuery = { __typename?: 'RootQueryType', workbench?: { __typename?: 'Workbench', systemPrompt?: string | null, id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, repository?: { __typename?: 'GitRepository', id: string } | null, configuration?: { __typename?: 'WorkbenchConfiguration', infrastructure?: { __typename?: 'WorkbenchInfrastructure', services?: boolean | null, stacks?: boolean | null, kubernetes?: boolean | null, podLogs?: boolean | null, vulnerabilities?: boolean | null } | null, observability?: { __typename?: 'WorkbenchObservability', logs?: boolean | null, metrics?: boolean | null } | null, coding?: { __typename?: 'WorkbenchCoding', mode?: AgentRunMode | null, repositories?: Array | null, enableBabysitting?: boolean | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, skills?: { __typename?: 'WorkbenchSkills', files?: Array | null, ref?: { __typename?: 'GitRef', ref: string, folder: string } | null } | null, workbenchSkills?: { __typename?: 'WorkbenchSkillConnection', edges?: Array<{ __typename?: 'WorkbenchSkillEdge', node?: { __typename?: 'WorkbenchSkill', id: string, name?: string | null, description?: string | null, contents?: string | null, subagents?: Array | null } | null } | null> | null } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, botUser?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null } | null }; +export type WorkbenchQuery = { __typename?: 'RootQueryType', workbench?: { __typename?: 'Workbench', systemPrompt?: string | null, id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, repository?: { __typename?: 'GitRepository', id: string } | null, configuration?: { __typename?: 'WorkbenchConfiguration', infrastructure?: { __typename?: 'WorkbenchInfrastructure', services?: boolean | null, stacks?: boolean | null, kubernetes?: boolean | null, podLogs?: boolean | null, vulnerabilities?: boolean | null } | null, observability?: { __typename?: 'WorkbenchObservability', logs?: boolean | null, metrics?: boolean | null } | null, coding?: { __typename?: 'WorkbenchCoding', mode?: AgentRunMode | null, repositories?: Array | null, enableBabysitting?: boolean | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null, kubernetes?: { __typename?: 'WorkbenchJobKubernetesModes', update?: boolean | null, delete?: boolean | null, excludeNamespaces?: Array | null, requireNamespaces?: Array | null } | null } | null, skills?: { __typename?: 'WorkbenchSkills', files?: Array | null, ref?: { __typename?: 'GitRef', ref: string, folder: string } | null } | null, workbenchSkills?: { __typename?: 'WorkbenchSkillConnection', edges?: Array<{ __typename?: 'WorkbenchSkillEdge', node?: { __typename?: 'WorkbenchSkill', id: string, name?: string | null, description?: string | null, contents?: string | null, subagents?: Array | null } | null } | null> | null } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, botUser?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null } | null }; export type WorkbenchAccessibleUserFragment = { __typename?: 'User', id: string, name: string, email: string, profile?: string | null }; @@ -21291,7 +21318,7 @@ export type GetWorkbenchCronMutationVariables = Exact<{ }>; -export type GetWorkbenchCronMutation = { __typename?: 'RootMutationType', workbenchCron?: { __typename?: 'WorkbenchCron', id: string, crontab?: string | null, prompt?: string | null, userId?: string | null, lastRunAt?: string | null, nextRunAt?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null } | null }; +export type GetWorkbenchCronMutation = { __typename?: 'RootMutationType', workbenchCron?: { __typename?: 'WorkbenchCron', id: string, crontab?: string | null, prompt?: string | null, userId?: string | null, lastRunAt?: string | null, nextRunAt?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null, kubernetes?: { __typename?: 'WorkbenchJobKubernetesModes', update?: boolean | null, delete?: boolean | null, excludeNamespaces?: Array | null, requireNamespaces?: Array | null } | null } | null } | null }; export type WorkbenchCronsQueryVariables = Exact<{ id: Scalars['ID']['input']; @@ -21300,7 +21327,7 @@ export type WorkbenchCronsQueryVariables = Exact<{ }>; -export type WorkbenchCronsQuery = { __typename?: 'RootQueryType', workbench?: { __typename?: 'Workbench', id: string, crons?: { __typename?: 'WorkbenchCronConnection', pageInfo: { __typename?: 'PageInfo', hasNextPage: boolean, endCursor?: string | null, hasPreviousPage: boolean, startCursor?: string | null }, edges?: Array<{ __typename?: 'WorkbenchCronEdge', node?: { __typename?: 'WorkbenchCron', id: string, crontab?: string | null, prompt?: string | null, userId?: string | null, lastRunAt?: string | null, nextRunAt?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null } | null } | null> | null } | null } | null }; +export type WorkbenchCronsQuery = { __typename?: 'RootQueryType', workbench?: { __typename?: 'Workbench', id: string, crons?: { __typename?: 'WorkbenchCronConnection', pageInfo: { __typename?: 'PageInfo', hasNextPage: boolean, endCursor?: string | null, hasPreviousPage: boolean, startCursor?: string | null }, edges?: Array<{ __typename?: 'WorkbenchCronEdge', node?: { __typename?: 'WorkbenchCron', id: string, crontab?: string | null, prompt?: string | null, userId?: string | null, lastRunAt?: string | null, nextRunAt?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null, kubernetes?: { __typename?: 'WorkbenchJobKubernetesModes', update?: boolean | null, delete?: boolean | null, excludeNamespaces?: Array | null, requireNamespaces?: Array | null } | null } | null } | null } | null> | null } | null } | null }; export type UnifiedWorkbenchSkillTinyFragment = { __typename?: 'UnifiedWorkbenchSkill', id?: string | null, name?: string | null, description?: string | null, subagents?: Array | null }; @@ -21327,7 +21354,7 @@ export type WorkbenchWebhooksQueryVariables = Exact<{ }>; -export type WorkbenchWebhooksQuery = { __typename?: 'RootQueryType', workbench?: { __typename?: 'Workbench', id: string, webhooks?: { __typename?: 'WorkbenchWebhookConnection', pageInfo: { __typename?: 'PageInfo', hasNextPage: boolean, endCursor?: string | null, hasPreviousPage: boolean, startCursor?: string | null }, edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, prompt?: string | null, priority?: number | null, userId?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, matches?: { __typename?: 'WorkbenchWebhookMatches', regex?: string | null, substring?: string | null, caseInsensitive?: boolean | null } | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, name: string, type: ObservabilityWebhookType, url: string } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, name: string, provider: IssueWebhookProvider, url: string, insertedAt?: string | null, updatedAt?: string | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null } | null } | null } | null> | null } | null } | null }; +export type WorkbenchWebhooksQuery = { __typename?: 'RootQueryType', workbench?: { __typename?: 'Workbench', id: string, webhooks?: { __typename?: 'WorkbenchWebhookConnection', pageInfo: { __typename?: 'PageInfo', hasNextPage: boolean, endCursor?: string | null, hasPreviousPage: boolean, startCursor?: string | null }, edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, prompt?: string | null, priority?: number | null, userId?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null, kubernetes?: { __typename?: 'WorkbenchJobKubernetesModes', update?: boolean | null, delete?: boolean | null, excludeNamespaces?: Array | null, requireNamespaces?: Array | null } | null } | null, matches?: { __typename?: 'WorkbenchWebhookMatches', regex?: string | null, substring?: string | null, caseInsensitive?: boolean | null } | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, name: string, type: ObservabilityWebhookType, url: string } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, name: string, provider: IssueWebhookProvider, url: string, insertedAt?: string | null, updatedAt?: string | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null } | null } | null } | null> | null } | null } | null }; export type WorkbenchChatbotsQueryVariables = Exact<{ id: Scalars['ID']['input']; @@ -21336,14 +21363,14 @@ export type WorkbenchChatbotsQueryVariables = Exact<{ }>; -export type WorkbenchChatbotsQuery = { __typename?: 'RootQueryType', workbench?: { __typename?: 'Workbench', id: string, chatbots?: { __typename?: 'WorkbenchChatbotConnection', pageInfo: { __typename?: 'PageInfo', hasNextPage: boolean, endCursor?: string | null, hasPreviousPage: boolean, startCursor?: string | null }, edges?: Array<{ __typename?: 'WorkbenchChatbotEdge', node?: { __typename?: 'WorkbenchChatbot', id: string, channel: string, prompt?: string | null, messageBehavior: WorkbenchChatbotMessageBehavior, userId?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType, configuration: { __typename?: 'ChatProviderConnectionConfiguration', slack?: { __typename?: 'SlackConnectionConfiguration', botId?: string | null } | null, teams?: { __typename?: 'TeamsConnectionConfiguration', clientId?: string | null, tenantId?: string | null } | null }, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null } | null, user?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null } | null } | null> | null } | null } | null }; +export type WorkbenchChatbotsQuery = { __typename?: 'RootQueryType', workbench?: { __typename?: 'Workbench', id: string, chatbots?: { __typename?: 'WorkbenchChatbotConnection', pageInfo: { __typename?: 'PageInfo', hasNextPage: boolean, endCursor?: string | null, hasPreviousPage: boolean, startCursor?: string | null }, edges?: Array<{ __typename?: 'WorkbenchChatbotEdge', node?: { __typename?: 'WorkbenchChatbot', id: string, channel: string, prompt?: string | null, messageBehavior: WorkbenchChatbotMessageBehavior, userId?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null, kubernetes?: { __typename?: 'WorkbenchJobKubernetesModes', update?: boolean | null, delete?: boolean | null, excludeNamespaces?: Array | null, requireNamespaces?: Array | null } | null } | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType, configuration: { __typename?: 'ChatProviderConnectionConfiguration', slack?: { __typename?: 'SlackConnectionConfiguration', botId?: string | null } | null, teams?: { __typename?: 'TeamsConnectionConfiguration', clientId?: string | null, tenantId?: string | null } | null }, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null } | null, user?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null } | null } | null> | null } | null } | null }; export type WorkbenchChatbotQueryVariables = Exact<{ id: Scalars['ID']['input']; }>; -export type WorkbenchChatbotQuery = { __typename?: 'RootQueryType', workbenchChatbot?: { __typename?: 'WorkbenchChatbot', id: string, channel: string, prompt?: string | null, messageBehavior: WorkbenchChatbotMessageBehavior, userId?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType, configuration: { __typename?: 'ChatProviderConnectionConfiguration', slack?: { __typename?: 'SlackConnectionConfiguration', botId?: string | null } | null, teams?: { __typename?: 'TeamsConnectionConfiguration', clientId?: string | null, tenantId?: string | null } | null }, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null } | null, user?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null } | null }; +export type WorkbenchChatbotQuery = { __typename?: 'RootQueryType', workbenchChatbot?: { __typename?: 'WorkbenchChatbot', id: string, channel: string, prompt?: string | null, messageBehavior: WorkbenchChatbotMessageBehavior, userId?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null, kubernetes?: { __typename?: 'WorkbenchJobKubernetesModes', update?: boolean | null, delete?: boolean | null, excludeNamespaces?: Array | null, requireNamespaces?: Array | null } | null } | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType, configuration: { __typename?: 'ChatProviderConnectionConfiguration', slack?: { __typename?: 'SlackConnectionConfiguration', botId?: string | null } | null, teams?: { __typename?: 'TeamsConnectionConfiguration', clientId?: string | null, tenantId?: string | null } | null }, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null } | null, user?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null } | null }; export type SearchConversationsQueryVariables = Exact<{ chatConnectionId: Scalars['ID']['input']; @@ -21374,7 +21401,7 @@ export type GetWorkbenchWebhookMutationVariables = Exact<{ }>; -export type GetWorkbenchWebhookMutation = { __typename?: 'RootMutationType', getWorkbenchWebhook?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, prompt?: string | null, priority?: number | null, userId?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, matches?: { __typename?: 'WorkbenchWebhookMatches', regex?: string | null, substring?: string | null, caseInsensitive?: boolean | null } | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, name: string, type: ObservabilityWebhookType, url: string } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, name: string, provider: IssueWebhookProvider, url: string, insertedAt?: string | null, updatedAt?: string | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null } | null } | null }; +export type GetWorkbenchWebhookMutation = { __typename?: 'RootMutationType', getWorkbenchWebhook?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, prompt?: string | null, priority?: number | null, userId?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null, kubernetes?: { __typename?: 'WorkbenchJobKubernetesModes', update?: boolean | null, delete?: boolean | null, excludeNamespaces?: Array | null, requireNamespaces?: Array | null } | null } | null, matches?: { __typename?: 'WorkbenchWebhookMatches', regex?: string | null, substring?: string | null, caseInsensitive?: boolean | null } | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, name: string, type: ObservabilityWebhookType, url: string } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, name: string, provider: IssueWebhookProvider, url: string, insertedAt?: string | null, updatedAt?: string | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null } | null } | null }; export type IssueWebhooksQueryVariables = Exact<{ first?: InputMaybe; @@ -21515,7 +21542,7 @@ export type CreateWorkbenchMutationVariables = Exact<{ }>; -export type CreateWorkbenchMutation = { __typename?: 'RootMutationType', createWorkbench?: { __typename?: 'Workbench', systemPrompt?: string | null, id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, repository?: { __typename?: 'GitRepository', id: string } | null, configuration?: { __typename?: 'WorkbenchConfiguration', infrastructure?: { __typename?: 'WorkbenchInfrastructure', services?: boolean | null, stacks?: boolean | null, kubernetes?: boolean | null, podLogs?: boolean | null, vulnerabilities?: boolean | null } | null, observability?: { __typename?: 'WorkbenchObservability', logs?: boolean | null, metrics?: boolean | null } | null, coding?: { __typename?: 'WorkbenchCoding', mode?: AgentRunMode | null, repositories?: Array | null, enableBabysitting?: boolean | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, skills?: { __typename?: 'WorkbenchSkills', files?: Array | null, ref?: { __typename?: 'GitRef', ref: string, folder: string } | null } | null, workbenchSkills?: { __typename?: 'WorkbenchSkillConnection', edges?: Array<{ __typename?: 'WorkbenchSkillEdge', node?: { __typename?: 'WorkbenchSkill', id: string, name?: string | null, description?: string | null, contents?: string | null, subagents?: Array | null } | null } | null> | null } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, botUser?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null } | null }; +export type CreateWorkbenchMutation = { __typename?: 'RootMutationType', createWorkbench?: { __typename?: 'Workbench', systemPrompt?: string | null, id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, repository?: { __typename?: 'GitRepository', id: string } | null, configuration?: { __typename?: 'WorkbenchConfiguration', infrastructure?: { __typename?: 'WorkbenchInfrastructure', services?: boolean | null, stacks?: boolean | null, kubernetes?: boolean | null, podLogs?: boolean | null, vulnerabilities?: boolean | null } | null, observability?: { __typename?: 'WorkbenchObservability', logs?: boolean | null, metrics?: boolean | null } | null, coding?: { __typename?: 'WorkbenchCoding', mode?: AgentRunMode | null, repositories?: Array | null, enableBabysitting?: boolean | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null, kubernetes?: { __typename?: 'WorkbenchJobKubernetesModes', update?: boolean | null, delete?: boolean | null, excludeNamespaces?: Array | null, requireNamespaces?: Array | null } | null } | null, skills?: { __typename?: 'WorkbenchSkills', files?: Array | null, ref?: { __typename?: 'GitRef', ref: string, folder: string } | null } | null, workbenchSkills?: { __typename?: 'WorkbenchSkillConnection', edges?: Array<{ __typename?: 'WorkbenchSkillEdge', node?: { __typename?: 'WorkbenchSkill', id: string, name?: string | null, description?: string | null, contents?: string | null, subagents?: Array | null } | null } | null> | null } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, botUser?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null } | null }; export type UpdateWorkbenchMutationVariables = Exact<{ id: Scalars['ID']['input']; @@ -21523,7 +21550,7 @@ export type UpdateWorkbenchMutationVariables = Exact<{ }>; -export type UpdateWorkbenchMutation = { __typename?: 'RootMutationType', updateWorkbench?: { __typename?: 'Workbench', systemPrompt?: string | null, id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, repository?: { __typename?: 'GitRepository', id: string } | null, configuration?: { __typename?: 'WorkbenchConfiguration', infrastructure?: { __typename?: 'WorkbenchInfrastructure', services?: boolean | null, stacks?: boolean | null, kubernetes?: boolean | null, podLogs?: boolean | null, vulnerabilities?: boolean | null } | null, observability?: { __typename?: 'WorkbenchObservability', logs?: boolean | null, metrics?: boolean | null } | null, coding?: { __typename?: 'WorkbenchCoding', mode?: AgentRunMode | null, repositories?: Array | null, enableBabysitting?: boolean | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, skills?: { __typename?: 'WorkbenchSkills', files?: Array | null, ref?: { __typename?: 'GitRef', ref: string, folder: string } | null } | null, workbenchSkills?: { __typename?: 'WorkbenchSkillConnection', edges?: Array<{ __typename?: 'WorkbenchSkillEdge', node?: { __typename?: 'WorkbenchSkill', id: string, name?: string | null, description?: string | null, contents?: string | null, subagents?: Array | null } | null } | null> | null } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, botUser?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null } | null }; +export type UpdateWorkbenchMutation = { __typename?: 'RootMutationType', updateWorkbench?: { __typename?: 'Workbench', systemPrompt?: string | null, id: string, name: string, description?: string | null, agentRuntime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, repository?: { __typename?: 'GitRepository', id: string } | null, configuration?: { __typename?: 'WorkbenchConfiguration', infrastructure?: { __typename?: 'WorkbenchInfrastructure', services?: boolean | null, stacks?: boolean | null, kubernetes?: boolean | null, podLogs?: boolean | null, vulnerabilities?: boolean | null } | null, observability?: { __typename?: 'WorkbenchObservability', logs?: boolean | null, metrics?: boolean | null } | null, coding?: { __typename?: 'WorkbenchCoding', mode?: AgentRunMode | null, repositories?: Array | null, enableBabysitting?: boolean | null } | null } | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null, kubernetes?: { __typename?: 'WorkbenchJobKubernetesModes', update?: boolean | null, delete?: boolean | null, excludeNamespaces?: Array | null, requireNamespaces?: Array | null } | null } | null, skills?: { __typename?: 'WorkbenchSkills', files?: Array | null, ref?: { __typename?: 'GitRef', ref: string, folder: string } | null } | null, workbenchSkills?: { __typename?: 'WorkbenchSkillConnection', edges?: Array<{ __typename?: 'WorkbenchSkillEdge', node?: { __typename?: 'WorkbenchSkill', id: string, name?: string | null, description?: string | null, contents?: string | null, subagents?: Array | null } | null } | null> | null } | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, scmConnection?: { __typename?: 'ScmConnection', id: string, name: string, type: ScmType } | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, configuration?: { __typename?: 'WorkbenchToolConfiguration', http?: { __typename?: 'WorkbenchToolHttpConfiguration', url?: string | null, method?: string | null, body?: string | null, inputSchema?: Record | null, headers?: Array<{ __typename?: 'WorkbenchToolHttpHeader', name?: string | null, value?: string | null } | null> | null } | null, datadog?: { __typename?: 'WorkbenchToolDatadogConnection', site?: string | null } | null, elastic?: { __typename?: 'WorkbenchToolElasticConnection', index: string, url: string, username: string } | null, opensearch?: { __typename?: 'WorkbenchToolOpensearchConnection', host: string, index: string, awsAccessKeyId?: string | null, awsRegion?: string | null, assumeRoleArn?: string | null, usePodIdentity?: boolean | null } | null, loki?: { __typename?: 'WorkbenchToolLokiConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, prometheus?: { __typename?: 'WorkbenchToolPrometheusConnection', url?: string | null, username?: string | null, tenantId?: string | null, awsSigv4?: boolean | null, awsAccessKeyId?: string | null, awsRegion?: string | null } | null, tempo?: { __typename?: 'WorkbenchToolTempoConnection', url?: string | null, username?: string | null, tenantId?: string | null } | null, jaeger?: { __typename?: 'WorkbenchToolJaegerConnection', url?: string | null, username?: string | null } | null, atlassian?: { __typename?: 'WorkbenchToolAtlassianConnection', email?: string | null, url: string } | null, linear?: { __typename?: 'WorkbenchToolLinearConnection', url: string } | null, slack?: { __typename?: 'WorkbenchToolSlackConnection', url: string } | null, pagerduty?: { __typename?: 'WorkbenchToolPagerdutyConnection', url: string } | null, teams?: { __typename?: 'WorkbenchToolTeamsConnection', clientId?: string | null, tenantId?: string | null } | null, splunk?: { __typename?: 'WorkbenchToolSplunkConnection', url?: string | null, username?: string | null } | null, cloudwatch?: { __typename?: 'WorkbenchToolCloudwatchConnection', logGroupNames?: Array | null, region?: string | null, roleArn?: string | null, roleSessionName?: string | null } | null, azure?: { __typename?: 'WorkbenchToolAzureConnection', subscriptionId?: string | null, tenantId?: string | null, clientId?: string | null, prometheusUrl?: string | null } | null, dynatrace?: { __typename?: 'WorkbenchToolDynatraceConnection', url?: string | null } | null, sentry?: { __typename?: 'WorkbenchToolSentryConnection', url?: string | null } | null, github?: { __typename?: 'WorkbenchToolGithubConnection', url: string, toolset?: string | null, appId?: string | null, installationId?: string | null } | null, gitlab?: { __typename?: 'WorkbenchToolGitlabConnection', url?: string | null } | null, bitbucket?: { __typename?: 'WorkbenchToolBitbucketConnection', url?: string | null } | null, bitbucketDatacenter?: { __typename?: 'WorkbenchToolBitbucketDatacenterConnection', url?: string | null } | null, azureDevops?: { __typename?: 'WorkbenchToolAzureDevopsConnection', url?: string | null } | null, lambda?: { __typename?: 'WorkbenchToolLambdaConnection', lambdaArn?: string | null, description?: string | null, inputSchema?: Record | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', identifier?: string | null, description?: string | null, inputSchema?: Record | null } | null, docker?: { __typename?: 'WorkbenchToolDockerConnection', url?: string | null, provider?: HelmAuthProvider | null, proxy?: { __typename?: 'HttpProxyConfiguration', url: string, noproxy?: string | null } | null } | null } | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, botUser?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null, webhooks?: { __typename?: 'WorkbenchWebhookConnection', edges?: Array<{ __typename?: 'WorkbenchWebhookEdge', node?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, priority?: number | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, type: ObservabilityWebhookType } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, provider: IssueWebhookProvider } | null } | null } | null> | null } | null } | null }; export type CreateWorkbenchEvalMutationVariables = Exact<{ workbenchId: Scalars['ID']['input']; @@ -21637,7 +21664,7 @@ export type CreateWorkbenchCronMutationVariables = Exact<{ }>; -export type CreateWorkbenchCronMutation = { __typename?: 'RootMutationType', createWorkbenchCron?: { __typename?: 'WorkbenchCron', id: string, crontab?: string | null, prompt?: string | null, userId?: string | null, lastRunAt?: string | null, nextRunAt?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null } | null }; +export type CreateWorkbenchCronMutation = { __typename?: 'RootMutationType', createWorkbenchCron?: { __typename?: 'WorkbenchCron', id: string, crontab?: string | null, prompt?: string | null, userId?: string | null, lastRunAt?: string | null, nextRunAt?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null, kubernetes?: { __typename?: 'WorkbenchJobKubernetesModes', update?: boolean | null, delete?: boolean | null, excludeNamespaces?: Array | null, requireNamespaces?: Array | null } | null } | null } | null }; export type UpdateWorkbenchCronMutationVariables = Exact<{ id: Scalars['ID']['input']; @@ -21645,7 +21672,7 @@ export type UpdateWorkbenchCronMutationVariables = Exact<{ }>; -export type UpdateWorkbenchCronMutation = { __typename?: 'RootMutationType', updateWorkbenchCron?: { __typename?: 'WorkbenchCron', id: string, crontab?: string | null, prompt?: string | null, userId?: string | null, lastRunAt?: string | null, nextRunAt?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null } | null }; +export type UpdateWorkbenchCronMutation = { __typename?: 'RootMutationType', updateWorkbenchCron?: { __typename?: 'WorkbenchCron', id: string, crontab?: string | null, prompt?: string | null, userId?: string | null, lastRunAt?: string | null, nextRunAt?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null, kubernetes?: { __typename?: 'WorkbenchJobKubernetesModes', update?: boolean | null, delete?: boolean | null, excludeNamespaces?: Array | null, requireNamespaces?: Array | null } | null } | null } | null }; export type DeleteWorkbenchCronMutationVariables = Exact<{ id: Scalars['ID']['input']; @@ -21660,7 +21687,7 @@ export type CreateWorkbenchWebhookMutationVariables = Exact<{ }>; -export type CreateWorkbenchWebhookMutation = { __typename?: 'RootMutationType', createWorkbenchWebhook?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, prompt?: string | null, priority?: number | null, userId?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, matches?: { __typename?: 'WorkbenchWebhookMatches', regex?: string | null, substring?: string | null, caseInsensitive?: boolean | null } | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, name: string, type: ObservabilityWebhookType, url: string } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, name: string, provider: IssueWebhookProvider, url: string, insertedAt?: string | null, updatedAt?: string | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null } | null } | null }; +export type CreateWorkbenchWebhookMutation = { __typename?: 'RootMutationType', createWorkbenchWebhook?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, prompt?: string | null, priority?: number | null, userId?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null, kubernetes?: { __typename?: 'WorkbenchJobKubernetesModes', update?: boolean | null, delete?: boolean | null, excludeNamespaces?: Array | null, requireNamespaces?: Array | null } | null } | null, matches?: { __typename?: 'WorkbenchWebhookMatches', regex?: string | null, substring?: string | null, caseInsensitive?: boolean | null } | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, name: string, type: ObservabilityWebhookType, url: string } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, name: string, provider: IssueWebhookProvider, url: string, insertedAt?: string | null, updatedAt?: string | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null } | null } | null }; export type UpdateWorkbenchWebhookMutationVariables = Exact<{ id: Scalars['ID']['input']; @@ -21668,7 +21695,7 @@ export type UpdateWorkbenchWebhookMutationVariables = Exact<{ }>; -export type UpdateWorkbenchWebhookMutation = { __typename?: 'RootMutationType', updateWorkbenchWebhook?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, prompt?: string | null, priority?: number | null, userId?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, matches?: { __typename?: 'WorkbenchWebhookMatches', regex?: string | null, substring?: string | null, caseInsensitive?: boolean | null } | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, name: string, type: ObservabilityWebhookType, url: string } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, name: string, provider: IssueWebhookProvider, url: string, insertedAt?: string | null, updatedAt?: string | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null } | null } | null }; +export type UpdateWorkbenchWebhookMutation = { __typename?: 'RootMutationType', updateWorkbenchWebhook?: { __typename?: 'WorkbenchWebhook', id: string, name?: string | null, prompt?: string | null, priority?: number | null, userId?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null, kubernetes?: { __typename?: 'WorkbenchJobKubernetesModes', update?: boolean | null, delete?: boolean | null, excludeNamespaces?: Array | null, requireNamespaces?: Array | null } | null } | null, matches?: { __typename?: 'WorkbenchWebhookMatches', regex?: string | null, substring?: string | null, caseInsensitive?: boolean | null } | null, webhook?: { __typename?: 'ObservabilityWebhook', id: string, name: string, type: ObservabilityWebhookType, url: string } | null, issueWebhook?: { __typename?: 'IssueWebhook', id: string, name: string, provider: IssueWebhookProvider, url: string, insertedAt?: string | null, updatedAt?: string | null, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null } | null } | null }; export type DeleteWorkbenchWebhookMutationVariables = Exact<{ id: Scalars['ID']['input']; @@ -21683,7 +21710,7 @@ export type CreateWorkbenchChatbotMutationVariables = Exact<{ }>; -export type CreateWorkbenchChatbotMutation = { __typename?: 'RootMutationType', createWorkbenchChatbot?: { __typename?: 'WorkbenchChatbot', id: string, channel: string, prompt?: string | null, messageBehavior: WorkbenchChatbotMessageBehavior, userId?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType, configuration: { __typename?: 'ChatProviderConnectionConfiguration', slack?: { __typename?: 'SlackConnectionConfiguration', botId?: string | null } | null, teams?: { __typename?: 'TeamsConnectionConfiguration', clientId?: string | null, tenantId?: string | null } | null }, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null } | null, user?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null } | null }; +export type CreateWorkbenchChatbotMutation = { __typename?: 'RootMutationType', createWorkbenchChatbot?: { __typename?: 'WorkbenchChatbot', id: string, channel: string, prompt?: string | null, messageBehavior: WorkbenchChatbotMessageBehavior, userId?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null, kubernetes?: { __typename?: 'WorkbenchJobKubernetesModes', update?: boolean | null, delete?: boolean | null, excludeNamespaces?: Array | null, requireNamespaces?: Array | null } | null } | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType, configuration: { __typename?: 'ChatProviderConnectionConfiguration', slack?: { __typename?: 'SlackConnectionConfiguration', botId?: string | null } | null, teams?: { __typename?: 'TeamsConnectionConfiguration', clientId?: string | null, tenantId?: string | null } | null }, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null } | null, user?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null } | null }; export type UpdateWorkbenchChatbotMutationVariables = Exact<{ id: Scalars['ID']['input']; @@ -21691,7 +21718,7 @@ export type UpdateWorkbenchChatbotMutationVariables = Exact<{ }>; -export type UpdateWorkbenchChatbotMutation = { __typename?: 'RootMutationType', updateWorkbenchChatbot?: { __typename?: 'WorkbenchChatbot', id: string, channel: string, prompt?: string | null, messageBehavior: WorkbenchChatbotMessageBehavior, userId?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType, configuration: { __typename?: 'ChatProviderConnectionConfiguration', slack?: { __typename?: 'SlackConnectionConfiguration', botId?: string | null } | null, teams?: { __typename?: 'TeamsConnectionConfiguration', clientId?: string | null, tenantId?: string | null } | null }, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null } | null, user?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null } | null }; +export type UpdateWorkbenchChatbotMutation = { __typename?: 'RootMutationType', updateWorkbenchChatbot?: { __typename?: 'WorkbenchChatbot', id: string, channel: string, prompt?: string | null, messageBehavior: WorkbenchChatbotMessageBehavior, userId?: string | null, insertedAt?: string | null, updatedAt?: string | null, modes?: { __typename?: 'WorkbenchJobModes', plan?: boolean | null, model?: { __typename?: 'WorkbenchJobModel', provider?: AiProvider | null, model?: string | null } | null, coding?: { __typename?: 'WorkbenchJobCodingModes', approval?: boolean | null, babysit?: boolean | null } | null, budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null, kubernetes?: { __typename?: 'WorkbenchJobKubernetesModes', update?: boolean | null, delete?: boolean | null, excludeNamespaces?: Array | null, requireNamespaces?: Array | null } | null } | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType, configuration: { __typename?: 'ChatProviderConnectionConfiguration', slack?: { __typename?: 'SlackConnectionConfiguration', botId?: string | null } | null, teams?: { __typename?: 'TeamsConnectionConfiguration', clientId?: string | null, tenantId?: string | null } | null }, readBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null, writeBindings?: Array<{ __typename?: 'PolicyBinding', id?: string | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null, group?: { __typename?: 'Group', id: string, name: string } | null } | null> | null } | null, user?: { __typename?: 'User', id: string, name: string, email: string, profile?: string | null } | null } | null }; export type DeleteWorkbenchChatbotMutationVariables = Exact<{ id: Scalars['ID']['input']; @@ -26999,6 +27026,12 @@ export const WorkbenchFragmentDoc = gql` cost tokens } + kubernetes { + update + delete + excludeNamespaces + requireNamespaces + } } skills { ref { @@ -27269,6 +27302,12 @@ export const WorkbenchCronFragmentDoc = gql` cost tokens } + kubernetes { + update + delete + excludeNamespaces + requireNamespaces + } } lastRunAt nextRunAt @@ -27323,6 +27362,12 @@ export const WorkbenchWebhookFragmentDoc = gql` cost tokens } + kubernetes { + update + delete + excludeNamespaces + requireNamespaces + } } matches { regex @@ -27385,6 +27430,12 @@ export const WorkbenchChatbotFragmentDoc = gql` cost tokens } + kubernetes { + update + delete + excludeNamespaces + requireNamespaces + } } insertedAt updatedAt diff --git a/assets/src/generated/persisted-queries/client.json b/assets/src/generated/persisted-queries/client.json index 616ba9c2ec..c0b91b7d17 100644 --- a/assets/src/generated/persisted-queries/client.json +++ b/assets/src/generated/persisted-queries/client.json @@ -1877,10 +1877,10 @@ "name": "WorkbenchesAlerts", "body": "query WorkbenchesAlerts($first: Int = 100, $after: String) {\n workbenchAlerts(first: $first, after: $after) {\n pageInfo {\n ...PageInfo\n __typename\n }\n edges {\n node {\n ...Alert\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment PageInfo on PageInfo {\n hasNextPage\n endCursor\n hasPreviousPage\n startCursor\n __typename\n}\n\nfragment Alert on Alert {\n id\n title\n message\n type\n severity\n state\n fingerprint\n url\n annotations\n tags {\n id\n name\n value\n __typename\n }\n insight {\n ...AiInsight\n __typename\n }\n resolution {\n ...AlertResolution\n __typename\n }\n workbench {\n id\n __typename\n }\n workbenchJob {\n id\n status\n __typename\n }\n updatedAt\n __typename\n}\n\nfragment AiInsight on AiInsight {\n id\n text\n summary\n sha\n freshness\n updatedAt\n insertedAt\n error {\n message\n source\n __typename\n }\n ...AiInsightContext\n __typename\n}\n\nfragment AiInsightContext on AiInsight {\n evidence {\n ...AiInsightEvidence\n __typename\n }\n cluster {\n id\n name\n distro\n provider {\n cloud\n __typename\n }\n __typename\n }\n clusterInsightComponent {\n id\n name\n __typename\n }\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n serviceComponent {\n id\n name\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n __typename\n }\n stack {\n id\n name\n type\n __typename\n }\n stackRun {\n id\n message\n type\n stack {\n id\n name\n __typename\n }\n __typename\n }\n alert {\n id\n title\n message\n __typename\n }\n __typename\n}\n\nfragment AiInsightEvidence on AiInsightEvidence {\n id\n type\n logs {\n ...LogsEvidence\n __typename\n }\n pullRequest {\n ...PullRequestEvidence\n __typename\n }\n alert {\n ...AlertEvidence\n __typename\n }\n knowledge {\n ...KnowledgeEvidence\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment LogsEvidence on LogsEvidence {\n clusterId\n serviceId\n line\n lines {\n ...LogLine\n __typename\n }\n __typename\n}\n\nfragment LogLine on LogLine {\n facets {\n ...LogFacet\n __typename\n }\n log\n timestamp\n __typename\n}\n\nfragment LogFacet on LogFacet {\n key\n value\n __typename\n}\n\nfragment PullRequestEvidence on PullRequestEvidence {\n contents\n filename\n patch\n repo\n sha\n title\n url\n __typename\n}\n\nfragment AlertEvidence on AlertEvidence {\n alertId\n title\n resolution\n __typename\n}\n\nfragment KnowledgeEvidence on KnowledgeEvidence {\n name\n observations\n type\n __typename\n}\n\nfragment ClusterMinimal on Cluster {\n id\n name\n handle\n provider {\n name\n cloud\n __typename\n }\n distro\n __typename\n}\n\nfragment AlertResolution on AlertResolution {\n resolution\n __typename\n}" }, - "sha256:af6dfb4a2d2be34a94efaf7f2c56d7ca28350f1d145b5662d9adff10cc4bf47e": { + "sha256:4d2ec1c9f756192040fd5c56b8ebe48f92ab9a1a01d592883af3b535a4112c23": { "type": "query", "name": "Workbench", - "body": "query Workbench($id: ID, $name: String) {\n workbench(id: $id, name: $name) {\n ...Workbench\n __typename\n }\n}\n\nfragment Workbench on Workbench {\n ...WorkbenchTiny\n systemPrompt\n agentRuntime {\n id\n name\n __typename\n }\n repository {\n id\n __typename\n }\n configuration {\n infrastructure {\n services\n stacks\n kubernetes\n podLogs\n vulnerabilities\n __typename\n }\n observability {\n logs\n metrics\n __typename\n }\n coding {\n mode\n repositories\n enableBabysitting\n __typename\n }\n __typename\n }\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n skills {\n ref {\n ref\n folder\n __typename\n }\n files\n __typename\n }\n workbenchSkills(first: 500) {\n edges {\n node {\n id\n name\n description\n contents\n subagents\n __typename\n }\n __typename\n }\n __typename\n }\n tools {\n ...WorkbenchTool\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n botUser {\n id\n name\n email\n profile\n __typename\n }\n __typename\n}\n\nfragment WorkbenchTiny on Workbench {\n id\n name\n description\n agentRuntime {\n id\n name\n type\n __typename\n }\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n webhooks(first: 50) {\n edges {\n node {\n ...WorkbenchWebhookTiny\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment WorkbenchWebhookTiny on WorkbenchWebhook {\n id\n name\n priority\n webhook {\n id\n type\n __typename\n }\n issueWebhook {\n ...IssueWebhookTiny\n __typename\n }\n __typename\n}\n\nfragment IssueWebhookTiny on IssueWebhook {\n id\n provider\n __typename\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n lambda {\n lambdaArn\n description\n inputSchema\n __typename\n }\n cloudRun {\n identifier\n description\n inputSchema\n __typename\n }\n azureFunction {\n identifier\n description\n inputSchema\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" + "body": "query Workbench($id: ID, $name: String) {\n workbench(id: $id, name: $name) {\n ...Workbench\n __typename\n }\n}\n\nfragment Workbench on Workbench {\n ...WorkbenchTiny\n systemPrompt\n agentRuntime {\n id\n name\n __typename\n }\n repository {\n id\n __typename\n }\n configuration {\n infrastructure {\n services\n stacks\n kubernetes\n podLogs\n vulnerabilities\n __typename\n }\n observability {\n logs\n metrics\n __typename\n }\n coding {\n mode\n repositories\n enableBabysitting\n __typename\n }\n __typename\n }\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n kubernetes {\n update\n delete\n excludeNamespaces\n requireNamespaces\n __typename\n }\n __typename\n }\n skills {\n ref {\n ref\n folder\n __typename\n }\n files\n __typename\n }\n workbenchSkills(first: 500) {\n edges {\n node {\n id\n name\n description\n contents\n subagents\n __typename\n }\n __typename\n }\n __typename\n }\n tools {\n ...WorkbenchTool\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n botUser {\n id\n name\n email\n profile\n __typename\n }\n __typename\n}\n\nfragment WorkbenchTiny on Workbench {\n id\n name\n description\n agentRuntime {\n id\n name\n type\n __typename\n }\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n webhooks(first: 50) {\n edges {\n node {\n ...WorkbenchWebhookTiny\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment WorkbenchWebhookTiny on WorkbenchWebhook {\n id\n name\n priority\n webhook {\n id\n type\n __typename\n }\n issueWebhook {\n ...IssueWebhookTiny\n __typename\n }\n __typename\n}\n\nfragment IssueWebhookTiny on IssueWebhook {\n id\n provider\n __typename\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n lambda {\n lambdaArn\n description\n inputSchema\n __typename\n }\n cloudRun {\n identifier\n description\n inputSchema\n __typename\n }\n azureFunction {\n identifier\n description\n inputSchema\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" }, "sha256:6c3686838d1372371451664e8d6b593929eeca76e340065ed6dda5691e325b56": { "type": "query", @@ -1927,15 +1927,15 @@ "name": "WorkbenchIssues", "body": "query WorkbenchIssues($id: ID!, $first: Int = 100, $after: String) {\n workbench(id: $id) {\n id\n issues(first: $first, after: $after) {\n pageInfo {\n ...PageInfo\n __typename\n }\n edges {\n node {\n ...WorkbenchIssue\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment PageInfo on PageInfo {\n hasNextPage\n endCursor\n hasPreviousPage\n startCursor\n __typename\n}\n\nfragment WorkbenchIssue on Issue {\n id\n title\n externalId\n provider\n status\n url\n insertedAt\n updatedAt\n workbench {\n id\n __typename\n }\n workbenchJob {\n id\n status\n __typename\n }\n __typename\n}" }, - "sha256:1b8e05e6859f73309fcfc4eb2566c85a3a11d87aaac11f70927ba933ab92d0d6": { + "sha256:47732995492227678d12f1dba6438dc71ef7c65ebf8763d4feb398a038e5e897": { "type": "mutation", "name": "GetWorkbenchCron", - "body": "mutation GetWorkbenchCron($id: ID!) {\n workbenchCron(id: $id) {\n ...WorkbenchCron\n __typename\n }\n}\n\nfragment WorkbenchCron on WorkbenchCron {\n id\n crontab\n prompt\n userId\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n lastRunAt\n nextRunAt\n insertedAt\n updatedAt\n __typename\n}" + "body": "mutation GetWorkbenchCron($id: ID!) {\n workbenchCron(id: $id) {\n ...WorkbenchCron\n __typename\n }\n}\n\nfragment WorkbenchCron on WorkbenchCron {\n id\n crontab\n prompt\n userId\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n kubernetes {\n update\n delete\n excludeNamespaces\n requireNamespaces\n __typename\n }\n __typename\n }\n lastRunAt\n nextRunAt\n insertedAt\n updatedAt\n __typename\n}" }, - "sha256:d9a7cff2a6178142013d3f86730a0c2132033f31aecfac685a52c75ef4cc86da": { + "sha256:63219c6ec0447d784026248db4cf9814a4578f183554d267c1524bc7c33ea3e0": { "type": "query", "name": "WorkbenchCrons", - "body": "query WorkbenchCrons($id: ID!, $first: Int = 100, $after: String) {\n workbench(id: $id) {\n id\n crons(first: $first, after: $after) {\n pageInfo {\n ...PageInfo\n __typename\n }\n edges {\n node {\n ...WorkbenchCron\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment PageInfo on PageInfo {\n hasNextPage\n endCursor\n hasPreviousPage\n startCursor\n __typename\n}\n\nfragment WorkbenchCron on WorkbenchCron {\n id\n crontab\n prompt\n userId\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n lastRunAt\n nextRunAt\n insertedAt\n updatedAt\n __typename\n}" + "body": "query WorkbenchCrons($id: ID!, $first: Int = 100, $after: String) {\n workbench(id: $id) {\n id\n crons(first: $first, after: $after) {\n pageInfo {\n ...PageInfo\n __typename\n }\n edges {\n node {\n ...WorkbenchCron\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment PageInfo on PageInfo {\n hasNextPage\n endCursor\n hasPreviousPage\n startCursor\n __typename\n}\n\nfragment WorkbenchCron on WorkbenchCron {\n id\n crontab\n prompt\n userId\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n kubernetes {\n update\n delete\n excludeNamespaces\n requireNamespaces\n __typename\n }\n __typename\n }\n lastRunAt\n nextRunAt\n insertedAt\n updatedAt\n __typename\n}" }, "sha256:827016e22fcc91757ab713668fd457d7c16f7a11e17446aaaed7b55beffbb342": { "type": "query", @@ -1947,20 +1947,20 @@ "name": "WorkbenchPrompts", "body": "query WorkbenchPrompts($id: ID!, $first: Int = 500, $after: String) {\n workbench(id: $id) {\n id\n prompts(first: $first, after: $after) {\n pageInfo {\n ...PageInfo\n __typename\n }\n edges {\n node {\n ...WorkbenchPrompt\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment PageInfo on PageInfo {\n hasNextPage\n endCursor\n hasPreviousPage\n startCursor\n __typename\n}\n\nfragment WorkbenchPrompt on WorkbenchPrompt {\n id\n title\n category\n prompt\n insertedAt\n updatedAt\n __typename\n}" }, - "sha256:40d0cbd0710088ba7a9ee85dfd67d369c8c70424501ad529941313ef569cbbac": { + "sha256:53cec0c203f2dc44b1de46d42693bc1ec8327437812fc93f49acbb20ba964035": { "type": "query", "name": "WorkbenchWebhooks", - "body": "query WorkbenchWebhooks($id: ID!, $first: Int = 100, $after: String) {\n workbench(id: $id) {\n id\n webhooks(first: $first, after: $after) {\n pageInfo {\n ...PageInfo\n __typename\n }\n edges {\n node {\n ...WorkbenchWebhook\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment PageInfo on PageInfo {\n hasNextPage\n endCursor\n hasPreviousPage\n startCursor\n __typename\n}\n\nfragment WorkbenchWebhook on WorkbenchWebhook {\n id\n name\n prompt\n priority\n userId\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n matches {\n regex\n substring\n caseInsensitive\n __typename\n }\n insertedAt\n updatedAt\n webhook {\n id\n name\n type\n url\n __typename\n }\n issueWebhook {\n ...IssueWebhook\n __typename\n }\n __typename\n}\n\nfragment IssueWebhook on IssueWebhook {\n id\n name\n provider\n url\n insertedAt\n updatedAt\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" + "body": "query WorkbenchWebhooks($id: ID!, $first: Int = 100, $after: String) {\n workbench(id: $id) {\n id\n webhooks(first: $first, after: $after) {\n pageInfo {\n ...PageInfo\n __typename\n }\n edges {\n node {\n ...WorkbenchWebhook\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment PageInfo on PageInfo {\n hasNextPage\n endCursor\n hasPreviousPage\n startCursor\n __typename\n}\n\nfragment WorkbenchWebhook on WorkbenchWebhook {\n id\n name\n prompt\n priority\n userId\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n kubernetes {\n update\n delete\n excludeNamespaces\n requireNamespaces\n __typename\n }\n __typename\n }\n matches {\n regex\n substring\n caseInsensitive\n __typename\n }\n insertedAt\n updatedAt\n webhook {\n id\n name\n type\n url\n __typename\n }\n issueWebhook {\n ...IssueWebhook\n __typename\n }\n __typename\n}\n\nfragment IssueWebhook on IssueWebhook {\n id\n name\n provider\n url\n insertedAt\n updatedAt\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" }, - "sha256:eede92654c6725ca3fb1169af743ec0130a9a0b8830b07fbf263aa96f3bd0c9c": { + "sha256:901e008b53f903c1d0622eddc857903e6c179a3ba82940bd41258c5aaa1a31c0": { "type": "query", "name": "WorkbenchChatbots", - "body": "query WorkbenchChatbots($id: ID!, $first: Int = 100, $after: String) {\n workbench(id: $id) {\n id\n chatbots(first: $first, after: $after) {\n pageInfo {\n ...PageInfo\n __typename\n }\n edges {\n node {\n ...WorkbenchChatbot\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment PageInfo on PageInfo {\n hasNextPage\n endCursor\n hasPreviousPage\n startCursor\n __typename\n}\n\nfragment WorkbenchChatbot on WorkbenchChatbot {\n id\n channel\n prompt\n messageBehavior\n userId\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n insertedAt\n updatedAt\n chatConnection {\n ...ChatProviderConnection\n __typename\n }\n user {\n id\n name\n email\n profile\n __typename\n }\n __typename\n}\n\nfragment ChatProviderConnection on ChatProviderConnection {\n id\n name\n type\n configuration {\n slack {\n botId\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" + "body": "query WorkbenchChatbots($id: ID!, $first: Int = 100, $after: String) {\n workbench(id: $id) {\n id\n chatbots(first: $first, after: $after) {\n pageInfo {\n ...PageInfo\n __typename\n }\n edges {\n node {\n ...WorkbenchChatbot\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment PageInfo on PageInfo {\n hasNextPage\n endCursor\n hasPreviousPage\n startCursor\n __typename\n}\n\nfragment WorkbenchChatbot on WorkbenchChatbot {\n id\n channel\n prompt\n messageBehavior\n userId\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n kubernetes {\n update\n delete\n excludeNamespaces\n requireNamespaces\n __typename\n }\n __typename\n }\n insertedAt\n updatedAt\n chatConnection {\n ...ChatProviderConnection\n __typename\n }\n user {\n id\n name\n email\n profile\n __typename\n }\n __typename\n}\n\nfragment ChatProviderConnection on ChatProviderConnection {\n id\n name\n type\n configuration {\n slack {\n botId\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" }, - "sha256:36823f132eedbf39209c7765d7810f289d4dc217664359e7ff1a34b80f2baf89": { + "sha256:75205f0ac6d7b66f247168657792fd42a16f4e421ca1bed94e8209f3536450d1": { "type": "query", "name": "WorkbenchChatbot", - "body": "query WorkbenchChatbot($id: ID!) {\n workbenchChatbot(id: $id) {\n ...WorkbenchChatbot\n __typename\n }\n}\n\nfragment WorkbenchChatbot on WorkbenchChatbot {\n id\n channel\n prompt\n messageBehavior\n userId\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n insertedAt\n updatedAt\n chatConnection {\n ...ChatProviderConnection\n __typename\n }\n user {\n id\n name\n email\n profile\n __typename\n }\n __typename\n}\n\nfragment ChatProviderConnection on ChatProviderConnection {\n id\n name\n type\n configuration {\n slack {\n botId\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" + "body": "query WorkbenchChatbot($id: ID!) {\n workbenchChatbot(id: $id) {\n ...WorkbenchChatbot\n __typename\n }\n}\n\nfragment WorkbenchChatbot on WorkbenchChatbot {\n id\n channel\n prompt\n messageBehavior\n userId\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n kubernetes {\n update\n delete\n excludeNamespaces\n requireNamespaces\n __typename\n }\n __typename\n }\n insertedAt\n updatedAt\n chatConnection {\n ...ChatProviderConnection\n __typename\n }\n user {\n id\n name\n email\n profile\n __typename\n }\n __typename\n}\n\nfragment ChatProviderConnection on ChatProviderConnection {\n id\n name\n type\n configuration {\n slack {\n botId\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" }, "sha256:5ffd312bb8d3a3ca55f7c873cb410af0478ef48c73f0e3bf76a62d202c97ffd3": { "type": "query", @@ -1977,10 +1977,10 @@ "name": "ChatProviderConnection", "body": "query ChatProviderConnection($id: ID!) {\n chatProviderConnection(id: $id) {\n ...ChatProviderConnection\n __typename\n }\n}\n\nfragment ChatProviderConnection on ChatProviderConnection {\n id\n name\n type\n configuration {\n slack {\n botId\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" }, - "sha256:10a9e5b8a7922749dc4ed0747ea19abc9a00977196f361a5b47bd4fdbd15e6ce": { + "sha256:8b30b20ad364a13c3fd8882472c88e709092788f2c6bb8e0c24770643202a12a": { "type": "mutation", "name": "GetWorkbenchWebhook", - "body": "mutation GetWorkbenchWebhook($id: ID!) {\n getWorkbenchWebhook(id: $id) {\n ...WorkbenchWebhook\n __typename\n }\n}\n\nfragment WorkbenchWebhook on WorkbenchWebhook {\n id\n name\n prompt\n priority\n userId\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n matches {\n regex\n substring\n caseInsensitive\n __typename\n }\n insertedAt\n updatedAt\n webhook {\n id\n name\n type\n url\n __typename\n }\n issueWebhook {\n ...IssueWebhook\n __typename\n }\n __typename\n}\n\nfragment IssueWebhook on IssueWebhook {\n id\n name\n provider\n url\n insertedAt\n updatedAt\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" + "body": "mutation GetWorkbenchWebhook($id: ID!) {\n getWorkbenchWebhook(id: $id) {\n ...WorkbenchWebhook\n __typename\n }\n}\n\nfragment WorkbenchWebhook on WorkbenchWebhook {\n id\n name\n prompt\n priority\n userId\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n kubernetes {\n update\n delete\n excludeNamespaces\n requireNamespaces\n __typename\n }\n __typename\n }\n matches {\n regex\n substring\n caseInsensitive\n __typename\n }\n insertedAt\n updatedAt\n webhook {\n id\n name\n type\n url\n __typename\n }\n issueWebhook {\n ...IssueWebhook\n __typename\n }\n __typename\n}\n\nfragment IssueWebhook on IssueWebhook {\n id\n name\n provider\n url\n insertedAt\n updatedAt\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" }, "sha256:3487cf49c8d19eb4dbff60eccfa8a6ec7db7731e764165a20c877ad49f594371": { "type": "query", @@ -2067,15 +2067,15 @@ "name": "WorkbenchTool", "body": "query WorkbenchTool($id: ID, $name: String) {\n workbenchTool(id: $id, name: $name) {\n ...WorkbenchTool\n __typename\n }\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n lambda {\n lambdaArn\n description\n inputSchema\n __typename\n }\n cloudRun {\n identifier\n description\n inputSchema\n __typename\n }\n azureFunction {\n identifier\n description\n inputSchema\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" }, - "sha256:b7e980904486638ac5e2a44b334bcc3c8b13b2ad5094623bc8af8896145bb20e": { + "sha256:3191b269d53c3765e76a653cd70bcabdf08107bf45a42a54ccd7bde7bb7fe53c": { "type": "mutation", "name": "CreateWorkbench", - "body": "mutation CreateWorkbench($attributes: WorkbenchAttributes!) {\n createWorkbench(attributes: $attributes) {\n ...Workbench\n __typename\n }\n}\n\nfragment Workbench on Workbench {\n ...WorkbenchTiny\n systemPrompt\n agentRuntime {\n id\n name\n __typename\n }\n repository {\n id\n __typename\n }\n configuration {\n infrastructure {\n services\n stacks\n kubernetes\n podLogs\n vulnerabilities\n __typename\n }\n observability {\n logs\n metrics\n __typename\n }\n coding {\n mode\n repositories\n enableBabysitting\n __typename\n }\n __typename\n }\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n skills {\n ref {\n ref\n folder\n __typename\n }\n files\n __typename\n }\n workbenchSkills(first: 500) {\n edges {\n node {\n id\n name\n description\n contents\n subagents\n __typename\n }\n __typename\n }\n __typename\n }\n tools {\n ...WorkbenchTool\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n botUser {\n id\n name\n email\n profile\n __typename\n }\n __typename\n}\n\nfragment WorkbenchTiny on Workbench {\n id\n name\n description\n agentRuntime {\n id\n name\n type\n __typename\n }\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n webhooks(first: 50) {\n edges {\n node {\n ...WorkbenchWebhookTiny\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment WorkbenchWebhookTiny on WorkbenchWebhook {\n id\n name\n priority\n webhook {\n id\n type\n __typename\n }\n issueWebhook {\n ...IssueWebhookTiny\n __typename\n }\n __typename\n}\n\nfragment IssueWebhookTiny on IssueWebhook {\n id\n provider\n __typename\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n lambda {\n lambdaArn\n description\n inputSchema\n __typename\n }\n cloudRun {\n identifier\n description\n inputSchema\n __typename\n }\n azureFunction {\n identifier\n description\n inputSchema\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" + "body": "mutation CreateWorkbench($attributes: WorkbenchAttributes!) {\n createWorkbench(attributes: $attributes) {\n ...Workbench\n __typename\n }\n}\n\nfragment Workbench on Workbench {\n ...WorkbenchTiny\n systemPrompt\n agentRuntime {\n id\n name\n __typename\n }\n repository {\n id\n __typename\n }\n configuration {\n infrastructure {\n services\n stacks\n kubernetes\n podLogs\n vulnerabilities\n __typename\n }\n observability {\n logs\n metrics\n __typename\n }\n coding {\n mode\n repositories\n enableBabysitting\n __typename\n }\n __typename\n }\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n kubernetes {\n update\n delete\n excludeNamespaces\n requireNamespaces\n __typename\n }\n __typename\n }\n skills {\n ref {\n ref\n folder\n __typename\n }\n files\n __typename\n }\n workbenchSkills(first: 500) {\n edges {\n node {\n id\n name\n description\n contents\n subagents\n __typename\n }\n __typename\n }\n __typename\n }\n tools {\n ...WorkbenchTool\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n botUser {\n id\n name\n email\n profile\n __typename\n }\n __typename\n}\n\nfragment WorkbenchTiny on Workbench {\n id\n name\n description\n agentRuntime {\n id\n name\n type\n __typename\n }\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n webhooks(first: 50) {\n edges {\n node {\n ...WorkbenchWebhookTiny\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment WorkbenchWebhookTiny on WorkbenchWebhook {\n id\n name\n priority\n webhook {\n id\n type\n __typename\n }\n issueWebhook {\n ...IssueWebhookTiny\n __typename\n }\n __typename\n}\n\nfragment IssueWebhookTiny on IssueWebhook {\n id\n provider\n __typename\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n lambda {\n lambdaArn\n description\n inputSchema\n __typename\n }\n cloudRun {\n identifier\n description\n inputSchema\n __typename\n }\n azureFunction {\n identifier\n description\n inputSchema\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" }, - "sha256:8432a3ff783bdbea428c6405695e55f7ef17555e23b5b96c87751eb6f9743aea": { + "sha256:b8679877c71b4c74c5c50d5d24d604307c434be7d7c5a39d83ea614968955153": { "type": "mutation", "name": "UpdateWorkbench", - "body": "mutation UpdateWorkbench($id: ID!, $attributes: WorkbenchAttributes!) {\n updateWorkbench(id: $id, attributes: $attributes) {\n ...Workbench\n __typename\n }\n}\n\nfragment Workbench on Workbench {\n ...WorkbenchTiny\n systemPrompt\n agentRuntime {\n id\n name\n __typename\n }\n repository {\n id\n __typename\n }\n configuration {\n infrastructure {\n services\n stacks\n kubernetes\n podLogs\n vulnerabilities\n __typename\n }\n observability {\n logs\n metrics\n __typename\n }\n coding {\n mode\n repositories\n enableBabysitting\n __typename\n }\n __typename\n }\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n skills {\n ref {\n ref\n folder\n __typename\n }\n files\n __typename\n }\n workbenchSkills(first: 500) {\n edges {\n node {\n id\n name\n description\n contents\n subagents\n __typename\n }\n __typename\n }\n __typename\n }\n tools {\n ...WorkbenchTool\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n botUser {\n id\n name\n email\n profile\n __typename\n }\n __typename\n}\n\nfragment WorkbenchTiny on Workbench {\n id\n name\n description\n agentRuntime {\n id\n name\n type\n __typename\n }\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n webhooks(first: 50) {\n edges {\n node {\n ...WorkbenchWebhookTiny\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment WorkbenchWebhookTiny on WorkbenchWebhook {\n id\n name\n priority\n webhook {\n id\n type\n __typename\n }\n issueWebhook {\n ...IssueWebhookTiny\n __typename\n }\n __typename\n}\n\nfragment IssueWebhookTiny on IssueWebhook {\n id\n provider\n __typename\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n lambda {\n lambdaArn\n description\n inputSchema\n __typename\n }\n cloudRun {\n identifier\n description\n inputSchema\n __typename\n }\n azureFunction {\n identifier\n description\n inputSchema\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" + "body": "mutation UpdateWorkbench($id: ID!, $attributes: WorkbenchAttributes!) {\n updateWorkbench(id: $id, attributes: $attributes) {\n ...Workbench\n __typename\n }\n}\n\nfragment Workbench on Workbench {\n ...WorkbenchTiny\n systemPrompt\n agentRuntime {\n id\n name\n __typename\n }\n repository {\n id\n __typename\n }\n configuration {\n infrastructure {\n services\n stacks\n kubernetes\n podLogs\n vulnerabilities\n __typename\n }\n observability {\n logs\n metrics\n __typename\n }\n coding {\n mode\n repositories\n enableBabysitting\n __typename\n }\n __typename\n }\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n kubernetes {\n update\n delete\n excludeNamespaces\n requireNamespaces\n __typename\n }\n __typename\n }\n skills {\n ref {\n ref\n folder\n __typename\n }\n files\n __typename\n }\n workbenchSkills(first: 500) {\n edges {\n node {\n id\n name\n description\n contents\n subagents\n __typename\n }\n __typename\n }\n __typename\n }\n tools {\n ...WorkbenchTool\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n botUser {\n id\n name\n email\n profile\n __typename\n }\n __typename\n}\n\nfragment WorkbenchTiny on Workbench {\n id\n name\n description\n agentRuntime {\n id\n name\n type\n __typename\n }\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n webhooks(first: 50) {\n edges {\n node {\n ...WorkbenchWebhookTiny\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment WorkbenchWebhookTiny on WorkbenchWebhook {\n id\n name\n priority\n webhook {\n id\n type\n __typename\n }\n issueWebhook {\n ...IssueWebhookTiny\n __typename\n }\n __typename\n}\n\nfragment IssueWebhookTiny on IssueWebhook {\n id\n provider\n __typename\n}\n\nfragment WorkbenchTool on WorkbenchTool {\n ...WorkbenchToolTiny\n scmConnection {\n id\n name\n type\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n http {\n url\n method\n headers {\n name\n value\n __typename\n }\n body\n inputSchema\n __typename\n }\n datadog {\n site\n __typename\n }\n elastic {\n index\n url\n username\n __typename\n }\n opensearch {\n host\n index\n awsAccessKeyId\n awsRegion\n assumeRoleArn\n usePodIdentity\n __typename\n }\n loki {\n url\n username\n tenantId\n __typename\n }\n prometheus {\n url\n username\n tenantId\n awsSigv4\n awsAccessKeyId\n awsRegion\n __typename\n }\n tempo {\n url\n username\n tenantId\n __typename\n }\n jaeger {\n url\n username\n __typename\n }\n atlassian {\n email\n url\n __typename\n }\n linear {\n url\n __typename\n }\n slack {\n url\n __typename\n }\n pagerduty {\n url\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n splunk {\n url\n username\n __typename\n }\n cloudwatch {\n logGroupNames\n region\n roleArn\n roleSessionName\n __typename\n }\n azure {\n subscriptionId\n tenantId\n clientId\n prometheusUrl\n __typename\n }\n dynatrace {\n url\n __typename\n }\n sentry {\n url\n __typename\n }\n github {\n url\n toolset\n appId\n installationId\n __typename\n }\n gitlab {\n url\n __typename\n }\n bitbucket {\n url\n __typename\n }\n bitbucketDatacenter {\n url\n __typename\n }\n azureDevops {\n url\n __typename\n }\n lambda {\n lambdaArn\n description\n inputSchema\n __typename\n }\n cloudRun {\n identifier\n description\n inputSchema\n __typename\n }\n azureFunction {\n identifier\n description\n inputSchema\n __typename\n }\n docker {\n url\n provider\n proxy {\n url\n noproxy\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" }, "sha256:6bdd9295cb14dc91a238b8bb12b0b9b2781f2c6789194acd1364f8fe10bb3f6a": { "type": "mutation", @@ -2147,45 +2147,45 @@ "name": "DeleteWorkbenchPrompt", "body": "mutation DeleteWorkbenchPrompt($id: ID!) {\n deleteWorkbenchPrompt(id: $id) {\n id\n __typename\n }\n}" }, - "sha256:618ad84f413fb8b1df58059e84f24e834138207e4b86c091882e2030d9c23381": { + "sha256:e9d842c0e5df16fa0ecf089035ed864106b269ec42917cebb472c9ff5945d370": { "type": "mutation", "name": "CreateWorkbenchCron", - "body": "mutation CreateWorkbenchCron($workbenchId: ID!, $attributes: WorkbenchCronAttributes!) {\n createWorkbenchCron(workbenchId: $workbenchId, attributes: $attributes) {\n ...WorkbenchCron\n __typename\n }\n}\n\nfragment WorkbenchCron on WorkbenchCron {\n id\n crontab\n prompt\n userId\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n lastRunAt\n nextRunAt\n insertedAt\n updatedAt\n __typename\n}" + "body": "mutation CreateWorkbenchCron($workbenchId: ID!, $attributes: WorkbenchCronAttributes!) {\n createWorkbenchCron(workbenchId: $workbenchId, attributes: $attributes) {\n ...WorkbenchCron\n __typename\n }\n}\n\nfragment WorkbenchCron on WorkbenchCron {\n id\n crontab\n prompt\n userId\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n kubernetes {\n update\n delete\n excludeNamespaces\n requireNamespaces\n __typename\n }\n __typename\n }\n lastRunAt\n nextRunAt\n insertedAt\n updatedAt\n __typename\n}" }, - "sha256:80e159f6d94125332c4f947c5ae663e704feb9e33cc8fa0bd653868b8b9f70a7": { + "sha256:d5a8e486c98c7608767dafe39455135b70cd4f10a61627fe09c69d749386372b": { "type": "mutation", "name": "UpdateWorkbenchCron", - "body": "mutation UpdateWorkbenchCron($id: ID!, $attributes: WorkbenchCronAttributes!) {\n updateWorkbenchCron(id: $id, attributes: $attributes) {\n ...WorkbenchCron\n __typename\n }\n}\n\nfragment WorkbenchCron on WorkbenchCron {\n id\n crontab\n prompt\n userId\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n lastRunAt\n nextRunAt\n insertedAt\n updatedAt\n __typename\n}" + "body": "mutation UpdateWorkbenchCron($id: ID!, $attributes: WorkbenchCronAttributes!) {\n updateWorkbenchCron(id: $id, attributes: $attributes) {\n ...WorkbenchCron\n __typename\n }\n}\n\nfragment WorkbenchCron on WorkbenchCron {\n id\n crontab\n prompt\n userId\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n kubernetes {\n update\n delete\n excludeNamespaces\n requireNamespaces\n __typename\n }\n __typename\n }\n lastRunAt\n nextRunAt\n insertedAt\n updatedAt\n __typename\n}" }, "sha256:b3965ac95b88758d9754efae4af12fc0cea16c124dd7fdd6dba1c30bcab3ad28": { "type": "mutation", "name": "DeleteWorkbenchCron", "body": "mutation DeleteWorkbenchCron($id: ID!) {\n deleteWorkbenchCron(id: $id) {\n id\n __typename\n }\n}" }, - "sha256:907668dbd186c42a573ee1b20fd2ce0db11349c46590a5f0512ccc922b7355e8": { + "sha256:c2d5c9c231632500af3ffaecc691770b68255fbb1ae3301a1a6d1f4572cdb6d4": { "type": "mutation", "name": "CreateWorkbenchWebhook", - "body": "mutation CreateWorkbenchWebhook($workbenchId: ID!, $attributes: WorkbenchWebhookAttributes!) {\n createWorkbenchWebhook(workbenchId: $workbenchId, attributes: $attributes) {\n ...WorkbenchWebhook\n __typename\n }\n}\n\nfragment WorkbenchWebhook on WorkbenchWebhook {\n id\n name\n prompt\n priority\n userId\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n matches {\n regex\n substring\n caseInsensitive\n __typename\n }\n insertedAt\n updatedAt\n webhook {\n id\n name\n type\n url\n __typename\n }\n issueWebhook {\n ...IssueWebhook\n __typename\n }\n __typename\n}\n\nfragment IssueWebhook on IssueWebhook {\n id\n name\n provider\n url\n insertedAt\n updatedAt\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" + "body": "mutation CreateWorkbenchWebhook($workbenchId: ID!, $attributes: WorkbenchWebhookAttributes!) {\n createWorkbenchWebhook(workbenchId: $workbenchId, attributes: $attributes) {\n ...WorkbenchWebhook\n __typename\n }\n}\n\nfragment WorkbenchWebhook on WorkbenchWebhook {\n id\n name\n prompt\n priority\n userId\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n kubernetes {\n update\n delete\n excludeNamespaces\n requireNamespaces\n __typename\n }\n __typename\n }\n matches {\n regex\n substring\n caseInsensitive\n __typename\n }\n insertedAt\n updatedAt\n webhook {\n id\n name\n type\n url\n __typename\n }\n issueWebhook {\n ...IssueWebhook\n __typename\n }\n __typename\n}\n\nfragment IssueWebhook on IssueWebhook {\n id\n name\n provider\n url\n insertedAt\n updatedAt\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" }, - "sha256:9d3ad28e40fe4cce33f25805f58a09237438bc221fac2f8a6485d36b6787dbff": { + "sha256:f5408b006170d47e04779cad5ed286550b9408c9833d29a4f0b4a0cfadb2f554": { "type": "mutation", "name": "UpdateWorkbenchWebhook", - "body": "mutation UpdateWorkbenchWebhook($id: ID!, $attributes: WorkbenchWebhookAttributes!) {\n updateWorkbenchWebhook(id: $id, attributes: $attributes) {\n ...WorkbenchWebhook\n __typename\n }\n}\n\nfragment WorkbenchWebhook on WorkbenchWebhook {\n id\n name\n prompt\n priority\n userId\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n matches {\n regex\n substring\n caseInsensitive\n __typename\n }\n insertedAt\n updatedAt\n webhook {\n id\n name\n type\n url\n __typename\n }\n issueWebhook {\n ...IssueWebhook\n __typename\n }\n __typename\n}\n\nfragment IssueWebhook on IssueWebhook {\n id\n name\n provider\n url\n insertedAt\n updatedAt\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" + "body": "mutation UpdateWorkbenchWebhook($id: ID!, $attributes: WorkbenchWebhookAttributes!) {\n updateWorkbenchWebhook(id: $id, attributes: $attributes) {\n ...WorkbenchWebhook\n __typename\n }\n}\n\nfragment WorkbenchWebhook on WorkbenchWebhook {\n id\n name\n prompt\n priority\n userId\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n kubernetes {\n update\n delete\n excludeNamespaces\n requireNamespaces\n __typename\n }\n __typename\n }\n matches {\n regex\n substring\n caseInsensitive\n __typename\n }\n insertedAt\n updatedAt\n webhook {\n id\n name\n type\n url\n __typename\n }\n issueWebhook {\n ...IssueWebhook\n __typename\n }\n __typename\n}\n\nfragment IssueWebhook on IssueWebhook {\n id\n name\n provider\n url\n insertedAt\n updatedAt\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" }, "sha256:90f665268ee6333fe27fdf09680a420ab20d1600b2ea9e2e2cd06aed72494f8b": { "type": "mutation", "name": "DeleteWorkbenchWebhook", "body": "mutation DeleteWorkbenchWebhook($id: ID!) {\n deleteWorkbenchWebhook(id: $id) {\n id\n name\n __typename\n }\n}" }, - "sha256:3e997674e18ed4186a894a640bc9537d8b1bb93579f90d99bcb702ac873e8a77": { + "sha256:7437af30e322621931b4bde4514182e124d595cab6817af274b1efacdbd62a88": { "type": "mutation", "name": "CreateWorkbenchChatbot", - "body": "mutation CreateWorkbenchChatbot($workbenchId: ID!, $attributes: WorkbenchChatbotAttributes!) {\n createWorkbenchChatbot(workbenchId: $workbenchId, attributes: $attributes) {\n ...WorkbenchChatbot\n __typename\n }\n}\n\nfragment WorkbenchChatbot on WorkbenchChatbot {\n id\n channel\n prompt\n messageBehavior\n userId\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n insertedAt\n updatedAt\n chatConnection {\n ...ChatProviderConnection\n __typename\n }\n user {\n id\n name\n email\n profile\n __typename\n }\n __typename\n}\n\nfragment ChatProviderConnection on ChatProviderConnection {\n id\n name\n type\n configuration {\n slack {\n botId\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" + "body": "mutation CreateWorkbenchChatbot($workbenchId: ID!, $attributes: WorkbenchChatbotAttributes!) {\n createWorkbenchChatbot(workbenchId: $workbenchId, attributes: $attributes) {\n ...WorkbenchChatbot\n __typename\n }\n}\n\nfragment WorkbenchChatbot on WorkbenchChatbot {\n id\n channel\n prompt\n messageBehavior\n userId\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n kubernetes {\n update\n delete\n excludeNamespaces\n requireNamespaces\n __typename\n }\n __typename\n }\n insertedAt\n updatedAt\n chatConnection {\n ...ChatProviderConnection\n __typename\n }\n user {\n id\n name\n email\n profile\n __typename\n }\n __typename\n}\n\nfragment ChatProviderConnection on ChatProviderConnection {\n id\n name\n type\n configuration {\n slack {\n botId\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" }, - "sha256:beb9aba8fe0e3d160e117831ac35c51b61849a1bf19a56fe5485dd51de4e6fcc": { + "sha256:e812d00fc1ef4ea8ffe8ff9eb82f71542f800dee0b41983262f5404f172d5b8c": { "type": "mutation", "name": "UpdateWorkbenchChatbot", - "body": "mutation UpdateWorkbenchChatbot($id: ID!, $attributes: WorkbenchChatbotAttributes!) {\n updateWorkbenchChatbot(id: $id, attributes: $attributes) {\n ...WorkbenchChatbot\n __typename\n }\n}\n\nfragment WorkbenchChatbot on WorkbenchChatbot {\n id\n channel\n prompt\n messageBehavior\n userId\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n insertedAt\n updatedAt\n chatConnection {\n ...ChatProviderConnection\n __typename\n }\n user {\n id\n name\n email\n profile\n __typename\n }\n __typename\n}\n\nfragment ChatProviderConnection on ChatProviderConnection {\n id\n name\n type\n configuration {\n slack {\n botId\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" + "body": "mutation UpdateWorkbenchChatbot($id: ID!, $attributes: WorkbenchChatbotAttributes!) {\n updateWorkbenchChatbot(id: $id, attributes: $attributes) {\n ...WorkbenchChatbot\n __typename\n }\n}\n\nfragment WorkbenchChatbot on WorkbenchChatbot {\n id\n channel\n prompt\n messageBehavior\n userId\n modes {\n plan\n model {\n provider\n model\n __typename\n }\n coding {\n approval\n babysit\n __typename\n }\n budget {\n cost\n tokens\n __typename\n }\n kubernetes {\n update\n delete\n excludeNamespaces\n requireNamespaces\n __typename\n }\n __typename\n }\n insertedAt\n updatedAt\n chatConnection {\n ...ChatProviderConnection\n __typename\n }\n user {\n id\n name\n email\n profile\n __typename\n }\n __typename\n}\n\nfragment ChatProviderConnection on ChatProviderConnection {\n id\n name\n type\n configuration {\n slack {\n botId\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}" }, "sha256:3ff81f19b20a9fb7dd872ef07b26ede67afc71ee28befff34fc109053e7b84b2": { "type": "mutation", diff --git a/assets/src/graph/workbench.graphql b/assets/src/graph/workbench.graphql index 3f4116a75d..e4250cb1ad 100644 --- a/assets/src/graph/workbench.graphql +++ b/assets/src/graph/workbench.graphql @@ -94,6 +94,12 @@ fragment Workbench on Workbench { cost tokens } + kubernetes { + update + delete + excludeNamespaces + requireNamespaces + } } skills { ref { @@ -520,6 +526,12 @@ fragment WorkbenchCron on WorkbenchCron { cost tokens } + kubernetes { + update + delete + excludeNamespaces + requireNamespaces + } } lastRunAt nextRunAt @@ -556,6 +568,12 @@ fragment WorkbenchWebhook on WorkbenchWebhook { cost tokens } + kubernetes { + update + delete + excludeNamespaces + requireNamespaces + } } matches { regex @@ -616,6 +634,12 @@ fragment WorkbenchChatbot on WorkbenchChatbot { cost tokens } + kubernetes { + update + delete + excludeNamespaces + requireNamespaces + } } insertedAt updatedAt diff --git a/lib/console/graphql/deployments/workbench.ex b/lib/console/graphql/deployments/workbench.ex index 528b51fe55..ff51925f59 100644 --- a/lib/console/graphql/deployments/workbench.ex +++ b/lib/console/graphql/deployments/workbench.ex @@ -30,6 +30,7 @@ defmodule Console.GraphQl.Deployments.Workbench do field :model, :workbench_job_model_attributes, description: "model override for this job" field :coding, :workbench_job_coding_modes_attributes, description: "coding mode options for this job" field :budget, :workbench_job_budget_attributes, description: "budget limits for this job" + field :kubernetes, :workbench_job_kubernetes_modes_attributes, description: "kubernetes action options for this job" end input_object :workbench_job_model_attributes do @@ -47,6 +48,13 @@ defmodule Console.GraphQl.Deployments.Workbench do field :tokens, :integer, description: "maximum token budget for this job" end + input_object :workbench_job_kubernetes_modes_attributes do + field :update, :boolean, description: "whether kubernetes update actions are enabled" + field :delete, :boolean, description: "whether kubernetes delete actions are enabled" + field :exclude_namespaces, list_of(:string), description: "namespaces the agent can never act in" + field :require_namespaces, list_of(:string), description: "if set, actions are only allowed in these namespaces" + end + input_object :workbench_job_update_attributes do field :result, :workbench_result_attributes, description: "the result for this job" end @@ -569,6 +577,7 @@ defmodule Console.GraphQl.Deployments.Workbench do field :model, :workbench_job_model, description: "model override for this job" field :coding, :workbench_job_coding_modes, description: "coding mode options for this job" field :budget, :workbench_job_budget, description: "budget limits for this job" + field :kubernetes, :workbench_job_kubernetes_modes, description: "kubernetes action options for this job" end object :workbench_job_model do @@ -586,6 +595,13 @@ defmodule Console.GraphQl.Deployments.Workbench do field :tokens, :integer, description: "maximum token budget for this job" end + object :workbench_job_kubernetes_modes do + field :update, :boolean, description: "whether kubernetes update actions are enabled" + field :delete, :boolean, description: "whether kubernetes delete actions are enabled" + field :exclude_namespaces, list_of(:string), description: "namespaces the agent can never act in" + field :require_namespaces, list_of(:string), description: "if set, actions are only allowed in these namespaces" + end + object :workbench_job_usage do field :input_tokens, :integer, description: "input tokens consumed by this job" field :output_tokens, :integer, description: "output tokens produced by this job" diff --git a/schema/schema.graphql b/schema/schema.graphql index 0b5e9f8161..72b63fa3d4 100644 --- a/schema/schema.graphql +++ b/schema/schema.graphql @@ -2743,6 +2743,9 @@ input WorkbenchJobModesAttributes { "budget limits for this job" budget: WorkbenchJobBudgetAttributes + + "kubernetes action options for this job" + kubernetes: WorkbenchJobKubernetesModesAttributes } input WorkbenchJobModelAttributes { @@ -2769,6 +2772,20 @@ input WorkbenchJobBudgetAttributes { tokens: Int } +input WorkbenchJobKubernetesModesAttributes { + "whether kubernetes update actions are enabled" + update: Boolean + + "whether kubernetes delete actions are enabled" + delete: Boolean + + "namespaces the agent can never act in" + excludeNamespaces: [String] + + "if set, actions are only allowed in these namespaces" + requireNamespaces: [String] +} + input WorkbenchJobUpdateAttributes { "the result for this job" result: WorkbenchResultAttributes @@ -3707,6 +3724,9 @@ type WorkbenchJobModes { "budget limits for this job" budget: WorkbenchJobBudget + + "kubernetes action options for this job" + kubernetes: WorkbenchJobKubernetesModes } type WorkbenchJobModel { @@ -3733,6 +3753,20 @@ type WorkbenchJobBudget { tokens: Int } +type WorkbenchJobKubernetesModes { + "whether kubernetes update actions are enabled" + update: Boolean + + "whether kubernetes delete actions are enabled" + delete: Boolean + + "namespaces the agent can never act in" + excludeNamespaces: [String] + + "if set, actions are only allowed in these namespaces" + requireNamespaces: [String] +} + type WorkbenchJobUsage { "input tokens consumed by this job" inputTokens: Int From c8463d2045ed17d784325a1d6a7297eb858e2575 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Tue, 28 Jul 2026 12:42:48 +0200 Subject: [PATCH 38/50] fix chip list --- assets/design-system/src/components/ChipList.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/assets/design-system/src/components/ChipList.tsx b/assets/design-system/src/components/ChipList.tsx index ada24b2e03..02faa4915a 100644 --- a/assets/design-system/src/components/ChipList.tsx +++ b/assets/design-system/src/components/ChipList.tsx @@ -63,6 +63,8 @@ function ChipList({ {values.length > limit && ( Date: Tue, 28 Jul 2026 12:45:03 +0200 Subject: [PATCH 39/50] add checkboxes --- .../create-edit/WorkbenchFormSteps.tsx | 46 +++++++++++++++---- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/assets/src/components/workbenches/workbench/create-edit/WorkbenchFormSteps.tsx b/assets/src/components/workbenches/workbench/create-edit/WorkbenchFormSteps.tsx index 7ccaa69e7e..3639a818f8 100644 --- a/assets/src/components/workbenches/workbench/create-edit/WorkbenchFormSteps.tsx +++ b/assets/src/components/workbenches/workbench/create-edit/WorkbenchFormSteps.tsx @@ -882,18 +882,34 @@ function NamespaceListField({ const [isOpen, setIsOpen] = useState(false) const trimmed = draft.trim() + const allOptions = useMemo(() => { + const merged = new Set([...namespaces, ...values]) + return [...merged].sort((a, b) => a.localeCompare(b)) + }, [namespaces, values]) + const suggestions = useMemo(() => { - const available = namespaces.filter((ns) => !values.includes(ns)) - if (!trimmed) return available - return new Fuse(available, { threshold: 0.25 }) + if (!trimmed) return allOptions + return new Fuse(allOptions, { threshold: 0.25 }) .search(trimmed) .map(({ item }) => item) - }, [namespaces, values, trimmed]) + }, [allOptions, trimmed]) const canAddCustom = - !!trimmed && !values.includes(trimmed) && !namespaces.includes(trimmed) + !!trimmed && !values.includes(trimmed) && !allOptions.includes(trimmed) + + const toggleNamespace = (raw: string) => { + const value = raw.trim() + if (!value) return + onChange( + values.includes(value) + ? values.filter((ns) => ns !== value) + : [...values, value] + ) + setDraft('') + setIsOpen(true) + } - const addNamespace = (raw: string) => { + const addCustomNamespace = (raw: string) => { const value = raw.trim() if (!value || values.includes(value)) { setDraft('') @@ -901,7 +917,7 @@ function NamespaceListField({ } onChange([...values, value]) setDraft('') - setIsOpen(false) + setIsOpen(true) } return ( @@ -920,7 +936,7 @@ function NamespaceListField({ onInputChange={setDraft} selectedKey={null} onSelectionChange={(key) => { - if (key) addNamespace(String(key)) + if (key) toggleNamespace(String(key)) }} isOpen={isOpen} onOpenChange={setIsOpen} @@ -931,10 +947,12 @@ function NamespaceListField({ onKeyDown: (e: KeyboardEvent) => { if (e.key !== 'Enter' || !canAddCustom) return e.preventDefault() - addNamespace(trimmed) + addCustomNamespace(trimmed) }, }} - onFooterClick={canAddCustom ? () => addNamespace(trimmed) : undefined} + onFooterClick={ + canAddCustom ? () => addCustomNamespace(trimmed) : undefined + } dropdownFooter={ canAddCustom ? ( + } /> ))} From 4dd19492c367f0bae9abddec1f04f0e45ff563bc Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Tue, 28 Jul 2026 13:01:49 +0200 Subject: [PATCH 40/50] update awaiting review panel --- .../AwaitingReviewWorkbenchActivityItem.tsx | 200 +++++++++++++++--- 1 file changed, 165 insertions(+), 35 deletions(-) diff --git a/assets/src/components/awaiting-review/AwaitingReviewWorkbenchActivityItem.tsx b/assets/src/components/awaiting-review/AwaitingReviewWorkbenchActivityItem.tsx index a734ae642e..b0528e6191 100644 --- a/assets/src/components/awaiting-review/AwaitingReviewWorkbenchActivityItem.tsx +++ b/assets/src/components/awaiting-review/AwaitingReviewWorkbenchActivityItem.tsx @@ -3,7 +3,8 @@ import { Chip, Flex, IconFrame, - KubernetesIcon, + TrashCanIcon, + UpdatesIcon, WarningOutlineIcon, } from '@pluralsh/design-system' import { WorkbenchLinkChip } from 'components/workbenches/common/WorkbenchLinkChip' @@ -13,7 +14,7 @@ import { } from 'components/workbenches/tools/workbenchToolsUtils' import { StretchedFlex } from 'components/utils/StretchedFlex.tsx' import { StackedText } from 'components/utils/table/StackedText' -import { Body2P } from 'components/utils/typography/Text' +import { Body2P, CaptionP } from 'components/utils/typography/Text' import { AwaitingReviewWorkbenchActivityFragment, WorkbenchJobActivityType, @@ -35,6 +36,14 @@ type KubeRequest = NonNullable< NonNullable['kubeRequest'] > +type KubeActionVariant = 'update' | 'delete' | 'other' + +type ParsedKubePath = { + namespace?: string + resource?: string + name?: string +} + export function AwaitingReviewWorkbenchActivityItem({ activity, onNavigate, @@ -50,23 +59,30 @@ export function AwaitingReviewWorkbenchActivityItem({ const toolType = tool?.tool const kubeRequest = result?.kubeRequest const isKubernetes = activity.type === WorkbenchJobActivityType.Kubernetes + const kubeVariant = isKubernetes + ? getKubeActionVariant(kubeRequest?.method) + : null + const parsedPath = isKubernetes ? parseKubePath(kubeRequest?.path) : null + + const title = isKubernetes + ? kubernetesTitle(kubeRequest, kubeVariant, parsedPath) + : 'Approval required' const subtitle = isKubernetes - ? kubeRequestSubtitle(kubeRequest) + ? kubeRequestSubtitle(kubeRequest, kubeVariant, parsedPath) : toolType ? getWorkbenchToolLabel(toolType) : (functionCall?.name ?? 'Action') - const title = isKubernetes - ? kubernetesTitle(kubeRequest) - : 'Approval required' - const description = workbenchJob?.result?.workingTheory?.trim() || toolDescription(tool) || activity.prompt?.trim() || null + const detailLine = + kubeVariant === 'delete' ? kubeDeleteDetail(parsedPath) : null + const viewPath = workbenchJob?.id && workbench?.id ? getWorkbenchJobAbsPath({ @@ -93,14 +109,16 @@ export function AwaitingReviewWorkbenchActivityItem({ size="large" type="secondary" icon={ - isKubernetes || !toolType ? ( - - ) : ( + isKubernetes ? ( + + ) : toolType ? ( + ) : ( + ) } css={{ @@ -129,31 +147,61 @@ export function AwaitingReviewWorkbenchActivityItem({ )} - {description && ( - - {description} - + {description && ( + + {description} + + )} + {detailLine && {detailLine}} + )} - } + - Pending approval - + } + > + Pending approval + + {kubeVariant === 'update' && ( + + Update + + )} + {kubeVariant === 'delete' && ( + + Delete + + )} + {viewPath && ( ) @@ -71,7 +98,7 @@ const CardSC = styled.div<{ display: 'flex', alignItems: 'center', gap: theme.spacing.medium, - padding: theme.spacing.medium, + padding: `${theme.spacing.medium}px ${theme.spacing.small}px`, borderRadius: theme.borderRadiuses.large, background: theme.colors['fill-one'], borderLeft: `2px solid ${getActionStatusBorderColor(theme, $status)}`, diff --git a/assets/src/components/workbenches/workbench/job/workbenchJobActionsUtils.tsx b/assets/src/components/workbenches/workbench/job/workbenchJobActionsUtils.tsx index 15e154e1f0..874f603414 100644 --- a/assets/src/components/workbenches/workbench/job/workbenchJobActionsUtils.tsx +++ b/assets/src/components/workbenches/workbench/job/workbenchJobActionsUtils.tsx @@ -176,15 +176,17 @@ export function groupWorkbenchJobActions( } export function getActionDetailButtonLabel( - status: Nullable + activity: Pick ): string { - switch (status) { + const isKubernetes = activity.type === WorkbenchJobActivityType.Kubernetes + + switch (activity.status) { case WorkbenchJobActivityStatus.NeedsApproval: return 'View diff' case WorkbenchJobActivityStatus.Failed: return 'View error' case WorkbenchJobActivityStatus.Successful: - return 'View JSON' + return isKubernetes ? 'View results' : 'View JSON' case WorkbenchJobActivityStatus.Cancelled: case WorkbenchJobActivityStatus.Rejected: return 'View reason' From 4d160567c53f3241960bbcea359e41c3f4006f01 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Tue, 28 Jul 2026 14:32:49 +0200 Subject: [PATCH 43/50] add delete variant --- .../job/WorkbenchJobActionDetail.tsx | 8 +-- .../job/WorkbenchJobInlineActionCard.tsx | 9 +-- .../job/WorkbenchJobKubeUpdateDiff.tsx | 67 ++++++++++++++++--- .../job/workbenchJobKubeActionUtils.ts | 25 +++++++ 4 files changed, 91 insertions(+), 18 deletions(-) diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx index d7bdff5b63..721779721e 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobActionDetail.tsx @@ -46,9 +46,9 @@ export function WorkbenchJobActionDetail({ const needsApproval = activity.status === WorkbenchJobActivityStatus.NeedsApproval const isKubernetes = activity.type === WorkbenchJobActivityType.Kubernetes - const isKubeUpdate = - isKubernetes && - getKubeActionVariant(activity.result?.kubeRequest?.method) === 'update' + const kubeVariant = getKubeActionVariant(activity.result?.kubeRequest?.method) + const isKubeDiff = + isKubernetes && (kubeVariant === 'update' || kubeVariant === 'delete') const icon = getActionIcon(activity) const inputJson = getActionInputJson(activity) const isDenied = @@ -120,7 +120,7 @@ export function WorkbenchJobActionDetail({ {error && } - {isKubeUpdate ? ( + {isKubeDiff ? ( {error && } - {!isKubeUpdate && ( + {!isKubeDiff && ( {getActionDescription(activity)} )} - {isKubeUpdate ? ( + {isKubeDiff ? ( )} - {!isKubeUpdate && !!activity.insertedAt && ( + {!isKubeDiff && !!activity.insertedAt && ( Start time diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobKubeUpdateDiff.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobKubeUpdateDiff.tsx index 0c660b4071..b3599228b9 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobKubeUpdateDiff.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobKubeUpdateDiff.tsx @@ -1,4 +1,4 @@ -import { Chip, Flex } from '@pluralsh/design-system' +import { Chip, Flex, TrashCanIcon } from '@pluralsh/design-system' import DiffViewer from 'components/utils/DiffViewer' import { GqlError } from 'components/utils/Alert' import { RectangleSkeleton } from 'components/utils/SkeletonLoaders' @@ -12,6 +12,9 @@ import { DiffMethod } from 'react-diff-viewer-continued' import styled, { useTheme } from 'styled-components' import { getKubeActionVariant, + getKubeDeleteDiffValues, + getKubeDeleteResourceLabel, + getKubeDeleteWarning, getKubeUpdateDiffValues, KubeRequestLike, toKubeYaml, @@ -28,23 +31,32 @@ export function WorkbenchJobKubeUpdateDiff({ }) { const theme = useTheme() const variant = getKubeActionVariant(kubeRequest?.method) + const shouldFetch = variant === 'update' || variant === 'delete' const { data, loading, error } = useWorkbenchJobKubeRequestDiffQuery({ variables: { id: activityId }, - skip: !enabled || !activityId || variant !== 'update', + skip: !enabled || !activityId || !shouldFetch, fetchPolicy: 'network-only', }) - if (variant !== 'update') return null + if (!shouldFetch) return null const liveKube = data?.workbenchJobActivity?.result?.kubeRequest - const { oldValue, newValue } = getKubeUpdateDiffValues( - liveKube ?? kubeRequest - ) + const kube = liveKube ?? kubeRequest + const { oldValue, newValue } = + variant === 'delete' + ? getKubeDeleteDiffValues(kube) + : getKubeUpdateDiffValues(kube) + const isDelete = variant === 'delete' if (loading && !liveKube) { return ( - DIFF + {isDelete && } + + {isDelete + ? getKubeDeleteResourceLabel(kubeRequest).toUpperCase() + : 'DIFF'} + } @@ -61,14 +73,19 @@ export function WorkbenchJobKubeUpdateDiff({ return ( - DIFF + {isDelete && } + + {isDelete ? getKubeDeleteResourceLabel(kube).toUpperCase() : 'DIFF'} + {error && } + + {getKubeDeleteWarning(kubeRequest)} + + ) +} + export function WorkbenchJobKubeActionChips({ type, method, @@ -130,3 +163,17 @@ const DiffSectionSC = styled.div(({ theme }) => ({ minWidth: 0, width: '100%', })) + +const DeleteWarningSC = styled.div(({ theme }) => ({ + ...theme.partials.text.caption, + display: 'flex', + alignItems: 'center', + gap: theme.spacing.small, + width: '100%', + padding: theme.spacing.small, + marginBottom: theme.spacing.xsmall, + borderRadius: 12, + backgroundColor: theme.colors.red[900], + border: `1px solid ${theme.colors.red[850]}`, + color: theme.colors['text-danger-light'], +})) diff --git a/assets/src/components/workbenches/workbench/job/workbenchJobKubeActionUtils.ts b/assets/src/components/workbenches/workbench/job/workbenchJobKubeActionUtils.ts index f788a1f322..df257b3b1b 100644 --- a/assets/src/components/workbenches/workbench/job/workbenchJobKubeActionUtils.ts +++ b/assets/src/components/workbenches/workbench/job/workbenchJobKubeActionUtils.ts @@ -164,3 +164,28 @@ export function getKubeUpdateDiffValues( const oldValue = toKubeYaml(kube?.current) return { oldValue, newValue } } + +/** Full-file delete treatment: entire current object as removals. */ +export function getKubeDeleteDiffValues( + kube: KubeRequestLike | null | undefined +): { oldValue: string; newValue: string } { + return { + oldValue: toKubeYaml(kube?.current), + newValue: '', + } +} + +export function getKubeDeleteResourceLabel( + kube: KubeRequestLike | null | undefined +): string { + const parsed = parseKubePath(kube?.path) + const nsLabel = parsed?.namespace ? `ns/${parsed.namespace}` : null + const name = parsed?.name + return [nsLabel, name].filter(Boolean).join(' · ') || kube?.path || 'resource' +} + +export function getKubeDeleteWarning( + kube: KubeRequestLike | null | undefined +): string { + return `This permanently deletes ${getKubeDeleteResourceLabel(kube)} below. This can't be undone from the workbench.` +} From be61aaca0b684ca0d597fbcd67fce3be7271e807 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Tue, 28 Jul 2026 15:21:44 +0200 Subject: [PATCH 44/50] move diff viewer to design system --- assets/design-system/package.json | 1 + .../src/components}/DiffViewer.tsx | 37 +++++++---- assets/design-system/src/index.ts | 5 ++ .../src/stories/DiffViewer.stories.tsx | 62 +++++++++++++++++++ assets/package.json | 1 - .../ai/insights/PrEvidenceDetails.tsx | 4 +- .../cd/services/service/ServiceDryRun.tsx | 3 +- .../components/component/ComponentDryRun.tsx | 2 +- .../job/WorkbenchJobActivityResults.tsx | 4 +- .../job/WorkbenchJobKubeUpdateDiff.tsx | 10 ++- assets/yarn.lock | 2 +- 11 files changed, 107 insertions(+), 24 deletions(-) rename assets/{src/components/utils => design-system/src/components}/DiffViewer.tsx (86%) create mode 100644 assets/design-system/src/stories/DiffViewer.stories.tsx diff --git a/assets/design-system/package.json b/assets/design-system/package.json index 028d2042cd..97687926be 100644 --- a/assets/design-system/package.json +++ b/assets/design-system/package.json @@ -69,6 +69,7 @@ "mermaid": "11.16.0", "react-animate-height": "3.2.4", "react-aria": "3.50.0", + "react-diff-viewer-continued": "4.4.0", "react-markdown": "9.1.0", "react-merge-refs": "2.1.1", "react-stately": "3.48.0", diff --git a/assets/src/components/utils/DiffViewer.tsx b/assets/design-system/src/components/DiffViewer.tsx similarity index 86% rename from assets/src/components/utils/DiffViewer.tsx rename to assets/design-system/src/components/DiffViewer.tsx index 616798aa34..81cf790fa3 100644 --- a/assets/src/components/utils/DiffViewer.tsx +++ b/assets/design-system/src/components/DiffViewer.tsx @@ -1,26 +1,36 @@ +import { useMemo } from 'react' import ReactDiffViewer, { - ReactDiffViewerProps, + DiffMethod, + type ReactDiffViewerProps, } from 'react-diff-viewer-continued' -import { useTheme } from 'styled-components' -import { Card, CardProps, WrapWithIf } from '@pluralsh/design-system' +import { merge } from 'lodash-es' import chroma from 'chroma-js' -import { merge } from 'lodash' -import { useMemo } from 'react' +import { useTheme } from 'styled-components' + +import Card, { type CardProps } from './Card' +import WrapWithIf from './WrapWithIf' + +export { DiffMethod } +export type { ReactDiffViewerProps } + +const opacity = (color: string, amount: number) => + chroma(color).alpha(amount).hex() -const opacity = (color: string, opacity: number) => { - return chroma(color).alpha(opacity).hex() +export type DiffViewerProps = Omit< + ReactDiffViewerProps, + 'leftTitle' | 'rightTitle' +> & { + asCard?: boolean + cardProps?: CardProps } -export default function DiffViewer({ +export function DiffViewer({ styles, asCard = true, cardProps, hideSummary = true, ...props -}: Omit & { - asCard?: boolean - cardProps?: CardProps -}) { +}: DiffViewerProps) { const theme = useTheme() const mergedStyles = useMemo(() => { @@ -29,6 +39,7 @@ export default function DiffViewer({ gutterBackground: 'transparent', codeFoldGutterBackground: 'transparent', } + return merge( { content: { @@ -97,3 +108,5 @@ export default function DiffViewer({ ) } + +export default DiffViewer diff --git a/assets/design-system/src/index.ts b/assets/design-system/src/index.ts index 6e3e9260e4..6939eb665c 100644 --- a/assets/design-system/src/index.ts +++ b/assets/design-system/src/index.ts @@ -51,6 +51,11 @@ export { default as CodeEditor } from './components/CodeEditor' export { default as Codeline } from './components/Codeline' export { ComboBox } from './components/ComboBox' export { default as Date } from './components/Date' +export { + default as DiffViewer, + DiffMethod, + type DiffViewerProps, +} from './components/DiffViewer' export { default as Divider } from './components/Divider' export { default as EmptyState } from './components/EmptyState' export { default as Flex } from './components/Flex' diff --git a/assets/design-system/src/stories/DiffViewer.stories.tsx b/assets/design-system/src/stories/DiffViewer.stories.tsx new file mode 100644 index 0000000000..5e3b83f41f --- /dev/null +++ b/assets/design-system/src/stories/DiffViewer.stories.tsx @@ -0,0 +1,62 @@ +import { DiffMethod, DiffViewer } from '..' + +const OLD_VALUE = `apiVersion: v1 +kind: ConfigMap +metadata: + name: demo + namespace: default +data: + feature: enabled +` + +const NEW_VALUE = `apiVersion: v1 +kind: ConfigMap +metadata: + name: demo + namespace: default +data: + feature: disabled + extra: true +` + +export default { + title: 'DiffViewer', + component: DiffViewer, + argTypes: { + splitView: { + control: 'boolean', + }, + asCard: { + control: 'boolean', + }, + hideLineNumbers: { + control: 'boolean', + }, + }, +} + +function Template(args: any) { + return ( +
+ +
+ ) +} + +export const Default = Template.bind({}) +Default.args = { + oldValue: OLD_VALUE, + newValue: NEW_VALUE, + splitView: false, + compareMethod: DiffMethod.LINES, + asCard: true, +} + +export const DeletedFile = Template.bind({}) +DeletedFile.args = { + oldValue: OLD_VALUE, + newValue: '', + splitView: false, + compareMethod: DiffMethod.LINES, + asCard: true, +} diff --git a/assets/package.json b/assets/package.json index 24cd19cee6..d09112f8dd 100644 --- a/assets/package.json +++ b/assets/package.json @@ -104,7 +104,6 @@ "query-string": "8.2.0", "react": "19.2.7", "react-diff-view": "3.3.3", - "react-diff-viewer-continued": "4.4.0", "react-dom": "19.2.7", "react-dropzone": "14.4.1", "react-error-boundary": "4.1.2", diff --git a/assets/src/components/ai/insights/PrEvidenceDetails.tsx b/assets/src/components/ai/insights/PrEvidenceDetails.tsx index 968d2809ea..91daf9c8e6 100644 --- a/assets/src/components/ai/insights/PrEvidenceDetails.tsx +++ b/assets/src/components/ai/insights/PrEvidenceDetails.tsx @@ -3,15 +3,15 @@ import { AccordionItem, CloseIcon, CaretDownIcon, + DiffMethod, + DiffViewer, FileIcon, Flex, IconFrame, PrOpenIcon, } from '@pluralsh/design-system' -import DiffViewer from 'components/utils/DiffViewer' import { StackedText } from 'components/utils/table/StackedText' import { useMemo } from 'react' -import { DiffMethod } from 'react-diff-viewer-continued' import styled from 'styled-components' import pluralize from 'pluralize' import { getURLPath } from 'utils/url' diff --git a/assets/src/components/cd/services/service/ServiceDryRun.tsx b/assets/src/components/cd/services/service/ServiceDryRun.tsx index c2bcdc6f28..e5b0d43c77 100644 --- a/assets/src/components/cd/services/service/ServiceDryRun.tsx +++ b/assets/src/components/cd/services/service/ServiceDryRun.tsx @@ -9,14 +9,13 @@ import { useMemo, useState } from 'react' import { DiffColumnIcon, DiffUnifiedIcon, + DiffViewer, IconFrame, } from '@pluralsh/design-system' import { useTheme } from 'styled-components' import { isEmpty } from 'lodash' -import DiffViewer from '../../../utils/DiffViewer' - import { useServiceContext } from './ServiceDetailsContext' const SEPARATOR = '\n---\n' diff --git a/assets/src/components/component/ComponentDryRun.tsx b/assets/src/components/component/ComponentDryRun.tsx index bef3787a93..c853b7c7b1 100644 --- a/assets/src/components/component/ComponentDryRun.tsx +++ b/assets/src/components/component/ComponentDryRun.tsx @@ -1,8 +1,8 @@ import { useOutletContext } from 'react-router-dom' import { useMemo } from 'react' import { isEmpty } from 'lodash' +import { DiffViewer } from '@pluralsh/design-system' -import DiffViewer from '../utils/DiffViewer' import { ComponentDetailsContext } from './ComponentDetails' export default function ComponentDryRun() { diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobActivityResults.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobActivityResults.tsx index 8602509974..9af3e21978 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobActivityResults.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobActivityResults.tsx @@ -3,6 +3,8 @@ import { Button, Card, Code, + DiffMethod, + DiffViewer, Flex, FlexProps, IconFrame, @@ -22,7 +24,6 @@ import { prettifyPrompt, truncateKeepingChips, } from 'components/utils/contentEditableChips' -import DiffViewer from 'components/utils/DiffViewer' import { dateFormat, useGraphTheme } from 'components/utils/Graph' import { RectangleSkeleton } from 'components/utils/SkeletonLoaders' import { BasicTextButton } from 'components/utils/typography/BasicTextButton' @@ -43,7 +44,6 @@ import { useMemo, useState, } from 'react' -import { DiffMethod } from 'react-diff-viewer-continued' import styled, { useTheme } from 'styled-components' import { COLORS } from 'utils/color' import { toDateOrUndef } from 'utils/datetime' diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobKubeUpdateDiff.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobKubeUpdateDiff.tsx index b3599228b9..4e807a27f6 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobKubeUpdateDiff.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobKubeUpdateDiff.tsx @@ -1,5 +1,10 @@ -import { Chip, Flex, TrashCanIcon } from '@pluralsh/design-system' -import DiffViewer from 'components/utils/DiffViewer' +import { + Chip, + DiffMethod, + DiffViewer, + Flex, + TrashCanIcon, +} from '@pluralsh/design-system' import { GqlError } from 'components/utils/Alert' import { RectangleSkeleton } from 'components/utils/SkeletonLoaders' import { CaptionP } from 'components/utils/typography/Text' @@ -8,7 +13,6 @@ import { WorkbenchJobActivityType, } from 'generated/graphql' import { ReactNode } from 'react' -import { DiffMethod } from 'react-diff-viewer-continued' import styled, { useTheme } from 'styled-components' import { getKubeActionVariant, diff --git a/assets/yarn.lock b/assets/yarn.lock index c0c7b20ca0..8c34a664a9 100644 --- a/assets/yarn.lock +++ b/assets/yarn.lock @@ -3923,6 +3923,7 @@ __metadata: npm-run-all: "npm:4.1.5" react-animate-height: "npm:3.2.4" react-aria: "npm:3.50.0" + react-diff-viewer-continued: "npm:4.4.0" react-markdown: "npm:9.1.0" react-merge-refs: "npm:2.1.1" react-stately: "npm:3.48.0" @@ -8428,7 +8429,6 @@ __metadata: query-string: "npm:8.2.0" react: "npm:19.2.7" react-diff-view: "npm:3.3.3" - react-diff-viewer-continued: "npm:4.4.0" react-dom: "npm:19.2.7" react-dropzone: "npm:14.4.1" react-error-boundary: "npm:4.1.2" From ef44fc9c693a8de642509ff675d7707cba6bba31 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Tue, 28 Jul 2026 16:33:31 +0200 Subject: [PATCH 45/50] update memo display --- .../workbench/job/WorkbenchJobActivity.tsx | 20 ++++++------ .../job/WorkbenchJobActivityResults.tsx | 31 ------------------- 2 files changed, 11 insertions(+), 40 deletions(-) diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobActivity.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobActivity.tsx index a52d2c0c45..bc1c3dbcde 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobActivity.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobActivity.tsx @@ -52,7 +52,6 @@ import { JobActivityMetrics, JobActivityMetricsChart, JobActivityPrompt, - MemoActivityIcon, ExpandableUserPrompt, } from './WorkbenchJobActivityResults' import { WorkbenchJobCanvas } from './WorkbenchJobCanvas' @@ -122,9 +121,6 @@ export function WorkbenchJobActivity({ > {type?.toLowerCase() ?? 'activity'} - {result?.jobUpdate && ( - - )} {!isEmpty(result?.logs) && ( - {result?.jobUpdate && } {(isFailed || isRejected) && ( setFinishedAnimating(true)} - header="Memo" + header={workingTheory ? 'Working theory' : 'Memo'} size="large" > {finishedAnimating ? ( @@ -355,7 +357,7 @@ function WorkbenchJobMemo({ css={{ wordBreak: 'break-word' }} /> )} - {content && } + {fullText && } ) : ( -}) { - const newValue = jobUpdate?.workingTheory ?? jobUpdate?.conclusion ?? '' - const oldValue = useMemo( - () => getOldContentFromTextDiff(newValue, jobUpdate?.diff), - [newValue, jobUpdate?.diff] - ) - return ( - - } - /> - ) -} const EXPANDABLE_PROMPT_LENGTH = 400 export function ExpandableUserPrompt({ From d45c101a1aed15d5cb1bd920c66543c5130e6e27 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Tue, 28 Jul 2026 16:47:19 +0200 Subject: [PATCH 46/50] protect secret bodies and make approval atomic --- .../job/WorkbenchJobKubeUpdateDiff.tsx | 19 ++++- .../job/workbenchJobKubeActionUtils.ts | 25 ++++++ assets/src/generated/graphql.ts | 24 +++--- .../generated/persisted-queries/client.json | 28 +++--- assets/src/graph/workbench.graphql | 2 - lib/console/deployments/workbenches.ex | 26 ++++-- lib/console/graphql/deployments/workbench.ex | 4 +- .../resolvers/deployments/workbench.ex | 18 ++++ schema/schema.graphql | 2 +- test/console/deployments/workbenches_test.exs | 47 +++++++++- .../deployments/workbench_queries_test.exs | 85 +++++++++++++++++++ 11 files changed, 239 insertions(+), 41 deletions(-) diff --git a/assets/src/components/workbenches/workbench/job/WorkbenchJobKubeUpdateDiff.tsx b/assets/src/components/workbenches/workbench/job/WorkbenchJobKubeUpdateDiff.tsx index 4e807a27f6..1974a46c9a 100644 --- a/assets/src/components/workbenches/workbench/job/WorkbenchJobKubeUpdateDiff.tsx +++ b/assets/src/components/workbenches/workbench/job/WorkbenchJobKubeUpdateDiff.tsx @@ -20,6 +20,7 @@ import { getKubeDeleteResourceLabel, getKubeDeleteWarning, getKubeUpdateDiffValues, + isKubeSecretRequest, KubeRequestLike, toKubeYaml, } from './workbenchJobKubeActionUtils' @@ -46,6 +47,7 @@ export function WorkbenchJobKubeUpdateDiff({ const liveKube = data?.workbenchJobActivity?.result?.kubeRequest const kube = liveKube ?? kubeRequest + const secretProtected = isKubeSecretRequest(kube) const { oldValue, newValue } = variant === 'delete' ? getKubeDeleteDiffValues(kube) @@ -69,10 +71,25 @@ export function WorkbenchJobKubeUpdateDiff({ ) } - if (error && !oldValue && !newValue) { + if (error && !oldValue && !newValue && !secretProtected) { return } + if (secretProtected && !oldValue && !newValue) { + return ( + + {isDelete && } + + {isDelete ? getKubeDeleteResourceLabel(kube).toUpperCase() : 'DIFF'} + + + Secret payloads are hidden from workbench readers. Approve or deny + based on the request path and method. + + + ) + } + if (!newValue && !oldValue) return null return ( diff --git a/assets/src/components/workbenches/workbench/job/workbenchJobKubeActionUtils.ts b/assets/src/components/workbenches/workbench/job/workbenchJobKubeActionUtils.ts index df257b3b1b..50c5138ccb 100644 --- a/assets/src/components/workbenches/workbench/job/workbenchJobKubeActionUtils.ts +++ b/assets/src/components/workbenches/workbench/job/workbenchJobKubeActionUtils.ts @@ -189,3 +189,28 @@ export function getKubeDeleteWarning( ): string { return `This permanently deletes ${getKubeDeleteResourceLabel(kube)} below. This can't be undone from the workbench.` } + +export function isKubeSecretPath(path: string | null | undefined): boolean { + if (!path) return false + return path.includes('/secrets/') || path.endsWith('/secrets') +} + +export function isKubeSecretBody(body: string | null | undefined): boolean { + if (!body?.trim()) return false + try { + const parsed = JSON.parse(body) as { + kind?: string + items?: Array<{ kind?: string }> + } + if (parsed.kind === 'Secret' || parsed.kind === 'SecretList') return true + return parsed.items?.[0]?.kind === 'Secret' + } catch { + return false + } +} + +export function isKubeSecretRequest( + kube: KubeRequestLike | null | undefined +): boolean { + return isKubeSecretPath(kube?.path) || isKubeSecretBody(kube?.body) +} diff --git a/assets/src/generated/graphql.ts b/assets/src/generated/graphql.ts index e730353d75..000aebbcf1 100644 --- a/assets/src/generated/graphql.ts +++ b/assets/src/generated/graphql.ts @@ -21165,11 +21165,11 @@ export type WorkbenchCanvasBlockFragment = { __typename?: 'WorkbenchCanvasBlock' export type WorkbenchJobResultFragment = { __typename?: 'WorkbenchJobResult', id: string, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null, topology?: string | null, todos?: Array<{ __typename?: 'WorkbenchJobResultTodo', name?: string | null, description?: string | null, done?: boolean | null } | null> | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null }; -export type WorkbenchJobActivityResultFragment = { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null }; +export type WorkbenchJobActivityResultFragment = { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null }; -export type WorkbenchJobActivityFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null }; +export type WorkbenchJobActivityFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null }; -export type WorkbenchJobActivityWithThoughtsFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, thoughts?: Array<{ __typename?: 'WorkbenchJobThought', id: string, content?: string | null, toolName?: string | null, toolArgs?: Record | null, activity?: { __typename?: 'WorkbenchJobActivity', id: string } | null, attributes?: { __typename?: 'WorkbenchJobThoughtAttributes', logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, metrics?: Array<{ __typename?: 'WorkbenchJobActivityMetric', timestamp?: string | null, name?: string | null, value?: number | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null } | null } | null> | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null }; +export type WorkbenchJobActivityWithThoughtsFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, thoughts?: Array<{ __typename?: 'WorkbenchJobThought', id: string, content?: string | null, toolName?: string | null, toolArgs?: Record | null, activity?: { __typename?: 'WorkbenchJobActivity', id: string } | null, attributes?: { __typename?: 'WorkbenchJobThoughtAttributes', logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, metrics?: Array<{ __typename?: 'WorkbenchJobActivityMetric', timestamp?: string | null, name?: string | null, value?: number | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null } | null } | null> | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null }; export type WorkbenchJobProgressFragment = { __typename?: 'WorkbenchJobProgress', activityId?: string | null, tool?: string | null, text?: string | null, arguments?: Record | null }; @@ -21487,7 +21487,7 @@ export type WorkbenchJobActivitiesQueryVariables = Exact<{ }>; -export type WorkbenchJobActivitiesQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus, prompt?: string | null, workbench?: { __typename?: 'Workbench', id: string } | null, referencedJob?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, status: WorkbenchJobStatus, workbench?: { __typename?: 'Workbench', id: string } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null } | null } | null, activities?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null } | null> | null } | null } | null }; +export type WorkbenchJobActivitiesQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus, prompt?: string | null, workbench?: { __typename?: 'Workbench', id: string } | null, referencedJob?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, status: WorkbenchJobStatus, workbench?: { __typename?: 'Workbench', id: string } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null } | null } | null, activities?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null } | null> | null } | null } | null }; export type WorkbenchJobActionSummaryQueryVariables = Exact<{ id: Scalars['ID']['input']; @@ -21497,21 +21497,21 @@ export type WorkbenchJobActionSummaryQueryVariables = Exact<{ export type WorkbenchJobActionSummaryQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, pendingActions?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string } | null } | null> | null } | null, functionActions?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string } | null } | null> | null } | null, kubernetesActions?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string } | null } | null> | null } | null } | null }; -export type WorkbenchJobActionFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null }; +export type WorkbenchJobActionFragment = { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null }; export type WorkbenchJobActionsQueryVariables = Exact<{ id: Scalars['ID']['input']; }>; -export type WorkbenchJobActionsQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, activities?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null } | null } | null> | null } | null } | null }; +export type WorkbenchJobActionsQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', id: string, activities?: { __typename?: 'WorkbenchJobActivityConnection', edges?: Array<{ __typename?: 'WorkbenchJobActivityEdge', node?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null } | null } | null> | null } | null } | null }; export type ApproveWorkbenchJobActivityMutationVariables = Exact<{ id: Scalars['ID']['input']; }>; -export type ApproveWorkbenchJobActivityMutation = { __typename?: 'RootMutationType', approveWorkbenchJobActivity?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null } | null }; +export type ApproveWorkbenchJobActivityMutation = { __typename?: 'RootMutationType', approveWorkbenchJobActivity?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null } | null }; export type RejectWorkbenchJobActivityMutationVariables = Exact<{ id: Scalars['ID']['input']; @@ -21519,7 +21519,7 @@ export type RejectWorkbenchJobActivityMutationVariables = Exact<{ }>; -export type RejectWorkbenchJobActivityMutation = { __typename?: 'RootMutationType', rejectWorkbenchJobActivity?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null } | null }; +export type RejectWorkbenchJobActivityMutation = { __typename?: 'RootMutationType', rejectWorkbenchJobActivity?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, queryParams?: Record | null, contentType?: string | null } | null } | null } | null }; export type WorkbenchJobWhimseyTextQueryVariables = Exact<{ id: Scalars['ID']['input']; @@ -21540,7 +21540,7 @@ export type WorkbenchJobActivityQueryVariables = Exact<{ }>; -export type WorkbenchJobActivityQuery = { __typename?: 'RootQueryType', workbenchJobActivity?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, thoughts?: Array<{ __typename?: 'WorkbenchJobThought', id: string, content?: string | null, toolName?: string | null, toolArgs?: Record | null, activity?: { __typename?: 'WorkbenchJobActivity', id: string } | null, attributes?: { __typename?: 'WorkbenchJobThoughtAttributes', logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, metrics?: Array<{ __typename?: 'WorkbenchJobActivityMetric', timestamp?: string | null, name?: string | null, value?: number | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null } | null } | null> | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null }; +export type WorkbenchJobActivityQuery = { __typename?: 'RootQueryType', workbenchJobActivity?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, thoughts?: Array<{ __typename?: 'WorkbenchJobThought', id: string, content?: string | null, toolName?: string | null, toolArgs?: Record | null, activity?: { __typename?: 'WorkbenchJobActivity', id: string } | null, attributes?: { __typename?: 'WorkbenchJobThoughtAttributes', logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, metrics?: Array<{ __typename?: 'WorkbenchJobActivityMetric', timestamp?: string | null, name?: string | null, value?: number | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null } | null } | null> | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null }; export type WorkbenchJobKubeRequestDiffQueryVariables = Exact<{ id: Scalars['ID']['input']; @@ -21662,7 +21662,7 @@ export type CreateWorkbenchMessageMutationVariables = Exact<{ }>; -export type CreateWorkbenchMessageMutation = { __typename?: 'RootMutationType', createWorkbenchMessage?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null }; +export type CreateWorkbenchMessageMutation = { __typename?: 'RootMutationType', createWorkbenchMessage?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null }; export type CreateWorkbenchPromptMutationVariables = Exact<{ workbenchId: Scalars['ID']['input']; @@ -21805,7 +21805,7 @@ export type WorkbenchJobActivityDeltaSubscriptionVariables = Exact<{ }>; -export type WorkbenchJobActivityDeltaSubscription = { __typename?: 'RootSubscriptionType', workbenchJobActivityDelta?: { __typename?: 'WorkbenchJobActivityDelta', delta?: Delta | null, payload?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, body?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null } | null }; +export type WorkbenchJobActivityDeltaSubscription = { __typename?: 'RootSubscriptionType', workbenchJobActivityDelta?: { __typename?: 'WorkbenchJobActivityDelta', delta?: Delta | null, payload?: { __typename?: 'WorkbenchJobActivity', id: string, type?: WorkbenchJobActivityType | null, status: WorkbenchJobActivityStatus, prompt?: string | null, insertedAt?: string | null, user?: { __typename?: 'User', name: string, email: string, profile?: string | null } | null, result?: { __typename?: 'WorkbenchJobActivityResult', output?: string | null, error?: string | null, functionCall?: { __typename?: 'WorkbenchJobActivityFunctionCall', name?: string | null, input?: Record | null, toolId?: string | null, tool?: { __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, configuration?: { __typename?: 'WorkbenchToolConfiguration', lambda?: { __typename?: 'WorkbenchToolLambdaConnection', description?: string | null } | null, cloudRun?: { __typename?: 'WorkbenchToolCloudRunConnection', description?: string | null } | null, azureFunction?: { __typename?: 'WorkbenchToolAzureFunctionConnection', description?: string | null } | null } | null } | null } | null, kubeRequest?: { __typename?: 'WorkbenchJobActivityKubeRequest', handle?: string | null, method?: string | null, path?: string | null, queryParams?: Record | null, contentType?: string | null } | null, jobUpdate?: { __typename?: 'WorkbenchJobActivityJobUpdate', diff?: string | null, workingTheory?: string | null, criticism?: string | null, conclusion?: string | null } | null, metricsQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, logs?: Array<{ __typename?: 'WorkbenchJobActivityLog', timestamp?: string | null, message?: string | null, labels?: Record | null } | null> | null, traces?: Array<{ __typename?: 'WorkbenchJobActivityTrace', traceId?: string | null, spanId?: string | null, parentId?: string | null, name?: string | null, service?: string | null, start?: string | null, end?: string | null, tags?: Record | null } | null> | null, tracesQuery?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, agentRun?: { __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null, agentRuns?: Array<{ __typename?: 'AgentRun', id: string, status: AgentRunStatus, mode: AgentRunMode, babysit?: boolean | null, approval?: boolean | null, approvedAt?: string | null, prompt: string, shared?: boolean | null, error?: string | null, repository: string, branch?: string | null, headBranch?: string | null, insertedAt?: string | null, updatedAt?: string | null, runtime?: { __typename?: 'AgentRuntime', id: string, name: string, type: AgentRuntimeType } | null, pullRequests?: Array<{ __typename?: 'PullRequest', id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, podReference?: { __typename?: 'AgentPodReference', name: string, namespace: string } | null, usage?: { __typename?: 'AgentRunUsage', totalCost?: number | null, totalTokens?: number | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, workbench?: { __typename?: 'Workbench', id: string, name: string } | null } | null, upload?: { __typename?: 'AgentRunUpload', id: string, session?: string | null, patch?: string | null } | null, todos?: Array<{ __typename?: 'AgentTodo', title: string, description: string, done?: boolean | null } | null> | null } | null> | null } | null } | null }; export type WorkbenchJobThoughtDeltaSubscriptionVariables = Exact<{ jobId: Scalars['ID']['input']; @@ -27204,7 +27204,6 @@ export const WorkbenchJobActivityResultFragmentDoc = gql` handle method path - body queryParams contentType } @@ -27734,7 +27733,6 @@ export const WorkbenchJobActionFragmentDoc = gql` handle method path - body queryParams contentType } diff --git a/assets/src/generated/persisted-queries/client.json b/assets/src/generated/persisted-queries/client.json index 2998586356..48692d0654 100644 --- a/assets/src/generated/persisted-queries/client.json +++ b/assets/src/generated/persisted-queries/client.json @@ -2017,30 +2017,30 @@ "name": "WorkbenchJobTracesTool", "body": "query WorkbenchJobTracesTool($id: ID!, $name: String, $arguments: Json) {\n workbenchJob(id: $id) {\n id\n tracesTool(name: $name, arguments: $arguments) {\n ...WorkbenchJobActivityTrace\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}" }, - "sha256:4747c233e450400ceba664b6d6017835ab23bbded33e347ee7dce1420a319eb5": { + "sha256:7cdc418e225153157a4fc45bda81cb061f35a14f9c1156dfb026123486ccaa23": { "type": "query", "name": "WorkbenchJobActivities", - "body": "query WorkbenchJobActivities($id: ID!) {\n workbenchJob(id: $id) {\n id\n status\n prompt\n workbench {\n id\n __typename\n }\n referencedJob {\n id\n prompt\n status\n workbench {\n id\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n __typename\n }\n activities(first: 100) {\n edges {\n node {\n ...WorkbenchJobActivity\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n user {\n ...UserTiny\n __typename\n }\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment UserTiny on User {\n name\n email\n profile\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" + "body": "query WorkbenchJobActivities($id: ID!) {\n workbenchJob(id: $id) {\n id\n status\n prompt\n workbench {\n id\n __typename\n }\n referencedJob {\n id\n prompt\n status\n workbench {\n id\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n __typename\n }\n activities(first: 100) {\n edges {\n node {\n ...WorkbenchJobActivity\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n user {\n ...UserTiny\n __typename\n }\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment UserTiny on User {\n name\n email\n profile\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" }, "sha256:58e06a37b563b9ad7356ba2e596b3c6e5e5be8323b8472e1fa8f30da7552dec2": { "type": "query", "name": "WorkbenchJobActionSummary", "body": "query WorkbenchJobActionSummary($id: ID!, $first: Int = 1) {\n workbenchJob(id: $id) {\n id\n pendingActions: activities(first: $first, status: NEEDS_APPROVAL) {\n edges {\n node {\n id\n __typename\n }\n __typename\n }\n __typename\n }\n functionActions: activities(first: $first, type: FUNCTION) {\n edges {\n node {\n id\n __typename\n }\n __typename\n }\n __typename\n }\n kubernetesActions: activities(first: $first, type: KUBERNETES) {\n edges {\n node {\n id\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}" }, - "sha256:ce88538577a44429ce369b15748ceb5f145b8d3e4f5f836e065fffa26fff80fb": { + "sha256:becd7d4b4f55e1936d6113cce1c73515598fe91a65822ebd37056410dd134ad8": { "type": "query", "name": "WorkbenchJobActions", - "body": "query WorkbenchJobActions($id: ID!) {\n workbenchJob(id: $id) {\n id\n activities(first: 100) {\n edges {\n node {\n ...WorkbenchJobAction\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobAction on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n user {\n ...UserTiny\n __typename\n }\n result {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment UserTiny on User {\n name\n email\n profile\n __typename\n}" + "body": "query WorkbenchJobActions($id: ID!) {\n workbenchJob(id: $id) {\n id\n activities(first: 100) {\n edges {\n node {\n ...WorkbenchJobAction\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobAction on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n user {\n ...UserTiny\n __typename\n }\n result {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n queryParams\n contentType\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment UserTiny on User {\n name\n email\n profile\n __typename\n}" }, - "sha256:cd4a36a3ce5f7ba271a23812a391ea572227cb1d79019062a3df8a5d34591701": { + "sha256:efcbc3675eb890bf144799f79038d665a58dd851a30524eb823ef9bac57edad0": { "type": "mutation", "name": "ApproveWorkbenchJobActivity", - "body": "mutation ApproveWorkbenchJobActivity($id: ID!) {\n approveWorkbenchJobActivity(id: $id) {\n ...WorkbenchJobAction\n __typename\n }\n}\n\nfragment WorkbenchJobAction on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n user {\n ...UserTiny\n __typename\n }\n result {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment UserTiny on User {\n name\n email\n profile\n __typename\n}" + "body": "mutation ApproveWorkbenchJobActivity($id: ID!) {\n approveWorkbenchJobActivity(id: $id) {\n ...WorkbenchJobAction\n __typename\n }\n}\n\nfragment WorkbenchJobAction on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n user {\n ...UserTiny\n __typename\n }\n result {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n queryParams\n contentType\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment UserTiny on User {\n name\n email\n profile\n __typename\n}" }, - "sha256:696e189dbff6680c3b9ba3a13ae12e6f540715965cce9a72901fbc3a2d56bfff": { + "sha256:049abfa4119da974dcaccd33e7ba359fa9ec657304604a6af5c916dbe4732885": { "type": "mutation", "name": "RejectWorkbenchJobActivity", - "body": "mutation RejectWorkbenchJobActivity($id: ID!, $reason: String) {\n rejectWorkbenchJobActivity(id: $id, reason: $reason) {\n ...WorkbenchJobAction\n __typename\n }\n}\n\nfragment WorkbenchJobAction on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n user {\n ...UserTiny\n __typename\n }\n result {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment UserTiny on User {\n name\n email\n profile\n __typename\n}" + "body": "mutation RejectWorkbenchJobActivity($id: ID!, $reason: String) {\n rejectWorkbenchJobActivity(id: $id, reason: $reason) {\n ...WorkbenchJobAction\n __typename\n }\n}\n\nfragment WorkbenchJobAction on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n user {\n ...UserTiny\n __typename\n }\n result {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n queryParams\n contentType\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment UserTiny on User {\n name\n email\n profile\n __typename\n}" }, "sha256:1367ab87fa3cb2913dca622df4606e0b0e2217e1abedeae5807cbcaf496114ac": { "type": "query", @@ -2052,10 +2052,10 @@ "name": "WorkbenchJobActivityWhimseyText", "body": "query WorkbenchJobActivityWhimseyText($id: ID!) {\n workbenchJobActivity(id: $id) {\n id\n whimsey\n __typename\n }\n}" }, - "sha256:850ef94eef811eeb59c9d949b15b76a74e0c972509b98c7d7eb64593d49d95c4": { + "sha256:423effc61434b859da2a40c53935ae204276d767027ad5a933c85d396807f818": { "type": "query", "name": "WorkbenchJobActivity", - "body": "query WorkbenchJobActivity($id: ID!) {\n workbenchJobActivity(id: $id) {\n ...WorkbenchJobActivityWithThoughts\n __typename\n }\n}\n\nfragment WorkbenchJobActivityWithThoughts on WorkbenchJobActivity {\n ...WorkbenchJobActivity\n thoughts {\n ...WorkbenchJobThought\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n user {\n ...UserTiny\n __typename\n }\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment UserTiny on User {\n name\n email\n profile\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}\n\nfragment WorkbenchJobThought on WorkbenchJobThought {\n id\n content\n toolName\n toolArgs\n activity {\n id\n __typename\n }\n attributes {\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n metrics {\n ...WorkbenchJobActivityMetric\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityMetric on WorkbenchJobActivityMetric {\n timestamp\n name\n value\n labels\n __typename\n}" + "body": "query WorkbenchJobActivity($id: ID!) {\n workbenchJobActivity(id: $id) {\n ...WorkbenchJobActivityWithThoughts\n __typename\n }\n}\n\nfragment WorkbenchJobActivityWithThoughts on WorkbenchJobActivity {\n ...WorkbenchJobActivity\n thoughts {\n ...WorkbenchJobThought\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n user {\n ...UserTiny\n __typename\n }\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment UserTiny on User {\n name\n email\n profile\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}\n\nfragment WorkbenchJobThought on WorkbenchJobThought {\n id\n content\n toolName\n toolArgs\n activity {\n id\n __typename\n }\n attributes {\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n metrics {\n ...WorkbenchJobActivityMetric\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobActivityMetric on WorkbenchJobActivityMetric {\n timestamp\n name\n value\n labels\n __typename\n}" }, "sha256:ff984e68d27f08c9395b10c31c0c5314157451bf3699059c598c004c5da9cff0": { "type": "query", @@ -2132,10 +2132,10 @@ "name": "CancelWorkbenchJob", "body": "mutation CancelWorkbenchJob($jobId: ID!) {\n cancelWorkbenchJob(jobId: $jobId) {\n id\n status\n __typename\n }\n}" }, - "sha256:f4eb3cb080e6396274c2ea1b550d4e6a196f25cbcb7e79a1d44a78c38202b476": { + "sha256:ce58559013725f182dcd1111dae9862df7883af6b27281116c7ea5000eed646e": { "type": "mutation", "name": "CreateWorkbenchMessage", - "body": "mutation CreateWorkbenchMessage($jobId: ID!, $attributes: WorkbenchMessageAttributes!) {\n createWorkbenchMessage(jobId: $jobId, attributes: $attributes) {\n ...WorkbenchJobActivity\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n user {\n ...UserTiny\n __typename\n }\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment UserTiny on User {\n name\n email\n profile\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" + "body": "mutation CreateWorkbenchMessage($jobId: ID!, $attributes: WorkbenchMessageAttributes!) {\n createWorkbenchMessage(jobId: $jobId, attributes: $attributes) {\n ...WorkbenchJobActivity\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n user {\n ...UserTiny\n __typename\n }\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment UserTiny on User {\n name\n email\n profile\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" }, "sha256:aec27aea620d94d724229e982ca5b06f6c40291b1488ebcb52c02655b989f534": { "type": "mutation", @@ -2227,10 +2227,10 @@ "name": "WorkbenchJobDelta", "body": "subscription WorkbenchJobDelta($id: ID, $workbenchId: ID) {\n workbenchJobDelta(id: $id, workbenchId: $workbenchId) {\n delta\n payload {\n ...WorkbenchJobTiny\n error\n result {\n ...WorkbenchJobResult\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobTiny on WorkbenchJob {\n id\n prompt\n status\n error\n insertedAt\n usage {\n ...WorkbenchJobUsageTiny\n __typename\n }\n modes {\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n user {\n id\n name\n profile\n __typename\n }\n workbench {\n id\n name\n __typename\n }\n alert {\n id\n state\n url\n __typename\n }\n issue {\n id\n status\n url\n __typename\n }\n pullRequests {\n ...WorkbenchJobPullRequest\n __typename\n }\n result {\n id\n conclusion\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n chatbotMessage {\n id\n channel\n message\n chatConnection {\n id\n name\n type\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobUsageTiny on WorkbenchJobUsage {\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchJobPullRequest on PullRequest {\n ...PullRequestBasic\n patch\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment WorkbenchJobResult on WorkbenchJobResult {\n id\n workingTheory\n criticism\n conclusion\n topology\n todos {\n ...WorkbenchJobResultTodo\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobResultTodo on WorkbenchJobResultTodo {\n name\n description\n done\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}" }, - "sha256:7494e4222b67c89e99354381bdffbe52787b197107ed61d93824cefbda9b683d": { + "sha256:4a62176cdcb80b80875677833e674fe4c583bec21e15b547cf2b50db8ee2b4eb": { "type": "subscription", "name": "WorkbenchJobActivityDelta", - "body": "subscription WorkbenchJobActivityDelta($jobId: ID!) {\n workbenchJobActivityDelta(jobId: $jobId) {\n delta\n payload {\n ...WorkbenchJobActivity\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n user {\n ...UserTiny\n __typename\n }\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment UserTiny on User {\n name\n email\n profile\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n body\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" + "body": "subscription WorkbenchJobActivityDelta($jobId: ID!) {\n workbenchJobActivityDelta(jobId: $jobId) {\n delta\n payload {\n ...WorkbenchJobActivity\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchJobActivity on WorkbenchJobActivity {\n id\n type\n status\n prompt\n insertedAt\n user {\n ...UserTiny\n __typename\n }\n result {\n ...WorkbenchJobActivityResult\n __typename\n }\n agentRun {\n ...AgentRunTiny\n __typename\n }\n agentRuns {\n ...AgentRunTiny\n __typename\n }\n __typename\n}\n\nfragment UserTiny on User {\n name\n email\n profile\n __typename\n}\n\nfragment WorkbenchJobActivityResult on WorkbenchJobActivityResult {\n output\n error\n functionCall {\n name\n input\n toolId\n tool {\n id\n name\n tool\n configuration {\n lambda {\n description\n __typename\n }\n cloudRun {\n description\n __typename\n }\n azureFunction {\n description\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n kubeRequest {\n handle\n method\n path\n queryParams\n contentType\n __typename\n }\n jobUpdate {\n diff\n workingTheory\n criticism\n conclusion\n __typename\n }\n metricsQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n logs {\n ...WorkbenchJobActivityLog\n __typename\n }\n traces {\n ...WorkbenchJobActivityTrace\n __typename\n }\n tracesQuery {\n ...WorkbenchToolQueryData\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchJobActivityLog on WorkbenchJobActivityLog {\n timestamp\n message\n labels\n __typename\n}\n\nfragment WorkbenchJobActivityTrace on WorkbenchJobActivityTrace {\n traceId\n spanId\n parentId\n name\n service\n start\n end\n tags\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}\n\nfragment AgentRunTiny on AgentRun {\n id\n status\n mode\n babysit\n approval\n approvedAt\n prompt\n shared\n error\n runtime {\n id\n name\n type\n __typename\n }\n repository\n branch\n headBranch\n pullRequests {\n ...PullRequestBasic\n __typename\n }\n podReference {\n name\n namespace\n __typename\n }\n usage {\n totalCost\n totalTokens\n __typename\n }\n workbenchJob {\n id\n workbench {\n id\n name\n __typename\n }\n __typename\n }\n upload {\n id\n session\n patch\n __typename\n }\n todos {\n ...AgentTodo\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment AgentTodo on AgentTodo {\n title\n description\n done\n __typename\n}" }, "sha256:84e024a73a5d1c07d1ce00b74b6addad8b4d6eb7a1d9daaa5afbe57abd3f5f9a": { "type": "subscription", diff --git a/assets/src/graph/workbench.graphql b/assets/src/graph/workbench.graphql index d643f94857..e76123dece 100644 --- a/assets/src/graph/workbench.graphql +++ b/assets/src/graph/workbench.graphql @@ -442,7 +442,6 @@ fragment WorkbenchJobActivityResult on WorkbenchJobActivityResult { handle method path - body queryParams contentType } @@ -1337,7 +1336,6 @@ fragment WorkbenchJobAction on WorkbenchJobActivity { handle method path - body queryParams contentType } diff --git a/lib/console/deployments/workbenches.ex b/lib/console/deployments/workbenches.ex index 7bfadc8bea..d13270943f 100644 --- a/lib/console/deployments/workbenches.ex +++ b/lib/console/deployments/workbenches.ex @@ -832,13 +832,16 @@ defmodule Console.Deployments.Workbenches do end @doc """ - Approves and calls a workbench function call encapsulated in the current activity + Approves and calls a workbench function call encapsulated in the current activity. + + Locks the activity row for update so concurrent approvals cannot both invoke the + underlying external action before the status transitions away from needs_approval. """ @spec approve_job_activity(binary, User.t()) :: activity_resp def approve_job_activity(activity_id, %User{} = user) when is_binary(activity_id) do start_transaction() |> add_operation(:activity, fn _ -> - get_workbench_job_activity!(activity_id) + lock_job_activity!(activity_id) |> allow(user, :approve) end) |> add_operation(:exec, fn @@ -849,7 +852,7 @@ defmodule Console.Deployments.Workbenches do {:ok, output} -> output {:error, err} -> "Internal function calling error: #{inspect(err)}" end - |> then(&WorkbenchJobActivity.changeset(activity, %{status: :successful, result: %{output: &1}})) + |> then(&WorkbenchJobActivity.changeset(activity, %{status: :successful, user_id: user.id, result: %{output: &1}})) |> Repo.update() %{activity: %WorkbenchJobActivity{type: :kubernetes, result: %{kube_request: %KubeRequest{} = request}} = activity} -> KubeRequest.invoke(request, user) @@ -859,7 +862,7 @@ defmodule Console.Deployments.Workbenches do {:error, {:http_error, _, err}} -> "K8s request failed: #{inspect(err)}" {:error, err} -> "Internal kubernetes request error: #{inspect(err)}" end - |> then(&WorkbenchJobActivity.changeset(activity, %{status: :successful, result: %{output: &1}})) + |> then(&WorkbenchJobActivity.changeset(activity, %{status: :successful, user_id: user.id, result: %{output: &1}})) |> Repo.update() _ -> {:error, "activity does not support function calling"} end) @@ -872,19 +875,26 @@ defmodule Console.Deployments.Workbenches do """ @spec reject_job_activity(binary | nil, binary, User.t()) :: activity_resp def reject_job_activity(reason \\ nil, activity_id, %User{} = user) when is_binary(activity_id) do - get_workbench_job_activity!(activity_id) - |> allow(user, :approve) - |> when_ok(fn activity -> + start_transaction() + |> add_operation(:activity, fn _ -> + lock_job_activity!(activity_id) + |> allow(user, :approve) + end) + |> add_operation(:reject, fn %{activity: activity} -> WorkbenchJobActivity.changeset(activity, %{ status: :rejected, user_id: user.id, result: %{output: reason || "Execution rejected by user"} }) + |> Repo.update() end) - |> when_ok(:update) + |> execute(extract: :reject) |> notify(:update) end + defp lock_job_activity!(id), + do: Repo.get!(WorkbenchJobActivity.with_lock(), id) + @doc """ Associates an agent run with a workbench activity: inserts the join row (idempotent) and sets `agent_run_id` and `status: :running` on the activity. diff --git a/lib/console/graphql/deployments/workbench.ex b/lib/console/graphql/deployments/workbench.ex index c3e365486b..e2647e70f2 100644 --- a/lib/console/graphql/deployments/workbench.ex +++ b/lib/console/graphql/deployments/workbench.ex @@ -679,7 +679,9 @@ defmodule Console.GraphQl.Deployments.Workbench do field :handle, :string, description: "the target cluster handle" field :method, :string, description: "the Kubernetes API HTTP method" field :path, :string, description: "the Kubernetes API request path" - field :body, :string, description: "the Kubernetes API request body" + field :body, :string, + resolve: &Deployments.kube_request_body/3, + description: "the Kubernetes API request body (Secret payloads are redacted)" field :query_params, :map, description: "query parameters sent with the Kubernetes API request" field :content_type, :string, description: "the Kubernetes API request content type" diff --git a/lib/console/graphql/resolvers/deployments/workbench.ex b/lib/console/graphql/resolvers/deployments/workbench.ex index 25c1394b79..ec14f3f6a9 100644 --- a/lib/console/graphql/resolvers/deployments/workbench.ex +++ b/lib/console/graphql/resolvers/deployments/workbench.ex @@ -155,6 +155,15 @@ defmodule Console.GraphQl.Resolvers.Deployments.Workbench do do: {:ok, Workbenches.get_workbench_tool(id)} def function_call_tool(_, _, _), do: {:ok, nil} + def kube_request_body(%{path: path, body: body}, _, _) do + cond do + secret_path?(path) -> {:ok, nil} + secret_body?(body) -> {:ok, nil} + true -> {:ok, body} + end + end + def kube_request_body(_, _, _), do: {:ok, nil} + def kube_request_current(%{handle: handle, path: path}, _, %{context: %{current_user: user}}) when is_binary(handle) and is_binary(path) do cond do @@ -175,6 +184,15 @@ defmodule Console.GraphQl.Resolvers.Deployments.Workbench do do: String.contains?(path, "/secrets/") or String.ends_with?(path, "/secrets") defp secret_path?(_), do: false + defp secret_body?(body) when is_binary(body) do + case Jason.decode(body) do + {:ok, %{"kind" => kind}} when kind in ["Secret", "SecretList"] -> true + {:ok, %{"items" => [%{"kind" => "Secret"} | _]}} -> true + _ -> false + end + end + defp secret_body?(_), do: false + defp sanitize_kube_resource(res) when is_map(res) do res |> stringify_keys() diff --git a/schema/schema.graphql b/schema/schema.graphql index 0d3b2dff27..62e5b9d20e 100644 --- a/schema/schema.graphql +++ b/schema/schema.graphql @@ -3957,7 +3957,7 @@ type WorkbenchJobActivityKubeRequest { "the Kubernetes API request path" path: String - "the Kubernetes API request body" + "the Kubernetes API request body (Secret payloads are redacted)" body: String "query parameters sent with the Kubernetes API request" diff --git a/test/console/deployments/workbenches_test.exs b/test/console/deployments/workbenches_test.exs index babcb3da13..8096163ad2 100644 --- a/test/console/deployments/workbenches_test.exs +++ b/test/console/deployments/workbenches_test.exs @@ -5,7 +5,7 @@ defmodule Console.Deployments.WorkbenchesTest do alias Console.AI.Tools.Workbench.KubeRequest alias Console.PubSub alias Console.Deployments.Workbenches - alias Console.Schema.WorkbenchJob + alias Console.Schema.{WorkbenchJob, WorkbenchJobActivity} alias CloudQuery.Client alias Toolquery.{InvokeLambdaInput, InvokeLambdaOutput, ToolQuery.Stub} @@ -1340,6 +1340,51 @@ defmodule Console.Deployments.WorkbenchesTest do assert reloaded.result.output == "already complete" end + test "concurrent approvals only invoke the external action once" do + user = insert(:user) + project = insert(:project, read_bindings: [%{user_id: user.id}]) + workbench = insert(:workbench, project: project) + job = insert(:workbench_job, workbench: workbench, status: :running) + cluster = insert(:cluster, handle: "concurrent-approval-cluster") + parent = self() + + activity = + insert(:workbench_job_activity, + workbench_job: job, + type: :kubernetes, + status: :needs_approval, + prompt: "approve the kubernetes request", + result: %{ + output: "request pending user approval", + kube_request: %{ + handle: cluster.handle, + method: "delete", + path: "/apis/apps/v1/namespaces/default/deployments/api", + content_type: "application/json" + } + } + ) + + expect(Kazan, :run, fn %Kazan.Request{}, _opts -> + send(parent, :kube_invoked) + Process.sleep(150) + {:ok, %{"kind" => "Status", "status" => "Success"}} + end) + + task1 = Task.async(fn -> Workbenches.approve_job_activity(activity.id, user) end) + task2 = Task.async(fn -> Workbenches.approve_job_activity(activity.id, user) end) + results = [Task.await(task1), Task.await(task2)] + + assert Enum.count(results, &match?({:ok, %WorkbenchJobActivity{}}, &1)) == 1 + assert Enum.count(results, &match?({:error, _}, &1)) == 1 + assert_receive :kube_invoked + refute_receive :kube_invoked, 50 + + reloaded = refetch(activity) + assert reloaded.status == :successful + assert Jason.decode!(reloaded.result.output) == %{"kind" => "Status", "status" => "Success"} + end + test "does not invoke grpc for a non-function activity even with function call metadata" do user = insert(:user) project = insert(:project, read_bindings: [%{user_id: user.id}]) diff --git a/test/console/graphql/queries/deployments/workbench_queries_test.exs b/test/console/graphql/queries/deployments/workbench_queries_test.exs index 6f71bedfe2..2ba3c6646b 100644 --- a/test/console/graphql/queries/deployments/workbench_queries_test.exs +++ b/test/console/graphql/queries/deployments/workbench_queries_test.exs @@ -1224,6 +1224,91 @@ defmodule Console.GraphQl.Deployments.WorkbenchQueriesTest do assert found["result"]["jobUpdate"]["conclusion"] == "ok" end + test "it redacts Secret kube request bodies from workbench readers" do + job = insert(:workbench_job) + secret_body = + Jason.encode!(%{ + "apiVersion" => "v1", + "kind" => "Secret", + "metadata" => %{"name" => "db", "namespace" => "default"}, + "data" => %{"password" => "c2VjcmV0"} + }) + + activity = + insert(:workbench_job_activity, + workbench_job: job, + type: :kubernetes, + result: %{ + output: "pending approval", + kube_request: %{ + handle: "prod-cluster", + method: "PUT", + path: "/api/v1/namespaces/default/secrets/db", + body: secret_body, + content_type: "application/json" + } + } + ) + + {:ok, %{data: %{"workbenchJobActivity" => found}}} = run_query(""" + query WorkbenchJobActivity($id: ID!) { + workbenchJobActivity(id: $id) { + id + result { + kubeRequest { + path + body + } + } + } + } + """, %{"id" => activity.id}, %{current_user: admin_user()}) + + assert found["result"]["kubeRequest"]["path"] == "/api/v1/namespaces/default/secrets/db" + assert found["result"]["kubeRequest"]["body"] == nil + end + + test "it redacts Secret bodies based on kind even when the path is not a secrets endpoint" do + job = insert(:workbench_job) + secret_body = + Jason.encode!(%{ + "apiVersion" => "v1", + "kind" => "Secret", + "metadata" => %{"name" => "db"}, + "stringData" => %{"token" => "super-secret"} + }) + + activity = + insert(:workbench_job_activity, + workbench_job: job, + type: :kubernetes, + result: %{ + output: "pending approval", + kube_request: %{ + handle: "prod-cluster", + method: "POST", + path: "/api/v1/namespaces/default/configmaps", + body: secret_body, + content_type: "application/json" + } + } + ) + + {:ok, %{data: %{"workbenchJobActivity" => found}}} = run_query(""" + query WorkbenchJobActivity($id: ID!) { + workbenchJobActivity(id: $id) { + result { + kubeRequest { + body + } + } + } + } + """, %{"id" => activity.id}, %{current_user: admin_user()}) + + assert found["result"]["kubeRequest"]["body"] == nil + end + end describe "workbench_tools" do From 3b96441c7a3d91adcac713ec17743146960b7571 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Tue, 28 Jul 2026 16:58:05 +0200 Subject: [PATCH 47/50] regenrate schema --- assets/src/generated/graphql.ts | 4 ++-- schema/schema.graphql | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/assets/src/generated/graphql.ts b/assets/src/generated/graphql.ts index 000aebbcf1..262da65dbf 100644 --- a/assets/src/generated/graphql.ts +++ b/assets/src/generated/graphql.ts @@ -16052,7 +16052,7 @@ export type WorkbenchJobActivity = { /** the type of the activity */ type?: Maybe; updatedAt?: Maybe; - /** the user who created this activity */ + /** the user who created or denied this activity */ user?: Maybe; /** whimsically describes current progress for you */ whimsey?: Maybe; @@ -16102,7 +16102,7 @@ export type WorkbenchJobActivityJobUpdate = { export type WorkbenchJobActivityKubeRequest = { __typename?: 'WorkbenchJobActivityKubeRequest'; - /** the Kubernetes API request body */ + /** the Kubernetes API request body (Secret payloads are redacted) */ body?: Maybe; /** the Kubernetes API request content type */ contentType?: Maybe; diff --git a/schema/schema.graphql b/schema/schema.graphql index 62e5b9d20e..375eb40fb6 100644 --- a/schema/schema.graphql +++ b/schema/schema.graphql @@ -3688,8 +3688,11 @@ type WorkbenchJob { activities( after: String + first: Int + before: String + last: Int "filter activities by status" @@ -3843,7 +3846,7 @@ type WorkbenchJobActivity { "all agent runs associated with this activity (sideloadable)" agentRuns: [AgentRun] - "the user who created this activity" + "the user who created or denied this activity" user: User insertedAt: DateTime From 12e13e28ef0f332634c4931320e9d8148218c4e3 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Tue, 28 Jul 2026 17:00:44 +0200 Subject: [PATCH 48/50] fix build --- .../workbenches/workbench/job/workbenchJobActionsUtils.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/assets/src/components/workbenches/workbench/job/workbenchJobActionsUtils.tsx b/assets/src/components/workbenches/workbench/job/workbenchJobActionsUtils.tsx index 874f603414..6546804865 100644 --- a/assets/src/components/workbenches/workbench/job/workbenchJobActionsUtils.tsx +++ b/assets/src/components/workbenches/workbench/job/workbenchJobActionsUtils.tsx @@ -300,7 +300,6 @@ export function getActionInputJson( handle: kube.handle, method: kube.method, path: kube.path, - body: kube.body, queryParams: kube.queryParams, contentType: kube.contentType, }) From 964a4d0149a2affda6096cc49566b8d2feddc86b Mon Sep 17 00:00:00 2001 From: michaeljguarino Date: Tue, 28 Jul 2026 13:55:37 -0400 Subject: [PATCH 49/50] elixir cleanup --- lib/console/graphql/deployments/workbench.ex | 6 +- .../resolvers/deployments/workbench.ex | 64 ++------------ lib/kube/utils.ex | 23 +++++ .../deployments/workbench_queries_test.exs | 85 ------------------- 4 files changed, 30 insertions(+), 148 deletions(-) diff --git a/lib/console/graphql/deployments/workbench.ex b/lib/console/graphql/deployments/workbench.ex index e2647e70f2..2f56acfed9 100644 --- a/lib/console/graphql/deployments/workbench.ex +++ b/lib/console/graphql/deployments/workbench.ex @@ -679,10 +679,8 @@ defmodule Console.GraphQl.Deployments.Workbench do field :handle, :string, description: "the target cluster handle" field :method, :string, description: "the Kubernetes API HTTP method" field :path, :string, description: "the Kubernetes API request path" - field :body, :string, - resolve: &Deployments.kube_request_body/3, - description: "the Kubernetes API request body (Secret payloads are redacted)" - field :query_params, :map, description: "query parameters sent with the Kubernetes API request" + field :body, :string, description: "the Kubernetes API request body" + field :query_params, :map, description: "query parameters sent with the Kubernetes API request" field :content_type, :string, description: "the Kubernetes API request content type" @desc "the live kubernetes object at this path, used to render update diffs. expensive and should be requested only when reviewing an action" diff --git a/lib/console/graphql/resolvers/deployments/workbench.ex b/lib/console/graphql/resolvers/deployments/workbench.ex index ec14f3f6a9..9799557f33 100644 --- a/lib/console/graphql/resolvers/deployments/workbench.ex +++ b/lib/console/graphql/resolvers/deployments/workbench.ex @@ -155,71 +155,17 @@ defmodule Console.GraphQl.Resolvers.Deployments.Workbench do do: {:ok, Workbenches.get_workbench_tool(id)} def function_call_tool(_, _, _), do: {:ok, nil} - def kube_request_body(%{path: path, body: body}, _, _) do - cond do - secret_path?(path) -> {:ok, nil} - secret_body?(body) -> {:ok, nil} - true -> {:ok, body} - end - end - def kube_request_body(_, _, _), do: {:ok, nil} - def kube_request_current(%{handle: handle, path: path}, _, %{context: %{current_user: user}}) when is_binary(handle) and is_binary(path) do - cond do - secret_path?(path) -> - {:ok, nil} - true -> - with %Cluster{} = cluster <- Clusters.get_cluster_by_handle(handle), - {:ok, res} <- KubeGet.kube_request(cluster, user, path) do - {:ok, sanitize_kube_resource(res)} - else - _ -> {:ok, nil} - end + with %Cluster{} = cluster <- Clusters.get_cluster_by_handle(handle), + {:ok, res} <- KubeGet.kube_request(cluster, user, path) do + {:ok, Kube.Utils.sanitize_kube_resource(res)} + else + _ -> {:ok, nil} end end def kube_request_current(_, _, _), do: {:ok, nil} - defp secret_path?(path) when is_binary(path), - do: String.contains?(path, "/secrets/") or String.ends_with?(path, "/secrets") - defp secret_path?(_), do: false - - defp secret_body?(body) when is_binary(body) do - case Jason.decode(body) do - {:ok, %{"kind" => kind}} when kind in ["Secret", "SecretList"] -> true - {:ok, %{"items" => [%{"kind" => "Secret"} | _]}} -> true - _ -> false - end - end - defp secret_body?(_), do: false - - defp sanitize_kube_resource(res) when is_map(res) do - res - |> stringify_keys() - |> Map.drop(["status"]) - |> then(fn - %{"metadata" => meta} = map when is_map(meta) -> - Map.put(map, "metadata", Map.drop(meta, [ - "managedFields", - "resourceVersion", - "uid", - "generation", - "creationTimestamp" - ])) - map -> map - end) - end - defp sanitize_kube_resource(res), do: res - - defp stringify_keys(map) when is_map(map) do - Map.new(map, fn - {k, v} when is_atom(k) -> {Atom.to_string(k), stringify_keys(v)} - {k, v} -> {k, stringify_keys(v)} - end) - end - defp stringify_keys(list) when is_list(list), do: Enum.map(list, &stringify_keys/1) - defp stringify_keys(other), do: other - def all_workbench_alerts(args, %{context: %{current_user: user}}) do Alert.for_user(user) |> Alert.ordered() diff --git a/lib/kube/utils.ex b/lib/kube/utils.ex index fc45868af4..a93d91a421 100644 --- a/lib/kube/utils.ex +++ b/lib/kube/utils.ex @@ -21,6 +21,29 @@ defmodule Kube.Utils do end def raw_meta(_), do: nil + def sanitize_kube_resource(res) when is_map(res) do + res + |> Console.string_map() + |> Map.drop(["status"]) + |> then(fn + %{"metadata" => meta} = map when is_map(meta) -> + Map.put( + map, + "metadata", + Map.drop(meta, [ + "managedFields", + "resourceVersion", + "uid", + "generation", + "creationTimestamp" + ]) + ) + + map -> map + end) + end + def sanitize_kube_resource(res), do: res + def ns(%{"metadata" => meta}), do: meta["namespace"] def ns(%{metadata: %MetaV1.ObjectMeta{namespace: ns}}), do: ns def ns(%{namespace: ns}), do: ns diff --git a/test/console/graphql/queries/deployments/workbench_queries_test.exs b/test/console/graphql/queries/deployments/workbench_queries_test.exs index 2ba3c6646b..6f71bedfe2 100644 --- a/test/console/graphql/queries/deployments/workbench_queries_test.exs +++ b/test/console/graphql/queries/deployments/workbench_queries_test.exs @@ -1224,91 +1224,6 @@ defmodule Console.GraphQl.Deployments.WorkbenchQueriesTest do assert found["result"]["jobUpdate"]["conclusion"] == "ok" end - test "it redacts Secret kube request bodies from workbench readers" do - job = insert(:workbench_job) - secret_body = - Jason.encode!(%{ - "apiVersion" => "v1", - "kind" => "Secret", - "metadata" => %{"name" => "db", "namespace" => "default"}, - "data" => %{"password" => "c2VjcmV0"} - }) - - activity = - insert(:workbench_job_activity, - workbench_job: job, - type: :kubernetes, - result: %{ - output: "pending approval", - kube_request: %{ - handle: "prod-cluster", - method: "PUT", - path: "/api/v1/namespaces/default/secrets/db", - body: secret_body, - content_type: "application/json" - } - } - ) - - {:ok, %{data: %{"workbenchJobActivity" => found}}} = run_query(""" - query WorkbenchJobActivity($id: ID!) { - workbenchJobActivity(id: $id) { - id - result { - kubeRequest { - path - body - } - } - } - } - """, %{"id" => activity.id}, %{current_user: admin_user()}) - - assert found["result"]["kubeRequest"]["path"] == "/api/v1/namespaces/default/secrets/db" - assert found["result"]["kubeRequest"]["body"] == nil - end - - test "it redacts Secret bodies based on kind even when the path is not a secrets endpoint" do - job = insert(:workbench_job) - secret_body = - Jason.encode!(%{ - "apiVersion" => "v1", - "kind" => "Secret", - "metadata" => %{"name" => "db"}, - "stringData" => %{"token" => "super-secret"} - }) - - activity = - insert(:workbench_job_activity, - workbench_job: job, - type: :kubernetes, - result: %{ - output: "pending approval", - kube_request: %{ - handle: "prod-cluster", - method: "POST", - path: "/api/v1/namespaces/default/configmaps", - body: secret_body, - content_type: "application/json" - } - } - ) - - {:ok, %{data: %{"workbenchJobActivity" => found}}} = run_query(""" - query WorkbenchJobActivity($id: ID!) { - workbenchJobActivity(id: $id) { - result { - kubeRequest { - body - } - } - } - } - """, %{"id" => activity.id}, %{current_user: admin_user()}) - - assert found["result"]["kubeRequest"]["body"] == nil - end - end describe "workbench_tools" do From 4f64e7e19f73db2befaea62da0dc201c5c3d0117 Mon Sep 17 00:00:00 2001 From: michaeljguarino Date: Tue, 28 Jul 2026 14:08:13 -0400 Subject: [PATCH 50/50] cleanup elixir changes --- lib/console/deployments/agents.ex | 3 +- lib/console/graphql/deployments/workbench.ex | 4 ++- .../resolvers/deployments/workbench.ex | 20 ++++++++++- lib/kube/utils.ex | 16 ++++++++- test/kube/utils_test.exs | 33 +++++++++++++++++++ 5 files changed, 71 insertions(+), 5 deletions(-) create mode 100644 test/kube/utils_test.exs diff --git a/lib/console/deployments/agents.ex b/lib/console/deployments/agents.ex index 34b641a865..c107841e1a 100644 --- a/lib/console/deployments/agents.ex +++ b/lib/console/deployments/agents.ex @@ -83,9 +83,8 @@ defmodule Console.Deployments.Agents do def upsert_agent_runtime(attrs, %Cluster{} = cluster), do: upsert_agent_runtime(attrs, cluster, cluster) - @spec upsert_agent_runtime(map, Cluster.t | nil, User.t | Cluster.t | nil) :: agent_runtime_resp - def upsert_agent_runtime(%{name: name} = attrs, %Cluster{id: cid} = cluster, actor) do + def upsert_agent_runtime(%{name: name} = attrs, %Cluster{id: cid}, actor) do runtime = get_agent_runtime(cid, name) |> Repo.preload([:create_bindings]) with {:ok, _} <- allow(runtime || %AgentRuntime{cluster_id: cid}, actor, :write), diff --git a/lib/console/graphql/deployments/workbench.ex b/lib/console/graphql/deployments/workbench.ex index 2f56acfed9..2d001a6051 100644 --- a/lib/console/graphql/deployments/workbench.ex +++ b/lib/console/graphql/deployments/workbench.ex @@ -679,7 +679,9 @@ defmodule Console.GraphQl.Deployments.Workbench do field :handle, :string, description: "the target cluster handle" field :method, :string, description: "the Kubernetes API HTTP method" field :path, :string, description: "the Kubernetes API request path" - field :body, :string, description: "the Kubernetes API request body" + field :body, :string, + description: "the Kubernetes API request body", + resolve: &Deployments.kube_request_body/3 field :query_params, :map, description: "query parameters sent with the Kubernetes API request" field :content_type, :string, description: "the Kubernetes API request content type" diff --git a/lib/console/graphql/resolvers/deployments/workbench.ex b/lib/console/graphql/resolvers/deployments/workbench.ex index 9799557f33..9d3f04104d 100644 --- a/lib/console/graphql/resolvers/deployments/workbench.ex +++ b/lib/console/graphql/resolvers/deployments/workbench.ex @@ -1,6 +1,7 @@ defmodule Console.GraphQl.Resolvers.Deployments.Workbench do use Console.GraphQl.Resolvers.Deployments.Base alias Console.Repo + alias Kube.Utils, as: KUtils alias Console.Deployments.{Clusters, Workbenches} alias Console.AI.Workbench.{Toolchain, Skills} alias Console.AI.Tools.Workbench.Infrastructure.KubeGet @@ -155,11 +156,28 @@ defmodule Console.GraphQl.Resolvers.Deployments.Workbench do do: {:ok, Workbenches.get_workbench_tool(id)} def function_call_tool(_, _, _), do: {:ok, nil} + def kube_request_body(%{body: body}, _, _) when is_binary(body) do + case Jason.decode(body) do + {:ok, %{} = body} -> kube_request_body(body) + _ -> {:ok, body} + end + end + def kube_request_body(%{body: %{} = b}, _, _), do: kube_request_body(b) + def kube_request_body(_, _, _), do: {:ok, nil} + + defp kube_request_body(body) do + KUtils.redact_secret(body) + |> KUtils.sanitize_kube_resource() + |> Jason.encode() + end + def kube_request_current(%{handle: handle, path: path}, _, %{context: %{current_user: user}}) when is_binary(handle) and is_binary(path) do with %Cluster{} = cluster <- Clusters.get_cluster_by_handle(handle), {:ok, res} <- KubeGet.kube_request(cluster, user, path) do - {:ok, Kube.Utils.sanitize_kube_resource(res)} + KUtils.sanitize_kube_resource(res) + |> KUtils.redact_secret() + |> ok() else _ -> {:ok, nil} end diff --git a/lib/kube/utils.ex b/lib/kube/utils.ex index a93d91a421..1b3e079c58 100644 --- a/lib/kube/utils.ex +++ b/lib/kube/utils.ex @@ -24,7 +24,6 @@ defmodule Kube.Utils do def sanitize_kube_resource(res) when is_map(res) do res |> Console.string_map() - |> Map.drop(["status"]) |> then(fn %{"metadata" => meta} = map when is_map(meta) -> Map.put( @@ -44,6 +43,21 @@ defmodule Kube.Utils do end def sanitize_kube_resource(res), do: res + def redact_secret(%{"kind" => "Secret"} = res) do + Enum.reduce(["data", "stringData"], res, fn field, acc -> + case Map.fetch(acc, field) do + {:ok, data} -> Map.put(acc, field, redact_secret_data(data)) + :error -> acc + end + end) + end + def redact_secret(res), do: res + + defp redact_secret_data(data) when is_map(data), + do: Map.new(data, fn {k, _} -> {k, "*****"} end) + + defp redact_secret_data(data), do: data + def ns(%{"metadata" => meta}), do: meta["namespace"] def ns(%{metadata: %MetaV1.ObjectMeta{namespace: ns}}), do: ns def ns(%{namespace: ns}), do: ns diff --git a/test/kube/utils_test.exs b/test/kube/utils_test.exs new file mode 100644 index 0000000000..5ba0fdbdf8 --- /dev/null +++ b/test/kube/utils_test.exs @@ -0,0 +1,33 @@ +defmodule Kube.UtilsTest do + use ExUnit.Case, async: true + + describe "redact_secret/1" do + test "stars out secret data fields" do + secret = %{ + "apiVersion" => "v1", + "kind" => "Secret", + "metadata" => %{"name" => "db"}, + "data" => %{"password" => "c2VjcmV0", "username" => "YWRtaW4="}, + "stringData" => %{"token" => "super-secret"} + } + + assert Kube.Utils.redact_secret(secret) == %{ + "apiVersion" => "v1", + "kind" => "Secret", + "metadata" => %{"name" => "db"}, + "data" => %{"password" => "*****", "username" => "*****"}, + "stringData" => %{"token" => "*****"} + } + end + + test "leaves non-secret resources unchanged" do + config_map = %{ + "apiVersion" => "v1", + "kind" => "ConfigMap", + "data" => %{"name" => "value"} + } + + assert Kube.Utils.redact_secret(config_map) == config_map + end + end +end