219 lines
6.8 KiB
Plaintext
219 lines
6.8 KiB
Plaintext
# yedir-ai environment template
|
|
# Copy this file to .env.local and fill real values locally or in your hosting platform.
|
|
# Never commit real secrets.
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Core / Auth
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# Generate with: openssl rand -base64 32
|
|
AUTH_SECRET=replace-with-random-secret
|
|
|
|
# Stable pepper for user Access Key hashes. Generate independently from AUTH_SECRET.
|
|
ACCESS_KEY_PEPPER=replace-with-random-secret
|
|
|
|
# Authorizes trusted third-party services to provision user-scoped MCP keys.
|
|
# Must contain at least 32 characters. Never expose it to end users or browsers.
|
|
MCP_KEY_PROVISIONING_SECRET=replace-with-random-secret
|
|
|
|
# Public application URL. Required for production and self-hosted Auth.js.
|
|
AUTH_URL=https://your-domain.com
|
|
NEXTAUTH_URL=https://your-domain.com
|
|
NEXT_PUBLIC_APP_URL=https://your-domain.com
|
|
|
|
# Only enable behind a trusted reverse proxy with validated Host headers.
|
|
AUTH_TRUST_HOST=false
|
|
|
|
# Optional OAuth providers.
|
|
GOOGLE_CLIENT_ID=
|
|
GOOGLE_CLIENT_SECRET=
|
|
|
|
# Optional initial admin provisioning.
|
|
ADMIN_EMAIL=
|
|
ADMIN_PASSWORD=
|
|
|
|
# Optional email verification.
|
|
RESEND_API_KEY=
|
|
RESEND_FROM_EMAIL=
|
|
EMAIL_VERIFICATION_SECRET=
|
|
|
|
# Optional scheduled job protection.
|
|
CRON_SECRET=
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Database
|
|
# -----------------------------------------------------------------------------
|
|
|
|
POSTGRES_URL=postgres://user:password@localhost:5432/yedir_ai
|
|
|
|
# Production-safe defaults used by lib/db/index.ts.
|
|
POSTGRES_MAX_CONNECTIONS=10
|
|
POSTGRES_IDLE_TIMEOUT_SECONDS=20
|
|
POSTGRES_CONNECT_TIMEOUT_SECONDS=5
|
|
POSTGRES_MIGRATION_TIMEOUT_SECONDS=120
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Object Storage
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# Vercel Blob fallback.
|
|
BLOB_READ_WRITE_TOKEN=
|
|
|
|
# S3-compatible storage fallback. Database-configured storage takes precedence.
|
|
S3_ENDPOINT=
|
|
S3_REGION=auto
|
|
S3_BUCKET=
|
|
S3_ACCESS_KEY_ID=
|
|
S3_SECRET_ACCESS_KEY=
|
|
S3_PUBLIC_URL=
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# AI Providers
|
|
# -----------------------------------------------------------------------------
|
|
|
|
AI_GATEWAY_API_KEY=
|
|
NEXT_PUBLIC_DEFAULT_CHAT_MODEL=
|
|
|
|
# DashScope / Qwen OpenAI-compatible endpoint.
|
|
DASHSCOPE_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
|
|
DASHSCOPE_API_KEY=
|
|
|
|
# Third-party GPT-compatible provider.
|
|
GTP5_API_URL=
|
|
GTP5_API_KEY=
|
|
GTP5_MODEL=gpt-5-nano
|
|
|
|
# FAL image/video/realtime providers.
|
|
FAL_KEY=
|
|
FAL_API_KEY=
|
|
FAL_BASE_URL=https://fal.run
|
|
FAL_MODEL=
|
|
FAL_REALTIME_MODEL=
|
|
|
|
# Realtime Canvas fallback providers.
|
|
REPLICATE_API_TOKEN=
|
|
BFL_API_KEY=
|
|
BFL_KEY=
|
|
BFL_BASE_URL=
|
|
BFL_MODEL=
|
|
RUNWARE_MODEL=
|
|
|
|
# 3D / CAD providers.
|
|
TRIPO_API_KEY=
|
|
TRIPO_BASE_URL=https://api.tripo3d.ai/v2/openapi
|
|
WORLDLABS_API_KEY=
|
|
WORLDLABS_BASE_URL=
|
|
WORLDLABS_IMPORT_TOKEN=
|
|
WORLDLABS_KEY_POOL_IMPORT_TOKEN=
|
|
WORLDLABS_API_TIMEOUT_MS=180000
|
|
WORLDLABS_TASK_CREATE_TIMEOUT_MS=180000
|
|
WORLDLABS_TASK_STATUS_TIMEOUT_MS=180000
|
|
KITTYCAD_API_TOKEN=
|
|
KITTYCAD_API_KEY=
|
|
KITTYCAD_BASE_URL=https://api.zoo.dev
|
|
ZOO_API_TOKEN=
|
|
ZOO_BASE_URL=https://api.zoo.dev
|
|
|
|
# Pascal Editor self-hosted workspace. In local development, leaving this blank
|
|
# makes /pascal-editor auto-detect http://localhost:3002. For production or a
|
|
# fixed deployment, point this to your self-hosted Pascal service or static
|
|
# /vendor/pascal-editor/index.html bundle.
|
|
NEXT_PUBLIC_PASCAL_EDITOR_URL=
|
|
PASCAL_EDITOR_URL=
|
|
# Shared only by the main app, Nginx, and the private Pascal service. Generate a
|
|
# long random value; never expose it through NEXT_PUBLIC_* variables.
|
|
PASCAL_PROXY_SECRET=
|
|
|
|
# RUXA / video callback.
|
|
RUXA_CALLBACK_URL=
|
|
RUXA_VIDEO_CALLBACK_URL=
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Product Planning Integrations
|
|
# -----------------------------------------------------------------------------
|
|
|
|
PRODUCT_PLANNING_DETAIL_PLUS_BASE_URL=
|
|
PRODUCT_PLANNING_DETAIL_PLUS_INTERNAL_BASE_URL=
|
|
PRODUCT_PLANNING_DETAIL_PLUS_API_KEY=
|
|
PRODUCT_PLANNING_QA_TOKEN=
|
|
TAOBAO_API_KEY=
|
|
TAOBAO_API_SECRET=
|
|
TAOBAO_SALE_API_TOKEN=
|
|
|
|
PRODUCT_PLANNING_DB_HOST=
|
|
PRODUCT_PLANNING_DB_PORT=3306
|
|
PRODUCT_PLANNING_DB_DATABASE=
|
|
PRODUCT_PLANNING_DB_NAME=
|
|
PRODUCT_PLANNING_DB_USER=
|
|
PRODUCT_PLANNING_DB_PASSWORD=
|
|
PRODUCT_PLANNING_DB_CHARSET=utf8mb4
|
|
PRODUCT_PLANNING_DB_SSL=false
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Home Performance / Queues
|
|
# -----------------------------------------------------------------------------
|
|
|
|
CANVAS_IMAGE_TASK_CONCURRENCY=3
|
|
CANVAS_IMAGE_TASK_BATCH_DISPATCH_INTERVAL_MS=1000
|
|
EXTERNAL_IMAGE_API_MAX_CONCURRENT=3
|
|
EXTERNAL_IMAGE_API_MAX_QUEUE=20
|
|
EXTERNAL_IMAGE_API_QUEUE_TIMEOUT_MS=120000
|
|
|
|
# Browser direct uploads use signed OSS/S3 URLs. Configure CORS and lifecycle
|
|
# with the scripts below after changing the default storage bucket.
|
|
DIRECT_UPLOAD_CORS_ORIGINS=https://ai.yydd.ai,https://yydd.ai
|
|
DIRECT_UPLOAD_ABORT_INCOMPLETE_DAYS=2
|
|
DIRECT_UPLOAD_LIFECYCLE_PREFIX=uploads/direct/
|
|
DIRECT_UPLOAD_LIFECYCLE_RULE_ID=abort-incomplete-direct-upload-parts
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Agent / PSD Runtime
|
|
# -----------------------------------------------------------------------------
|
|
|
|
AGENT_FORCE_LLM_PLANNER=false
|
|
AGENT_FORCE_QWEN3VL_FALLBACK=false
|
|
AGENT_IMAGE_GEN_LLM_OPTIMIZER_ENABLED=true
|
|
AGENT_LLM_PROMPT_OPTIMIZER_ENABLED=true
|
|
AGENT_REPLACEMENT_PARALLEL_WORKER_COUNT=2
|
|
AGENT_PSD_LOCAL_CACHE_DIR=
|
|
AGENT_PSD_REMOTE_ASSET_CACHE_DISABLED=false
|
|
AGENT_PSD_REMOTE_ASSET_CACHE_MAX_BYTES=
|
|
AGENT_PSD_REMOTE_ASSET_CACHE_MAX_ENTRY_BYTES=
|
|
AGENT_PSD_REMOTE_ASSET_CACHE_TTL_MS=
|
|
AGENT_PSD_RENDER_PNG_COMPRESSION_LEVEL=6
|
|
AGENT_PSD_RENDER_TASK_CONCURRENCY=2
|
|
NEXT_PUBLIC_AGENT_STYLE_PERF_MONITOR=true
|
|
NEXT_PUBLIC_AGENT_STYLE_PERF_SAMPLE_RATE=0.01
|
|
NEXT_PUBLIC_AGENT_STYLE_OPTIMIZED_RENDER=true
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Logging / Observability
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# debug | info | warn | error | silent
|
|
LOG_LEVEL=info
|
|
|
|
# Stack traces remain disabled in production unless explicitly enabled.
|
|
LOG_INCLUDE_STACK=false
|
|
|
|
# Client logs are silent in production unless this is true.
|
|
NEXT_PUBLIC_ENABLE_CLIENT_LOGS=false
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Optional Jobs
|
|
# -----------------------------------------------------------------------------
|
|
|
|
VIDEO_ARCHIVE_DELAY_HOURS=24
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Test / Local Dev
|
|
# -----------------------------------------------------------------------------
|
|
|
|
PORT=3001
|
|
PLAYWRIGHT=false
|
|
CI_PLAYWRIGHT=false
|
|
PLAYWRIGHT_TEST_BASE_URL=http://127.0.0.1:3001
|
|
SMOKE_BASE_URL=http://127.0.0.1:3001
|
|
SMOKE_TIMEOUT_MS=20000
|
|
DISABLE_PERF_GUARD_AUTO_INSTALL=false
|