{
  "name": "pocket-ai",
  "main": "expo-router/entry",
  "version": "1.6.3",
  "license": "MIT",
  "description": "Offline-first local AI assistant for discovering, downloading, and chatting with GGUF models on-device.",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/Tah10n/pocket-ai.git"
  },
  "homepage": "https://github.com/Tah10n/pocket-ai/tree/main/docs",
  "bugs": {
    "url": "https://github.com/Tah10n/pocket-ai/issues"
  },
  "engines": {
    "node": ">=20.19.4"
  },
  "expo": {
    "doctor": {
      "reactNativeDirectoryCheck": {
        "exclude": [
          "react-native-background-actions",
          "react-native-fs",
          "react-native-vector-icons"
        ]
      }
    }
  },
  "keywords": [
    "react-native",
    "expo",
    "llm",
    "gguf",
    "on-device-ai",
    "llama",
    "mobile",
    "offline-first",
    "open-source"
  ],
  "scripts": {
    "start": "expo start",
    "reset-project": "node ./scripts/reset-project.js",
    "android": "node ./scripts/run-android-dev.js",
    "android:smoke": "node ./scripts/android-smoke.js",
    "android:emulator": "node ./scripts/android-smoke.js --emulator --screenshot artifacts/android-emulator-smoke.png",
    "android:scenarios": "node ./scripts/android-scenarios.js --pack core",
    "android:scenarios:emulator": "node ./scripts/android-scenarios.js --emulator --pack core",
    "android:scenarios:catalog": "node ./scripts/android-scenarios.js --pack catalog",
    "android:scenarios:storage": "node ./scripts/android-scenarios.js --pack storage --fail-on-skip",
    "android:scenarios:attachments": "node ./scripts/android-scenarios.js --pack attachments",
    "android:scenarios:attachments-preconditioned": "node ./scripts/android-scenarios.js --pack attachments-preconditioned --preserve-running-app --fail-on-skip",
    "android:scenarios:attachments-prepared": "node ./scripts/android-scenarios.js --pack attachments-prepared --preserve-running-app --fail-on-skip",
    "android:scenarios:attachments-prepared-send": "node ./scripts/android-scenarios.js --pack attachments-prepared-send --preserve-running-app --fail-on-skip",
    "android:scenarios:dependency-ui": "node ./scripts/android-scenarios.js --pack dependency-ui",
    "android:scenarios:runtime": "node ./scripts/android-scenarios.js --pack runtime --fail-on-skip",
    "android:scenarios:branch-regeneration": "node ./scripts/android-scenarios.js --pack branch-regeneration --apk-variant release --fail-on-skip",
    "android:scenarios:native": "node ./scripts/android-scenarios.js --pack native",
    "android:scenarios:extended": "node ./scripts/android-scenarios.js --pack extended",
    "android:screens": "node ./scripts/android-screen-capture.js",
    "android:screens:emulator": "node ./scripts/android-screen-capture.js --emulator",
    "check:android": "npm test && npm run lint && npm run android:smoke",
    "check:android:emulator": "npm test && npm run lint && npm run android:emulator",
    "check:android:scenarios": "npm test && npm run lint && npm run android:scenarios",
    "ios": "expo run:ios",
    "web": "expo start --web",
    "lint": "expo lint --max-warnings 0",
    "test": "node ./scripts/run-jest.js --runInBand",
    "coverage": "node ./scripts/run-jest.js --runInBand --coverage",
    "typecheck": "tsc --noEmit",
    "verify:mobile-change": "npm run typecheck && npm run lint && npm test",
    "verify:mobile-change:android": "npm run verify:mobile-change && npm run android:scenarios:runtime",
    "verify:mobile-change:android:vision-smoke": "npm run verify:mobile-change && npm run android:scenarios:runtime && npm run android:scenarios:catalog && npm run android:scenarios:attachments -- --fail-on-skip",
    "verify:mobile-change:android:vision-prepared": "npm run android:scenarios:attachments-prepared-send",
    "verify:mobile-change:android:vision": "npm run verify:mobile-change:android:vision-smoke",
    "roadmap:update": "node ./scripts/generate-roadmap.js",
    "roadmap:check": "node ./scripts/generate-roadmap.js --check",
    "verify:release": "npm run typecheck && npm run lint && npm test",
    "build:android:production": "node ./scripts/build-android-release.js",
    "build:android:production:clean": "node ./scripts/build-android-release.js --clean",
    "build:android:eas:preview": "npx --yes eas-cli@18.5.0 build --platform android --profile preview",
    "build:android:eas:production": "npx --yes eas-cli@18.5.0 build --platform android --profile production",
    "build:all:eas:production": "npx --yes eas-cli@18.5.0 build --platform all --profile production"
  },
  "dependencies": {
    "@expo-google-fonts/inter": "^0.4.2",
    "@expo/cli": "^55.0.34",
    "@expo/vector-icons": "^15.0.3",
    "@react-native-community/netinfo": "11.5.2",
    "@react-native-community/slider": "5.1.2",
    "@react-navigation/bottom-tabs": "^7.0.0",
    "@react-navigation/native": "^7.0.0",
    "@shopify/flash-list": "2.3.1",
    "base64-js": "^1.5.1",
    "expo": "~55.0.28",
    "expo-blur": "~55.0.16",
    "expo-build-properties": "~55.0.16",
    "expo-clipboard": "~55.0.15",
    "expo-constants": "~55.0.17",
    "expo-crypto": "~55.0.17",
    "expo-device": "~55.0.19",
    "expo-document-picker": "~55.0.15",
    "expo-file-system": "~55.0.24",
    "expo-font": "~55.0.8",
    "expo-haptics": "~55.0.16",
    "expo-image": "~55.0.11",
    "expo-image-manipulator": "~55.0.19",
    "expo-image-picker": "~55.0.22",
    "expo-keep-awake": "~55.0.6",
    "expo-linear-gradient": "~55.0.16",
    "expo-linking": "~55.0.16",
    "expo-notifications": "~55.0.25",
    "expo-router": "~55.0.17",
    "expo-secure-store": "~55.0.16",
    "expo-sharing": "~55.0.22",
    "expo-splash-screen": "~55.0.23",
    "expo-status-bar": "~55.0.6",
    "expo-symbols": "~55.0.9",
    "expo-system-ui": "~55.0.20",
    "expo-web-browser": "~55.0.18",
    "i18next": "^26.3.6",
    "jest": "~29.7.0",
    "llama.rn": "0.12.8",
    "nativewind": "^4.2.6",
    "pako": "^3.0.1",
    "react": "19.2.0",
    "react-dom": "19.2.0",
    "react-i18next": "^17.0.11",
    "react-native": "0.83.6",
    "react-native-background-actions": "^4.1.0",
    "react-native-device-info": "^15.0.2",
    "react-native-fs": "^2.20.0",
    "react-native-gesture-handler": "~2.30.0",
    "react-native-markdown-display": "^7.0.2",
    "react-native-mmkv": "^4.2.0",
    "react-native-nitro-modules": "^0.35.0",
    "react-native-reanimated": "4.2.1",
    "react-native-safe-area-context": "~5.6.0",
    "react-native-screens": "~4.23.0",
    "react-native-vector-icons": "^10.3.0",
    "react-native-web": "~0.21.0",
    "react-native-worklets": "0.7.4",
    "react-native-worklets-core": "^1.6.3",
    "tailwindcss": "~3.4.19",
    "zustand": "^5.0.14"
  },
  "devDependencies": {
    "@react-native-community/cli": "^20.1.2",
    "@testing-library/react-native": "^13.3.3",
    "@types/jest": "29.5.14",
    "@types/node": "~24.13.3",
    "@types/pako": "^2.0.4",
    "@types/react": "~19.2.10",
    "babel-preset-expo": "~55.0.24",
    "eslint": "^9.39.5",
    "eslint-config-expo": "~55.0.1",
    "jest-expo": "~55.0.20",
    "react-test-renderer": "19.2.0",
    "typescript": "~5.9.2"
  },
  "overrides": {
    "@babel/core": "7.29.6",
    "@tootallnate/once": "3.0.1",
    "@xmldom/xmldom": "0.9.10",
    "fast-xml-builder": "1.1.7",
    "js-yaml@3.14.2": "3.15.0",
    "js-yaml@4.1.1": "4.3.0",
    "minimatch@3.1.5": {
      "brace-expansion": "1.1.17"
    },
    "minimatch@5.1.2": "5.1.9",
    "minimatch@10.2.5": {
      "brace-expansion": "5.0.8"
    },
    "node-forge@1.3.1": "1.4.0",
    "postcss": "8.5.23",
    "tar": "7.5.13",
    "yaml@2.6.0": "2.8.3",
    "react-native-markdown-display": {
      "markdown-it": "14.3.0"
    }
  },
  "private": true,
  "codegenConfig": {
    "name": "RNAppSpec",
    "type": "all",
    "jsSrcsDir": "src",
    "android": {
      "javaPackageName": "com.github.tah10n.pocketai"
    }
  }
}
