Merge remote-tracking branch 'origin/main' into feat/queue-based-graph-engine

This commit is contained in:
-LAN-
2025-08-29 13:22:13 +08:00
108 changed files with 5144 additions and 2427 deletions

View File

@ -5,6 +5,9 @@ LABEL maintainer="takatost@gmail.com"
# if you located in China, you can use aliyun mirror to speed up
# RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
# if you located in China, you can use taobao registry to speed up
# RUN npm config set registry https://registry.npmmirror.com
RUN apk add --no-cache tzdata
RUN corepack enable
ENV PNPM_HOME="/pnpm"
@ -22,9 +25,6 @@ COPY pnpm-lock.yaml .
# Use packageManager from package.json
RUN corepack install
# if you located in China, you can use taobao registry to speed up
# RUN pnpm install --frozen-lockfile --registry https://registry.npmmirror.com/
RUN pnpm install --frozen-lockfile
# build resources

View File

@ -407,9 +407,13 @@ export const useChatWithHistory = (installedAppInfo?: InstalledApp) => {
currentChatInstanceRef.current.handleStop()
setShowNewConversationItemInList(true)
handleChangeConversation('')
handleNewConversationInputsChange(await getRawInputsFromUrlParams())
const conversationInputs: Record<string, any> = {}
inputsForms.forEach((item: any) => {
conversationInputs[item.variable] = item.default || null
})
handleNewConversationInputsChange(conversationInputs)
setClearChatList(true)
}, [handleChangeConversation, setShowNewConversationItemInList, handleNewConversationInputsChange, setClearChatList])
}, [handleChangeConversation, setShowNewConversationItemInList, handleNewConversationInputsChange, setClearChatList, inputsForms])
const handleUpdateConversationList = useCallback(() => {
mutateAppConversationData()
mutateAppPinnedConversationData()

View File

@ -137,24 +137,14 @@ const Answer: FC<AnswerProps> = ({
/>
)
}
{/** Render the normal steps */}
{/** Render workflow process */}
{
workflowProcess && !hideProcessDetail && (
workflowProcess && (
<WorkflowProcessItem
data={workflowProcess}
item={item}
hideProcessDetail={hideProcessDetail}
/>
)
}
{/** Hide workflow steps by it's settings in siteInfo */}
{
workflowProcess && hideProcessDetail && appData && (
<WorkflowProcessItem
data={workflowProcess}
item={item}
hideProcessDetail={hideProcessDetail}
readonly={!appData.site.show_workflow_steps}
readonly={hideProcessDetail && appData ? !appData.site.show_workflow_steps : undefined}
/>
)
}

View File

@ -39,6 +39,8 @@ const WorkflowProcessItem = ({
setCollapse(!expand)
}, [expand])
if (readonly) return null
return (
<div
className={cn(
@ -51,8 +53,8 @@ const WorkflowProcessItem = ({
)}
>
<div
className={cn('flex cursor-pointer items-center', !collapse && 'px-1.5', readonly && 'cursor-default')}
onClick={() => !readonly && setCollapse(!collapse)}
className={cn('flex cursor-pointer items-center', !collapse && 'px-1.5')}
onClick={() => setCollapse(!collapse)}
>
{
running && (
@ -72,10 +74,10 @@ const WorkflowProcessItem = ({
<div className={cn('system-xs-medium text-text-secondary', !collapse && 'grow')}>
{t('workflow.common.workflowProcess')}
</div>
{!readonly && <RiArrowRightSLine className={cn('ml-1 h-4 w-4 text-text-tertiary', !collapse && 'rotate-90')} />}
<RiArrowRightSLine className={cn('ml-1 h-4 w-4 text-text-tertiary', !collapse && 'rotate-90')} />
</div>
{
!collapse && !readonly && (
!collapse && (
<div className='mt-1.5'>
{
<TracingPanel

View File

@ -53,11 +53,18 @@ The text generation application offers non-session support and is ideal for tran
The rules are defined by the developer and need to ensure that the user identifier is unique within the application. The Service API does not share conversations created by the WebApp.
</Property>
<Property name='files' type='array[object]' key='files'>
File list, suitable for inputting files (images) combined with text understanding and answering questions, available only when the model supports Vision capability.
- `type` (string) Supported type: `image` (currently only supports image type)
- `transfer_method` (string) Transfer method, `remote_url` for image URL / `local_file` for file upload
- `url` (string) Image URL (when the transfer method is `remote_url`)
- `upload_file_id` (string) Uploaded file ID, which must be obtained by uploading through the File Upload API in advance (when the transfer method is `local_file`)
File list, suitable for inputting files combined with text understanding and answering questions, available only when the model supports Vision/Video capability.
- `type` (string) Supported type:
- `document` Supported types include: 'TXT', 'MD', 'MARKDOWN', 'MDX', 'PDF', 'HTML', 'XLSX', 'XLS', 'VTT', 'PROPERTIES', 'DOC', 'DOCX', 'CSV', 'EML', 'MSG', 'PPTX', 'PPT', 'XML', 'EPUB'
- `image` Supported types include: 'JPG', 'JPEG', 'PNG', 'GIF', 'WEBP', 'SVG'
- `audio` Supported types include: 'MP3', 'M4A', 'WAV', 'WEBM', 'MPGA'
- `video` Supported types include: 'MP4', 'MOV', 'MPEG', 'WEBM'
- `custom` Supported types include: other file types
- `transfer_method` (string) Transfer method:
- `remote_url`: File URL.
- `local_file`: Upload file.
- `url` File URL. (Only when transfer method is `remote_url`).
- `upload_file_id` Upload file ID. (Only when transfer method is `local_file`).
</Property>
</Properties>

View File

@ -53,11 +53,18 @@ import { Row, Col, Properties, Property, Heading, SubProperty, Paragraph } from
アプリケーション内で開発者が一意に定義する必要があります。
</Property>
<Property name='files' type='array[object]' key='files'>
ファイルリスト、モデルがVision機能をサポートしている場合のみ、テキスト理解質問応答組み合わせたファイル(画像)の入力に適しています。
- `type` (string) サポートされるタイプ:`image`(現在は画像タイプのみサポート)
- `transfer_method` (string) 転送方法、画像URLの場合は`remote_url` / ファイルアップロードの場合は`local_file`
- `url` (string) 画像URL転送方法が`remote_url`の場合)
- `upload_file_id` (string) アップロードされたファイルID、事前にファイルアップロードAPIを通じてアップロードする必要があります転送方法が`local_file`の場合)
ファイルリスト、モデルが Vision/Video 機能をサポートしている場合に限り、ファイルをテキスト理解および質問応答組み合わせて入力するのに適しています。
- `type` (string) サポートされるタイプ:
- `document` サポートされるタイプには以下が含まれます:'TXT', 'MD', 'MARKDOWN', 'MDX', 'PDF', 'HTML', 'XLSX', 'XLS', 'VTT', 'PROPERTIES', 'DOC', 'DOCX', 'CSV', 'EML', 'MSG', 'PPTX', 'PPT', 'XML', 'EPUB'
- `image` サポートされるタイプには以下が含まれます:'JPG', 'JPEG', 'PNG', 'GIF', 'WEBP', 'SVG'
- `audio` サポートされるタイプには以下が含まれます:'MP3', 'M4A', 'WAV', 'WEBM', 'MPGA'
- `video` サポートされるタイプには以下が含まれます:'MP4', 'MOV', 'MPEG', 'WEBM'
- `custom` サポートされるタイプには以下が含まれます:その他のファイルタイプ
- `transfer_method` (string) 転送方法:
- `remote_url`: ファイルのURL。
- `local_file`: ファイルをアップロード。
- `url` ファイルのURL。転送方法が `remote_url` の場合のみ)。
- `upload_file_id` アップロードされたファイルID。転送方法が `local_file` の場合のみ)。
</Property>
</Properties>

View File

@ -51,12 +51,17 @@ import { Row, Col, Properties, Property, Heading, SubProperty } from '../md.tsx'
由开发者定义规则,需保证用户标识在应用内唯一。
</Property>
<Property name='files' type='array[object]' key='files'>
上传的文件。
- `type` (string) 支持类型:图片 `image`(目前仅支持图片格式) 。
- `transfer_method` (string) 传递方式:
- `remote_url`: 图片地址。
文件列表,适用于传入文件结合文本理解并回答问题,仅当模型支持 Vision/Video 能力时可用
- `type` (string) 支持类型:
- `document` 具体类型包含:'TXT', 'MD', 'MARKDOWN', 'MDX', 'PDF', 'HTML', 'XLSX', 'XLS', 'VTT', 'PROPERTIES', 'DOC', 'DOCX', 'CSV', 'EML', 'MSG', 'PPTX', 'PPT', 'XML', 'EPUB'
- `image` 具体类型包含:'JPG', 'JPEG', 'PNG', 'GIF', 'WEBP', 'SVG'
- `audio` 具体类型包含:'MP3', 'M4A', 'WAV', 'WEBM', 'MPGA'
- `video` 具体类型包含:'MP4', 'MOV', 'MPEG', 'WEBM'
- `custom` 具体类型包含:其他文件类型
- `transfer_method` (string) 传递方式:
- `remote_url`: 文件地址。
- `local_file`: 上传文件。
- `url` 图片地址。(仅当传递方式为 `remote_url` 时)。
- `url` 文件地址。(仅当传递方式为 `remote_url` 时)。
- `upload_file_id` 上传文件 ID。仅当传递方式为 `local_file `时)。
</Property>
</Properties>

View File

@ -57,16 +57,18 @@ Chat applications support session persistence, allowing previous chat history to
Conversation ID, to continue the conversation based on previous chat records, it is necessary to pass the previous message's conversation_id.
</Property>
<Property name='files' type='array[object]' key='files'>
File list, suitable for inputting files combined with text understanding and answering questions, available only when the model supports Vision capability.
File list, suitable for inputting files combined with text understanding and answering questions, available only when the model supports Vision/Video capability.
- `type` (string) Supported type:
- `document` ('TXT', 'MD', 'MARKDOWN', 'PDF', 'HTML', 'XLSX', 'XLS', 'DOCX', 'CSV', 'EML', 'MSG', 'PPTX', 'PPT', 'XML', 'EPUB')
- `image` ('JPG', 'JPEG', 'PNG', 'GIF', 'WEBP', 'SVG')
- `audio` ('MP3', 'M4A', 'WAV', 'WEBM', 'AMR')
- `video` ('MP4', 'MOV', 'MPEG', 'MPGA')
- `custom` (Other file types)
- `transfer_method` (string) Transfer method, `remote_url` for image URL / `local_file` for file upload
- `url` (string) Image URL (when the transfer method is `remote_url`)
- `upload_file_id` (string) Uploaded file ID, which must be obtained by uploading through the File Upload API in advance (when the transfer method is `local_file`)
- `document` Supported types include: 'TXT', 'MD', 'MARKDOWN', 'MDX', 'PDF', 'HTML', 'XLSX', 'XLS', 'VTT', 'PROPERTIES', 'DOC', 'DOCX', 'CSV', 'EML', 'MSG', 'PPTX', 'PPT', 'XML', 'EPUB'
- `image` Supported types include: 'JPG', 'JPEG', 'PNG', 'GIF', 'WEBP', 'SVG'
- `audio` Supported types include: 'MP3', 'M4A', 'WAV', 'WEBM', 'MPGA'
- `video` Supported types include: 'MP4', 'MOV', 'MPEG', 'WEBM'
- `custom` Supported types include: other file types
- `transfer_method` (string) Transfer method:
- `remote_url`: File URL.
- `local_file`: Upload file.
- `url` File URL. (Only when transfer method is `remote_url`).
- `upload_file_id` Upload file ID. (Only when transfer method is `local_file`).
</Property>
<Property name='auto_generate_name' type='bool' key='auto_generate_name'>
Auto-generate title, default is `true`.

View File

@ -57,16 +57,18 @@ import { Row, Col, Properties, Property, Heading, SubProperty, Paragraph } from
会話ID、以前のチャット記録に基づいて会話を続けるには、以前のメッセージのconversation_idを渡す必要があります。
</Property>
<Property name='files' type='array[object]' key='files'>
ファイルリスト、テキスト理解と質問への回答を組み合わせたファイルの入力に適しており、モデルがビジョン機能をサポートしている場合にのみ利用可能です。
- `type` (string) サポートされているタイプ:
- `document` ('TXT', 'MD', 'MARKDOWN', 'PDF', 'HTML', 'XLSX', 'XLS', 'DOCX', 'CSV', 'EML', 'MSG', 'PPTX', 'PPT', 'XML', 'EPUB')
- `image` ('JPG', 'JPEG', 'PNG', 'GIF', 'WEBP', 'SVG')
- `audio` ('MP3', 'M4A', 'WAV', 'WEBM', 'AMR')
- `video` ('MP4', 'MOV', 'MPEG', 'MPGA')
- `custom` (他のファイルタイプ)
- `transfer_method` (string) 転送方法、画像URLの場合は`remote_url` / ファイルアップロードの場合は`local_file`
- `url` (string) 画像URL転送方法が`remote_url`の場合)
- `upload_file_id` (string) アップロードされたファイルID、事前にファイルアップロードAPIを通じて取得する必要があります転送方法が`local_file`の場合)
ファイルリスト、モデルが Vision/Video 機能をサポートしている場合に限り、ファイルをテキスト理解および質問応答に組み合わせて入力するのに適しています。
- `type` (string) サポートされるタイプ:
- `document` サポートされるタイプには以下が含まれます:'TXT', 'MD', 'MARKDOWN', 'MDX', 'PDF', 'HTML', 'XLSX', 'XLS', 'VTT', 'PROPERTIES', 'DOC', 'DOCX', 'CSV', 'EML', 'MSG', 'PPTX', 'PPT', 'XML', 'EPUB'
- `image` サポートされるタイプには以下が含まれます:'JPG', 'JPEG', 'PNG', 'GIF', 'WEBP', 'SVG'
- `audio` サポートされるタイプには以下が含まれます:'MP3', 'M4A', 'WAV', 'WEBM', 'MPGA'
- `video` サポートされるタイプには以下が含まれます:'MP4', 'MOV', 'MPEG', 'WEBM'
- `custom` サポートされるタイプには以下が含まれます:その他のファイルタイプ
- `transfer_method` (string) 転送方法:
- `remote_url`: ファイルのURL。
- `local_file`: ファイルをアップロード。
- `url` ファイルのURL。転送方法が `remote_url` の場合のみ)。
- `upload_file_id` アップロードされたファイルID。転送方法が `local_file` の場合のみ)。
</Property>
<Property name='auto_generate_name' type='bool' key='auto_generate_name'>
タイトルを自動生成、デフォルトは`true`。

View File

@ -55,17 +55,17 @@ import { Row, Col, Properties, Property, Heading, SubProperty } from '../md.tsx'
(选填)会话 ID需要基于之前的聊天记录继续对话必须传之前消息的 conversation_id。
</Property>
<Property name='files' type='array[object]' key='files'>
文件列表,适用于传入文件结合文本理解并回答问题,仅当模型支持 Vision 能力时可用。
文件列表,适用于传入文件结合文本理解并回答问题,仅当模型支持 Vision/Video 能力时可用。
- `type` (string) 支持类型:
- `document` 具体类型包含:'TXT', 'MD', 'MARKDOWN', 'PDF', 'HTML', 'XLSX', 'XLS', 'DOCX', 'CSV', 'EML', 'MSG', 'PPTX', 'PPT', 'XML', 'EPUB'
- `document` 具体类型包含:'TXT', 'MD', 'MARKDOWN', 'MDX', 'PDF', 'HTML', 'XLSX', 'XLS', 'VTT', 'PROPERTIES', 'DOC', 'DOCX', 'CSV', 'EML', 'MSG', 'PPTX', 'PPT', 'XML', 'EPUB'
- `image` 具体类型包含:'JPG', 'JPEG', 'PNG', 'GIF', 'WEBP', 'SVG'
- `audio` 具体类型包含:'MP3', 'M4A', 'WAV', 'WEBM', 'AMR'
- `video` 具体类型包含:'MP4', 'MOV', 'MPEG', 'MPGA'
- `audio` 具体类型包含:'MP3', 'M4A', 'WAV', 'WEBM', 'MPGA'
- `video` 具体类型包含:'MP4', 'MOV', 'MPEG', 'WEBM'
- `custom` 具体类型包含:其他文件类型
- `transfer_method` (string) 传递方式:
- `remote_url`: 图片地址。
- `remote_url`: 文件地址。
- `local_file`: 上传文件。
- `url` 图片地址。(仅当传递方式为 `remote_url` 时)。
- `url` 文件地址。(仅当传递方式为 `remote_url` 时)。
- `upload_file_id` 上传文件 ID。仅当传递方式为 `local_file `时)。
</Property>
<Property name='auto_generate_name' type='bool' key='auto_generate_name'>

View File

@ -56,11 +56,18 @@ Chat applications support session persistence, allowing previous chat history to
Conversation ID, to continue the conversation based on previous chat records, it is necessary to pass the previous message's conversation_id.
</Property>
<Property name='files' type='array[object]' key='files'>
File list, suitable for inputting files (images) combined with text understanding and answering questions, available only when the model supports Vision capability.
- `type` (string) Supported type: `image` (currently only supports image type)
- `transfer_method` (string) Transfer method, `remote_url` for image URL / `local_file` for file upload
- `url` (string) Image URL (when the transfer method is `remote_url`)
- `upload_file_id` (string) Uploaded file ID, which must be obtained by uploading through the File Upload API in advance (when the transfer method is `local_file`)
File list, suitable for inputting files combined with text understanding and answering questions, available only when the model supports Vision/Video capability.
- `type` (string) Supported type:
- `document` Supported types include: 'TXT', 'MD', 'MARKDOWN', 'MDX', 'PDF', 'HTML', 'XLSX', 'XLS', 'VTT', 'PROPERTIES', 'DOC', 'DOCX', 'CSV', 'EML', 'MSG', 'PPTX', 'PPT', 'XML', 'EPUB'
- `image` Supported types include: 'JPG', 'JPEG', 'PNG', 'GIF', 'WEBP', 'SVG'
- `audio` Supported types include: 'MP3', 'M4A', 'WAV', 'WEBM', 'MPGA'
- `video` Supported types include: 'MP4', 'MOV', 'MPEG', 'WEBM'
- `custom` Supported types include: other file types
- `transfer_method` (string) Transfer method:
- `remote_url`: File URL.
- `local_file`: Upload file.
- `url` File URL. (Only when transfer method is `remote_url`).
- `upload_file_id` Upload file ID. (Only when transfer method is `local_file`).
</Property>
<Property name='auto_generate_name' type='bool' key='auto_generate_name'>
Auto-generate title, default is `true`.

View File

@ -56,11 +56,18 @@ import { Row, Col, Properties, Property, Heading, SubProperty, Paragraph } from
会話ID、以前のチャット記録に基づいて会話を続けるには、前のメッセージのconversation_idを渡す必要があります。
</Property>
<Property name='files' type='array[object]' key='files'>
ファイルリスト、テキスト理解と質問への回答を組み合わせたファイル(画像)の入力に適しており、モデルがビジョン機能をサポートしている場合にのみ利用可能です。
- `type` (string) サポートされているタイプ:`image`(現在は画像タイプのみサポート)
- `transfer_method` (string) 転送方法、画像URLの場合は`remote_url` / ファイルアップロードの場合は`local_file`
- `url` (string) 画像URL転送方法が`remote_url`の場合)
- `upload_file_id` (string) アップロードされたファイルID、事前にファイルアップロードAPIを通じて取得する必要があります転送方法が`local_file`の場合)
ファイルリスト、モデルが Vision/Video 機能をサポートしている場合に限り、ファイルをテキスト理解および質問応答に組み合わせて入力するのに適しています。
- `type` (string) サポートされるタイプ:
- `document` サポートされるタイプには以下が含まれます:'TXT', 'MD', 'MARKDOWN', 'MDX', 'PDF', 'HTML', 'XLSX', 'XLS', 'VTT', 'PROPERTIES', 'DOC', 'DOCX', 'CSV', 'EML', 'MSG', 'PPTX', 'PPT', 'XML', 'EPUB'
- `image` サポートされるタイプには以下が含まれます:'JPG', 'JPEG', 'PNG', 'GIF', 'WEBP', 'SVG'
- `audio` サポートされるタイプには以下が含まれます:'MP3', 'M4A', 'WAV', 'WEBM', 'MPGA'
- `video` サポートされるタイプには以下が含まれます:'MP4', 'MOV', 'MPEG', 'WEBM'
- `custom` サポートされるタイプには以下が含まれます:その他のファイルタイプ
- `transfer_method` (string) 転送方法:
- `remote_url`: ファイルのURL。
- `local_file`: ファイルをアップロード。
- `url` ファイルのURL。転送方法が `remote_url` の場合のみ)。
- `upload_file_id` アップロードされたファイルID。転送方法が `local_file` の場合のみ)。
</Property>
<Property name='auto_generate_name' type='bool' key='auto_generate_name'>
タイトルを自動生成します。デフォルトは`true`です。

View File

@ -55,12 +55,17 @@ import { Row, Col, Properties, Property, Heading, SubProperty } from '../md.tsx'
(选填)会话 ID需要基于之前的聊天记录继续对话必须传之前消息的 conversation_id。
</Property>
<Property name='files' type='array[object]' key='files'>
上传的文件。
- `type` (string) 支持类型:图片 `image`(目前仅支持图片格式) 。
文件列表,适用于传入文件结合文本理解并回答问题,仅当模型支持 Vision/Video 能力时可用
- `type` (string) 支持类型:
- `document` 具体类型包含:'TXT', 'MD', 'MARKDOWN', 'MDX', 'PDF', 'HTML', 'XLSX', 'XLS', 'VTT', 'PROPERTIES', 'DOC', 'DOCX', 'CSV', 'EML', 'MSG', 'PPTX', 'PPT', 'XML', 'EPUB'
- `image` 具体类型包含:'JPG', 'JPEG', 'PNG', 'GIF', 'WEBP', 'SVG'
- `audio` 具体类型包含:'MP3', 'M4A', 'WAV', 'WEBM', 'MPGA'
- `video` 具体类型包含:'MP4', 'MOV', 'MPEG', 'WEBM'
- `custom` 具体类型包含:其他文件类型
- `transfer_method` (string) 传递方式:
- `remote_url`: 图片地址。
- `remote_url`: 文件地址。
- `local_file`: 上传文件。
- `url` 图片地址。(仅当传递方式为 `remote_url` 时)。
- `url` 文件地址。(仅当传递方式为 `remote_url` 时)。
- `upload_file_id` 上传文件 ID。仅当传递方式为 `local_file `时)。
</Property>
<Property name='auto_generate_name' type='bool' key='auto_generate_name'>

View File

@ -39,14 +39,16 @@ Workflow applications offers non-session support and is ideal for translation, a
File Array type variable is suitable for inputting files combined with text understanding and answering questions, available only when the model supports file parsing and understanding capability.
If the variable is of File Array type, the corresponding value should be a list whose elements contain following attributions:
- `type` (string) Supported type:
- `document` ('TXT', 'MD', 'MARKDOWN', 'PDF', 'HTML', 'XLSX', 'XLS', 'DOCX', 'CSV', 'EML', 'MSG', 'PPTX', 'PPT', 'XML', 'EPUB')
- `image` ('JPG', 'JPEG', 'PNG', 'GIF', 'WEBP', 'SVG')
- `audio` ('MP3', 'M4A', 'WAV', 'WEBM', 'AMR')
- `video` ('MP4', 'MOV', 'MPEG', 'MPGA')
- `custom` (Other file types)
- `transfer_method` (string) Transfer method, `remote_url` for image URL / `local_file` for file upload
- `url` (string) Image URL (when the transfer method is `remote_url`)
- `upload_file_id` (string) Uploaded file ID, which must be obtained by uploading through the File Upload API in advance (when the transfer method is `local_file`)
- `document` Supported types include: 'TXT', 'MD', 'MARKDOWN', 'MDX', 'PDF', 'HTML', 'XLSX', 'XLS', 'VTT', 'PROPERTIES', 'DOC', 'DOCX', 'CSV', 'EML', 'MSG', 'PPTX', 'PPT', 'XML', 'EPUB'
- `image` Supported types include: 'JPG', 'JPEG', 'PNG', 'GIF', 'WEBP', 'SVG'
- `audio` Supported types include: 'MP3', 'M4A', 'WAV', 'WEBM', 'MPGA'
- `video` Supported types include: 'MP4', 'MOV', 'MPEG', 'WEBM'
- `custom` Supported types include: other file types
- `transfer_method` (string) Transfer method:
- `remote_url`: File URL.
- `local_file`: Upload file.
- `url` File URL. (Only when transfer method is `remote_url`).
- `upload_file_id` Upload file ID. (Only when transfer method is `local_file`).
- `response_mode` (string) Required
The mode of response return, supporting:

View File

@ -39,16 +39,18 @@ import { Row, Col, Properties, Property, Heading, SubProperty, Paragraph } from
ファイルリストは、テキスト理解と質問への回答を組み合わせたファイルの入力に適しています。モデルがファイルの解析と理解機能をサポートしている場合にのみ使用できます。
変数がファイルリストの場合、リストの各要素は以下の属性を持つ必要があります。
- `type` (string) サポートされているタイプ:
- `document` ('TXT', 'MD', 'MARKDOWN', 'PDF', 'HTML', 'XLSX', 'XLS', 'DOCX', 'CSV', 'EML', 'MSG', 'PPTX', 'PPT', 'XML', 'EPUB')
- `image` ('JPG', 'JPEG', 'PNG', 'GIF', 'WEBP', 'SVG')
- `audio` ('MP3', 'M4A', 'WAV', 'WEBM', 'AMR')
- `video` ('MP4', 'MOV', 'MPEG', 'MPGA')
- `custom` (他のファイルタイプ)
- `transfer_method` (string) 転送方法、画像URLの場合は`remote_url` / ファイルアップロードの場合は`local_file`
- `url` (string) 画像URL転送方法が`remote_url`の場合)
- `upload_file_id` (string) アップロードされたファイルID、事前にファイルアップロードAPIを通じて取得する必要があります転送方法が`local_file`の場合)
- `type` (string) サポートされるタイプ
- `document` サポートされるタイプには以下が含まれます:'TXT', 'MD', 'MARKDOWN', 'MDX', 'PDF', 'HTML', 'XLSX', 'XLS', 'VTT', 'PROPERTIES', 'DOC', 'DOCX', 'CSV', 'EML', 'MSG', 'PPTX', 'PPT', 'XML', 'EPUB'
- `image` サポートされるタイプには以下が含まれます:'JPG', 'JPEG', 'PNG', 'GIF', 'WEBP', 'SVG'
- `audio` サポートされるタイプには以下が含まれます:'MP3', 'M4A', 'WAV', 'WEBM', 'MPGA'
- `video` サポートされるタイプには以下が含まれます:'MP4', 'MOV', 'MPEG', 'WEBM'
- `custom` サポートされるタイプには以下が含まれます:その他のファイルタイプ
- `transfer_method` (string) 転送方法:
- `remote_url`: ファイルのURL。
- `local_file`: ファイルをアップロード。
- `url` ファイルのURL。転送方法が `remote_url` の場合のみ)。
- `upload_file_id` アップロードされたファイルID。転送方法が `local_file` の場合のみ)。
- `response_mode` (string) 必須
応答の返却モードを指定します。サポートされているモード:
- `streaming` ストリーミングモード推奨、SSE[Server-Sent Events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events))を通じてタイプライターのような出力を実装します。

View File

@ -342,14 +342,17 @@ Workflow 应用无会话支持,适合用于翻译/文章写作/总结 AI 等
inputs 参数包含了多组键值对Key/Value pairs每组的键对应一个特定变量每组的值则是该变量的具体值。变量可以是文件列表类型。
文件列表类型变量适用于传入文件结合文本理解并回答问题,仅当模型支持该类型文件解析能力时可用。如果该变量是文件列表类型,该变量对应的值应是列表格式,其中每个元素应包含以下内容:
- `type` (string) 支持类型:
- `document` 具体类型包含:'TXT', 'MD', 'MARKDOWN', 'PDF', 'HTML', 'XLSX', 'XLS', 'DOCX', 'CSV', 'EML', 'MSG', 'PPTX', 'PPT', 'XML', 'EPUB'
- `document` 具体类型包含:'TXT', 'MD', 'MARKDOWN', 'MDX', 'PDF', 'HTML', 'XLSX', 'XLS', 'VTT', 'PROPERTIES', 'DOC', 'DOCX', 'CSV', 'EML', 'MSG', 'PPTX', 'PPT', 'XML', 'EPUB'
- `image` 具体类型包含:'JPG', 'JPEG', 'PNG', 'GIF', 'WEBP', 'SVG'
- `audio` 具体类型包含:'MP3', 'M4A', 'WAV', 'WEBM', 'AMR'
- `video` 具体类型包含:'MP4', 'MOV', 'MPEG', 'MPGA'
- `audio` 具体类型包含:'MP3', 'M4A', 'WAV', 'WEBM', 'MPGA'
- `video` 具体类型包含:'MP4', 'MOV', 'MPEG', 'WEBM'
- `custom` 具体类型包含:其他文件类型
- `transfer_method` (string) 传递方式`remote_url` 图片地址 / `local_file` 上传文件
- `url` (string) 图片地址(仅当传递方式为 `remote_url` 时)
- `upload_file_id` (string) 上传文件 ID仅当传递方式为 `local_file` 时)
- `transfer_method` (string) 传递方式:
- `remote_url`: 文件地址。
- `local_file`: 上传文件。
- `url` 文件地址。(仅当传递方式为 `remote_url` 时)。
- `upload_file_id` 上传文件 ID。仅当传递方式为 `local_file `时)。
- `response_mode` (string) Required
返回响应模式,支持:
- `streaming` 流式模式(推荐)。基于 SSE**[Server-Sent Events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events)**)实现类似打字机输出方式的流式返回。

View File

@ -0,0 +1,44 @@
import type { SlashCommandHandler } from './types'
import React from 'react'
import { RiUser3Line } from '@remixicon/react'
import i18n from '@/i18n-config/i18next-config'
import { registerCommands, unregisterCommands } from './command-bus'
// Account command dependency types - no external dependencies needed
type AccountDeps = Record<string, never>
/**
* Account command - Navigates to account page
*/
export const accountCommand: SlashCommandHandler<AccountDeps> = {
name: 'account',
description: 'Navigate to account page',
async search(args: string, locale: string = 'en') {
return [{
id: 'account',
title: i18n.t('common.account.account', { lng: locale }),
description: i18n.t('app.gotoAnything.actions.accountDesc', { lng: locale }),
type: 'command' as const,
icon: (
<div className='flex h-6 w-6 items-center justify-center rounded-md border-[0.5px] border-divider-regular bg-components-panel-bg'>
<RiUser3Line className='h-4 w-4 text-text-tertiary' />
</div>
),
data: { command: 'navigation.account', args: {} },
}]
},
register(_deps: AccountDeps) {
registerCommands({
'navigation.account': async (_args) => {
// Navigate to account page
window.location.href = '/account'
},
})
},
unregister() {
unregisterCommands(['navigation.account'])
},
}

View File

@ -0,0 +1,43 @@
import type { SlashCommandHandler } from './types'
import React from 'react'
import { RiDiscordLine } from '@remixicon/react'
import i18n from '@/i18n-config/i18next-config'
import { registerCommands, unregisterCommands } from './command-bus'
// Community command dependency types
type CommunityDeps = Record<string, never>
/**
* Community command - Opens Discord community
*/
export const communityCommand: SlashCommandHandler<CommunityDeps> = {
name: 'community',
description: 'Open community Discord',
async search(args: string, locale: string = 'en') {
return [{
id: 'community',
title: i18n.t('common.userProfile.community', { lng: locale }),
description: i18n.t('app.gotoAnything.actions.communityDesc', { lng: locale }) || 'Open Discord community',
type: 'command' as const,
icon: (
<div className='flex h-6 w-6 items-center justify-center rounded-md border-[0.5px] border-divider-regular bg-components-panel-bg'>
<RiDiscordLine className='h-4 w-4 text-text-tertiary' />
</div>
),
data: { command: 'navigation.community', args: { url: 'https://discord.gg/5AEfbxcd9k' } },
}]
},
register(_deps: CommunityDeps) {
registerCommands({
'navigation.community': async (args) => {
const url = args?.url || 'https://discord.gg/5AEfbxcd9k'
window.open(url, '_blank', 'noopener,noreferrer')
},
})
},
unregister() {
unregisterCommands(['navigation.community'])
},
}

View File

@ -0,0 +1,44 @@
import type { SlashCommandHandler } from './types'
import React from 'react'
import { RiBookOpenLine } from '@remixicon/react'
import i18n from '@/i18n-config/i18next-config'
import { registerCommands, unregisterCommands } from './command-bus'
import { defaultDocBaseUrl } from '@/context/i18n'
// Documentation command dependency types - no external dependencies needed
type DocDeps = Record<string, never>
/**
* Documentation command - Opens help documentation
*/
export const docCommand: SlashCommandHandler<DocDeps> = {
name: 'doc',
description: 'Open documentation',
async search(args: string, locale: string = 'en') {
return [{
id: 'doc',
title: i18n.t('common.userProfile.helpCenter', { lng: locale }),
description: i18n.t('app.gotoAnything.actions.docDesc', { lng: locale }) || 'Open help documentation',
type: 'command' as const,
icon: (
<div className='flex h-6 w-6 items-center justify-center rounded-md border-[0.5px] border-divider-regular bg-components-panel-bg'>
<RiBookOpenLine className='h-4 w-4 text-text-tertiary' />
</div>
),
data: { command: 'navigation.doc', args: {} },
}]
},
register(_deps: DocDeps) {
registerCommands({
'navigation.doc': async (_args) => {
const url = `${defaultDocBaseUrl}`
window.open(url, '_blank', 'noopener,noreferrer')
},
})
},
unregister() {
unregisterCommands(['navigation.doc'])
},
}

View File

@ -0,0 +1,43 @@
import type { SlashCommandHandler } from './types'
import React from 'react'
import { RiFeedbackLine } from '@remixicon/react'
import i18n from '@/i18n-config/i18next-config'
import { registerCommands, unregisterCommands } from './command-bus'
// Feedback command dependency types
type FeedbackDeps = Record<string, never>
/**
* Feedback command - Opens GitHub feedback discussions
*/
export const feedbackCommand: SlashCommandHandler<FeedbackDeps> = {
name: 'feedback',
description: 'Open feedback discussions',
async search(args: string, locale: string = 'en') {
return [{
id: 'feedback',
title: i18n.t('common.userProfile.communityFeedback', { lng: locale }),
description: i18n.t('app.gotoAnything.actions.feedbackDesc', { lng: locale }) || 'Open community feedback discussions',
type: 'command' as const,
icon: (
<div className='flex h-6 w-6 items-center justify-center rounded-md border-[0.5px] border-divider-regular bg-components-panel-bg'>
<RiFeedbackLine className='h-4 w-4 text-text-tertiary' />
</div>
),
data: { command: 'navigation.feedback', args: { url: 'https://github.com/langgenius/dify/discussions/categories/feedbacks' } },
}]
},
register(_deps: FeedbackDeps) {
registerCommands({
'navigation.feedback': async (args) => {
const url = args?.url || 'https://github.com/langgenius/dify/discussions/categories/feedbacks'
window.open(url, '_blank', 'noopener,noreferrer')
},
})
},
unregister() {
unregisterCommands(['navigation.feedback'])
},
}

View File

@ -7,6 +7,10 @@ import { useTheme } from 'next-themes'
import { setLocaleOnClient } from '@/i18n-config'
import { themeCommand } from './theme'
import { languageCommand } from './language'
import { feedbackCommand } from './feedback'
import { docCommand } from './doc'
import { communityCommand } from './community'
import { accountCommand } from './account'
import i18n from '@/i18n-config/i18next-config'
export const slashAction: ActionItem = {
@ -30,12 +34,20 @@ export const registerSlashCommands = (deps: Record<string, any>) => {
// Register command handlers to the registry system with their respective dependencies
slashCommandRegistry.register(themeCommand, { setTheme: deps.setTheme })
slashCommandRegistry.register(languageCommand, { setLocale: deps.setLocale })
slashCommandRegistry.register(feedbackCommand, {})
slashCommandRegistry.register(docCommand, {})
slashCommandRegistry.register(communityCommand, {})
slashCommandRegistry.register(accountCommand, {})
}
export const unregisterSlashCommands = () => {
// Remove command handlers from registry system (automatically calls each command's unregister method)
slashCommandRegistry.unregister('theme')
slashCommandRegistry.unregister('language')
slashCommandRegistry.unregister('feedback')
slashCommandRegistry.unregister('doc')
slashCommandRegistry.unregister('community')
slashCommandRegistry.unregister('account')
}
export const SlashCommandProvider = () => {

View File

@ -1,8 +1,9 @@
import type { FC } from 'react'
import { useEffect } from 'react'
import { useEffect, useMemo } from 'react'
import { Command } from 'cmdk'
import { useTranslation } from 'react-i18next'
import type { ActionItem } from './actions/types'
import { slashCommandRegistry } from './actions/commands/registry'
type Props = {
actions: Record<string, ActionItem>
@ -10,27 +11,57 @@ type Props = {
searchFilter?: string
commandValue?: string
onCommandValueChange?: (value: string) => void
originalQuery?: string
}
const CommandSelector: FC<Props> = ({ actions, onCommandSelect, searchFilter, commandValue, onCommandValueChange }) => {
const CommandSelector: FC<Props> = ({ actions, onCommandSelect, searchFilter, commandValue, onCommandValueChange, originalQuery }) => {
const { t } = useTranslation()
const filteredActions = Object.values(actions).filter((action) => {
if (!searchFilter)
return true
const filterLower = searchFilter.toLowerCase()
return action.shortcut.toLowerCase().includes(filterLower)
})
// Check if we're in slash command mode
const isSlashMode = originalQuery?.trim().startsWith('/') || false
// Get slash commands from registry
const slashCommands = useMemo(() => {
if (!isSlashMode) return []
const allCommands = slashCommandRegistry.getAllCommands()
const filter = searchFilter?.toLowerCase() || '' // searchFilter already has '/' removed
return allCommands.filter((cmd) => {
if (!filter) return true
return cmd.name.toLowerCase().includes(filter)
}).map(cmd => ({
key: `/${cmd.name}`,
shortcut: `/${cmd.name}`,
title: cmd.name,
description: cmd.description,
}))
}, [isSlashMode, searchFilter])
const filteredActions = useMemo(() => {
if (isSlashMode) return []
return Object.values(actions).filter((action) => {
// Exclude slash action when in @ mode
if (action.key === '/') return false
if (!searchFilter)
return true
const filterLower = searchFilter.toLowerCase()
return action.shortcut.toLowerCase().includes(filterLower)
})
}, [actions, searchFilter, isSlashMode])
const allItems = isSlashMode ? slashCommands : filteredActions
useEffect(() => {
if (filteredActions.length > 0 && onCommandValueChange) {
const currentValueExists = filteredActions.some(action => action.shortcut === commandValue)
if (allItems.length > 0 && onCommandValueChange) {
const currentValueExists = allItems.some(item => item.shortcut === commandValue)
if (!currentValueExists)
onCommandValueChange(filteredActions[0].shortcut)
onCommandValueChange(allItems[0].shortcut)
}
}, [searchFilter, filteredActions.length])
}, [searchFilter, allItems.length])
if (filteredActions.length === 0) {
if (allItems.length === 0) {
return (
<div className="p-4">
<div className="flex items-center justify-center py-8 text-center text-text-tertiary">
@ -50,33 +81,46 @@ const CommandSelector: FC<Props> = ({ actions, onCommandSelect, searchFilter, co
return (
<div className="p-4">
<div className="mb-3 text-left text-sm font-medium text-text-secondary">
{t('app.gotoAnything.selectSearchType')}
{isSlashMode ? t('app.gotoAnything.groups.commands') : t('app.gotoAnything.selectSearchType')}
</div>
<Command.Group className="space-y-1">
{filteredActions.map(action => (
{allItems.map(item => (
<Command.Item
key={action.key}
value={action.shortcut}
key={item.key}
value={item.shortcut}
className="flex cursor-pointer items-center rounded-md
p-2.5
transition-all
duration-150 hover:bg-state-base-hover aria-[selected=true]:bg-state-base-hover-alt"
onSelect={() => onCommandSelect(action.shortcut)}
onSelect={() => onCommandSelect(item.shortcut)}
>
<span className="min-w-[4.5rem] text-left font-mono text-xs text-text-tertiary">
{action.shortcut}
{item.shortcut}
</span>
<span className="ml-3 text-sm text-text-secondary">
{(() => {
const keyMap: Record<string, string> = {
'/': 'app.gotoAnything.actions.slashDesc',
'@app': 'app.gotoAnything.actions.searchApplicationsDesc',
'@plugin': 'app.gotoAnything.actions.searchPluginsDesc',
'@knowledge': 'app.gotoAnything.actions.searchKnowledgeBasesDesc',
'@node': 'app.gotoAnything.actions.searchWorkflowNodesDesc',
}
return t(keyMap[action.key])
})()}
{isSlashMode ? (
(() => {
const slashKeyMap: Record<string, string> = {
'/theme': 'app.gotoAnything.actions.themeCategoryDesc',
'/language': 'app.gotoAnything.actions.languageChangeDesc',
'/account': 'app.gotoAnything.actions.accountDesc',
'/feedback': 'app.gotoAnything.actions.feedbackDesc',
'/doc': 'app.gotoAnything.actions.docDesc',
'/community': 'app.gotoAnything.actions.communityDesc',
}
return t(slashKeyMap[item.key] || item.description)
})()
) : (
(() => {
const keyMap: Record<string, string> = {
'@app': 'app.gotoAnything.actions.searchApplicationsDesc',
'@plugin': 'app.gotoAnything.actions.searchPluginsDesc',
'@knowledge': 'app.gotoAnything.actions.searchKnowledgeBasesDesc',
'@node': 'app.gotoAnything.actions.searchWorkflowNodesDesc',
}
return t(keyMap[item.key])
})()
)}
</span>
</Command.Item>
))}

View File

@ -226,6 +226,7 @@ const GotoAnything: FC<Props> = ({
<div className='mt-3 space-y-1 text-xs text-text-quaternary'>
<div>{t('app.gotoAnything.searchHint')}</div>
<div>{t('app.gotoAnything.commandHint')}</div>
<div>{t('app.gotoAnything.slashHint')}</div>
</div>
</div>
</div>)
@ -321,6 +322,7 @@ const GotoAnything: FC<Props> = ({
searchFilter={searchQuery.trim().substring(1)}
commandValue={cmdVal}
onCommandValueChange={setCmdVal}
originalQuery={searchQuery.trim()}
/>
) : (
Object.entries(groupedResults).map(([type, results], groupIndex) => (

View File

@ -27,6 +27,7 @@ export const AddVariablePopup = ({
hideSearch
vars={availableVars}
onChange={onSelect}
isSupportFileVar
/>
</div>
</div>

View File

@ -131,7 +131,7 @@ const RunPanel: FC<RunProps> = ({ hideResult, activeTab = 'RESULT', runID, getRe
>{t('runLog.tracing')}</div>
</div>
{/* panel detail */}
<div ref={ref} className={cn('relative h-0 grow overflow-y-auto rounded-b-2xl bg-components-panel-bg')}>
<div ref={ref} className={cn('relative h-0 grow overflow-y-auto rounded-b-xl bg-components-panel-bg')}>
{loading && (
<div className='flex h-full items-center justify-center bg-components-panel-bg'>
<Loading />

View File

@ -32,7 +32,7 @@ export const useGetPricingPageLanguage = () => {
return getPricingPageLanguage(locale)
}
const defaultDocBaseUrl = 'https://docs.dify.ai'
export const defaultDocBaseUrl = 'https://docs.dify.ai'
export const useDocLink = (baseUrl?: string): ((path?: string, pathMap?: { [index: string]: string }) => string) => {
let baseDocUrl = baseUrl || defaultDocBaseUrl
baseDocUrl = (baseDocUrl.endsWith('/')) ? baseDocUrl.slice(0, -1) : baseDocUrl

View File

@ -279,6 +279,10 @@ const translation = {
runDesc: 'Führen Sie schnelle Befehle aus (Thema, Sprache, ...)',
themeCategoryTitle: 'Thema',
slashDesc: 'Führen Sie Befehle wie /theme, /lang aus',
accountDesc: 'Gehe zur Kontoseite',
feedbackDesc: 'Offene Diskussionen zum Feedback der Gemeinschaft',
communityDesc: 'Offene Discord-Community',
docDesc: 'Öffnen Sie die Hilfedokumentation',
},
emptyState: {
noPluginsFound: 'Keine Plugins gefunden',
@ -313,6 +317,7 @@ const translation = {
inScope: 'in {{scope}}s',
noMatchingCommands: 'Keine übereinstimmenden Befehle gefunden',
tryDifferentSearch: 'Versuchen Sie es mit einem anderen Suchbegriff',
slashHint: 'Geben Sie / ein, um alle verfügbaren Befehle anzuzeigen.',
},
}

View File

@ -269,6 +269,7 @@ const translation = {
selectSearchType: 'Choose what to search for',
searchHint: 'Start typing to search everything instantly',
commandHint: 'Type @ to browse by category',
slashHint: 'Type / to see all available commands',
actions: {
searchApplications: 'Search Applications',
searchApplicationsDesc: 'Search and navigate to your applications',
@ -292,7 +293,11 @@ const translation = {
languageCategoryTitle: 'Language',
languageCategoryDesc: 'Switch interface language',
languageChangeDesc: 'Change UI language',
slashDesc: 'Execute commands like /theme, /lang',
slashDesc: 'Execute commands (type / to see all available commands)',
accountDesc: 'Navigate to account page',
communityDesc: 'Open Discord community',
docDesc: 'Open help documentation',
feedbackDesc: 'Open community feedback discussions',
},
emptyState: {
noAppsFound: 'No apps found',

View File

@ -277,6 +277,10 @@ const translation = {
languageCategoryDesc: 'Cambiar el idioma de la interfaz',
themeCategoryDesc: 'Cambiar el tema de la aplicación',
slashDesc: 'Ejecuta comandos como /tema, /idioma',
accountDesc: 'Navegar a la página de cuenta',
communityDesc: 'Abrir comunidad de Discord',
feedbackDesc: 'Discusiones de retroalimentación de la comunidad abierta',
docDesc: 'Abrir la documentación de ayuda',
},
emptyState: {
noAppsFound: 'No se encontraron aplicaciones',
@ -311,6 +315,7 @@ const translation = {
inScope: 'en {{scope}}s',
tryDifferentSearch: 'Prueba con un término de búsqueda diferente',
noMatchingCommands: 'No se encontraron comandos coincidentes',
slashHint: 'Escribe / para ver todos los comandos disponibles',
},
}

View File

@ -277,6 +277,10 @@ const translation = {
themeSystemDesc: 'به ظاهر سیستم‌عامل خود پایبند باشید',
runDesc: 'دستورات سریع اجرا کنید (موضوع، زبان، ...)',
slashDesc: 'دستورات را مانند /theme، /lang اجرا کنید',
feedbackDesc: 'بحث‌های باز بازخورد جامعه',
accountDesc: 'به صفحه حساب کاربری بروید',
communityDesc: 'جامعه دیسکورد باز',
docDesc: 'مستندات کمک را باز کنید',
},
emptyState: {
noKnowledgeBasesFound: 'هیچ پایگاه دانش یافت نشد',
@ -311,6 +315,7 @@ const translation = {
inScope: 'در {{scope}}s',
noMatchingCommands: 'هیچ دستوری منطبق یافت نشد',
tryDifferentSearch: 'عبارت جستجوی دیگری را امتحان کنید',
slashHint: 'برای مشاهده تمام دستورات موجود / را تایپ کنید',
},
}

View File

@ -277,6 +277,10 @@ const translation = {
languageCategoryDesc: 'Changer la langue de l\'interface',
runDesc: 'Exécuter des commandes rapides (thème, langue, ...)',
slashDesc: 'Exécutez des commandes telles que /theme, /lang',
communityDesc: 'Ouvrir la communauté Discord',
docDesc: 'Ouvrir la documentation d\'aide',
accountDesc: 'Accédez à la page de compte',
feedbackDesc: 'Discussions de rétroaction de la communauté ouverte',
},
emptyState: {
noKnowledgeBasesFound: 'Aucune base de connaissances trouvée',
@ -311,6 +315,7 @@ const translation = {
inScope: 'dans {{scope}}s',
noMatchingCommands: 'Aucune commande correspondante na été trouvée',
tryDifferentSearch: 'Essayez un autre terme de recherche',
slashHint: 'Tapez / pour voir toutes les commandes disponibles',
},
}

View File

@ -277,6 +277,10 @@ const translation = {
themeSystemDesc: 'अपने ऑपरेटिंग सिस्टम की उपस्थिति का पालन करें',
runDesc: 'त्वरित कमांड चलाएँ (थीम, भाषा, ...)',
slashDesc: 'कमांड्स चलाएं जैसे /theme, /lang',
accountDesc: 'खाता पृष्ठ पर जाएं',
docDesc: 'सहायता दस्तावेज़ खोलें',
communityDesc: 'ओपन डिस्कॉर्ड समुदाय',
feedbackDesc: 'खुले समुदाय की फीडबैक चर्चाएँ',
},
emptyState: {
noPluginsFound: 'कोई प्लगइन नहीं मिले',
@ -311,6 +315,7 @@ const translation = {
inScope: '{{scope}}s में',
tryDifferentSearch: 'एक अलग खोज शब्द आजमाएँ',
noMatchingCommands: 'कोई मिलती-जुलती कमांड्स नहीं मिलीं',
slashHint: 'सभी उपलब्ध कमांड देखने के लिए टाइप करें /',
},
}

View File

@ -283,6 +283,10 @@ const translation = {
runDesc: 'Esegui comandi rapidi (tema, lingua, ...)',
themeSystemDesc: 'Segui l\'aspetto del tuo sistema operativo',
slashDesc: 'Esegui comandi come /theme, /lang',
communityDesc: 'Apri la community di Discord',
accountDesc: 'Vai alla pagina dell\'account',
feedbackDesc: 'Discussioni di feedback della comunità aperta',
docDesc: 'Apri la documentazione di aiuto',
},
emptyState: {
noKnowledgeBasesFound: 'Nessuna base di conoscenza trovata',
@ -317,6 +321,7 @@ const translation = {
inScope: 'in {{scope}}s',
tryDifferentSearch: 'Prova un termine di ricerca diverso',
noMatchingCommands: 'Nessun comando corrispondente trovato',
slashHint: 'Digita / per vedere tutti i comandi disponibili',
},
}

View File

@ -292,6 +292,10 @@ const translation = {
themeCategoryDesc: 'アプリケーションのテーマを切り替える',
runDesc: 'クイックコマンドを実行する(テーマ、言語、...',
slashDesc: 'コマンドを実行します、例えば /theme や /lang のように',
accountDesc: 'アカウントページに移動する',
docDesc: 'ヘルプドキュメントを開く',
communityDesc: 'オープンDiscordコミュニティ',
feedbackDesc: 'オープンなコミュニティフィードバックディスカッション',
},
emptyState: {
noAppsFound: 'アプリが見つかりません',
@ -310,6 +314,7 @@ const translation = {
},
noMatchingCommands: '一致するコマンドが見つかりません',
tryDifferentSearch: '別の検索語句をお試しください',
slashHint: '/を入力して、利用可能なすべてのコマンドを表示します。',
},
}

View File

@ -297,6 +297,10 @@ const translation = {
runDesc: '빠른 명령 실행 (테마, 언어 등...)',
themeSystemDesc: '운영 체제의 외관을 따르세요',
slashDesc: '/theme, /lang와 같은 명령어를 실행하십시오.',
communityDesc: '오픈 디스코드 커뮤니티',
feedbackDesc: '공개 커뮤니티 피드백 토론',
docDesc: '도움 문서 열기',
accountDesc: '계정 페이지로 이동',
},
emptyState: {
noAppsFound: '앱을 찾을 수 없습니다.',
@ -331,6 +335,7 @@ const translation = {
inScope: '{{scope}}s 내에서',
tryDifferentSearch: '다른 검색어 사용해 보기',
noMatchingCommands: '일치하는 명령을 찾을 수 없습니다.',
slashHint: '모든 사용 가능한 명령을 보려면 /를 입력하세요.',
},
}

View File

@ -278,6 +278,10 @@ const translation = {
themeSystemDesc: 'Podążaj za wyglądem swojego systemu operacyjnego',
runDesc: 'Uruchom szybkie polecenia (motyw, język, ...)',
slashDesc: 'Wykonuj polecenia takie jak /theme, /lang',
communityDesc: 'Otwarta społeczność Discord',
docDesc: 'Otwórz dokumentację pomocy',
accountDesc: 'Przejdź do strony konta',
feedbackDesc: 'Otwarte dyskusje na temat opinii społeczności',
},
emptyState: {
noAppsFound: 'Nie znaleziono aplikacji',
@ -312,6 +316,7 @@ const translation = {
inScope: 'w {{scope}}s',
noMatchingCommands: 'Nie znaleziono pasujących poleceń',
tryDifferentSearch: 'Spróbuj użyć innego hasła',
slashHint: 'Wpisz / aby zobaczyć wszystkie dostępne polecenia',
},
}

View File

@ -277,6 +277,10 @@ const translation = {
themeSystemDesc: 'Siga a aparência do seu sistema operacional',
languageCategoryDesc: 'Mudar o idioma da interface',
slashDesc: 'Execute comandos como /tema, /idioma',
accountDesc: 'Navegue até a página da conta',
communityDesc: 'Comunidade do Discord aberta',
feedbackDesc: 'Discussões de feedback da comunidade aberta',
docDesc: 'Abra a documentação de ajuda',
},
emptyState: {
noAppsFound: 'Nenhum aplicativo encontrado',
@ -311,6 +315,7 @@ const translation = {
inScope: 'em {{scope}}s',
noMatchingCommands: 'Nenhum comando correspondente encontrado',
tryDifferentSearch: 'Tente um termo de pesquisa diferente',
slashHint: 'Digite / para ver todos os comandos disponíveis',
},
}

View File

@ -277,6 +277,10 @@ const translation = {
languageCategoryDesc: 'Schimbați limba interfeței',
themeSystemDesc: 'Urmăriți aspectul sistemului de operare',
slashDesc: 'Execută comenzi precum /theme, /lang',
feedbackDesc: 'Discuții de feedback deschis pentru comunitate',
docDesc: 'Deschide documentația de ajutor',
communityDesc: 'Deschide comunitatea Discord',
accountDesc: 'Navigați la pagina de cont',
},
emptyState: {
noAppsFound: 'Nu s-au găsit aplicații',
@ -311,6 +315,7 @@ const translation = {
inScope: 'în {{scope}}s',
noMatchingCommands: 'Nu s-au găsit comenzi potrivite',
tryDifferentSearch: 'Încercați un alt termen de căutare',
slashHint: 'Tastați / pentru a vedea toate comenzile disponibile',
},
}

View File

@ -277,6 +277,10 @@ const translation = {
themeLightDesc: 'Используйте светлый внешний вид',
themeSystemDesc: 'Следуйте внешнему виду вашей операционной системы',
slashDesc: 'Выполняйте команды, такие как /theme, /lang',
accountDesc: 'Перейдите на страницу учетной записи',
feedbackDesc: 'Обсуждения обратной связи с открытым сообществом',
docDesc: 'Откройте справочную документацию',
communityDesc: 'Открытое сообщество Discord',
},
emptyState: {
noPluginsFound: 'Плагины не найдены',
@ -311,6 +315,7 @@ const translation = {
inScope: 'в {{scope}}s',
noMatchingCommands: 'Соответствующие команды не найдены',
tryDifferentSearch: 'Попробуйте использовать другой поисковый запрос',
slashHint: 'Введите / чтобы увидеть все доступные команды',
},
}

View File

@ -277,6 +277,10 @@ const translation = {
runDesc: 'Zaženi hitre ukaze (teme, jezik, ...)',
languageChangeDesc: 'Spremeni jezik vmesnika',
slashDesc: 'Izvedi ukaze kot so /tema, /jezik',
accountDesc: 'Pojdite na stran računa',
docDesc: 'Odprite pomoč dokumentacijo',
feedbackDesc: 'Razprave o povratnih informacijah odprte skupnosti',
communityDesc: 'Odpri Discord skupnost',
},
emptyState: {
noPluginsFound: 'Vtičnikov ni mogoče najti',
@ -311,6 +315,7 @@ const translation = {
inScope: 'v {{scope}}s',
tryDifferentSearch: 'Poskusite uporabiti drug iskalni izraz',
noMatchingCommands: 'Ujemajoči se ukazi niso našli',
slashHint: 'Vnesite / za ogled vseh razpoložljivih ukazov',
},
}

View File

@ -273,6 +273,10 @@ const translation = {
themeLightDesc: 'ใช้รูปลักษณ์ที่มีความสว่าง',
themeSystemDesc: 'ติดตามรูปลักษณ์ของระบบปฏิบัติการของคุณ',
slashDesc: 'ใช้คำสั่งเช่น /theme, /lang',
feedbackDesc: 'การอภิปรายข้อเสนอแนะแบบเปิดในชุมชน',
accountDesc: 'ไปที่หน้าบัญชี',
docDesc: 'เปิดเอกสารช่วยเหลือ',
communityDesc: 'เปิดชุมชน Discord',
},
emptyState: {
noPluginsFound: 'ไม่พบปลั๊กอิน',
@ -307,6 +311,7 @@ const translation = {
inScope: 'ใน {{scope}}s',
noMatchingCommands: 'ไม่พบคำสั่งที่ตรงกัน',
tryDifferentSearch: 'ลองใช้ข้อความค้นหาอื่น',
slashHint: 'พิมพ์ / เพื่อดูคำสั่งที่มีให้ทั้งหมด',
},
}

View File

@ -273,6 +273,10 @@ const translation = {
runDesc: 'Hızlı komutlar çalıştır (tema, dil, ...)',
searchPluginsDesc: 'Eklentilerinizi arayın ve gezinin',
slashDesc: '/tema, /dil gibi komutları çalıştırın',
communityDesc: 'Açık Discord topluluğu',
accountDesc: 'Hesap sayfasına gidin',
feedbackDesc: 'Açık topluluk geri bildirim tartışmaları',
docDesc: 'Yardım belgelerini aç',
},
emptyState: {
noAppsFound: 'Uygulama bulunamadı',
@ -307,6 +311,7 @@ const translation = {
inScope: '{{scope}}s içinde',
tryDifferentSearch: 'Farklı bir arama terimi deneyin',
noMatchingCommands: 'Eşleşen komut bulunamadı',
slashHint: 'Tüm mevcut komutları görmek için / yazın',
},
}

View File

@ -277,6 +277,10 @@ const translation = {
themeSystemDesc: 'Дотримуйтесь зовнішнього вигляду вашої операційної системи',
languageCategoryDesc: 'Переключити мову інтерфейсу',
slashDesc: 'Виконуйте команди, такі як /theme, /lang',
feedbackDesc: 'Відкриті обговорення відгуків громади',
docDesc: 'Відкрийте документацію допомоги',
accountDesc: 'Перейдіть на сторінку облікового запису',
communityDesc: 'Відкрита Discord-спільнота',
},
emptyState: {
noPluginsFound: 'Плагінів не знайдено',
@ -311,6 +315,7 @@ const translation = {
inScope: 'у {{scope}}s',
noMatchingCommands: 'Відповідних команд не знайдено',
tryDifferentSearch: 'Спробуйте інший пошуковий термін',
slashHint: 'Наберіть / , щоб побачити всі доступні команди',
},
}

View File

@ -277,6 +277,10 @@ const translation = {
runDesc: 'Chạy các lệnh nhanh (chủ đề, ngôn ngữ, ... )',
themeCategoryDesc: 'Chuyển đổi giao diện ứng dụng',
slashDesc: 'Thực hiện các lệnh như /theme, /lang',
feedbackDesc: 'Thảo luận phản hồi cộng đồng mở',
accountDesc: 'Đi đến trang tài khoản',
docDesc: 'Mở tài liệu trợ giúp',
communityDesc: 'Mở cộng đồng Discord',
},
emptyState: {
noWorkflowNodesFound: 'Không tìm thấy nút quy trình làm việc',
@ -311,6 +315,7 @@ const translation = {
inScope: 'trong {{scope}}s',
tryDifferentSearch: 'Thử một cụm từ tìm kiếm khác',
noMatchingCommands: 'Không tìm thấy lệnh phù hợp',
slashHint: 'Gõ / để xem tất cả các lệnh có sẵn',
},
}

View File

@ -268,6 +268,7 @@ const translation = {
selectSearchType: '选择搜索内容',
searchHint: '开始输入即可立即搜索所有内容',
commandHint: '输入 @ 按类别浏览',
slashHint: '输入 / 查看所有可用命令',
actions: {
searchApplications: '搜索应用程序',
searchApplicationsDesc: '搜索并导航到您的应用程序',
@ -291,7 +292,11 @@ const translation = {
languageCategoryTitle: '语言',
languageCategoryDesc: '切换界面语言',
languageChangeDesc: '更改界面语言',
slashDesc: '执行诸如 /theme、/lang 等命令',
slashDesc: '执行命令(输入 / 查看所有可用命令',
accountDesc: '导航到账户页面',
communityDesc: '打开 Discord 社区',
docDesc: '打开帮助文档',
feedbackDesc: '打开社区反馈讨论',
},
emptyState: {
noAppsFound: '未找到应用',

View File

@ -276,6 +276,10 @@ const translation = {
languageChangeDesc: '更改 UI 語言',
runDesc: '執行快速命令(主題、語言等...',
slashDesc: '執行命令如 /theme, /lang',
communityDesc: '開放的 Discord 社區',
accountDesc: '導航到帳戶頁面',
feedbackDesc: '開放社區反饋討論',
docDesc: '開啟幫助文件',
},
emptyState: {
noAppsFound: '未找到應用',
@ -310,6 +314,7 @@ const translation = {
inScope: '在 {{scope}}s 中',
noMatchingCommands: '未找到匹配的命令',
tryDifferentSearch: '嘗試其他搜尋字詞',
slashHint: '輸入 / 以查看所有可用的指令',
},
}