fix: 升级依赖并修复相关问题

- 升级web依赖到最新版本
- 修复1.11.4版本兼容性问题
- 解决google字体dockerfile访问问题
- 恢复丢失的相关文件
- 添加多语言支持
- 调整docker版本及worker镜像配置
This commit is contained in:
npc0-hue
2026-01-26 07:33:30 +08:00
parent b2f5707676
commit 062c8a5b22
38 changed files with 747 additions and 242 deletions
+2 -11
View File
@@ -36,10 +36,10 @@ if [[ "${MODE}" == "worker" ]]; then
if [[ -z "${CELERY_QUEUES}" ]]; then
if [[ "${EDITION}" == "CLOUD" ]]; then
# Cloud edition: separate queues for dataset and trigger tasks
DEFAULT_QUEUES="priority_dataset,priority_pipeline,pipeline,mail,ops_trace,app_deletion,plugin,workflow_storage,conversation,workflow_professional,workflow_team,workflow_sandbox,schedule_poller,schedule_executor,triggered_workflow_dispatcher,trigger_refresh_executor,retention"
DEFAULT_QUEUES="priority_pipeline,pipeline,mail,ops_trace,app_deletion,plugin,workflow_storage,conversation,workflow_professional,workflow_team,workflow_sandbox,schedule_poller,schedule_executor,triggered_workflow_dispatcher,trigger_refresh_executor,retention"
else
# Community edition (SELF_HOSTED): dataset, pipeline and workflow have separate queues
DEFAULT_QUEUES="priority_dataset,priority_pipeline,pipeline,mail,ops_trace,app_deletion,plugin,workflow_storage,conversation,workflow,schedule_poller,schedule_executor,triggered_workflow_dispatcher,trigger_refresh_executor,retention"
DEFAULT_QUEUES="priority_pipeline,pipeline,mail,ops_trace,app_deletion,plugin,workflow_storage,conversation,workflow,schedule_poller,schedule_executor,triggered_workflow_dispatcher,trigger_refresh_executor,retention"
fi
else
DEFAULT_QUEUES="${CELERY_QUEUES}"
@@ -64,20 +64,11 @@ if [[ "${MODE}" == "worker" ]]; then
WORKER_POOL="${CELERY_WORKER_POOL:-${CELERY_WORKER_CLASS:-gevent}}"
echo "Starting Celery worker with queues: ${DEFAULT_QUEUES}"
## 二开部分,额度计算移动到新的队列中
exec celery -A celery_entrypoint.celery worker -P ${WORKER_POOL} $CONCURRENCY_OPTION \
--max-tasks-per-child ${MAX_TASKS_PER_CHILD:-50} --loglevel ${LOG_LEVEL:-INFO} \
-Q ${DEFAULT_QUEUES} \
--prefetch-multiplier=${CELERY_PREFETCH_MULTIPLIER:-1}
## 二开部分,额度计算移动到新的队列中
## 二开部分,额度计算
elif [[ "${MODE}" == "worker-gaia" ]]; then
exec celery -A app.celery worker -P gevent -c 1 -Q extend_high,extend_low --loglevel INFO
## 二开部分,单一运行的知识库,多容器执行会导致卡住问题
elif [[ "${MODE}" == "worker-dataset" ]]; then
exec celery -A app.celery worker -P gevent -c 1 -Q dataset --prefetch-multiplier=1 --loglevel INFO
## 二开部分,end
elif [[ "${MODE}" == "beat" ]]; then
exec celery -A app.celery beat --loglevel ${LOG_LEVEL:-INFO}
@@ -1,45 +0,0 @@
"""add_app_extend
Revision ID: 012_app_extend
Revises: 011_system_integration_fields
Create Date: 2025-01-15 12:00:00.000000
"""
import sqlalchemy as sa
from alembic import op
from sqlalchemy.engine.reflection import Inspector
from models import types
# revision identifiers, used by Alembic.
revision = '012_app_extend'
down_revision = '011_system_integration_fields'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
conn = op.get_bind()
inspector = Inspector.from_engine(conn)
tables = inspector.get_table_names()
if 'app_extend' not in tables:
op.create_table('app_extend',
sa.Column('id', types.StringUUID(), server_default=sa.text('uuid_generate_v4()'), nullable=False),
sa.Column('app_id', types.StringUUID(), nullable=False),
sa.Column('retention_number', sa.Integer(), nullable=True),
sa.PrimaryKeyConstraint('id', name='app_extend_joins_pkey')
)
with op.batch_alter_table('app_extend', schema=None) as batch_op:
batch_op.create_index('app_extend_id_app_id_idx', ['app_id'], unique=False)
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('app_extend', schema=None) as batch_op:
batch_op.drop_index('app_extend_id_app_id_idx')
op.drop_table('app_extend')
# ### end Alembic commands ###
@@ -1,48 +0,0 @@
"""add_message_context_extend
Revision ID: 013_message_context_extend
Revises: 012_app_extend
Create Date: 2025-01-15 13:00:00.000000
"""
import sqlalchemy as sa
from alembic import op
from sqlalchemy.engine.reflection import Inspector
from models import types
# revision identifiers, used by Alembic.
revision = '013_message_context_extend'
down_revision = '012_app_extend'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
conn = op.get_bind()
inspector = Inspector.from_engine(conn)
tables = inspector.get_table_names()
if 'message_context_extend' not in tables:
op.create_table('message_context_extend',
sa.Column('id', types.StringUUID(), server_default=sa.text('uuid_generate_v4()'), nullable=False),
sa.Column('created_at', sa.DateTime(), server_default=sa.text('CURRENT_TIMESTAMP(0)'), nullable=False),
sa.Column('conversation_id', sa.String(length=36), nullable=True),
sa.Column('message_id', sa.String(length=36), nullable=False),
sa.PrimaryKeyConstraint('id', name='message_context_extend_joins_pkey')
)
with op.batch_alter_table('message_context_extend', schema=None) as batch_op:
batch_op.create_index('message_context_conversation_id_idx', ['conversation_id'], unique=False)
batch_op.create_index('message_context_created_at_idx', ['created_at'], unique=False)
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('message_context_extend', schema=None) as batch_op:
batch_op.drop_index('message_context_created_at_idx')
batch_op.drop_index('message_context_conversation_id_idx')
op.drop_table('message_context_extend')
# ### end Alembic commands ###
@@ -0,0 +1,62 @@
"""add_account_money_extend_unique_constraint
Revision ID: 012_account_money_extend_unique
Revises: 011_system_integration_fields
Create Date: 2025-10-21 18:00:00.000000
"""
import sqlalchemy as sa
from alembic import op
from sqlalchemy.engine.reflection import Inspector
# revision identifiers, used by Alembic.
revision = '012_account_money_extend_unique'
down_revision = '011_system_integration_fields'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
conn = op.get_bind()
inspector = Inspector.from_engine(conn)
tables = inspector.get_table_names()
if 'account_money_extend' in tables:
# 首先删除重复数据,只保留每个account_id中updated_at最大的记录
conn.execute(sa.text("""
DELETE FROM account_money_extend
WHERE id NOT IN (
SELECT DISTINCT ON (account_id) id
FROM account_money_extend
ORDER BY account_id, updated_at DESC
)
"""))
# 删除现有的普通索引
with op.batch_alter_table('account_money_extend', schema=None) as batch_op:
try:
batch_op.drop_index('idx_account_money_account_id')
except Exception:
# 如果索引不存在,忽略错误
pass
# 创建唯一约束
with op.batch_alter_table('account_money_extend', schema=None) as batch_op:
batch_op.create_unique_constraint('idx_account_money_account_id_unique', ['account_id'])
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
if 'account_money_extend' in tables:
with op.batch_alter_table('account_money_extend', schema=None) as batch_op:
try:
batch_op.drop_constraint('idx_account_money_account_id_unique', type_='unique')
except Exception:
# 如果约束不存在,忽略错误
pass
# 重新创建普通索引
batch_op.create_index('idx_account_money_account_id', ['account_id'], unique=False)
# ### end Alembic commands ###
+256 -61
View File
@@ -8,14 +8,16 @@ x-shared-env: &shared-api-worker-env
CONSOLE_API_URL: ${CONSOLE_API_URL:-}
CONSOLE_WEB_URL: ${CONSOLE_WEB_URL:-}
SERVICE_API_URL: ${SERVICE_API_URL:-}
TRIGGER_URL: ${TRIGGER_URL:-http://localhost}
APP_API_URL: ${APP_API_URL:-}
APP_WEB_URL: ${APP_WEB_URL:-}
FILES_URL: ${FILES_URL:-}
INTERNAL_FILES_URL: ${INTERNAL_FILES_URL:-}
LANG: ${LANG:-en_US.UTF-8}
LC_ALL: ${LC_ALL:-en_US.UTF-8}
LANG: ${LANG:-C.UTF-8}
LC_ALL: ${LC_ALL:-C.UTF-8}
PYTHONIOENCODING: ${PYTHONIOENCODING:-utf-8}
LOG_LEVEL: ${LOG_LEVEL:-INFO}
LOG_OUTPUT_FORMAT: ${LOG_OUTPUT_FORMAT:-text}
LOG_FILE: ${LOG_FILE:-/app/logs/server.log}
LOG_FILE_MAX_SIZE: ${LOG_FILE_MAX_SIZE:-20}
LOG_FILE_BACKUP_COUNT: ${LOG_FILE_BACKUP_COUNT:-5}
@@ -33,6 +35,7 @@ x-shared-env: &shared-api-worker-env
FILES_ACCESS_TIMEOUT: ${FILES_ACCESS_TIMEOUT:-300}
ACCESS_TOKEN_EXPIRE_MINUTES: ${ACCESS_TOKEN_EXPIRE_MINUTES:-60}
REFRESH_TOKEN_EXPIRE_DAYS: ${REFRESH_TOKEN_EXPIRE_DAYS:-30}
APP_DEFAULT_ACTIVE_REQUESTS: ${APP_DEFAULT_ACTIVE_REQUESTS:-0}
APP_MAX_ACTIVE_REQUESTS: ${APP_MAX_ACTIVE_REQUESTS:-0}
APP_MAX_EXECUTION_TIME: ${APP_MAX_EXECUTION_TIME:-1200}
DIFY_BIND_ADDRESS: ${DIFY_BIND_ADDRESS:-0.0.0.0}
@@ -53,7 +56,7 @@ x-shared-env: &shared-api-worker-env
ENABLE_WEBSITE_WATERCRAWL: ${ENABLE_WEBSITE_WATERCRAWL:-true}
DB_USERNAME: ${DB_USERNAME:-postgres}
DB_PASSWORD: ${DB_PASSWORD:-difyai123456}
DB_HOST: ${DB_HOST:-db}
DB_HOST: ${DB_HOST:-db_postgres}
DB_PORT: ${DB_PORT:-5432}
DB_DATABASE: ${DB_DATABASE:-dify}
SQLALCHEMY_POOL_SIZE: ${SQLALCHEMY_POOL_SIZE:-30}
@@ -62,11 +65,18 @@ x-shared-env: &shared-api-worker-env
SQLALCHEMY_ECHO: ${SQLALCHEMY_ECHO:-false}
SQLALCHEMY_POOL_PRE_PING: ${SQLALCHEMY_POOL_PRE_PING:-false}
SQLALCHEMY_POOL_USE_LIFO: ${SQLALCHEMY_POOL_USE_LIFO:-false}
SQLALCHEMY_POOL_TIMEOUT: ${SQLALCHEMY_POOL_TIMEOUT:-30}
POSTGRES_MAX_CONNECTIONS: ${POSTGRES_MAX_CONNECTIONS:-100}
POSTGRES_SHARED_BUFFERS: ${POSTGRES_SHARED_BUFFERS:-128MB}
POSTGRES_WORK_MEM: ${POSTGRES_WORK_MEM:-4MB}
POSTGRES_MAINTENANCE_WORK_MEM: ${POSTGRES_MAINTENANCE_WORK_MEM:-64MB}
POSTGRES_EFFECTIVE_CACHE_SIZE: ${POSTGRES_EFFECTIVE_CACHE_SIZE:-4096MB}
POSTGRES_STATEMENT_TIMEOUT: ${POSTGRES_STATEMENT_TIMEOUT:-0}
POSTGRES_IDLE_IN_TRANSACTION_SESSION_TIMEOUT: ${POSTGRES_IDLE_IN_TRANSACTION_SESSION_TIMEOUT:-0}
MYSQL_MAX_CONNECTIONS: ${MYSQL_MAX_CONNECTIONS:-1000}
MYSQL_INNODB_BUFFER_POOL_SIZE: ${MYSQL_INNODB_BUFFER_POOL_SIZE:-512M}
MYSQL_INNODB_LOG_FILE_SIZE: ${MYSQL_INNODB_LOG_FILE_SIZE:-128M}
MYSQL_INNODB_FLUSH_LOG_AT_TRX_COMMIT: ${MYSQL_INNODB_FLUSH_LOG_AT_TRX_COMMIT:-2}
REDIS_HOST: ${REDIS_HOST:-redis}
REDIS_PORT: ${REDIS_PORT:-6379}
REDIS_USERNAME: ${REDIS_USERNAME:-}
@@ -95,6 +105,9 @@ x-shared-env: &shared-api-worker-env
CELERY_SENTINEL_SOCKET_TIMEOUT: ${CELERY_SENTINEL_SOCKET_TIMEOUT:-0.1}
WEB_API_CORS_ALLOW_ORIGINS: ${WEB_API_CORS_ALLOW_ORIGINS:-*}
CONSOLE_CORS_ALLOW_ORIGINS: ${CONSOLE_CORS_ALLOW_ORIGINS:-*}
COOKIE_DOMAIN: ${COOKIE_DOMAIN:-}
NEXT_PUBLIC_COOKIE_DOMAIN: ${NEXT_PUBLIC_COOKIE_DOMAIN:-}
NEXT_PUBLIC_BATCH_CONCURRENCY: ${NEXT_PUBLIC_BATCH_CONCURRENCY:-5}
STORAGE_TYPE: ${STORAGE_TYPE:-opendal}
OPENDAL_SCHEME: ${OPENDAL_SCHEME:-fs}
OPENDAL_FS_ROOT: ${OPENDAL_FS_ROOT:-storage}
@@ -108,6 +121,13 @@ x-shared-env: &shared-api-worker-env
S3_ACCESS_KEY: ${S3_ACCESS_KEY:-}
S3_SECRET_KEY: ${S3_SECRET_KEY:-}
S3_USE_AWS_MANAGED_IAM: ${S3_USE_AWS_MANAGED_IAM:-false}
ARCHIVE_STORAGE_ENABLED: ${ARCHIVE_STORAGE_ENABLED:-false}
ARCHIVE_STORAGE_ENDPOINT: ${ARCHIVE_STORAGE_ENDPOINT:-}
ARCHIVE_STORAGE_ARCHIVE_BUCKET: ${ARCHIVE_STORAGE_ARCHIVE_BUCKET:-}
ARCHIVE_STORAGE_EXPORT_BUCKET: ${ARCHIVE_STORAGE_EXPORT_BUCKET:-}
ARCHIVE_STORAGE_ACCESS_KEY: ${ARCHIVE_STORAGE_ACCESS_KEY:-}
ARCHIVE_STORAGE_SECRET_KEY: ${ARCHIVE_STORAGE_SECRET_KEY:-}
ARCHIVE_STORAGE_REGION: ${ARCHIVE_STORAGE_REGION:-auto}
AZURE_BLOB_ACCOUNT_NAME: ${AZURE_BLOB_ACCOUNT_NAME:-difyai}
AZURE_BLOB_ACCOUNT_KEY: ${AZURE_BLOB_ACCOUNT_KEY:-difyai}
AZURE_BLOB_CONTAINER_NAME: ${AZURE_BLOB_CONTAINER_NAME:-difyai-container}
@@ -121,11 +141,13 @@ x-shared-env: &shared-api-worker-env
ALIYUN_OSS_REGION: ${ALIYUN_OSS_REGION:-ap-southeast-1}
ALIYUN_OSS_AUTH_VERSION: ${ALIYUN_OSS_AUTH_VERSION:-v4}
ALIYUN_OSS_PATH: ${ALIYUN_OSS_PATH:-your-path}
ALIYUN_CLOUDBOX_ID: ${ALIYUN_CLOUDBOX_ID:-your-cloudbox-id}
TENCENT_COS_BUCKET_NAME: ${TENCENT_COS_BUCKET_NAME:-your-bucket-name}
TENCENT_COS_SECRET_KEY: ${TENCENT_COS_SECRET_KEY:-your-secret-key}
TENCENT_COS_SECRET_ID: ${TENCENT_COS_SECRET_ID:-your-secret-id}
TENCENT_COS_REGION: ${TENCENT_COS_REGION:-your-region}
TENCENT_COS_SCHEME: ${TENCENT_COS_SCHEME:-your-scheme}
TENCENT_COS_CUSTOM_DOMAIN: ${TENCENT_COS_CUSTOM_DOMAIN:-your-custom-domain}
OCI_ENDPOINT: ${OCI_ENDPOINT:-https://your-object-storage-namespace.compat.objectstorage.us-ashburn-1.oraclecloud.com}
OCI_BUCKET_NAME: ${OCI_BUCKET_NAME:-your-bucket-name}
OCI_ACCESS_KEY: ${OCI_ACCESS_KEY:-your-access-key}
@@ -135,6 +157,7 @@ x-shared-env: &shared-api-worker-env
HUAWEI_OBS_SECRET_KEY: ${HUAWEI_OBS_SECRET_KEY:-your-secret-key}
HUAWEI_OBS_ACCESS_KEY: ${HUAWEI_OBS_ACCESS_KEY:-your-access-key}
HUAWEI_OBS_SERVER: ${HUAWEI_OBS_SERVER:-your-server-url}
HUAWEI_OBS_PATH_STYLE: ${HUAWEI_OBS_PATH_STYLE:-false}
VOLCENGINE_TOS_BUCKET_NAME: ${VOLCENGINE_TOS_BUCKET_NAME:-your-bucket-name}
VOLCENGINE_TOS_SECRET_KEY: ${VOLCENGINE_TOS_SECRET_KEY:-your-secret-key}
VOLCENGINE_TOS_ACCESS_KEY: ${VOLCENGINE_TOS_ACCESS_KEY:-your-access-key}
@@ -151,6 +174,18 @@ x-shared-env: &shared-api-worker-env
VECTOR_INDEX_NAME_PREFIX: ${VECTOR_INDEX_NAME_PREFIX:-Vector_index}
WEAVIATE_ENDPOINT: ${WEAVIATE_ENDPOINT:-http://weaviate:8080}
WEAVIATE_API_KEY: ${WEAVIATE_API_KEY:-WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih}
WEAVIATE_GRPC_ENDPOINT: ${WEAVIATE_GRPC_ENDPOINT:-grpc://weaviate:50051}
WEAVIATE_TOKENIZATION: ${WEAVIATE_TOKENIZATION:-word}
OCEANBASE_VECTOR_HOST: ${OCEANBASE_VECTOR_HOST:-oceanbase}
OCEANBASE_VECTOR_PORT: ${OCEANBASE_VECTOR_PORT:-2881}
OCEANBASE_VECTOR_USER: ${OCEANBASE_VECTOR_USER:-root@test}
OCEANBASE_VECTOR_PASSWORD: ${OCEANBASE_VECTOR_PASSWORD:-difyai123456}
OCEANBASE_VECTOR_DATABASE: ${OCEANBASE_VECTOR_DATABASE:-test}
OCEANBASE_CLUSTER_NAME: ${OCEANBASE_CLUSTER_NAME:-difyai}
OCEANBASE_MEMORY_LIMIT: ${OCEANBASE_MEMORY_LIMIT:-6G}
OCEANBASE_ENABLE_HYBRID_SEARCH: ${OCEANBASE_ENABLE_HYBRID_SEARCH:-false}
OCEANBASE_FULLTEXT_PARSER: ${OCEANBASE_FULLTEXT_PARSER:-ik}
SEEKDB_MEMORY_LIMIT: ${SEEKDB_MEMORY_LIMIT:-2G}
QDRANT_URL: ${QDRANT_URL:-http://qdrant:6333}
QDRANT_API_KEY: ${QDRANT_API_KEY:-difyai123456}
QDRANT_CLIENT_TIMEOUT: ${QDRANT_CLIENT_TIMEOUT:-20}
@@ -243,7 +278,7 @@ x-shared-env: &shared-api-worker-env
ORACLE_WALLET_LOCATION: ${ORACLE_WALLET_LOCATION:-/app/api/storage/wallet}
ORACLE_WALLET_PASSWORD: ${ORACLE_WALLET_PASSWORD:-dify}
ORACLE_IS_AUTONOMOUS: ${ORACLE_IS_AUTONOMOUS:-false}
RELYT_HOST: ${RELYT_HOST:-db}
RELYT_HOST: ${RELYT_HOST:-db_postgres}
RELYT_PORT: ${RELYT_PORT:-5432}
RELYT_USER: ${RELYT_USER:-postgres}
RELYT_PASSWORD: ${RELYT_PASSWORD:-difyai123456}
@@ -285,6 +320,8 @@ x-shared-env: &shared-api-worker-env
BAIDU_VECTOR_DB_DATABASE: ${BAIDU_VECTOR_DB_DATABASE:-dify}
BAIDU_VECTOR_DB_SHARD: ${BAIDU_VECTOR_DB_SHARD:-1}
BAIDU_VECTOR_DB_REPLICAS: ${BAIDU_VECTOR_DB_REPLICAS:-3}
BAIDU_VECTOR_DB_INVERTED_INDEX_ANALYZER: ${BAIDU_VECTOR_DB_INVERTED_INDEX_ANALYZER:-DEFAULT_ANALYZER}
BAIDU_VECTOR_DB_INVERTED_INDEX_PARSER_MODE: ${BAIDU_VECTOR_DB_INVERTED_INDEX_PARSER_MODE:-COARSE_MODE}
VIKINGDB_ACCESS_KEY: ${VIKINGDB_ACCESS_KEY:-your-ak}
VIKINGDB_SECRET_KEY: ${VIKINGDB_SECRET_KEY:-your-sk}
VIKINGDB_REGION: ${VIKINGDB_REGION:-cn-shanghai}
@@ -292,9 +329,10 @@ x-shared-env: &shared-api-worker-env
VIKINGDB_SCHEMA: ${VIKINGDB_SCHEMA:-http}
VIKINGDB_CONNECTION_TIMEOUT: ${VIKINGDB_CONNECTION_TIMEOUT:-30}
VIKINGDB_SOCKET_TIMEOUT: ${VIKINGDB_SOCKET_TIMEOUT:-30}
LINDORM_URL: ${LINDORM_URL:-http://lindorm:30070}
LINDORM_USERNAME: ${LINDORM_USERNAME:-lindorm}
LINDORM_PASSWORD: ${LINDORM_PASSWORD:-lindorm}
LINDORM_URL: ${LINDORM_URL:-http://localhost:30070}
LINDORM_USERNAME: ${LINDORM_USERNAME:-admin}
LINDORM_PASSWORD: ${LINDORM_PASSWORD:-admin}
LINDORM_USING_UGC: ${LINDORM_USING_UGC:-True}
LINDORM_QUERY_TIMEOUT: ${LINDORM_QUERY_TIMEOUT:-1}
OCEANBASE_VECTOR_HOST: ${OCEANBASE_VECTOR_HOST:-oceanbase}
OCEANBASE_VECTOR_PORT: ${OCEANBASE_VECTOR_PORT:-2881}
@@ -334,8 +372,47 @@ x-shared-env: &shared-api-worker-env
CLICKZETTA_ANALYZER_TYPE: ${CLICKZETTA_ANALYZER_TYPE:-chinese}
CLICKZETTA_ANALYZER_MODE: ${CLICKZETTA_ANALYZER_MODE:-smart}
CLICKZETTA_VECTOR_DISTANCE_FUNCTION: ${CLICKZETTA_VECTOR_DISTANCE_FUNCTION:-cosine_distance}
IRIS_HOST: ${IRIS_HOST:-iris}
IRIS_SUPER_SERVER_PORT: ${IRIS_SUPER_SERVER_PORT:-1972}
IRIS_WEB_SERVER_PORT: ${IRIS_WEB_SERVER_PORT:-52773}
IRIS_USER: ${IRIS_USER:-_SYSTEM}
IRIS_PASSWORD: ${IRIS_PASSWORD:-Dify@1234}
IRIS_DATABASE: ${IRIS_DATABASE:-USER}
IRIS_SCHEMA: ${IRIS_SCHEMA:-dify}
IRIS_CONNECTION_URL: ${IRIS_CONNECTION_URL:-}
IRIS_MIN_CONNECTION: ${IRIS_MIN_CONNECTION:-1}
IRIS_MAX_CONNECTION: ${IRIS_MAX_CONNECTION:-3}
IRIS_TEXT_INDEX: ${IRIS_TEXT_INDEX:-true}
IRIS_TEXT_INDEX_LANGUAGE: ${IRIS_TEXT_INDEX_LANGUAGE:-en}
IRIS_TIMEZONE: ${IRIS_TIMEZONE:-UTC}
HUAWEI_CLOUD_USER: ${HUAWEI_CLOUD_USER:-admin}
HUAWEI_CLOUD_PASSWORD: ${HUAWEI_CLOUD_PASSWORD:-admin}
UPSTASH_VECTOR_URL: ${UPSTASH_VECTOR_URL:-https://xxx-vector.upstash.io}
UPSTASH_VECTOR_TOKEN: ${UPSTASH_VECTOR_TOKEN:-dify}
TABLESTORE_ENDPOINT: ${TABLESTORE_ENDPOINT:-https://instance-name.cn-hangzhou.ots.aliyuncs.com}
TABLESTORE_INSTANCE_NAME: ${TABLESTORE_INSTANCE_NAME:-instance-name}
TABLESTORE_ACCESS_KEY_ID: ${TABLESTORE_ACCESS_KEY_ID:-xxx}
TABLESTORE_ACCESS_KEY_SECRET: ${TABLESTORE_ACCESS_KEY_SECRET:-xxx}
TABLESTORE_NORMALIZE_FULLTEXT_BM25_SCORE: ${TABLESTORE_NORMALIZE_FULLTEXT_BM25_SCORE:-false}
CLICKZETTA_USERNAME: ${CLICKZETTA_USERNAME:-}
CLICKZETTA_PASSWORD: ${CLICKZETTA_PASSWORD:-}
CLICKZETTA_INSTANCE: ${CLICKZETTA_INSTANCE:-}
CLICKZETTA_SERVICE: ${CLICKZETTA_SERVICE:-api.clickzetta.com}
CLICKZETTA_WORKSPACE: ${CLICKZETTA_WORKSPACE:-quick_start}
CLICKZETTA_VCLUSTER: ${CLICKZETTA_VCLUSTER:-default_ap}
CLICKZETTA_SCHEMA: ${CLICKZETTA_SCHEMA:-dify}
CLICKZETTA_BATCH_SIZE: ${CLICKZETTA_BATCH_SIZE:-100}
CLICKZETTA_ENABLE_INVERTED_INDEX: ${CLICKZETTA_ENABLE_INVERTED_INDEX:-true}
CLICKZETTA_ANALYZER_TYPE: ${CLICKZETTA_ANALYZER_TYPE:-chinese}
CLICKZETTA_ANALYZER_MODE: ${CLICKZETTA_ANALYZER_MODE:-smart}
CLICKZETTA_VECTOR_DISTANCE_FUNCTION: ${CLICKZETTA_VECTOR_DISTANCE_FUNCTION:-cosine_distance}
UPLOAD_FILE_SIZE_LIMIT: ${UPLOAD_FILE_SIZE_LIMIT:-15}
UPLOAD_FILE_BATCH_LIMIT: ${UPLOAD_FILE_BATCH_LIMIT:-5}
UPLOAD_FILE_EXTENSION_BLACKLIST: ${UPLOAD_FILE_EXTENSION_BLACKLIST:-}
SINGLE_CHUNK_ATTACHMENT_LIMIT: ${SINGLE_CHUNK_ATTACHMENT_LIMIT:-10}
IMAGE_FILE_BATCH_LIMIT: ${IMAGE_FILE_BATCH_LIMIT:-10}
ATTACHMENT_IMAGE_FILE_SIZE_LIMIT: ${ATTACHMENT_IMAGE_FILE_SIZE_LIMIT:-2}
ATTACHMENT_IMAGE_DOWNLOAD_TIMEOUT: ${ATTACHMENT_IMAGE_DOWNLOAD_TIMEOUT:-60}
ETL_TYPE: ${ETL_TYPE:-dify}
UNSTRUCTURED_API_URL: ${UNSTRUCTURED_API_URL:-}
UNSTRUCTURED_API_KEY: ${UNSTRUCTURED_API_KEY:-}
@@ -368,31 +445,41 @@ x-shared-env: &shared-api-worker-env
SMTP_PASSWORD: ${SMTP_PASSWORD:-}
SMTP_USE_TLS: ${SMTP_USE_TLS:-true}
SMTP_OPPORTUNISTIC_TLS: ${SMTP_OPPORTUNISTIC_TLS:-false}
SMTP_LOCAL_HOSTNAME: ${SMTP_LOCAL_HOSTNAME:-}
SENDGRID_API_KEY: ${SENDGRID_API_KEY:-}
INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH: ${INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH:-4000}
INVITE_EXPIRY_HOURS: ${INVITE_EXPIRY_HOURS:-72}
RESET_PASSWORD_TOKEN_EXPIRY_MINUTES: ${RESET_PASSWORD_TOKEN_EXPIRY_MINUTES:-5}
EMAIL_REGISTER_TOKEN_EXPIRY_MINUTES: ${EMAIL_REGISTER_TOKEN_EXPIRY_MINUTES:-5}
CHANGE_EMAIL_TOKEN_EXPIRY_MINUTES: ${CHANGE_EMAIL_TOKEN_EXPIRY_MINUTES:-5}
OWNER_TRANSFER_TOKEN_EXPIRY_MINUTES: ${OWNER_TRANSFER_TOKEN_EXPIRY_MINUTES:-5}
CODE_EXECUTION_ENDPOINT: ${CODE_EXECUTION_ENDPOINT:-http://sandbox:8194}
CODE_EXECUTION_API_KEY: ${CODE_EXECUTION_API_KEY:-dify-sandbox}
CODE_EXECUTION_SSL_VERIFY: ${CODE_EXECUTION_SSL_VERIFY:-True}
CODE_EXECUTION_POOL_MAX_CONNECTIONS: ${CODE_EXECUTION_POOL_MAX_CONNECTIONS:-100}
CODE_EXECUTION_POOL_MAX_KEEPALIVE_CONNECTIONS: ${CODE_EXECUTION_POOL_MAX_KEEPALIVE_CONNECTIONS:-20}
CODE_EXECUTION_POOL_KEEPALIVE_EXPIRY: ${CODE_EXECUTION_POOL_KEEPALIVE_EXPIRY:-5.0}
CODE_EXECUTION_API_KEY: ${CODE_EXECUTION_API_KEY:-dify-sandbox}
CODE_MAX_NUMBER: ${CODE_MAX_NUMBER:-9223372036854775807}
CODE_MIN_NUMBER: ${CODE_MIN_NUMBER:--9223372036854775808}
CODE_MAX_DEPTH: ${CODE_MAX_DEPTH:-5}
CODE_MAX_PRECISION: ${CODE_MAX_PRECISION:-20}
CODE_MAX_STRING_LENGTH: ${CODE_MAX_STRING_LENGTH:-80000}
CODE_MAX_STRING_LENGTH: ${CODE_MAX_STRING_LENGTH:-400000}
CODE_MAX_STRING_ARRAY_LENGTH: ${CODE_MAX_STRING_ARRAY_LENGTH:-30}
CODE_MAX_OBJECT_ARRAY_LENGTH: ${CODE_MAX_OBJECT_ARRAY_LENGTH:-30}
CODE_MAX_NUMBER_ARRAY_LENGTH: ${CODE_MAX_NUMBER_ARRAY_LENGTH:-1000}
CODE_EXECUTION_CONNECT_TIMEOUT: ${CODE_EXECUTION_CONNECT_TIMEOUT:-10}
CODE_EXECUTION_READ_TIMEOUT: ${CODE_EXECUTION_READ_TIMEOUT:-60}
CODE_EXECUTION_WRITE_TIMEOUT: ${CODE_EXECUTION_WRITE_TIMEOUT:-10}
TEMPLATE_TRANSFORM_MAX_LENGTH: ${TEMPLATE_TRANSFORM_MAX_LENGTH:-80000}
TEMPLATE_TRANSFORM_MAX_LENGTH: ${TEMPLATE_TRANSFORM_MAX_LENGTH:-400000}
WORKFLOW_MAX_EXECUTION_STEPS: ${WORKFLOW_MAX_EXECUTION_STEPS:-500}
WORKFLOW_MAX_EXECUTION_TIME: ${WORKFLOW_MAX_EXECUTION_TIME:-1200}
WORKFLOW_CALL_MAX_DEPTH: ${WORKFLOW_CALL_MAX_DEPTH:-5}
MAX_VARIABLE_SIZE: ${MAX_VARIABLE_SIZE:-204800}
WORKFLOW_PARALLEL_DEPTH_LIMIT: ${WORKFLOW_PARALLEL_DEPTH_LIMIT:-3}
GRAPH_ENGINE_MIN_WORKERS: ${GRAPH_ENGINE_MIN_WORKERS:-1}
GRAPH_ENGINE_MAX_WORKERS: ${GRAPH_ENGINE_MAX_WORKERS:-10}
GRAPH_ENGINE_SCALE_UP_THRESHOLD: ${GRAPH_ENGINE_SCALE_UP_THRESHOLD:-3}
GRAPH_ENGINE_SCALE_DOWN_IDLE_TIME: ${GRAPH_ENGINE_SCALE_DOWN_IDLE_TIME:-5.0}
WORKFLOW_FILE_UPLOAD_LIMIT: ${WORKFLOW_FILE_UPLOAD_LIMIT:-10}
WORKFLOW_NODE_EXECUTION_STORAGE: ${WORKFLOW_NODE_EXECUTION_STORAGE:-rdbms}
CORE_WORKFLOW_EXECUTION_REPOSITORY: ${CORE_WORKFLOW_EXECUTION_REPOSITORY:-core.repositories.sqlalchemy_workflow_execution_repository.SQLAlchemyWorkflowExecutionRepository}
@@ -402,9 +489,22 @@ x-shared-env: &shared-api-worker-env
WORKFLOW_LOG_CLEANUP_ENABLED: ${WORKFLOW_LOG_CLEANUP_ENABLED:-false}
WORKFLOW_LOG_RETENTION_DAYS: ${WORKFLOW_LOG_RETENTION_DAYS:-30}
WORKFLOW_LOG_CLEANUP_BATCH_SIZE: ${WORKFLOW_LOG_CLEANUP_BATCH_SIZE:-100}
ALIYUN_SLS_ACCESS_KEY_ID: ${ALIYUN_SLS_ACCESS_KEY_ID:-}
ALIYUN_SLS_ACCESS_KEY_SECRET: ${ALIYUN_SLS_ACCESS_KEY_SECRET:-}
ALIYUN_SLS_ENDPOINT: ${ALIYUN_SLS_ENDPOINT:-}
ALIYUN_SLS_REGION: ${ALIYUN_SLS_REGION:-}
ALIYUN_SLS_PROJECT_NAME: ${ALIYUN_SLS_PROJECT_NAME:-}
ALIYUN_SLS_LOGSTORE_TTL: ${ALIYUN_SLS_LOGSTORE_TTL:-365}
LOGSTORE_DUAL_WRITE_ENABLED: ${LOGSTORE_DUAL_WRITE_ENABLED:-false}
LOGSTORE_DUAL_READ_ENABLED: ${LOGSTORE_DUAL_READ_ENABLED:-true}
LOGSTORE_ENABLE_PUT_GRAPH_FIELD: ${LOGSTORE_ENABLE_PUT_GRAPH_FIELD:-true}
HTTP_REQUEST_NODE_MAX_BINARY_SIZE: ${HTTP_REQUEST_NODE_MAX_BINARY_SIZE:-10485760}
HTTP_REQUEST_NODE_MAX_TEXT_SIZE: ${HTTP_REQUEST_NODE_MAX_TEXT_SIZE:-1048576}
HTTP_REQUEST_NODE_SSL_VERIFY: ${HTTP_REQUEST_NODE_SSL_VERIFY:-True}
HTTP_REQUEST_MAX_CONNECT_TIMEOUT: ${HTTP_REQUEST_MAX_CONNECT_TIMEOUT:-10}
HTTP_REQUEST_MAX_READ_TIMEOUT: ${HTTP_REQUEST_MAX_READ_TIMEOUT:-600}
HTTP_REQUEST_MAX_WRITE_TIMEOUT: ${HTTP_REQUEST_MAX_WRITE_TIMEOUT:-600}
WEBHOOK_REQUEST_BODY_MAX_SIZE: ${WEBHOOK_REQUEST_BODY_MAX_SIZE:-10485760}
RESPECT_XFORWARD_HEADERS_ENABLED: ${RESPECT_XFORWARD_HEADERS_ENABLED:-false}
SSRF_PROXY_HTTP_URL: ${SSRF_PROXY_HTTP_URL:-http://ssrf_proxy:3128}
SSRF_PROXY_HTTPS_URL: ${SSRF_PROXY_HTTPS_URL:-http://ssrf_proxy:3128}
@@ -415,6 +515,8 @@ x-shared-env: &shared-api-worker-env
TEXT_GENERATION_TIMEOUT_MS: ${TEXT_GENERATION_TIMEOUT_MS:-60000}
ALLOW_UNSAFE_DATA_SCHEME: ${ALLOW_UNSAFE_DATA_SCHEME:-false}
MAX_TREE_DEPTH: ${MAX_TREE_DEPTH:-50}
PGDATA: ${PGDATA:-/var/lib/postgresql/data/pgdata}
MYSQL_HOST_VOLUME: ${MYSQL_HOST_VOLUME:-./volumes/mysql/data}
POSTGRES_USER: ${POSTGRES_USER:-${DB_USERNAME}}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-${DB_PASSWORD}}
POSTGRES_DB: ${POSTGRES_DB:-${DB_DATABASE}}
@@ -469,9 +571,9 @@ x-shared-env: &shared-api-worker-env
NGINX_SSL_PORT: ${NGINX_SSL_PORT:-443}
NGINX_SSL_CERT_FILENAME: ${NGINX_SSL_CERT_FILENAME:-dify.crt}
NGINX_SSL_CERT_KEY_FILENAME: ${NGINX_SSL_CERT_KEY_FILENAME:-dify.key}
NGINX_SSL_PROTOCOLS: ${NGINX_SSL_PROTOCOLS:-TLSv1.1 TLSv1.2 TLSv1.3}
NGINX_SSL_PROTOCOLS: ${NGINX_SSL_PROTOCOLS:-TLSv1.2 TLSv1.3}
NGINX_WORKER_PROCESSES: ${NGINX_WORKER_PROCESSES:-auto}
NGINX_CLIENT_MAX_BODY_SIZE: ${NGINX_CLIENT_MAX_BODY_SIZE:-15M}
NGINX_CLIENT_MAX_BODY_SIZE: ${NGINX_CLIENT_MAX_BODY_SIZE:-100M}
NGINX_KEEPALIVE_TIMEOUT: ${NGINX_KEEPALIVE_TIMEOUT:-65}
NGINX_PROXY_READ_TIMEOUT: ${NGINX_PROXY_READ_TIMEOUT:-3600s}
NGINX_PROXY_SEND_TIMEOUT: ${NGINX_PROXY_SEND_TIMEOUT:-3600s}
@@ -515,11 +617,13 @@ x-shared-env: &shared-api-worker-env
ENDPOINT_URL_TEMPLATE: ${ENDPOINT_URL_TEMPLATE:-http://localhost/e/{hook_id}}
MARKETPLACE_ENABLED: ${MARKETPLACE_ENABLED:-true}
MARKETPLACE_API_URL: ${MARKETPLACE_API_URL:-https://marketplace.dify.ai}
FORCE_VERIFYING_SIGNATURE: ${FORCE_VERIFYING_SIGNATURE:-false}
FORCE_VERIFYING_SIGNATURE: ${FORCE_VERIFYING_SIGNATURE:-true}
ENFORCE_LANGGENIUS_PLUGIN_SIGNATURES: ${ENFORCE_LANGGENIUS_PLUGIN_SIGNATURES:-true}
PLUGIN_STDIO_BUFFER_SIZE: ${PLUGIN_STDIO_BUFFER_SIZE:-1024}
PLUGIN_STDIO_MAX_BUFFER_SIZE: ${PLUGIN_STDIO_MAX_BUFFER_SIZE:-5242880}
PLUGIN_PYTHON_ENV_INIT_TIMEOUT: ${PLUGIN_PYTHON_ENV_INIT_TIMEOUT:-120}
PLUGIN_MAX_EXECUTION_TIMEOUT: ${PLUGIN_MAX_EXECUTION_TIMEOUT:-600}
PLUGIN_DAEMON_TIMEOUT: ${PLUGIN_DAEMON_TIMEOUT:-600.0}
PIP_MIRROR_URL: ${PIP_MIRROR_URL:-}
PLUGIN_STORAGE_TYPE: ${PLUGIN_STORAGE_TYPE:-local}
PLUGIN_STORAGE_LOCAL_ROOT: ${PLUGIN_STORAGE_LOCAL_ROOT:-/app/storage}
@@ -568,21 +672,59 @@ x-shared-env: &shared-api-worker-env
QUEUE_MONITOR_THRESHOLD: ${QUEUE_MONITOR_THRESHOLD:-200}
QUEUE_MONITOR_ALERT_EMAILS: ${QUEUE_MONITOR_ALERT_EMAILS:-}
QUEUE_MONITOR_INTERVAL: ${QUEUE_MONITOR_INTERVAL:-30}
SWAGGER_UI_ENABLED: ${SWAGGER_UI_ENABLED:-true}
SWAGGER_UI_ENABLED: ${SWAGGER_UI_ENABLED:-false}
SWAGGER_UI_PATH: ${SWAGGER_UI_PATH:-/swagger-ui.html}
ENABLE_CLEAN_EMBEDDING_CACHE_TASK: ${ENABLE_CLEAN_EMBEDDING_CACHE_TASK:-true}
DSL_EXPORT_ENCRYPT_DATASET_ID: ${DSL_EXPORT_ENCRYPT_DATASET_ID:-true}
DATASET_MAX_SEGMENTS_PER_REQUEST: ${DATASET_MAX_SEGMENTS_PER_REQUEST:-0}
ENABLE_CLEAN_EMBEDDING_CACHE_TASK: ${ENABLE_CLEAN_EMBEDDING_CACHE_TASK:-false}
ENABLE_CLEAN_UNUSED_DATASETS_TASK: ${ENABLE_CLEAN_UNUSED_DATASETS_TASK:-true}
ENABLE_CREATE_TIDB_SERVERLESS_TASK: ${ENABLE_CREATE_TIDB_SERVERLESS_TASK:-true}
ENABLE_UPDATE_TIDB_SERVERLESS_STATUS_TASK: ${ENABLE_UPDATE_TIDB_SERVERLESS_STATUS_TASK:-true}
ENABLE_CLEAN_MESSAGES: ${ENABLE_CLEAN_MESSAGES:-true}
ENABLE_MAIL_CLEAN_DOCUMENT_NOTIFY_TASK: ${ENABLE_MAIL_CLEAN_DOCUMENT_NOTIFY_TASK:-true}
ENABLE_DATASETS_QUEUE_MONITOR: ${ENABLE_DATASETS_QUEUE_MONITOR:-true}
ENABLE_CREATE_TIDB_SERVERLESS_TASK: ${ENABLE_CREATE_TIDB_SERVERLESS_TASK:-false}
ENABLE_UPDATE_TIDB_SERVERLESS_STATUS_TASK: ${ENABLE_UPDATE_TIDB_SERVERLESS_STATUS_TASK:-false}
ENABLE_CLEAN_MESSAGES: ${ENABLE_CLEAN_MESSAGES:-false}
ENABLE_WORKFLOW_RUN_CLEANUP_TASK: ${ENABLE_WORKFLOW_RUN_CLEANUP_TASK:-false}
ENABLE_MAIL_CLEAN_DOCUMENT_NOTIFY_TASK: ${ENABLE_MAIL_CLEAN_DOCUMENT_NOTIFY_TASK:-false}
ENABLE_DATASETS_QUEUE_MONITOR: ${ENABLE_DATASETS_QUEUE_MONITOR:-false}
ENABLE_CHECK_UPGRADABLE_PLUGIN_TASK: ${ENABLE_CHECK_UPGRADABLE_PLUGIN_TASK:-true}
ENABLE_WORKFLOW_SCHEDULE_POLLER_TASK: ${ENABLE_WORKFLOW_SCHEDULE_POLLER_TASK:-true}
WORKFLOW_SCHEDULE_POLLER_INTERVAL: ${WORKFLOW_SCHEDULE_POLLER_INTERVAL:-1}
WORKFLOW_SCHEDULE_POLLER_BATCH_SIZE: ${WORKFLOW_SCHEDULE_POLLER_BATCH_SIZE:-100}
WORKFLOW_SCHEDULE_MAX_DISPATCH_PER_TICK: ${WORKFLOW_SCHEDULE_MAX_DISPATCH_PER_TICK:-0}
TENANT_ISOLATED_TASK_CONCURRENCY: ${TENANT_ISOLATED_TASK_CONCURRENCY:-1}
ANNOTATION_IMPORT_FILE_SIZE_LIMIT: ${ANNOTATION_IMPORT_FILE_SIZE_LIMIT:-2}
ANNOTATION_IMPORT_MAX_RECORDS: ${ANNOTATION_IMPORT_MAX_RECORDS:-10000}
ANNOTATION_IMPORT_MIN_RECORDS: ${ANNOTATION_IMPORT_MIN_RECORDS:-1}
ANNOTATION_IMPORT_RATE_LIMIT_PER_MINUTE: ${ANNOTATION_IMPORT_RATE_LIMIT_PER_MINUTE:-5}
ANNOTATION_IMPORT_RATE_LIMIT_PER_HOUR: ${ANNOTATION_IMPORT_RATE_LIMIT_PER_HOUR:-20}
ANNOTATION_IMPORT_MAX_CONCURRENT: ${ANNOTATION_IMPORT_MAX_CONCURRENT:-5}
AMPLITUDE_API_KEY: ${AMPLITUDE_API_KEY:-}
SANDBOX_EXPIRED_RECORDS_CLEAN_GRACEFUL_PERIOD: ${SANDBOX_EXPIRED_RECORDS_CLEAN_GRACEFUL_PERIOD:-21}
SANDBOX_EXPIRED_RECORDS_CLEAN_BATCH_SIZE: ${SANDBOX_EXPIRED_RECORDS_CLEAN_BATCH_SIZE:-1000}
SANDBOX_EXPIRED_RECORDS_RETENTION_DAYS: ${SANDBOX_EXPIRED_RECORDS_RETENTION_DAYS:-30}
SANDBOX_EXPIRED_RECORDS_CLEAN_TASK_LOCK_TTL: ${SANDBOX_EXPIRED_RECORDS_CLEAN_TASK_LOCK_TTL:-90000}
services:
# Init container to fix permissions
init_permissions:
image: busybox:latest
command:
- sh
- -c
- |
FLAG_FILE="/app/api/storage/.init_permissions"
if [ -f "$${FLAG_FILE}" ]; then
echo "Permissions already initialized. Exiting."
exit 0
fi
echo "Initializing permissions for /app/api/storage"
chown -R 1001:1001 /app/api/storage && touch "$${FLAG_FILE}"
echo "Permissions initialized. Exiting."
volumes:
- ./volumes/app/storage:/app/api/storage
restart: "no"
# API service
api:
image: ccr.ccs.tencentyun.com/yfgaia/dify-plus-api:1.8.1.fix
image: ccr.ccs.tencentyun.com/yfgaia/dify-plus-api:1.11.4
restart: always
environment:
# Use the shared environment variables.
@@ -595,12 +737,27 @@ services:
PLUGIN_REMOTE_INSTALL_HOST: ${EXPOSE_PLUGIN_DEBUGGING_HOST:-localhost}
PLUGIN_REMOTE_INSTALL_PORT: ${EXPOSE_PLUGIN_DEBUGGING_PORT:-5003}
PLUGIN_MAX_PACKAGE_SIZE: ${PLUGIN_MAX_PACKAGE_SIZE:-52428800}
PLUGIN_DAEMON_TIMEOUT: ${PLUGIN_DAEMON_TIMEOUT:-600.0}
INNER_API_KEY_FOR_PLUGIN: ${PLUGIN_DIFY_INNER_API_KEY:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1}
FULL_CODE_EXECUTION_ENDPOINT: ${FULL_CODE_EXECUTION_ENDPOINT:-http://sandbox-full:8194}
ALLOW_REGISTER: ${ALLOW_REGISTER:-True}
depends_on:
- db
- redis
init_permissions:
condition: service_completed_successfully
db_postgres:
condition: service_healthy
required: false
db_mysql:
condition: service_healthy
required: false
oceanbase:
condition: service_healthy
required: false
seekdb:
condition: service_healthy
required: false
redis:
condition: service_started
volumes:
# Mount the storage directory to the container, for storing user files.
- ./volumes/app/storage:/app/api/storage
@@ -611,7 +768,7 @@ services:
# worker service
# The Celery worker for processing the queue.
worker:
image: ccr.ccs.tencentyun.com/yfgaia/dify-plus-api:1.8.1.fix
image: ccr.ccs.tencentyun.com/yfgaia/dify-plus-api:1.11.4
restart: always
environment:
# Use the shared environment variables.
@@ -624,8 +781,22 @@ services:
PLUGIN_MAX_PACKAGE_SIZE: ${PLUGIN_MAX_PACKAGE_SIZE:-52428800}
INNER_API_KEY_FOR_PLUGIN: ${PLUGIN_DIFY_INNER_API_KEY:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1}
depends_on:
- db
- redis
init_permissions:
condition: service_completed_successfully
db_postgres:
condition: service_healthy
required: false
db_mysql:
condition: service_healthy
required: false
oceanbase:
condition: service_healthy
required: false
seekdb:
condition: service_healthy
required: false
redis:
condition: service_started
volumes:
# Mount the storage directory to the container, for storing user files.
- ./volumes/app/storage:/app/api/storage
@@ -636,20 +807,21 @@ services:
# worker-gaia service
# The Celery worker-gaia for processing the queue.
worker-gaia:
image: ccr.ccs.tencentyun.com/yfgaia/dify-plus-api:1.8.1.fix
image: ccr.ccs.tencentyun.com/yfgaia/dify-plus-api:1.11.4
restart: always
environment:
# Use the shared environment variables.
<<: *shared-api-worker-env
# Startup mode, 'worker-gaia' starts the Celery worker-gaia for processing the queue.
MODE: worker-gaia
MODE: worker
SENTRY_DSN: ${API_SENTRY_DSN:-}
CELERY_QUEUES: ${CELERY_QUEUES:-extend_high,extend_low}
SENTRY_TRACES_SAMPLE_RATE: ${API_SENTRY_TRACES_SAMPLE_RATE:-1.0}
SENTRY_PROFILES_SAMPLE_RATE: ${API_SENTRY_PROFILES_SAMPLE_RATE:-1.0}
PLUGIN_MAX_PACKAGE_SIZE: ${PLUGIN_MAX_PACKAGE_SIZE:-52428800}
INNER_API_KEY_FOR_PLUGIN: ${PLUGIN_DIFY_INNER_API_KEY:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1}
depends_on:
- db
- db_postgres
- redis
volumes:
# Mount the storage directory to the container, for storing user files.
@@ -661,20 +833,21 @@ services:
# worker-dataset service
# The Celery worker-dataset for processing the queue.
worker-dataset:
image: ccr.ccs.tencentyun.com/yfgaia/dify-plus-api:1.8.1.fix
image: ccr.ccs.tencentyun.com/yfgaia/dify-plus-api:1.11.4
restart: always
environment:
# Use the shared environment variables.
<<: *shared-api-worker-env
# Startup mode, 'worker-dataset' starts the Celery worker-dataset for processing the queue.
MODE: worker-dataset
MODE: worker
SENTRY_DSN: ${API_SENTRY_DSN:-}
CELERY_QUEUES: ${CELERY_QUEUES:-dataset,priority_dataset}
SENTRY_TRACES_SAMPLE_RATE: ${API_SENTRY_TRACES_SAMPLE_RATE:-1.0}
SENTRY_PROFILES_SAMPLE_RATE: ${API_SENTRY_PROFILES_SAMPLE_RATE:-1.0}
PLUGIN_MAX_PACKAGE_SIZE: ${PLUGIN_MAX_PACKAGE_SIZE:-52428800}
INNER_API_KEY_FOR_PLUGIN: ${PLUGIN_DIFY_INNER_API_KEY:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1}
depends_on:
- db
- db_postgres
- redis
volumes:
# Mount the storage directory to the container, for storing user files.
@@ -683,34 +856,40 @@ services:
- ssrf_proxy_network
- default
# beat service
# The Celery worker for schedule tasks.
beat:
image: ccr.ccs.tencentyun.com/yfgaia/dify-plus-api:1.8.1.fix
# worker_beat service
# Celery beat for scheduling periodic tasks.
worker_beat:
image: ccr.ccs.tencentyun.com/yfgaia/dify-plus-api:1.11.4
restart: always
environment:
# Use the shared environment variables.
<<: *shared-api-worker-env
# Startup mode, 'worker' starts the Celery worker for processing the queue.
# Startup mode, 'worker_beat' starts the Celery beat for scheduling periodic tasks.
MODE: beat
SENTRY_DSN: ${API_SENTRY_DSN:-}
SENTRY_TRACES_SAMPLE_RATE: ${API_SENTRY_TRACES_SAMPLE_RATE:-1.0}
SENTRY_PROFILES_SAMPLE_RATE: ${API_SENTRY_PROFILES_SAMPLE_RATE:-1.0}
PLUGIN_MAX_PACKAGE_SIZE: ${PLUGIN_MAX_PACKAGE_SIZE:-52428800}
INNER_API_KEY_FOR_PLUGIN: ${PLUGIN_DIFY_INNER_API_KEY:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1}
depends_on:
- db
- redis
volumes:
# Mount the storage directory to the container, for storing user files.
- ./volumes/app/storage:/app/api/storage
init_permissions:
condition: service_completed_successfully
db_postgres:
condition: service_healthy
required: false
db_mysql:
condition: service_healthy
required: false
oceanbase:
condition: service_healthy
required: false
seekdb:
condition: service_healthy
required: false
redis:
condition: service_started
networks:
- ssrf_proxy_network
- default
# Frontend web application.
web:
image: ccr.ccs.tencentyun.com/yfgaia/dify-plus-web:1.8.1.fix.3
image: ccr.ccs.tencentyun.com/yfgaia/dify-plus-web:1.11.4
restart: always
environment:
CONSOLE_API_URL: ${CONSOLE_API_URL:-}
@@ -736,7 +915,7 @@ services:
ENABLE_WEBSITE_WATERCRAWL: ${ENABLE_WEBSITE_WATERCRAWL:-true}
# The postgres database.
db:
db_postgres:
image: ccr.ccs.tencentyun.com/yfgaia/postgres:15-alpine
restart: always
environment:
@@ -750,6 +929,8 @@ services:
-c 'work_mem=${POSTGRES_WORK_MEM:-4MB}'
-c 'maintenance_work_mem=${POSTGRES_MAINTENANCE_WORK_MEM:-64MB}'
-c 'effective_cache_size=${POSTGRES_EFFECTIVE_CACHE_SIZE:-4096MB}'
-c 'statement_timeout=${POSTGRES_STATEMENT_TIMEOUT:-0}'
-c 'idle_in_transaction_session_timeout=${POSTGRES_IDLE_IN_TRANSACTION_SESSION_TIMEOUT:-0}'
volumes:
- ./volumes/db/data:/var/lib/postgresql/data
healthcheck:
@@ -758,11 +939,11 @@ services:
"CMD",
"pg_isready",
"-h",
"db",
"db_postgres",
"-U",
"${POSTGRES_USER:-postgres}",
"${DB_USERNAME:-postgres}",
"-d",
"${POSTGRES_DB:-dify}",
"${DB_DATABASE:-dify}",
]
interval: 1s
timeout: 3s
@@ -816,7 +997,7 @@ services:
# plugin daemon
plugin_daemon:
image: ccr.ccs.tencentyun.com/yfgaia/dify-plugin-daemon:0.2.0-local
image: ccr.ccs.tencentyun.com/yfgaia/dify-plugin-daemon:0.5.2-local
restart: always
environment:
# Use the shared environment variables.
@@ -831,7 +1012,7 @@ services:
PLUGIN_REMOTE_INSTALLING_HOST: ${PLUGIN_DEBUGGING_HOST:-0.0.0.0}
PLUGIN_REMOTE_INSTALLING_PORT: ${PLUGIN_DEBUGGING_PORT:-5003}
PLUGIN_WORKING_PATH: ${PLUGIN_WORKING_PATH:-/app/storage/cwd}
FORCE_VERIFYING_SIGNATURE: ${FORCE_VERIFYING_SIGNATURE:-false}
FORCE_VERIFYING_SIGNATURE: ${FORCE_VERIFYING_SIGNATURE:-true}
PYTHON_ENV_INIT_TIMEOUT: ${PLUGIN_PYTHON_ENV_INIT_TIMEOUT:-120}
PLUGIN_MAX_EXECUTION_TIMEOUT: ${PLUGIN_MAX_EXECUTION_TIMEOUT:-600}
PLUGIN_STDIO_BUFFER_SIZE: ${PLUGIN_STDIO_BUFFER_SIZE:-1024}
@@ -872,8 +1053,18 @@ services:
volumes:
- ./volumes/plugin_daemon:/app/storage
depends_on:
db:
db_postgres:
condition: service_healthy
required: false
db_mysql:
condition: service_healthy
required: false
oceanbase:
condition: service_healthy
required: false
seekdb:
condition: service_healthy
required: false
# ssrf_proxy server
# for more information, please refer to
@@ -941,9 +1132,9 @@ services:
# and modify the env vars below in .env if HTTPS_ENABLED is true.
NGINX_SSL_CERT_FILENAME: ${NGINX_SSL_CERT_FILENAME:-dify.crt}
NGINX_SSL_CERT_KEY_FILENAME: ${NGINX_SSL_CERT_KEY_FILENAME:-dify.key}
NGINX_SSL_PROTOCOLS: ${NGINX_SSL_PROTOCOLS:-TLSv1.1 TLSv1.2 TLSv1.3}
NGINX_SSL_PROTOCOLS: ${NGINX_SSL_PROTOCOLS:-TLSv1.2 TLSv1.3}
NGINX_WORKER_PROCESSES: ${NGINX_WORKER_PROCESSES:-auto}
NGINX_CLIENT_MAX_BODY_SIZE: ${NGINX_CLIENT_MAX_BODY_SIZE:-15M}
NGINX_CLIENT_MAX_BODY_SIZE: ${NGINX_CLIENT_MAX_BODY_SIZE:-100M}
NGINX_KEEPALIVE_TIMEOUT: ${NGINX_KEEPALIVE_TIMEOUT:-65}
NGINX_PROXY_READ_TIMEOUT: ${NGINX_PROXY_READ_TIMEOUT:-3600s}
NGINX_PROXY_SEND_TIMEOUT: ${NGINX_PROXY_SEND_TIMEOUT:-3600s}
@@ -979,6 +1170,10 @@ services:
AUTHENTICATION_APIKEY_USERS: ${WEAVIATE_AUTHENTICATION_APIKEY_USERS:-hello@dify.ai}
AUTHORIZATION_ADMINLIST_ENABLED: ${WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED:-true}
AUTHORIZATION_ADMINLIST_USERS: ${WEAVIATE_AUTHORIZATION_ADMINLIST_USERS:-hello@dify.ai}
DISABLE_TELEMETRY: ${WEAVIATE_DISABLE_TELEMETRY:-false}
ENABLE_TOKENIZER_GSE: ${WEAVIATE_ENABLE_TOKENIZER_GSE:-false}
ENABLE_TOKENIZER_KAGOME_JA: ${WEAVIATE_ENABLE_TOKENIZER_KAGOME_JA:-false}
ENABLE_TOKENIZER_KAGOME_KR: ${WEAVIATE_ENABLE_TOKENIZER_KAGOME_KR:-false}
# Qdrant vector store.
# (if used, you need to set VECTOR_STORE to qdrant in the api & worker service.)
@@ -1375,7 +1570,7 @@ services:
# Extend - admin-web
admin-web:
image: ccr.ccs.tencentyun.com/yfgaia/dify-plus-admin-web:1.8.1.fix
image: ccr.ccs.tencentyun.com/yfgaia/dify-plus-admin-web:1.11.4
restart: always
ports:
- '8081:8081'
@@ -1387,7 +1582,7 @@ services:
# Extend - admin-server
admin-server:
image: ccr.ccs.tencentyun.com/yfgaia/dify-plus-admin-server:1.8.1.fix
image: ccr.ccs.tencentyun.com/yfgaia/dify-plus-admin-server:1.11.4
restart: always
environment:
# JWT signing key must match API's SECRET_KEY for token compatibility
@@ -1396,12 +1591,12 @@ services:
ports:
- '8888:8888'
depends_on:
db:
db_postgres:
condition: service_healthy
redis:
condition: service_healthy
links:
- db
- db_postgres
- redis
networks:
- ssrf_proxy_network
@@ -1,6 +1,5 @@
'use client'
import type { CreateAppModalProps } from '@/app/components/explore/create-app-modal'
import type { App } from '@/models/explore'
import { useDebounceFn } from 'ahooks'
import { useQueryState } from 'nuqs'
@@ -10,7 +9,6 @@ import { useCallback, useMemo, useState } from 'react'
import { useTranslation } from 'react-i18next'
import Loading from '@/app/components/base/loading'
import Category from '@/app/components/explore/category'
import { fetchAppDetail } from '@/service/explore'
import { useInstalledAppList } from '@/service/use-explore'
import { cn } from '@/utils/classnames'
import s from './style.module.css'
@@ -65,7 +63,7 @@ const Apps = ({
const filteredListExtend = useMemo(() => {
if (!data)
return []
let result = data.allList
// Apply category filter
@@ -87,7 +85,17 @@ const Apps = ({
)
}
return result
// Deduplicate by app_id (same app may appear multiple times due to multiple tags)
const seenAppIds = new Set<string>()
const deduplicatedResult: App[] = []
for (const item of result) {
if (!seenAppIds.has(item.app_id)) {
seenAppIds.add(item.app_id)
deduplicatedResult.push(item)
}
}
return deduplicatedResult
}, [data, currCategory, allCategoriesEn, tagFilterValue, keywordsValue])
// Extend: stop Filtered list with search and tag filter
@@ -120,11 +128,6 @@ const Apps = ({
'flex h-full flex-col border-l-[0.5px] border-divider-regular',
)}
>
<div className="shrink-0 px-12 pt-6">
<div className={`mb-1 ${s.textGradient} text-xl font-semibold`}>{t('apps.title', { ns: 'explore' })}</div>
<div className="text-sm text-text-tertiary">{t('apps.description', { ns: 'explore' })}</div>
</div>
<div className={cn(
'mt-6 flex items-center justify-between px-12',
)}
@@ -154,7 +157,7 @@ const Apps = ({
>
{filteredListExtend.map(app => (
<AppCard
key={app.app_id}
key={app.installed_id}
isExplore
app={app}
// Extend: start Create new conversation for installed app
+1 -14
View File
@@ -117,15 +117,11 @@ const Apps = ({
return result
}, [data, currCategory, allCategoriesEn, tagFilterValue, keywordsValue])
// Extend: stop Filtered list with search and tag filter
const handleTagsChange = (value: string[]) => {
setTagFilterValue(value)
}
const handleKeywordsChange = (value: string) => {
setKeywordsValue(value)
}
// Extend: stop Filtered list with search and tag filter
const [currApp, setCurrApp] = React.useState<App | null>(null)
const [isShowCreateModal, setIsShowCreateModal] = React.useState(false)
@@ -227,15 +223,6 @@ const Apps = ({
{/* Extend: stop Explore Add Search */}
</div>
<div className="mt-2 px-12">
<Category
list={categories}
value={currCategory}
onChange={setCurrCategory}
allCategoriesEn={allCategoriesEn}
/>
</div>
<div className={cn(
'relative mt-4 flex flex-1 shrink-0 grow flex-col overflow-auto pb-6',
)}
+1 -1
View File
@@ -122,7 +122,7 @@ const SideBar: FC<IExploreSideBarProps> = ({
style={isDiscoverySelected ? { boxShadow: '0px 1px 2px rgba(16, 24, 40, 0.05)' } : {}}
>
{isDiscoverySelected ? <SelectedDiscoveryIcon /> : <DiscoveryIcon />}
{!isMobile && <div className='text-sm'>{t('sidebar.discovery', { ns: 'explore' })}</div>}
{!isMobile && <div className='text-sm'>{t('sidebar.discovery', { ns: 'extend' })}</div>}
</Link>
</div>
)}
@@ -22,7 +22,7 @@ const ExploreNav = ({
return (
<Link
href="/explore/apps"
href="/explore/apps-center-extend"
className={cn(className, 'group', activated && 'bg-components-main-nav-nav-button-bg-active shadow-md', activated ? 'text-components-main-nav-nav-button-text-active' : 'text-components-main-nav-nav-button-text hover:bg-components-main-nav-nav-button-bg-hover')}
>
{
@@ -74,6 +74,7 @@ export type IMainProps = {
const TextGeneration: FC<IMainProps> = ({
isInstalledApp = false,
installedAppInfo,
isWorkflow = false,
}) => {
const { notify } = Toast
Binary file not shown.
Binary file not shown.
+93
View File
@@ -0,0 +1,93 @@
Copyright 2022 The Instrument Serif Project Authors (https://github.com/Instrument/instrument-serif)
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
https://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
+17 -6
View File
@@ -1,7 +1,8 @@
import type { Viewport } from 'next'
import { Provider as JotaiProvider } from 'jotai'
import { ThemeProvider } from 'next-themes'
import { Instrument_Serif } from 'next/font/google'
// extend: dockefile 构建访问不到google,改成本地
import localFont from 'next/font/local'
import { NuqsAdapter } from 'nuqs/adapters/next/app'
import GlobalPublicStoreProvider from '@/context/global-public-context'
import { TanstackQueryInitializer } from '@/context/query-client'
@@ -25,13 +26,23 @@ export const viewport: Viewport = {
viewportFit: 'cover',
userScalable: false,
}
const instrumentSerif = Instrument_Serif({
weight: ['400'],
style: ['normal', 'italic'],
subsets: ['latin'],
// extend: start dockefile 构建访问不到google,改成本地
const instrumentSerif = localFont({
src: [
{
path: './fonts/InstrumentSerif-Regular.ttf',
weight: '400',
style: 'normal',
},
{
path: './fonts/InstrumentSerif-Italic.ttf',
weight: '400',
style: 'italic',
},
],
variable: '--font-instrument-serif',
})
// extend: stop dockefile 构建访问不到google,改成本地
const LocaleLayout = async ({
children,
+10 -2
View File
@@ -1,4 +1,5 @@
{
"aiDraw.title": "KI-Zeichnung",
"aiVideo.title": "KI-Video",
"aiVideo.translate": "Video übersetzen",
"apiKeyModal.accumulatedLimit": "Kumulierte Nutzung",
@@ -18,6 +19,7 @@
"app.confirmSyncAppContent": "App zur Entdeckungsseite synchronisieren und zugehörige Tags erstellen",
"app.syncAppOk": "Synchronisierung erfolgreich",
"app.syncToAppTemplate": "Zur App-Vorlage synchronisieren",
"appCard.newConversation": "Neue Unterhaltung",
"appCenter.description": "Hier ist der App-Center, wo Sie kategorisierte Apps finden und nutzen können",
"appMenus.userOverview": "Persönliche Überwachung",
"batchWorkflow.batchJobs": "{{num}} Stapelaufgaben",
@@ -37,6 +39,7 @@
"batchWorkflow.errorOccurred": "Fehler aufgetreten",
"batchWorkflow.failed": "Fehlgeschlagen",
"batchWorkflow.initializing": "Stapelaufgabe wird initialisiert...",
"batchWorkflow.noBatchTasks": "Keine Stapelverarbeitungsaufgaben",
"batchWorkflow.pending": "Ausstehend",
"batchWorkflow.pleaseWait": "Bitte warten",
"batchWorkflow.processed": "{{processed}}/{{total}} Zeilen verarbeitet",
@@ -63,6 +66,8 @@
"billingList.link": "Link",
"billingList.open": "Erweitern",
"billingList.router": "Router",
"configuration.clearContext": "Kontext gelöscht",
"configuration.restoreContext": "Klicken, um Kontext wiederherzustellen",
"fileUploader.fileUpload": "Datei-Upload",
"fileUploader.pasteFileLink": "Datei-Link einfügen",
"fileUploader.pasteFileLinkInputPlaceholder": "Datei-Link hier einfügen",
@@ -73,5 +78,8 @@
"fileUploader.uploadFromComputerUploadError": "Datei-Upload fehlgeschlagen, bitte erneut hochladen.",
"modelSyncWorkspaceCustomize.workspacePlaceholder": "Arbeitsbereich auswählen",
"sidebar.appCenter": "App-Center",
"sidebar.withDingTalk": "Anmelden mit DingTalk"
}
"sidebar.discovery": "Entdecken",
"sidebar.withDingTalk": "Anmelden mit DingTalk",
"user.credit": "Guthaben",
"user.used": "Verwendet:"
}
+8 -2
View File
@@ -1,4 +1,5 @@
{
"aiDraw.title": "AI Drawing",
"aiVideo.title": "AI Video",
"aiVideo.translate": "Video Translation",
"apiKeyModal.accumulatedLimit": "Cumulative Usage Limit",
@@ -65,6 +66,8 @@
"billingList.link": "Link",
"billingList.open": "Expand",
"billingList.router": "Route",
"configuration.clearContext": "Context cleared",
"configuration.restoreContext": "Click to restore context",
"fileUploader.fileUpload": "File upload",
"fileUploader.pasteFileLink": "Paste file link",
"fileUploader.pasteFileLinkInputPlaceholder": "Paste file link here",
@@ -75,5 +78,8 @@
"fileUploader.uploadFromComputerUploadError": "File upload failed, please upload again.",
"modelSyncWorkspaceCustomize.workspacePlaceholder": "Select workspace",
"sidebar.appCenter": "App Center",
"sidebar.withDingTalk": "Log in with DingTalk"
}
"sidebar.discovery": "Discovery",
"sidebar.withDingTalk": "Log in with DingTalk",
"user.credit": "Credit",
"user.used": "Used:"
}
+10 -2
View File
@@ -1,4 +1,5 @@
{
"aiDraw.title": "Dibujo IA",
"aiVideo.title": "Video de IA",
"aiVideo.translate": "Traducción de video",
"apiKeyModal.accumulatedLimit": "Límite de uso acumulado",
@@ -18,6 +19,7 @@
"app.confirmSyncAppContent": "Sincronizar aplicación a la interfaz de exploración y crear etiquetas relacionadas",
"app.syncAppOk": "Sincronización exitosa",
"app.syncToAppTemplate": "Sincronizar a plantilla de aplicación",
"appCard.newConversation": "Nueva conversación",
"appCenter.description": "A continuación se encuentra el centro de aplicaciones, donde puedes ver aplicaciones categorizadas y utilizarlas",
"appMenus.userOverview": "Monitoreo personal",
"batchWorkflow.batchJobs": "{{num}} tareas por lotes",
@@ -37,6 +39,7 @@
"batchWorkflow.errorOccurred": "Ocurrió un error",
"batchWorkflow.failed": "Fallido",
"batchWorkflow.initializing": "Inicializando tarea por lotes...",
"batchWorkflow.noBatchTasks": "No hay tareas de procesamiento por lotes",
"batchWorkflow.pending": "Pendiente",
"batchWorkflow.pleaseWait": "Por favor espere",
"batchWorkflow.processed": "Procesadas {{processed}}/{{total}} filas",
@@ -63,6 +66,8 @@
"billingList.link": "Enlace",
"billingList.open": "Expandir",
"billingList.router": "Enrutador",
"configuration.clearContext": "Contexto borrado",
"configuration.restoreContext": "Haga clic para restaurar el contexto",
"fileUploader.fileUpload": "Carga de archivo",
"fileUploader.pasteFileLink": "Pegar enlace de archivo",
"fileUploader.pasteFileLinkInputPlaceholder": "Pegue el enlace del archivo aquí",
@@ -73,5 +78,8 @@
"fileUploader.uploadFromComputerUploadError": "Error al cargar el archivo, por favor vuelva a cargar.",
"modelSyncWorkspaceCustomize.workspacePlaceholder": "Seleccionar espacio de trabajo",
"sidebar.appCenter": "Centro de aplicaciones",
"sidebar.withDingTalk": "Iniciar sesión con DingTalk"
}
"sidebar.discovery": "Descubrimiento",
"sidebar.withDingTalk": "Iniciar sesión con DingTalk",
"user.credit": "Crédito",
"user.used": "Usado:"
}
+10 -2
View File
@@ -1,4 +1,5 @@
{
"aiDraw.title": "نقاشی AI",
"aiVideo.title": "ویدیوی هوش مصنوعی",
"aiVideo.translate": "ترجمه ویدیو",
"apiKeyModal.accumulatedLimit": "سهمیه استفاده تجمعی",
@@ -18,6 +19,7 @@
"app.confirmSyncAppContent": "همگام‌سازی برنامه به صفحه کشف و ایجاد برچسب‌های مرتبط",
"app.syncAppOk": "همگام‌سازی موفقیت‌آمیز بود",
"app.syncToAppTemplate": "همگام‌سازی به قالب برنامه",
"appCard.newConversation": "مکالمه جدید",
"appCenter.description": "این مرکز برنامه‌هاست، جایی که می‌توانید برنامه‌های دسته‌بندی شده را مشاهده و استفاده کنید",
"appMenus.userOverview": "نظارت شخصی",
"batchWorkflow.batchJobs": "{{num}} وظیفه دسته‌ای",
@@ -37,6 +39,7 @@
"batchWorkflow.errorOccurred": "خطا رخ داد",
"batchWorkflow.failed": "شکست خورد",
"batchWorkflow.initializing": "در حال راه‌اندازی وظیفه دسته‌ای...",
"batchWorkflow.noBatchTasks": "هیچ کار پردازش دسته‌ای وجود ندارد",
"batchWorkflow.pending": "در انتظار پردازش",
"batchWorkflow.pleaseWait": "لطفاً منتظر بمانید",
"batchWorkflow.processed": "{{processed}}/{{total}} ردیف پردازش شد",
@@ -63,6 +66,8 @@
"billingList.link": "پیوند",
"billingList.open": "باز کردن",
"billingList.router": "مسیریاب",
"configuration.clearContext": "زمینه پاک شد",
"configuration.restoreContext": "برای بازیابی زمینه کلیک کنید",
"fileUploader.fileUpload": "بارگذاری فایل",
"fileUploader.pasteFileLink": "چسباندن لینک فایل",
"fileUploader.pasteFileLinkInputPlaceholder": "لینک فایل را در اینجا بچسبانید",
@@ -73,5 +78,8 @@
"fileUploader.uploadFromComputerUploadError": "بارگذاری فایل شکست خورد، لطفاً مجدداً بارگذاری کنید.",
"modelSyncWorkspaceCustomize.workspacePlaceholder": "انتخاب فضای کاری",
"sidebar.appCenter": "مرکز برنامه‌ها",
"sidebar.withDingTalk": "ورود با DingTalk"
}
"sidebar.discovery": "کشف",
"sidebar.withDingTalk": "ورود با DingTalk",
"user.credit": "اعتبار",
"user.used": "استفاده شده:"
}
+10 -2
View File
@@ -1,4 +1,5 @@
{
"aiDraw.title": "Dessin IA",
"aiVideo.title": "Vidéo IA",
"aiVideo.translate": "Traduction vidéo",
"apiKeyModal.accumulatedLimit": "Quota d'utilisation cumulé",
@@ -18,6 +19,7 @@
"app.confirmSyncAppContent": "Synchroniser l'application avec l'interface de découverte et créer des étiquettes associées",
"app.syncAppOk": "Synchronisation réussie",
"app.syncToAppTemplate": "Synchroniser avec le modèle d'application",
"appCard.newConversation": "Nouvelle conversation",
"appCenter.description": "Voici le centre d'applications, où vous pouvez voir des applications classées et les utiliser.",
"appMenus.userOverview": "Surveillance personnelle",
"batchWorkflow.batchJobs": "{{num}} tâches par lots",
@@ -37,6 +39,7 @@
"batchWorkflow.errorOccurred": "Une erreur s'est produite",
"batchWorkflow.failed": "Échoué",
"batchWorkflow.initializing": "Initialisation de la tâche par lots...",
"batchWorkflow.noBatchTasks": "Aucune tâche de traitement par lots",
"batchWorkflow.pending": "En attente",
"batchWorkflow.pleaseWait": "Veuillez patienter",
"batchWorkflow.processed": "{{processed}}/{{total}} lignes traitées",
@@ -63,6 +66,8 @@
"billingList.link": "Lien",
"billingList.open": "Développer",
"billingList.router": "Routeur",
"configuration.clearContext": "Contexte effacé",
"configuration.restoreContext": "Cliquez pour restaurer le contexte",
"fileUploader.fileUpload": "Téléchargement de fichier",
"fileUploader.pasteFileLink": "Coller le lien du fichier",
"fileUploader.pasteFileLinkInputPlaceholder": "Collez le lien du fichier ici",
@@ -73,5 +78,8 @@
"fileUploader.uploadFromComputerUploadError": "Échec du téléchargement du fichier, veuillez réessayer.",
"modelSyncWorkspaceCustomize.workspacePlaceholder": "Sélectionner un espace de travail",
"sidebar.appCenter": "Centre d'applications",
"sidebar.withDingTalk": "Connexion avec DingTalk"
}
"sidebar.discovery": "Découverte",
"sidebar.withDingTalk": "Connexion avec DingTalk",
"user.credit": "Crédit",
"user.used": "Utilisé:"
}
+10 -2
View File
@@ -1,4 +1,5 @@
{
"aiDraw.title": "AI ड्राइंग",
"aiVideo.title": "AI वीडियो",
"aiVideo.translate": "वीडियो अनुवाद",
"apiKeyModal.accumulatedLimit": "संचयी उपयोग सीमा",
@@ -18,6 +19,7 @@
"app.confirmSyncAppContent": "खोज इंटरफ़ेस पर ऐप सिंक्रोनाइज़ करें और संबंधित टैग बनाएं",
"app.syncAppOk": "सिंक्रोनाइज़ सफल",
"app.syncToAppTemplate": "ऐप टेम्पलेट में सिंक्रोनाइज़ करें",
"appCard.newConversation": "नई बातचीत",
"appCenter.description": "यह ऐप केंद्र है, जहां आप श्रेणीबद्ध ऐप्स देख और उपयोग कर सकते हैं",
"appMenus.userOverview": "व्यक्तिगत निगरानी",
"batchWorkflow.batchJobs": "{{num}} बैच कार्य",
@@ -37,6 +39,7 @@
"batchWorkflow.errorOccurred": "त्रुटि हुई",
"batchWorkflow.failed": "विफल",
"batchWorkflow.initializing": "बैच कार्य प्रारंभ हो रहा है...",
"batchWorkflow.noBatchTasks": "कोई बैच प्रसंस्करण कार्य नहीं",
"batchWorkflow.pending": "लंबित",
"batchWorkflow.pleaseWait": "कृपया प्रतीक्षा करें",
"batchWorkflow.processed": "{{processed}}/{{total}} पंक्तियाँ प्रोसेस की गईं",
@@ -63,6 +66,8 @@
"billingList.link": "लिंक",
"billingList.open": "खोलें",
"billingList.router": "राउटर",
"configuration.clearContext": "संदर्भ साफ़ कर दिया गया",
"configuration.restoreContext": "संदर्भ पुनर्स्थापित करने के लिए क्लिक करें",
"fileUploader.fileUpload": "फ़ाइल अपलोड",
"fileUploader.pasteFileLink": "फ़ाइल लिंक पेस्ट करें",
"fileUploader.pasteFileLinkInputPlaceholder": "अपना फ़ाइल लिंक यहाँ पेस्ट करें",
@@ -73,5 +78,8 @@
"fileUploader.uploadFromComputerUploadError": "फ़ाइल अपलोड करने में त्रुटि, कृपया फिर से अपलोड करें।",
"modelSyncWorkspaceCustomize.workspacePlaceholder": "कार्यस्थल चुनें",
"sidebar.appCenter": "ऐप केंद्र",
"sidebar.withDingTalk": "डिंगटॉक के साथ लॉगिन करें"
}
"sidebar.discovery": "खोज",
"sidebar.withDingTalk": "डिंगटॉक के साथ लॉगिन करें",
"user.credit": "क्रेडिट",
"user.used": "उपयोग किया गया:"
}
+10 -2
View File
@@ -1,4 +1,5 @@
{
"aiDraw.title": "Gambar AI",
"aiVideo.title": "Video AI",
"aiVideo.translate": "Terjemahan Video",
"apiKeyModal.accumulatedLimit": "Batas penggunaan kumulatif",
@@ -18,6 +19,7 @@
"app.confirmSyncAppContent": "Sinkronkan aplikasi ke halaman Jelajah dan buat tag terkait",
"app.syncAppOk": "Sinkronisasi berhasil",
"app.syncToAppTemplate": "Sinkronkan ke template aplikasi",
"appCard.newConversation": "Percakapan baru",
"appCenter.description": "Berikut adalah Pusat Aplikasi, di mana Anda dapat melihat aplikasi yang dikategorikan dan menggunakannya",
"appMenus.userOverview": "Pemantauan Pribadi",
"batchWorkflow.batchJobs": "{{num}} tugas batch",
@@ -37,6 +39,7 @@
"batchWorkflow.errorOccurred": "Terjadi kesalahan",
"batchWorkflow.failed": "Gagal",
"batchWorkflow.initializing": "Menginisialisasi tugas batch...",
"batchWorkflow.noBatchTasks": "Tidak ada tugas pemrosesan batch",
"batchWorkflow.pending": "Tertunda",
"batchWorkflow.pleaseWait": "Mohon tunggu",
"batchWorkflow.processed": "Diproses {{processed}}/{{total}} baris",
@@ -63,6 +66,8 @@
"billingList.link": "Tautan",
"billingList.open": "Perluas",
"billingList.router": "Router",
"configuration.clearContext": "Konteks dibersihkan",
"configuration.restoreContext": "Klik untuk memulihkan konteks",
"fileUploader.fileUpload": "Unggah file",
"fileUploader.pasteFileLink": "Tempel tautan file",
"fileUploader.pasteFileLinkInputPlaceholder": "Tempel tautan file di sini",
@@ -73,5 +78,8 @@
"fileUploader.uploadFromComputerUploadError": "Gagal mengunggah file, silakan unggah ulang.",
"modelSyncWorkspaceCustomize.workspacePlaceholder": "Pilih workspace",
"sidebar.appCenter": "Pusat Aplikasi",
"sidebar.withDingTalk": "Masuk dengan DingTalk"
}
"sidebar.discovery": "Penemuan",
"sidebar.withDingTalk": "Masuk dengan DingTalk",
"user.credit": "Kredit",
"user.used": "Digunakan:"
}
+10 -2
View File
@@ -1,4 +1,5 @@
{
"aiDraw.title": "Disegno IA",
"aiVideo.title": "Video AI",
"aiVideo.translate": "Traduzione video",
"apiKeyModal.accumulatedLimit": "Limite utilizzo cumulativo",
@@ -18,6 +19,7 @@
"app.confirmSyncAppContent": "Sincronizza app con la pagina di esplorazione e crea tag correlati",
"app.syncAppOk": "Sincronizzazione riuscita",
"app.syncToAppTemplate": "Sincronizza con modello app",
"appCard.newConversation": "Nuova conversazione",
"appCenter.description": "Qui di seguito è il centro app, dove puoi visualizzare le applicazioni categorizzate e utilizzarle",
"appMenus.userOverview": "Panoramica utente",
"batchWorkflow.batchJobs": "{{num}} attività batch",
@@ -37,6 +39,7 @@
"batchWorkflow.errorOccurred": "Si è verificato un errore",
"batchWorkflow.failed": "Non riuscito",
"batchWorkflow.initializing": "Inizializzazione attività batch...",
"batchWorkflow.noBatchTasks": "Nessuna attività di elaborazione batch",
"batchWorkflow.pending": "In attesa",
"batchWorkflow.pleaseWait": "Si prega di attendere",
"batchWorkflow.processed": "Elaborate {{processed}}/{{total}} righe",
@@ -63,6 +66,8 @@
"billingList.link": "Link",
"billingList.open": "Espandi",
"billingList.router": "Router",
"configuration.clearContext": "Contesto cancellato",
"configuration.restoreContext": "Fare clic per ripristinare il contesto",
"fileUploader.fileUpload": "Caricamento file",
"fileUploader.pasteFileLink": "Incolla link file",
"fileUploader.pasteFileLinkInputPlaceholder": "Incolla qui il link del file",
@@ -73,5 +78,8 @@
"fileUploader.uploadFromComputerUploadError": "Caricamento file non riuscito, ricaricare.",
"modelSyncWorkspaceCustomize.workspacePlaceholder": "Seleziona spazio di lavoro",
"sidebar.appCenter": "Centro App",
"sidebar.withDingTalk": "Accedi con DingTalk"
}
"sidebar.discovery": "Scoperta",
"sidebar.withDingTalk": "Accedi con DingTalk",
"user.credit": "Credito",
"user.used": "Usato:"
}
+10 -2
View File
@@ -1,4 +1,5 @@
{
"aiDraw.title": "AI 作図",
"aiVideo.title": "AI ビデオ",
"aiVideo.translate": "ビデオ翻訳",
"apiKeyModal.accumulatedLimit": "累計使用制限",
@@ -18,6 +19,7 @@
"app.confirmSyncAppContent": "探索画面にアプリを同期し、関連するタグを作成",
"app.syncAppOk": "同期に成功しました",
"app.syncToAppTemplate": "アプリテンプレートに同期",
"appCard.newConversation": "新しい会話",
"appCenter.description": "以下はアプリセンターです。ここでカテゴリ分けされたアプリを閲覧できます",
"appMenus.userOverview": "個人モニタリング",
"batchWorkflow.batchJobs": "{{num}} 個のバッチタスク",
@@ -37,6 +39,7 @@
"batchWorkflow.errorOccurred": "エラーが発生しました",
"batchWorkflow.failed": "失敗",
"batchWorkflow.initializing": "バッチタスクを初期化中...",
"batchWorkflow.noBatchTasks": "バッチ処理タスクがありません",
"batchWorkflow.pending": "処理待ち",
"batchWorkflow.pleaseWait": "お待ちください",
"batchWorkflow.processed": "{{processed}}/{{total}} 行を処理済み",
@@ -63,6 +66,8 @@
"billingList.link": "リンク",
"billingList.open": "展開",
"billingList.router": "ルーター",
"configuration.clearContext": "コンテキストがクリアされました",
"configuration.restoreContext": "クリックしてコンテキストを復元",
"fileUploader.fileUpload": "ファイルアップロード",
"fileUploader.pasteFileLink": "ファイルリンクを貼り付け",
"fileUploader.pasteFileLinkInputPlaceholder": "ここにファイルリンクを貼り付けてください",
@@ -73,5 +78,8 @@
"fileUploader.uploadFromComputerUploadError": "ファイルのアップロードに失敗しました。もう一度アップロードしてください。",
"modelSyncWorkspaceCustomize.workspacePlaceholder": "ワークスペースを選択",
"sidebar.appCenter": "アプリセンター",
"sidebar.withDingTalk": "DingTalkでログイン"
}
"sidebar.discovery": "発見",
"sidebar.withDingTalk": "DingTalkでログイン",
"user.credit": "クレジット",
"user.used": "使用済み:"
}
+10 -2
View File
@@ -1,4 +1,5 @@
{
"aiDraw.title": "AI 그림",
"aiVideo.title": "AI 비디오",
"aiVideo.translate": "비디오 번역",
"apiKeyModal.accumulatedLimit": "누적 사용 한도",
@@ -18,6 +19,7 @@
"app.confirmSyncAppContent": "탐색 화면에 앱 동기화 및 관련 태그 생성",
"app.syncAppOk": "동기화 완료",
"app.syncToAppTemplate": "앱 템플릿으로 동기화",
"appCard.newConversation": "새 대화",
"appCenter.description": "앱 센터입니다. 여기서 분류된 앱을 보고 사용할 수 있습니다.",
"appMenus.userOverview": "개인 모니터링",
"batchWorkflow.batchJobs": "{{num}}개의 일괄 작업",
@@ -37,6 +39,7 @@
"batchWorkflow.errorOccurred": "오류가 발생했습니다",
"batchWorkflow.failed": "실패",
"batchWorkflow.initializing": "일괄 작업을 초기화하는 중...",
"batchWorkflow.noBatchTasks": "일괄 처리 작업 없음",
"batchWorkflow.pending": "대기 중",
"batchWorkflow.pleaseWait": "잠시만 기다려 주세요",
"batchWorkflow.processed": "{{processed}}/{{total}}행 처리됨",
@@ -63,6 +66,8 @@
"billingList.link": "링크",
"billingList.open": "펼치기",
"billingList.router": "라우터",
"configuration.clearContext": "컨텍스트가 지워졌습니다",
"configuration.restoreContext": "클릭하여 컨텍스트 복원",
"fileUploader.fileUpload": "파일 업로드",
"fileUploader.pasteFileLink": "파일 링크 붙여넣기",
"fileUploader.pasteFileLinkInputPlaceholder": "여기에 파일 링크를 붙여넣으세요",
@@ -73,5 +78,8 @@
"fileUploader.uploadFromComputerUploadError": "파일 업로드 실패. 다시 업로드해 주세요.",
"modelSyncWorkspaceCustomize.workspacePlaceholder": "작업 공간 선택",
"sidebar.appCenter": "앱 센터",
"sidebar.withDingTalk": "딩톡으로 로그인"
}
"sidebar.discovery": "발견",
"sidebar.withDingTalk": "딩톡으로 로그인",
"user.credit": "크레딧",
"user.used": "사용됨:"
}
+10 -2
View File
@@ -1,4 +1,5 @@
{
"aiDraw.title": "Rysowanie AI",
"aiVideo.title": "Wideo AI",
"aiVideo.translate": "Tłumaczenie wideo",
"apiKeyModal.accumulatedLimit": "Skumulowany limit użycia",
@@ -18,6 +19,7 @@
"app.confirmSyncAppContent": "Synchronizuj aplikację z interfejsem odkrywania i powiąż utworzone tagi",
"app.syncAppOk": "Synchronizacja zakończona sukcesem",
"app.syncToAppTemplate": "Synchronizuj z szablonem aplikacji",
"appCard.newConversation": "Nowa rozmowa",
"appCenter.description": "Oto Centrum Aplikacji, gdzie możesz zobaczyć sklasyfikowane aplikacje i z nich korzystać",
"appMenus.userOverview": "Przegląd użytkownika",
"batchWorkflow.batchJobs": "{{num}} zadań wsadowych",
@@ -37,6 +39,7 @@
"batchWorkflow.errorOccurred": "Wystąpił błąd",
"batchWorkflow.failed": "Nieudane",
"batchWorkflow.initializing": "Inicjalizacja zadania wsadowego...",
"batchWorkflow.noBatchTasks": "Brak zadań przetwarzania wsadowego",
"batchWorkflow.pending": "Oczekujące",
"batchWorkflow.pleaseWait": "Proszę czekać",
"batchWorkflow.processed": "Przetworzono {{processed}}/{{total}} wierszy",
@@ -63,6 +66,8 @@
"billingList.link": "Link",
"billingList.open": "Rozwiń",
"billingList.router": "Router",
"configuration.clearContext": "Kontekst wyczyszczony",
"configuration.restoreContext": "Kliknij, aby przywrócić kontekst",
"fileUploader.fileUpload": "Przesyłanie pliku",
"fileUploader.pasteFileLink": "Wklej link do pliku",
"fileUploader.pasteFileLinkInputPlaceholder": "Wklej link do pliku tutaj",
@@ -73,5 +78,8 @@
"fileUploader.uploadFromComputerUploadError": "Przesyłanie pliku nie powiodło się, prześlij ponownie.",
"modelSyncWorkspaceCustomize.workspacePlaceholder": "Wybierz przestrzeń roboczą",
"sidebar.appCenter": "Centrum Aplikacji",
"sidebar.withDingTalk": "Zaloguj się za pomocą DingTalk"
}
"sidebar.discovery": "Odkrywanie",
"sidebar.withDingTalk": "Zaloguj się za pomocą DingTalk",
"user.credit": "Kredyt",
"user.used": "Użyto:"
}
+10 -2
View File
@@ -1,4 +1,5 @@
{
"aiDraw.title": "Desenho IA",
"aiVideo.title": "Vídeo de IA",
"aiVideo.translate": "Tradução de vídeo",
"apiKeyModal.accumulatedLimit": "Limite de uso acumulado",
@@ -18,6 +19,7 @@
"app.confirmSyncAppContent": "Sincronizar aplicativo para a interface de exploração e criar tags relacionadas",
"app.syncAppOk": "Sincronização bem-sucedida",
"app.syncToAppTemplate": "Sincronizar para modelo de aplicativo",
"appCard.newConversation": "Nova conversa",
"appCenter.description": "Aqui está o Centro de Aplicativos, onde você pode ver aplicativos categorizados e utilizá-los",
"appMenus.userOverview": "Visão geral do usuário",
"batchWorkflow.batchJobs": "{{num}} tarefas em lote",
@@ -37,6 +39,7 @@
"batchWorkflow.errorOccurred": "Ocorreu um erro",
"batchWorkflow.failed": "Falhou",
"batchWorkflow.initializing": "Inicializando tarefa em lote...",
"batchWorkflow.noBatchTasks": "Nenhuma tarefa de processamento em lote",
"batchWorkflow.pending": "Pendente",
"batchWorkflow.pleaseWait": "Por favor, aguarde",
"batchWorkflow.processed": "{{processed}}/{{total}} linhas processadas",
@@ -63,6 +66,8 @@
"billingList.link": "Link",
"billingList.open": "Expandir",
"billingList.router": "Rota",
"configuration.clearContext": "Contexto limpo",
"configuration.restoreContext": "Clique para restaurar o contexto",
"fileUploader.fileUpload": "Upload de arquivo",
"fileUploader.pasteFileLink": "Colar link do arquivo",
"fileUploader.pasteFileLinkInputPlaceholder": "Cole o link do arquivo aqui",
@@ -73,5 +78,8 @@
"fileUploader.uploadFromComputerUploadError": "Falha no upload do arquivo, por favor, carregue novamente.",
"modelSyncWorkspaceCustomize.workspacePlaceholder": "Escolher espaço de trabalho",
"sidebar.appCenter": "Centro de Aplicativos",
"sidebar.withDingTalk": "Iniciar sessão com DingTalk"
}
"sidebar.discovery": "Descoberta",
"sidebar.withDingTalk": "Iniciar sessão com DingTalk",
"user.credit": "Crédito",
"user.used": "Usado:"
}
+10 -2
View File
@@ -1,4 +1,5 @@
{
"aiDraw.title": "Desen AI",
"aiVideo.title": "Video AI",
"aiVideo.translate": "Traducere video",
"apiKeyModal.accumulatedLimit": "Limită de utilizare cumulată",
@@ -18,6 +19,7 @@
"app.confirmSyncAppContent": "Sincronizează aplicația la interfața de explorare și creează etichete asociate",
"app.syncAppOk": "Sincronizare reușită",
"app.syncToAppTemplate": "Sincronizează la șablonul de aplicație",
"appCard.newConversation": "Conversație nouă",
"appCenter.description": "Aceasta este Centrul de Aplicații, unde puteți vedea aplicațiile organizate pe categorii și le puteți utiliza",
"appMenus.userOverview": "Monitorizare personală",
"batchWorkflow.batchJobs": "{{num}} sarcini în lot",
@@ -37,6 +39,7 @@
"batchWorkflow.errorOccurred": "A apărut o eroare",
"batchWorkflow.failed": "Eșuat",
"batchWorkflow.initializing": "Se inițializează sarcina în lot...",
"batchWorkflow.noBatchTasks": "Nu există sarcini de procesare în lot",
"batchWorkflow.pending": "În așteptare",
"batchWorkflow.pleaseWait": "Vă rugăm să așteptați",
"batchWorkflow.processed": "Procesate {{processed}}/{{total}} rânduri",
@@ -63,6 +66,8 @@
"billingList.link": "Link",
"billingList.open": "Deschide",
"billingList.router": "Rută",
"configuration.clearContext": "Context șters",
"configuration.restoreContext": "Faceți clic pentru a restabili contextul",
"fileUploader.fileUpload": "Încărcare fișier",
"fileUploader.pasteFileLink": "Lipire link fișier",
"fileUploader.pasteFileLinkInputPlaceholder": "Lipiți linkul fișierului aici",
@@ -73,5 +78,8 @@
"fileUploader.uploadFromComputerUploadError": "Încărcarea fișierului a eșuat, vă rugăm să încărcați din nou.",
"modelSyncWorkspaceCustomize.workspacePlaceholder": "Selectați spațiul de lucru",
"sidebar.appCenter": "Centru de aplicații",
"sidebar.withDingTalk": "Conectați-vă cu DingTalk"
}
"sidebar.discovery": "Descoperire",
"sidebar.withDingTalk": "Conectați-vă cu DingTalk",
"user.credit": "Credit",
"user.used": "Folosit:"
}
+10 -2
View File
@@ -1,4 +1,5 @@
{
"aiDraw.title": "AI Рисование",
"aiVideo.title": "AI-видео",
"aiVideo.translate": "Перевод видео",
"apiKeyModal.accumulatedLimit": "Накопленный лимит использования",
@@ -18,6 +19,7 @@
"app.confirmSyncAppContent": "Синхронизировать приложение со страницей \"Исследование\" и связать созданные теги",
"app.syncAppOk": "Синхронизация успешна",
"app.syncToAppTemplate": "Синхронизировать с шаблоном приложения",
"appCard.newConversation": "Новый разговор",
"appCenter.description": "Ниже представлен Центр приложений, где вы можете просмотреть категоризированные приложения и использовать их",
"appMenus.userOverview": "Личный обзор",
"batchWorkflow.batchJobs": "{{num}} пакетных задач",
@@ -37,6 +39,7 @@
"batchWorkflow.errorOccurred": "Произошла ошибка",
"batchWorkflow.failed": "Не удалось",
"batchWorkflow.initializing": "Инициализация пакетной задачи...",
"batchWorkflow.noBatchTasks": "Нет задач пакетной обработки",
"batchWorkflow.pending": "В ожидании",
"batchWorkflow.pleaseWait": "Пожалуйста, подождите",
"batchWorkflow.processed": "Обработано {{processed}}/{{total}} строк",
@@ -63,6 +66,8 @@
"billingList.link": "Ссылка",
"billingList.open": "Развернуть",
"billingList.router": "Маршрутизатор",
"configuration.clearContext": "Контекст очищен",
"configuration.restoreContext": "Нажмите, чтобы восстановить контекст",
"fileUploader.fileUpload": "Загрузка файла",
"fileUploader.pasteFileLink": "Вставить ссылку на файл",
"fileUploader.pasteFileLinkInputPlaceholder": "Вставьте здесь ссылку на файл",
@@ -73,5 +78,8 @@
"fileUploader.uploadFromComputerUploadError": "Не удалось загрузить файл, пожалуйста, загрузите его снова.",
"modelSyncWorkspaceCustomize.workspacePlaceholder": "Выберите рабочее пространство",
"sidebar.appCenter": "Центр приложений",
"sidebar.withDingTalk": "Войти с помощью DingTalk"
}
"sidebar.discovery": "Обнаружение",
"sidebar.withDingTalk": "Войти с помощью DingTalk",
"user.credit": "Кредит",
"user.used": "Использовано:"
}
+10 -2
View File
@@ -1,4 +1,5 @@
{
"aiDraw.title": "AI risanje",
"aiVideo.title": "AI Video",
"aiVideo.translate": "Prevod videoposnetka",
"apiKeyModal.accumulatedLimit": "Skupna poraba",
@@ -18,6 +19,7 @@
"app.confirmSyncAppContent": "Sinhroniziraj aplikacijo v raziskovalni vmesnik in ustvari povezane oznake",
"app.syncAppOk": "Sinhronizacija uspešna",
"app.syncToAppTemplate": "Sinhroniziraj v predlogo aplikacije",
"appCard.newConversation": "Nov pogovor",
"appCenter.description": "To je center aplikacij, kjer lahko vidite razvrščene aplikacije in jih uporabljate",
"appMenus.userOverview": "Pregled uporabnika",
"batchWorkflow.batchJobs": "{{num}} paketnih nalog",
@@ -37,6 +39,7 @@
"batchWorkflow.errorOccurred": "Prišlo je do napake",
"batchWorkflow.failed": "Neuspešno",
"batchWorkflow.initializing": "Inicializacija paketne naloge...",
"batchWorkflow.noBatchTasks": "Ni nalog za paketno obdelavo",
"batchWorkflow.pending": "Na čakanju",
"batchWorkflow.pleaseWait": "Prosimo počakajte",
"batchWorkflow.processed": "Obdelanih {{processed}}/{{total}} vrstic",
@@ -63,6 +66,8 @@
"billingList.link": "Povezava",
"billingList.open": "Razširi",
"billingList.router": "Usmerjevalnik",
"configuration.clearContext": "Kontekst počiščen",
"configuration.restoreContext": "Kliknite za obnovitev konteksta",
"fileUploader.fileUpload": "Nalaganje datoteke",
"fileUploader.pasteFileLink": "Prilepi povezavo do datoteke",
"fileUploader.pasteFileLinkInputPlaceholder": "Tukaj prilepite povezavo do datoteke",
@@ -73,5 +78,8 @@
"fileUploader.uploadFromComputerUploadError": "Nalaganje datoteke ni uspelo, prosimo poskusite znova.",
"modelSyncWorkspaceCustomize.workspacePlaceholder": "Izberite delovni prostor",
"sidebar.appCenter": "Center aplikacij",
"sidebar.withDingTalk": "Vpis z DingTalk"
}
"sidebar.discovery": "Odkritje",
"sidebar.withDingTalk": "Vpis z DingTalk",
"user.credit": "Kredit",
"user.used": "Uporabljeno:"
}
+10 -2
View File
@@ -1,4 +1,5 @@
{
"aiDraw.title": "วาดภาพ AI",
"aiVideo.title": "วิดีโอ AI",
"aiVideo.translate": "แปลวิดีโอ",
"apiKeyModal.accumulatedLimit": "ข้อจำกัดการใช้งานรวม",
@@ -18,6 +19,7 @@
"app.confirmSyncAppContent": "ซิงค์แอปไปยังหน้าค้นหาและเชื่อมโยงการสร้างแท็กที่เกี่ยวข้อง",
"app.syncAppOk": "ซิงค์สำเร็จ",
"app.syncToAppTemplate": "ซิงค์ไปยังแม่แบบแอป",
"appCard.newConversation": "การสนทนาใหม่",
"appCenter.description": "นี่คือศูนย์แอป คุณสามารถดูแอปที่จัดประเภทและใช้งานได้ที่นี่",
"appMenus.userOverview": "การติดตามส่วนบุคคล",
"batchWorkflow.batchJobs": "{{num}} งานแบตช์",
@@ -37,6 +39,7 @@
"batchWorkflow.errorOccurred": "เกิดข้อผิดพลาด",
"batchWorkflow.failed": "ล้มเหลว",
"batchWorkflow.initializing": "กำลังเริ่มต้นงานแบตช์...",
"batchWorkflow.noBatchTasks": "ไม่มีงานประมวลผลแบบกลุ่ม",
"batchWorkflow.pending": "กำลังรอดำเนินการ",
"batchWorkflow.pleaseWait": "กรุณารอสักครู่",
"batchWorkflow.processed": "ประมวลผลแล้ว {{processed}}/{{total}} แถว",
@@ -63,6 +66,8 @@
"billingList.link": "ลิงก์",
"billingList.open": "ขยาย",
"billingList.router": "เส้นทาง",
"configuration.clearContext": "ล้างบริบทแล้ว",
"configuration.restoreContext": "คลิกเพื่อกู้คืนบริบท",
"fileUploader.fileUpload": "อัปโหลดไฟล์",
"fileUploader.pasteFileLink": "วางลิงก์ไฟล์",
"fileUploader.pasteFileLinkInputPlaceholder": "วางลิงก์ไฟล์ที่นี่",
@@ -73,5 +78,8 @@
"fileUploader.uploadFromComputerUploadError": "อัปโหลดไฟล์ล้มเหลว กรุณาอัปโหลดใหม่อีกครั้ง。",
"modelSyncWorkspaceCustomize.workspacePlaceholder": "เลือกพื้นที่ทำงาน",
"sidebar.appCenter": "ศูนย์รับสมัครงาน",
"sidebar.withDingTalk": "เข้าสู่ระบบโดยใช้ DingTalk"
}
"sidebar.discovery": "การค้นพบ",
"sidebar.withDingTalk": "เข้าสู่ระบบโดยใช้ DingTalk",
"user.credit": "เครดิต",
"user.used": "ใช้แล้ว:"
}
+10 -2
View File
@@ -1,4 +1,5 @@
{
"aiDraw.title": "AI Çizim",
"aiVideo.title": "AI Video",
"aiVideo.translate": "Video Çevirisi",
"apiKeyModal.accumulatedLimit": "Toplam Kullanım Sınırı",
@@ -18,6 +19,7 @@
"app.confirmSyncAppContent": "Uygulamayı Keşif Sayfasına Senkronize Et ve İlgili Etiketleri Oluştur",
"app.syncAppOk": "Senkronizasyon Başarılı",
"app.syncToAppTemplate": "Uygulama Şablonuna Senkronize Et",
"appCard.newConversation": "Yeni Konuşma",
"appCenter.description": "İşte Uygulama Merkezi, kategorize edilmiş uygulamaları görüp kullanabileceğiniz yer",
"appMenus.userOverview": "Kullanıcı Görünümü",
"batchWorkflow.batchJobs": "{{num}} toplu görev",
@@ -37,6 +39,7 @@
"batchWorkflow.errorOccurred": "Bir hata oluştu",
"batchWorkflow.failed": "Başarısız",
"batchWorkflow.initializing": "Toplu görev başlatılıyor...",
"batchWorkflow.noBatchTasks": "Toplu işleme görevi yok",
"batchWorkflow.pending": "Beklemede",
"batchWorkflow.pleaseWait": "Lütfen bekleyin",
"batchWorkflow.processed": "{{processed}}/{{total}} satır işlendi",
@@ -63,6 +66,8 @@
"billingList.link": "Bağlantı",
"billingList.open": "Genişlet",
"billingList.router": "Yönlendirici",
"configuration.clearContext": "Bağlam temizlendi",
"configuration.restoreContext": "Bağlamı geri yüklemek için tıklayın",
"fileUploader.fileUpload": "Dosya Yükleme",
"fileUploader.pasteFileLink": "Dosya Bağlantısını Yapıştır",
"fileUploader.pasteFileLinkInputPlaceholder": "Dosya bağlantısını buraya yapıştırın",
@@ -73,5 +78,8 @@
"fileUploader.uploadFromComputerUploadError": "Dosya yükleme hatası, lütfen tekrar yükleyin.",
"modelSyncWorkspaceCustomize.workspacePlaceholder": "Çalışma Alanı Seç",
"sidebar.appCenter": "Uygulama Merkezi",
"sidebar.withDingTalk": "DingTalk ile Giriş Yap"
}
"sidebar.discovery": "Keşif",
"sidebar.withDingTalk": "DingTalk ile Giriş Yap",
"user.credit": "Kredi",
"user.used": "Kullanılan:"
}
+10 -2
View File
@@ -1,4 +1,5 @@
{
"aiDraw.title": "Vẽ AI",
"aiVideo.title": "Video AI",
"aiVideo.translate": "Dịch video",
"apiKeyModal.accumulatedLimit": "Mức sử dụng tích lũy",
@@ -18,6 +19,7 @@
"app.confirmSyncAppContent": "Đồng bộ hóa ứng dụng với giao diện khám phá và tạo các thẻ liên quan",
"app.syncAppOk": "Đồng bộ hóa thành công",
"app.syncToAppTemplate": "Đồng bộ hóa với mẫu ứng dụng",
"appCard.newConversation": "Cuộc trò chuyện mới",
"appCenter.description": "Dưới đây là Trung tâm ứng dụng, nơi bạn có thể xem các ứng dụng được phân loại và sử dụng",
"appMenus.userOverview": "Tổng quan người dùng",
"batchWorkflow.batchJobs": "{{num}} tác vụ hàng loạt",
@@ -37,6 +39,7 @@
"batchWorkflow.errorOccurred": "Đã xảy ra lỗi",
"batchWorkflow.failed": "Thất bại",
"batchWorkflow.initializing": "Đang khởi tạo tác vụ hàng loạt...",
"batchWorkflow.noBatchTasks": "Không có tác vụ xử lý hàng loạt",
"batchWorkflow.pending": "Đang chờ xử lý",
"batchWorkflow.pleaseWait": "Vui lòng đợi",
"batchWorkflow.processed": "Đã xử lý {{processed}}/{{total}} hàng",
@@ -63,6 +66,8 @@
"billingList.link": "Liên kết",
"billingList.open": "Mở rộng",
"billingList.router": "Định tuyến",
"configuration.clearContext": "Đã xóa ngữ cảnh",
"configuration.restoreContext": "Nhấp để khôi phục ngữ cảnh",
"fileUploader.fileUpload": "Tải lên tệp",
"fileUploader.pasteFileLink": "Dán liên kết tệp",
"fileUploader.pasteFileLinkInputPlaceholder": "Dán liên kết tệp tại đây",
@@ -73,5 +78,8 @@
"fileUploader.uploadFromComputerUploadError": "Tải lên tệp thất bại, vui lòng tải lên lại.",
"modelSyncWorkspaceCustomize.workspacePlaceholder": "Chọn không gian làm việc",
"sidebar.appCenter": "Trung tâm ứng dụng",
"sidebar.withDingTalk": "Đăng nhập bằng DingTalk"
}
"sidebar.discovery": "Khám phá",
"sidebar.withDingTalk": "Đăng nhập bằng DingTalk",
"user.credit": "Tín dụng",
"user.used": "Đã sử dụng:"
}
+3 -1
View File
@@ -79,5 +79,7 @@
"sidebar.appCenter": "应用中心",
"sidebar.withDingTalk": "使用 钉钉 登录",
"configuration.clearContext": "上下文已清除",
"configuration.restoreContext": "点击恢复上下文"
"configuration.restoreContext": "点击恢复上下文",
"sidebar.discovery": "发现",
"aiDraw.title": "AI 作图"
}
+10 -2
View File
@@ -1,4 +1,5 @@
{
"aiDraw.title": "AI 作圖",
"aiVideo.title": "AI 視頻",
"aiVideo.translate": "視頻翻譯",
"apiKeyModal.accumulatedLimit": "累計使用額度",
@@ -18,6 +19,7 @@
"app.confirmSyncAppContent": "同步應用至探索介面,並關聯創建相關標籤",
"app.syncAppOk": "同步成功",
"app.syncToAppTemplate": "同步至應用模板",
"appCard.newConversation": "新對話",
"appCenter.description": "以下是應用中心,你可以在這裡看到分類好的應用,進行使用",
"appMenus.userOverview": "個人監測",
"batchWorkflow.batchJobs": "{{num}} 個批量任務",
@@ -37,6 +39,7 @@
"batchWorkflow.errorOccurred": "發生錯誤",
"batchWorkflow.failed": "失敗",
"batchWorkflow.initializing": "正在初始化批量任務...",
"batchWorkflow.noBatchTasks": "暫無批量處理任務",
"batchWorkflow.pending": "待處理",
"batchWorkflow.pleaseWait": "請稍候",
"batchWorkflow.processed": "已處理 {{processed}}/{{total}} 行",
@@ -63,6 +66,8 @@
"billingList.link": "鏈接",
"billingList.open": "展開",
"billingList.router": "路由",
"configuration.clearContext": "上下文已清除",
"configuration.restoreContext": "點擊恢復上下文",
"fileUploader.fileUpload": "文件上傳",
"fileUploader.pasteFileLink": "粘貼文件鏈接",
"fileUploader.pasteFileLinkInputPlaceholder": "將文件鏈接粘貼到此處",
@@ -73,5 +78,8 @@
"fileUploader.uploadFromComputerUploadError": "文件上傳失敗,請重新上傳。",
"modelSyncWorkspaceCustomize.workspacePlaceholder": "選擇工作空間",
"sidebar.appCenter": "應用中心",
"sidebar.withDingTalk": "使用 釘釘 登錄"
}
"sidebar.discovery": "發現",
"sidebar.withDingTalk": "使用 釘釘 登錄",
"user.credit": "額度",
"user.used": "已用:"
}
+4
View File
@@ -86,6 +86,7 @@
"class-variance-authority": "0.7.1",
"clsx": "2.1.1",
"cmdk": "1.1.1",
"dingtalk-jsapi": "3.2.5",
"copy-to-clipboard": "3.3.3",
"cron-parser": "5.4.0",
"dayjs": "1.11.19",
@@ -109,6 +110,7 @@
"js-audio-recorder": "1.0.7",
"js-cookie": "3.0.5",
"js-yaml": "4.1.1",
"jschardet": "3.1.4",
"jsonschema": "1.5.0",
"katex": "0.16.25",
"ky": "1.12.0",
@@ -122,6 +124,7 @@
"next": "16.1.4",
"next-themes": "0.4.6",
"nuqs": "2.8.6",
"papaparse": "5.5.3",
"pinyin-pro": "3.27.0",
"qrcode.react": "4.2.0",
"qs": "6.14.1",
@@ -191,6 +194,7 @@
"@types/js-yaml": "4.0.9",
"@types/negotiator": "0.6.4",
"@types/node": "18.15.0",
"@types/papaparse": "5.5.2",
"@types/qs": "6.14.0",
"@types/react": "19.2.7",
"@types/react-dom": "19.2.3",
+95 -4
View File
@@ -162,6 +162,9 @@ importers:
decimal.js:
specifier: 10.6.0
version: 10.6.0
dingtalk-jsapi:
specifier: 3.2.5
version: 3.2.5
dompurify:
specifier: 3.3.0
version: 3.3.0
@@ -219,6 +222,9 @@ importers:
js-yaml:
specifier: 4.1.1
version: 4.1.1
jschardet:
specifier: 3.1.4
version: 3.1.4
jsonschema:
specifier: 1.5.0
version: 1.5.0
@@ -258,6 +264,9 @@ importers:
nuqs:
specifier: 2.8.6
version: 2.8.6(next@16.1.4(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.93.2))(react@19.2.3)
papaparse:
specifier: 5.5.3
version: 5.5.3
pinyin-pro:
specifier: 3.27.0
version: 3.27.0
@@ -460,6 +469,9 @@ importers:
'@types/node':
specifier: 18.15.0
version: 18.15.0
'@types/papaparse':
specifier: 5.5.2
version: 5.5.2
'@types/qs':
specifier: 6.14.0
version: 6.14.0
@@ -1842,155 +1854,183 @@ packages:
resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@img/sharp-libvips-linux-arm64@1.2.4':
resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@img/sharp-libvips-linux-arm@1.0.5':
resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==}
cpu: [arm]
os: [linux]
libc: [glibc]
'@img/sharp-libvips-linux-arm@1.2.4':
resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==}
cpu: [arm]
os: [linux]
libc: [glibc]
'@img/sharp-libvips-linux-ppc64@1.2.4':
resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==}
cpu: [ppc64]
os: [linux]
libc: [glibc]
'@img/sharp-libvips-linux-riscv64@1.2.4':
resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==}
cpu: [riscv64]
os: [linux]
libc: [glibc]
'@img/sharp-libvips-linux-s390x@1.0.4':
resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==}
cpu: [s390x]
os: [linux]
libc: [glibc]
'@img/sharp-libvips-linux-s390x@1.2.4':
resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==}
cpu: [s390x]
os: [linux]
libc: [glibc]
'@img/sharp-libvips-linux-x64@1.0.4':
resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==}
cpu: [x64]
os: [linux]
libc: [glibc]
'@img/sharp-libvips-linux-x64@1.2.4':
resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==}
cpu: [x64]
os: [linux]
libc: [glibc]
'@img/sharp-libvips-linuxmusl-arm64@1.0.4':
resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==}
cpu: [arm64]
os: [linux]
libc: [musl]
'@img/sharp-libvips-linuxmusl-arm64@1.2.4':
resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==}
cpu: [arm64]
os: [linux]
libc: [musl]
'@img/sharp-libvips-linuxmusl-x64@1.0.4':
resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==}
cpu: [x64]
os: [linux]
libc: [musl]
'@img/sharp-libvips-linuxmusl-x64@1.2.4':
resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==}
cpu: [x64]
os: [linux]
libc: [musl]
'@img/sharp-linux-arm64@0.33.5':
resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@img/sharp-linux-arm64@0.34.5':
resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@img/sharp-linux-arm@0.33.5':
resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm]
os: [linux]
libc: [glibc]
'@img/sharp-linux-arm@0.34.5':
resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm]
os: [linux]
libc: [glibc]
'@img/sharp-linux-ppc64@0.34.5':
resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [ppc64]
os: [linux]
libc: [glibc]
'@img/sharp-linux-riscv64@0.34.5':
resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [riscv64]
os: [linux]
libc: [glibc]
'@img/sharp-linux-s390x@0.33.5':
resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [s390x]
os: [linux]
libc: [glibc]
'@img/sharp-linux-s390x@0.34.5':
resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [s390x]
os: [linux]
libc: [glibc]
'@img/sharp-linux-x64@0.33.5':
resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [linux]
libc: [glibc]
'@img/sharp-linux-x64@0.34.5':
resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [linux]
libc: [glibc]
'@img/sharp-linuxmusl-arm64@0.33.5':
resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [linux]
libc: [musl]
'@img/sharp-linuxmusl-arm64@0.34.5':
resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [linux]
libc: [musl]
'@img/sharp-linuxmusl-x64@0.33.5':
resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [linux]
libc: [musl]
'@img/sharp-linuxmusl-x64@0.34.5':
resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [linux]
libc: [musl]
'@img/sharp-wasm32@0.33.5':
resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==}
@@ -2214,24 +2254,28 @@ packages:
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@next/swc-linux-arm64-musl@16.1.4':
resolution: {integrity: sha512-3Wm0zGYVCs6qDFAiSSDL+Z+r46EdtCv/2l+UlIdMbAq9hPJBvGu/rZOeuvCaIUjbArkmXac8HnTyQPJFzFWA0Q==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
libc: [musl]
'@next/swc-linux-x64-gnu@16.1.4':
resolution: {integrity: sha512-lWAYAezFinaJiD5Gv8HDidtsZdT3CDaCeqoPoJjeB57OqzvMajpIhlZFce5sCAH6VuX4mdkxCRqecCJFwfm2nQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
libc: [glibc]
'@next/swc-linux-x64-musl@16.1.4':
resolution: {integrity: sha512-fHaIpT7x4gA6VQbdEpYUXRGyge/YbRrkG6DXM60XiBqDM2g2NcrsQaIuj375egnGFkJow4RHacgBOEsHfGbiUw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
libc: [musl]
'@next/swc-win32-arm64-msvc@16.1.4':
resolution: {integrity: sha512-MCrXxrTSE7jPN1NyXJr39E+aNFBrQZtO154LoCz7n99FuKqJDekgxipoodLNWdQP7/DZ5tKMc/efybx1l159hw==}
@@ -2425,41 +2469,49 @@ packages:
resolution: {integrity: sha512-SVjjjtMW66Mza76PBGJLqB0KKyFTBnxmtDXLJPbL6ZPGSctcXVmujz7/WAc0rb9m2oV0cHQTtVjnq6orQnI/jg==}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@oxc-resolver/binding-linux-arm64-musl@11.15.0':
resolution: {integrity: sha512-JDv2/AycPF2qgzEiDeMJCcSzKNDm3KxNg0KKWipoKEMDFqfM7LxNwwSVyAOGmrYlE4l3dg290hOMsr9xG7jv9g==}
cpu: [arm64]
os: [linux]
libc: [musl]
'@oxc-resolver/binding-linux-ppc64-gnu@11.15.0':
resolution: {integrity: sha512-zbu9FhvBLW4KJxo7ElFvZWbSt4vP685Qc/Gyk/Ns3g2gR9qh2qWXouH8PWySy+Ko/qJ42+HJCLg+ZNcxikERfg==}
cpu: [ppc64]
os: [linux]
libc: [glibc]
'@oxc-resolver/binding-linux-riscv64-gnu@11.15.0':
resolution: {integrity: sha512-Kfleehe6B09C2qCnyIU01xLFqFXCHI4ylzkicfX/89j+gNHh9xyNdpEvit88Kq6i5tTGdavVnM6DQfOE2qNtlg==}
cpu: [riscv64]
os: [linux]
libc: [glibc]
'@oxc-resolver/binding-linux-riscv64-musl@11.15.0':
resolution: {integrity: sha512-J7LPiEt27Tpm8P+qURDwNc8q45+n+mWgyys4/V6r5A8v5gDentHRGUx3iVk5NxdKhgoGulrzQocPTZVosq25Eg==}
cpu: [riscv64]
os: [linux]
libc: [musl]
'@oxc-resolver/binding-linux-s390x-gnu@11.15.0':
resolution: {integrity: sha512-+8/d2tAScPjVJNyqa7GPGnqleTB/XW9dZJQ2D/oIM3wpH3TG+DaFEXBbk4QFJ9K9AUGBhvQvWU2mQyhK/yYn3Q==}
cpu: [s390x]
os: [linux]
libc: [glibc]
'@oxc-resolver/binding-linux-x64-gnu@11.15.0':
resolution: {integrity: sha512-xtvSzH7Nr5MCZI2FKImmOdTl9kzuQ51RPyLh451tvD2qnkg3BaqI9Ox78bTk57YJhlXPuxWSOL5aZhKAc9J6qg==}
cpu: [x64]
os: [linux]
libc: [glibc]
'@oxc-resolver/binding-linux-x64-musl@11.15.0':
resolution: {integrity: sha512-14YL1zuXj06+/tqsuUZuzL0T425WA/I4nSVN1kBXeC5WHxem6lQ+2HGvG+crjeJEqHgZUT62YIgj88W+8E7eyg==}
cpu: [x64]
os: [linux]
libc: [musl]
'@oxc-resolver/binding-openharmony-arm64@11.15.0':
resolution: {integrity: sha512-/7Qli+1Wk93coxnrQaU8ySlICYN8HsgyIrzqjgIkQEpI//9eUeaeIHZptNl2fMvBGeXa7k2QgLbRNaBRgpnvMw==}
@@ -2515,36 +2567,42 @@ packages:
engines: {node: '>= 10.0.0'}
cpu: [arm]
os: [linux]
libc: [glibc]
'@parcel/watcher-linux-arm-musl@2.5.1':
resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==}
engines: {node: '>= 10.0.0'}
cpu: [arm]
os: [linux]
libc: [musl]
'@parcel/watcher-linux-arm64-glibc@2.5.1':
resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@parcel/watcher-linux-arm64-musl@2.5.1':
resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [linux]
libc: [musl]
'@parcel/watcher-linux-x64-glibc@2.5.1':
resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [linux]
libc: [glibc]
'@parcel/watcher-linux-x64-musl@2.5.1':
resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [linux]
libc: [musl]
'@parcel/watcher-win32-arm64@2.5.1':
resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==}
@@ -2954,56 +3012,67 @@ packages:
resolution: {integrity: sha512-dV3T9MyAf0w8zPVLVBptVlzaXxka6xg1f16VAQmjg+4KMSTWDvhimI/Y6mp8oHwNrmnmVl9XxJ/w/mO4uIQONA==}
cpu: [arm]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-arm-musleabihf@4.53.5':
resolution: {integrity: sha512-wIGYC1x/hyjP+KAu9+ewDI+fi5XSNiUi9Bvg6KGAh2TsNMA3tSEs+Sh6jJ/r4BV/bx/CyWu2ue9kDnIdRyafcQ==}
cpu: [arm]
os: [linux]
libc: [musl]
'@rollup/rollup-linux-arm64-gnu@4.53.5':
resolution: {integrity: sha512-Y+qVA0D9d0y2FRNiG9oM3Hut/DgODZbU9I8pLLPwAsU0tUKZ49cyV1tzmB/qRbSzGvY8lpgGkJuMyuhH7Ma+Vg==}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-arm64-musl@4.53.5':
resolution: {integrity: sha512-juaC4bEgJsyFVfqhtGLz8mbopaWD+WeSOYr5E16y+1of6KQjc0BpwZLuxkClqY1i8sco+MdyoXPNiCkQou09+g==}
cpu: [arm64]
os: [linux]
libc: [musl]
'@rollup/rollup-linux-loong64-gnu@4.53.5':
resolution: {integrity: sha512-rIEC0hZ17A42iXtHX+EPJVL/CakHo+tT7W0pbzdAGuWOt2jxDFh7A/lRhsNHBcqL4T36+UiAgwO8pbmn3dE8wA==}
cpu: [loong64]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-ppc64-gnu@4.53.5':
resolution: {integrity: sha512-T7l409NhUE552RcAOcmJHj3xyZ2h7vMWzcwQI0hvn5tqHh3oSoclf9WgTl+0QqffWFG8MEVZZP1/OBglKZx52Q==}
cpu: [ppc64]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-riscv64-gnu@4.53.5':
resolution: {integrity: sha512-7OK5/GhxbnrMcxIFoYfhV/TkknarkYC1hqUw1wU2xUN3TVRLNT5FmBv4KkheSG2xZ6IEbRAhTooTV2+R5Tk0lQ==}
cpu: [riscv64]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-riscv64-musl@4.53.5':
resolution: {integrity: sha512-GwuDBE/PsXaTa76lO5eLJTyr2k8QkPipAyOrs4V/KJufHCZBJ495VCGJol35grx9xryk4V+2zd3Ri+3v7NPh+w==}
cpu: [riscv64]
os: [linux]
libc: [musl]
'@rollup/rollup-linux-s390x-gnu@4.53.5':
resolution: {integrity: sha512-IAE1Ziyr1qNfnmiQLHBURAD+eh/zH1pIeJjeShleII7Vj8kyEm2PF77o+lf3WTHDpNJcu4IXJxNO0Zluro8bOw==}
cpu: [s390x]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-x64-gnu@4.53.5':
resolution: {integrity: sha512-Pg6E+oP7GvZ4XwgRJBuSXZjcqpIW3yCBhK4BcsANvb47qMvAbCjR6E+1a/U2WXz1JJxp9/4Dno3/iSJLcm5auw==}
cpu: [x64]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-x64-musl@4.53.5':
resolution: {integrity: sha512-txGtluxDKTxaMDzUduGP0wdfng24y1rygUMnmlUJ88fzCCULCLn7oE5kb2+tRB+MWq1QDZT6ObT5RrR8HFRKqg==}
cpu: [x64]
os: [linux]
libc: [musl]
'@rollup/rollup-openharmony-arm64@4.53.5':
resolution: {integrity: sha512-3DFiLPnTxiOQV993fMc+KO8zXHTcIjgaInrqlG8zDp1TlhYl6WgrOHuJkJQ6M8zHEcntSJsUp1XFZSY8C1DYbg==}
@@ -3289,24 +3358,28 @@ packages:
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@swc/core-linux-arm64-musl@1.15.8':
resolution: {integrity: sha512-koiCqL09EwOP1S2RShCI7NbsQuG6r2brTqUYE7pV7kZm9O17wZ0LSz22m6gVibpwEnw8jI3IE1yYsQTVpluALw==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
libc: [musl]
'@swc/core-linux-x64-gnu@1.15.8':
resolution: {integrity: sha512-4p6lOMU3bC+Vd5ARtKJ/FxpIC5G8v3XLoPEZ5s7mLR8h7411HWC/LmTXDHcrSXRC55zvAVia1eldy6zDLz8iFQ==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
libc: [glibc]
'@swc/core-linux-x64-musl@1.15.8':
resolution: {integrity: sha512-z3XBnbrZAL+6xDGAhJoN4lOueIxC/8rGrJ9tg+fEaeqLEuAtHSW2QHDHxDwkxZMjuF/pZ6MUTjHjbp8wLbuRLA==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
libc: [musl]
'@swc/core-win32-arm64-msvc@1.15.8':
resolution: {integrity: sha512-djQPJ9Rh9vP8GTS/Df3hcc6XP6xnG5c8qsngWId/BLA9oX6C7UzCPAn74BG/wGb9a6j4w3RINuoaieJB3t+7iQ==}
@@ -3718,8 +3791,8 @@ packages:
'@types/node@20.19.30':
resolution: {integrity: sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==}
'@types/papaparse@5.5.1':
resolution: {integrity: sha512-esEO+VISsLIyE+JZBmb89NzsYYbpwV8lmv2rPo6oX5y9KhBaIP7hhHgjuTut54qjdKVMufTEcrh5fUl9+58huw==}
'@types/papaparse@5.5.2':
resolution: {integrity: sha512-gFnFp/JMzLHCwRf7tQHrNnfhN4eYBVYYI897CGX4MY1tzY9l2aLkVyx2IlKZ/SAqDbB3I1AOZW5gTMGGsqWliA==}
'@types/parse-json@4.0.2':
resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
@@ -4936,6 +5009,9 @@ packages:
diffie-hellman@5.0.3:
resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==}
dingtalk-jsapi@3.2.5:
resolution: {integrity: sha512-GHtDTmilJQhr07GNarjlzhvgUkPWc0+52zbN2ToW+JzkydaOwmhiJCTO42+BI+onAlhdfLUbtUnGsjQNDTrM1w==}
dlv@1.1.3:
resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
@@ -6108,6 +6184,10 @@ packages:
resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
hasBin: true
jschardet@3.1.4:
resolution: {integrity: sha512-/kmVISmrwVwtyYU40iQUOp3SUPk2dhNCMsZBQX0R1/jZ8maaXJ/oZIzUOiyOqcgtLnETFKYChbJ5iDC/eWmFHg==}
engines: {node: '>=0.1.90'}
jsdoc-type-pratt-parser@4.8.0:
resolution: {integrity: sha512-iZ8Bdb84lWRuGHamRXFyML07r21pcwBrLkHEuHgEY5UbCouBwv7ECknDRKzsQIXMiqpPymqtIf8TC/shYKB5rw==}
engines: {node: '>=12.0.0'}
@@ -7137,6 +7217,9 @@ packages:
resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
engines: {node: '>= 0.6.0'}
promise-polyfill@7.1.2:
resolution: {integrity: sha512-FuEc12/eKqqoRYIGBrUptCBRhobL19PS2U31vMNTfyck1FxPyMfgsXyW4Mav85y/ZN1hop3hOwRlUDok23oYfQ==}
prop-types@15.8.1:
resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
@@ -12187,7 +12270,7 @@ snapshots:
dependencies:
undici-types: 6.21.0
'@types/papaparse@5.5.1':
'@types/papaparse@5.5.2':
dependencies:
'@types/node': 18.15.0
@@ -13535,6 +13618,10 @@ snapshots:
miller-rabin: 4.0.1
randombytes: 2.1.0
dingtalk-jsapi@3.2.5:
dependencies:
promise-polyfill: 7.1.2
dlv@1.1.3: {}
doctrine@3.0.0:
@@ -14958,6 +15045,8 @@ snapshots:
dependencies:
argparse: 2.0.1
jschardet@3.1.4: {}
jsdoc-type-pratt-parser@4.8.0: {}
jsdoc-type-pratt-parser@7.0.0: {}
@@ -16329,6 +16418,8 @@ snapshots:
process@0.11.10: {}
promise-polyfill@7.1.2: {}
prop-types@15.8.1:
dependencies:
loose-envify: 1.4.0
@@ -16497,7 +16588,7 @@ snapshots:
react-papaparse@4.4.0:
dependencies:
'@types/papaparse': 5.5.1
'@types/papaparse': 5.5.2
papaparse: 5.5.3
react-pdf-highlighter@8.0.0-rc.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
+9 -1
View File
@@ -2,7 +2,15 @@ import type { App, AppCategory } from '@/models/explore'
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
import { useGlobalPublicStore } from '@/context/global-public-context'
import { AccessMode } from '@/models/access-control'
import { fetchAppList, fetchBanners, fetchInstalledAppList, getAppAccessModeByAppId, uninstallApp, updatePinStatus } from './explore'
import {
fetchAppList,
fetchBanners,
fetchInstalledAppList,
fetchOpenInstalledAppList,
getAppAccessModeByAppId,
uninstallApp,
updatePinStatus,
} from './explore'
import { AppSourceType, fetchAppMeta, fetchAppParams } from './share'
const NAME_SPACE = 'explore'
+1 -1
View File
@@ -2,7 +2,7 @@
"compilerOptions": {
"incremental": true,
"target": "es2022",
"jsx": "preserve",
"jsx": "react-jsx",
"lib": [
"dom",
"dom.iterable",