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
+ }
+`)