@red-hat-developer-hub/backstage-plugin-lightspeed 2.7.1 → 2.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/config.d.ts +30 -0
- package/dist/alpha.d.ts +4 -0
- package/dist/api/LightspeedApiClient.esm.js +11 -0
- package/dist/api/LightspeedApiClient.esm.js.map +1 -1
- package/dist/api/api.esm.js.map +1 -1
- package/dist/components/DeleteModal.esm.js +1 -1
- package/dist/components/DeleteModal.esm.js.map +1 -1
- package/dist/components/LightSpeedChat.esm.js +101 -51
- package/dist/components/LightSpeedChat.esm.js.map +1 -1
- package/dist/components/LightspeedChatBoxHeader.esm.js +1 -0
- package/dist/components/LightspeedChatBoxHeader.esm.js.map +1 -1
- package/dist/components/McpServersSettings.esm.js +3 -4
- package/dist/components/McpServersSettings.esm.js.map +1 -1
- package/dist/components/RenameConversationModal.esm.js +1 -1
- package/dist/components/RenameConversationModal.esm.js.map +1 -1
- package/dist/components/Router.esm.js +8 -3
- package/dist/components/Router.esm.js.map +1 -1
- package/dist/components/notebooks/AddDocumentModal.esm.js +1 -1
- package/dist/components/notebooks/AddDocumentModal.esm.js.map +1 -1
- package/dist/components/notebooks/DeleteNotebookModal.esm.js +1 -1
- package/dist/components/notebooks/DeleteNotebookModal.esm.js.map +1 -1
- package/dist/components/notebooks/FileListItem.esm.js +1 -1
- package/dist/components/notebooks/FileListItem.esm.js.map +1 -1
- package/dist/components/notebooks/NotebookView.esm.js +84 -37
- package/dist/components/notebooks/NotebookView.esm.js.map +1 -1
- package/dist/components/notebooks/OverwriteConfirmModal.esm.js +1 -1
- package/dist/components/notebooks/OverwriteConfirmModal.esm.js.map +1 -1
- package/dist/components/notebooks/RenameNotebookModal.esm.js +1 -1
- package/dist/components/notebooks/RenameNotebookModal.esm.js.map +1 -1
- package/dist/const.esm.js +8 -9
- package/dist/const.esm.js.map +1 -1
- package/dist/hooks/useConversationMessages.esm.js +7 -3
- package/dist/hooks/useConversationMessages.esm.js.map +1 -1
- package/dist/hooks/useNotebookConversationIds.esm.js +19 -0
- package/dist/hooks/useNotebookConversationIds.esm.js.map +1 -0
- package/dist/hooks/useNotebookWelcomePrompts.esm.js +14 -0
- package/dist/hooks/useNotebookWelcomePrompts.esm.js.map +1 -0
- package/dist/translations/de.esm.js +5 -0
- package/dist/translations/de.esm.js.map +1 -1
- package/dist/translations/es.esm.js +5 -0
- package/dist/translations/es.esm.js.map +1 -1
- package/dist/translations/fr.esm.js +5 -0
- package/dist/translations/fr.esm.js.map +1 -1
- package/dist/translations/it.esm.js +5 -0
- package/dist/translations/it.esm.js.map +1 -1
- package/dist/translations/ja.esm.js +5 -0
- package/dist/translations/ja.esm.js.map +1 -1
- package/dist/translations/ref.esm.js +5 -0
- package/dist/translations/ref.esm.js.map +1 -1
- package/dist/types.esm.js.map +1 -1
- package/dist/utils/lightspeed-chatbox-utils.esm.js +55 -1
- package/dist/utils/lightspeed-chatbox-utils.esm.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useConversationMessages.esm.js","sources":["../../src/hooks/useConversationMessages.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { RefObject, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport { MessageProps } from '@patternfly/chatbot';\nimport { useQuery, type UseQueryResult } from '@tanstack/react-query';\n\nimport { lightspeedApiRef } from '../api/api';\nimport { ScrollContainerHandle } from '../components/LightspeedChatBox';\nimport { TEMP_CONVERSATION_ID } from '../const';\nimport botAvatar from '../images/bot-avatar.svg';\nimport userAvatar from '../images/user-avatar.svg';\nimport {\n Attachment,\n BaseMessage,\n LCSConversation,\n ReferencedDocument,\n ToolCall,\n} from '../types';\nimport {\n createBotMessage,\n createUserMessage,\n getConversationsData,\n getTimestamp,\n transformDocumentsToSources,\n} from '../utils/lightspeed-chatbox-utils';\nimport {\n clearSharedToolCallsCacheSessionPrefix,\n getSharedToolCallsCache,\n migrateSharedToolCallsCacheSessionPrefixToConversation,\n setSharedToolCallsCache,\n} from './toolCallsCacheStore';\nimport {\n CreateMessageVariables,\n useCreateConversationMessage,\n} from './useCreateCoversationMessage';\n\nconst toolCallIdKey = (id: string | number): string => {\n return String(id);\n};\n\nconst normalizeToolCalls = (\n calls: (ToolCall | undefined)[] | undefined,\n): ToolCall[] => (calls ?? []).filter((tc): tc is ToolCall => tc !== null);\n\nconst isMcpStyleToolCallPayload = (\n data: Record<string, any> | undefined,\n): boolean => {\n return (\n !!data &&\n typeof data.name === 'string' &&\n data.name.trim().length > 0 &&\n data.id !== null\n );\n};\n\n/** Legacy tool_result uses data.token with at least tool_name and response. */\nconst isLegacyToolResultToken = (\n token: unknown,\n): token is { tool_name: string; response?: unknown } => {\n return (\n !!token &&\n typeof token === 'object' &&\n !Array.isArray(token) &&\n typeof (token as { tool_name?: string }).tool_name === 'string' &&\n (token as { tool_name: string }).tool_name.length > 0\n );\n};\n\nlet tempToolCallsCachePrefixFallbackSeq = 0;\n\n/** Unique prefix per temp send so late streams cannot migrate another session's tool cache. */\nfunction createTempToolCallsCacheSessionPrefix(): string {\n const suffix =\n globalThis.crypto?.randomUUID?.() ??\n `${Date.now()}-${++tempToolCallsCachePrefixFallbackSeq}`;\n return `lightspeed-temp:${suffix}`;\n}\n\nconst legacyToolResultToString = (response: unknown): string => {\n if (!response) return '';\n if (typeof response === 'string') return response;\n try {\n return JSON.stringify(response);\n } catch {\n return String(response);\n }\n};\n\n// Fetch all conversation messages\nexport const useFetchConversationMessages = (\n currentConversation: string,\n): UseQueryResult<BaseMessage[] | undefined, Error> => {\n const lightspeedApi = useApi(lightspeedApiRef);\n return useQuery({\n queryKey: ['conversationMessages', currentConversation],\n queryFn: currentConversation\n ? async () => {\n const response =\n await lightspeedApi.getConversationMessages(currentConversation);\n\n return response;\n }\n : undefined,\n retry: false,\n });\n};\n\n// Extended message type to include tool calls\ninterface ExtendedMessageProps extends MessageProps {\n toolCalls?: ToolCall[];\n}\n\ntype Conversations = { [_key: string]: ExtendedMessageProps[] };\n\nexport type UseConversationMessagesReturn = {\n conversationMessages: ExtendedMessageProps[];\n handleInputPrompt: (\n prompt: string,\n attachments?: Attachment[],\n ) => Promise<void>;\n conversations: Conversations;\n scrollToBottomRef: RefObject<ScrollContainerHandle | null>;\n streamingConversationId: string | null;\n data?: BaseMessage[] | undefined;\n error: Error | null;\n isPending: boolean;\n isFetching: boolean;\n isSuccess: boolean;\n isError: boolean;\n status: 'pending' | 'error' | 'success';\n refetch: () => void;\n};\n\n/**\n * Fetches all the messages for given conversation_id\n * @param conversationId\n * @param userName\n * @param selectedModel\n * @param selectedProvider\n * @param avatar\n *\n */\nexport const useConversationMessages = (\n conversationId: string,\n userName: string | undefined,\n selectedModel: string,\n selectedProvider: string,\n avatar: string = userAvatar,\n onComplete?: (message: string) => void,\n onStart?: (conversation_id: string) => void,\n createMessageOverride?: (\n vars: CreateMessageVariables,\n ) => Promise<ReadableStreamDefaultReader<Uint8Array>>,\n onRequestIdReady?: (request_id: string) => void,\n): UseConversationMessagesReturn => {\n const { mutateAsync: defaultCreateMessage } = useCreateConversationMessage();\n const createMessage = createMessageOverride ?? defaultCreateMessage;\n const scrollToBottomRef = useRef<ScrollContainerHandle>(null);\n\n const [currentConversation, setCurrentConversation] =\n useState(conversationId);\n const [conversations, setConversations] = useState<Conversations>({\n [currentConversation]: [],\n });\n const streamingConversations = useRef<Conversations>({\n [currentConversation]: [],\n });\n\n /** True while a send on the provisional thread is still running (even if UI switched to another conv). */\n const isTempStreamInProgressRef = useRef(false);\n\n const [streamingConversationId, setStreamingConversationId] = useState<\n string | null\n >(null);\n\n // Track pending tool calls during streaming\n const pendingToolCalls = useRef<Record<string, ToolCall>>({});\n\n useEffect(() => {\n if (currentConversation !== conversationId) {\n setCurrentConversation(conversationId);\n setConversations(prev => {\n // New chat from the nav resets TEMP to []. When returning to a still-streaming temp thread,\n // keep existing messages so the user sees the full inflight exchange (RHDHBUGS-3040).\n if (conversationId === TEMP_CONVERSATION_ID) {\n if (\n isTempStreamInProgressRef.current &&\n (prev[TEMP_CONVERSATION_ID]?.length ?? 0) > 0\n ) {\n return prev;\n }\n return { ...prev, [TEMP_CONVERSATION_ID]: [] };\n }\n if (prev[conversationId]) return prev;\n return {\n ...prev,\n [conversationId]: [],\n };\n });\n }\n }, [currentConversation, conversationId]);\n\n const { data: conversationsData = [], ...queryProps } =\n useFetchConversationMessages(currentConversation);\n\n useEffect(() => {\n if (!Array.isArray(conversationsData) || conversationsData.length === 0)\n return;\n\n const newConvoIndex: number[] = [];\n\n if (conversations) {\n const _conversations: { [key: string]: any[] } = {\n [currentConversation]: [],\n };\n\n let index = 0;\n for (let i = 0; i < conversationsData.length; i++) {\n const [userMessage, aiMessage] = getConversationsData(\n conversationsData[i] as unknown as LCSConversation,\n );\n\n // Create user message\n const userMsg = createUserMessage({\n avatar,\n name: userName,\n content: userMessage.content,\n timestamp: userMessage.timestamp,\n });\n\n // Create bot message\n const botMsg = createBotMessage({\n avatar: botAvatar,\n isLoading: false,\n name: conversationsData[i].model ?? selectedModel,\n content: aiMessage.content,\n timestamp: aiMessage.timestamp,\n sources: transformDocumentsToSources(\n aiMessage?.referenced_documents ?? [],\n ),\n });\n\n // Merge cached tool calls if available\n const cacheKey = `${currentConversation}-${i}`;\n const cachedToolCalls = getSharedToolCallsCache(cacheKey);\n if (cachedToolCalls && cachedToolCalls.length > 0) {\n botMsg.toolCalls = cachedToolCalls;\n }\n\n _conversations[currentConversation].push(userMsg, botMsg);\n\n newConvoIndex.push(index);\n index++;\n }\n\n if (streamingConversations.current[currentConversation]) {\n _conversations[currentConversation].push(\n ...streamingConversations.current[currentConversation],\n );\n }\n\n setConversations(prev => ({\n ...prev,\n ..._conversations,\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n conversationsData,\n userName,\n avatar,\n currentConversation,\n selectedModel,\n streamingConversations,\n ]);\n\n const handleInputPrompt = useCallback(\n async (prompt: string, attachments: Attachment[] = []) => {\n const streamStartedOnTemp = currentConversation === TEMP_CONVERSATION_ID;\n if (streamStartedOnTemp) {\n isTempStreamInProgressRef.current = true;\n }\n\n try {\n let newConversationId = '';\n let requestId = '';\n setStreamingConversationId(currentConversation);\n\n const toolCallsCacheKeyPrefix =\n currentConversation === TEMP_CONVERSATION_ID\n ? createTempToolCallsCacheSessionPrefix()\n : currentConversation;\n\n const conversationTuple = [\n createUserMessage({\n avatar,\n name: userName,\n content: prompt,\n timestamp: getTimestamp(Date.now()) ?? '',\n }),\n createBotMessage({\n avatar: botAvatar,\n isLoading: true,\n name: selectedModel,\n content: '',\n timestamp: '',\n }),\n ];\n\n streamingConversations.current = {\n ...streamingConversations.current,\n [currentConversation]: conversationTuple,\n };\n\n setConversations((prevConv: Conversations) => {\n return {\n ...prevConv,\n [currentConversation]: [\n ...(prevConv?.[currentConversation] ?? []),\n ...conversationTuple,\n ],\n };\n });\n\n setTimeout(() => {\n scrollToBottomRef.current?.scrollToBottom();\n }, 0);\n const finalMessages: string[] = [];\n let buffer = '';\n\n try {\n const reader = await createMessage({\n prompt,\n selectedModel,\n selectedProvider,\n currentConversation,\n attachments,\n });\n\n const decoder = new TextDecoder('utf-8');\n let streamEnded = false;\n\n while (!streamEnded) {\n const { value, done } = await reader.read();\n if (done) {\n streamEnded = true;\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n\n // Process all complete messages separated by double newlines\n const parts = buffer.split('\\n\\n');\n buffer = parts.pop()!;\n\n for (const part of parts) {\n const lines = part\n .split('\\n')\n .filter(line => line.startsWith('data:'));\n\n const jsonString = lines\n .map(line => line.trim().slice(5).trim())\n .join('');\n try {\n const { event, data } = JSON.parse(jsonString);\n if (event === 'start') {\n requestId = data?.request_id;\n onRequestIdReady?.(requestId);\n\n if (currentConversation === TEMP_CONVERSATION_ID) {\n // If the conversation is temp, we need to set the new conversation id\n newConversationId = data?.conversation_id;\n }\n }\n\n // Handle tool_call event\n if (event === 'tool_call') {\n const toolCallData = data?.token;\n const legacyObjectCall =\n typeof toolCallData === 'object' &&\n toolCallData !== null &&\n !Array.isArray(toolCallData) &&\n (toolCallData as { tool_name?: string }).tool_name;\n\n const mcpStyle = isMcpStyleToolCallPayload(data);\n const rawArgs = data?.args ?? data?.arguments;\n const mcpArgs: Record<string, any> =\n rawArgs &&\n typeof rawArgs === 'object' &&\n !Array.isArray(rawArgs)\n ? rawArgs\n : {};\n\n let toolCall: ToolCall | undefined;\n // Prefer legacy token object when present (backward compatible)\n if (legacyObjectCall && data.id !== null) {\n toolCall = {\n id: data.id,\n toolName: (toolCallData as { tool_name: string })\n .tool_name,\n arguments:\n (toolCallData as { arguments?: Record<string, any> })\n .arguments || {},\n startTime: Date.now(),\n isLoading: true,\n };\n } else if (mcpStyle) {\n toolCall = {\n id: data.id,\n toolName: data.name.trim(),\n description:\n typeof data.type === 'string' && data.type !== data.name\n ? data.type\n : undefined,\n arguments: mcpArgs,\n startTime: Date.now(),\n isLoading: true,\n };\n }\n\n if (toolCall && data.id !== null) {\n const newToolCall: ToolCall = toolCall;\n pendingToolCalls.current[toolCallIdKey(data.id)] =\n newToolCall;\n\n // Update the bot message with the pending tool call\n setConversations(prevConversations => {\n const conversation =\n prevConversations[currentConversation] ?? [];\n const lastMessageIndex = conversation.length - 1;\n\n if (lastMessageIndex < 0) return prevConversations;\n\n const lastMessage = { ...conversation[lastMessageIndex] };\n const existingToolCalls = normalizeToolCalls(\n lastMessage.toolCalls,\n );\n const nextToolCalls: ToolCall[] = [\n ...existingToolCalls,\n newToolCall,\n ];\n lastMessage.toolCalls = nextToolCalls;\n\n // Cache tool calls for this message (message pair index)\n const messageIndex = Math.floor(lastMessageIndex / 2);\n const cacheKey = `${toolCallsCacheKeyPrefix}-${messageIndex}`;\n setSharedToolCallsCache(cacheKey, nextToolCalls);\n\n const updatedConversation = [\n ...conversation.slice(0, lastMessageIndex),\n lastMessage,\n ];\n\n return {\n ...prevConversations,\n [currentConversation]: updatedConversation,\n };\n });\n\n // Also update streaming ref\n const [humanMessage, aiMessage] =\n streamingConversations.current[currentConversation] || [];\n if (aiMessage) {\n const existingStreamingToolCalls = normalizeToolCalls(\n aiMessage.toolCalls,\n );\n streamingConversations.current[currentConversation] = [\n humanMessage,\n {\n ...aiMessage,\n toolCalls: [\n ...existingStreamingToolCalls,\n newToolCall,\n ],\n },\n ];\n }\n }\n }\n\n // Handle tool_result event\n if (event === 'tool_result') {\n const tokenResult = data?.token;\n const legacyResult = isLegacyToolResultToken(tokenResult);\n\n const mcpHasContent =\n data?.id !== null &&\n data.content !== undefined &&\n !legacyResult;\n\n let responsePayload: string | undefined;\n let matchToolName: string | undefined;\n let toolIdKey: string | undefined;\n\n if (legacyResult) {\n responsePayload = legacyToolResultToString(\n tokenResult.response,\n );\n matchToolName = tokenResult.tool_name;\n toolIdKey =\n data?.id !== null ? toolCallIdKey(data.id) : undefined;\n } else if (mcpHasContent) {\n toolIdKey = toolCallIdKey(data.id);\n responsePayload =\n typeof data.content === 'string'\n ? data.content\n : JSON.stringify(data.content);\n if (\n typeof data.status === 'string' &&\n data.status !== 'success'\n ) {\n responsePayload = `[${data.status}] ${responsePayload}`;\n }\n }\n\n if (\n responsePayload !== undefined &&\n toolIdKey !== undefined\n ) {\n const pendingCall = pendingToolCalls.current[toolIdKey];\n const endTime = Date.now();\n const executionTime = pendingCall\n ? (endTime - pendingCall.startTime) / 1000\n : 0;\n\n // Update the tool call with result\n setConversations(prevConversations => {\n const conversation =\n prevConversations[currentConversation] ?? [];\n const lastMessageIndex = conversation.length - 1;\n\n if (lastMessageIndex < 0) return prevConversations;\n\n const lastMessage = { ...conversation[lastMessageIndex] };\n const toolCalls = lastMessage.toolCalls || [];\n\n // Find and update the matching tool call\n const updatedToolCalls = toolCalls.map(tc => {\n const idMatches =\n toolCallIdKey(tc.id) === toolIdKey ||\n (matchToolName !== undefined &&\n tc.toolName === matchToolName);\n if (idMatches) {\n return {\n ...tc,\n response: responsePayload,\n endTime,\n executionTime,\n isLoading: false,\n };\n }\n return tc;\n });\n\n lastMessage.toolCalls = updatedToolCalls;\n\n // Update cache with completed tool call\n const messageIndex = Math.floor(lastMessageIndex / 2);\n const cacheKey = `${toolCallsCacheKeyPrefix}-${messageIndex}`;\n setSharedToolCallsCache(cacheKey, updatedToolCalls);\n\n const updatedConversation = [\n ...conversation.slice(0, lastMessageIndex),\n lastMessage,\n ];\n\n return {\n ...prevConversations,\n [currentConversation]: updatedConversation,\n };\n });\n\n // Also update streaming ref\n const [humanMessage, aiMessage] =\n streamingConversations.current[currentConversation] || [];\n if (aiMessage) {\n const toolCalls = aiMessage.toolCalls || [];\n const updatedToolCalls = toolCalls.map(tc => {\n const idMatches =\n toolCallIdKey(tc.id) === toolIdKey ||\n (matchToolName !== undefined &&\n tc.toolName === matchToolName);\n if (idMatches) {\n return {\n ...tc,\n response: responsePayload,\n endTime,\n executionTime,\n isLoading: false,\n };\n }\n return tc;\n });\n streamingConversations.current[currentConversation] = [\n humanMessage,\n { ...aiMessage, toolCalls: updatedToolCalls },\n ];\n }\n\n // Clean up pending tool call\n delete pendingToolCalls.current[toolIdKey];\n }\n }\n\n if (event === 'token') {\n const content = data?.token || '';\n\n finalMessages.push(content);\n\n // Store streaming message\n const [humanMessage, aiMessage] =\n streamingConversations.current[currentConversation];\n streamingConversations.current[currentConversation] = [\n humanMessage,\n { ...aiMessage, content: aiMessage.content + content },\n ];\n\n setConversations(prevConversations => {\n const conversation =\n prevConversations[currentConversation] ?? [];\n\n const lastMessageIndex = conversation.length - 1;\n const lastMessage =\n conversation.length === 0\n ? createBotMessage({\n content: '',\n timestamp: getTimestamp(Date.now()),\n })\n : { ...conversation[lastMessageIndex] };\n\n if ((lastMessage?.content ?? '').trim().length > 0) {\n lastMessage.isLoading = false;\n }\n lastMessage.content += content;\n lastMessage.name =\n data?.response_metadata?.model || selectedModel;\n lastMessage.timestamp = getTimestamp(\n // TODO: To be fixed in the query response\n data?.response_metadata?.created_at || Date.now(),\n );\n\n const updatedConversation = [\n ...conversation.slice(0, lastMessageIndex),\n lastMessage,\n ];\n\n return {\n ...prevConversations,\n [currentConversation]: updatedConversation,\n };\n });\n }\n\n if (event === 'interrupted') {\n if (\n currentConversation === TEMP_CONVERSATION_ID &&\n data?.conversation_id\n ) {\n newConversationId = data.conversation_id;\n }\n setConversations(prevConversations => {\n const conversation =\n prevConversations[currentConversation] ?? [];\n const lastMessageIndex = conversation.length - 1;\n const lastMessage =\n conversation.length === 0\n ? createBotMessage({\n content: '',\n isLoading: false,\n timestamp: getTimestamp(Date.now()),\n })\n : {\n ...conversation[lastMessageIndex],\n isLoading: false,\n };\n const updatedConversation = [\n ...conversation.slice(0, lastMessageIndex),\n lastMessage,\n ];\n return {\n ...prevConversations,\n [currentConversation]: updatedConversation,\n };\n });\n streamEnded = true;\n break;\n }\n\n if (event === 'end') {\n const documents = data?.referenced_documents || [];\n\n setConversations(prevConversations => {\n const conversation =\n prevConversations[currentConversation] ?? [];\n\n const lastMessageIndex = conversation.length - 1;\n const lastMessage =\n conversation.length === 0\n ? createBotMessage({\n content: '',\n isLoading: false,\n timestamp: getTimestamp(Date.now()),\n })\n : {\n ...conversation[lastMessageIndex],\n isLoading: false,\n };\n\n if (documents.length) {\n lastMessage.sources = {\n sources: documents.map((doc: ReferencedDocument) => ({\n title: doc.doc_title,\n link: doc.doc_url,\n body: doc.doc_description,\n })),\n };\n }\n\n const updatedConversation = [\n ...conversation.slice(0, lastMessageIndex),\n lastMessage,\n ];\n\n return {\n ...prevConversations,\n [currentConversation]: updatedConversation,\n };\n });\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn('Error parsing JSON:', error);\n if (typeof onComplete === 'function') {\n onComplete('Invalid JSON received');\n }\n }\n }\n if (streamEnded) break;\n }\n } catch (e) {\n setConversations(prevConversations => {\n const conversation = prevConversations[currentConversation] ?? [];\n\n const lastMessageIndex = conversation.length - 1;\n const lastMessage =\n conversation.length === 0\n ? createBotMessage({\n content: '',\n timestamp: getTimestamp(Date.now()),\n })\n : { ...conversation[lastMessageIndex] };\n\n lastMessage.isLoading = false;\n lastMessage.content += e;\n lastMessage.error = {\n title: e.message,\n };\n lastMessage.timestamp = getTimestamp(Date.now());\n\n const updatedConversation = [\n ...conversation.slice(0, lastMessageIndex),\n lastMessage,\n ];\n\n finalMessages.push(`${e}`);\n\n return {\n ...prevConversations,\n [newConversationId.length > 0\n ? newConversationId\n : currentConversation]: updatedConversation,\n };\n });\n }\n // reset current streaming\n streamingConversations.current[currentConversation] = [];\n if (typeof onComplete === 'function') {\n onComplete(finalMessages.join(''));\n }\n // Swap temp conversation messages with new conversation\n\n if (currentConversation === TEMP_CONVERSATION_ID && newConversationId) {\n migrateSharedToolCallsCacheSessionPrefixToConversation(\n toolCallsCacheKeyPrefix,\n newConversationId,\n );\n\n setConversations(prevConversations => {\n return {\n ...prevConversations,\n [newConversationId]: prevConversations[TEMP_CONVERSATION_ID],\n };\n });\n\n onStart?.(newConversationId);\n\n // Defer removal so it runs after the sync useEffect updates currentConversation.\n setTimeout(() => {\n setConversations(prev => {\n const { [TEMP_CONVERSATION_ID]: _, ...rest } = prev;\n return rest;\n });\n }, 0);\n } else if (currentConversation === TEMP_CONVERSATION_ID) {\n clearSharedToolCallsCacheSessionPrefix(toolCallsCacheKeyPrefix);\n }\n } finally {\n if (streamStartedOnTemp) {\n isTempStreamInProgressRef.current = false;\n }\n setStreamingConversationId(null);\n }\n },\n\n [\n avatar,\n userName,\n onComplete,\n onStart,\n onRequestIdReady,\n selectedModel,\n selectedProvider,\n createMessage,\n currentConversation,\n ],\n );\n\n return {\n conversationMessages: conversations[currentConversation] ?? [],\n handleInputPrompt,\n conversations,\n scrollToBottomRef,\n streamingConversationId,\n ...queryProps,\n };\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useConversationMessages.esm.js","sources":["../../src/hooks/useConversationMessages.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { RefObject, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport { MessageProps } from '@patternfly/chatbot';\nimport { useQuery, type UseQueryResult } from '@tanstack/react-query';\n\nimport { lightspeedApiRef } from '../api/api';\nimport { ScrollContainerHandle } from '../components/LightspeedChatBox';\nimport { TEMP_CONVERSATION_ID } from '../const';\nimport botAvatar from '../images/bot-avatar.svg';\nimport userAvatar from '../images/user-avatar.svg';\nimport {\n Attachment,\n BaseMessage,\n LCSConversation,\n ReferencedDocument,\n ToolCall,\n} from '../types';\nimport {\n createBotMessage,\n createUserMessage,\n getConversationsData,\n getTimestamp,\n normalizeChatUserInput,\n transformDocumentsToSources,\n} from '../utils/lightspeed-chatbox-utils';\nimport {\n clearSharedToolCallsCacheSessionPrefix,\n getSharedToolCallsCache,\n migrateSharedToolCallsCacheSessionPrefixToConversation,\n setSharedToolCallsCache,\n} from './toolCallsCacheStore';\nimport {\n CreateMessageVariables,\n useCreateConversationMessage,\n} from './useCreateCoversationMessage';\n\nconst toolCallIdKey = (id: string | number): string => {\n return String(id);\n};\n\nconst normalizeToolCalls = (\n calls: (ToolCall | undefined)[] | undefined,\n): ToolCall[] => (calls ?? []).filter((tc): tc is ToolCall => tc !== null);\n\nconst isMcpStyleToolCallPayload = (\n data: Record<string, any> | undefined,\n): boolean => {\n return (\n !!data &&\n typeof data.name === 'string' &&\n data.name.trim().length > 0 &&\n data.id !== null\n );\n};\n\n/** Legacy tool_result uses data.token with at least tool_name and response. */\nconst isLegacyToolResultToken = (\n token: unknown,\n): token is { tool_name: string; response?: unknown } => {\n return (\n !!token &&\n typeof token === 'object' &&\n !Array.isArray(token) &&\n typeof (token as { tool_name?: string }).tool_name === 'string' &&\n (token as { tool_name: string }).tool_name.length > 0\n );\n};\n\nlet tempToolCallsCachePrefixFallbackSeq = 0;\n\n/** Unique prefix per temp send so late streams cannot migrate another session's tool cache. */\nfunction createTempToolCallsCacheSessionPrefix(): string {\n const suffix =\n globalThis.crypto?.randomUUID?.() ??\n `${Date.now()}-${++tempToolCallsCachePrefixFallbackSeq}`;\n return `lightspeed-temp:${suffix}`;\n}\n\nconst legacyToolResultToString = (response: unknown): string => {\n if (!response) return '';\n if (typeof response === 'string') return response;\n try {\n return JSON.stringify(response);\n } catch {\n return String(response);\n }\n};\n\n// Fetch all conversation messages\nexport const useFetchConversationMessages = (\n currentConversation: string,\n): UseQueryResult<BaseMessage[] | undefined, Error> => {\n const lightspeedApi = useApi(lightspeedApiRef);\n return useQuery({\n queryKey: ['conversationMessages', currentConversation],\n queryFn: currentConversation\n ? async () => {\n const response =\n await lightspeedApi.getConversationMessages(currentConversation);\n\n return response;\n }\n : undefined,\n retry: false,\n });\n};\n\n// Extended message type to include tool calls\ninterface ExtendedMessageProps extends MessageProps {\n toolCalls?: ToolCall[];\n}\n\ntype Conversations = { [_key: string]: ExtendedMessageProps[] };\n\nexport type UseConversationMessagesReturn = {\n conversationMessages: ExtendedMessageProps[];\n handleInputPrompt: (\n prompt: string,\n attachments?: Attachment[],\n ) => Promise<void>;\n conversations: Conversations;\n scrollToBottomRef: RefObject<ScrollContainerHandle | null>;\n streamingConversationId: string | null;\n data?: BaseMessage[] | undefined;\n error: Error | null;\n isPending: boolean;\n isFetching: boolean;\n isSuccess: boolean;\n isError: boolean;\n status: 'pending' | 'error' | 'success';\n refetch: () => void;\n};\n\n/**\n * Fetches all the messages for given conversation_id\n * @param conversationId\n * @param userName\n * @param selectedModel\n * @param selectedProvider\n * @param avatar\n *\n */\nexport const useConversationMessages = (\n conversationId: string,\n userName: string | undefined,\n selectedModel: string,\n selectedProvider: string,\n avatar: string = userAvatar,\n onComplete?: (message: string) => void,\n onStart?: (conversation_id: string) => void,\n createMessageOverride?: (\n vars: CreateMessageVariables,\n ) => Promise<ReadableStreamDefaultReader<Uint8Array>>,\n onRequestIdReady?: (request_id: string) => void,\n): UseConversationMessagesReturn => {\n const { mutateAsync: defaultCreateMessage } = useCreateConversationMessage();\n const createMessage = createMessageOverride ?? defaultCreateMessage;\n const scrollToBottomRef = useRef<ScrollContainerHandle>(null);\n\n const [currentConversation, setCurrentConversation] =\n useState(conversationId);\n const [conversations, setConversations] = useState<Conversations>({\n [currentConversation]: [],\n });\n const streamingConversations = useRef<Conversations>({\n [currentConversation]: [],\n });\n\n /** True while a send on the provisional thread is still running (even if UI switched to another conv). */\n const isTempStreamInProgressRef = useRef(false);\n\n const [streamingConversationId, setStreamingConversationId] = useState<\n string | null\n >(null);\n\n // Track pending tool calls during streaming\n const pendingToolCalls = useRef<Record<string, ToolCall>>({});\n\n useEffect(() => {\n if (currentConversation !== conversationId) {\n setCurrentConversation(conversationId);\n setConversations(prev => {\n // New chat from the nav resets TEMP to []. When returning to a still-streaming temp thread,\n // keep existing messages so the user sees the full inflight exchange (RHDHBUGS-3040).\n if (conversationId === TEMP_CONVERSATION_ID) {\n if (\n isTempStreamInProgressRef.current &&\n (prev[TEMP_CONVERSATION_ID]?.length ?? 0) > 0\n ) {\n return prev;\n }\n return { ...prev, [TEMP_CONVERSATION_ID]: [] };\n }\n if (prev[conversationId]) return prev;\n return {\n ...prev,\n [conversationId]: [],\n };\n });\n }\n }, [currentConversation, conversationId]);\n\n const { data: conversationsData = [], ...queryProps } =\n useFetchConversationMessages(currentConversation);\n\n useEffect(() => {\n if (!Array.isArray(conversationsData) || conversationsData.length === 0)\n return;\n\n const newConvoIndex: number[] = [];\n\n if (conversations) {\n const _conversations: { [key: string]: any[] } = {\n [currentConversation]: [],\n };\n\n let index = 0;\n for (let i = 0; i < conversationsData.length; i++) {\n const [userMessage, aiMessage] = getConversationsData(\n conversationsData[i] as unknown as LCSConversation,\n );\n\n // Create user message\n const userMsg = createUserMessage({\n avatar,\n name: userName,\n content: userMessage.content,\n timestamp: userMessage.timestamp,\n });\n\n // Create bot message\n const botMsg = createBotMessage({\n avatar: botAvatar,\n isLoading: false,\n name: conversationsData[i].model ?? selectedModel,\n content: aiMessage.content,\n timestamp: aiMessage.timestamp,\n sources: transformDocumentsToSources(\n aiMessage?.referenced_documents ?? [],\n ),\n });\n\n // Merge cached tool calls if available\n const cacheKey = `${currentConversation}-${i}`;\n const cachedToolCalls = getSharedToolCallsCache(cacheKey);\n if (cachedToolCalls && cachedToolCalls.length > 0) {\n botMsg.toolCalls = cachedToolCalls;\n }\n\n _conversations[currentConversation].push(userMsg, botMsg);\n\n newConvoIndex.push(index);\n index++;\n }\n\n if (streamingConversations.current[currentConversation]) {\n _conversations[currentConversation].push(\n ...streamingConversations.current[currentConversation],\n );\n }\n\n setConversations(prev => ({\n ...prev,\n ..._conversations,\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n conversationsData,\n userName,\n avatar,\n currentConversation,\n selectedModel,\n streamingConversations,\n ]);\n\n const handleInputPrompt = useCallback(\n async (prompt: string, attachments: Attachment[] = []) => {\n const normalizedPrompt = normalizeChatUserInput(prompt);\n if (!normalizedPrompt) {\n return;\n }\n\n const streamStartedOnTemp = currentConversation === TEMP_CONVERSATION_ID;\n if (streamStartedOnTemp) {\n isTempStreamInProgressRef.current = true;\n }\n\n try {\n let newConversationId = '';\n let requestId = '';\n setStreamingConversationId(currentConversation);\n\n const toolCallsCacheKeyPrefix =\n currentConversation === TEMP_CONVERSATION_ID\n ? createTempToolCallsCacheSessionPrefix()\n : currentConversation;\n\n const conversationTuple = [\n createUserMessage({\n avatar,\n name: userName,\n content: normalizedPrompt,\n timestamp: getTimestamp(Date.now()) ?? '',\n }),\n createBotMessage({\n avatar: botAvatar,\n isLoading: true,\n name: selectedModel,\n content: '',\n timestamp: '',\n }),\n ];\n\n streamingConversations.current = {\n ...streamingConversations.current,\n [currentConversation]: conversationTuple,\n };\n\n setConversations((prevConv: Conversations) => {\n return {\n ...prevConv,\n [currentConversation]: [\n ...(prevConv?.[currentConversation] ?? []),\n ...conversationTuple,\n ],\n };\n });\n\n setTimeout(() => {\n scrollToBottomRef.current?.scrollToBottom();\n }, 0);\n const finalMessages: string[] = [];\n let buffer = '';\n\n try {\n const reader = await createMessage({\n prompt: normalizedPrompt,\n selectedModel,\n selectedProvider,\n currentConversation,\n attachments,\n });\n\n const decoder = new TextDecoder('utf-8');\n let streamEnded = false;\n\n while (!streamEnded) {\n const { value, done } = await reader.read();\n if (done) {\n streamEnded = true;\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n\n // Process all complete messages separated by double newlines\n const parts = buffer.split('\\n\\n');\n buffer = parts.pop()!;\n\n for (const part of parts) {\n const lines = part\n .split('\\n')\n .filter(line => line.startsWith('data:'));\n\n const jsonString = lines\n .map(line => line.trim().slice(5).trim())\n .join('');\n try {\n const { event, data } = JSON.parse(jsonString);\n if (event === 'start') {\n requestId = data?.request_id;\n onRequestIdReady?.(requestId);\n\n if (currentConversation === TEMP_CONVERSATION_ID) {\n // If the conversation is temp, we need to set the new conversation id\n newConversationId = data?.conversation_id;\n }\n }\n\n // Handle tool_call event\n if (event === 'tool_call') {\n const toolCallData = data?.token;\n const legacyObjectCall =\n typeof toolCallData === 'object' &&\n toolCallData !== null &&\n !Array.isArray(toolCallData) &&\n (toolCallData as { tool_name?: string }).tool_name;\n\n const mcpStyle = isMcpStyleToolCallPayload(data);\n const rawArgs = data?.args ?? data?.arguments;\n const mcpArgs: Record<string, any> =\n rawArgs &&\n typeof rawArgs === 'object' &&\n !Array.isArray(rawArgs)\n ? rawArgs\n : {};\n\n let toolCall: ToolCall | undefined;\n // Prefer legacy token object when present (backward compatible)\n if (legacyObjectCall && data.id !== null) {\n toolCall = {\n id: data.id,\n toolName: (toolCallData as { tool_name: string })\n .tool_name,\n arguments:\n (toolCallData as { arguments?: Record<string, any> })\n .arguments || {},\n startTime: Date.now(),\n isLoading: true,\n };\n } else if (mcpStyle) {\n toolCall = {\n id: data.id,\n toolName: data.name.trim(),\n description:\n typeof data.type === 'string' && data.type !== data.name\n ? data.type\n : undefined,\n arguments: mcpArgs,\n startTime: Date.now(),\n isLoading: true,\n };\n }\n\n if (toolCall && data.id !== null) {\n const newToolCall: ToolCall = toolCall;\n pendingToolCalls.current[toolCallIdKey(data.id)] =\n newToolCall;\n\n // Update the bot message with the pending tool call\n setConversations(prevConversations => {\n const conversation =\n prevConversations[currentConversation] ?? [];\n const lastMessageIndex = conversation.length - 1;\n\n if (lastMessageIndex < 0) return prevConversations;\n\n const lastMessage = { ...conversation[lastMessageIndex] };\n const existingToolCalls = normalizeToolCalls(\n lastMessage.toolCalls,\n );\n const nextToolCalls: ToolCall[] = [\n ...existingToolCalls,\n newToolCall,\n ];\n lastMessage.toolCalls = nextToolCalls;\n\n // Cache tool calls for this message (message pair index)\n const messageIndex = Math.floor(lastMessageIndex / 2);\n const cacheKey = `${toolCallsCacheKeyPrefix}-${messageIndex}`;\n setSharedToolCallsCache(cacheKey, nextToolCalls);\n\n const updatedConversation = [\n ...conversation.slice(0, lastMessageIndex),\n lastMessage,\n ];\n\n return {\n ...prevConversations,\n [currentConversation]: updatedConversation,\n };\n });\n\n // Also update streaming ref\n const [humanMessage, aiMessage] =\n streamingConversations.current[currentConversation] || [];\n if (aiMessage) {\n const existingStreamingToolCalls = normalizeToolCalls(\n aiMessage.toolCalls,\n );\n streamingConversations.current[currentConversation] = [\n humanMessage,\n {\n ...aiMessage,\n toolCalls: [\n ...existingStreamingToolCalls,\n newToolCall,\n ],\n },\n ];\n }\n }\n }\n\n // Handle tool_result event\n if (event === 'tool_result') {\n const tokenResult = data?.token;\n const legacyResult = isLegacyToolResultToken(tokenResult);\n\n const mcpHasContent =\n data?.id !== null &&\n data.content !== undefined &&\n !legacyResult;\n\n let responsePayload: string | undefined;\n let matchToolName: string | undefined;\n let toolIdKey: string | undefined;\n\n if (legacyResult) {\n responsePayload = legacyToolResultToString(\n tokenResult.response,\n );\n matchToolName = tokenResult.tool_name;\n toolIdKey =\n data?.id !== null ? toolCallIdKey(data.id) : undefined;\n } else if (mcpHasContent) {\n toolIdKey = toolCallIdKey(data.id);\n responsePayload =\n typeof data.content === 'string'\n ? data.content\n : JSON.stringify(data.content);\n if (\n typeof data.status === 'string' &&\n data.status !== 'success'\n ) {\n responsePayload = `[${data.status}] ${responsePayload}`;\n }\n }\n\n if (\n responsePayload !== undefined &&\n toolIdKey !== undefined\n ) {\n const pendingCall = pendingToolCalls.current[toolIdKey];\n const endTime = Date.now();\n const executionTime = pendingCall\n ? (endTime - pendingCall.startTime) / 1000\n : 0;\n\n // Update the tool call with result\n setConversations(prevConversations => {\n const conversation =\n prevConversations[currentConversation] ?? [];\n const lastMessageIndex = conversation.length - 1;\n\n if (lastMessageIndex < 0) return prevConversations;\n\n const lastMessage = { ...conversation[lastMessageIndex] };\n const toolCalls = lastMessage.toolCalls || [];\n\n // Find and update the matching tool call\n const updatedToolCalls = toolCalls.map(tc => {\n const idMatches =\n toolCallIdKey(tc.id) === toolIdKey ||\n (matchToolName !== undefined &&\n tc.toolName === matchToolName);\n if (idMatches) {\n return {\n ...tc,\n response: responsePayload,\n endTime,\n executionTime,\n isLoading: false,\n };\n }\n return tc;\n });\n\n lastMessage.toolCalls = updatedToolCalls;\n\n // Update cache with completed tool call\n const messageIndex = Math.floor(lastMessageIndex / 2);\n const cacheKey = `${toolCallsCacheKeyPrefix}-${messageIndex}`;\n setSharedToolCallsCache(cacheKey, updatedToolCalls);\n\n const updatedConversation = [\n ...conversation.slice(0, lastMessageIndex),\n lastMessage,\n ];\n\n return {\n ...prevConversations,\n [currentConversation]: updatedConversation,\n };\n });\n\n // Also update streaming ref\n const [humanMessage, aiMessage] =\n streamingConversations.current[currentConversation] || [];\n if (aiMessage) {\n const toolCalls = aiMessage.toolCalls || [];\n const updatedToolCalls = toolCalls.map(tc => {\n const idMatches =\n toolCallIdKey(tc.id) === toolIdKey ||\n (matchToolName !== undefined &&\n tc.toolName === matchToolName);\n if (idMatches) {\n return {\n ...tc,\n response: responsePayload,\n endTime,\n executionTime,\n isLoading: false,\n };\n }\n return tc;\n });\n streamingConversations.current[currentConversation] = [\n humanMessage,\n { ...aiMessage, toolCalls: updatedToolCalls },\n ];\n }\n\n // Clean up pending tool call\n delete pendingToolCalls.current[toolIdKey];\n }\n }\n\n if (event === 'token') {\n const content = data?.token || '';\n\n finalMessages.push(content);\n\n // Store streaming message\n const [humanMessage, aiMessage] =\n streamingConversations.current[currentConversation];\n streamingConversations.current[currentConversation] = [\n humanMessage,\n { ...aiMessage, content: aiMessage.content + content },\n ];\n\n setConversations(prevConversations => {\n const conversation =\n prevConversations[currentConversation] ?? [];\n\n const lastMessageIndex = conversation.length - 1;\n const lastMessage =\n conversation.length === 0\n ? createBotMessage({\n content: '',\n timestamp: getTimestamp(Date.now()),\n })\n : { ...conversation[lastMessageIndex] };\n\n if ((lastMessage?.content ?? '').trim().length > 0) {\n lastMessage.isLoading = false;\n }\n lastMessage.content += content;\n lastMessage.name =\n data?.response_metadata?.model || selectedModel;\n lastMessage.timestamp = getTimestamp(\n // TODO: To be fixed in the query response\n data?.response_metadata?.created_at || Date.now(),\n );\n\n const updatedConversation = [\n ...conversation.slice(0, lastMessageIndex),\n lastMessage,\n ];\n\n return {\n ...prevConversations,\n [currentConversation]: updatedConversation,\n };\n });\n }\n\n if (event === 'interrupted') {\n if (\n currentConversation === TEMP_CONVERSATION_ID &&\n data?.conversation_id\n ) {\n newConversationId = data.conversation_id;\n }\n setConversations(prevConversations => {\n const conversation =\n prevConversations[currentConversation] ?? [];\n const lastMessageIndex = conversation.length - 1;\n const lastMessage =\n conversation.length === 0\n ? createBotMessage({\n content: '',\n isLoading: false,\n timestamp: getTimestamp(Date.now()),\n })\n : {\n ...conversation[lastMessageIndex],\n isLoading: false,\n };\n const updatedConversation = [\n ...conversation.slice(0, lastMessageIndex),\n lastMessage,\n ];\n return {\n ...prevConversations,\n [currentConversation]: updatedConversation,\n };\n });\n streamEnded = true;\n break;\n }\n\n if (event === 'end') {\n const documents = data?.referenced_documents || [];\n\n setConversations(prevConversations => {\n const conversation =\n prevConversations[currentConversation] ?? [];\n\n const lastMessageIndex = conversation.length - 1;\n const lastMessage =\n conversation.length === 0\n ? createBotMessage({\n content: '',\n isLoading: false,\n timestamp: getTimestamp(Date.now()),\n })\n : {\n ...conversation[lastMessageIndex],\n isLoading: false,\n };\n\n if (documents.length) {\n lastMessage.sources = {\n sources: documents.map((doc: ReferencedDocument) => ({\n title: doc.doc_title,\n link: doc.doc_url,\n body: doc.doc_description,\n })),\n };\n }\n\n const updatedConversation = [\n ...conversation.slice(0, lastMessageIndex),\n lastMessage,\n ];\n\n return {\n ...prevConversations,\n [currentConversation]: updatedConversation,\n };\n });\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn('Error parsing JSON:', error);\n if (typeof onComplete === 'function') {\n onComplete('Invalid JSON received');\n }\n }\n }\n if (streamEnded) break;\n }\n } catch (e) {\n setConversations(prevConversations => {\n const conversation = prevConversations[currentConversation] ?? [];\n\n const lastMessageIndex = conversation.length - 1;\n const lastMessage =\n conversation.length === 0\n ? createBotMessage({\n content: '',\n timestamp: getTimestamp(Date.now()),\n })\n : { ...conversation[lastMessageIndex] };\n\n lastMessage.isLoading = false;\n lastMessage.content += e;\n lastMessage.error = {\n title: e.message,\n };\n lastMessage.timestamp = getTimestamp(Date.now());\n\n const updatedConversation = [\n ...conversation.slice(0, lastMessageIndex),\n lastMessage,\n ];\n\n finalMessages.push(`${e}`);\n\n return {\n ...prevConversations,\n [newConversationId.length > 0\n ? newConversationId\n : currentConversation]: updatedConversation,\n };\n });\n }\n // reset current streaming\n streamingConversations.current[currentConversation] = [];\n if (typeof onComplete === 'function') {\n onComplete(finalMessages.join(''));\n }\n // Swap temp conversation messages with new conversation\n\n if (currentConversation === TEMP_CONVERSATION_ID && newConversationId) {\n migrateSharedToolCallsCacheSessionPrefixToConversation(\n toolCallsCacheKeyPrefix,\n newConversationId,\n );\n\n setConversations(prevConversations => {\n return {\n ...prevConversations,\n [newConversationId]: prevConversations[TEMP_CONVERSATION_ID],\n };\n });\n\n onStart?.(newConversationId);\n\n // Defer removal so it runs after the sync useEffect updates currentConversation.\n setTimeout(() => {\n setConversations(prev => {\n const { [TEMP_CONVERSATION_ID]: _, ...rest } = prev;\n return rest;\n });\n }, 0);\n } else if (currentConversation === TEMP_CONVERSATION_ID) {\n clearSharedToolCallsCacheSessionPrefix(toolCallsCacheKeyPrefix);\n }\n } finally {\n if (streamStartedOnTemp) {\n isTempStreamInProgressRef.current = false;\n }\n setStreamingConversationId(null);\n }\n },\n\n [\n avatar,\n userName,\n onComplete,\n onStart,\n onRequestIdReady,\n selectedModel,\n selectedProvider,\n createMessage,\n currentConversation,\n ],\n );\n\n return {\n conversationMessages: conversations[currentConversation] ?? [],\n handleInputPrompt,\n conversations,\n scrollToBottomRef,\n streamingConversationId,\n ...queryProps,\n };\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { useApi } from '@backstage/core-plugin-api';
|
|
2
|
+
import { useQuery } from '@tanstack/react-query';
|
|
3
|
+
import { lightspeedApiRef } from '../api/api.esm.js';
|
|
4
|
+
|
|
5
|
+
const useNotebookConversationIds = () => {
|
|
6
|
+
const lightspeedApi = useApi(lightspeedApiRef);
|
|
7
|
+
return useQuery({
|
|
8
|
+
queryKey: ["notebookConversationIds"],
|
|
9
|
+
queryFn: async () => {
|
|
10
|
+
return await lightspeedApi.getNotebookConversationIds();
|
|
11
|
+
},
|
|
12
|
+
staleTime: 1e3 * 60 * 5,
|
|
13
|
+
// 5 minutes
|
|
14
|
+
retry: false
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export { useNotebookConversationIds };
|
|
19
|
+
//# sourceMappingURL=useNotebookConversationIds.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useNotebookConversationIds.esm.js","sources":["../../src/hooks/useNotebookConversationIds.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport { useQuery, type UseQueryResult } from '@tanstack/react-query';\n\nimport { lightspeedApiRef } from '../api/api';\n\n/**\n * Hook to fetch conversation IDs associated with notebook sessions for filtering\n * Works even when notebooks feature is disabled\n */\nexport const useNotebookConversationIds = (): UseQueryResult<\n string[],\n Error\n> => {\n const lightspeedApi = useApi(lightspeedApiRef);\n\n return useQuery({\n queryKey: ['notebookConversationIds'],\n queryFn: async () => {\n return await lightspeedApi.getNotebookConversationIds();\n },\n staleTime: 1000 * 60 * 5, // 5 minutes\n retry: false,\n });\n};\n"],"names":[],"mappings":";;;;AA0BO,MAAM,6BAA6B,MAGrC;AACH,EAAA,MAAM,aAAA,GAAgB,OAAO,gBAAgB,CAAA;AAE7C,EAAA,OAAO,QAAA,CAAS;AAAA,IACd,QAAA,EAAU,CAAC,yBAAyB,CAAA;AAAA,IACpC,SAAS,YAAY;AACnB,MAAA,OAAO,MAAM,cAAc,0BAAA,EAA2B;AAAA,IACxD,CAAA;AAAA,IACA,SAAA,EAAW,MAAO,EAAA,GAAK,CAAA;AAAA;AAAA,IACvB,KAAA,EAAO;AAAA,GACR,CAAA;AACH;;;;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
|
+
import { NOTEBOOK_PROMPT_KEYS } from '../const.esm.js';
|
|
3
|
+
import { useTranslation } from './useTranslation.esm.js';
|
|
4
|
+
|
|
5
|
+
const useNotebookWelcomePrompts = () => {
|
|
6
|
+
const { t } = useTranslation();
|
|
7
|
+
return useMemo(
|
|
8
|
+
() => NOTEBOOK_PROMPT_KEYS.map((key) => t(key, { defaultValue: key })),
|
|
9
|
+
[t]
|
|
10
|
+
);
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export { useNotebookWelcomePrompts };
|
|
14
|
+
//# sourceMappingURL=useNotebookWelcomePrompts.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useNotebookWelcomePrompts.esm.js","sources":["../../src/hooks/useNotebookWelcomePrompts.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useMemo } from 'react';\n\nimport { NOTEBOOK_PROMPT_KEYS } from '../const';\nimport { useTranslation } from './useTranslation';\n\nexport const useNotebookWelcomePrompts = (): string[] => {\n const { t } = useTranslation();\n\n return useMemo(\n () => NOTEBOOK_PROMPT_KEYS.map(key => t(key as any, { defaultValue: key })),\n [t],\n );\n};\n"],"names":[],"mappings":";;;;AAqBO,MAAM,4BAA4B,MAAgB;AACvD,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAE7B,EAAA,OAAO,OAAA;AAAA,IACL,MAAM,oBAAA,CAAqB,GAAA,CAAI,CAAA,GAAA,KAAO,CAAA,CAAE,KAAY,EAAE,YAAA,EAAc,GAAA,EAAK,CAAC,CAAA;AAAA,IAC1E,CAAC,CAAC;AAAA,GACJ;AACF;;;;"}
|
|
@@ -9,6 +9,7 @@ const lightspeedTranslationDe = createTranslationMessages({
|
|
|
9
9
|
"tabs.ariaLabel": "Lightspeed-Ansichten",
|
|
10
10
|
"tabs.chat": "Chat",
|
|
11
11
|
"tabs.notebooks": "Notizb\xFCcher",
|
|
12
|
+
"tabs.notebooks.devPreview": "Entwicklervorschau",
|
|
12
13
|
"tabs.notebooks.empty": "Inhalte der Notizb\xFCcher kommen hierhin.",
|
|
13
14
|
"notebooks.title": "Meine Notizb\xFCcher",
|
|
14
15
|
"notebooks.empty.title": "Keine erstellten Notizb\xFCcher",
|
|
@@ -31,6 +32,10 @@ const lightspeedTranslationDe = createTranslationMessages({
|
|
|
31
32
|
"notebooks.updated.days": "Vor {{days}} Tagen aktualisiert",
|
|
32
33
|
"notebooks.updated.on": "Aktualisiert am",
|
|
33
34
|
"notebooks.card.openAria": "Notizbuch {{name}} \xF6ffnen",
|
|
35
|
+
// Notebook sample prompts
|
|
36
|
+
"notebooks.prompts.coreConcepts.title": "Was sind die Kernkonzepte?",
|
|
37
|
+
"notebooks.prompts.vulnerabilities.title": "Zeige meine kritischen Schwachstellen",
|
|
38
|
+
"notebooks.prompts.accessIssue.title": "Hilf mir bei einem Zugriffsproblem",
|
|
34
39
|
// Notebook view
|
|
35
40
|
"notebook.view.title": "Unbenanntes Notizbuch",
|
|
36
41
|
"notebook.view.close": "Notizbuch schlie\xDFen",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"de.esm.js","sources":["../../src/translations/de.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\n\nimport { lightspeedTranslationRef } from './ref';\n\n/**\n * de translation for plugin.lightspeed.\n * @public\n */\nconst lightspeedTranslationDe = createTranslationMessages({\n ref: lightspeedTranslationRef,\n messages: {\n 'page.title': 'Lightspeed',\n 'page.subtitle': 'KI-gestützter Entwicklungsassistent',\n 'tabs.ariaLabel': 'Lightspeed-Ansichten',\n 'tabs.chat': 'Chat',\n 'tabs.notebooks': 'Notizbücher',\n 'tabs.notebooks.empty': 'Inhalte der Notizbücher kommen hierhin.',\n 'notebooks.title': 'Meine Notizbücher',\n 'notebooks.empty.title': 'Keine erstellten Notizbücher',\n 'notebooks.empty.description':\n 'Erstellen Sie ein neues Notizbuch, um Ihre Quellen zu organisieren und KI-gestützte Erkenntnisse zu gewinnen.',\n 'notebooks.empty.action': 'Neues Notizbuch erstellen',\n 'notebooks.documents': 'Dokumente',\n 'notebooks.actions.rename': 'Umbenennen',\n 'notebooks.actions.delete': 'Löschen',\n 'notebooks.rename.title': '{{name}} umbenennen?',\n 'notebooks.rename.description':\n 'Bitte geben Sie den neuen Namen für dieses Notizbuch ein und klicken Sie auf „Senden“, um fortzufahren.',\n 'notebooks.rename.label': 'Neuer Name',\n 'notebooks.rename.placeholder': 'Neuer Name',\n 'notebooks.rename.action': 'Senden',\n 'notebooks.delete.title': '{{name}} löschen?',\n 'notebooks.delete.message':\n 'Dieses Notizbuch wird hier nicht mehr angezeigt. Dadurch werden auch zugehörige Aktivitäten wie Eingaben, Antworten und Feedback aus Ihrer Lightspeed-Aktivität gelöscht.',\n 'notebooks.delete.action': 'Löschen',\n 'notebooks.delete.toast': 'Notizbuch gelöscht!',\n 'notebooks.updated.today': 'Heute aktualisiert',\n 'notebooks.updated.yesterday': 'Vor 1 Tag aktualisiert',\n 'notebooks.updated.days': 'Vor {{days}} Tagen aktualisiert',\n 'notebooks.updated.on': 'Aktualisiert am',\n 'notebooks.card.openAria': 'Notizbuch {{name}} öffnen',\n\n // Notebook view\n 'notebook.view.title': 'Unbenanntes Notizbuch',\n 'notebook.view.close': 'Notizbuch schließen',\n 'notebook.view.documents.count': '{{count}} Dokumente',\n 'notebook.view.documents.add': 'Hinzufügen',\n 'notebook.view.upload.heading':\n 'Laden Sie eine Ressource hoch, um zu beginnen',\n 'notebook.view.upload.action': 'Ressource hochladen',\n 'notebook.view.input.placeholder': 'Fragen Sie zu Ihren Dokumenten...',\n 'notebook.view.input.disabledTooltip':\n 'Wählen Sie mindestens eine geladene Ressource aus, um den Chat zu starten',\n 'notebook.view.sidebar.collapse': 'Seitenleiste einklappen',\n 'notebook.view.sidebar.expand': 'Seitenleiste ausklappen',\n 'notebook.view.sidebar.resize': 'Größe der Seitenleiste ändern',\n 'notebook.view.documents.uploading': 'Dokument wird hochgeladen',\n 'notebook.view.documents.maxReached':\n 'Maximal 10 Dokumente sind erlaubt. Löschen Sie ein Dokument, um ein neues hochzuladen.',\n 'notebook.upload.success': '{{fileName}} erfolgreich hochgeladen.',\n 'notebook.upload.failed': 'Hochladen von {{fileName}} fehlgeschlagen.',\n\n // Notebook upload modal\n 'notebook.upload.modal.title': 'Dokument zum Notizbuch hinzufügen',\n 'notebook.upload.modal.dragDropTitle': 'Dateien hierher ziehen und ablegen',\n 'notebook.upload.modal.browseButton': 'Hochladen',\n 'notebook.upload.modal.separator': 'oder',\n 'notebook.upload.modal.infoText':\n 'Akzeptierte Dateitypen: .md, .txt, .pdf, .json, .yaml, .log',\n 'notebook.upload.modal.selectedFiles':\n '{{count}} von {{max}} Dateien ausgewählt',\n 'notebook.upload.modal.addButton': 'Hinzufügen ({{count}})',\n 'notebook.upload.modal.removeFile': '{{fileName}} entfernen',\n 'notebook.upload.error.unsupportedType':\n 'Upload-Fehler: Nicht unterstützte Dateitypen gefunden. Bitte laden Sie nur unterstützte Dateitypen hoch.',\n 'notebook.upload.error.fileTooLarge':\n 'Upload-Fehler: Dateigröße überschreitet das Limit von 25 MB.',\n 'notebook.upload.error.tooManyFiles':\n 'Upload-Fehler: Maximal {{max}} Dateien erlaubt.',\n\n // Notebook overwrite modal\n 'notebook.overwrite.modal.title': 'Dateien überschreiben?',\n 'notebook.overwrite.modal.description':\n 'Die folgenden Dateien existieren bereits in diesem Notizbuch. Möchten Sie sie mit den neuen Versionen überschreiben?',\n 'notebook.overwrite.modal.action': 'Überschreiben',\n 'notebook.document.delete': 'Löschen',\n\n 'prompts.codeReadability.title': 'Hilfe zur Code-Lesbarkeit erhalten',\n 'prompts.codeReadability.message':\n 'Können Sie mir Techniken vorschlagen, mit denen ich meinen Code lesbarer und wartungsfreundlicher gestalten kann?',\n 'prompts.debugging.title': 'Hilfe beim Debuggen erhalten',\n 'prompts.debugging.message':\n 'Meine Anwendung gibt beim Versuch einer Verbindung zur Datenbank einen Fehler aus. Können Sie mir helfen, das Problem zu identifizieren?',\n 'prompts.developmentConcept.title': 'Ein Entwicklungskonzept erläutern',\n 'prompts.developmentConcept.message':\n 'Können Sie erklären, wie eine Microservices-Architektur funktioniert und welche Vorteile sie gegenüber einem monolithischen Design bietet?',\n 'prompts.codeOptimization.title':\n 'Vorschläge zur Codeoptimierung unterbreiten',\n 'prompts.codeOptimization.message':\n 'Können Sie gängige Methoden zur Codeoptimierung vorschlagen, um eine bessere Performance zu erzielen?',\n 'prompts.documentation.title': 'Zusammenfassung von Dokumentation',\n 'prompts.documentation.message':\n 'Können Sie die Dokumentation zur Implementierung der OAuth 2.0-Authentifizierung in einer Webanwendung zusammenfassen?',\n 'prompts.gitWorkflows.title': 'Workflows mit Git',\n 'prompts.gitWorkflows.message':\n 'Ich möchte Änderungen am Code in einem anderen Branch vornehmen, ohne meine bestehende Arbeit zu verlieren. Wie geht man dabei mit Git vor?',\n 'prompts.testingStrategies.title': 'Teststrategien vorschlagen',\n 'prompts.testingStrategies.message':\n 'Können Sie mir einige gängige Teststrategien empfehlen, die meine Anwendung robust und fehlerfrei machen?',\n 'prompts.sortingAlgorithms.title':\n 'Sortieralgorithmen verständlich erklären',\n 'prompts.sortingAlgorithms.message':\n 'Können Sie den Unterschied zwischen Quicksort und Mergesort erklären und wann man welchen Algorithmus verwendet?',\n 'prompts.eventDriven.title': 'Ereignisgesteuerte Architektur verstehen',\n 'prompts.eventDriven.message':\n 'Können Sie erklären, was ereignisgesteuerte Architektur bedeutet und wann ihre Verwendung in der Softwareentwicklung von Vorteil ist?',\n 'prompts.tekton.title': 'Mit Tekton deployen',\n 'prompts.tekton.message':\n 'Können Sie mir helfen, das Deployment meiner Anwendung mithilfe von Tekton-Pipelines zu automatisieren?',\n 'prompts.openshift.title': 'OpenShift-Deployment erstellen',\n 'prompts.openshift.message':\n 'Können Sie mich bei der Erstellung eines neuen Deployments in OpenShift für eine containerisierte Anwendung unterstützen?',\n 'prompts.rhdh.title': 'Erste Schritte mit dem Red Hat Developer Hub',\n 'prompts.rhdh.message':\n 'Können Sie mich bei den ersten Schritten zur Nutzung des Developer Hub als Entwickler unterstützen, z. B. beim Erkunden des Softwarekatalogs und beim Hinzufügen meines Dienstes?',\n 'conversation.delete.confirm.title': 'Chat löschen?',\n 'conversation.delete.confirm.message':\n 'Dieser Chat wird hier nicht mehr angezeigt. Dadurch werden auch zugehörige Aktivitäten wie Prompts, Antworten und Feedback aus Ihrer Lightspeed-Aktivität gelöscht.',\n 'conversation.delete.confirm.action': 'Löschen',\n 'conversation.rename.confirm.title': 'Chat umbenennen?',\n 'conversation.rename.confirm.action': 'Umbenennen',\n 'conversation.rename.placeholder': 'Chatname',\n 'permission.required.title': 'Fehlende Berechtigungen',\n 'permission.required.description':\n 'Um <subject/> anzuzeigen, wenden Sie sich an Ihren Administrator, um die Berechtigung <permissions/> zu erhalten.',\n 'permission.subject.plugin': 'das Lightspeed-Plugin',\n 'permission.subject.notebooks': 'die Lightspeed-Notizbücher',\n 'permission.notebooks.goBack': 'Zurück',\n 'lcore.notConfigured.title': 'Verbinden Sie ein LLM, um zu starten',\n 'lcore.notConfigured.description':\n 'Lightspeed erfordert ein registriertes LLM. Wenden Sie sich an den Plattformadministrator Ihrer Organisation, um die Einrichtung abzuschließen.',\n 'lcore.notConfigured.developerLightspeedDocs':\n 'Developer Lightspeed wird konfiguriert',\n 'lcore.notConfigured.backendDocs': 'Lightspeed-Backend einrichten',\n 'lcore.loadError.title': 'Modelle konnten nicht geladen werden',\n 'lcore.loadError.description':\n 'Das Lightspeed-Backend hat keine Modellliste zurückgegeben. Prüfen Sie, ob der Dienst läuft und erreichbar ist, und versuchen Sie es erneut.',\n 'disclaimer.withValidation':\n 'Diese Funktion nutzt KI-Technologie. Geben Sie bei Ihrer Eingabe keine persönlichen oder sonstigen sensiblen Informationen an. Interaktionen können dazu genutzt werden, die Produkte oder Dienstleistungen von Red Hat zu verbessern.',\n 'disclaimer.withoutValidation':\n 'Diese Funktion nutzt KI-Technologie. Geben Sie bei Ihrer Eingabe keine persönlichen oder sonstigen sensiblen Informationen an. Interaktionen können dazu genutzt werden, die Produkte oder Dienstleistungen von Red Hat zu verbessern.',\n 'footer.accuracy.label':\n 'KI-generierte Inhalte sollten vor der Verwendung stets überprüft werden.',\n 'common.cancel': 'Abbrechen',\n 'common.close': 'Schließen',\n 'common.readMore': 'Mehr lesen',\n 'common.retry': 'Erneut versuchen',\n 'common.loading': 'Wird geladen',\n 'common.noSearchResults': 'Keine Ergebnisse, die der Suche entsprechen',\n 'menu.newConversation': 'Neuer Chat',\n 'chatbox.header.title': 'Developer Lightspeed',\n 'chatbox.search.placeholder': 'Suchen',\n 'chatbox.provider.other': 'Andere',\n 'chatbox.emptyState.noPinnedChats': 'Keine angehefteten Chats',\n 'chatbox.emptyState.noRecentChats': 'Keine letzten Chats',\n 'chatbox.emptyState.noResults.title': 'Keine Ergebnisse gefunden',\n 'chatbox.emptyState.noResults.body':\n 'Passen Sie Ihre Suchanfrage an, und versuchen Sie es erneut. Überprüfen Sie Ihre Rechtschreibung, oder versuchen Sie es mit einem allgemeineren Begriff.',\n 'chatbox.welcome.greeting': 'Hallo {{userName}}',\n 'chatbox.welcome.description': 'Wie kann ich Ihnen heute helfen?',\n 'chatbox.message.placeholder':\n 'Senden Sie eine Nachricht, und laden Sie optional eine JSON-, YAML- oder TXT-Datei hoch ...',\n 'chatbox.fileUpload.failed': 'Datei-Upload fehlgeschlagen',\n 'chatbox.fileUpload.infoText':\n 'Unterstützte Dateitypen: .txt, .yaml und .json. Die maximale Dateigröße beträgt 25 MB.',\n 'aria.chatbotSelector': 'Chatbot-Auswahl',\n 'aria.important': 'Wichtig',\n 'aria.chatHistoryMenu': 'Chatverlauf-Menü',\n 'aria.closeDrawerPanel': 'Drawer-Fenster schließen',\n 'aria.search.placeholder': 'Suchen',\n 'aria.searchPreviousConversations': 'Vorherige Unterhaltungen durchsuchen',\n 'aria.resize': 'Größe ändern',\n 'aria.options.label': 'Optionen',\n 'aria.scroll.down': 'Zurück zum Ende',\n 'aria.scroll.up': 'Zurück zum Anfang',\n 'aria.settings.label': 'Chatbot-Optionen',\n 'aria.close': 'Chatbot schließen',\n 'modal.edit': 'Bearbeiten',\n 'modal.save': 'Speichern',\n 'modal.close': 'Schließen',\n 'modal.cancel': 'Abbrechen',\n 'conversation.delete': 'Löschen',\n 'conversation.rename': 'Umbenennen',\n 'conversation.addToPinnedChats': 'Anheften',\n 'conversation.removeFromPinnedChats': 'Lösen',\n 'conversation.announcement.userMessage':\n 'Nachricht vom Benutzer: {{prompt}}. Nachricht vom Bot wird geladen.',\n 'user.guest': 'Gast',\n 'conversation.announcement.responseStopped': 'Antwort angehalten.',\n 'user.loading': '...',\n 'tooltip.attach': 'Anhängen',\n 'tooltip.send': 'Senden',\n 'tooltip.microphone.active': 'Überwachen beenden',\n 'tooltip.microphone.inactive': 'Mikrofon verwenden',\n 'tooltip.expandHistoryPanel': 'Chatverlauf erweitern',\n 'tooltip.collapseHistoryPanel': 'Chatverlauf minimieren',\n 'tooltip.quickNewChat': 'Neuer Chat',\n 'button.newChat': 'Neuer Chat',\n 'tooltip.chatHistoryMenu': 'Chatverlauf-Menü',\n 'tooltip.responseRecorded': 'Antwort aufgezeichnet',\n 'tooltip.backToTop': 'Zurück zum Anfang',\n 'tooltip.backToBottom': 'Zurück zum Ende',\n 'tooltip.settings': 'Chatbot-Optionen',\n 'tooltip.close': 'Schließen',\n 'tooltip.fab.open': 'Lightspeed öffnen',\n 'tooltip.fab.close': 'Lightspeed schließen',\n 'attach.menu.title': 'Anhängen',\n 'attach.menu.description': 'Eine JSON-, YAML- oder TXT-Datei anhängen',\n 'modal.title.preview': 'Anhang in der Vorschau anzeigen',\n 'modal.title.edit': 'Anhang bearbeiten',\n 'icon.lightspeed.alt': 'Lightspeed-Symbol',\n 'icon.permissionRequired.alt': \"Symbol für 'Berechtigung erforderlich'\",\n 'message.options.label': 'Optionen',\n 'file.upload.error.alreadyExists': 'Datei existiert bereits.',\n 'file.upload.error.multipleFiles':\n 'Es wurden mehr als eine Datei hochgeladen.',\n 'file.upload.error.unsupportedType':\n 'Nicht unterstützter Dateityp. Unterstützte Typen: .txt, .yaml und .json.',\n 'file.upload.error.fileTooLarge':\n 'Ihre Dateigröße ist zu groß. Bitte stellen Sie sicher, dass Ihre Datei kleiner als 25 MB ist.',\n 'file.upload.error.readFailed':\n 'Datei konnte nicht gelesen werden: {{errorMessage}}',\n 'error.context.fileAttachment':\n 'useFileAttachmentContext muss innerhalb eines FileAttachmentContextProvider liegen',\n 'feedback.form.title': 'Warum haben Sie diese Bewertung gewählt?',\n 'feedback.form.textAreaPlaceholder':\n 'Geben Sie optional zusätzliches Feedback an',\n 'feedback.form.submitWord': 'Absenden',\n 'feedback.tooltips.goodResponse': 'Gute Antwort',\n 'feedback.tooltips.badResponse': 'Schlechte Antwort',\n 'feedback.tooltips.copied': 'Kopiert',\n 'feedback.tooltips.copy': 'Kopieren',\n 'feedback.tooltips.listening': 'Überwachung',\n 'feedback.tooltips.listen': 'Überwachen',\n 'feedback.quickResponses.positive.helpful': 'Hilfreiche Informationen',\n 'feedback.quickResponses.positive.easyToUnderstand': 'Leicht verständlich',\n 'feedback.quickResponses.positive.resolvedIssue':\n 'Mein Problem wurde gelöst',\n 'feedback.quickResponses.negative.didntAnswer':\n 'Meine Frage wurde nicht beantwortet',\n 'feedback.quickResponses.negative.hardToUnderstand': 'Schwer zu verstehen',\n 'feedback.quickResponses.negative.notHelpful': 'Nicht hilfreich',\n 'feedback.completion.title': 'Feedback übermittelt',\n 'feedback.completion.body':\n 'Wir haben Ihre Antwort erhalten. Vielen Dank für Ihr Feedback!',\n 'conversation.category.pinnedChats': 'Angeheftet',\n 'conversation.category.recent': 'Neueste',\n 'settings.pinned.enable': 'Angeheftete Chats aktivieren',\n 'settings.pinned.disable': 'Angeheftete Chats deaktivieren',\n 'settings.pinned.enabled.description':\n 'Angeheftete Chats sind derzeit aktiviert',\n 'settings.pinned.disabled.description':\n 'Angeheftete Chats sind derzeit deaktiviert.',\n 'settings.mcp.label': 'MCP-Einstellungen',\n 'mcp.settings.title': 'MCP-Server',\n 'mcp.settings.selectedCount':\n '{{selectedCount}} von {{totalCount}} ausgewählt',\n 'mcp.settings.closeAriaLabel': 'MCP-Einstellungen schließen',\n 'mcp.settings.readOnlyAccess':\n 'Sie haben schreibgeschützten Zugriff auf MCP-Server.',\n 'mcp.settings.tableAriaLabel': 'MCP-Server-Tabelle',\n 'mcp.settings.enabled': 'Aktiviert',\n 'mcp.settings.name': 'Name',\n 'mcp.settings.status': 'Status',\n 'mcp.settings.edit': 'Bearbeiten',\n 'mcp.settings.loading': 'MCP-Server werden geladen...',\n 'mcp.settings.noneAvailable': 'Keine MCP-Server verfügbar.',\n 'mcp.settings.status.disabled': 'Deaktiviert',\n 'mcp.settings.status.tokenRequired': 'Token erforderlich',\n 'mcp.settings.status.failed': 'Fehlgeschlagen',\n 'mcp.settings.status.oneTool': '{{count}} Tool',\n 'mcp.settings.status.manyTools': '{{count}} Tools',\n 'mcp.settings.status.unknown': 'Unbekannt',\n 'mcp.settings.toggleServerAriaLabel': '{{serverName}} umschalten',\n 'mcp.settings.editServerAriaLabel': '{{serverName}} bearbeiten',\n 'mcp.settings.configureServerTitle': 'Server {{serverName}} konfigurieren',\n 'mcp.settings.closeConfigureModalAriaLabel':\n 'Konfigurationsdialog schließen',\n 'mcp.settings.modalDescription':\n 'Anmeldedaten werden verschlüsselt gespeichert und sind auf Ihr Profil beschränkt. Lightspeed arbeitet mit genau Ihren Berechtigungen.',\n 'mcp.settings.savedToken': 'Gespeicherter Token',\n 'mcp.settings.personalAccessToken': 'Persönlicher Zugriffstoken',\n 'mcp.settings.usingAdminCredential':\n 'Administratoranmeldedaten werden verwendet. Geben Sie einen persönlichen Token ein, um ihn für Ihr Konto zu überschreiben.',\n 'mcp.settings.enterToken': 'Geben Sie Ihren Token ein',\n 'mcp.settings.removePersonalToken': 'Persönlichen Token entfernen',\n 'mcp.settings.token.clearAriaLabel': 'Tokeneingabe löschen',\n 'mcp.settings.token.validating': 'Token wird validiert...',\n 'mcp.settings.token.savingAndValidating':\n 'Token wird gespeichert und validiert...',\n 'mcp.settings.token.urlUnavailableForValidation':\n 'Token kann nicht validiert werden, da die Server-URL nicht verfügbar ist.',\n 'mcp.settings.token.invalidCredentials':\n 'Ungültige Anmeldedaten. Überprüfen Sie Server-URL und Token.',\n 'mcp.settings.token.validationFailed':\n 'Validierung fehlgeschlagen. Überprüfen Sie Server-URL und Token.',\n 'mcp.settings.token.connectionSuccessful': 'Verbindung erfolgreich',\n 'toolCall.header': 'Antwort des Tools: {{toolName}}',\n 'toolCall.thinking': 'Hat {{seconds}} Sekunden nachgedacht',\n 'toolCall.executionTime': 'Ausführungszeit: ',\n 'toolCall.parameters': 'Parameter',\n 'toolCall.response': 'Antwort',\n 'toolCall.showMore': 'Mehr anzeigen',\n 'toolCall.showLess': 'Weniger anzeigen',\n 'toolCall.loading': 'Tool wird ausgeführt...',\n 'toolCall.executing': 'Tool wird ausgeführt...',\n 'toolCall.copyResponse': 'Antwort kopieren',\n 'toolCall.summary': 'Hier ist eine Zusammenfassung Ihrer Antwort.',\n 'toolCall.mcpServer': 'MCP-Server',\n 'settings.displayMode.label': 'Anzeigemodus',\n 'settings.displayMode.overlay': 'Overlay',\n 'settings.displayMode.docked': 'An Fenster andocken',\n 'settings.displayMode.fullscreen': 'Vollbild',\n 'sort.label': 'Unterhaltungen sortieren',\n 'sort.newest': 'Datum (neuestes zuerst)',\n 'sort.oldest': 'Datum (ältestes zuerst)',\n 'sort.alphabeticalAsc': 'Name (A-Z)',\n 'sort.alphabeticalDesc': 'Name (Z-A)',\n 'reasoning.thinking': 'Denkvorgang anzeigen',\n },\n});\n\nexport default lightspeedTranslationDe;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"de.esm.js","sources":["../../src/translations/de.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\n\nimport { lightspeedTranslationRef } from './ref';\n\n/**\n * de translation for plugin.lightspeed.\n * @public\n */\nconst lightspeedTranslationDe = createTranslationMessages({\n ref: lightspeedTranslationRef,\n messages: {\n 'page.title': 'Lightspeed',\n 'page.subtitle': 'KI-gestützter Entwicklungsassistent',\n 'tabs.ariaLabel': 'Lightspeed-Ansichten',\n 'tabs.chat': 'Chat',\n 'tabs.notebooks': 'Notizbücher',\n 'tabs.notebooks.devPreview': 'Entwicklervorschau',\n 'tabs.notebooks.empty': 'Inhalte der Notizbücher kommen hierhin.',\n 'notebooks.title': 'Meine Notizbücher',\n 'notebooks.empty.title': 'Keine erstellten Notizbücher',\n 'notebooks.empty.description':\n 'Erstellen Sie ein neues Notizbuch, um Ihre Quellen zu organisieren und KI-gestützte Erkenntnisse zu gewinnen.',\n 'notebooks.empty.action': 'Neues Notizbuch erstellen',\n 'notebooks.documents': 'Dokumente',\n 'notebooks.actions.rename': 'Umbenennen',\n 'notebooks.actions.delete': 'Löschen',\n 'notebooks.rename.title': '{{name}} umbenennen?',\n 'notebooks.rename.description':\n 'Bitte geben Sie den neuen Namen für dieses Notizbuch ein und klicken Sie auf „Senden“, um fortzufahren.',\n 'notebooks.rename.label': 'Neuer Name',\n 'notebooks.rename.placeholder': 'Neuer Name',\n 'notebooks.rename.action': 'Senden',\n 'notebooks.delete.title': '{{name}} löschen?',\n 'notebooks.delete.message':\n 'Dieses Notizbuch wird hier nicht mehr angezeigt. Dadurch werden auch zugehörige Aktivitäten wie Eingaben, Antworten und Feedback aus Ihrer Lightspeed-Aktivität gelöscht.',\n 'notebooks.delete.action': 'Löschen',\n 'notebooks.delete.toast': 'Notizbuch gelöscht!',\n 'notebooks.updated.today': 'Heute aktualisiert',\n 'notebooks.updated.yesterday': 'Vor 1 Tag aktualisiert',\n 'notebooks.updated.days': 'Vor {{days}} Tagen aktualisiert',\n 'notebooks.updated.on': 'Aktualisiert am',\n 'notebooks.card.openAria': 'Notizbuch {{name}} öffnen',\n\n // Notebook sample prompts\n 'notebooks.prompts.coreConcepts.title': 'Was sind die Kernkonzepte?',\n 'notebooks.prompts.vulnerabilities.title':\n 'Zeige meine kritischen Schwachstellen',\n 'notebooks.prompts.accessIssue.title': 'Hilf mir bei einem Zugriffsproblem',\n\n // Notebook view\n 'notebook.view.title': 'Unbenanntes Notizbuch',\n 'notebook.view.close': 'Notizbuch schließen',\n 'notebook.view.documents.count': '{{count}} Dokumente',\n 'notebook.view.documents.add': 'Hinzufügen',\n 'notebook.view.upload.heading':\n 'Laden Sie eine Ressource hoch, um zu beginnen',\n 'notebook.view.upload.action': 'Ressource hochladen',\n 'notebook.view.input.placeholder': 'Fragen Sie zu Ihren Dokumenten...',\n 'notebook.view.input.disabledTooltip':\n 'Wählen Sie mindestens eine geladene Ressource aus, um den Chat zu starten',\n 'notebook.view.sidebar.collapse': 'Seitenleiste einklappen',\n 'notebook.view.sidebar.expand': 'Seitenleiste ausklappen',\n 'notebook.view.sidebar.resize': 'Größe der Seitenleiste ändern',\n 'notebook.view.documents.uploading': 'Dokument wird hochgeladen',\n 'notebook.view.documents.maxReached':\n 'Maximal 10 Dokumente sind erlaubt. Löschen Sie ein Dokument, um ein neues hochzuladen.',\n 'notebook.upload.success': '{{fileName}} erfolgreich hochgeladen.',\n 'notebook.upload.failed': 'Hochladen von {{fileName}} fehlgeschlagen.',\n\n // Notebook upload modal\n 'notebook.upload.modal.title': 'Dokument zum Notizbuch hinzufügen',\n 'notebook.upload.modal.dragDropTitle': 'Dateien hierher ziehen und ablegen',\n 'notebook.upload.modal.browseButton': 'Hochladen',\n 'notebook.upload.modal.separator': 'oder',\n 'notebook.upload.modal.infoText':\n 'Akzeptierte Dateitypen: .md, .txt, .pdf, .json, .yaml, .log',\n 'notebook.upload.modal.selectedFiles':\n '{{count}} von {{max}} Dateien ausgewählt',\n 'notebook.upload.modal.addButton': 'Hinzufügen ({{count}})',\n 'notebook.upload.modal.removeFile': '{{fileName}} entfernen',\n 'notebook.upload.error.unsupportedType':\n 'Upload-Fehler: Nicht unterstützte Dateitypen gefunden. Bitte laden Sie nur unterstützte Dateitypen hoch.',\n 'notebook.upload.error.fileTooLarge':\n 'Upload-Fehler: Dateigröße überschreitet das Limit von 25 MB.',\n 'notebook.upload.error.tooManyFiles':\n 'Upload-Fehler: Maximal {{max}} Dateien erlaubt.',\n\n // Notebook overwrite modal\n 'notebook.overwrite.modal.title': 'Dateien überschreiben?',\n 'notebook.overwrite.modal.description':\n 'Die folgenden Dateien existieren bereits in diesem Notizbuch. Möchten Sie sie mit den neuen Versionen überschreiben?',\n 'notebook.overwrite.modal.action': 'Überschreiben',\n 'notebook.document.delete': 'Löschen',\n\n 'prompts.codeReadability.title': 'Hilfe zur Code-Lesbarkeit erhalten',\n 'prompts.codeReadability.message':\n 'Können Sie mir Techniken vorschlagen, mit denen ich meinen Code lesbarer und wartungsfreundlicher gestalten kann?',\n 'prompts.debugging.title': 'Hilfe beim Debuggen erhalten',\n 'prompts.debugging.message':\n 'Meine Anwendung gibt beim Versuch einer Verbindung zur Datenbank einen Fehler aus. Können Sie mir helfen, das Problem zu identifizieren?',\n 'prompts.developmentConcept.title': 'Ein Entwicklungskonzept erläutern',\n 'prompts.developmentConcept.message':\n 'Können Sie erklären, wie eine Microservices-Architektur funktioniert und welche Vorteile sie gegenüber einem monolithischen Design bietet?',\n 'prompts.codeOptimization.title':\n 'Vorschläge zur Codeoptimierung unterbreiten',\n 'prompts.codeOptimization.message':\n 'Können Sie gängige Methoden zur Codeoptimierung vorschlagen, um eine bessere Performance zu erzielen?',\n 'prompts.documentation.title': 'Zusammenfassung von Dokumentation',\n 'prompts.documentation.message':\n 'Können Sie die Dokumentation zur Implementierung der OAuth 2.0-Authentifizierung in einer Webanwendung zusammenfassen?',\n 'prompts.gitWorkflows.title': 'Workflows mit Git',\n 'prompts.gitWorkflows.message':\n 'Ich möchte Änderungen am Code in einem anderen Branch vornehmen, ohne meine bestehende Arbeit zu verlieren. Wie geht man dabei mit Git vor?',\n 'prompts.testingStrategies.title': 'Teststrategien vorschlagen',\n 'prompts.testingStrategies.message':\n 'Können Sie mir einige gängige Teststrategien empfehlen, die meine Anwendung robust und fehlerfrei machen?',\n 'prompts.sortingAlgorithms.title':\n 'Sortieralgorithmen verständlich erklären',\n 'prompts.sortingAlgorithms.message':\n 'Können Sie den Unterschied zwischen Quicksort und Mergesort erklären und wann man welchen Algorithmus verwendet?',\n 'prompts.eventDriven.title': 'Ereignisgesteuerte Architektur verstehen',\n 'prompts.eventDriven.message':\n 'Können Sie erklären, was ereignisgesteuerte Architektur bedeutet und wann ihre Verwendung in der Softwareentwicklung von Vorteil ist?',\n 'prompts.tekton.title': 'Mit Tekton deployen',\n 'prompts.tekton.message':\n 'Können Sie mir helfen, das Deployment meiner Anwendung mithilfe von Tekton-Pipelines zu automatisieren?',\n 'prompts.openshift.title': 'OpenShift-Deployment erstellen',\n 'prompts.openshift.message':\n 'Können Sie mich bei der Erstellung eines neuen Deployments in OpenShift für eine containerisierte Anwendung unterstützen?',\n 'prompts.rhdh.title': 'Erste Schritte mit dem Red Hat Developer Hub',\n 'prompts.rhdh.message':\n 'Können Sie mich bei den ersten Schritten zur Nutzung des Developer Hub als Entwickler unterstützen, z. B. beim Erkunden des Softwarekatalogs und beim Hinzufügen meines Dienstes?',\n 'conversation.delete.confirm.title': 'Chat löschen?',\n 'conversation.delete.confirm.message':\n 'Dieser Chat wird hier nicht mehr angezeigt. Dadurch werden auch zugehörige Aktivitäten wie Prompts, Antworten und Feedback aus Ihrer Lightspeed-Aktivität gelöscht.',\n 'conversation.delete.confirm.action': 'Löschen',\n 'conversation.rename.confirm.title': 'Chat umbenennen?',\n 'conversation.rename.confirm.action': 'Umbenennen',\n 'conversation.rename.placeholder': 'Chatname',\n 'permission.required.title': 'Fehlende Berechtigungen',\n 'permission.required.description':\n 'Um <subject/> anzuzeigen, wenden Sie sich an Ihren Administrator, um die Berechtigung <permissions/> zu erhalten.',\n 'permission.subject.plugin': 'das Lightspeed-Plugin',\n 'permission.subject.notebooks': 'die Lightspeed-Notizbücher',\n 'permission.notebooks.goBack': 'Zurück',\n 'lcore.notConfigured.title': 'Verbinden Sie ein LLM, um zu starten',\n 'lcore.notConfigured.description':\n 'Lightspeed erfordert ein registriertes LLM. Wenden Sie sich an den Plattformadministrator Ihrer Organisation, um die Einrichtung abzuschließen.',\n 'lcore.notConfigured.developerLightspeedDocs':\n 'Developer Lightspeed wird konfiguriert',\n 'lcore.notConfigured.backendDocs': 'Lightspeed-Backend einrichten',\n 'lcore.loadError.title': 'Modelle konnten nicht geladen werden',\n 'lcore.loadError.description':\n 'Das Lightspeed-Backend hat keine Modellliste zurückgegeben. Prüfen Sie, ob der Dienst läuft und erreichbar ist, und versuchen Sie es erneut.',\n 'disclaimer.withValidation':\n 'Diese Funktion nutzt KI-Technologie. Geben Sie bei Ihrer Eingabe keine persönlichen oder sonstigen sensiblen Informationen an. Interaktionen können dazu genutzt werden, die Produkte oder Dienstleistungen von Red Hat zu verbessern.',\n 'disclaimer.withoutValidation':\n 'Diese Funktion nutzt KI-Technologie. Geben Sie bei Ihrer Eingabe keine persönlichen oder sonstigen sensiblen Informationen an. Interaktionen können dazu genutzt werden, die Produkte oder Dienstleistungen von Red Hat zu verbessern.',\n 'footer.accuracy.label':\n 'KI-generierte Inhalte sollten vor der Verwendung stets überprüft werden.',\n 'common.cancel': 'Abbrechen',\n 'common.close': 'Schließen',\n 'common.readMore': 'Mehr lesen',\n 'common.retry': 'Erneut versuchen',\n 'common.loading': 'Wird geladen',\n 'common.noSearchResults': 'Keine Ergebnisse, die der Suche entsprechen',\n 'menu.newConversation': 'Neuer Chat',\n 'chatbox.header.title': 'Developer Lightspeed',\n 'chatbox.search.placeholder': 'Suchen',\n 'chatbox.provider.other': 'Andere',\n 'chatbox.emptyState.noPinnedChats': 'Keine angehefteten Chats',\n 'chatbox.emptyState.noRecentChats': 'Keine letzten Chats',\n 'chatbox.emptyState.noResults.title': 'Keine Ergebnisse gefunden',\n 'chatbox.emptyState.noResults.body':\n 'Passen Sie Ihre Suchanfrage an, und versuchen Sie es erneut. Überprüfen Sie Ihre Rechtschreibung, oder versuchen Sie es mit einem allgemeineren Begriff.',\n 'chatbox.welcome.greeting': 'Hallo {{userName}}',\n 'chatbox.welcome.description': 'Wie kann ich Ihnen heute helfen?',\n 'chatbox.message.placeholder':\n 'Senden Sie eine Nachricht, und laden Sie optional eine JSON-, YAML- oder TXT-Datei hoch ...',\n 'chatbox.fileUpload.failed': 'Datei-Upload fehlgeschlagen',\n 'chatbox.fileUpload.infoText':\n 'Unterstützte Dateitypen: .txt, .yaml und .json. Die maximale Dateigröße beträgt 25 MB.',\n 'aria.chatbotSelector': 'Chatbot-Auswahl',\n 'aria.important': 'Wichtig',\n 'aria.chatHistoryMenu': 'Chatverlauf-Menü',\n 'aria.closeDrawerPanel': 'Drawer-Fenster schließen',\n 'aria.search.placeholder': 'Suchen',\n 'aria.searchPreviousConversations': 'Vorherige Unterhaltungen durchsuchen',\n 'aria.resize': 'Größe ändern',\n 'aria.options.label': 'Optionen',\n 'aria.scroll.down': 'Zurück zum Ende',\n 'aria.scroll.up': 'Zurück zum Anfang',\n 'aria.settings.label': 'Chatbot-Optionen',\n 'aria.close': 'Chatbot schließen',\n 'modal.edit': 'Bearbeiten',\n 'modal.save': 'Speichern',\n 'modal.close': 'Schließen',\n 'modal.cancel': 'Abbrechen',\n 'conversation.delete': 'Löschen',\n 'conversation.rename': 'Umbenennen',\n 'conversation.addToPinnedChats': 'Anheften',\n 'conversation.removeFromPinnedChats': 'Lösen',\n 'conversation.announcement.userMessage':\n 'Nachricht vom Benutzer: {{prompt}}. Nachricht vom Bot wird geladen.',\n 'user.guest': 'Gast',\n 'conversation.announcement.responseStopped': 'Antwort angehalten.',\n 'user.loading': '...',\n 'tooltip.attach': 'Anhängen',\n 'tooltip.send': 'Senden',\n 'tooltip.microphone.active': 'Überwachen beenden',\n 'tooltip.microphone.inactive': 'Mikrofon verwenden',\n 'tooltip.expandHistoryPanel': 'Chatverlauf erweitern',\n 'tooltip.collapseHistoryPanel': 'Chatverlauf minimieren',\n 'tooltip.quickNewChat': 'Neuer Chat',\n 'button.newChat': 'Neuer Chat',\n 'tooltip.chatHistoryMenu': 'Chatverlauf-Menü',\n 'tooltip.responseRecorded': 'Antwort aufgezeichnet',\n 'tooltip.backToTop': 'Zurück zum Anfang',\n 'tooltip.backToBottom': 'Zurück zum Ende',\n 'tooltip.settings': 'Chatbot-Optionen',\n 'tooltip.close': 'Schließen',\n 'tooltip.fab.open': 'Lightspeed öffnen',\n 'tooltip.fab.close': 'Lightspeed schließen',\n 'attach.menu.title': 'Anhängen',\n 'attach.menu.description': 'Eine JSON-, YAML- oder TXT-Datei anhängen',\n 'modal.title.preview': 'Anhang in der Vorschau anzeigen',\n 'modal.title.edit': 'Anhang bearbeiten',\n 'icon.lightspeed.alt': 'Lightspeed-Symbol',\n 'icon.permissionRequired.alt': \"Symbol für 'Berechtigung erforderlich'\",\n 'message.options.label': 'Optionen',\n 'file.upload.error.alreadyExists': 'Datei existiert bereits.',\n 'file.upload.error.multipleFiles':\n 'Es wurden mehr als eine Datei hochgeladen.',\n 'file.upload.error.unsupportedType':\n 'Nicht unterstützter Dateityp. Unterstützte Typen: .txt, .yaml und .json.',\n 'file.upload.error.fileTooLarge':\n 'Ihre Dateigröße ist zu groß. Bitte stellen Sie sicher, dass Ihre Datei kleiner als 25 MB ist.',\n 'file.upload.error.readFailed':\n 'Datei konnte nicht gelesen werden: {{errorMessage}}',\n 'error.context.fileAttachment':\n 'useFileAttachmentContext muss innerhalb eines FileAttachmentContextProvider liegen',\n 'feedback.form.title': 'Warum haben Sie diese Bewertung gewählt?',\n 'feedback.form.textAreaPlaceholder':\n 'Geben Sie optional zusätzliches Feedback an',\n 'feedback.form.submitWord': 'Absenden',\n 'feedback.tooltips.goodResponse': 'Gute Antwort',\n 'feedback.tooltips.badResponse': 'Schlechte Antwort',\n 'feedback.tooltips.copied': 'Kopiert',\n 'feedback.tooltips.copy': 'Kopieren',\n 'feedback.tooltips.listening': 'Überwachung',\n 'feedback.tooltips.listen': 'Überwachen',\n 'feedback.quickResponses.positive.helpful': 'Hilfreiche Informationen',\n 'feedback.quickResponses.positive.easyToUnderstand': 'Leicht verständlich',\n 'feedback.quickResponses.positive.resolvedIssue':\n 'Mein Problem wurde gelöst',\n 'feedback.quickResponses.negative.didntAnswer':\n 'Meine Frage wurde nicht beantwortet',\n 'feedback.quickResponses.negative.hardToUnderstand': 'Schwer zu verstehen',\n 'feedback.quickResponses.negative.notHelpful': 'Nicht hilfreich',\n 'feedback.completion.title': 'Feedback übermittelt',\n 'feedback.completion.body':\n 'Wir haben Ihre Antwort erhalten. Vielen Dank für Ihr Feedback!',\n 'conversation.category.pinnedChats': 'Angeheftet',\n 'conversation.category.recent': 'Neueste',\n 'settings.pinned.enable': 'Angeheftete Chats aktivieren',\n 'settings.pinned.disable': 'Angeheftete Chats deaktivieren',\n 'settings.pinned.enabled.description':\n 'Angeheftete Chats sind derzeit aktiviert',\n 'settings.pinned.disabled.description':\n 'Angeheftete Chats sind derzeit deaktiviert.',\n 'settings.mcp.label': 'MCP-Einstellungen',\n 'mcp.settings.title': 'MCP-Server',\n 'mcp.settings.selectedCount':\n '{{selectedCount}} von {{totalCount}} ausgewählt',\n 'mcp.settings.closeAriaLabel': 'MCP-Einstellungen schließen',\n 'mcp.settings.readOnlyAccess':\n 'Sie haben schreibgeschützten Zugriff auf MCP-Server.',\n 'mcp.settings.tableAriaLabel': 'MCP-Server-Tabelle',\n 'mcp.settings.enabled': 'Aktiviert',\n 'mcp.settings.name': 'Name',\n 'mcp.settings.status': 'Status',\n 'mcp.settings.edit': 'Bearbeiten',\n 'mcp.settings.loading': 'MCP-Server werden geladen...',\n 'mcp.settings.noneAvailable': 'Keine MCP-Server verfügbar.',\n 'mcp.settings.status.disabled': 'Deaktiviert',\n 'mcp.settings.status.tokenRequired': 'Token erforderlich',\n 'mcp.settings.status.failed': 'Fehlgeschlagen',\n 'mcp.settings.status.oneTool': '{{count}} Tool',\n 'mcp.settings.status.manyTools': '{{count}} Tools',\n 'mcp.settings.status.unknown': 'Unbekannt',\n 'mcp.settings.toggleServerAriaLabel': '{{serverName}} umschalten',\n 'mcp.settings.editServerAriaLabel': '{{serverName}} bearbeiten',\n 'mcp.settings.configureServerTitle': 'Server {{serverName}} konfigurieren',\n 'mcp.settings.closeConfigureModalAriaLabel':\n 'Konfigurationsdialog schließen',\n 'mcp.settings.modalDescription':\n 'Anmeldedaten werden verschlüsselt gespeichert und sind auf Ihr Profil beschränkt. Lightspeed arbeitet mit genau Ihren Berechtigungen.',\n 'mcp.settings.savedToken': 'Gespeicherter Token',\n 'mcp.settings.personalAccessToken': 'Persönlicher Zugriffstoken',\n 'mcp.settings.usingAdminCredential':\n 'Administratoranmeldedaten werden verwendet. Geben Sie einen persönlichen Token ein, um ihn für Ihr Konto zu überschreiben.',\n 'mcp.settings.enterToken': 'Geben Sie Ihren Token ein',\n 'mcp.settings.removePersonalToken': 'Persönlichen Token entfernen',\n 'mcp.settings.token.clearAriaLabel': 'Tokeneingabe löschen',\n 'mcp.settings.token.validating': 'Token wird validiert...',\n 'mcp.settings.token.savingAndValidating':\n 'Token wird gespeichert und validiert...',\n 'mcp.settings.token.urlUnavailableForValidation':\n 'Token kann nicht validiert werden, da die Server-URL nicht verfügbar ist.',\n 'mcp.settings.token.invalidCredentials':\n 'Ungültige Anmeldedaten. Überprüfen Sie Server-URL und Token.',\n 'mcp.settings.token.validationFailed':\n 'Validierung fehlgeschlagen. Überprüfen Sie Server-URL und Token.',\n 'mcp.settings.token.connectionSuccessful': 'Verbindung erfolgreich',\n 'toolCall.header': 'Antwort des Tools: {{toolName}}',\n 'toolCall.thinking': 'Hat {{seconds}} Sekunden nachgedacht',\n 'toolCall.executionTime': 'Ausführungszeit: ',\n 'toolCall.parameters': 'Parameter',\n 'toolCall.response': 'Antwort',\n 'toolCall.showMore': 'Mehr anzeigen',\n 'toolCall.showLess': 'Weniger anzeigen',\n 'toolCall.loading': 'Tool wird ausgeführt...',\n 'toolCall.executing': 'Tool wird ausgeführt...',\n 'toolCall.copyResponse': 'Antwort kopieren',\n 'toolCall.summary': 'Hier ist eine Zusammenfassung Ihrer Antwort.',\n 'toolCall.mcpServer': 'MCP-Server',\n 'settings.displayMode.label': 'Anzeigemodus',\n 'settings.displayMode.overlay': 'Overlay',\n 'settings.displayMode.docked': 'An Fenster andocken',\n 'settings.displayMode.fullscreen': 'Vollbild',\n 'sort.label': 'Unterhaltungen sortieren',\n 'sort.newest': 'Datum (neuestes zuerst)',\n 'sort.oldest': 'Datum (ältestes zuerst)',\n 'sort.alphabeticalAsc': 'Name (A-Z)',\n 'sort.alphabeticalDesc': 'Name (Z-A)',\n 'reasoning.thinking': 'Denkvorgang anzeigen',\n },\n});\n\nexport default lightspeedTranslationDe;\n"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ const lightspeedTranslationEs = createTranslationMessages({
|
|
|
9
9
|
"tabs.ariaLabel": "Vistas de Lightspeed",
|
|
10
10
|
"tabs.chat": "Chat",
|
|
11
11
|
"tabs.notebooks": "Cuadernos",
|
|
12
|
+
"tabs.notebooks.devPreview": "Vista previa para desarrolladores",
|
|
12
13
|
"tabs.notebooks.empty": "El contenido de los cuadernos va aqu\xED.",
|
|
13
14
|
"notebooks.title": "Mis cuadernos",
|
|
14
15
|
"notebooks.empty.title": "No hay cuadernos creados",
|
|
@@ -31,6 +32,10 @@ const lightspeedTranslationEs = createTranslationMessages({
|
|
|
31
32
|
"notebooks.updated.days": "Actualizado hace {{days}} d\xEDas",
|
|
32
33
|
"notebooks.updated.on": "Actualizado el",
|
|
33
34
|
"notebooks.card.openAria": "Abrir el cuaderno {{name}}",
|
|
35
|
+
// Notebook sample prompts
|
|
36
|
+
"notebooks.prompts.coreConcepts.title": "\xBFCu\xE1les son los conceptos clave?",
|
|
37
|
+
"notebooks.prompts.vulnerabilities.title": "Mostrar mis vulnerabilidades cr\xEDticas",
|
|
38
|
+
"notebooks.prompts.accessIssue.title": "Ay\xFAdame con un problema de acceso",
|
|
34
39
|
// Notebook view
|
|
35
40
|
"notebook.view.title": "Cuaderno sin t\xEDtulo",
|
|
36
41
|
"notebook.view.close": "Cerrar cuaderno",
|