{ "name": "@lobehub/lobehub", "version": "2.1.45", "description": "LobeHub - an open-source,comprehensive AI Agent framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.", "keywords": [ "framework", "chatbot", "chatgpt", "nextjs", "vercel-ai", "openai", "azure-openai", "visual-model", "tts", "stt" ], "homepage": "https://github.com/lobehub/lobehub", "bugs": { "url": "https://github.com/lobehub/lobehub/issues/new/choose" }, "repository": { "type": "git", "url": "https://github.com/lobehub/lobehub.git" }, "license": "MIT", "author": "LobeHub ", "sideEffects": [ "./src/initialize.ts" ], "workspaces": [ "packages/*", "packages/business/*", "e2e", "apps/desktop/src/main" ], "scripts": { "build": "bun run build:spa && bun run build:spa:copy && bun run build:next", "build:analyze": "cross-env NODE_OPTIONS=--max-old-space-size=81920 next experimental-analyze", "build:docker": "pnpm run build:spa && pnpm run build:spa:mobile && pnpm run build:spa:copy && cross-env NODE_OPTIONS=--max-old-space-size=8192 DOCKER=true next build && pnpm run build-sitemap", "build:next": "cross-env NODE_OPTIONS=--max-old-space-size=7168 bun run build:next:raw", "build:next:raw": "next build", "build:raw": "bun run build:spa:raw && bun run build:spa:copy && bun run build:next:raw", "build:spa": "cross-env NODE_OPTIONS=--max-old-space-size=7168 pnpm run build:spa:raw", "build:spa:copy": "tsx scripts/copySpaBuild.mts && tsx scripts/generateSpaTemplates.mts", "build:spa:mobile": "cross-env NODE_OPTIONS=--max-old-space-size=8192 MOBILE=true vite build", "build:spa:raw": "rm -rf public/spa && vite build", "build:vercel": "cross-env-shell NODE_OPTIONS=--max-old-space-size=6144 \"bun run build:raw && bun run db:migrate\"", "build-migrate-db": "bun run db:migrate", "build-sitemap": "tsx ./scripts/buildSitemapIndex/index.ts", "clean:node_modules": "bash -lc 'set -e; echo \"Removing all node_modules...\"; rm -rf node_modules; pnpm -r exec rm -rf node_modules; rm -rf apps/desktop/node_modules; echo \"All node_modules removed.\"'", "db:generate": "drizzle-kit generate && npm run workflow:dbml", "db:migrate": "cross-env MIGRATION_DB=1 tsx ./scripts/migrateServerDB/index.ts", "db:studio": "drizzle-kit studio", "db:visualize": "dbdocs build docs/development/database-schema.dbml --project lobe-chat", "desktop:build:all": "npm run desktop:build:main", "desktop:build:main": "npm run build:main --prefix=./apps/desktop", "desktop:build-channel": "tsx scripts/electronWorkflow/buildDesktopChannel.ts", "desktop:main:build": "npm run desktop:main:build --prefix=./apps/desktop", "desktop:package:app": "npm run desktop:build:all && npm run desktop:package:app:platform", "desktop:package:app:platform": "tsx scripts/electronWorkflow/buildElectron.ts", "desktop:package:local": "npm run desktop:build:all && npm run package:local --prefix=./apps/desktop", "desktop:package:local:reuse": "npm run package:local:reuse --prefix=./apps/desktop", "dev": "tsx scripts/devStartupSequence.mts", "dev:bun": "bun --bun next dev -p 3010", "dev:desktop": "cd apps/desktop && pnpm run dev", "dev:docker": "docker compose -f docker-compose/dev/docker-compose.yml up -d --wait postgresql redis rustfs searxng", "dev:docker:down": "docker compose -f docker-compose/dev/docker-compose.yml down", "dev:docker:reset": "docker compose -f docker-compose/dev/docker-compose.yml down -v && rm -rf docker-compose/dev/data && npm run dev:docker && pnpm db:migrate", "dev:next": "next dev -p 3010", "dev:spa": "vite --port 9876", "dev:spa:mobile": "cross-env MOBILE=true vite --port 3012", "docs:cdn": "npm run workflow:docs-cdn && npm run lint:mdx", "docs:i18n": "lobe-i18n md && npm run lint:mdx", "docs:seo": "lobe-seo && npm run lint:mdx", "e2e": "cd e2e && npm run test", "e2e:install": "playwright install", "e2e:ui": "playwright test --ui", "hotfix:branch": "tsx ./scripts/hotfixWorkflow/index.ts", "i18n": "npm run workflow:i18n && lobe-i18n && prettier -c --write \"locales/**\"", "i18n:unused": "tsx ./scripts/i18nWorkflow/analyzeUnusedKeys.ts", "i18n:unused-clean": "tsx ./scripts/i18nWorkflow/cleanUnusedKeys.ts", "lint": "npm run lint:ts && npm run lint:style && npm run type-check && npm run lint:circular", "lint:circular": "npm run lint:circular:main && npm run lint:circular:packages", "lint:circular:main": "dpdm src/**/*.ts --no-warning --no-tree --exit-code circular:1 --no-progress -T true --skip-dynamic-imports circular", "lint:circular:packages": "dpdm packages/**/src/**/*.ts --no-warning --no-tree --exit-code circular:1 --no-progress -T true --skip-dynamic-imports circular", "lint:console": "tsx scripts/checkConsoleLog.mts", "lint:md": "remark . --silent --output", "lint:mdx": "npm run workflow:mdx && remark \"docs/**/*.mdx\" -r ./.remarkrc.mdx.mjs --silent --output && eslint \"docs/**/*.mdx\" --quiet --fix", "lint:style": "stylelint \"{src,tests}/**/*.{js,jsx,ts,tsx}\" --fix", "lint:ts": "eslint src/ tests/ --concurrency=auto", "lint:unused": "knip --include files,exports,types,enumMembers,duplicates", "prepare": "husky", "prettier": "prettier -c --write \"**/**\"", "pull": "git pull", "qstash": "pnpx @upstash/qstash-cli@latest dev", "reinstall": "rm -rf .next && rm -rf node_modules && rm -rf ./packages/*/node_modules && pnpm -r exec rm -rf node_modules && pnpm install", "reinstall:desktop": "rm -rf pnpm-lock.yaml && rm -rf node_modules && pnpm -r exec rm -rf node_modules && pnpm install --node-linker=hoisted", "release": "semantic-release", "release:branch": "tsx ./scripts/releaseWorkflow/index.ts", "self-hosting:docker": "docker build -t lobehub:local .", "self-hosting:docker-cn": "docker build -t lobehub-local --build-arg USE_CN_MIRROR=true .", "start": "next start -p 3210", "stylelint": "stylelint \"src/**/*.{js,jsx,ts,tsx}\" --fix", "test": "npm run test-app && npm run test-server", "test:e2e": "pnpm --filter @lobechat/e2e-tests test", "test:e2e:smoke": "pnpm --filter @lobechat/e2e-tests test:smoke", "test:update": "vitest -u", "test-app": "vitest run", "test-app:coverage": "vitest --coverage --silent='passed-only'", "tunnel:cloudflare": "cloudflared tunnel --url http://localhost:3010", "tunnel:ngrok": "ngrok http http://localhost:3011", "type-check": "tsgo --noEmit", "type-check:tsc": "tsc --noEmit", "workflow:cdn": "tsx ./scripts/cdnWorkflow/index.ts", "workflow:changelog": "tsx ./scripts/changelogWorkflow/index.ts", "workflow:changelog:gen": "tsx ./scripts/changelogWorkflow/generateChangelog.ts", "workflow:countCharters": "tsx scripts/countEnWord.ts", "workflow:dbml": "tsx ./scripts/dbmlWorkflow/index.ts", "workflow:docs": "tsx ./scripts/docsWorkflow/index.ts", "workflow:docs-cdn": "tsx ./scripts/docsWorkflow/autoCDN.ts", "workflow:i18n": "tsx ./scripts/i18nWorkflow/index.ts", "workflow:mdx": "tsx ./scripts/mdxWorkflow/index.ts", "workflow:mobile-spa": "tsx scripts/mobileSpaWorkflow/index.ts", "workflow:readme": "tsx ./scripts/readmeWorkflow/index.ts", "workflow:set-desktop-version": "tsx ./scripts/electronWorkflow/setDesktopVersion.ts" }, "lint-staged": { "*.md": [ "remark --silent --output --", "prettier --write --no-error-on-unmatched-pattern" ], "*.mdx": [ "remark -r ./.remarkrc.mdx.mjs --silent --output --", "eslint --quiet --fix" ], "*.json": [ "prettier --write --no-error-on-unmatched-pattern" ], "*.{mjs,cjs}": [ "eslint --fix", "prettier --write" ], "*.{js,jsx}": [ "eslint --fix", "stylelint --fix", "prettier --write" ], "*.{ts,tsx}": [ "stylelint --fix", "eslint --fix", "prettier --parser=typescript --write" ], "*.{yml,yaml}": [ "eslint --fix" ] }, "overrides": { "@types/react": "19.2.13", "better-auth": "1.4.6", "better-call": "1.1.8", "drizzle-orm": "^0.45.1", "fast-xml-parser": "5.4.2", "pdfjs-dist": "5.4.530", "stylelint-config-clean-order": "7.0.0" }, "dependencies": { "@ant-design/icons": "^6.1.0", "@ant-design/pro-components": "^2.8.10", "@anthropic-ai/sdk": "^0.73.0", "@atlaskit/pragmatic-drag-and-drop": "^1.7.7", "@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.1.0", "@aws-sdk/client-bedrock-runtime": "^3.941.0", "@aws-sdk/client-s3": "~3.932.0", "@aws-sdk/s3-request-presigner": "~3.932.0", "@azure-rest/ai-inference": "1.0.0-beta.5", "@azure/core-auth": "^1.10.1", "@better-auth/expo": "1.4.6", "@better-auth/passkey": "1.4.6", "@cfworker/json-schema": "^4.1.1", "@chat-adapter/discord": "^4.17.0", "@chat-adapter/state-ioredis": "^4.17.0", "@chat-adapter/telegram": "^4.17.0", "@codesandbox/sandpack-react": "^2.20.0", "@discordjs/rest": "^2.6.0", "@dnd-kit/core": "^6.3.1", "@dnd-kit/utilities": "^3.2.2", "@emoji-mart/data": "^1.2.1", "@emoji-mart/react": "^1.1.1", "@emotion/react": "^11.14.0", "@fal-ai/client": "^1.8.4", "@floating-ui/react": "^0.27.19", "@formkit/auto-animate": "^0.9.0", "@google/genai": "^1.38.0", "@henrygd/queue": "^1.2.0", "@huggingface/inference": "^4.13.10", "@icons-pack/react-simple-icons": "^13.8.0", "@khmyznikov/pwa-install": "0.3.9", "@langchain/community": "^0.3.59", "@lexical/utils": "^0.39.0", "@lobechat/adapter-lark": "workspace:*", "@lobechat/adapter-qq": "workspace:*", "@lobechat/agent-runtime": "workspace:*", "@lobechat/builtin-agents": "workspace:*", "@lobechat/builtin-skills": "workspace:*", "@lobechat/builtin-tool-agent-builder": "workspace:*", "@lobechat/builtin-tool-agent-documents": "workspace:*", "@lobechat/builtin-tool-agent-management": "workspace:*", "@lobechat/builtin-tool-calculator": "workspace:*", "@lobechat/builtin-tool-cloud-sandbox": "workspace:*", "@lobechat/builtin-tool-group-agent-builder": "workspace:*", "@lobechat/builtin-tool-group-management": "workspace:*", "@lobechat/builtin-tool-gtd": "workspace:*", "@lobechat/builtin-tool-knowledge-base": "workspace:*", "@lobechat/builtin-tool-local-system": "workspace:*", "@lobechat/builtin-tool-memory": "workspace:*", "@lobechat/builtin-tool-notebook": "workspace:*", "@lobechat/builtin-tool-page-agent": "workspace:*", "@lobechat/builtin-tool-remote-device": "workspace:*", "@lobechat/builtin-tool-skill-store": "workspace:*", "@lobechat/builtin-tool-skills": "workspace:*", "@lobechat/builtin-tool-tools": "workspace:*", "@lobechat/builtin-tool-topic-reference": "workspace:*", "@lobechat/builtin-tool-web-browsing": "workspace:*", "@lobechat/builtin-tools": "workspace:*", "@lobechat/business-config": "workspace:*", "@lobechat/business-const": "workspace:*", "@lobechat/config": "workspace:*", "@lobechat/const": "workspace:*", "@lobechat/context-engine": "workspace:*", "@lobechat/conversation-flow": "workspace:*", "@lobechat/database": "workspace:*", "@lobechat/desktop-bridge": "workspace:*", "@lobechat/device-gateway-client": "workspace:*", "@lobechat/edge-config": "workspace:*", "@lobechat/editor-runtime": "workspace:*", "@lobechat/electron-client-ipc": "workspace:*", "@lobechat/electron-server-ipc": "workspace:*", "@lobechat/eval-dataset-parser": "workspace:*", "@lobechat/eval-rubric": "workspace:*", "@lobechat/fetch-sse": "workspace:*", "@lobechat/file-loaders": "workspace:*", "@lobechat/local-file-shell": "workspace:*", "@lobechat/memory-user-memory": "workspace:*", "@lobechat/model-runtime": "workspace:*", "@lobechat/observability-otel": "workspace:*", "@lobechat/openapi": "workspace:*", "@lobechat/prompts": "workspace:*", "@lobechat/python-interpreter": "workspace:*", "@lobechat/ssrf-safe-fetch": "workspace:*", "@lobechat/utils": "workspace:*", "@lobechat/web-crawler": "workspace:*", "@lobehub/analytics": "^1.6.0", "@lobehub/charts": "^5.0.0", "@lobehub/chat-plugin-sdk": "^1.32.4", "@lobehub/chat-plugins-gateway": "^1.9.0", "@lobehub/desktop-ipc-typings": "workspace:*", "@lobehub/editor": "^4.3.1", "@lobehub/icons": "^5.0.0", "@lobehub/market-sdk": "^0.31.3", "@lobehub/tts": "^5.1.2", "@lobehub/ui": "^5.5.0", "@modelcontextprotocol/sdk": "^1.26.0", "@napi-rs/canvas": "^0.1.88", "@neondatabase/serverless": "^1.0.2", "@next/third-parties": "^16.1.5", "@opentelemetry/auto-instrumentations-node": "^0.67.0", "@opentelemetry/exporter-jaeger": "^2.5.0", "@opentelemetry/resources": "^2.2.0", "@opentelemetry/sdk-metrics": "^2.2.0", "@opentelemetry/winston-transport": "^0.19.0", "@react-pdf/renderer": "^4.3.2", "@react-three/drei": "^10.7.7", "@react-three/fiber": "^9.5.0", "@saintno/comfyui-sdk": "^0.2.49", "@t3-oss/env-core": "^0.13.10", "@t3-oss/env-nextjs": "^0.13.10", "@tanstack/react-query": "^5.90.20", "@trpc/client": "^11.8.1", "@trpc/next": "^11.8.1", "@trpc/react-query": "^11.8.1", "@trpc/server": "^11.8.1", "@upstash/qstash": "^2.8.4", "@upstash/workflow": "^0.2.23", "@vercel/analytics": "^1.6.1", "@vercel/edge-config": "^1.4.3", "@vercel/functions": "^3.3.6", "@vercel/speed-insights": "^1.3.1", "@virtuoso.dev/masonry": "^1.4.0", "@xterm/xterm": "^5.5.0", "@zumer/snapdom": "^1.9.14", "ahooks": "^3.9.6", "antd": "^6.2.1", "antd-style": "4.1.0", "async-retry": "^1.3.3", "bcryptjs": "^3.0.3", "better-auth": "1.4.6", "better-auth-harmony": "^1.2.5", "better-call": "1.1.8", "brotli-wasm": "^3.0.1", "chat": "^4.14.0", "chroma-js": "^3.2.0", "class-variance-authority": "^0.7.1", "cmdk": "^1.1.1", "cookie": "^1.1.1", "countries-and-timezones": "^3.8.0", "dayjs": "^1.11.19", "debug": "^4.4.3", "dexie": "^3.2.7", "diff": "^8.0.3", "discord-api-types": "^0.38.40", "drizzle-orm": "^0.45.1", "drizzle-zod": "^0.5.1", "epub2": "^3.0.2", "es-toolkit": "^1.44.0", "fast-deep-equal": "^3.1.3", "fflate": "^0.8.2", "ffmpeg-static": "^5.3.0", "file-type": "^21.3.0", "fuse.js": "^7.0.0", "gray-matter": "^4.0.3", "html-to-text": "^9.0.5", "i18next": "^25.8.0", "i18next-browser-languagedetector": "^8.2.0", "i18next-resources-to-backend": "^1.2.1", "immer": "^11.1.3", "ioredis": "^5.9.2", "jose": "^6.1.3", "js-sha256": "^0.11.1", "jsonl-parse-stringify": "^1.0.3", "klavis": "^2.15.0", "langchain": "^0.3.37", "langfuse": "^3.38.6", "langfuse-core": "^3.38.6", "lexical": "^0.39.0", "lucide-react": "^0.562.0", "mammoth": "^1.11.0", "marked": "^17.0.1", "mdast-util-to-markdown": "^2.1.2", "model-bank": "workspace:*", "motion": "^12.29.0", "nanoid": "^5.1.6", "next": "^16.1.5", "next-mdx-remote": "^6.0.0", "next-themes": "^0.4.6", "nextjs-toploader": "^3.9.17", "node-machine-id": "^1.1.12", "nodemailer": "^7.0.12", "numeral": "^2.0.6", "nuqs": "^2.8.6", "officeparser": "5.1.1", "ogl": "^1.0.11", "oidc-provider": "^9.6.0", "ollama": "^0.6.3", "openai": "^4.104.0", "openapi-fetch": "^0.14.1", "partial-json": "^0.1.7", "path-browserify-esm": "^1.0.6", "pathe": "^2.0.3", "pdf-parse": "^1.1.4", "pdfjs-dist": "5.4.530", "pdfkit": "^0.17.2", "pg": "^8.17.2", "plaiceholder": "^3.0.0", "polished": "^4.3.1", "posthog-js": "~1.278.0", "pure-rand": "^7.0.1", "pwa-install-handler": "^2.6.3", "query-string": "^9.3.1", "random-words": "^2.0.1", "rc-util": "^5.44.4", "react": "^19.2.3", "react-confetti": "^6.4.0", "react-dom": "^19.2.3", "react-fast-marquee": "^1.6.5", "react-hotkeys-hook": "^5.2.3", "react-i18next": "^16.5.3", "react-lazy-load": "^4.0.1", "react-markdown": "^10.1.0", "react-pdf": "^10.3.0", "react-responsive": "^10.0.1", "react-rnd": "^10.5.2", "react-router-dom": "^7.13.0", "react-scan": "^0.5.3", "react-virtuoso": "^4.18.1", "react-wrap-balancer": "^1.1.1", "remark": "^15.0.1", "remark-gfm": "^4.0.1", "remark-html": "^16.0.1", "remove-markdown": "^0.6.3", "resend": "6.8.0", "resolve-accept-language": "^3.1.15", "rtl-detect": "^1.1.2", "semver": "^7.7.3", "sharp": "^0.34.5", "shiki": "^3.21.0", "stripe": "^17.7.0", "superjson": "^2.2.6", "svix": "^1.84.1", "swr": "^2.3.8", "systemjs": "^6.15.1", "three": "^0.181.2", "tokenx": "^1.3.0", "ts-md5": "^2.0.1", "ua-parser-js": "^1.0.41", "undici": "^7.19.1", "unist-builder": "^4.0.0", "url-join": "^5.0.0", "use-merge-value": "^1.2.0", "uuid": "^13.0.0", "virtua": "^0.48.3", "word-extractor": "^1.0.4", "ws": "^8.19.0", "xast-util-to-xml": "^4.0.0", "xastscript": "^4.0.0", "yaml": "^2.8.2", "zod": "^3.25.76", "zod-to-json-schema": "^3.25.1", "zustand": "5.0.4", "zustand-utils": "^2.1.1" }, "devDependencies": { "@commitlint/cli": "^19.8.1", "@edge-runtime/vm": "^5.0.0", "@huggingface/tasks": "^0.19.80", "@inquirer/prompts": "^8.2.0", "@lobechat/agent-tracing": "workspace:*", "@lobechat/types": "workspace:*", "@lobehub/i18n-cli": "^1.26.0", "@lobehub/lint": "2.1.5", "@lobehub/market-types": "^1.12.3", "@lobehub/seo-cli": "^1.7.0", "@peculiar/webcrypto": "^1.5.0", "@playwright/test": "^1.58.0", "@prettier/sync": "^0.6.1", "@semantic-release/exec": "^6.0.3", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", "@testing-library/user-event": "^14.6.1", "@types/async-retry": "^1.4.9", "@types/chroma-js": "^3.1.2", "@types/crypto-js": "^4.2.2", "@types/debug": "^4.1.12", "@types/fs-extra": "^11.0.4", "@types/ip": "^1.1.3", "@types/json-schema": "^7.0.15", "@types/node": "^24.10.9", "@types/nodemailer": "^7.0.5", "@types/numeral": "^2.0.5", "@types/oidc-provider": "^9.5.0", "@types/pdfkit": "^0.17.4", "@types/pg": "^8.16.0", "@types/react": "19.2.13", "@types/react-dom": "^19.2.3", "@types/rtl-detect": "^1.0.3", "@types/semver": "^7.7.1", "@types/systemjs": "^6.15.4", "@types/three": "^0.181.0", "@types/ua-parser-js": "^0.7.39", "@types/unist": "^3.0.3", "@types/ws": "^8.18.1", "@types/xast": "^2.0.4", "@typescript/native-preview": "7.0.0-dev.20260207.1", "@vitejs/plugin-react": "^5.1.4", "@vitest/coverage-v8": "^3.2.4", "ajv": "^8.17.1", "ajv-keywords": "^5.1.0", "code-inspector-plugin": "1.3.3", "commitlint": "^19.8.1", "consola": "^3.4.2", "cross-env": "^10.1.0", "crypto-js": "^4.2.0", "dbdocs": "^0.16.2", "dotenv": "^17.2.3", "dotenv-expand": "^12.0.3", "dpdm-fast": "^1.0.14", "drizzle-dbml-generator": "^0.10.0", "drizzle-kit": "^0.31.8", "eslint": "10.0.2", "eslint-plugin-mdx": "^3.7.0", "fake-indexeddb": "^6.2.5", "fs-extra": "^11.3.3", "glob": "^13.0.0", "happy-dom": "^20.3.7", "husky": "^9.1.7", "import-in-the-middle": "^2.0.5", "just-diff": "^6.0.2", "knip": "^5.82.1", "linkedom": "^0.18.12", "lint-staged": "^16.2.7", "markdown-table": "^3.0.4", "mcp-hello-world": "^1.1.2", "mime": "^4.1.0", "node-fetch": "^3.3.2", "node-gyp": "^11.5.0", "openapi-typescript": "^7.10.1", "p-map": "^7.0.4", "prettier": "^3.8.1", "remark-cli": "^12.0.1", "remark-frontmatter": "^5.0.0", "remark-mdx": "^3.1.1", "remark-parse": "^11.0.0", "require-in-the-middle": "^8.0.1", "semantic-release": "^21.1.2", "stylelint": "^16.12.0", "tsx": "^4.21.0", "type-fest": "^5.4.1", "typescript": "^5.9.3", "unified": "^11.0.5", "unist-util-visit": "^5.1.0", "vite": "^7.3.1", "vite-plugin-node-polyfills": "^0.25.0", "vite-plugin-pwa": "^1.2.0", "vite-tsconfig-paths": "^6.1.1", "vitest": "^3.2.4" }, "packageManager": "pnpm@10.20.0", "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org" }, "pnpm": { "onlyBuiltDependencies": [ "ffmpeg-static" ], "overrides": { "@types/react": "19.2.13", "better-auth": "1.4.6", "better-call": "1.1.8", "drizzle-orm": "^0.45.1", "fast-xml-parser": "5.4.2", "pdfjs-dist": "5.4.530", "stylelint-config-clean-order": "7.0.0" } } }