5bbc5ceccc
* feat(ai): add dependencies * chore: bump zod version to default version * feat(ai): define types and model constants * feat(ai): ollama provider for local LLM * feat(ai): implement openrouter provider for cloud models * feat(settings): register ai settings panel in global dialog * refactor(ai): expose provider factory and service layer entry point * test(ai): add unit tests for the providers * test(ai): add unit tests for the providers * feat(ai): settings panel for ai configurations * refactor(ai): rewrite aipanel with autosave and greyed out disabled state * fix: remove unused onClose prop from aipanel * test(ai): update mock data * refactor(ai): remove models * refactor: use centralised defaults in system defaults * chore(ai): remove comments * fix(ai): merge default ai settings on load to prevent undefined values * refactor(ai): rewrite settings panel with autosave and model input * feat(ai): add ai tab with simplified highlighting * feat(sidebar): render AIAssistant for ai tab * feat(ai): add chat UI * feat(ai); add chat service with RAG context * feat(ai): temp debug logger * feat(ai): add RAG service * feat(ai): add text chunking utility * feat(ai): add structured method * feat(ai): add chatstructured method * feat(ai): add rag types nd structured output schema * feat(ai): add aistore, indexdb, bm25 * fix: update lock file * feat(ai): update types for AI SDK v5 * feat(ai): add placeholder gateway model constants * refactor(ai): update OllamaProvider for AI SDK * feat(ai): add native gateway provider * refactor(ai): update provider exports * refactor(ai): use streamText from AI SDK * refactor(ai): use embed from AI sdk * refactor(ai): update provider factory exports * feat(ai): add AI Elements and shadcn components * config: add shadcn component config * deps: add AI SDK and AI Elements dependencies * config: add ai packages to transpilePackages * refactor(ai): remove OpenRouterProvider and old tests * feat(ai):add assistant-ui components * feat(ai): add TauriChatAdapter for assistant-ui runtime * refactor(ai): remove ai-elements components * dep(ai): install assistant-ui and update next config * chore(ai): export adapters from service index * feat(ui): enhance ui components for assistant integration * feat(settings): migrate ai settings to gateway * feat(sidebar): integrate assistant-ui * feat: add ai settings toggle to sidebar content * feat: conditionally show ai tab in sidebar navigation * feat: update ai model constants for cheaper options * feat: add gateway provider with proxied embedding * feat: add timeouts to ollama provider health checks * feat: add retry logic to rag service embeddings * feat: add error recovery to ai store * feat: add ai feature tests * feat: add ai api endpoints * feat: add proxied gateway embedding provider * feat: add ai runtime utilities * feat: add ai retry utilities * feat: add tauri env example template * feat: add web env example template * chore: add env * feat(ai): update models and pricing, remove GLM-4.7-FlashX * feat(ai): improve system prompt with official headings and no numeric citations * feat(ai): optimize system prompt for tauri chat * feat(ui): refine ai chat UI and relocate sources * feat(ui): update ai settings panel with model pricing and custom model support * feat(ai): add custom model support to ai settings * test(ai): update constants tests for removed model * feat(api): implement ai chat proxy route * feat(api): implement ai embedding proxy route * feat(ai): implement ai gateway health check and proxy logic * feat(ai): simplify proxied embedding provider * feat(ui): improve markdown text rendering * feat(ui): add input group component * test(ai): update ai provider tests * feat(ai): add pageNumber to text chunk schema * feat(ai): implement page-based chunking with 1500 char formula * feat(ai): bump db to v2 and add store reset migration * feat(ai): transition rag pipeline to page level spoiler filtering * feat(ai): overhaul readest persona and antijailbreak prompt * feat(ai): update tauri adapter for page tracking and persona * chore(ai): export aiStore and logger from core index * feat(reader): integrate page tracking and manual index reset * feat(ui): add re-index action and reset logic to chat * chore: sync pnpm lockfile with ai dependencies * feat(utils): add browser-safe file utilities for web builds * refactor(utils): use dynamic tauri fs import to prevent web crashes * refactor(services): defer osType call to init() for web compatibility * refactor(services): import RemoteFile from file.web * refactor(services): import ClosableFile from file.web * fix(libs): cast Entry to any for getData access * fix(annotator): cast Overlayer to any for bubble access * refactor(ai): replace SparklesIcon with BookOpenIcon for index prompt * test(ai): add pageNumber to TextChunk mocks * test(ai): fix chunkSection signature in tests * chore: update files * fix(ai): prevent useLocalRuntime crash when adapter is null * refactor: optimize annotator overlay drawing * feat: stabilize AI assistant runtime and adapter * refactor: improve document zip loader type safety * feat: update tauri chat adapter for dynamic options * fix: restore architecture comments and refine platform properties * build: update lockfile with assistant-ui patch * fix(library): patch @assistant-ui/react for runtime initialization * build: update dependencies in readest-app * build: update root dependencies and patch configuration * fix(ai): patch @assistant-ui/react for thread deletion and runtime init * fix(ai): update assistant-ui patch with dist guards and deletion fallback * build: sync lockfile with assistant-ui patch updates * chore(env): update .gitignore by removing .env files from it * chore(env): update .gitignore by adding .env.local * chore(env): update .gitignore by adding .env*.local * fix: restore static osType import * chore: sync submodules with upstream/main * refactor: remove redundant file.web module and revert import * chore: update pnpm-lock.yaml * refactor: revert guards * refactor; remove deprecated codes and extract prompts.ts * refactor(ai): remove unused ragservice exports * refactor: remove unused ollama and embedding models * refactor: remove unused type * test: remove test for the now deleted constants * refactor: remove unused export * style: fix ui component formatting * style: fix core and style file formatting * test: fix broken ai provider import * fix: typescript error * fix: add eslint disable command * fix(deps): remove unused ai sdk provider util after v6 ai sdk migration * fix(patch): add lookbehind regex patch * feat(dep): upgrade vercel ai sdk to v6 and ai-sdk-ollama to v3 * chore: update lockfile for vercel ai sdk v6 * refactor(ai): remove EmbeddingModel generic for ai sdk v6 * refactor(ai): remove EmbeddingModel generic for ai sdk v6 * test(ai): update mock to use embeddingModel * fix(patch): add lookbehind regex patch for email autolinks in markdown * refactor(ai): use ai sdk v6 syntax * fix: prettier formatting * chore: revert cargo.lock * fix(ai): update proxied embedding model to v3 spec * feat(ai): add aiconversation types for chat persistence * feat(ai): add conversation/message indexeddb and crud operations * feat(ai): create aiChatStore zustand store for chat state management * feat(notebook): add notebookactivetab state for Notes/AI * refactor(ai): refine conversation and message types for persistence * feat(types): add notebookActiveTab to ReadSettings type * chore: update deps * feat: add notebookactive tab default value * feat: add hook for ai chat * feat: update left side panel with history/chat icon * feat: integrate ChatHistoryView into sidebar content * feat: create UI for managing AI chat history * feat: implement persistent history with assistant-ui adapter * feat: create tab navigation component for notes and AI * feat: add tab navigation and AI assistant view * feat: update header to display active tab title * fix: formatting * feat: remove title and update new chat button * fix: formatting * fix: revert tooltip and styling * feat: implement cross-platform ask dialog bridge * feat(ai): preserve history during ui clear & use native dialogs * fix: align notebook navigation height with sidebar tabs * fix(ai): add missing dependency to handleDeleteConversation hook * docs: update PROJECT.md with session highlights * chore: delete projectmd * chore: update package.json and lock file * chore: update package.json * chore: remove patch * chore: upgrade react types to 19 and show ai features only in development mode for now --------- Co-authored-by: Huang Xin <chrox.huang@gmail.com>
196 lines
10 KiB
JSON
196 lines
10 KiB
JSON
{
|
|
"name": "@readest/readest-app",
|
|
"version": "0.9.98",
|
|
"private": true,
|
|
"scripts": {
|
|
"dev": "dotenv -e .env.tauri -- next dev",
|
|
"build": "dotenv -e .env.tauri -- next build",
|
|
"start": "dotenv -e .env.tauri -- next start",
|
|
"dev-web": "dotenv -e .env.web -- next dev",
|
|
"build-web": "dotenv -e .env.web -- next build",
|
|
"start-web": "dotenv -e .env.web -- next start",
|
|
"build-tauri": "dotenv -e .env.tauri -- next build",
|
|
"i18n:extract": "i18next-scanner",
|
|
"lint": "eslint .",
|
|
"test": "dotenv -e .env -e .env.test.local vitest",
|
|
"tauri": "tauri",
|
|
"clippy": "cargo clippy -p Readest --no-deps -- -D warnings",
|
|
"format": "pnpm -w format",
|
|
"format:check": "pnpm -w format:check",
|
|
"prepare-public-vendor": "mkdirp ./public/vendor/pdfjs ./public/vendor/simplecc",
|
|
"copy-pdfjs-js": "cpx \"../../packages/foliate-js/node_modules/pdfjs-dist/legacy/build/{pdf.worker.min.mjs,pdf.min.mjs,pdf.d.mts}\" ./public/vendor/pdfjs",
|
|
"copy-pdfjs-wasm": "cpx \"../../packages/foliate-js/node_modules/pdfjs-dist/wasm/{openjpeg.wasm,qcms_bg.wasm}\" ./public/vendor/pdfjs",
|
|
"copy-pdfjs-fonts": "cpx \"../../packages/foliate-js/node_modules/pdfjs-dist/{cmaps,standard_fonts}/*\" ./public/vendor/pdfjs",
|
|
"copy-flatten-pdfjs-annotation-layer-css": "npx postcss \"../../packages/foliate-js/vendor/pdfjs/annotation_layer_builder.css\" --no-map -u postcss-nested > ./public/vendor/pdfjs/annotation_layer_builder.css",
|
|
"copy-flatten-pdfjs-text-layer-css": "npx postcss \"../../packages/foliate-js/vendor/pdfjs/text_layer_builder.css\" --no-map -u postcss-nested > ./public/vendor/pdfjs/text_layer_builder.css",
|
|
"copy-flatten-pdfjs-css": "pnpm copy-flatten-pdfjs-annotation-layer-css && pnpm copy-flatten-pdfjs-text-layer-css",
|
|
"copy-pdfjs": "pnpm copy-pdfjs-js && pnpm copy-pdfjs-wasm && pnpm copy-pdfjs-fonts && pnpm copy-flatten-pdfjs-css",
|
|
"copy-simplecc": "cpx \"../../packages/simplecc-wasm/dist/web/*\" ./public/vendor/simplecc",
|
|
"setup-pdfjs": "pnpm prepare-public-vendor && pnpm copy-pdfjs",
|
|
"setup-simplecc": "pnpm prepare-public-vendor && pnpm copy-simplecc",
|
|
"setup-vendors": "pnpm setup-pdfjs && pnpm setup-simplecc",
|
|
"build-win-x64": "dotenv -e .env.tauri.local -- tauri build --target i686-pc-windows-msvc --bundles nsis",
|
|
"build-win-arm64": "dotenv -e .env.tauri.local -- tauri build --target aarch64-pc-windows-msvc --bundles nsis",
|
|
"build-linux-x64": "dotenv -e .env.tauri.local -- tauri build --target x86_64-unknown-linux-gnu --bundles appimage",
|
|
"build-macos-universial": "dotenv -e .env.tauri.local -e .env.apple-nonstore.local -- tauri build -t universal-apple-darwin --bundles dmg",
|
|
"build-macos-universial-appstore": "dotenv -e .env.tauri.local -e .env.apple-appstore.local -- tauri build -t universal-apple-darwin --bundles app --config src-tauri/tauri.appstore.conf.json",
|
|
"build-macos-universial-appstore-dev": "dotenv -e .env.tauri.local -e .env.apple-appstore-dev.local -- tauri build -t universal-apple-darwin --bundles app --config src-tauri/tauri.appstore-dev.conf.json",
|
|
"build-ios": "dotenv -e .env.ios-appstore-dev.local -- tauri ios build",
|
|
"build-ios-appstore": "dotenv -e .env.ios-appstore.local -- tauri ios build --export-method app-store-connect",
|
|
"release-macos-universial-appstore": "dotenv -e .env.tauri.local -e .env.apple-appstore.local -- bash scripts/release-mac-appstore.sh",
|
|
"release-ios-appstore": "dotenv -e .env.ios-appstore.local -- bash scripts/release-ios-appstore.sh",
|
|
"release-google-play": "dotenv -e .env.google-play.local -- bash scripts/release-google-play.sh",
|
|
"config-wrangler": "sed -i \"s/\\${TRANSLATIONS_KV_ID}/$TRANSLATIONS_KV_ID/g\" wrangler.toml",
|
|
"preview": "pnpm patch-build-webpack && NEXT_PUBLIC_APP_PLATFORM=web opennextjs-cloudflare build && pnpm restore-build-original && opennextjs-cloudflare preview --ip 0.0.0.0 --port 3001",
|
|
"deploy": "pnpm patch-build-webpack && NEXT_PUBLIC_APP_PLATFORM=web opennextjs-cloudflare build && pnpm restore-build-original && opennextjs-cloudflare deploy",
|
|
"upload": "pnpm patch-build-webpack && NEXT_PUBLIC_APP_PLATFORM=web opennextjs-cloudflare build && pnpm restore-build-original && opennextjs-cloudflare upload",
|
|
"cf-typegen": "wrangler types --env-interface CloudflareEnv cloudflare-env.d.ts",
|
|
"patch-build-webpack": "if [ \"$(uname)\" = \"Darwin\" ]; then sed -i '' 's/next build\"/next build --webpack\"/' package.json; else sed -i 's/next build\"/next build --webpack\"/' package.json; fi",
|
|
"restore-build-original": "if [ \"$(uname)\" = \"Darwin\" ]; then sed -i '' 's/next build --webpack\"/next build\"/' package.json; else sed -i 's/next build --webpack\"/next build\"/' package.json; fi",
|
|
"update-metadata": "bash ./scripts/sync-release-notes.sh release-notes.json ../../data/metainfo/appdata.xml",
|
|
"check:optional-chaining": "count=$(grep -rno '\\?\\.[a-zA-Z_$]' .next/static/chunks/* out/_next/static/chunks/* | wc -l); if [ \"$count\" -gt 0 ]; then echo '❌ Optional chaining found in output!'; exit 1; else echo '✅ No optional chaining found.'; fi",
|
|
"check:translations": "count=$(grep -rno '__STRING_NOT_TRANSLATED__' public/locales/* | wc -l); if [ \"$count\" -gt 0 ]; then echo '❌ Untranslated strings found!'; exit 1; else echo '✅ All strings translated.'; fi",
|
|
"check:lookbehind-regex": "count=$(grep -rnoE '\\(\\?<[!=]' .next/static/chunks/* out/_next/static/chunks/* | wc -l); if [ \"$count\" -gt 0 ]; then echo '❌ Lookbehind regex found in output!'; exit 1; else echo '✅ No lookbehind regex found.'; fi",
|
|
"check:all": "pnpm check:translations && pnpm check:lookbehind-regex",
|
|
"build-check": "pnpm build && pnpm build-web && pnpm check:all"
|
|
},
|
|
"dependencies": {
|
|
"@ai-sdk/react": "^3.0.49",
|
|
"@assistant-ui/react": "0.11.56",
|
|
"@assistant-ui/react-ai-sdk": "1.1.21",
|
|
"@assistant-ui/react-markdown": "0.11.9",
|
|
"@aws-sdk/client-s3": "^3.735.0",
|
|
"@aws-sdk/s3-request-presigner": "^3.735.0",
|
|
"@choochmeque/tauri-plugin-sharekit-api": "^0.3.0",
|
|
"@fabianlars/tauri-plugin-oauth": "2",
|
|
"@opennextjs/cloudflare": "^1.14.7",
|
|
"@radix-ui/react-collapsible": "^1.1.12",
|
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
"@radix-ui/react-hover-card": "^1.1.15",
|
|
"@radix-ui/react-scroll-area": "^1.2.10",
|
|
"@radix-ui/react-select": "^2.2.6",
|
|
"@radix-ui/react-separator": "^1.1.8",
|
|
"@radix-ui/react-slot": "^1.2.4",
|
|
"@radix-ui/react-tabs": "^1.1.13",
|
|
"@radix-ui/react-tooltip": "^1.2.8",
|
|
"@serwist/next": "^9.4.2",
|
|
"@stripe/react-stripe-js": "^3.7.0",
|
|
"@stripe/stripe-js": "^7.4.0",
|
|
"@supabase/auth-ui-react": "^0.4.7",
|
|
"@supabase/auth-ui-shared": "^0.1.8",
|
|
"@supabase/supabase-js": "^2.76.1",
|
|
"@tauri-apps/api": "2.9.1",
|
|
"@tauri-apps/plugin-cli": "^2.4.1",
|
|
"@tauri-apps/plugin-deep-link": "^2.4.6",
|
|
"@tauri-apps/plugin-dialog": "^2.6.0",
|
|
"@tauri-apps/plugin-fs": "^2.4.5",
|
|
"@tauri-apps/plugin-haptics": "^2.3.2",
|
|
"@tauri-apps/plugin-http": "^2.5.6",
|
|
"@tauri-apps/plugin-log": "^2.8.0",
|
|
"@tauri-apps/plugin-opener": "^2.5.3",
|
|
"@tauri-apps/plugin-os": "^2.3.2",
|
|
"@tauri-apps/plugin-process": "^2.3.1",
|
|
"@tauri-apps/plugin-shell": "~2.3.4",
|
|
"@tauri-apps/plugin-updater": "^2.9.0",
|
|
"@tauri-apps/plugin-websocket": "~2.4.2",
|
|
"@zip.js/zip.js": "^2.7.53",
|
|
"abortcontroller-polyfill": "^1.7.8",
|
|
"ai": "^6.0.47",
|
|
"ai-sdk-ollama": "^3.2.0",
|
|
"app-store-server-api": "^0.17.1",
|
|
"aws4fetch": "^1.0.20",
|
|
"buffer": "^6.0.3",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"cmdk": "^1.1.1",
|
|
"cors": "^2.8.5",
|
|
"dayjs": "^1.11.13",
|
|
"dompurify": "^3.3.0",
|
|
"foliate-js": "workspace:*",
|
|
"franc-min": "^6.2.0",
|
|
"google-auth-library": "^10.5.0",
|
|
"googleapis": "^164.1.0",
|
|
"highlight.js": "^11.11.1",
|
|
"i18next": "^24.2.0",
|
|
"i18next-browser-languagedetector": "^8.0.2",
|
|
"i18next-http-backend": "^3.0.1",
|
|
"iso-639-2": "^3.0.2",
|
|
"iso-639-3": "^3.0.1",
|
|
"isomorphic-ws": "^5.0.0",
|
|
"js-md5": "^0.8.3",
|
|
"jwt-decode": "^4.0.0",
|
|
"lucide-react": "^0.562.0",
|
|
"lunr": "^2.3.9",
|
|
"marked": "^15.0.12",
|
|
"nanoid": "^5.1.6",
|
|
"next": "16.0.10",
|
|
"overlayscrollbars": "^2.11.4",
|
|
"overlayscrollbars-react": "^0.5.6",
|
|
"posthog-js": "^1.246.0",
|
|
"react": "19.2.0",
|
|
"react-color": "^2.19.3",
|
|
"react-dom": "19.2.0",
|
|
"react-i18next": "^15.2.0",
|
|
"react-icons": "^5.4.0",
|
|
"react-responsive": "^10.0.0",
|
|
"react-virtuoso": "^4.17.0",
|
|
"react-window": "^1.8.11",
|
|
"remark-gfm": "^4.0.1",
|
|
"semver": "^7.7.1",
|
|
"streamdown": "^1.6.10",
|
|
"stripe": "^18.2.1",
|
|
"styled-jsx": "^5.1.7",
|
|
"tailwind-merge": "^3.4.0",
|
|
"tinycolor2": "^1.6.0",
|
|
"uuid": "^11.1.0",
|
|
"ws": "^8.18.3",
|
|
"zod": "^4.0.8",
|
|
"zustand": "5.0.10"
|
|
},
|
|
"devDependencies": {
|
|
"@next/bundle-analyzer": "^15.4.2",
|
|
"@tailwindcss/typography": "^0.5.16",
|
|
"@tauri-apps/cli": "2.9.6",
|
|
"@testing-library/dom": "^10.4.0",
|
|
"@testing-library/react": "^16.3.0",
|
|
"@types/cors": "^2.8.17",
|
|
"@types/cssbeautify": "^0.3.5",
|
|
"@types/lunr": "^2.3.7",
|
|
"@types/node": "^22.15.31",
|
|
"@types/react": "^19.0.0",
|
|
"@types/react-color": "^3.0.13",
|
|
"@types/react-dom": "^19.0.0",
|
|
"@types/react-window": "^1.8.8",
|
|
"@types/semver": "^7.7.0",
|
|
"@types/tinycolor2": "^1.4.6",
|
|
"@types/uuid": "^10.0.0",
|
|
"@types/ws": "^8.18.1",
|
|
"@typescript-eslint/eslint-plugin": "^8.48.0",
|
|
"@typescript-eslint/parser": "^8.48.0",
|
|
"@vitejs/plugin-react": "^5.1.1",
|
|
"autoprefixer": "^10.4.20",
|
|
"caniuse-lite": "^1.0.30001746",
|
|
"cpx2": "^8.0.0",
|
|
"daisyui": "^4.12.24",
|
|
"dotenv-cli": "^7.4.4",
|
|
"eslint": "^9.16.0",
|
|
"eslint-config-next": "16.0.0",
|
|
"eslint-plugin-jsx-a11y": "^6.10.2",
|
|
"i18next-scanner": "^4.6.0",
|
|
"jsdom": "^26.1.0",
|
|
"mkdirp": "^3.0.1",
|
|
"node-env-run": "^4.0.2",
|
|
"postcss": "^8.4.49",
|
|
"postcss-cli": "^11.0.0",
|
|
"postcss-nested": "^7.0.2",
|
|
"raw-loader": "^4.0.2",
|
|
"serwist": "^9.3.0",
|
|
"tailwindcss": "^3.4.18",
|
|
"typescript": "^5.7.2",
|
|
"vite-tsconfig-paths": "^5.1.4",
|
|
"vitest": "^4.0.15",
|
|
"wrangler": "^4.56.0"
|
|
}
|
|
}
|