{ "name": "dify-web", "type": "module", "version": "1.13.0", "private": true, "packageManager": "pnpm@10.31.0", "imports": { "#i18n": { "react-server": "./i18n-config/lib.server.ts", "default": "./i18n-config/lib.client.ts" } }, "browserslist": [ "last 1 Chrome version", "last 1 Firefox version", "last 1 Edge version", "last 1 Safari version", "iOS >=15", "Android >= 10", "and_chr >= 126", "and_ff >= 137", "and_uc >= 15.5", "and_qq >= 14.9" ], "engines": { "node": "^22" }, "scripts": { "dev": "next dev", "dev:inspect": "next dev --inspect", "dev:vinext": "vinext dev", "build": "next build", "build:docker": "next build && node scripts/optimize-standalone.js", "build:vinext": "vinext build", "start": "node ./scripts/copy-and-start.mjs", "start:vinext": "vinext start", "lint": "eslint --cache --concurrency=auto", "lint:ci": "eslint --cache --concurrency 2", "lint:fix": "pnpm lint --fix", "lint:quiet": "pnpm lint --quiet", "lint:complexity": "pnpm lint --rule 'complexity: [error, {max: 15}]' --quiet", "lint:report": "pnpm lint --output-file eslint_report.json --format json", "lint:tss": "tsslint --project tsconfig.json", "type-check": "tsc --noEmit", "type-check:tsgo": "tsgo --noEmit", "prepare": "cd ../ && node -e \"if (process.env.NODE_ENV !== 'production'){process.exit(1)} \" || husky ./web/.husky", "gen-icons": "node ./scripts/gen-icons.mjs && eslint --fix app/components/base/icons/src/", "gen-doc-paths": "tsx ./scripts/gen-doc-paths.ts", "uglify-embed": "node ./bin/uglify-embed", "i18n:check": "tsx ./scripts/check-i18n.js", "test": "vitest run", "test:coverage": "vitest run --coverage", "test:ci": "vitest run --coverage --silent=passed-only", "test:watch": "vitest --watch", "analyze-component": "node ./scripts/analyze-component.js", "refactor-component": "node ./scripts/refactor-component.js", "storybook": "storybook dev -p 6006", "storybook:build": "storybook build", "preinstall": "npx only-allow pnpm", "analyze": "next experimental-analyze", "knip": "knip" }, "dependencies": { "@amplitude/analytics-browser": "2.36.2", "@amplitude/plugin-session-replay-browser": "1.25.20", "@base-ui/react": "1.2.0", "@emoji-mart/data": "1.2.1", "@floating-ui/react": "0.27.19", "@formatjs/intl-localematcher": "0.8.1", "@headlessui/react": "2.2.9", "@heroicons/react": "2.2.0", "@lexical/code": "0.41.0", "@lexical/link": "0.41.0", "@lexical/list": "0.41.0", "@lexical/react": "0.41.0", "@lexical/selection": "0.41.0", "@lexical/text": "0.41.0", "@lexical/utils": "0.41.0", "@monaco-editor/react": "4.7.0", "@octokit/core": "7.0.6", "@octokit/request-error": "7.1.0", "@orpc/client": "1.13.6", "@orpc/contract": "1.13.6", "@orpc/openapi-client": "1.13.6", "@orpc/tanstack-query": "1.13.6", "@remixicon/react": "4.9.0", "@sentry/react": "10.42.0", "@streamdown/math": "1.0.2", "@svgdotjs/svg.js": "3.2.5", "@t3-oss/env-nextjs": "0.13.10", "@tailwindcss/typography": "0.5.19", "@tanstack/react-form": "1.28.4", "@tanstack/react-query": "5.90.21", "abcjs": "6.6.2", "ahooks": "3.9.6", "class-variance-authority": "0.7.1", "clsx": "2.1.1", "cmdk": "1.1.1", "copy-to-clipboard": "3.3.3", "cron-parser": "5.5.0", "dayjs": "1.11.19", "decimal.js": "10.6.0", "dompurify": "3.3.2", "echarts": "6.0.0", "echarts-for-react": "3.0.6", "elkjs": "0.11.1", "embla-carousel-autoplay": "8.6.0", "embla-carousel-react": "8.6.0", "emoji-mart": "5.6.0", "es-toolkit": "1.45.1", "fast-deep-equal": "3.1.3", "foxact": "0.2.54", "html-entities": "2.6.0", "html-to-image": "1.11.13", "i18next": "25.8.16", "i18next-resources-to-backend": "1.2.1", "immer": "11.1.4", "jotai": "2.18.0", "js-audio-recorder": "1.0.7", "js-cookie": "3.0.5", "js-yaml": "4.1.1", "jsonschema": "1.5.0", "katex": "0.16.38", "ky": "1.12.0", "lamejs": "1.2.1", "lexical": "0.41.0", "mermaid": "11.13.0", "mime": "4.1.0", "mitt": "3.0.1", "negotiator": "1.0.0", "next": "16.1.6", "next-themes": "0.4.6", "nuqs": "2.8.9", "pinyin-pro": "3.28.0", "qrcode.react": "4.2.0", "qs": "6.15.0", "react": "19.2.4", "react-18-input-autosize": "3.0.0", "react-dom": "19.2.4", "react-easy-crop": "5.5.6", "react-hotkeys-hook": "5.2.4", "react-i18next": "16.5.6", "react-multi-email": "1.0.25", "react-papaparse": "4.4.0", "react-pdf-highlighter": "8.0.0-rc.0", "react-slider": "2.0.6", "react-sortablejs": "6.1.4", "react-syntax-highlighter": "15.6.6", "react-textarea-autosize": "8.5.9", "react-window": "1.8.11", "reactflow": "11.11.4", "remark-breaks": "4.0.0", "scheduler": "0.27.0", "semver": "7.7.4", "sharp": "0.34.5", "sortablejs": "1.15.7", "streamdown": "2.3.0", "string-ts": "2.3.1", "tailwind-merge": "2.6.1", "tldts": "7.0.25", "use-context-selector": "2.0.0", "uuid": "13.0.0", "zod": "4.3.6", "zundo": "2.3.0", "zustand": "5.0.11" }, "devDependencies": { "@antfu/eslint-config": "7.7.0", "@chromatic-com/storybook": "5.0.1", "@egoist/tailwindcss-icons": "1.9.2", "@eslint-react/eslint-plugin": "2.13.0", "@iconify-json/heroicons": "1.2.3", "@iconify-json/ri": "1.2.10", "@mdx-js/loader": "3.1.1", "@mdx-js/react": "3.1.1", "@mdx-js/rollup": "3.1.1", "@next/eslint-plugin-next": "16.1.6", "@next/mdx": "16.1.6", "@rgrove/parse-xml": "4.2.0", "@storybook/addon-docs": "10.2.17", "@storybook/addon-links": "10.2.17", "@storybook/addon-onboarding": "10.2.17", "@storybook/addon-themes": "10.2.17", "@storybook/nextjs-vite": "10.2.17", "@storybook/react": "10.2.17", "@tanstack/eslint-plugin-query": "5.91.4", "@tanstack/react-devtools": "0.9.10", "@tanstack/react-form-devtools": "0.2.17", "@tanstack/react-query-devtools": "5.91.3", "@testing-library/dom": "10.4.1", "@testing-library/jest-dom": "6.9.1", "@testing-library/react": "16.3.2", "@testing-library/user-event": "14.6.1", "@tsslint/cli": "3.0.2", "@tsslint/compat-eslint": "3.0.2", "@tsslint/config": "3.0.2", "@types/js-cookie": "3.0.6", "@types/js-yaml": "4.0.9", "@types/negotiator": "0.6.4", "@types/node": "25.3.5", "@types/postcss-js": "4.1.0", "@types/qs": "6.15.0", "@types/react": "19.2.14", "@types/react-dom": "19.2.3", "@types/react-slider": "1.3.6", "@types/react-syntax-highlighter": "15.5.13", "@types/react-window": "1.8.8", "@types/semver": "7.7.1", "@types/sortablejs": "1.15.9", "@typescript-eslint/parser": "8.56.1", "@typescript/native-preview": "7.0.0-dev.20260309.1", "@vitejs/plugin-react": "5.1.4", "@vitejs/plugin-rsc": "0.5.21", "@vitest/coverage-v8": "4.0.18", "agentation": "2.3.0", "autoprefixer": "10.4.27", "code-inspector-plugin": "1.4.4", "eslint": "10.0.3", "eslint-plugin-better-tailwindcss": "4.3.2", "eslint-plugin-hyoban": "0.14.1", "eslint-plugin-react-hooks": "7.0.1", "eslint-plugin-react-refresh": "0.5.2", "eslint-plugin-sonarjs": "4.0.1", "eslint-plugin-storybook": "10.2.16", "husky": "9.1.7", "iconify-import-svg": "0.1.2", "jsdom": "28.1.0", "jsdom-testing-mocks": "1.16.0", "knip": "5.86.0", "lint-staged": "16.3.2", "nock": "14.0.11", "postcss": "8.5.8", "postcss-js": "5.1.0", "react-server-dom-webpack": "19.2.4", "sass": "1.97.3", "storybook": "10.2.17", "tailwindcss": "3.4.19", "tsx": "4.21.0", "typescript": "5.9.3", "uglify-js": "3.19.3", "vinext": "https://pkg.pr.new/vinext@1a2fd61", "vite": "8.0.0-beta.18", "vite-plugin-inspect": "11.3.3", "vite-tsconfig-paths": "6.1.1", "vitest": "4.0.18", "vitest-canvas-mock": "1.1.3" }, "pnpm": { "overrides": { "@lexical/code": "npm:lexical-code-no-prism@0.41.0", "@monaco-editor/loader": "1.7.0", "@nolyfill/safe-buffer": "npm:safe-buffer@^5.2.1", "array-includes": "npm:@nolyfill/array-includes@^1.0.44", "array.prototype.findlast": "npm:@nolyfill/array.prototype.findlast@^1.0.44", "array.prototype.findlastindex": "npm:@nolyfill/array.prototype.findlastindex@^1.0.44", "array.prototype.flat": "npm:@nolyfill/array.prototype.flat@^1.0.44", "array.prototype.flatmap": "npm:@nolyfill/array.prototype.flatmap@^1.0.44", "array.prototype.tosorted": "npm:@nolyfill/array.prototype.tosorted@^1.0.44", "assert": "npm:@nolyfill/assert@^1.0.26", "brace-expansion@<2.0.2": "2.0.2", "canvas": "^3.2.1", "devalue@<5.3.2": "5.3.2", "es-iterator-helpers": "npm:@nolyfill/es-iterator-helpers@^1.0.21", "esbuild@<0.27.2": "0.27.2", "glob@>=10.2.0,<10.5.0": "11.1.0", "hasown": "npm:@nolyfill/hasown@^1.0.44", "is-arguments": "npm:@nolyfill/is-arguments@^1.0.44", "is-core-module": "npm:@nolyfill/is-core-module@^1.0.39", "is-generator-function": "npm:@nolyfill/is-generator-function@^1.0.44", "is-typed-array": "npm:@nolyfill/is-typed-array@^1.0.44", "isarray": "npm:@nolyfill/isarray@^1.0.44", "object.assign": "npm:@nolyfill/object.assign@^1.0.44", "object.entries": "npm:@nolyfill/object.entries@^1.0.44", "object.fromentries": "npm:@nolyfill/object.fromentries@^1.0.44", "object.groupby": "npm:@nolyfill/object.groupby@^1.0.44", "object.values": "npm:@nolyfill/object.values@^1.0.44", "pbkdf2": "~3.1.5", "pbkdf2@<3.1.3": "3.1.3", "prismjs": "~1.30", "prismjs@<1.30.0": "1.30.0", "safe-buffer": "^5.2.1", "safe-regex-test": "npm:@nolyfill/safe-regex-test@^1.0.44", "safer-buffer": "npm:@nolyfill/safer-buffer@^1.0.44", "side-channel": "npm:@nolyfill/side-channel@^1.0.44", "solid-js": "1.9.11", "string-width": "~8.2.0", "string.prototype.includes": "npm:@nolyfill/string.prototype.includes@^1.0.44", "string.prototype.matchall": "npm:@nolyfill/string.prototype.matchall@^1.0.44", "string.prototype.repeat": "npm:@nolyfill/string.prototype.repeat@^1.0.44", "string.prototype.trimend": "npm:@nolyfill/string.prototype.trimend@^1.0.44", "typed-array-buffer": "npm:@nolyfill/typed-array-buffer@^1.0.44", "which-typed-array": "npm:@nolyfill/which-typed-array@^1.0.44" }, "ignoredBuiltDependencies": [ "canvas", "core-js-pure" ], "onlyBuiltDependencies": [ "@parcel/watcher", "esbuild", "sharp" ] }, "lint-staged": { "*": "eslint --fix --pass-on-unpruned-suppressions" } }