diff --git a/ee/tabby-ui/app/(dashboard)/page.tsx b/ee/tabby-ui/app/(dashboard)/page.tsx index 78079f9..d4c2da7 100644 --- a/ee/tabby-ui/app/(dashboard)/page.tsx +++ b/ee/tabby-ui/app/(dashboard)/page.tsx @@ -16,6 +16,9 @@ import { PropsWithChildren, useEffect, useState } from 'react' import WorkerCard from './components/worker-card' import { useWorkers } from '@/lib/hooks/use-workers' import { WorkerKind } from '@/lib/gql/generates/graphql' +import { useGraphQL } from '@/lib/hooks/use-graphql' +import { getRegistrationTokenDocument } from '@/lib/gql/request-documents' +import { CopyButton } from '@/components/copy-button' const COMMUNITY_DIALOG_SHOWN_KEY = 'community-dialog-shown' @@ -75,6 +78,9 @@ function toBadgeString(str: string) { function MainPanel() { const { data: healthInfo } = useHealth() const workers = useWorkers(healthInfo) + const { data: registrationTokenRes } = useGraphQL( + getRegistrationTokenDocument + ) if (!healthInfo) return @@ -100,6 +106,16 @@ function MainPanel() {
Workers + + {!!registrationTokenRes?.registrationToken && ( +
+ Registeration token: + {registrationTokenRes.registrationToken} + + +
+ )} +
{!!workers?.[WorkerKind.Completion] && ( <> diff --git a/ee/tabby-ui/app/playground/components/clear-chats-button.tsx b/ee/tabby-ui/app/playground/components/clear-chats-button.tsx index 606804a..0dbd856 100644 --- a/ee/tabby-ui/app/playground/components/clear-chats-button.tsx +++ b/ee/tabby-ui/app/playground/components/clear-chats-button.tsx @@ -1,3 +1,5 @@ +'use client' + import React from 'react' import { Button, ButtonProps } from '@/components/ui/button' import { IconCheck, IconTrash } from '@/components/ui/icons' diff --git a/ee/tabby-ui/components/chat-message-actions.tsx b/ee/tabby-ui/components/chat-message-actions.tsx index 8e345a8..92966a8 100644 --- a/ee/tabby-ui/components/chat-message-actions.tsx +++ b/ee/tabby-ui/components/chat-message-actions.tsx @@ -3,16 +3,10 @@ import { type Message } from 'ai' import { Button } from '@/components/ui/button' -import { - IconCheck, - IconCopy, - IconEdit, - IconRefresh, - IconTrash -} from '@/components/ui/icons' -import { useCopyToClipboard } from '@/lib/hooks/use-copy-to-clipboard' +import { IconEdit, IconRefresh, IconTrash } from '@/components/ui/icons' import { cn } from '@/lib/utils' import { MessageActionType } from '@/lib/types' +import { CopyButton } from '@/components/copy-button' interface ChatMessageActionsProps extends React.ComponentProps<'div'> { message: Message @@ -25,13 +19,6 @@ export function ChatMessageActions({ handleMessageAction, ...props }: ChatMessageActionsProps) { - const { isCopied, copyToClipboard } = useCopyToClipboard({ timeout: 2000 }) - - const onCopy = () => { - if (isCopied) return - copyToClipboard(message.content) - } - return (
Delete message - +
) } diff --git a/ee/tabby-ui/components/copy-button.tsx b/ee/tabby-ui/components/copy-button.tsx new file mode 100644 index 0000000..de5282c --- /dev/null +++ b/ee/tabby-ui/components/copy-button.tsx @@ -0,0 +1,35 @@ +'use client' + +import * as React from 'react' + +import { Button, type ButtonProps } from '@/components/ui/button' +import { IconCheck, IconCopy } from './ui/icons' +import { useCopyToClipboard } from '@/lib/hooks/use-copy-to-clipboard' + +interface CopyButtonProps extends ButtonProps { + value: string +} + +export function CopyButton({ className, value, ...props }: CopyButtonProps) { + const { isCopied, copyToClipboard } = useCopyToClipboard({ timeout: 2000 }) + + const onCopy = () => { + if (isCopied) return + copyToClipboard(value) + } + + if (!value) return null + + return ( + + ) +} diff --git a/ee/tabby-ui/lib/gql/generates/gql.ts b/ee/tabby-ui/lib/gql/generates/gql.ts index f682146..0af4c32 100644 --- a/ee/tabby-ui/lib/gql/generates/gql.ts +++ b/ee/tabby-ui/lib/gql/generates/gql.ts @@ -14,7 +14,9 @@ import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/ */ const documents = { '\n query GetWorkers {\n workers {\n kind\n name\n addr\n device\n arch\n cpuInfo\n cpuCount\n cudaDevices\n }\n }\n': - types.GetWorkersDocument + types.GetWorkersDocument, + '\n query GetRegistrationToken {\n registrationToken\n }\n': + types.GetRegistrationTokenDocument } /** @@ -37,6 +39,12 @@ export function graphql(source: string): unknown export function graphql( source: '\n query GetWorkers {\n workers {\n kind\n name\n addr\n device\n arch\n cpuInfo\n cpuCount\n cudaDevices\n }\n }\n' ): (typeof documents)['\n query GetWorkers {\n workers {\n kind\n name\n addr\n device\n arch\n cpuInfo\n cpuCount\n cudaDevices\n }\n }\n'] +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql( + source: '\n query GetRegistrationToken {\n registrationToken\n }\n' +): (typeof documents)['\n query GetRegistrationToken {\n registrationToken\n }\n'] export function graphql(source: string) { return (documents as any)[source] ?? {} diff --git a/ee/tabby-ui/lib/gql/generates/graphql.ts b/ee/tabby-ui/lib/gql/generates/graphql.ts index f89fcaf..adadd03 100644 --- a/ee/tabby-ui/lib/gql/generates/graphql.ts +++ b/ee/tabby-ui/lib/gql/generates/graphql.ts @@ -74,6 +74,13 @@ export type GetWorkersQuery = { }> } +export type GetRegistrationTokenQueryVariables = Exact<{ [key: string]: never }> + +export type GetRegistrationTokenQuery = { + __typename?: 'Query' + registrationToken: string +} + export const GetWorkersDocument = { kind: 'Document', definitions: [ @@ -106,3 +113,22 @@ export const GetWorkersDocument = { } ] } as unknown as DocumentNode +export const GetRegistrationTokenDocument = { + kind: 'Document', + definitions: [ + { + kind: 'OperationDefinition', + operation: 'query', + name: { kind: 'Name', value: 'GetRegistrationToken' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { kind: 'Field', name: { kind: 'Name', value: 'registrationToken' } } + ] + } + } + ] +} as unknown as DocumentNode< + GetRegistrationTokenQuery, + GetRegistrationTokenQueryVariables +> diff --git a/ee/tabby-ui/lib/gql/request-documents.tsx b/ee/tabby-ui/lib/gql/request-documents.tsx index cdd7344..3c3df64 100644 --- a/ee/tabby-ui/lib/gql/request-documents.tsx +++ b/ee/tabby-ui/lib/gql/request-documents.tsx @@ -14,3 +14,9 @@ export const getAllWorkersDocument = graphql(/* GraphQL */ ` } } `) + +export const getRegistrationTokenDocument = graphql(/* GraphQL */ ` + query GetRegistrationToken { + registrationToken + } +`)