{ "name": "frontend", "version": "0.1.1", "private": true, "scripts": { "dev": "next dev", "build": "next build", "start": "next start", "lint": "eslint", "lint:fix": "eslint --fix", "format": "prettier --write \"src/**/*.{ts,tsx,js,jsx,css,md,json}\"", "format:check": "prettier --check \"src/**/*.{ts,tsx,js,jsx,css,md,json}\"", "depcheck": "depcheck --ignores=\"@types/react,@types/react-dom,@types/node,@types/react-syntax-highlighter,eslint-config-next,tailwindcss,@tailwindcss/postcss,depcheck,prettier,@ai-sdk/openai,@ai-sdk/openai-compatible,@ai-sdk/react,ai,rehype-highlight,zod\" --ignore-patterns=\"*.d.ts,.next/**,playwright-report/**\" --specials=next,webpack,babel --skip-missing", "analyze": "ANALYZE=true next build", "test": "vitest run", "test:integration": "playwright test", "prepare": "cd ../.. && husky frontend/.husky", "check": "knip && jscpd src && depcheck", "check:fix": "knip --fix" }, "dependencies": { "@ai-sdk/openai": "^3.0.12", "@ai-sdk/openai-compatible": "^2.0.13", "@ai-sdk/react": "^3.0.43", "@types/react-syntax-highlighter": "^15.5.13", "ai": "^6.0.41", "framer-motion": "^12.24.10", "lucide-react": "^0.561.0", "markdown-it": "^14.1.0", "mermaid": "^11.12.2", "next": "16.0.10", "react": "19.2.1", "react-dom": "19.2.1", "react-markdown": "^10.1.0", "react-syntax-highlighter": "^16.1.0", "rehype-highlight": "^7.0.2", "remark-gfm": "^4.0.1", "zod": "^4.2.1", "zustand": "^4.5.4" }, "devDependencies": { "@next/bundle-analyzer": "^16.1.3", "@playwright/test": "^1.57.0", "@tailwindcss/postcss": "^4", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", "depcheck": "^1.4.7", "eslint": "^9", "eslint-config-next": "16.0.10", "eslint-plugin-boundaries": "^5.3.1", "husky": "9.1.7", "jscpd": "^4.0.5", "jsdom": "^26.1.0", "knip": "^5.44.2", "lint-staged": "15.2.11", "prettier": "^3.8.0", "tailwindcss": "^4", "typescript": "^5", "vitest": "^3.2.4" } }