Merge branch 'main' into fix/chore-fix

This commit is contained in:
Yeuoly 2024-12-06 16:45:25 +08:00
commit 337eff2b79
No known key found for this signature in database
GPG Key ID: A66E7E320FB19F61
85 changed files with 1846 additions and 1227 deletions

View File

@ -8,16 +8,9 @@ Please include a summary of the change and which issue is fixed. Please also inc
# Screenshots # Screenshots
<table> | Before | After |
<tr> |--------|-------|
<td>Before: </td> | ... | ... |
<td>After: </td>
</tr>
<tr>
<td>...</td>
<td>...</td>
</tr>
</table>
# Checklist # Checklist

View File

@ -260,7 +260,7 @@ def migrate_knowledge_vector_database():
skipped_count = 0 skipped_count = 0
total_count = 0 total_count = 0
vector_type = dify_config.VECTOR_STORE vector_type = dify_config.VECTOR_STORE
upper_colletion_vector_types = { upper_collection_vector_types = {
VectorType.MILVUS, VectorType.MILVUS,
VectorType.PGVECTOR, VectorType.PGVECTOR,
VectorType.RELYT, VectorType.RELYT,
@ -268,7 +268,7 @@ def migrate_knowledge_vector_database():
VectorType.ORACLE, VectorType.ORACLE,
VectorType.ELASTICSEARCH, VectorType.ELASTICSEARCH,
} }
lower_colletion_vector_types = { lower_collection_vector_types = {
VectorType.ANALYTICDB, VectorType.ANALYTICDB,
VectorType.CHROMA, VectorType.CHROMA,
VectorType.MYSCALE, VectorType.MYSCALE,
@ -308,7 +308,7 @@ def migrate_knowledge_vector_database():
continue continue
collection_name = "" collection_name = ""
dataset_id = dataset.id dataset_id = dataset.id
if vector_type in upper_colletion_vector_types: if vector_type in upper_collection_vector_types:
collection_name = Dataset.gen_collection_name_by_id(dataset_id) collection_name = Dataset.gen_collection_name_by_id(dataset_id)
elif vector_type == VectorType.QDRANT: elif vector_type == VectorType.QDRANT:
if dataset.collection_binding_id: if dataset.collection_binding_id:
@ -324,7 +324,7 @@ def migrate_knowledge_vector_database():
else: else:
collection_name = Dataset.gen_collection_name_by_id(dataset_id) collection_name = Dataset.gen_collection_name_by_id(dataset_id)
elif vector_type in lower_colletion_vector_types: elif vector_type in lower_collection_vector_types:
collection_name = Dataset.gen_collection_name_by_id(dataset_id).lower() collection_name = Dataset.gen_collection_name_by_id(dataset_id).lower()
else: else:
raise ValueError(f"Vector store {vector_type} is not supported.") raise ValueError(f"Vector store {vector_type} is not supported.")

View File

@ -9,7 +9,7 @@ class PackagingInfo(BaseSettings):
CURRENT_VERSION: str = Field( CURRENT_VERSION: str = Field(
description="Dify version", description="Dify version",
default="0.13.0", default="0.13.1",
) )
COMMIT_SHA: str = Field( COMMIT_SHA: str = Field(

View File

@ -2,7 +2,7 @@
Due to the presence of tasks in App Runner that require long execution times, such as LLM generation and external requests, Flask-Sqlalchemy's strategy for database connection pooling is to allocate one connection (transaction) per request. This approach keeps a connection occupied even during non-DB tasks, leading to the inability to acquire new connections during high concurrency requests due to multiple long-running tasks. Due to the presence of tasks in App Runner that require long execution times, such as LLM generation and external requests, Flask-Sqlalchemy's strategy for database connection pooling is to allocate one connection (transaction) per request. This approach keeps a connection occupied even during non-DB tasks, leading to the inability to acquire new connections during high concurrency requests due to multiple long-running tasks.
Therefore, the database operations in App Runner and Task Pipeline must ensure connections are closed immediately after use, and it's better to pass IDs rather than Model objects to avoid deattach errors. Therefore, the database operations in App Runner and Task Pipeline must ensure connections are closed immediately after use, and it's better to pass IDs rather than Model objects to avoid detach errors.
Examples: Examples:

View File

@ -72,7 +72,7 @@ class AppGenerateResponseConverter(ABC):
for resource in metadata["retriever_resources"]: for resource in metadata["retriever_resources"]:
updated_resources.append( updated_resources.append(
{ {
"segment_id": resource["segment_id"], "segment_id": resource.get("segment_id", ""),
"position": resource["position"], "position": resource["position"],
"document_name": resource["document_name"], "document_name": resource["document_name"],
"score": resource["score"], "score": resource["score"],

View File

@ -91,7 +91,7 @@ class XinferenceProvider(Provider):
""" """
``` ```
也可以直接抛出对应Erros并做如下定义这样在之后的调用中可以直接抛出`InvokeConnectionError`等异常。 也可以直接抛出对应 Errors并做如下定义这样在之后的调用中可以直接抛出`InvokeConnectionError`等异常。
```python ```python
@property @property

View File

@ -5,7 +5,7 @@ BAICHUAN_CONTEXT = "用户在与一个客观的助手对话。助手会尊重找
CHAT_APP_COMPLETION_PROMPT_CONFIG = { CHAT_APP_COMPLETION_PROMPT_CONFIG = {
"completion_prompt_config": { "completion_prompt_config": {
"prompt": { "prompt": {
"text": "{{#pre_prompt#}}\nHere is the chat histories between human and assistant, inside <histories></histories> XML tags.\n\n<histories>\n{{#histories#}}\n</histories>\n\n\nHuman: {{#query#}}\n\nAssistant: " # noqa: E501 "text": "{{#pre_prompt#}}\nHere are the chat histories between human and assistant, inside <histories></histories> XML tags.\n\n<histories>\n{{#histories#}}\n</histories>\n\n\nHuman: {{#query#}}\n\nAssistant: " # noqa: E501
}, },
"conversation_histories_role": {"user_prefix": "Human", "assistant_prefix": "Assistant"}, "conversation_histories_role": {"user_prefix": "Human", "assistant_prefix": "Assistant"},
}, },

View File

@ -375,7 +375,6 @@ class TidbOnQdrantVector(BaseVector):
for result in results: for result in results:
if result: if result:
document = self._document_from_scored_point(result, Field.CONTENT_KEY.value, Field.METADATA_KEY.value) document = self._document_from_scored_point(result, Field.CONTENT_KEY.value, Field.METADATA_KEY.value)
document.metadata["vector"] = result.vector
documents.append(document) documents.append(document)
return documents return documents
@ -394,6 +393,7 @@ class TidbOnQdrantVector(BaseVector):
) -> Document: ) -> Document:
return Document( return Document(
page_content=scored_point.payload.get(content_payload_key), page_content=scored_point.payload.get(content_payload_key),
vector=scored_point.vector,
metadata=scored_point.payload.get(metadata_payload_key) or {}, metadata=scored_point.payload.get(metadata_payload_key) or {},
) )

View File

@ -24,7 +24,7 @@ class IfElseNode(BaseNode[IfElseNodeData]):
""" """
node_inputs: dict[str, list] = {"conditions": []} node_inputs: dict[str, list] = {"conditions": []}
process_datas: dict[str, list] = {"condition_results": []} process_data: dict[str, list] = {"condition_results": []}
input_conditions = [] input_conditions = []
final_result = False final_result = False
@ -40,7 +40,7 @@ class IfElseNode(BaseNode[IfElseNodeData]):
operator=case.logical_operator, operator=case.logical_operator,
) )
process_datas["condition_results"].append( process_data["condition_results"].append(
{ {
"group": case.model_dump(), "group": case.model_dump(),
"results": group_result, "results": group_result,
@ -65,7 +65,7 @@ class IfElseNode(BaseNode[IfElseNodeData]):
selected_case_id = "true" if final_result else "false" selected_case_id = "true" if final_result else "false"
process_datas["condition_results"].append( process_data["condition_results"].append(
{"group": "default", "results": group_result, "final_result": final_result} {"group": "default", "results": group_result, "final_result": final_result}
) )
@ -73,7 +73,7 @@ class IfElseNode(BaseNode[IfElseNodeData]):
except Exception as e: except Exception as e:
return NodeRunResult( return NodeRunResult(
status=WorkflowNodeExecutionStatus.FAILED, inputs=node_inputs, process_data=process_datas, error=str(e) status=WorkflowNodeExecutionStatus.FAILED, inputs=node_inputs, process_data=process_data, error=str(e)
) )
outputs = {"result": final_result, "selected_case_id": selected_case_id} outputs = {"result": final_result, "selected_case_id": selected_case_id}
@ -81,7 +81,7 @@ class IfElseNode(BaseNode[IfElseNodeData]):
data = NodeRunResult( data = NodeRunResult(
status=WorkflowNodeExecutionStatus.SUCCEEDED, status=WorkflowNodeExecutionStatus.SUCCEEDED,
inputs=node_inputs, inputs=node_inputs,
process_data=process_datas, process_data=process_data,
edge_source_handle=selected_case_id or "false", # Use case ID or 'default' edge_source_handle=selected_case_id or "false", # Use case ID or 'default'
outputs=outputs, outputs=outputs,
) )

View File

@ -117,7 +117,7 @@ class IterationNode(BaseNode[IterationNodeData]):
variable_pool.add([self.node_id, "item"], iterator_list_value[0]) variable_pool.add([self.node_id, "item"], iterator_list_value[0])
# init graph engine # init graph engine
from core.workflow.graph_engine.graph_engine import GraphEngine from core.workflow.graph_engine.graph_engine import GraphEngine, GraphEngineThreadPool
graph_engine = GraphEngine( graph_engine = GraphEngine(
tenant_id=self.tenant_id, tenant_id=self.tenant_id,
@ -163,8 +163,7 @@ class IterationNode(BaseNode[IterationNodeData]):
if self.node_data.is_parallel: if self.node_data.is_parallel:
futures: list[Future] = [] futures: list[Future] = []
q = Queue() q = Queue()
thread_pool = graph_engine.workflow_thread_pool_mapping[graph_engine.thread_pool_id] thread_pool = GraphEngineThreadPool(max_workers=self.node_data.parallel_nums, max_submit_count=100)
thread_pool._max_workers = self.node_data.parallel_nums
for index, item in enumerate(iterator_list_value): for index, item in enumerate(iterator_list_value):
future: Future = thread_pool.submit( future: Future = thread_pool.submit(
self._run_single_iter_parallel, self._run_single_iter_parallel,

View File

@ -815,7 +815,7 @@ class LLMNode(BaseNode[LLMNodeData]):
"completion_model": { "completion_model": {
"conversation_histories_role": {"user_prefix": "Human", "assistant_prefix": "Assistant"}, "conversation_histories_role": {"user_prefix": "Human", "assistant_prefix": "Assistant"},
"prompt": { "prompt": {
"text": "Here is the chat histories between human and assistant, inside " "text": "Here are the chat histories between human and assistant, inside "
"<histories></histories> XML tags.\n\n<histories>\n{{" "<histories></histories> XML tags.\n\n<histories>\n{{"
"#histories#}}\n</histories>\n\n\nHuman: {{#sys.query#}}\n\nAssistant:", "#histories#}}\n</histories>\n\n\nHuman: {{#sys.query#}}\n\nAssistant:",
"edition_type": "basic", "edition_type": "basic",

View File

@ -98,7 +98,7 @@ Step 3: Structure the extracted parameters to JSON object as specified in <struc
Step 4: Ensure that the JSON object is properly formatted and valid. The output should not contain any XML tags. Only the JSON object should be outputted. Step 4: Ensure that the JSON object is properly formatted and valid. The output should not contain any XML tags. Only the JSON object should be outputted.
### Memory ### Memory
Here is the chat histories between human and assistant, inside <histories></histories> XML tags. Here are the chat histories between human and assistant, inside <histories></histories> XML tags.
<histories> <histories>
{histories} {histories}
</histories> </histories>
@ -125,7 +125,7 @@ CHAT_GENERATE_JSON_PROMPT = """You should always follow the instructions and out
The structure of the JSON object you can found in the instructions. The structure of the JSON object you can found in the instructions.
### Memory ### Memory
Here is the chat histories between human and assistant, inside <histories></histories> XML tags. Here are the chat histories between human and assistant, inside <histories></histories> XML tags.
<histories> <histories>
{histories} {histories}
</histories> </histories>

View File

@ -8,7 +8,7 @@ QUESTION_CLASSIFIER_SYSTEM_PROMPT = """
### Constraint ### Constraint
DO NOT include anything other than the JSON array in your response. DO NOT include anything other than the JSON array in your response.
### Memory ### Memory
Here is the chat histories between human and assistant, inside <histories></histories> XML tags. Here are the chat histories between human and assistant, inside <histories></histories> XML tags.
<histories> <histories>
{histories} {histories}
</histories> </histories>
@ -66,7 +66,7 @@ User:{{"input_text": ["bad service, slow to bring the food"], "categories": [{{"
Assistant:{{"keywords": ["bad service", "slow", "food", "tip", "terrible", "waitresses"],"category_id": "f6ff5bc3-aca0-4e4a-8627-e760d0aca78f","category_name": "Experience"}} Assistant:{{"keywords": ["bad service", "slow", "food", "tip", "terrible", "waitresses"],"category_id": "f6ff5bc3-aca0-4e4a-8627-e760d0aca78f","category_name": "Experience"}}
</example> </example>
### Memory ### Memory
Here is the chat histories between human and assistant, inside <histories></histories> XML tags. Here are the chat histories between human and assistant, inside <histories></histories> XML tags.
<histories> <histories>
{histories} {histories}
</histories> </histories>

View File

@ -7,8 +7,8 @@ from .enums import InputType, Operation
class OperationNotSupportedError(VariableOperatorNodeError): class OperationNotSupportedError(VariableOperatorNodeError):
def __init__(self, *, operation: Operation, varialbe_type: str): def __init__(self, *, operation: Operation, variable_type: str):
super().__init__(f"Operation {operation} is not supported for type {varialbe_type}") super().__init__(f"Operation {operation} is not supported for type {variable_type}")
class InputTypeNotSupportedError(VariableOperatorNodeError): class InputTypeNotSupportedError(VariableOperatorNodeError):

View File

@ -45,7 +45,7 @@ class VariableAssignerNode(BaseNode[VariableAssignerNodeData]):
# Check if operation is supported # Check if operation is supported
if not helpers.is_operation_supported(variable_type=variable.value_type, operation=item.operation): if not helpers.is_operation_supported(variable_type=variable.value_type, operation=item.operation):
raise OperationNotSupportedError(operation=item.operation, varialbe_type=variable.value_type) raise OperationNotSupportedError(operation=item.operation, variable_type=variable.value_type)
# Check if variable input is supported # Check if variable input is supported
if item.input_type == InputType.VARIABLE and not helpers.is_variable_input_supported( if item.input_type == InputType.VARIABLE and not helpers.is_variable_input_supported(
@ -156,4 +156,4 @@ class VariableAssignerNode(BaseNode[VariableAssignerNodeData]):
case Operation.DIVIDE: case Operation.DIVIDE:
return variable.value / value return variable.value / value
case _: case _:
raise OperationNotSupportedError(operation=operation, varialbe_type=variable.value_type) raise OperationNotSupportedError(operation=operation, variable_type=variable.value_type)

1867
api/poetry.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -20,7 +20,7 @@ azure-ai-inference = "~1.0.0b3"
azure-ai-ml = "~1.20.0" azure-ai-ml = "~1.20.0"
azure-identity = "1.16.1" azure-identity = "1.16.1"
beautifulsoup4 = "4.12.2" beautifulsoup4 = "4.12.2"
boto3 = "1.35.17" boto3 = "1.35.74"
bs4 = "~0.0.1" bs4 = "~0.0.1"
cachetools = "~5.3.0" cachetools = "~5.3.0"
celery = "~5.4.0" celery = "~5.4.0"

View File

@ -5,7 +5,7 @@ import time
import click import click
from celery import shared_task from celery import shared_task
from core.indexing_runner import DocumentIsPausedException from core.indexing_runner import DocumentIsPausedError
from extensions.ext_database import db from extensions.ext_database import db
from extensions.ext_storage import storage from extensions.ext_storage import storage
from models.dataset import Dataset, ExternalKnowledgeApis from models.dataset import Dataset, ExternalKnowledgeApis
@ -86,7 +86,7 @@ def external_document_indexing_task(
fg="green", fg="green",
) )
) )
except DocumentIsPausedException as ex: except DocumentIsPausedError as ex:
logging.info(click.style(str(ex), fg="yellow")) logging.info(click.style(str(ex), fg="yellow"))
except Exception: except Exception:

View File

@ -2,7 +2,7 @@ version: '3'
services: services:
# API service # API service
api: api:
image: langgenius/dify-api:0.13.0 image: langgenius/dify-api:0.13.1
restart: always restart: always
environment: environment:
# Startup mode, 'api' starts the API server. # Startup mode, 'api' starts the API server.
@ -227,7 +227,7 @@ services:
# worker service # worker service
# The Celery worker for processing the queue. # The Celery worker for processing the queue.
worker: worker:
image: langgenius/dify-api:0.13.0 image: langgenius/dify-api:0.13.1
restart: always restart: always
environment: environment:
CONSOLE_WEB_URL: '' CONSOLE_WEB_URL: ''
@ -397,7 +397,7 @@ services:
# Frontend web application. # Frontend web application.
web: web:
image: langgenius/dify-web:0.13.0 image: langgenius/dify-web:0.13.1
restart: always restart: always
environment: environment:
# The base URL of console application api server, refers to the Console base URL of WEB service if console domain is # The base URL of console application api server, refers to the Console base URL of WEB service if console domain is

View File

@ -292,7 +292,7 @@ x-shared-env: &shared-api-worker-env
services: services:
# API service # API service
api: api:
image: langgenius/dify-api:0.13.0 image: langgenius/dify-api:0.13.1
restart: always restart: always
environment: environment:
# Use the shared environment variables. # Use the shared environment variables.
@ -312,7 +312,7 @@ services:
# worker service # worker service
# The Celery worker for processing the queue. # The Celery worker for processing the queue.
worker: worker:
image: langgenius/dify-api:0.13.0 image: langgenius/dify-api:0.13.1
restart: always restart: always
environment: environment:
# Use the shared environment variables. # Use the shared environment variables.
@ -331,7 +331,7 @@ services:
# Frontend web application. # Frontend web application.
web: web:
image: langgenius/dify-web:0.13.0 image: langgenius/dify-web:0.13.1
restart: always restart: always
environment: environment:
CONSOLE_API_URL: ${CONSOLE_API_URL:-} CONSOLE_API_URL: ${CONSOLE_API_URL:-}

View File

@ -166,7 +166,7 @@ const ExtraInfo = ({ isMobile, relatedApps }: IExtraInfoProps) => {
className='inline-flex items-center text-xs text-primary-600 mt-2 cursor-pointer' className='inline-flex items-center text-xs text-primary-600 mt-2 cursor-pointer'
href={ href={
locale === LanguagesSupported[1] locale === LanguagesSupported[1]
? 'https://docs.dify.ai/v/zh-hans/guides/knowledge-base/integrate_knowledge_within_application' ? 'https://docs.dify.ai/v/zh-hans/guides/knowledge-base/integrate-knowledge-within-application'
: 'https://docs.dify.ai/guides/knowledge-base/integrate-knowledge-within-application' : 'https://docs.dify.ai/guides/knowledge-base/integrate-knowledge-within-application'
} }
target='_blank' rel='noopener noreferrer' target='_blank' rel='noopener noreferrer'

View File

@ -29,6 +29,7 @@ import { useAppContext } from '@/context/app-context'
import { ModelFeatureEnum } from '@/app/components/header/account-setting/model-provider-page/declarations' import { ModelFeatureEnum } from '@/app/components/header/account-setting/model-provider-page/declarations'
import { useFeatures } from '@/app/components/base/features/hooks' import { useFeatures } from '@/app/components/base/features/hooks'
import type { InputForm } from '@/app/components/base/chat/chat/type' import type { InputForm } from '@/app/components/base/chat/chat/type'
import { getLastAnswer } from '@/app/components/base/chat/utils'
type ChatItemProps = { type ChatItemProps = {
modelAndParameter: ModelAndParameter modelAndParameter: ModelAndParameter
@ -101,7 +102,7 @@ const ChatItem: FC<ChatItemProps> = ({
query: message, query: message,
inputs, inputs,
model_config: configData, model_config: configData,
parent_message_id: chatListRef.current.at(-1)?.id || null, parent_message_id: getLastAnswer(chatListRef.current)?.id || null,
} }
if ((config.file_upload as any).enabled && files?.length && supportVision) if ((config.file_upload as any).enabled && files?.length && supportVision)

View File

@ -334,7 +334,7 @@ const GenerationItem: FC<IGenerationItemProps> = ({
</SimpleBtn> </SimpleBtn>
) )
} }
{(currentTab === 'RESULT' || !isWorkflow) && ( {((currentTab === 'RESULT' && workflowProcessData?.resultText) || !isWorkflow) && (
<SimpleBtn <SimpleBtn
isDisabled={isError || !messageId} isDisabled={isError || !messageId}
className={cn(isMobile && '!px-1.5', 'space-x-1')} className={cn(isMobile && '!px-1.5', 'space-x-1')}

View File

@ -27,15 +27,15 @@ const ResultTab = ({
onCurrentTabChange(tab) onCurrentTabChange(tab)
} }
useEffect(() => { useEffect(() => {
if (data?.resultText) if (data?.resultText || !!data?.files?.length)
switchTab('RESULT') switchTab('RESULT')
else else
switchTab('DETAIL') switchTab('DETAIL')
}, [data?.resultText]) }, [data?.files?.length, data?.resultText])
return ( return (
<div className='grow relative flex flex-col'> <div className='grow relative flex flex-col'>
{data?.resultText && ( {(data?.resultText || !!data?.files?.length) && (
<div className='shrink-0 flex items-center mb-2 border-b-[0.5px] border-[rgba(0,0,0,0.05)]'> <div className='shrink-0 flex items-center mb-2 border-b-[0.5px] border-[rgba(0,0,0,0.05)]'>
<div <div
className={cn( className={cn(
@ -56,14 +56,21 @@ const ResultTab = ({
<div className={cn('grow bg-white')}> <div className={cn('grow bg-white')}>
{currentTab === 'RESULT' && ( {currentTab === 'RESULT' && (
<> <>
<Markdown content={data?.resultText || ''} /> {data?.resultText && <Markdown content={data?.resultText || ''} />}
{!!data?.files?.length && ( {!!data?.files?.length && (
<FileList <div className='flex flex-col gap-2'>
files={data?.files} {data?.files.map((item: any) => (
showDeleteAction={false} <div key={item.varName} className='flex flex-col gap-1 system-xs-regular'>
showDownloadAction <div className='py-1 text-text-tertiary '>{item.varName}</div>
canPreview <FileList
/> files={item.list}
showDeleteAction={false}
showDownloadAction
canPreview
/>
</div>
))}
</div>
)} )}
</> </>
)} )}

View File

@ -1,4 +1,5 @@
import React, { useState } from 'react' import React, { useMemo, useState } from 'react'
import { useTranslation } from 'react-i18next'
import { RiArrowRightSLine } from '@remixicon/react' import { RiArrowRightSLine } from '@remixicon/react'
import FileImageRender from './file-image-render' import FileImageRender from './file-image-render'
import FileTypeIcon from './file-type-icon' import FileTypeIcon from './file-type-icon'
@ -12,23 +13,36 @@ import { SupportUploadFileTypes } from '@/app/components/workflow/types'
import cn from '@/utils/classnames' import cn from '@/utils/classnames'
type Props = { type Props = {
fileList: FileEntity[] fileList: {
varName: string
list: FileEntity[]
}[]
isExpanded?: boolean
noBorder?: boolean
noPadding?: boolean
} }
const FileListInLog = ({ fileList }: Props) => { const FileListInLog = ({ fileList, isExpanded = false, noBorder = false, noPadding = false }: Props) => {
const [expanded, setExpanded] = useState(false) const { t } = useTranslation()
const [expanded, setExpanded] = useState(isExpanded)
const fullList = useMemo(() => {
return fileList.reduce((acc: FileEntity[], { list }) => {
return [...acc, ...list]
}, [])
}, [fileList])
if (!fileList.length) if (!fileList.length)
return null return null
return ( return (
<div className={cn('border-t border-divider-subtle px-3 py-2', expanded && 'py-3')}> <div className={cn('px-3 py-2', expanded && 'py-3', !noBorder && 'border-t border-divider-subtle', noPadding && '!p-0')}>
<div className='flex justify-between gap-1'> <div className='flex justify-between gap-1'>
{expanded && ( {expanded && (
<div></div> <div className='grow py-1 text-text-secondary system-xs-semibold-uppercase cursor-pointer' onClick={() => setExpanded(!expanded)}>{t('appLog.runDetail.fileListLabel')}</div>
)} )}
{!expanded && ( {!expanded && (
<div className='flex'> <div className='flex gap-1'>
{fileList.map((file) => { {fullList.map((file) => {
const { id, name, type, supportFileType, base64Url, url } = file const { id, name, type, supportFileType, base64Url, url } = file
const isImageFile = supportFileType === SupportUploadFileTypes.image const isImageFile = supportFileType === SupportUploadFileTypes.image
return ( return (
@ -63,19 +77,25 @@ const FileListInLog = ({ fileList }: Props) => {
</div> </div>
)} )}
<div className='flex items-center gap-1 cursor-pointer' onClick={() => setExpanded(!expanded)}> <div className='flex items-center gap-1 cursor-pointer' onClick={() => setExpanded(!expanded)}>
{!expanded && <div className='text-text-tertiary system-xs-medium-uppercase'>DETAIL</div>} {!expanded && <div className='text-text-tertiary system-xs-medium-uppercase'>{t('appLog.runDetail.fileListDetail')}</div>}
<RiArrowRightSLine className={cn('w-4 h-4 text-text-tertiary', expanded && 'rotate-90')} /> <RiArrowRightSLine className={cn('w-4 h-4 text-text-tertiary', expanded && 'rotate-90')} />
</div> </div>
</div> </div>
{expanded && ( {expanded && (
<div className='flex flex-col gap-1'> <div className='flex flex-col gap-3'>
{fileList.map(file => ( {fileList.map(item => (
<FileItem <div key={item.varName} className='flex flex-col gap-1 system-xs-regular'>
key={file.id} <div className='py-1 text-text-tertiary '>{item.varName}</div>
file={file} {item.list.map(file => (
showDeleteAction={false} <FileItem
showDownloadAction key={file.id}
/> file={file}
showDeleteAction={false}
showDownloadAction
canPreview
/>
))}
</div>
))} ))}
</div> </div>
)} )}

View File

@ -1,12 +1,15 @@
import { import {
memo, memo,
useState,
} from 'react' } from 'react'
import { import {
RiDeleteBinLine, RiDeleteBinLine,
RiDownloadLine, RiDownloadLine,
RiEyeLine,
} from '@remixicon/react' } from '@remixicon/react'
import FileTypeIcon from '../file-type-icon' import FileTypeIcon from '../file-type-icon'
import { import {
downloadFile,
fileIsUploaded, fileIsUploaded,
getFileAppearanceType, getFileAppearanceType,
getFileExtension, getFileExtension,
@ -19,6 +22,7 @@ import { formatFileSize } from '@/utils/format'
import cn from '@/utils/classnames' import cn from '@/utils/classnames'
import { ReplayLine } from '@/app/components/base/icons/src/vender/other' import { ReplayLine } from '@/app/components/base/icons/src/vender/other'
import { SupportUploadFileTypes } from '@/app/components/workflow/types' import { SupportUploadFileTypes } from '@/app/components/workflow/types'
import ImagePreview from '@/app/components/base/image-uploader/image-preview'
type FileInAttachmentItemProps = { type FileInAttachmentItemProps = {
file: FileEntity file: FileEntity
@ -26,6 +30,7 @@ type FileInAttachmentItemProps = {
showDownloadAction?: boolean showDownloadAction?: boolean
onRemove?: (fileId: string) => void onRemove?: (fileId: string) => void
onReUpload?: (fileId: string) => void onReUpload?: (fileId: string) => void
canPreview?: boolean
} }
const FileInAttachmentItem = ({ const FileInAttachmentItem = ({
file, file,
@ -33,96 +38,116 @@ const FileInAttachmentItem = ({
showDownloadAction = true, showDownloadAction = true,
onRemove, onRemove,
onReUpload, onReUpload,
canPreview,
}: FileInAttachmentItemProps) => { }: FileInAttachmentItemProps) => {
const { id, name, type, progress, supportFileType, base64Url, url, isRemote } = file const { id, name, type, progress, supportFileType, base64Url, url, isRemote } = file
const ext = getFileExtension(name, type, isRemote) const ext = getFileExtension(name, type, isRemote)
const isImageFile = supportFileType === SupportUploadFileTypes.image const isImageFile = supportFileType === SupportUploadFileTypes.image
const [imagePreviewUrl, setImagePreviewUrl] = useState('')
return ( return (
<div className={cn( <>
'flex items-center pr-3 h-12 rounded-lg border-[0.5px] border-components-panel-border bg-components-panel-on-panel-item-bg shadow-xs', <div className={cn(
progress === -1 && 'bg-state-destructive-hover border-state-destructive-border', 'flex items-center pr-3 h-12 rounded-lg border-[0.5px] border-components-panel-border bg-components-panel-on-panel-item-bg shadow-xs',
)}> progress === -1 && 'bg-state-destructive-hover border-state-destructive-border',
<div className='flex items-center justify-center w-12 h-12'> )}>
{ <div className='flex items-center justify-center w-12 h-12'>
isImageFile && ( {
<FileImageRender isImageFile && (
className='w-8 h-8' <FileImageRender
imageUrl={base64Url || url || ''} className='w-8 h-8'
/> imageUrl={base64Url || url || ''}
) />
} )
{ }
!isImageFile && ( {
<FileTypeIcon !isImageFile && (
type={getFileAppearanceType(name, type)} <FileTypeIcon
size='lg' type={getFileAppearanceType(name, type)}
/> size='lg'
) />
} )
</div> }
<div className='grow w-0 mr-1'>
<div
className='flex items-center mb-0.5 system-xs-medium text-text-secondary truncate'
title={file.name}
>
<div className='truncate'>{name}</div>
</div> </div>
<div className='flex items-center system-2xs-medium-uppercase text-text-tertiary'> <div className='grow w-0 mr-1'>
<div
className='flex items-center mb-0.5 system-xs-medium text-text-secondary truncate'
title={file.name}
>
<div className='truncate'>{name}</div>
</div>
<div className='flex items-center system-2xs-medium-uppercase text-text-tertiary'>
{
ext && (
<span>{ext.toLowerCase()}</span>
)
}
{
ext && (
<span className='mx-1 system-2xs-medium'></span>
)
}
{
!!file.size && (
<span>{formatFileSize(file.size)}</span>
)
}
</div>
</div>
<div className='shrink-0 flex items-center'>
{ {
ext && ( progress >= 0 && !fileIsUploaded(file) && (
<span>{ext.toLowerCase()}</span> <ProgressCircle
className='mr-2.5'
percentage={progress}
/>
) )
} }
{ {
ext && ( progress === -1 && (
<span className='mx-1 system-2xs-medium'></span> <ActionButton
className='mr-1'
onClick={() => onReUpload?.(id)}
>
<ReplayLine className='w-4 h-4 text-text-tertiary' />
</ActionButton>
) )
} }
{ {
!!file.size && ( showDeleteAction && (
<span>{formatFileSize(file.size)}</span> <ActionButton onClick={() => onRemove?.(id)}>
<RiDeleteBinLine className='w-4 h-4' />
</ActionButton>
)
}
{
canPreview && isImageFile && (
<ActionButton className='mr-1' onClick={() => setImagePreviewUrl(url || '')}>
<RiEyeLine className='w-4 h-4' />
</ActionButton>
)
}
{
showDownloadAction && (
<ActionButton onClick={(e) => {
e.stopPropagation()
downloadFile(url || base64Url || '', name)
}}>
<RiDownloadLine className='w-4 h-4' />
</ActionButton>
) )
} }
</div> </div>
</div> </div>
<div className='shrink-0 flex items-center'> {
{ imagePreviewUrl && canPreview && (
progress >= 0 && !fileIsUploaded(file) && ( <ImagePreview
<ProgressCircle title={name}
className='mr-2.5' url={imagePreviewUrl}
percentage={progress} onCancel={() => setImagePreviewUrl('')}
/> />
) )
} }
{ </>
progress === -1 && (
<ActionButton
className='mr-1'
onClick={() => onReUpload?.(id)}
>
<ReplayLine className='w-4 h-4 text-text-tertiary' />
</ActionButton>
)
}
{
showDeleteAction && (
<ActionButton onClick={() => onRemove?.(id)}>
<RiDeleteBinLine className='w-4 h-4' />
</ActionButton>
)
}
{
showDownloadAction && (
<ActionButton
size='xs'
>
<RiDownloadLine className='w-3.5 h-3.5 text-text-tertiary' />
</ActionButton>
)
}
</div>
</div>
) )
} }

View File

@ -31,7 +31,7 @@ const FileItem = ({
onRemove, onRemove,
onReUpload, onReUpload,
}: FileItemProps) => { }: FileItemProps) => {
const { id, name, type, progress, url, isRemote } = file const { id, name, type, progress, url, base64Url, isRemote } = file
const ext = getFileExtension(name, type, isRemote) const ext = getFileExtension(name, type, isRemote)
const uploadError = progress === -1 const uploadError = progress === -1
@ -86,7 +86,7 @@ const FileItem = ({
className='hidden group-hover/file-item:flex absolute -right-1 -top-1' className='hidden group-hover/file-item:flex absolute -right-1 -top-1'
onClick={(e) => { onClick={(e) => {
e.stopPropagation() e.stopPropagation()
downloadFile(url || '', name) downloadFile(url || base64Url || '', name)
}} }}
> >
<RiDownloadLine className='w-3.5 h-3.5 text-text-tertiary' /> <RiDownloadLine className='w-3.5 h-3.5 text-text-tertiary' />

View File

@ -1,5 +1,4 @@
import mime from 'mime' import mime from 'mime'
import { flatten } from 'lodash-es'
import { FileAppearanceTypeEnum } from './types' import { FileAppearanceTypeEnum } from './types'
import type { FileEntity } from './types' import type { FileEntity } from './types'
import { upload } from '@/service/base' import { upload } from '@/service/base'
@ -158,12 +157,22 @@ export const isAllowedFileExtension = (fileName: string, fileMimetype: string, a
} }
export const getFilesInLogs = (rawData: any) => { export const getFilesInLogs = (rawData: any) => {
const originalFiles = flatten(Object.keys(rawData || {}).map((key) => { const result = Object.keys(rawData || {}).map((key) => {
if (typeof rawData[key] === 'object' || Array.isArray(rawData[key])) if (typeof rawData[key] === 'object' && rawData[key].dify_model_identity === '__dify__file__') {
return rawData[key] return {
varName: key,
list: getProcessedFilesFromResponse([rawData[key]]),
}
}
if (Array.isArray(rawData[key]) && rawData[key].some(item => item.dify_model_identity === '__dify__file__')) {
return {
varName: key,
list: getProcessedFilesFromResponse(rawData[key]),
}
}
return undefined return undefined
}).filter(Boolean)).filter(item => item?.model_identity === '__dify__file__') }).filter(Boolean)
return getProcessedFilesFromResponse(originalFiles) return result
} }
export const fileIsUploaded = (file: FileEntity) => { export const fileIsUploaded = (file: FileEntity) => {

View File

@ -53,8 +53,7 @@ const ImageGallery: FC<Props> = ({
imagePreviewUrl && ( imagePreviewUrl && (
<ImagePreview <ImagePreview
url={imagePreviewUrl} url={imagePreviewUrl}
onCancel={() => setImagePreviewUrl('')} onCancel={() => setImagePreviewUrl('')} title={''} />
/>
) )
} }
</div> </div>

View File

@ -8,8 +8,7 @@ import RemarkGfm from 'remark-gfm'
import RehypeRaw from 'rehype-raw' import RehypeRaw from 'rehype-raw'
import SyntaxHighlighter from 'react-syntax-highlighter' import SyntaxHighlighter from 'react-syntax-highlighter'
import { atelierHeathLight } from 'react-syntax-highlighter/dist/esm/styles/hljs' import { atelierHeathLight } from 'react-syntax-highlighter/dist/esm/styles/hljs'
import type { RefObject } from 'react' import { Component, memo, useMemo, useRef, useState } from 'react'
import { Component, memo, useEffect, useMemo, useRef, useState } from 'react'
import type { CodeComponent } from 'react-markdown/lib/ast-to-react' import type { CodeComponent } from 'react-markdown/lib/ast-to-react'
import cn from '@/utils/classnames' import cn from '@/utils/classnames'
import CopyBtn from '@/app/components/base/copy-btn' import CopyBtn from '@/app/components/base/copy-btn'
@ -77,29 +76,6 @@ export function PreCode(props: { children: any }) {
) )
} }
// eslint-disable-next-line unused-imports/no-unused-vars
const useLazyLoad = (ref: RefObject<Element>): boolean => {
const [isIntersecting, setIntersecting] = useState<boolean>(false)
useEffect(() => {
const observer = new IntersectionObserver(([entry]) => {
if (entry.isIntersecting) {
setIntersecting(true)
observer.disconnect()
}
})
if (ref.current)
observer.observe(ref.current)
return () => {
observer.disconnect()
}
}, [ref])
return isIntersecting
}
// **Add code block // **Add code block
// Avoid error #185 (Maximum update depth exceeded. // Avoid error #185 (Maximum update depth exceeded.
// This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. // This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate.
@ -123,7 +99,7 @@ const CodeBlock: CodeComponent = memo(({ inline, className, children, ...props }
try { try {
return JSON.parse(String(children).replace(/\n$/, '')) return JSON.parse(String(children).replace(/\n$/, ''))
} }
catch (error) {} catch (error) { }
} }
return JSON.parse('{"title":{"text":"ECharts error - Wrong JSON format."}}') return JSON.parse('{"title":{"text":"ECharts error - Wrong JSON format."}}')
}, [language, children]) }, [language, children])
@ -181,7 +157,7 @@ const CodeBlock: CodeComponent = memo(({ inline, className, children, ...props }
> >
<div className='text-[13px] text-gray-500 font-normal'>{languageShowName}</div> <div className='text-[13px] text-gray-500 font-normal'>{languageShowName}</div>
<div style={{ display: 'flex' }}> <div style={{ display: 'flex' }}>
{(['mermaid', 'svg']).includes(language!) && <SVGBtn isSVG={isSVG} setIsSVG={setIsSVG}/>} {(['mermaid', 'svg']).includes(language!) && <SVGBtn isSVG={isSVG} setIsSVG={setIsSVG} />}
<CopyBtn <CopyBtn
className='mr-1' className='mr-1'
value={String(children).replace(/\n$/, '')} value={String(children).replace(/\n$/, '')}
@ -261,7 +237,7 @@ export function Markdown(props: { content: string; className?: string }) {
() => { () => {
return (tree) => { return (tree) => {
const iterate = (node: any) => { const iterate = (node: any) => {
if (node.type === 'element' && !node.properties?.src && node.properties?.ref && node.properties.ref.startsWith('{') && node.properties.ref.endsWith('}')) if (node.type === 'element' && node.properties?.ref)
delete node.properties.ref delete node.properties.ref
if (node.children) if (node.children)

View File

@ -1,24 +1,18 @@
import React, { useEffect, useRef, useState } from 'react' import React, { useCallback, useEffect, useRef, useState } from 'react'
import mermaid from 'mermaid' import mermaid from 'mermaid'
import { usePrevious } from 'ahooks' import { usePrevious } from 'ahooks'
import CryptoJS from 'crypto-js' import CryptoJS from 'crypto-js'
import { useTranslation } from 'react-i18next'
import { ExclamationTriangleIcon } from '@heroicons/react/24/outline' import { ExclamationTriangleIcon } from '@heroicons/react/24/outline'
import LoadingAnim from '@/app/components/base/chat/chat/loading-anim' import LoadingAnim from '@/app/components/base/chat/chat/loading-anim'
import cn from '@/utils/classnames'
import ImagePreview from '@/app/components/base/image-uploader/image-preview'
let mermaidAPI: any let mermaidAPI: any
mermaidAPI = null mermaidAPI = null
if (typeof window !== 'undefined') { if (typeof window !== 'undefined')
mermaid.initialize({
startOnLoad: true,
theme: 'default',
flowchart: {
htmlLabels: true,
useMaxWidth: true,
},
})
mermaidAPI = mermaid.mermaidAPI mermaidAPI = mermaid.mermaidAPI
}
const style = { const style = {
minWidth: '480px', minWidth: '480px',
@ -40,14 +34,21 @@ const svgToBase64 = (svgGraph: string) => {
const Flowchart = React.forwardRef((props: { const Flowchart = React.forwardRef((props: {
PrimitiveCode: string PrimitiveCode: string
}, ref) => { }, ref) => {
const { t } = useTranslation()
const [svgCode, setSvgCode] = useState(null) const [svgCode, setSvgCode] = useState(null)
const [look, setLook] = useState<'classic' | 'handDrawn'>('classic')
const chartId = useRef(`flowchart_${CryptoJS.MD5(props.PrimitiveCode).toString()}`) const chartId = useRef(`flowchart_${CryptoJS.MD5(props.PrimitiveCode).toString()}`)
const prevPrimitiveCode = usePrevious(props.PrimitiveCode) const prevPrimitiveCode = usePrevious(props.PrimitiveCode)
const [isLoading, setIsLoading] = useState(true) const [isLoading, setIsLoading] = useState(true)
const timeRef = useRef<NodeJS.Timeout>() const timeRef = useRef<NodeJS.Timeout>()
const [errMsg, setErrMsg] = useState('') const [errMsg, setErrMsg] = useState('')
const [imagePreviewUrl, setImagePreviewUrl] = useState('')
const renderFlowchart = useCallback(async (PrimitiveCode: string) => {
setSvgCode(null)
setIsLoading(true)
const renderFlowchart = async (PrimitiveCode: string) => {
try { try {
if (typeof window !== 'undefined' && mermaidAPI) { if (typeof window !== 'undefined' && mermaidAPI) {
const svgGraph = await mermaidAPI.render(chartId.current, PrimitiveCode) const svgGraph = await mermaidAPI.render(chartId.current, PrimitiveCode)
@ -64,10 +65,28 @@ const Flowchart = React.forwardRef((props: {
setErrMsg((error as Error).message) setErrMsg((error as Error).message)
} }
} }
} }, [props.PrimitiveCode])
useEffect(() => {
if (typeof window !== 'undefined') {
mermaid.initialize({
startOnLoad: true,
theme: 'neutral',
look,
flowchart: {
htmlLabels: true,
useMaxWidth: true,
},
})
localStorage.removeItem(chartId.current)
renderFlowchart(props.PrimitiveCode)
}
}, [look])
useEffect(() => { useEffect(() => {
const cachedSvg: any = localStorage.getItem(chartId.current) const cachedSvg: any = localStorage.getItem(chartId.current)
if (cachedSvg) { if (cachedSvg) {
setSvgCode(cachedSvg) setSvgCode(cachedSvg)
setIsLoading(false) setIsLoading(false)
@ -85,24 +104,51 @@ const Flowchart = React.forwardRef((props: {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error // @ts-expect-error
<div ref={ref}> <div ref={ref}>
<div className="msh-segmented msh-segmented-sm css-23bs09 css-var-r1">
<div className="msh-segmented-group">
<label className="msh-segmented-item flex items-center space-x-1 m-2 w-[200px]">
<div key='classic'
className={cn('flex items-center justify-center mb-4 w-[calc((100%-8px)/2)] h-8 rounded-lg border border-components-option-card-option-border bg-components-option-card-option-bg cursor-pointer system-sm-medium text-text-secondary',
look === 'classic' && 'border-[1.5px] border-components-option-card-option-selected-border bg-components-option-card-option-selected-bg text-text-primary',
)}
onClick={() => setLook('classic')}
>
<div className="msh-segmented-item-label">{t('app.mermaid.classic')}</div>
</div>
<div key='handDrawn'
className={cn(
'flex items-center justify-center mb-4 w-[calc((100%-8px)/2)] h-8 rounded-lg border border-components-option-card-option-border bg-components-option-card-option-bg cursor-pointer system-sm-medium text-text-secondary',
look === 'handDrawn' && 'border-[1.5px] border-components-option-card-option-selected-border bg-components-option-card-option-selected-bg text-text-primary',
)}
onClick={() => setLook('handDrawn')}
>
<div className="msh-segmented-item-label">{t('app.mermaid.handDrawn')}</div>
</div>
</label>
</div>
</div>
{ {
svgCode svgCode
&& <div className="mermaid" style={style}> && <div className="mermaid cursor-pointer" style={style} onClick={() => setImagePreviewUrl(svgCode)}>
{svgCode && <img src={svgCode} style={{ width: '100%', height: 'auto' }} alt="Mermaid chart" />} {svgCode && <img src={svgCode} style={{ width: '100%', height: 'auto' }} alt="mermaid_chart" />}
</div> </div>
} }
{isLoading {isLoading
&& <div className='py-4 px-[26px]'> && <div className='py-4 px-[26px]'>
<LoadingAnim type='text' /> <LoadingAnim type='text'/>
</div> </div>
} }
{ {
errMsg errMsg
&& <div className='py-4 px-[26px]'> && <div className='py-4 px-[26px]'>
<ExclamationTriangleIcon className='w-6 h-6 text-red-500' /> <ExclamationTriangleIcon className='w-6 h-6 text-red-500'/>
&nbsp; &nbsp;
{errMsg} {errMsg}
</div> </div>
}
{
imagePreviewUrl && (<ImagePreview title='mermaid_chart' url={imagePreviewUrl} onCancel={() => setImagePreviewUrl('')} />)
} }
</div> </div>
) )

View File

@ -0,0 +1,47 @@
import type { ComponentProps, FC } from 'react'
import classNames from '@/utils/classnames'
type SkeletonProps = ComponentProps<'div'>
export const SkeletonContanier: FC<SkeletonProps> = (props) => {
const { className, children, ...rest } = props
return (
<div className={classNames('flex flex-col gap-1', className)} {...rest}>
{children}
</div>
)
}
export const SkeletonRow: FC<SkeletonProps> = (props) => {
const { className, children, ...rest } = props
return (
<div className={classNames('flex items-center gap-2', className)} {...rest}>
{children}
</div>
)
}
export const SkeletonRectangle: FC<SkeletonProps> = (props) => {
const { className, children, ...rest } = props
return (
<div className={classNames('h-2 rounded-sm opacity-20 bg-text-tertiary my-1', className)} {...rest}>
{children}
</div>
)
}
export const SkeletonPoint: FC = () =>
<div className='text-text-quaternary text-xs font-medium'>·</div>
/** Usage
* <SkeletonContanier>
* <SkeletonRow>
* <SkeletonRectangle className="w-96" />
* <SkeletonPoint />
* <SkeletonRectangle className="w-96" />
* </SkeletonRow>
* <SkeletonRow>
* <SkeletonRectangle className="w-96" />
* </SkeletonRow>
* <SkeletonRow>
*/

View File

@ -21,7 +21,7 @@ import { sleep } from '@/utils'
import type { SiteInfo } from '@/models/share' import type { SiteInfo } from '@/models/share'
import { TEXT_GENERATION_TIMEOUT_MS } from '@/config' import { TEXT_GENERATION_TIMEOUT_MS } from '@/config'
import { import {
getProcessedFilesFromResponse, getFilesInLogs,
} from '@/app/components/base/file-uploader/utils' } from '@/app/components/base/file-uploader/utils'
export type IResultProps = { export type IResultProps = {
@ -288,7 +288,7 @@ const Result: FC<IResultProps> = ({
} }
setWorkflowProcessData(produce(getWorkflowProcessData()!, (draft) => { setWorkflowProcessData(produce(getWorkflowProcessData()!, (draft) => {
draft.status = WorkflowRunningStatus.Succeeded draft.status = WorkflowRunningStatus.Succeeded
draft.files = getProcessedFilesFromResponse(data.files || []) draft.files = getFilesInLogs(data.outputs || []) as any[]
})) }))
if (!data.outputs) { if (!data.outputs) {
setCompletionRes('') setCompletionRes('')

View File

@ -26,7 +26,7 @@ import {
import { useFeaturesStore } from '@/app/components/base/features/hooks' import { useFeaturesStore } from '@/app/components/base/features/hooks'
import { AudioPlayerManager } from '@/app/components/base/audio-btn/audio.player.manager' import { AudioPlayerManager } from '@/app/components/base/audio-btn/audio.player.manager'
import { import {
getProcessedFilesFromResponse, getFilesInLogs,
} from '@/app/components/base/file-uploader/utils' } from '@/app/components/base/file-uploader/utils'
export const useWorkflowRun = () => { export const useWorkflowRun = () => {
@ -213,7 +213,7 @@ export const useWorkflowRun = () => {
draft.result = { draft.result = {
...draft.result, ...draft.result,
...data, ...data,
files: getProcessedFilesFromResponse(data.files || []), files: getFilesInLogs(data.outputs),
} as any } as any
if (isStringOutput) { if (isStringOutput) {
draft.resultTabActive = true draft.resultTabActive = true

View File

@ -27,7 +27,10 @@ type Props = {
isInNode?: boolean isInNode?: boolean
onGenerated?: (prompt: string) => void onGenerated?: (prompt: string) => void
codeLanguages?: CodeLanguage codeLanguages?: CodeLanguage
fileList?: FileEntity[] fileList?: {
varName: string
list: FileEntity[]
}[]
showFileList?: boolean showFileList?: boolean
showCodeGenerator?: boolean showCodeGenerator?: boolean
} }

View File

@ -208,7 +208,7 @@ const CodeEditor: FC<Props> = ({
isInNode={isInNode} isInNode={isInNode}
onGenerated={onGenerated} onGenerated={onGenerated}
codeLanguages={language} codeLanguages={language}
fileList={fileList} fileList={fileList as any}
showFileList={showFileList} showFileList={showFileList}
showCodeGenerator={showCodeGenerator} showCodeGenerator={showCodeGenerator}
> >

View File

@ -30,7 +30,9 @@ const nodeDefault: NodeDefault<AssignerNodeType> = {
errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: t('workflow.nodes.assigner.assignedVariable') }) errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: t('workflow.nodes.assigner.assignedVariable') })
if (!errorMessages && value.operation !== WriteMode.clear) { if (!errorMessages && value.operation !== WriteMode.clear) {
if (value.operation === WriteMode.set) { if (value.operation === WriteMode.set || value.operation === WriteMode.increment
|| value.operation === WriteMode.decrement || value.operation === WriteMode.multiply
|| value.operation === WriteMode.divide) {
if (!value.value && typeof value.value !== 'number') if (!value.value && typeof value.value !== 'number')
errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: t('workflow.nodes.assigner.variable') }) errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: t('workflow.nodes.assigner.variable') })
} }

View File

@ -33,7 +33,7 @@ const NodeVariableItem = ({
const { t } = useTranslation() const { t } = useTranslation()
return ( return (
<div className={cn( <div className={cn(
'relative flex items-center p-[3px] pl-[5px] gap-1 self-stretch rounded-md bg-workflow-block-param-bg', 'relative flex items-center p-[3px] pl-[5px] gap-1 self-stretch rounded-md bg-workflow-block-parma-bg',
showBorder && '!bg-black/[0.02]', showBorder && '!bg-black/[0.02]',
className, className,
)}> )}>

View File

@ -97,8 +97,9 @@ const ChatVariableModal = ({
return objectPlaceholder return objectPlaceholder
}, [type]) }, [type])
const getObjectValue = useCallback(() => { const getObjectValue = useCallback(() => {
if (!chatVar) if (!chatVar || Object.keys(chatVar.value).length === 0)
return [DEFAULT_OBJECT_VALUE] return [DEFAULT_OBJECT_VALUE]
return Object.keys(chatVar.value).map((key) => { return Object.keys(chatVar.value).map((key) => {
return { return {
key, key,

View File

@ -48,7 +48,7 @@ const WorkflowPreview = () => {
}, [showDebugAndPreviewPanel, showInputsPanel]) }, [showDebugAndPreviewPanel, showInputsPanel])
useEffect(() => { useEffect(() => {
if ((workflowRunningData?.result.status === WorkflowRunningStatus.Succeeded || workflowRunningData?.result.status === WorkflowRunningStatus.Failed) && !workflowRunningData.resultText) if ((workflowRunningData?.result.status === WorkflowRunningStatus.Succeeded || workflowRunningData?.result.status === WorkflowRunningStatus.Failed) && !workflowRunningData.resultText && !workflowRunningData.result.files?.length)
switchTab('DETAIL') switchTab('DETAIL')
}, [workflowRunningData]) }, [workflowRunningData])

View File

@ -1,10 +1,13 @@
'use client' 'use client'
import type { FC } from 'react' import type { FC } from 'react'
import { useMemo } from 'react'
import CodeEditor from '@/app/components/workflow/nodes/_base/components/editor/code-editor' import CodeEditor from '@/app/components/workflow/nodes/_base/components/editor/code-editor'
import { CodeLanguage } from '@/app/components/workflow/nodes/code/types' import { CodeLanguage } from '@/app/components/workflow/nodes/code/types'
import { Markdown } from '@/app/components/base/markdown' import { Markdown } from '@/app/components/base/markdown'
import LoadingAnim from '@/app/components/base/chat/chat/loading-anim' import LoadingAnim from '@/app/components/base/chat/chat/loading-anim'
import { FileList } from '@/app/components/base/file-uploader'
import StatusContainer from '@/app/components/workflow/run/status-container' import StatusContainer from '@/app/components/workflow/run/status-container'
import { getProcessedFilesFromResponse } from '@/app/components/base/file-uploader/utils'
type OutputPanelProps = { type OutputPanelProps = {
isRunning?: boolean isRunning?: boolean
@ -19,6 +22,30 @@ const OutputPanel: FC<OutputPanelProps> = ({
error, error,
height, height,
}) => { }) => {
const isTextOutput = useMemo(() => {
return outputs && Object.keys(outputs).length === 1 && typeof outputs[Object.keys(outputs)[0]] === 'string'
}, [outputs])
const fileList = useMemo(() => {
const fileList: any[] = []
if (!outputs)
return fileList
if (Object.keys(outputs).length > 1)
return fileList
for (const key in outputs) {
if (Array.isArray(outputs[key])) {
outputs[key].map((output: any) => {
if (output.dify_model_identity === '__dify__file__')
fileList.push(output)
return null
})
}
else if (outputs[key].dify_model_identity === '__dify__file__') {
fileList.push(outputs[key])
}
}
return getProcessedFilesFromResponse(fileList)
}, [outputs])
return ( return (
<div className='py-2'> <div className='py-2'>
{isRunning && ( {isRunning && (
@ -36,20 +63,31 @@ const OutputPanel: FC<OutputPanelProps> = ({
<Markdown content='No Output' /> <Markdown content='No Output' />
</div> </div>
)} )}
{outputs && Object.keys(outputs).length === 1 && ( {isTextOutput && (
<div className='px-4 py-2'> <div className='px-4 py-2'>
<Markdown content={outputs[Object.keys(outputs)[0]] || ''} /> <Markdown content={outputs[Object.keys(outputs)[0]] || ''} />
</div> </div>
)} )}
{fileList.length > 0 && (
<div className='px-4 py-2'>
<FileList
files={fileList}
showDeleteAction={false}
showDownloadAction
canPreview
/>
</div>
)}
{outputs && Object.keys(outputs).length > 1 && height! > 0 && ( {outputs && Object.keys(outputs).length > 1 && height! > 0 && (
<div className='px-4 py-2 flex flex-col gap-2'> <div className='flex flex-col gap-2'>
<CodeEditor <CodeEditor
showFileList
readOnly readOnly
title={<div></div>} title={<div></div>}
language={CodeLanguage.json} language={CodeLanguage.json}
value={outputs} value={outputs}
isJSONStringifyBeauty isJSONStringifyBeauty
height={height} height={height ? (height - 16) / 2 : undefined}
/> />
</div> </div>
)} )}

View File

@ -6,14 +6,13 @@ import { Markdown } from '@/app/components/base/markdown'
import LoadingAnim from '@/app/components/base/chat/chat/loading-anim' import LoadingAnim from '@/app/components/base/chat/chat/loading-anim'
import StatusContainer from '@/app/components/workflow/run/status-container' import StatusContainer from '@/app/components/workflow/run/status-container'
import { FileList } from '@/app/components/base/file-uploader' import { FileList } from '@/app/components/base/file-uploader'
import type { FileEntity } from '@/app/components/base/file-uploader/types'
type ResultTextProps = { type ResultTextProps = {
isRunning?: boolean isRunning?: boolean
outputs?: any outputs?: any
error?: string error?: string
onClick?: () => void onClick?: () => void
allFiles?: FileEntity[] allFiles?: any[]
} }
const ResultText: FC<ResultTextProps> = ({ const ResultText: FC<ResultTextProps> = ({
@ -25,20 +24,20 @@ const ResultText: FC<ResultTextProps> = ({
}) => { }) => {
const { t } = useTranslation() const { t } = useTranslation()
return ( return (
<div className='bg-background-section-burn py-2'> <div className='bg-background-section-burn'>
{isRunning && !outputs && ( {isRunning && !outputs && (
<div className='pt-4 pl-[26px]'> <div className='pt-4 pl-[26px]'>
<LoadingAnim type='text' /> <LoadingAnim type='text' />
</div> </div>
)} )}
{!isRunning && error && ( {!isRunning && error && (
<div className='px-4'> <div className='px-4 py-2'>
<StatusContainer status='failed'> <StatusContainer status='failed'>
{error} {error}
</StatusContainer> </StatusContainer>
</div> </div>
)} )}
{!isRunning && !outputs && !error && ( {!isRunning && !outputs && !error && !allFiles?.length && (
<div className='mt-[120px] px-4 py-2 flex flex-col items-center text-[13px] leading-[18px] text-gray-500'> <div className='mt-[120px] px-4 py-2 flex flex-col items-center text-[13px] leading-[18px] text-gray-500'>
<ImageIndentLeft className='w-6 h-6 text-gray-400' /> <ImageIndentLeft className='w-6 h-6 text-gray-400' />
<div className='mr-2'>{t('runLog.resultEmpty.title')}</div> <div className='mr-2'>{t('runLog.resultEmpty.title')}</div>
@ -49,18 +48,25 @@ const ResultText: FC<ResultTextProps> = ({
</div> </div>
</div> </div>
)} )}
{outputs && ( {(outputs || !!allFiles?.length) && (
<div className='px-4 py-2'> <>
<Markdown content={outputs} /> {outputs && (
{!!allFiles?.length && ( <div className='px-4 py-2'>
<FileList <Markdown content={outputs} />
files={allFiles} </div>
showDeleteAction={false}
showDownloadAction
canPreview
/>
)} )}
</div> {!!allFiles?.length && allFiles.map(item => (
<div key={item.varName} className='px-4 py-2 flex flex-col gap-1 system-xs-regular'>
<div className='py-1 text-text-tertiary '>{item.varName}</div>
<FileList
files={item.list}
showDeleteAction={false}
showDownloadAction
canPreview
/>
</div>
))}
</>
)} )}
</div> </div>
) )

View File

@ -79,6 +79,8 @@ const translation = {
runDetail: { runDetail: {
title: 'Konversationsprotokoll', title: 'Konversationsprotokoll',
workflowTitle: 'Protokolldetail', workflowTitle: 'Protokolldetail',
fileListLabel: 'Details zur Datei',
fileListDetail: 'Detail',
}, },
promptLog: 'Prompt-Protokoll', promptLog: 'Prompt-Protokoll',
agentLog: 'Agentenprotokoll', agentLog: 'Agentenprotokoll',

View File

@ -35,6 +35,8 @@ const translation = {
Translate: 'Übersetzen', Translate: 'Übersetzen',
Programming: 'Programmieren', Programming: 'Programmieren',
HR: 'Personalwesen', HR: 'Personalwesen',
Agent: 'Agent',
Workflow: 'Arbeitsablauf',
}, },
} }

View File

@ -79,6 +79,8 @@ const translation = {
runDetail: { runDetail: {
title: 'Conversation Log', title: 'Conversation Log',
workflowTitle: 'Log Detail', workflowTitle: 'Log Detail',
fileListLabel: 'File Details',
fileListDetail: 'Detail',
}, },
promptLog: 'Prompt Log', promptLog: 'Prompt Log',
agentLog: 'Agent Log', agentLog: 'Agent Log',

View File

@ -8,6 +8,10 @@ const translation = {
completion: 'Completion', completion: 'Completion',
}, },
duplicate: 'Duplicate', duplicate: 'Duplicate',
mermaid: {
handDrawn: 'Hand Drawn',
classic: 'Classic',
},
duplicateTitle: 'Duplicate App', duplicateTitle: 'Duplicate App',
export: 'Export DSL', export: 'Export DSL',
exportFailed: 'Export DSL failed.', exportFailed: 'Export DSL failed.',

View File

@ -30,11 +30,13 @@ const translation = {
nameRequired: 'App name is required', nameRequired: 'App name is required',
}, },
category: { category: {
Agent: 'Agent',
Assistant: 'Assistant', Assistant: 'Assistant',
Writing: 'Writing', Writing: 'Writing',
Translate: 'Translate', Translate: 'Translate',
Programming: 'Programming', Programming: 'Programming',
HR: 'HR', HR: 'HR',
Workflow: 'Workflow',
}, },
} }

View File

@ -79,6 +79,8 @@ const translation = {
runDetail: { runDetail: {
title: 'Registro de Conversación', title: 'Registro de Conversación',
workflowTitle: 'Detalle del Registro', workflowTitle: 'Detalle del Registro',
fileListLabel: 'Detalles del archivo',
fileListDetail: 'Detalle',
}, },
promptLog: 'Registro de Indicación', promptLog: 'Registro de Indicación',
agentLog: 'Registro de Agente', agentLog: 'Registro de Agente',

View File

@ -35,6 +35,8 @@ const translation = {
Translate: 'Traducción', Translate: 'Traducción',
Programming: 'Programación', Programming: 'Programación',
HR: 'Recursos Humanos', HR: 'Recursos Humanos',
Agent: 'Agente',
Workflow: 'Flujo de trabajo',
}, },
} }

View File

@ -79,6 +79,8 @@ const translation = {
runDetail: { runDetail: {
title: 'لاگ مکالمه', title: 'لاگ مکالمه',
workflowTitle: 'جزئیات لاگ', workflowTitle: 'جزئیات لاگ',
fileListLabel: 'جزئیات فایل',
fileListDetail: 'جزئیات',
}, },
promptLog: 'لاگ درخواست', promptLog: 'لاگ درخواست',
agentLog: 'لاگ عامل', agentLog: 'لاگ عامل',

View File

@ -35,6 +35,8 @@ const translation = {
Translate: 'ترجمه', Translate: 'ترجمه',
Programming: 'برنامه‌نویسی', Programming: 'برنامه‌نویسی',
HR: 'منابع انسانی', HR: 'منابع انسانی',
Agent: 'عامل',
Workflow: 'گردش',
}, },
} }

View File

@ -79,6 +79,8 @@ const translation = {
runDetail: { runDetail: {
title: 'Journal de conversation', title: 'Journal de conversation',
workflowTitle: 'Détail du journal', workflowTitle: 'Détail du journal',
fileListDetail: 'Détail',
fileListLabel: 'Détails du fichier',
}, },
promptLog: 'Journal de consigne', promptLog: 'Journal de consigne',
agentLog: 'Journal des agents', agentLog: 'Journal des agents',

View File

@ -35,6 +35,8 @@ const translation = {
Translate: 'Traduire', Translate: 'Traduire',
Programming: 'Programmation', Programming: 'Programmation',
HR: 'RH', HR: 'RH',
Agent: 'Agent',
Workflow: 'Flux de travail',
}, },
} }

View File

@ -81,6 +81,8 @@ const translation = {
runDetail: { runDetail: {
title: 'बातचीत लॉग', title: 'बातचीत लॉग',
workflowTitle: 'लॉग विवरण', workflowTitle: 'लॉग विवरण',
fileListDetail: 'विस्तार',
fileListLabel: 'फ़ाइल विवरण',
}, },
promptLog: 'प्रॉम्प्ट लॉग', promptLog: 'प्रॉम्प्ट लॉग',
agentLog: 'एजेंट लॉग', agentLog: 'एजेंट लॉग',

View File

@ -36,6 +36,8 @@ const translation = {
Translate: 'अनुवाद', Translate: 'अनुवाद',
Programming: 'प्रोग्रामिंग', Programming: 'प्रोग्रामिंग',
HR: 'मानव संसाधन', HR: 'मानव संसाधन',
Workflow: 'कार्यप्रवाह',
Agent: 'आढ़तिया',
}, },
} }

View File

@ -83,6 +83,8 @@ const translation = {
runDetail: { runDetail: {
title: 'Registro Conversazione', title: 'Registro Conversazione',
workflowTitle: 'Dettagli Registro', workflowTitle: 'Dettagli Registro',
fileListDetail: 'Dettaglio',
fileListLabel: 'Dettagli del file',
}, },
promptLog: 'Registro Prompt', promptLog: 'Registro Prompt',
agentLog: 'Registro Agente', agentLog: 'Registro Agente',

View File

@ -36,6 +36,8 @@ const translation = {
Translate: 'Traduzione', Translate: 'Traduzione',
Programming: 'Programmazione', Programming: 'Programmazione',
HR: 'Risorse Umane', HR: 'Risorse Umane',
Workflow: 'Flusso di lavoro',
Agent: 'Agente',
}, },
} }

View File

@ -79,6 +79,8 @@ const translation = {
runDetail: { runDetail: {
title: '会話ログ', title: '会話ログ',
workflowTitle: 'ログの詳細', workflowTitle: 'ログの詳細',
fileListLabel: 'ファイルの詳細',
fileListDetail: 'ディテール',
}, },
promptLog: 'プロンプトログ', promptLog: 'プロンプトログ',
agentLog: 'エージェントログ', agentLog: 'エージェントログ',

View File

@ -35,6 +35,8 @@ const translation = {
Translate: '翻訳', Translate: '翻訳',
Programming: 'プログラミング', Programming: 'プログラミング',
HR: '人事', HR: '人事',
Workflow: 'ワークフロー',
Agent: 'エージェント',
}, },
} }

View File

@ -80,6 +80,8 @@ const translation = {
runDetail: { runDetail: {
title: '대화 로그', title: '대화 로그',
workflowTitle: '로그 세부 정보', workflowTitle: '로그 세부 정보',
fileListDetail: '세부',
fileListLabel: '파일 세부 정보',
}, },
promptLog: '프롬프트 로그', promptLog: '프롬프트 로그',
agentLog: '에이전트 로그', agentLog: '에이전트 로그',

View File

@ -83,6 +83,8 @@ const translation = {
runDetail: { runDetail: {
title: 'Dziennik rozmowy', title: 'Dziennik rozmowy',
workflowTitle: 'Szczegół dziennika', workflowTitle: 'Szczegół dziennika',
fileListDetail: 'Detal',
fileListLabel: 'Szczegóły pliku',
}, },
promptLog: 'Dziennik monitów', promptLog: 'Dziennik monitów',
agentLog: 'Dziennik agenta', agentLog: 'Dziennik agenta',

View File

@ -36,6 +36,8 @@ const translation = {
Translate: 'Tłumaczenie', Translate: 'Tłumaczenie',
Programming: 'Programowanie', Programming: 'Programowanie',
HR: 'HR', HR: 'HR',
Agent: 'Agent',
Workflow: 'Przepływ pracy',
}, },
} }

View File

@ -79,6 +79,8 @@ const translation = {
runDetail: { runDetail: {
title: 'Registro de Conversa', title: 'Registro de Conversa',
workflowTitle: 'Detalhes do Registro', workflowTitle: 'Detalhes do Registro',
fileListLabel: 'Detalhes do arquivo',
fileListDetail: 'Detalhe',
}, },
promptLog: 'Registro de Prompt', promptLog: 'Registro de Prompt',
agentLog: 'Registro do agente', agentLog: 'Registro do agente',

View File

@ -35,6 +35,8 @@ const translation = {
Translate: 'Traduzir', Translate: 'Traduzir',
Programming: 'Programação', Programming: 'Programação',
HR: 'RH', HR: 'RH',
Workflow: 'Fluxo de trabalho',
Agent: 'Agente',
}, },
} }

View File

@ -79,6 +79,8 @@ const translation = {
runDetail: { runDetail: {
title: 'Jurnal de conversație', title: 'Jurnal de conversație',
workflowTitle: 'Detalii jurnal', workflowTitle: 'Detalii jurnal',
fileListDetail: 'Amănunt',
fileListLabel: 'Detalii fișier',
}, },
promptLog: 'Jurnal prompt', promptLog: 'Jurnal prompt',
agentLog: 'Jurnal agent', agentLog: 'Jurnal agent',

View File

@ -35,6 +35,8 @@ const translation = {
Translate: 'Traducere', Translate: 'Traducere',
Programming: 'Programare', Programming: 'Programare',
HR: 'Resurse Umane', HR: 'Resurse Umane',
Agent: 'Agent',
Workflow: 'Flux de lucru',
}, },
} }

View File

@ -79,6 +79,8 @@ const translation = {
runDetail: { runDetail: {
title: 'Журнал разговоров', title: 'Журнал разговоров',
workflowTitle: 'Подробная информация о журнале', workflowTitle: 'Подробная информация о журнале',
fileListLabel: 'Сведения о файле',
fileListDetail: 'Подробность',
}, },
promptLog: 'Журнал подсказок', promptLog: 'Журнал подсказок',
agentLog: 'Журнал агента', agentLog: 'Журнал агента',

View File

@ -35,6 +35,8 @@ const translation = {
Translate: 'Перевод', Translate: 'Перевод',
Programming: 'Программирование', Programming: 'Программирование',
HR: 'HR', HR: 'HR',
Agent: 'Агент',
Workflow: 'Рабочий процесс',
}, },
} }

View File

@ -79,6 +79,8 @@ const translation = {
runDetail: { runDetail: {
title: 'Dnevnik pogovora', title: 'Dnevnik pogovora',
workflowTitle: 'Podrobnosti dnevnika', workflowTitle: 'Podrobnosti dnevnika',
fileListDetail: 'Podrobnosti',
fileListLabel: 'Podrobnosti o datoteki',
}, },
promptLog: 'Dnevnik PROMPT-ov', promptLog: 'Dnevnik PROMPT-ov',
agentLog: 'Dnevnik pomočnika', agentLog: 'Dnevnik pomočnika',

View File

@ -35,6 +35,8 @@ const translation = {
Translate: 'Prevajanje', Translate: 'Prevajanje',
Programming: 'Programiranje', Programming: 'Programiranje',
HR: 'Kadri', HR: 'Kadri',
Workflow: 'Potek dela',
Agent: 'Agent',
}, },
} }

View File

@ -79,6 +79,8 @@ const translation = {
runDetail: { runDetail: {
title: 'บันทึกการสนทนา', title: 'บันทึกการสนทนา',
workflowTitle: 'รายละเอียดบันทึก', workflowTitle: 'รายละเอียดบันทึก',
fileListDetail: 'รายละเอียด',
fileListLabel: 'รายละเอียดไฟล์',
}, },
promptLog: 'บันทึกพร้อมท์', promptLog: 'บันทึกพร้อมท์',
agentLog: 'บันทึกตัวแทน', agentLog: 'บันทึกตัวแทน',

View File

@ -35,6 +35,8 @@ const translation = {
Translate: 'แปล', Translate: 'แปล',
Programming: 'โปรแกรม', Programming: 'โปรแกรม',
HR: 'ชั่วโมง', HR: 'ชั่วโมง',
Workflow: 'เวิร์กโฟลว์',
Agent: 'ตัวแทน',
}, },
} }

View File

@ -79,6 +79,8 @@ const translation = {
runDetail: { runDetail: {
title: 'Konuşma Günlüğü', title: 'Konuşma Günlüğü',
workflowTitle: 'Günlük Detayı', workflowTitle: 'Günlük Detayı',
fileListDetail: 'Ayrıntı',
fileListLabel: 'Dosya Detayları',
}, },
promptLog: 'Prompt Günlüğü', promptLog: 'Prompt Günlüğü',
agentLog: 'Agent Günlüğü', agentLog: 'Agent Günlüğü',

View File

@ -35,6 +35,8 @@ const translation = {
Translate: 'Çeviri', Translate: 'Çeviri',
Programming: 'Programlama', Programming: 'Programlama',
HR: 'İK', HR: 'İK',
Agent: 'Aracı',
Workflow: 'İş Akışı',
}, },
} }

View File

@ -79,6 +79,8 @@ const translation = {
runDetail: { runDetail: {
title: 'Журнал Розмови', title: 'Журнал Розмови',
workflowTitle: 'Деталі Журналу', workflowTitle: 'Деталі Журналу',
fileListDetail: 'Деталь',
fileListLabel: 'Подробиці файлу',
}, },
promptLog: 'Журнал Запитань', promptLog: 'Журнал Запитань',
agentLog: 'Журнал агента', agentLog: 'Журнал агента',

View File

@ -35,6 +35,8 @@ const translation = {
Translate: 'Переклад', Translate: 'Переклад',
Programming: 'Програмування', Programming: 'Програмування',
HR: 'HR', HR: 'HR',
Workflow: 'Робочий процес',
Agent: 'Агент',
}, },
} }

View File

@ -79,6 +79,8 @@ const translation = {
runDetail: { runDetail: {
title: 'Nhật ký cuộc trò chuyện', title: 'Nhật ký cuộc trò chuyện',
workflowTitle: 'Chi tiết nhật ký', workflowTitle: 'Chi tiết nhật ký',
fileListDetail: 'Chi tiết',
fileListLabel: 'Chi tiết tệp',
}, },
promptLog: 'Nhật ký lời nhắc', promptLog: 'Nhật ký lời nhắc',
AgentLog: 'Nhật ký tác nhân', AgentLog: 'Nhật ký tác nhân',

View File

@ -35,6 +35,8 @@ const translation = {
Translate: 'Dịch thuật', Translate: 'Dịch thuật',
Programming: 'Lập trình', Programming: 'Lập trình',
HR: 'Nhân sự', HR: 'Nhân sự',
Agent: 'Người đại lý',
Workflow: 'Quy trình làm việc',
}, },
} }

View File

@ -79,6 +79,8 @@ const translation = {
runDetail: { runDetail: {
title: '对话日志', title: '对话日志',
workflowTitle: '日志详情', workflowTitle: '日志详情',
fileListLabel: '文件详情',
fileListDetail: '详情',
}, },
promptLog: 'Prompt 日志', promptLog: 'Prompt 日志',
agentLog: 'Agent 日志', agentLog: 'Agent 日志',

View File

@ -8,6 +8,10 @@ const translation = {
completion: '文本生成', completion: '文本生成',
}, },
duplicate: '复制', duplicate: '复制',
mermaid: {
handDrawn: '手绘',
classic: '经典',
},
duplicateTitle: '复制应用', duplicateTitle: '复制应用',
export: '导出 DSL', export: '导出 DSL',
exportFailed: '导出 DSL 失败', exportFailed: '导出 DSL 失败',

View File

@ -30,11 +30,13 @@ const translation = {
nameRequired: '应用程序名称不能为空', nameRequired: '应用程序名称不能为空',
}, },
category: { category: {
Agent: 'Agent',
Assistant: '助手', Assistant: '助手',
Writing: '写作', Writing: '写作',
Translate: '翻译', Translate: '翻译',
Programming: '编程', Programming: '编程',
HR: '人力资源', HR: '人力资源',
Workflow: '工作流',
}, },
} }

View File

@ -79,6 +79,8 @@ const translation = {
runDetail: { runDetail: {
title: '對話日誌', title: '對話日誌',
workflowTitle: '日誌詳情', workflowTitle: '日誌詳情',
fileListDetail: '細節',
fileListLabel: '檔詳細資訊',
}, },
promptLog: 'Prompt 日誌', promptLog: 'Prompt 日誌',
agentLog: 'Agent 日誌', agentLog: 'Agent 日誌',

View File

@ -35,6 +35,8 @@ const translation = {
Translate: '翻譯', Translate: '翻譯',
Programming: '程式設計', Programming: '程式設計',
HR: '人力資源', HR: '人力資源',
Agent: '代理',
Workflow: '工作流',
}, },
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "dify-web", "name": "dify-web",
"version": "0.13.0", "version": "0.13.1",
"private": true, "private": true,
"engines": { "engines": {
"node": ">=18.17.0" "node": ">=18.17.0"
@ -52,6 +52,7 @@
"dayjs": "^1.11.7", "dayjs": "^1.11.7",
"echarts": "^5.4.1", "echarts": "^5.4.1",
"echarts-for-react": "^3.0.2", "echarts-for-react": "^3.0.2",
"elkjs": "^0.9.3",
"emoji-mart": "^5.5.2", "emoji-mart": "^5.5.2",
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"i18next": "^22.4.13", "i18next": "^22.4.13",
@ -64,7 +65,7 @@
"lamejs": "^1.2.1", "lamejs": "^1.2.1",
"lexical": "^0.16.0", "lexical": "^0.16.0",
"lodash-es": "^4.17.21", "lodash-es": "^4.17.21",
"mermaid": "10.9.3", "mermaid": "11.4.1",
"mime": "^4.0.4", "mime": "^4.0.4",
"negotiator": "^0.6.3", "negotiator": "^0.6.3",
"next": "^14.2.10", "next": "^14.2.10",
@ -144,7 +145,7 @@
"@types/uuid": "^9.0.8", "@types/uuid": "^9.0.8",
"autoprefixer": "^10.4.14", "autoprefixer": "^10.4.14",
"bing-translate-api": "^4.0.2", "bing-translate-api": "^4.0.2",
"code-inspector-plugin": "^0.13.0", "code-inspector-plugin": "^0.18.1",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"eslint": "^8.36.0", "eslint": "^8.36.0",
"eslint-config-next": "^14.0.4", "eslint-config-next": "^14.0.4",

View File

@ -80,6 +80,19 @@
jsonc-eslint-parser "^2.1.0" jsonc-eslint-parser "^2.1.0"
yaml-eslint-parser "^1.1.0" yaml-eslint-parser "^1.1.0"
"@antfu/install-pkg@^0.4.0":
version "0.4.1"
resolved "https://registry.yarnpkg.com/@antfu/install-pkg/-/install-pkg-0.4.1.tgz#d1d7f3be96ecdb41581629cafe8626d1748c0cf1"
integrity sha512-T7yB5QNG29afhWVkVq7XeIMBa5U/vs9mX69YqayXypPRmYzUmzwnYltplHmPtZ4HPCn+sQKeXW8I47wCbuBOjw==
dependencies:
package-manager-detector "^0.2.0"
tinyexec "^0.3.0"
"@antfu/utils@^0.7.10":
version "0.7.10"
resolved "https://registry.yarnpkg.com/@antfu/utils/-/utils-0.7.10.tgz#ae829f170158e297a9b6a28f161a8e487d00814d"
integrity sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==
"@babel/code-frame@^7.0.0": "@babel/code-frame@^7.0.0":
version "7.21.4" version "7.21.4"
resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz" resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz"
@ -1324,10 +1337,42 @@
resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
"@braintree/sanitize-url@^6.0.1": "@braintree/sanitize-url@^7.0.1":
version "6.0.4" version "7.1.0"
resolved "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz" resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-7.1.0.tgz#048e48aab4f1460e3121e22aa62459d16653dc85"
integrity sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A== integrity sha512-o+UlMLt49RvtCASlOMW0AkHnabN9wR9rwCCherxO0yG4Npy34GkvrAqdXQvrhNs+jh+gkK8gB8Lf05qL/O7KWg==
"@chevrotain/cst-dts-gen@11.0.3":
version "11.0.3"
resolved "https://registry.yarnpkg.com/@chevrotain/cst-dts-gen/-/cst-dts-gen-11.0.3.tgz#5e0863cc57dc45e204ccfee6303225d15d9d4783"
integrity sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==
dependencies:
"@chevrotain/gast" "11.0.3"
"@chevrotain/types" "11.0.3"
lodash-es "4.17.21"
"@chevrotain/gast@11.0.3":
version "11.0.3"
resolved "https://registry.yarnpkg.com/@chevrotain/gast/-/gast-11.0.3.tgz#e84d8880323fe8cbe792ef69ce3ffd43a936e818"
integrity sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==
dependencies:
"@chevrotain/types" "11.0.3"
lodash-es "4.17.21"
"@chevrotain/regexp-to-ast@11.0.3":
version "11.0.3"
resolved "https://registry.yarnpkg.com/@chevrotain/regexp-to-ast/-/regexp-to-ast-11.0.3.tgz#11429a81c74a8e6a829271ce02fc66166d56dcdb"
integrity sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==
"@chevrotain/types@11.0.3":
version "11.0.3"
resolved "https://registry.yarnpkg.com/@chevrotain/types/-/types-11.0.3.tgz#f8a03914f7b937f594f56eb89312b3b8f1c91848"
integrity sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==
"@chevrotain/utils@11.0.3":
version "11.0.3"
resolved "https://registry.yarnpkg.com/@chevrotain/utils/-/utils-11.0.3.tgz#e39999307b102cff3645ec4f5b3665f5297a2224"
integrity sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==
"@chromatic-com/storybook@^1.9.0": "@chromatic-com/storybook@^1.9.0":
version "1.9.0" version "1.9.0"
@ -1621,6 +1666,24 @@
resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz"
integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
"@iconify/types@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@iconify/types/-/types-2.0.0.tgz#ab0e9ea681d6c8a1214f30cd741fe3a20cc57f57"
integrity sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==
"@iconify/utils@^2.1.32":
version "2.1.33"
resolved "https://registry.yarnpkg.com/@iconify/utils/-/utils-2.1.33.tgz#cbf7242a52fd0ec58c42d37d28e4406b5327e8c0"
integrity sha512-jP9h6v/g0BIZx0p7XGJJVtkVnydtbgTgt9mVNcGDYwaa7UhdHdI9dvoq+gKj9sijMSJKxUPEG2JyjsgXjxL7Kw==
dependencies:
"@antfu/install-pkg" "^0.4.0"
"@antfu/utils" "^0.7.10"
"@iconify/types" "^2.0.0"
debug "^4.3.6"
kolorist "^1.8.0"
local-pkg "^0.5.0"
mlly "^1.7.1"
"@img/sharp-darwin-arm64@0.33.2": "@img/sharp-darwin-arm64@0.33.2":
version "0.33.2" version "0.33.2"
resolved "https://registry.yarnpkg.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.2.tgz#0a52a82c2169112794dac2c71bfba9e90f7c5bd1" resolved "https://registry.yarnpkg.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.2.tgz#0a52a82c2169112794dac2c71bfba9e90f7c5bd1"
@ -2372,6 +2435,13 @@
dependencies: dependencies:
"@types/mdx" "^2.0.0" "@types/mdx" "^2.0.0"
"@mermaid-js/parser@^0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@mermaid-js/parser/-/parser-0.3.0.tgz#7a28714599f692f93df130b299fa1aadc9f9c8ab"
integrity sha512-HsvL6zgE5sUPGgkIDlmAWR1HTNHz2Iy11BAWPTa4Jjabkpguy4Ze2gzfLrg6pdRuBvFwgUYyxiaNqZwrEEXepA==
dependencies:
langium "3.0.0"
"@monaco-editor/loader@^1.4.0": "@monaco-editor/loader@^1.4.0":
version "1.4.0" version "1.4.0"
resolved "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.4.0.tgz" resolved "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.4.0.tgz"
@ -3419,12 +3489,12 @@
resolved "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz" resolved "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz"
integrity sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ== integrity sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==
"@types/d3-scale-chromatic@*", "@types/d3-scale-chromatic@^3.0.0": "@types/d3-scale-chromatic@*":
version "3.0.0" version "3.0.0"
resolved "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz" resolved "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz"
integrity sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw== integrity sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==
"@types/d3-scale@*", "@types/d3-scale@^4.0.3": "@types/d3-scale@*":
version "4.0.4" version "4.0.4"
resolved "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.4.tgz" resolved "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.4.tgz"
integrity sha512-eq1ZeTj0yr72L8MQk6N6heP603ubnywSDRfNpi5enouR112HzGLS6RIvExCzZTraFF4HdzNpJMwA/zGiMoHUUw== integrity sha512-eq1ZeTj0yr72L8MQk6N6heP603ubnywSDRfNpi5enouR112HzGLS6RIvExCzZTraFF4HdzNpJMwA/zGiMoHUUw==
@ -3473,9 +3543,9 @@
"@types/d3-interpolate" "*" "@types/d3-interpolate" "*"
"@types/d3-selection" "*" "@types/d3-selection" "*"
"@types/d3@^7.4.0": "@types/d3@^7.4.0", "@types/d3@^7.4.3":
version "7.4.3" version "7.4.3"
resolved "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz" resolved "https://registry.yarnpkg.com/@types/d3/-/d3-7.4.3.tgz#d4550a85d08f4978faf0a4c36b848c61eaac07e2"
integrity sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww== integrity sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==
dependencies: dependencies:
"@types/d3-array" "*" "@types/d3-array" "*"
@ -3895,6 +3965,11 @@
resolved "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" resolved "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304"
integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==
"@types/trusted-types@^2.0.7":
version "2.0.7"
resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11"
integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==
"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2": "@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2":
version "2.0.6" version "2.0.6"
resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz" resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz"
@ -4334,6 +4409,11 @@ acorn@^8.12.1, acorn@^8.7.1, acorn@^8.8.2:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.13.0.tgz#2a30d670818ad16ddd6a35d3842dacec9e5d7ca3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.13.0.tgz#2a30d670818ad16ddd6a35d3842dacec9e5d7ca3"
integrity sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w== integrity sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==
acorn@^8.14.0:
version "8.14.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0"
integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==
adjust-sourcemap-loader@^4.0.0: adjust-sourcemap-loader@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz#fc4a0fd080f7d10471f30a7320f25560ade28c99" resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz#fc4a0fd080f7d10471f30a7320f25560ade28c99"
@ -5240,6 +5320,25 @@ check-error@^2.1.1:
resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc" resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc"
integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==
chevrotain-allstar@~0.3.0:
version "0.3.1"
resolved "https://registry.yarnpkg.com/chevrotain-allstar/-/chevrotain-allstar-0.3.1.tgz#b7412755f5d83cc139ab65810cdb00d8db40e6ca"
integrity sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==
dependencies:
lodash-es "^4.17.21"
chevrotain@~11.0.3:
version "11.0.3"
resolved "https://registry.yarnpkg.com/chevrotain/-/chevrotain-11.0.3.tgz#88ffc1fb4b5739c715807eaeedbbf200e202fc1b"
integrity sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==
dependencies:
"@chevrotain/cst-dts-gen" "11.0.3"
"@chevrotain/gast" "11.0.3"
"@chevrotain/regexp-to-ast" "11.0.3"
"@chevrotain/types" "11.0.3"
"@chevrotain/utils" "11.0.3"
lodash-es "4.17.21"
"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3: "chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3:
version "3.5.3" version "3.5.3"
resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz"
@ -5388,24 +5487,28 @@ co@^4.6.0:
resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==
code-inspector-core@0.13.0: code-inspector-core@0.18.2:
version "0.13.0" version "0.18.2"
resolved "https://registry.npmjs.org/code-inspector-core/-/code-inspector-core-0.13.0.tgz" resolved "https://registry.yarnpkg.com/code-inspector-core/-/code-inspector-core-0.18.2.tgz#5d4845789411d8ce2203a8b92b32d023fe6b0e0b"
integrity sha512-oYPNLdJjn3SY50YtF3IuxZOKLBNwzXSRPOqiXVnZFceMz9Ar6ugP3+zj7HszouxrsLFb2dVtlv//5wr4+cq62A== integrity sha512-2fnBXAF5apwrhvih6mseoklbcveMRulAByZiO2BNdfK77LjaBnbLZAxZqUVdgZhXmewkMBrVrPRQVRoldhdpIQ==
dependencies: dependencies:
"@vue/compiler-dom" "^3.2.47" "@vue/compiler-dom" "^3.2.47"
chalk "^4.1.1" chalk "^4.1.1"
dotenv "^16.1.4"
launch-ide "1.0.0"
portfinder "^1.0.28" portfinder "^1.0.28"
code-inspector-plugin@^0.13.0: code-inspector-plugin@^0.18.1:
version "0.13.0" version "0.18.2"
resolved "https://registry.npmjs.org/code-inspector-plugin/-/code-inspector-plugin-0.13.0.tgz" resolved "https://registry.yarnpkg.com/code-inspector-plugin/-/code-inspector-plugin-0.18.2.tgz#b604edef92b7eb6654a1a1660b3dfc5831fd7a14"
integrity sha512-v4mq5hhHkyMmutembTzREVsFeZ/+KsCwfx20+0gTqm1Il/M1T4d2BCv9mZ4ivie3GvvDMt/pVz1iBBVP3SuzJA== integrity sha512-LKOhA4YsoUZ6Dq4OQKP7G+kPcfeYGLoIQz7EDG4yoL5mqSu+uWR+0QvzoDc4HGXQ0jpkzEwlatbH6fBlbPiwKQ==
dependencies: dependencies:
chalk "4.1.1" chalk "4.1.1"
code-inspector-core "0.13.0" code-inspector-core "0.18.2"
vite-code-inspector-plugin "0.13.0" dotenv "^16.3.1"
webpack-code-inspector-plugin "0.13.0" esbuild-code-inspector-plugin "0.18.2"
vite-code-inspector-plugin "0.18.2"
webpack-code-inspector-plugin "0.18.2"
collect-v8-coverage@^1.0.0: collect-v8-coverage@^1.0.0:
version "1.0.2" version "1.0.2"
@ -5514,6 +5617,11 @@ concat-map@0.0.1:
resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
confbox@^0.1.8:
version "0.1.8"
resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.8.tgz#820d73d3b3c82d9bd910652c5d4d599ef8ff8b06"
integrity sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==
console-browserify@^1.2.0: console-browserify@^1.2.0:
version "1.2.0" version "1.2.0"
resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
@ -5587,6 +5695,13 @@ cose-base@^1.0.0:
dependencies: dependencies:
layout-base "^1.0.0" layout-base "^1.0.0"
cose-base@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/cose-base/-/cose-base-2.2.0.tgz#1c395c35b6e10bb83f9769ca8b817d614add5c01"
integrity sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==
dependencies:
layout-base "^2.0.0"
cosmiconfig@^7.0.1: cosmiconfig@^7.0.1:
version "7.1.0" version "7.1.0"
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6"
@ -5764,10 +5879,17 @@ cytoscape-cose-bilkent@^4.1.0:
dependencies: dependencies:
cose-base "^1.0.0" cose-base "^1.0.0"
cytoscape@^3.28.1: cytoscape-fcose@^2.2.0:
version "3.30.2" version "2.2.0"
resolved "https://registry.yarnpkg.com/cytoscape/-/cytoscape-3.30.2.tgz#94149707fb6547a55e3b44f03ffe232706212161" resolved "https://registry.yarnpkg.com/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz#e4d6f6490df4fab58ae9cea9e5c3ab8d7472f471"
integrity sha512-oICxQsjW8uSaRmn4UK/jkczKOqTrVqt5/1WL0POiJUT2EKNc9STM4hYFHv917yu55aTBMFNRzymlJhVAiWPCxw== integrity sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==
dependencies:
cose-base "^2.2.0"
cytoscape@^3.29.2:
version "3.30.4"
resolved "https://registry.yarnpkg.com/cytoscape/-/cytoscape-3.30.4.tgz#3404da0a159c00a1a3df2c85b2b43fdc66a0e28e"
integrity sha512-OxtlZwQl1WbwMmLiyPSEBuzeTIQnwZhJYYWFzZ2PhEHVFwpeaqNIkUzSiso00D98qk60l8Gwon2RP304d3BJ1A==
"d3-array@1 - 2": "d3-array@1 - 2":
version "2.12.1" version "2.12.1"
@ -6004,10 +6126,10 @@ d3-zoom@3, d3-zoom@^3.0.0:
d3-selection "2 - 3" d3-selection "2 - 3"
d3-transition "2 - 3" d3-transition "2 - 3"
d3@^7.4.0, d3@^7.8.2: d3@^7.9.0:
version "7.8.5" version "7.9.0"
resolved "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz" resolved "https://registry.yarnpkg.com/d3/-/d3-7.9.0.tgz#579e7acb3d749caf8860bd1741ae8d371070cd5d"
integrity sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA== integrity sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==
dependencies: dependencies:
d3-array "3" d3-array "3"
d3-axis "3" d3-axis "3"
@ -6040,12 +6162,12 @@ d3@^7.4.0, d3@^7.8.2:
d3-transition "3" d3-transition "3"
d3-zoom "3" d3-zoom "3"
dagre-d3-es@7.0.10: dagre-d3-es@7.0.11:
version "7.0.10" version "7.0.11"
resolved "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz" resolved "https://registry.yarnpkg.com/dagre-d3-es/-/dagre-d3-es-7.0.11.tgz#2237e726c0577bfe67d1a7cfd2265b9ab2c15c40"
integrity sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A== integrity sha512-tvlJLyQf834SylNKax8Wkzco/1ias1OPw8DcUMDE7oUIoSEW25riQVuiu/0OWEFqT0cxHT3Pa9/D82Jr47IONw==
dependencies: dependencies:
d3 "^7.8.2" d3 "^7.9.0"
lodash-es "^4.17.21" lodash-es "^4.17.21"
damerau-levenshtein@^1.0.8: damerau-levenshtein@^1.0.8:
@ -6062,6 +6184,11 @@ data-urls@^3.0.2:
whatwg-mimetype "^3.0.0" whatwg-mimetype "^3.0.0"
whatwg-url "^11.0.0" whatwg-url "^11.0.0"
dayjs@^1.11.10:
version "1.11.13"
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c"
integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==
dayjs@^1.11.7, dayjs@^1.9.1: dayjs@^1.11.7, dayjs@^1.9.1:
version "1.11.8" version "1.11.8"
resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.8.tgz" resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.8.tgz"
@ -6095,6 +6222,13 @@ debug@^4.0.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
dependencies: dependencies:
ms "2.1.2" ms "2.1.2"
debug@^4.3.6:
version "4.3.7"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52"
integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==
dependencies:
ms "^2.1.3"
decimal.js@^10.4.2: decimal.js@^10.4.2:
version "10.4.3" version "10.4.3"
resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23"
@ -6401,10 +6535,12 @@ domhandler@^5.0.2, domhandler@^5.0.3:
dependencies: dependencies:
domelementtype "^2.3.0" domelementtype "^2.3.0"
"dompurify@^3.0.5 <3.1.7": dompurify@^3.2.1:
version "3.1.6" version "3.2.2"
resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.1.6.tgz#43c714a94c6a7b8801850f82e756685300a027e2" resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.2.2.tgz#6c0518745e81686c74a684f5af1e5613e7cc0246"
integrity sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ== integrity sha512-YMM+erhdZ2nkZ4fTNRTSI94mb7VG7uVF5vj5Zde7tImgnhZE3R6YW/IACGIHb2ux+QkEXMhe591N+5jWOmL4Zw==
optionalDependencies:
"@types/trusted-types" "^2.0.7"
domutils@^2.5.2, domutils@^2.8.0: domutils@^2.5.2, domutils@^2.8.0:
version "2.8.0" version "2.8.0"
@ -6432,6 +6568,11 @@ dot-case@^3.0.4:
no-case "^3.0.4" no-case "^3.0.4"
tslib "^2.0.3" tslib "^2.0.3"
dotenv@^16.1.4, dotenv@^16.3.1:
version "16.4.7"
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26"
integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==
echarts-for-react@^3.0.2: echarts-for-react@^3.0.2:
version "3.0.2" version "3.0.2"
resolved "https://registry.npmjs.org/echarts-for-react/-/echarts-for-react-3.0.2.tgz" resolved "https://registry.npmjs.org/echarts-for-react/-/echarts-for-react-3.0.2.tgz"
@ -6468,7 +6609,7 @@ electron-to-chromium@^1.5.28:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.40.tgz#5f6aec13751123c5c3185999ebe3e7bcaf828c2b" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.40.tgz#5f6aec13751123c5c3185999ebe3e7bcaf828c2b"
integrity sha512-LYm78o6if4zTasnYclgQzxEcgMoIcybWOhkATWepN95uwVVWV0/IW10v+2sIeHE+bIYWipLneTftVyQm45UY7g== integrity sha512-LYm78o6if4zTasnYclgQzxEcgMoIcybWOhkATWepN95uwVVWV0/IW10v+2sIeHE+bIYWipLneTftVyQm45UY7g==
elkjs@^0.9.0: elkjs@^0.9.3:
version "0.9.3" version "0.9.3"
resolved "https://registry.yarnpkg.com/elkjs/-/elkjs-0.9.3.tgz#16711f8ceb09f1b12b99e971b138a8384a529161" resolved "https://registry.yarnpkg.com/elkjs/-/elkjs-0.9.3.tgz#16711f8ceb09f1b12b99e971b138a8384a529161"
integrity sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ== integrity sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==
@ -6704,6 +6845,13 @@ es-to-primitive@^1.2.1:
is-date-object "^1.0.1" is-date-object "^1.0.1"
is-symbol "^1.0.2" is-symbol "^1.0.2"
esbuild-code-inspector-plugin@0.18.2:
version "0.18.2"
resolved "https://registry.yarnpkg.com/esbuild-code-inspector-plugin/-/esbuild-code-inspector-plugin-0.18.2.tgz#3ecb938d3c05356ca2878c71edae9e4a24590b8f"
integrity sha512-q9Qh1xfUhHEtnmYt8eXCAzdbFLaBMgC6wrwmGH7JI2nztYlcpVD4HeAnheQ9ZTaoRGu+2L+qkpM5XQMd6xhUcQ==
dependencies:
code-inspector-core "0.18.2"
esbuild-register@^3.5.0: esbuild-register@^3.5.0:
version "3.6.0" version "3.6.0"
resolved "https://registry.yarnpkg.com/esbuild-register/-/esbuild-register-3.6.0.tgz#cf270cfa677baebbc0010ac024b823cbf723a36d" resolved "https://registry.yarnpkg.com/esbuild-register/-/esbuild-register-3.6.0.tgz#cf270cfa677baebbc0010ac024b823cbf723a36d"
@ -7810,6 +7958,11 @@ grapheme-splitter@^1.0.4:
resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz"
integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==
hachure-fill@^0.5.2:
version "0.5.2"
resolved "https://registry.yarnpkg.com/hachure-fill/-/hachure-fill-0.5.2.tgz#d19bc4cc8750a5962b47fb1300557a85fcf934cc"
integrity sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==
has-bigints@^1.0.1, has-bigints@^1.0.2: has-bigints@^1.0.1, has-bigints@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz"
@ -9397,10 +9550,10 @@ keyv@^4.0.0:
dependencies: dependencies:
json-buffer "3.0.1" json-buffer "3.0.1"
khroma@^2.0.0: khroma@^2.1.0:
version "2.0.0" version "2.1.0"
resolved "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz" resolved "https://registry.yarnpkg.com/khroma/-/khroma-2.1.0.tgz#45f2ce94ce231a437cf5b63c2e886e6eb42bbbb1"
integrity sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g== integrity sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==
kleur@^3.0.3: kleur@^3.0.3:
version "3.0.3" version "3.0.3"
@ -9412,6 +9565,11 @@ kleur@^4.0.3:
resolved "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz" resolved "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz"
integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==
kolorist@^1.8.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/kolorist/-/kolorist-1.8.0.tgz#edddbbbc7894bc13302cdf740af6374d4a04743c"
integrity sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==
lamejs@^1.2.1: lamejs@^1.2.1:
version "1.2.1" version "1.2.1"
resolved "https://registry.npmjs.org/lamejs/-/lamejs-1.2.1.tgz" resolved "https://registry.npmjs.org/lamejs/-/lamejs-1.2.1.tgz"
@ -9419,6 +9577,17 @@ lamejs@^1.2.1:
dependencies: dependencies:
use-strict "1.0.1" use-strict "1.0.1"
langium@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/langium/-/langium-3.0.0.tgz#4938294eb57c59066ef955070ac4d0c917b26026"
integrity sha512-+Ez9EoiByeoTu/2BXmEaZ06iPNXM6thWJp02KfBO/raSMyCJ4jw7AkWWa+zBCTm0+Tw1Fj9FOxdqSskyN5nAwg==
dependencies:
chevrotain "~11.0.3"
chevrotain-allstar "~0.3.0"
vscode-languageserver "~9.0.1"
vscode-languageserver-textdocument "~1.0.11"
vscode-uri "~3.0.8"
language-subtag-registry@~0.3.2: language-subtag-registry@~0.3.2:
version "0.3.22" version "0.3.22"
resolved "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz" resolved "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz"
@ -9431,11 +9600,24 @@ language-tags@=1.0.5:
dependencies: dependencies:
language-subtag-registry "~0.3.2" language-subtag-registry "~0.3.2"
launch-ide@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/launch-ide/-/launch-ide-1.0.0.tgz#be405fdef86cff69eeb53fb9ad59054a7480fd56"
integrity sha512-VnVnFZK97DySVgidvlHlbPYOgf0hWjYowdqPu5P9iw1vyA+JUPu7ldJdL3cQm0ILC+4Wf1jtOv/x2f/67ePIfQ==
dependencies:
chalk "^4.1.1"
dotenv "^16.1.4"
layout-base@^1.0.0: layout-base@^1.0.0:
version "1.0.2" version "1.0.2"
resolved "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz" resolved "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz"
integrity sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg== integrity sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==
layout-base@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/layout-base/-/layout-base-2.0.1.tgz#d0337913586c90f9c2c075292069f5c2da5dd285"
integrity sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==
leven@^3.1.0: leven@^3.1.0:
version "3.1.0" version "3.1.0"
resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
@ -9521,6 +9703,14 @@ local-pkg@^0.4.3:
resolved "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz" resolved "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz"
integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==
local-pkg@^0.5.0:
version "0.5.1"
resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.5.1.tgz#69658638d2a95287534d4c2fff757980100dbb6d"
integrity sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==
dependencies:
mlly "^1.7.3"
pkg-types "^1.2.1"
locate-path@^5.0.0: locate-path@^5.0.0:
version "5.0.0" version "5.0.0"
resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz"
@ -9542,7 +9732,7 @@ locate-path@^7.1.0:
dependencies: dependencies:
p-locate "^6.0.0" p-locate "^6.0.0"
lodash-es@^4.17.21: lodash-es@4.17.21, lodash-es@^4.17.21:
version "4.17.21" version "4.17.21"
resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz" resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz"
integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
@ -9705,6 +9895,11 @@ markdown-to-jsx@^7.4.5:
resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.5.0.tgz#42ece0c71e842560a7d8bd9f81e7a34515c72150" resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.5.0.tgz#42ece0c71e842560a7d8bd9f81e7a34515c72150"
integrity sha512-RrBNcMHiFPcz/iqIj0n3wclzHXjwS7mzjBNWecKKVhNTIxQepIix6Il/wZCn2Cg5Y1ow2Qi84+eJrryFRWBEWw== integrity sha512-RrBNcMHiFPcz/iqIj0n3wclzHXjwS7mzjBNWecKKVhNTIxQepIix6Il/wZCn2Cg5Y1ow2Qi84+eJrryFRWBEWw==
marked@^13.0.2:
version "13.0.3"
resolved "https://registry.yarnpkg.com/marked/-/marked-13.0.3.tgz#5c5b4a5d0198060c7c9bc6ef9420a7fed30f822d"
integrity sha512-rqRix3/TWzE9rIoFGIn8JmsVfhiuC8VIQ8IdX5TfzmeBucdY05/0UlzKaw0eVtpcN/OdVFpBk7CjKGo9iHJ/zA==
md5.js@^1.3.4: md5.js@^1.3.4:
version "1.3.5" version "1.3.5"
resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
@ -9744,7 +9939,7 @@ mdast-util-from-markdown@^0.8.5:
parse-entities "^2.0.0" parse-entities "^2.0.0"
unist-util-stringify-position "^2.0.0" unist-util-stringify-position "^2.0.0"
mdast-util-from-markdown@^1.0.0, mdast-util-from-markdown@^1.1.0, mdast-util-from-markdown@^1.3.0: mdast-util-from-markdown@^1.0.0, mdast-util-from-markdown@^1.1.0:
version "1.3.1" version "1.3.1"
resolved "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz" resolved "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz"
integrity sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww== integrity sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==
@ -9990,31 +10185,31 @@ merge2@^1.3.0, merge2@^1.4.1:
resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
mermaid@10.9.3: mermaid@11.4.1:
version "10.9.3" version "11.4.1"
resolved "https://registry.yarnpkg.com/mermaid/-/mermaid-10.9.3.tgz#90bc6f15c33dbe5d9507fed31592cc0d88fee9f7" resolved "https://registry.yarnpkg.com/mermaid/-/mermaid-11.4.1.tgz#577fad5c31a01a06d9f793e298d411f1379eecc8"
integrity sha512-V80X1isSEvAewIL3xhmz/rVmc27CVljcsbWxkxlWJWY/1kQa4XOABqpDl2qQLGKzpKm6WbTfUEKImBlUfFYArw== integrity sha512-Mb01JT/x6CKDWaxigwfZYuYmDZ6xtrNwNlidKZwkSrDaY9n90tdrJTV5Umk+wP1fZscGptmKFXHsXMDEVZ+Q6A==
dependencies: dependencies:
"@braintree/sanitize-url" "^6.0.1" "@braintree/sanitize-url" "^7.0.1"
"@types/d3-scale" "^4.0.3" "@iconify/utils" "^2.1.32"
"@types/d3-scale-chromatic" "^3.0.0" "@mermaid-js/parser" "^0.3.0"
cytoscape "^3.28.1" "@types/d3" "^7.4.3"
cytoscape "^3.29.2"
cytoscape-cose-bilkent "^4.1.0" cytoscape-cose-bilkent "^4.1.0"
d3 "^7.4.0" cytoscape-fcose "^2.2.0"
d3 "^7.9.0"
d3-sankey "^0.12.3" d3-sankey "^0.12.3"
dagre-d3-es "7.0.10" dagre-d3-es "7.0.11"
dayjs "^1.11.7" dayjs "^1.11.10"
dompurify "^3.0.5 <3.1.7" dompurify "^3.2.1"
elkjs "^0.9.0"
katex "^0.16.9" katex "^0.16.9"
khroma "^2.0.0" khroma "^2.1.0"
lodash-es "^4.17.21" lodash-es "^4.17.21"
mdast-util-from-markdown "^1.3.0" marked "^13.0.2"
non-layered-tidy-tree-layout "^2.0.2" roughjs "^4.6.6"
stylis "^4.1.3" stylis "^4.3.1"
ts-dedent "^2.2.0" ts-dedent "^2.2.0"
uuid "^9.0.0" uuid "^9.0.1"
web-worker "^1.2.0"
methods@~1.1.2: methods@~1.1.2:
version "1.1.2" version "1.1.2"
@ -10545,6 +10740,16 @@ mkdirp@^0.5.6:
dependencies: dependencies:
minimist "^1.2.6" minimist "^1.2.6"
mlly@^1.7.1, mlly@^1.7.2, mlly@^1.7.3:
version "1.7.3"
resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.3.tgz#d86c0fcd8ad8e16395eb764a5f4b831590cee48c"
integrity sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==
dependencies:
acorn "^8.14.0"
pathe "^1.1.2"
pkg-types "^1.2.1"
ufo "^1.5.4"
mri@^1.1.0: mri@^1.1.0:
version "1.2.0" version "1.2.0"
resolved "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz" resolved "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz"
@ -10560,7 +10765,7 @@ ms@2.1.2, ms@^2.1.1:
resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
ms@2.1.3: ms@2.1.3, ms@^2.1.3:
version "2.1.3" version "2.1.3"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
@ -10686,11 +10891,6 @@ node-releases@^2.0.18:
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f"
integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==
non-layered-tidy-tree-layout@^2.0.2:
version "2.0.2"
resolved "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz"
integrity sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==
normalize-package-data@^2.5.0: normalize-package-data@^2.5.0:
version "2.5.0" version "2.5.0"
resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz"
@ -10958,6 +11158,11 @@ p-try@^2.0.0:
resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz"
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
package-manager-detector@^0.2.0:
version "0.2.6"
resolved "https://registry.yarnpkg.com/package-manager-detector/-/package-manager-detector-0.2.6.tgz#7dc8e30ad94861d36114b4499a72d57b30549943"
integrity sha512-9vPH3qooBlYRJdmdYP00nvjZOulm40r5dhtal8st18ctf+6S1k7pi5yIHLvI4w5D70x0Y+xdVD9qITH0QO/A8A==
pako@~1.0.5: pako@~1.0.5:
version "1.0.11" version "1.0.11"
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
@ -11056,6 +11261,11 @@ path-browserify@^1.0.1:
resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd"
integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==
path-data-parser@0.1.0, path-data-parser@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/path-data-parser/-/path-data-parser-0.1.0.tgz#8f5ba5cc70fc7becb3dcefaea08e2659aba60b8c"
integrity sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==
path-exists@^4.0.0: path-exists@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz"
@ -11104,6 +11314,11 @@ path-type@^4.0.0:
resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz"
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
pathe@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec"
integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==
pathval@^2.0.0: pathval@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/pathval/-/pathval-2.0.0.tgz#7e2550b422601d4f6b8e26f1301bc8f15a741a25" resolved "https://registry.yarnpkg.com/pathval/-/pathval-2.0.0.tgz#7e2550b422601d4f6b8e26f1301bc8f15a741a25"
@ -11183,6 +11398,15 @@ pkg-dir@^7.0.0:
dependencies: dependencies:
find-up "^6.3.0" find-up "^6.3.0"
pkg-types@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.2.1.tgz#6ac4e455a5bb4b9a6185c1c79abd544c901db2e5"
integrity sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==
dependencies:
confbox "^0.1.8"
mlly "^1.7.2"
pathe "^1.1.2"
pluralize@^8.0.0: pluralize@^8.0.0:
version "8.0.0" version "8.0.0"
resolved "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz" resolved "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz"
@ -11195,6 +11419,19 @@ pnp-webpack-plugin@^1.7.0:
dependencies: dependencies:
ts-pnp "^1.1.6" ts-pnp "^1.1.6"
points-on-curve@0.2.0, points-on-curve@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/points-on-curve/-/points-on-curve-0.2.0.tgz#7dbb98c43791859434284761330fa893cb81b4d1"
integrity sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==
points-on-path@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/points-on-path/-/points-on-path-0.2.1.tgz#553202b5424c53bed37135b318858eacff85dd52"
integrity sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==
dependencies:
path-data-parser "0.1.0"
points-on-curve "0.2.0"
polished@^4.2.2: polished@^4.2.2:
version "4.3.1" version "4.3.1"
resolved "https://registry.yarnpkg.com/polished/-/polished-4.3.1.tgz#5a00ae32715609f83d89f6f31d0f0261c6170548" resolved "https://registry.yarnpkg.com/polished/-/polished-4.3.1.tgz#5a00ae32715609f83d89f6f31d0f0261c6170548"
@ -12259,6 +12496,16 @@ robust-predicates@^3.0.0:
resolved "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz" resolved "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz"
integrity sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg== integrity sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==
roughjs@^4.6.6:
version "4.6.6"
resolved "https://registry.yarnpkg.com/roughjs/-/roughjs-4.6.6.tgz#1059f49a5e0c80dee541a005b20cc322b222158b"
integrity sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==
dependencies:
hachure-fill "^0.5.2"
path-data-parser "^0.1.0"
points-on-curve "^0.2.0"
points-on-path "^0.2.1"
run-applescript@^5.0.0: run-applescript@^5.0.0:
version "5.0.0" version "5.0.0"
resolved "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz" resolved "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz"
@ -12981,10 +13228,10 @@ styled-jsx@^5.1.6:
dependencies: dependencies:
client-only "0.0.1" client-only "0.0.1"
stylis@^4.1.3: stylis@^4.3.1:
version "4.3.0" version "4.3.4"
resolved "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz" resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.4.tgz#ca5c6c4a35c4784e4e93a2a24dc4e9fa075250a4"
integrity sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ== integrity sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==
sucrase@^3.32.0: sucrase@^3.32.0:
version "3.32.0" version "3.32.0"
@ -13171,6 +13418,11 @@ tiny-invariant@^1.3.1, tiny-invariant@^1.3.3:
resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127"
integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==
tinyexec@^0.3.0:
version "0.3.1"
resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.1.tgz#0ab0daf93b43e2c211212396bdb836b468c97c98"
integrity sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==
tinyrainbow@^1.2.0: tinyrainbow@^1.2.0:
version "1.2.0" version "1.2.0"
resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-1.2.0.tgz#5c57d2fc0fb3d1afd78465c33ca885d04f02abb5" resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-1.2.0.tgz#5c57d2fc0fb3d1afd78465c33ca885d04f02abb5"
@ -13433,6 +13685,11 @@ typescript@4.9.5:
resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz"
integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==
ufo@^1.5.4:
version "1.5.4"
resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.4.tgz#16d6949674ca0c9e0fbbae1fa20a71d7b1ded754"
integrity sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==
uglify-js@^3.17.4: uglify-js@^3.17.4:
version "3.17.4" version "3.17.4"
resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz" resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz"
@ -13801,12 +14058,12 @@ vfile@^6.0.0:
unist-util-stringify-position "^4.0.0" unist-util-stringify-position "^4.0.0"
vfile-message "^4.0.0" vfile-message "^4.0.0"
vite-code-inspector-plugin@0.13.0: vite-code-inspector-plugin@0.18.2:
version "0.13.0" version "0.18.2"
resolved "https://registry.npmjs.org/vite-code-inspector-plugin/-/vite-code-inspector-plugin-0.13.0.tgz" resolved "https://registry.yarnpkg.com/vite-code-inspector-plugin/-/vite-code-inspector-plugin-0.18.2.tgz#33be5f7408ea81163d833c8f06c2ff1e18669ee4"
integrity sha512-hvIn9G+IFzQHVVynWh2wGTBHo51CBJRqQBzYryeuuaL0BK0w8my2/tlpSAae5ofQxOBXBMhyXC2gWgYUJnNWrA== integrity sha512-MfHvere+71vL0BOposwgbHKZ8o973mYnMhGmU4uzOMt+gsmIjqHxcUkak9K2RMkRB1mG7/Gehvyy28SkUuhg3A==
dependencies: dependencies:
code-inspector-core "0.13.0" code-inspector-core "0.18.2"
vm-browserify@^1.1.2: vm-browserify@^1.1.2:
version "1.1.2" version "1.1.2"
@ -13818,6 +14075,41 @@ void-elements@3.1.0:
resolved "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz" resolved "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz"
integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==
vscode-jsonrpc@8.2.0:
version "8.2.0"
resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz#f43dfa35fb51e763d17cd94dcca0c9458f35abf9"
integrity sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==
vscode-languageserver-protocol@3.17.5:
version "3.17.5"
resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz#864a8b8f390835572f4e13bd9f8313d0e3ac4bea"
integrity sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==
dependencies:
vscode-jsonrpc "8.2.0"
vscode-languageserver-types "3.17.5"
vscode-languageserver-textdocument@~1.0.11:
version "1.0.12"
resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz#457ee04271ab38998a093c68c2342f53f6e4a631"
integrity sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==
vscode-languageserver-types@3.17.5:
version "3.17.5"
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz#3273676f0cf2eab40b3f44d085acbb7f08a39d8a"
integrity sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==
vscode-languageserver@~9.0.1:
version "9.0.1"
resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz#500aef82097eb94df90d008678b0b6b5f474015b"
integrity sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==
dependencies:
vscode-languageserver-protocol "3.17.5"
vscode-uri@~3.0.8:
version "3.0.8"
resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.8.tgz#1770938d3e72588659a172d0fd4642780083ff9f"
integrity sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==
vue-eslint-parser@^9.3.0: vue-eslint-parser@^9.3.0:
version "9.3.0" version "9.3.0"
resolved "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.0.tgz" resolved "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.0.tgz"
@ -13858,22 +14150,17 @@ web-namespaces@^2.0.0:
resolved "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz" resolved "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz"
integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==
web-worker@^1.2.0:
version "1.2.0"
resolved "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz"
integrity sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==
webidl-conversions@^7.0.0: webidl-conversions@^7.0.0:
version "7.0.0" version "7.0.0"
resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a"
integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==
webpack-code-inspector-plugin@0.13.0: webpack-code-inspector-plugin@0.18.2:
version "0.13.0" version "0.18.2"
resolved "https://registry.npmjs.org/webpack-code-inspector-plugin/-/webpack-code-inspector-plugin-0.13.0.tgz" resolved "https://registry.yarnpkg.com/webpack-code-inspector-plugin/-/webpack-code-inspector-plugin-0.18.2.tgz#c2355d384c12212de5662fa8bc5898f449886b0a"
integrity sha512-T3ZZ84NX0cVmwff5zyYhB9OuroZYsyaQpSgFicgiuYAWCsQePYApM/R3bHdvcECkBXO50hAVtr9SjWRTu1+Ntg== integrity sha512-sSUgrISb8KqKGiX+AvKA5FAdiOh41nEX/EU+c/d1ChYQmwLDdWXxsMyAs494R3r+ihVUchhLalb9V6TvDKTOCA==
dependencies: dependencies:
code-inspector-core "0.13.0" code-inspector-core "0.18.2"
webpack-dev-middleware@^6.1.2: webpack-dev-middleware@^6.1.2:
version "6.1.3" version "6.1.3"