{
  "name": "routecodex",
  "version": "0.90.1327",
  "description": "Multi-provider OpenAI proxy server with anthropic/responses/chat support (dev)",
  "type": "module",
  "main": "dist/index.js",
  "module": "dist/index.js",
  "bin": {
    "routecodex": "dist/cli.js"
  },
  "exports": {
    ".": {
      "import": "./dist/index.js",
      "types": "./dist/index.d.ts"
    }
  },
  "files": [
    "dist/",
    "config/",
    "scripts/",
    "rcc",
    "README.md",
    "LICENSE",
    "docs/",
    "configsamples/"
  ],
  "bundledDependencies": [],
  "engines": {
    "node": ">=20 <26"
  },
  "scripts": {
    "build": "npm run llmswitch:ensure && node scripts/build-core.mjs && node scripts/vendor-core.mjs && npm run clean && node scripts/gen-build-info.mjs && tsc && npm run build:webui && node scripts/copy-compat-assets.mjs && node scripts/copy-modules-config.mjs && npm run fix:cli-permission",
    "build:dev": "bash -lc 'export BUILD_MODE=dev ROUTECODEX_BUILD_RESTART_ONLY=1 ROUTECODEX_INSTALL_VERIFY_PORT=5555; npm run build && npm run fix:cli-permission && npm run install:global'",
    "build:dev:full": "bash -lc 'export BUILD_MODE=dev ROUTECODEX_BUILD_RESTART_ONLY=1; npm run cleanup:stale-server-pids || true; trap \"npm run cleanup:stale-server-pids >/dev/null 2>&1 || true\" EXIT; npm run build && npm run fix:cli-permission && npm run test:unified-hub-shadow && npm run verify:e2e-toolcall && npm run verify:apply-patch && npm run verify:apply-patch-regressions && npm run verify:exec-command && npm run test:routing-instructions && npm run test:cli && npm run install:global && npm run mock:regressions && npm run test:blackbox-antigravity-parity && npm run verify:errorsamples && npm run verify:e2e-gemini-followup-sample'",
    "build:min": "npm run llmswitch:ensure && node scripts/build-core.mjs && node scripts/vendor-core.mjs && npm run clean && node scripts/gen-build-info.mjs && tsc && npm run build:webui && node scripts/copy-compat-assets.mjs && node scripts/copy-modules-config.mjs && npm run fix:cli-permission",
    "build:webui": "vite build --config webui/vite.config.ts",
    "prepack": "echo skip-prepack",
    "postbuild": "node scripts/ensure-cli-executable.mjs",
    "build:watch": "tsc --watch",
    "start": "npm run -s start:bg",
    "dev": "tsx watch src/index.ts",
    "jest:run": "node --experimental-vm-modules ./node_modules/jest/bin/jest.js",
    "test": "npm run test:routing-instructions && npm run mock:regressions",
    "test:regressions": "npm run test:unified-hub-shadow && npm run mock:regressions && npm run test:blackbox-antigravity-parity && npm run verify:errorsamples",
    "test:blackbox-antigravity-parity": "node scripts/tests/blackbox-rcc-vs-routecodex-antigravity.mjs",
    "test:ci:jest": "node scripts/tests/ci-jest.mjs",
    "test:ci:jest:coverage": "node scripts/tests/ci-jest.mjs --coverage",
    "test:ci": "npm run test:ci:jest && npm run mock:regressions && npm run test:blackbox-antigravity-parity",
    "test:ci:coverage": "npm run test:ci:jest:coverage",
    "verify:repo-sanity": "node scripts/ci/repo-sanity.mjs",
    "verify:llmswitch-rustification-audit": "node scripts/ci/llmswitch-rustification-audit.mjs",
    "verify:file-line-limit": "node scripts/ci/check-file-line-limit.mjs",
    "audit:silent-failure": "node scripts/ci/silent-failure-audit.mjs",
    "vr:dryrun": "node scripts/virtual-router-dryrun.mjs",
    "test:routing-instructions": "npm run jest:run -- --runTestsByPath tests/token-daemon/token-daemon.auto-refresh-noninteractive.spec.ts tests/token-daemon/token-daemon.refresh-ahead.spec.ts tests/commands/oauth-command.qwen-auto.spec.ts tests/token-daemon/interactive-refresh.spec.ts tests/server/runtime/request-executor.single-attempt.spec.ts tests/server/runtime/executor-provider.retryable.spec.ts tests/server/runtime/http-server/executor/usage-aggregator.spec.ts tests/providers/auth/tokenfile-auth.iflow.spec.ts tests/providers/auth/antigravity-user-agent.unit.test.ts tests/providers/auth/antigravity-fingerprint.unit.test.ts tests/providers/auth/antigravity-warmup.unit.test.ts tests/providers/core/runtime/gemini-cli-http-provider.unit.test.ts tests/providers/core/runtime/deepseek-http-provider.unit.test.ts tests/providers/core/runtime/antigravity-quota-client.unit.test.ts tests/manager/quota/provider-quota-center.spec.ts tests/manager/quota/provider-quota-store.spec.ts tests/manager/quota/quota-manager-refresh.spec.ts tests/manager/quota/provider-quota-daemon-module.spec.ts tests/manager/quota/provider-key-normalization.spec.ts tests/server/http-server/daemon-admin.e2e.spec.ts tests/server/http-server/session-client-routes.spec.ts tests/server/http-server/quota-view-injection.spec.ts tests/server/http-server/quota-refresh-triggers.e2e.spec.ts tests/server/http-server/hub-policy-injection.spec.ts tests/server/http-server/session-header-injection.spec.ts tests/server/http-server/session-dir.spec.ts tests/server/handlers/sse-timeout.spec.ts tests/utils/is-direct-execution.test.ts tests/utils/windows-netstat.test.ts tests/servertool/virtual-router-context-fallback.spec.ts tests/servertool/virtual-router-longcontext-fallback.spec.ts tests/servertool/virtual-router-series-cooldown.spec.ts tests/servertool/recursive-detection-guard.spec.ts tests/servertool/routing-instructions.spec.ts tests/servertool/stop-message-sample-replay.spec.ts tests/servertool/stop-message-auto.spec.ts tests/servertool/stopmessage-session-scope.spec.ts tests/servertool/stopmessage-anthropic-stop-sequence.spec.ts tests/servertool/stopmessage-compaction-false-positive.spec.ts tests/servertool/servertool-progress-logging.spec.ts tests/servertool/servertool-clock.spec.ts tests/servertool/antigravity-thought-signature-bootstrap.spec.ts tests/compat/tabglm-claude-code-profile.spec.ts tests/compat/antigravity-thought-signature.spec.ts tests/sharedmodule/mcp-tool-descriptions.spec.ts tests/sharedmodule/virtual-router-hit-log.spec.ts tests/sharedmodule/virtual-router-routing-model-validation.spec.ts tests/unified-hub/hub-v1-single-path-imports.spec.ts tests/sharedmodule/tool-governor-exec-command-guard.spec.ts",
    "test:cli": "npm run jest:run -- --runTestsByPath tests/cli/camoufox-command.spec.ts tests/cli/clean-command.spec.ts tests/cli/code-command.spec.ts tests/cli/config-command.spec.ts tests/cli/env-command.spec.ts tests/cli/env-output.spec.ts tests/cli/examples-command.spec.ts tests/cli/port-command.spec.ts tests/cli/port-utils.spec.ts tests/cli/restart-command.spec.ts tests/cli/smoke.spec.ts tests/cli/start-command.spec.ts tests/cli/status-command.spec.ts tests/cli/stop-command.spec.ts",
    "test:watch": "npm run jest:run -- --watch",
    "test:coverage": "npm run jest:run -- --coverage",
    "test:integration": "npm run jest:run -- --testPathPattern=integration",
    "test:e2e": "npm run jest:run -- --testPathPattern=e2e",
    "test:webui": "npm run jest:run -- --runTestsByPath tests/frontend/webui-app.utils.spec.ts tests/frontend/webui-app.render.spec.tsx tests/frontend/webui-app.integration.spec.tsx tests/frontend/webui-app.pages.spec.tsx tests/frontend/webui-app.edge.spec.tsx",
    "test:webui:coverage": "npm run jest:run -- --runTestsByPath tests/frontend/webui-app.utils.spec.ts tests/frontend/webui-app.render.spec.tsx tests/frontend/webui-app.integration.spec.tsx tests/frontend/webui-app.pages.spec.tsx tests/frontend/webui-app.edge.spec.tsx --coverage --collectCoverageFrom=webui/src/App.tsx",
    "test:performance": "npm run jest:run -- --testPathPattern=performance",
    "test:protocol": "npm run jest:run -- --testPathPattern=protocol-tools-e2e.spec.ts --runInBand --detectOpenHandles --forceExit",
    "test:protocol-sample-replay": "npm run jest:run -- --runInBand --runTestsByPath tests/sharedmodule/real-sample-hub-io-compare.spec.ts",
    "test:protocol-compat-regression": "npm run jest:run -- --runInBand --runTestsByPath tests/sharedmodule/anthropic-semantics-stage2.spec.ts tests/sharedmodule/anthropic-client-remap-namespace-fallback.spec.ts tests/sharedmodule/responses-semantics-snapshot.spec.ts tests/sharedmodule/real-sample-hub-io-compare.spec.ts",
    "test:dry-run": "node tests/basic-dry-run.mjs",
    "test:lmstudio-dryrun": "node tests/lmstudio-tools-bidir-dry-run.mjs",
    "test:unified-hub-shadow": "node scripts/tests/unified-hub-shadow-regression.mjs",
    "test:unified-hub-responses-enforce": "node scripts/tests/unified-hub-responses-enforce-safe.mjs",
    "lint": "ESLINT_USE_FLAT_CONFIG=1 eslint \"src/**/*.ts\" --no-cache",
    "lint:fix": "ESLINT_USE_FLAT_CONFIG=1 eslint \"src/**/*.ts\" --fix --no-cache",
    "lint:strict": "ESLINT_USE_FLAT_CONFIG=1 eslint \"src/**/*.ts\" --max-warnings 0 --no-cache",
    "clean": "node scripts/clean-safe.mjs",
    "cleanup:stale-server-pids": "node scripts/cleanup-stale-server-pids.mjs --quiet",
    "prebuild": "npm run verify:repo-sanity && echo skip-lint",
    "prepare": "",
    "postinstall": "node scripts/ensure-cli-executable.mjs && node scripts/ensure-cli-command-shim.mjs",
    "verify:apply-patch": "node scripts/verify-apply-patch.mjs",
    "verify:apply-patch-regressions": "node scripts/verify-apply-patch-regressions.mjs",
    "verify:exec-command": "node scripts/tests/exec-command-loop.mjs",
    "verify:errorsamples": "node scripts/verify-codex-error-samples.mjs",
    "verify:finalize-empty-sanitize-errorsample": "node sharedmodule/llmswitch-core/scripts/tests/coverage-finalize-empty-sanitize-errorsample.mjs",
    "triage:errorsamples": "node scripts/triage-errorsamples.mjs",
    "verify:e2e-gemini-followup-sample": "node scripts/verify-e2e-gemini-followup-sample.mjs",
    "install:global": "./scripts/install-global.sh",
    "install:release": "./scripts/install-release.sh",
    "pack:rcc": "node scripts/pack-rcc.mjs",
    "audit:tool-text": "node scripts/audit-tool-text.mjs",
    "start:bg": "bash scripts/run-bg.sh -- 'node dist/index.js'",
    "start:fg": "bash scripts/run-fg-gtimeout.sh 12 -- 'node dist/index.js'",
    "start:verify": "node scripts/start-verify.mjs --mode bg --timeout 180",
    "build:verify": "npm run build && npm run -s start:verify",
    "smoke:protocol": "node scripts/protocol-smoke.mjs",
    "smoke:antigravity": "node scripts/antigravity-smoke.mjs",
    "monitor:diff": "node scripts/monitor-diff.mjs",
    "monitor:capture:responses": "node scripts/upstream-multiturn-capture.mjs",
    "monitor:embed": "node scripts/monitor-embed-keys.mjs",
    "replay:toolcall": "node scripts/replay-recorded-toolcall.mjs",
    "replay:responses": "node scripts/replay-responses-sse.mjs",
    "build:smoke": "npm run build && node scripts/protocol-smoke.mjs",
    "verify:sse-loop": "node scripts/verify-sse-loop.mjs",
    "snapshot:inspect": "node scripts/snapshot-inspect.mjs",
    "policy:report": "node scripts/policy-violations-report.mjs",
    "debug:responses": "tsx scripts/tools-dev/responses-debug-client/src/index.ts",
    "debug:responses:lmstudio:text": "tsx scripts/tools-dev/responses-debug-client/src/index.ts --file scripts/tools-dev/responses-debug-client/payloads/text.json --baseURL ${LMSTUDIO_BASEURL:-http://127.0.0.1:1234/v1}",
    "debug:responses:lmstudio:tool": "tsx scripts/tools-dev/responses-debug-client/src/index.ts --file scripts/tools-dev/responses-debug-client/payloads/tool.json --baseURL ${LMSTUDIO_BASEURL:-http://127.0.0.1:1234/v1}",
    "capture:responses:lmstudio": "node scripts/capture-responses-sse.mjs --file scripts/tools-dev/responses-debug-client/payloads/tool.json",
    "llmswitch:ensure": "node scripts/ensure-llmswitch-mode.mjs",
    "llmswitch:link": "node scripts/link-llmswitch.mjs",
    "llmswitch:unlink": "node scripts/link-llmswitch.mjs unlink",
    "llmswitch:link:global": "node scripts/link-global-llms-local.mjs --require-target",
    "dry-run:responses-provider": "node scripts/tests/responses-provider-dry-run.mjs",
    "start:verify:fg": "node scripts/start-verify.mjs --mode fg --timeout 90",
    "rc-config": "node scripts/rc-config.mjs",
    "config:validate:providers": "node scripts/validate-config-providers.mjs",
    "verify:e2e-toolcall": "node scripts/verify-e2e-toolcall.mjs && node scripts/verify-client-headers.mjs",
    "test:anthropic-roundtrip": "node scripts/tests/anthropic-roundtrip.mjs",
    "replay:codex-sample": "node scripts/replay-codex-sample.mjs",
    "config:update:providers": "node scripts/update-config-providers.mjs",
    "models:update": "node scripts/update-models.mjs",
    "models:update:qwen": "node scripts/update-models.mjs --provider qwen-provider --write",
    "config:use-local": "BUILD_MODE=dev npm run llmswitch:ensure",
    "config:use-published": "BUILD_MODE=release npm run llmswitch:ensure",
    "test:modelscope": "node scripts/test-modelscope.mjs",
    "security:audit": "npm audit --audit-level high",
    "security:check": "npx audit-ci --config ./audit-ci.json",
    "complexity:check": "echo 'Complexity check temporarily disabled - tool incompatible with current codebase'",
    "duplication:check": "npx jscpd --threshold 5 src/",
    "duplication:analyze": "node scripts/duplicate-code-handler.mjs --threshold 5",
    "duplication:fix": "node scripts/duplicate-code-handler.mjs --threshold 5 --auto-fix true",
    "dup:scan": "node scripts/duplicate-code-handler.mjs --threshold 5 --output reports",
    "dup:auto-fix": "node scripts/duplicate-code-handler.mjs --threshold 5 --output reports --auto-fix true",
    "secrets:check": "node scripts/ci/secrets-check.mjs",
    "format:check": "prettier --check src/**/*.{ts,js,json}",
    "format:fix": "prettier --write src/**/*.{ts,js,json}",
    "verify:split-args": "node scripts/verify-toolcall-arg-splitting.mjs",
    "verify:pairing": "node scripts/verify-tool-pairing.mjs",
    "verify:tools:offline": "node scripts/verify-tools-offline.mjs",
    "verify:tools:strict": "node scripts/verify-tool-arguments.mjs",
    "verify:anthropic-roundtrip": "node scripts/tests/anthropic-responses-roundtrip.mjs",
    "depcheck": "depcheck",
    "license:check": "echo 'license check temporarily disabled'",
    "ncu:check": "ncu --errorLevel 2",
    "package:validate": "npx package-json-validator",
    "test:consistency": "node scripts/v2-consistency/run-consistency-test.mjs",
    "test:v2:tools": "node tests/v2/dist/tool-processing-test.js",
    "test:v2:protocol": "node tests/v2/dist/protocol-conversion-test.js",
    "test:comprehensive": "node scripts/v2-consistency/comprehensive-consistency-test.mjs",
    "test:golden": "node scripts/tests/golden-provider-cycle.mjs",
    "test:sharedmodule": "echo 'sharedmodule tests moved to llmswitch-core repo; see scripts/move-tests-to-llmswitch.mjs for details'",
    "sync:ci-goldens": "node scripts/tools/sync-ci-goldens.mjs",
    "sync:apply-patch-regressions": "node scripts/tools/sync-apply-patch-regressions.mjs",
    "mock:extract": "node scripts/mock-provider/extract.mjs",
    "mock:validate": "node scripts/mock-provider/validate.mjs",
    "mock:regressions": "node scripts/mock-provider/run-regressions.mjs",
    "mock:clean": "node scripts/mock-provider/clean.mjs",
    "fix:cli-permission": "node scripts/ensure-cli-executable.mjs",
    "fix:cli-shim": "node scripts/ensure-cli-command-shim.mjs"
  },
  "dependencies": {
    "@ai-sdk/anthropic": "^3.0.58",
    "@ai-sdk/openai": "^3.0.41",
    "@anthropic-ai/sdk": "^0.65.0",
    "@jsonstudio/llms": "0.6.3689",
    "@lmstudio/sdk": "^1.5.0",
    "@radix-ui/react-switch": "^1.2.6",
    "@types/socket.io": "^3.0.1",
    "ai": "^6.0.116",
    "ajv": "^8.18.0",
    "axios": "^1.14.0",
    "chalk": "^5.6.2",
    "commander": "^14.0.1",
    "cors": "^2.8.5",
    "dotenv": "^16.3.1",
    "esbuild": "^0.27.0",
    "express": "^4.18.2",
    "helmet": "^7.0.0",
    "lmstudio": "^0.0.32",
    "open": "^9.1.0",
    "openai": "^5.23.0",
    "ora": "^9.0.0",
    "playwright-core": "^1.49.0",
    "rcc-basemodule": "^0.2.7",
    "rcc-debugcenter": "^0.1.6",
    "rcc-errorhandling": "^1.0.10",
    "socket.io": "^4.8.1",
    "zod": "^3.23.8"
  },
  "optionalDependencies": {
    "@jsonstudio/llms-engine": "^0.3.0"
  },
  "peerDependencies": {
    "@jest/globals": "^30.1.2"
  },
  "peerDependenciesMeta": {
    "@jest/globals": {
      "optional": true
    }
  },
  "devDependencies": {
    "@jest/globals": "^30.1.2",
    "@testing-library/jest-dom": "^6.9.1",
    "@testing-library/react": "^16.3.2",
    "@testing-library/user-event": "^14.6.1",
    "@types/cors": "^2.8.13",
    "@types/express": "^4.17.17",
    "@types/jest": "^29.5.5",
    "@types/node": "^20.19.25",
    "@types/react": "^19.2.2",
    "@types/react-dom": "^19.2.2",
    "@typescript-eslint/eslint-plugin": "^6.7.4",
    "@typescript-eslint/parser": "^6.7.4",
    "@typescript-eslint/typescript-estree": "^6.7.4",
    "@vitejs/plugin-react": "^5.1.0",
    "c8": "^11.0.0",
    "complexity-report": "^2.0.0-alpha",
    "depcheck": "^1.4.7",
    "eslint": "^8.50.0",
    "eslint-plugin-complexity": "^1.0.2",
    "husky": "^9.0.0",
    "jest": "^29.7.0",
    "jest-environment-jsdom": "^30.2.0",
    "jscpd": "^4.0.5",
    "lint-staged": "^15.0.0",
    "npm-check-updates": "^18.3.0",
    "package-json-validator": "^0.30.0",
    "prettier": "^3.6.2",
    "react": "^19.2.0",
    "react-dom": "^19.2.0",
    "ts-jest": "^29.1.1",
    "ts-node": "^10.9.2",
    "tsx": "^4.0.0",
    "typescript": "^5.9.3",
    "vite": "^7.1.12"
  },
  "bundleDependencies": [],
  "overrides": {
    "path-to-regexp": "0.1.13",
    "qs": "6.15.0",
    "socket.io-parser": "4.2.6"
  }
}
