{
  "name": "oppi-server",
  "version": "0.46.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/",
    "!dist/oppi-extensions/",
    "!dist/oppi-extensions/**",
    "!dist/**/*.test.js",
    "!dist/**/*.test.d.ts",
    "!dist/**/*.d.ts",
    "!dist/src/runtime-update.js",
    "themes/",
    "docs/",
    "LICENSE",
    "README.md"
  ],
  "engines": {
    "node": ">=24.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": "Chaos Donkey",
  "keywords": [
    "coding-agent",
    "mobile",
    "cli",
    "llm",
    "anthropic",
    "claude"
  ],
  "scripts": {
    "clean": "rm -rf dist",
    "compile": "node node_modules/@typescript/native/bin/tsc",
    "typecheck": "node node_modules/@typescript/native/bin/tsc --noEmit",
    "build": "bash -c 'npm run clean && npm run compile && node scripts/copy-oppi-docs.mjs && chmod +x dist/src/cli.js'",
    "prepare": "bash -c 'npm run clean && npm run compile && node scripts/copy-oppi-docs.mjs && chmod +x dist/src/cli.js'",
    "dev": "tsx watch src/cli.ts serve",
    "start": "node dist/src/cli.js serve",
    "prepublishOnly": "npm run build",
    "prepack": "npm run check:pi-release-versions",
    "check:pi-release-versions": "node scripts/check-pi-release-versions.mjs",
    "test": "vitest run",
    "test:coverage": "vitest run --coverage",
    "test:watch": "vitest",
    "bench": "npm run bench:correctness && npm run bench:perf:gate",
    "bench:perf": "npm run bench:hotpath",
    "bench:perf:gate": "tsx bench/run-gate.ts --suite hotpath --runs 3 --metric-set avg --max-regression-pct 15 --min-baseline-us 0.2 --max-absolute-regression-us 0.05",
    "bench:correctness": "npm run check && npm test",
    "bench:gate": "npm run bench",
    "bench:hotpath": "tsx bench/server-hotpath.bench.ts",
    "bench:hotpath:gate": "npm run bench:correctness && tsx bench/run-gate.ts --suite hotpath --runs 3 --metric-set avg --max-regression-pct 15 --min-baseline-us 0.2 --max-absolute-regression-us 0.05",
    "bench:compare": "tsx bench/compare-metrics.ts",
    "lint": "eslint src/ extensions/ bench/",
    "lint:fix": "eslint src/ extensions/ bench/ --fix",
    "architecture:check": "bun scripts/check-architecture-boundaries.ts",
    "mounts:check": "bun scripts/check-compose-mounts.ts",
    "format": "prettier --write --ignore-unknown src/ extensions/ bench/",
    "format:check": "prettier --check --ignore-unknown src/ extensions/ bench/",
    "telemetry:import": "node scripts/manual/telemetry-import-sqlite.mjs",
    "telemetry:import:watch": "node scripts/manual/telemetry-import-sqlite.mjs --watch",
    "telemetry:grafana:up": "docker compose -f docker-compose.telemetry.yml up -d",
    "telemetry:grafana:down": "docker compose -f docker-compose.telemetry.yml down",
    "telemetry:review": "bun scripts/telemetry-review.ts",
    "telemetry:review:gate": "bun scripts/telemetry-review.ts --days 3 --gate",
    "telemetry:client-logs": "bun scripts/client-log-review.ts",
    "telemetry:metrickit": "bun scripts/metrickit-review.ts",
    "telemetry:server-log": "bun scripts/server-log-review.ts",
    "diagnostics:review": "bun scripts/diagnostics-review.ts",
    "dead-code": "knip",
    "test:gate:pr-fast": "bun scripts/testing-gates.ts pr-fast",
    "test:gate:ci-coverage": "bun scripts/testing-gates.ts ci-coverage",
    "test:gate:nightly-deep": "bun scripts/testing-gates.ts nightly-deep",
    "test:e2e": "vitest run --config vitest.e2e.config.ts",
    "test:e2e:clean": "node scripts/e2e-clean.mjs",
    "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:iroh": "bun e2e/run-iroh-isolated-e2e.ts",
    "bench:iroh-network": "bun e2e/run-iroh-network-benchmark.ts",
    "bench:tailscale-network": "bun e2e/run-tailscale-network-benchmark.ts",
    "test:e2e:paired-compat": "E2E_NATIVE=1 npm run test:e2e:clean && E2E_NATIVE=1 vitest run --config vitest.e2e.config.ts e2e/paired-session",
    "test:e2e:auth-connection": "E2E_NATIVE=1 npm run test:e2e:clean && E2E_NATIVE=1 vitest run --config vitest.e2e.config.ts e2e/pairing-flow e2e/paired-session",
    "test:e2e:linux": "vitest run --config vitest.e2e.config.ts",
    "test:e2e:quick": "npm run test:e2e:clean && E2E_STRICT=1 vitest run --config vitest.e2e.config.ts e2e/quick-session-send",
    "check": "prettier --version >/dev/null && bash -c 'pids=(); npm run typecheck & pids+=($!); eslint src/ extensions/ bench/ & pids+=($!); knip & pids+=($!); prettier --check --ignore-unknown src/ extensions/ bench/ & pids+=($!); bun scripts/check-architecture-boundaries.ts & pids+=($!); bun scripts/check-compose-mounts.ts & pids+=($!); rc=0; for p in \"${pids[@]}\"; do wait \"$p\" || rc=1; done; exit $rc'",
    "check:server": "prettier --version >/dev/null && bash -c 'pids=(); npm run typecheck & pids+=($!); eslint src/ extensions/ bench/ & pids+=($!); knip & pids+=($!); prettier --check --ignore-unknown src/ extensions/ bench/ & pids+=($!); bun scripts/check-architecture-boundaries.ts --scope server & pids+=($!); bun scripts/check-compose-mounts.ts & pids+=($!); rc=0; for p in \"${pids[@]}\"; do wait \"$p\" || rc=1; done; exit $rc'"
  },
  "dependencies": {
    "@earendil-works/gondolin": "0.12.0",
    "@earendil-works/pi-ai": "0.83.0",
    "@earendil-works/pi-coding-agent": "0.83.0",
    "@earendil-works/pi-tui": "0.83.0",
    "@number0/iroh": "1.0.0",
    "diff-match-patch": "^1.0.5",
    "typebox": "1.1.28",
    "ws": "8.21.0"
  },
  "overrides": {
    "fast-xml-builder": "^1.1.9",
    "protobufjs": "7.6.5"
  },
  "devDependencies": {
    "@eslint/js": "10.0.1",
    "@types/diff-match-patch": "^1.0.36",
    "@types/node": "^22.0.0",
    "@types/ws": "^8.5.12",
    "@typescript/native": "npm:typescript@^7.0.2",
    "@vitest/coverage-v8": "^4.0.18",
    "eslint": "10.8.0",
    "eslint-config-prettier": "^10.1.8",
    "knip": "^5.83.1",
    "prettier": "^3.8.1",
    "tsx": "^4.19.0",
    "typescript": "^6.0.3",
    "typescript-eslint": "^8.54.0",
    "vitest": "^4.0.18"
  },
  "knip": {
    "ignoreIssues": {
      "src/tts-provider.ts": [
        "exports",
        "types"
      ]
    }
  }
}
