{ "name": "penx-root", "private": true, "scripts": { "build": "turbo run build", "build:web": "npm run lingui && turbo run build -F web...", "build:desktop": "npm run lingui && turbo run build -F desktop...", "build:mac": "npm run lingui && turbo run build:mac -F penx...", "build:win": "npm run lingui && turbo run build:win -F penx...", "build:linux": "npm run lingui && turbo run build:linux -F penx...", "install-app-deps": "turbo run install-app-deps -F penx...", "dev": "turbo run dev", "dev:web": "turbo run dev -F web...", "lingui": "lingui extract --clean", "lingui:compile": "lingui compile --typescript", "clean": "find . -name 'node_modules' -type d -exec rm -rf '{}' +", "lint": "turbo run lint", "format": "prettier --write \"**/*.{ts,tsx,md}\"", "check-types": "turbo run check-types" }, "dependencies": { "@ai-sdk/anthropic": "^1.1.17", "@ai-sdk/deepseek": "^0.1.13", "@ai-sdk/google": "^1.1.25", "@ai-sdk/openai": "^1.1.9", "@ai-sdk/perplexity": "^1.0.6", "@ai-sdk/react": "^1.2.8", "@ai-sdk/xai": "^1.2.10", "@ariakit/react": "^0.4.13", "@aws-sdk/client-ses": "^3.749.0", "@capacitor/camera": "^7.0.1", "@capacitor/filesystem": "^7.1.1", "@capacitor/keyboard": "7.0.1", "@codemirror/lang-javascript": "^6.2.2", "@codemirror/lang-python": "^6.1.6", "@codemirror/state": "^6.5.0", "@codemirror/theme-one-dark": "^6.1.2", "@codemirror/view": "^6.35.3", "@dnd-kit/core": "^6.3.1", "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", "@electric-sql/client": "^1.0.5", "@electric-sql/pglite": "^0.3.4", "@emoji-mart/data": "1.2.1", "@emoji-mart/react": "^1.1.1", "@faker-js/faker": "^9.4.0", "@fower/color-helper": "^2.1.3", "@fower/react": "^2.1.3", "@glideapps/glide-data-grid": "^6.0.3", "@hono/node-server": "^1.15.0", "@hookform/resolvers": "^3.10.0", "@ionic/react": "^8.6.1", "@ionic/react-router": "^8.6.1", "@lingui/core": "5.3.1", "@lingui/detect-locale": "5.3.1", "@lingui/react": "5.3.1", "@lobehub/icons": "^2.0.0", "@octokit/app": "^15.1.1", "@octokit/auth-app": "^7.1.3", "@octokit/core": "^6.1.2", "@octokit/oauth-app": "^7.1.3", "@octokit/openapi-types": "^22.2.0", "@pollinations/react": "^2.0.7", "@radix-ui/react-accordion": "^1.2.3", "@radix-ui/react-alert-dialog": "^1.1.6", "@radix-ui/react-avatar": "^1.1.3", "@radix-ui/react-checkbox": "^1.1.4", "@radix-ui/react-collapsible": "^1.1.3", "@radix-ui/react-context-menu": "^2.2.6", "@radix-ui/react-dialog": "^1.1.6", "@radix-ui/react-dropdown-menu": "^2.1.6", "@radix-ui/react-hover-card": "^1.1.6", "@radix-ui/react-label": "^2.1.2", "@radix-ui/react-popover": "^1.1.6", "@radix-ui/react-progress": "^1.1.2", "@radix-ui/react-radio-group": "^1.2.0", "@radix-ui/react-scroll-area": "^1.2.3", "@radix-ui/react-select": "^2.1.1", "@radix-ui/react-separator": "^1.1.2", "@radix-ui/react-slot": "^1.1.2", "@radix-ui/react-switch": "^1.1.0", "@radix-ui/react-tabs": "^1.1.0", "@radix-ui/react-toggle": "^1.1.2", "@radix-ui/react-toggle-group": "^1.1.2", "@radix-ui/react-toolbar": "^1.1.2", "@radix-ui/react-tooltip": "^1.1.8", "@tanstack/react-query": "^5.74.3", "@tanstack/react-virtual": "^3.13.10", "@tauri-apps/api": "2.5.0", "@tauri-apps/plugin-dialog": "2.2.1", "@tauri-apps/plugin-fs": "2.2.1", "@tauri-apps/plugin-http": "^2.2.0", "@tauri-apps/plugin-opener": "^2", "@tauri-apps/plugin-process": "^2.2.1", "@tauri-apps/plugin-updater": "^2.7.1", "@tiptap/core": "^2.12.0", "@tiptap/extension-placeholder": "^2.14.0", "@tiptap/pm": "^2.11.2", "@tiptap/react": "^2.11.2", "@tiptap/starter-kit": "^2.12.0", "@trpc/client": "11.1.2", "@trpc/next": "11.1.2", "@trpc/react-query": "11.1.2", "@trpc/server": "11.1.2", "@types/lowlight": "^2.0.1", "@udecode/cn": "^48.0.3", "@uiw/react-color": "^2.4.5", "@uploadthing/react": "7.1.0", "@vercel/functions": "^2.0.0", "ai": "^4.1.24", "array-move": "^4.0.0", "axios": "^1.7.9", "barrelsby": "^2.8.1", "bcrypt-edge": "^0.1.0", "bcrypt-ts": "^6.0.0", "big.js": "^6.2.1", "buffer": "^6.0.3", "cheerio": "^1.0.0", "class-variance-authority": "0.7.1", "classnames": "^2.5.1", "cloudflare": "^3.5.0", "clsx": "^2.1.1", "cmdk": "^1.1.1", "codemirror": "^6.0.1", "cors": "^2.8.5", "crypto-js": "^4.2.0", "date-fns": "^4.1.0", "dexie": "^4.0.9", "diff-match-patch": "^1.0.5", "downshift": "^8.2.3", "drizzle-kit": "^0.31.4", "drizzle-orm": "^0.43.1", "embla-carousel": "^8.6.0", "embla-carousel-react": "^8.6.0", "emoji-mart": "^5.6.0", "emoji-picker-react": "^4.12.0", "escape-html": "^1.0.3", "fast-deep-equal": "^3.1.3", "feed": "^4.2.2", "focus-trap-react": "^10.2.3", "github-slugger": "^2.0.0", "googleapis": "^144.0.0", "graphql-request": "^6.1.0", "gray-matter": "^4.0.3", "html2canvas": "^1.4.1", "html2canvas-pro": "^1.5.11", "idb-keyval": "^6.2.1", "immer": "^10.1.1", "ioredis": "^5.5.0", "iron-session": "^8.0.4", "is-hotkey": "^0.2.0", "js-cookie": "^3.0.5", "jsonwebtoken": "^9.0.2", "jwks-rsa": "^3.2.0", "kubo-rpc-client": "^5.0.1", "ky": "^1.8.1", "lightweight-charts": "^4.2.0", "lodash": "^4.17.21", "lodash.debounce": "^4.0.8", "lowlight": "^3.3.0", "lucide-react": "0.508.0", "masonic": "^4.1.0", "mime": "^4.0.4", "mime-types": "^2.1.35", "mitt": "^3.0.1", "motion": "^12.6.5", "multiformats": "^13.3.1", "nanoid": "^5.0.9", "negotiator": "^1.0.0", "next": "^15.3.0", "next-mdx-remote": "^4.4.1", "next-themes": "^0.3.0", "nextjs-cors": "^2.2.0", "nextjs-google-analytics": "^2.3.7", "nextjs-toploader": "^1.6.12", "nodemailer": "^6.10.0", "novel": "^1.0.2", "octokit": "^4.0.2", "openai": "^5.1.0", "openai-edge": "^1.2.2", "orderedmap": "^2.1.1", "p-retry": "^6.2.1", "papaparse": "^5.5.2", "pdf-lib": "^1.17.1", "podcast": "^2.0.1", "postgres": "^3.4.5", "prisma-extension-pagination": "^0.7.5", "prismjs": "^1.29.0", "prosemirror-example-setup": "^1.2.3", "prosemirror-inputrules": "^1.4.0", "prosemirror-markdown": "^1.13.1", "prosemirror-model": "^1.23.0", "prosemirror-schema-basic": "^1.2.3", "prosemirror-schema-list": "^1.4.1", "prosemirror-state": "^1.4.3", "prosemirror-view": "^1.34.3", "qrcode": "^1.5.4", "query-string": "^9.1.1", "rc-table": "^7.48.1", "re-resizable": "^6.9.11", "react": "^19.0.0", "react-circular-progressbar": "^2.1.0", "react-data-grid": "7.0.0-beta.47", "react-datepicker": "^7.5.0", "react-day-picker": "8.10.1", "react-device-detect": "^2.2.3", "react-dnd": "^16.0.1", "react-dnd-html5-backend": "^16.0.1", "react-dom": "^19.0.0", "react-error-boundary": "^6.0.0", "react-fast-compare": "^3.2.2", "react-grid-layout": "^1.5.1", "react-hook-form": "^7.54.2", "react-inlinesvg": "^4.1.5", "react-intersection-observer": "^9.13.1", "react-is": "^18.3.1", "react-laag": "^2.0.5", "react-lite-youtube-embed": "^2.4.0", "react-markdown": "^10.1.0", "react-merge-refs": "^2.1.1", "react-player": "^2.16.0", "react-remove-scroll": "^2.5.10", "react-resizable": "^3.0.5", "react-resizable-panels": "^2.1.7", "react-responsive": "^10.0.0", "react-textarea-autosize": "^8.5.9", "react-tweet": "^3.2.1", "react-use": "^17.6.0", "reading-time": "^1.5.0", "recharts": "^2.12.7", "remark": "^14.0.3", "remark-gfm": "^4.0.1", "remark-math": "^6.0.0", "remark-parse": "^11.0.0", "rss": "^1.2.2", "sharp": "^0.34.2", "shikwasa": "^2.2.1", "socket.io-client": "^4.7.5", "sonner": "^1.7.4", "stook": "^1.17.0", "stripe": "^17.7.0", "superjson": "^2.2.1", "swr": "^2.2.4", "tailwind-merge": "3.0.1", "tailwind-scrollbar-hide": "^2.0.0", "tailwindcss": "^4.1.4", "tailwindcss-animate": "^1.0.7", "tinykeys": "^3.0.0", "tw-animate-css": "^1.2.4", "underscore": "^1.13.6", "unified": "^11.0.4", "unist-util-visit": "^5.0.0", "uploadthing": "7.2.0", "use-debounce": "^10.0.0", "use-file-picker": "^2.1.2", "use-long-press": "^3.3.0", "usehooks-ts": "^3.1.1", "uuid": "^11.0.2", "vaul": "^1.1.2", "viem": "^2.21.34", "vite-plugin-svgr": "^4.3.0", "xml": "^1.0.1", "zod": "^3.24.3" }, "devDependencies": { "@eslint/eslintrc": "^3", "@ianvs/prettier-plugin-sort-imports": "^4.3.1", "@iconify/json": "^2.2.311", "@iconify/tailwind4": "^1.0.4", "@lingui/babel-plugin-lingui-macro": "5.3.1", "@lingui/cli": "5.3.1", "@lingui/loader": "5.3.1", "@lingui/swc-plugin": "5.5.2", "@lingui/vite-plugin": "^5.3.2", "@tailwindcss/forms": "^0.5.10", "@tailwindcss/postcss": "4.0.17", "@tailwindcss/typography": "^0.5.16", "@types/big.js": "^6.2.2", "@types/crypto-js": "^4.2.2", "@types/escape-html": "^1.0.4", "@types/is-hotkey": "^0.1.10", "@types/js-cookie": "^3.0.6", "@types/jsonwebtoken": "^9.0.6", "@types/lodash": "^4.17.13", "@types/lodash.debounce": "^4.0.9", "@types/mime-types": "^2.1.4", "@types/negotiator": "^0.6.3", "@types/node": "^22.13.1", "@types/nodemailer": "^6.4.17", "@types/papaparse": "^5.3.15", "@types/prismjs": "^1.26.3", "@types/qrcode": "^1.5.5", "@types/react": "^19.0.7", "@types/react-datepicker": "^7.0.0", "@types/react-dom": "^19.0.3", "@types/react-grid-layout": "^1.3.5", "@types/react-resizable": "^3.0.8", "@types/turndown": "^5.0.5", "@types/underscore": "^1.13.0", "@types/xml": "^1.0.11", "@vanilla-extract/next-plugin": "^2.4.10", "electron-vite": "^4.0.0", "eslint": "^9", "eslint-config-next": "15.1.6", "eslint-plugin-perfectionist": "4.8.0", "eslint-plugin-unused-imports": "^4.1.3", "prettier": "^3.5.3", "prettier-plugin-packagejson": "^2.5.8", "prettier-plugin-tailwindcss": "^0.5.7", "tailwindcss": "^4.1.4", "turbo": "^2.5.3", "typescript": "5.8.2" }, "peerDependencies": { "@floating-ui/react": "^0.25.4", "jotai": "~2.8.4" }, "pnpm": { "overrides": { "rollup": "4.44.0" } }, "packageManager": "pnpm@9.2.0", "engines": { "node": ">=18" } }