{
  "name": "oppi-server",
  "version": "0.1.0",
  "description": "Self-hosted server for the Oppi mobile coding agent",
  "type": "module",
  "main": "dist/src/cli.js",
  "bin": {
    "oppi": "dist/src/cli.js"
  },
  "files": [
    "dist/",
    "extensions/",
    "themes/",
    "LICENSE",
    "README.md"
  ],
  "engines": {
    "node": ">=20.0.0"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/duh17/oppi.git",
    "directory": "server"
  },
  "homepage": "https://github.com/duh17/oppi/tree/main/server#readme",
  "bugs": "https://github.com/duh17/oppi/issues",
  "license": "MIT",
  "author": "Da Chen",
  "keywords": [
    "coding-agent",
    "mobile",
    "cli",
    "llm",
    "anthropic",
    "claude"
  ],
  "scripts": {
    "build": "tsc",
    "prepare": "tsc",
    "dev": "tsx watch src/cli.ts serve",
    "start": "node dist/src/cli.js serve",
    "prepublishOnly": "npm run build",
    "test": "vitest run",
    "test:coverage": "vitest run --coverage",
    "test:watch": "vitest",
    "lint": "eslint src/ extensions/",
    "lint:fix": "eslint src/ extensions/ --fix",
    "format": "prettier --write --ignore-unknown src/ extensions/",
    "format:check": "prettier --check --ignore-unknown src/ extensions/",
    "telemetry:review": "bun scripts/telemetry-review.ts",
    "telemetry:review:gate": "bun scripts/telemetry-review.ts --days 3 --gate",
    "dead-code": "knip",
    "test:gate:pr-fast": "bun scripts/testing-gates.ts pr-fast",
    "test:gate:nightly-deep": "bun scripts/testing-gates.ts nightly-deep",
    "test:e2e": "vitest run --config vitest.e2e.config.ts",
    "test:e2e:pairing": "vitest run --config vitest.e2e.config.ts e2e/pairing-flow",
    "test:e2e:session": "vitest run --config vitest.e2e.config.ts e2e/paired-session",
    "test:e2e:linux": "vitest run --config vitest.e2e.config.ts",
    "check": "bash -c 'pids=(); tsc --noEmit & pids+=($!); eslint src/ extensions/ & pids+=($!); knip & pids+=($!); prettier --check --ignore-unknown src/ extensions/ & pids+=($!); rc=0; for p in \"${pids[@]}\"; do wait \"$p\" || rc=1; done; exit $rc'"
  },
  "dependencies": {
    "@earendil-works/gondolin": "^0.7.0",
    "@mariozechner/pi-coding-agent": "^0.64.0",
    "better-sqlite3": "^12.8.0",
    "diff-match-patch": "^1.0.5",
    "ws": "^8.18.0"
  },
  "devDependencies": {
    "@eslint/js": "^9.39.2",
    "@types/better-sqlite3": "^7.6.13",
    "@types/diff-match-patch": "^1.0.36",
    "@types/node": "^22.0.0",
    "@types/ws": "^8.5.12",
    "@vitest/coverage-v8": "^4.0.18",
    "eslint": "^9.39.2",
    "eslint-config-prettier": "^10.1.8",
    "knip": "^5.83.1",
    "prettier": "^3.8.1",
    "tsx": "^4.19.0",
    "typescript": "^5.6.0",
    "typescript-eslint": "^8.54.0",
    "vitest": "^4.0.18"
  }
}
