{
  "name": "waoowaoo",
  "version": "0.4.1",
  "private": true,
  "engines": {
    "node": ">=18.18.0",
    "npm": ">=9.0.0"
  },
  "scripts": {
    "postinstall": "prisma generate",
    "prepare": "husky",
    "dev": "npm run storage:init && concurrently --kill-others \"npm run dev:next\" \"npm run dev:worker\" \"npm run dev:watchdog\" \"npm run dev:board\"",
    "dev:next": "cross-env NODE_OPTIONS=\"--no-deprecation\" next dev --turbopack -H 0.0.0.0",
    "dev:worker": "tsx watch --env-file=.env src/lib/workers/index.ts",
    "dev:watchdog": "tsx watch --env-file=.env scripts/watchdog.ts",
    "dev:board": "tsx watch --env-file=.env scripts/bull-board.ts",
    "dev:turbo": "next dev --turbopack -H 0.0.0.0",
    "build": "prisma generate && next build",
    "build:turbo": "next build --turbopack",
    "start": "npm run storage:init && concurrently --kill-others \"npm run start:next\" \"npm run start:worker\" \"npm run start:watchdog\" \"npm run start:board\"",
    "storage:init": "tsx --env-file=.env src/lib/storage/init.ts",
    "start:next": "next start -H 0.0.0.0",
    "start:worker": "tsx --env-file=.env src/lib/workers/index.ts",
    "start:watchdog": "tsx --env-file=.env scripts/watchdog.ts",
    "start:board": "tsx --env-file=.env scripts/bull-board.ts",
    "stats:errors": "tsx scripts/task-error-stats.ts",
    "check:api-handler": "node scripts/guards/api-route-contract-guard.mjs",
    "check:logs": "tsx scripts/check-no-console.ts",
    "check:log-semantic": "tsx scripts/check-log-semantic.ts",
    "check:media-normalization": "tsx scripts/check-media-normalization.ts",
    "check:no-api-direct-llm-call": "node scripts/guards/no-api-direct-llm-call.mjs",
    "check:no-internal-task-sync-fallback": "node scripts/guards/no-internal-task-sync-fallback.mjs",
    "check:no-media-provider-bypass": "node scripts/guards/no-media-provider-bypass.mjs",
    "check:no-model-key-downgrade": "node scripts/guards/no-model-key-downgrade.mjs",
    "check:no-provider-guessing": "node scripts/guards/no-provider-guessing.mjs",
    "check:no-hardcoded-model-capabilities": "node scripts/guards/no-hardcoded-model-capabilities.mjs",
    "check:capability-catalog": "node scripts/check-capability-catalog.mjs",
    "check:pricing-catalog": "node scripts/check-pricing-catalog.mjs",
    "check:model-config-contract": "node scripts/check-model-config-contract.mjs --strict",
    "check:config-center-guards": "npm run check:no-model-key-downgrade && npm run check:no-provider-guessing && npm run check:no-hardcoded-model-capabilities && npm run check:capability-catalog && npm run check:pricing-catalog",
    "check:outbound-image-unification": "tsx scripts/check-outbound-image-unification.ts",
    "check:outbound-image-runtime-sample": "tsx scripts/check-outbound-image-runtime-sample.ts",
    "check:outbound-image-success-rate": "tsx scripts/check-outbound-image-success-rate.ts",
    "check:image-urls-contract": "tsx scripts/check-image-urls-contract.ts",
    "verify:outbound-image": "cross-env BILLING_TEST_BOOTSTRAP=0 vitest run src/lib/media/outbound-image.test.ts src/lib/media/image-url.test.ts && npm run check:outbound-image-unification",
    "check:task-loading": "node scripts/guards/task-loading-guard.mjs",
    "check:task-target-states-no-polling": "node scripts/guards/task-target-states-no-polling-guard.mjs",
    "check:no-server-mirror-state": "node scripts/guards/no-server-mirror-state.mjs",
    "check:no-multiple-sources-of-truth": "node scripts/guards/no-multiple-sources-of-truth.mjs",
    "check:file-line-count": "node scripts/guards/file-line-count-guard.mjs",
    "check:no-duplicate-endpoint-entry": "node scripts/guards/no-duplicate-endpoint-entry.mjs",
    "check:test-route-coverage": "node scripts/guards/test-route-coverage-guard.mjs",
    "check:test-tasktype-coverage": "node scripts/guards/test-tasktype-coverage-guard.mjs",
    "check:test-behavior-quality": "node scripts/guards/test-behavior-quality-guard.mjs",
    "check:changed-test-impact": "node scripts/guards/changed-file-test-impact-guard.mjs",
    "check:test-behavior-route-coverage": "node scripts/guards/test-behavior-route-coverage-guard.mjs",
    "check:test-behavior-tasktype-coverage": "node scripts/guards/test-behavior-tasktype-coverage-guard.mjs",
    "check:test-coverage-guards": "npm run check:test-behavior-quality && npm run check:test-route-coverage && npm run check:test-tasktype-coverage && npm run check:test-behavior-route-coverage && npm run check:test-behavior-tasktype-coverage",
    "check:requirements-matrix": "cross-env BILLING_TEST_BOOTSTRAP=0 vitest run tests/contracts/requirements-matrix.test.ts",
    "check:image-reference-normalization": "node scripts/guards/image-reference-normalization-guard.mjs",
    "check:task-submit-compensation": "node scripts/guards/task-submit-compensation-guard.mjs",
    "check:locale-navigation": "node scripts/guards/locale-navigation-guard.mjs",
    "check:prompt-i18n": "node scripts/guards/prompt-i18n-guard.mjs",
    "check:prompt-i18n-regression": "node scripts/guards/prompt-semantic-regression.mjs",
    "check:prompt-ab-regression": "node scripts/guards/prompt-ab-regression.mjs",
    "check:prompt-json-canary": "node scripts/guards/prompt-json-canary-guard.mjs",
    "billing:cleanup-pending-freezes": "tsx scripts/billing-cleanup-pending-freezes.ts",
    "billing:reconcile-ledger": "tsx scripts/billing-reconcile-ledger.ts",
    "cleanup:remove-legacy-voice-data": "tsx scripts/cleanup-remove-legacy-voice-data.ts",
    "test:billing": "npm run test:billing:coverage",
    "test:billing:unit": "cross-env BILLING_TEST_BOOTSTRAP=0 vitest run tests/unit/billing",
    "test:billing:integration": "cross-env BILLING_TEST_BOOTSTRAP=1 vitest run tests/integration/billing",
    "test:billing:concurrency": "cross-env BILLING_TEST_BOOTSTRAP=1 vitest run tests/concurrency/billing",
    "test:billing:coverage": "cross-env BILLING_TEST_BOOTSTRAP=1 vitest run --coverage tests/unit/billing tests/integration/billing tests/concurrency/billing",
    "test:guards": "npm run check:api-handler && npm run check:image-reference-normalization && npm run check:task-submit-compensation && npm run check:no-api-direct-llm-call && npm run check:test-coverage-guards && npm run check:changed-test-impact && npm run check:requirements-matrix && npm run check:locale-navigation",
    "test:unit:all": "cross-env BILLING_TEST_BOOTSTRAP=0 vitest run tests/unit",
    "test:integration:api": "cross-env BILLING_TEST_BOOTSTRAP=1 vitest run tests/integration/api",
    "test:integration:provider": "cross-env BILLING_TEST_BOOTSTRAP=0 vitest run tests/integration/provider",
    "test:integration:chain": "cross-env BILLING_TEST_BOOTSTRAP=1 vitest run tests/integration/chain",
    "test:integration:task": "cross-env BILLING_TEST_BOOTSTRAP=1 vitest run tests/integration/task",
    "test:system": "cross-env SYSTEM_TEST_BOOTSTRAP=1 vitest run tests/system",
    "test:regression:cases": "cross-env SYSTEM_TEST_BOOTSTRAP=1 vitest run tests/regression",
    "test:behavior:unit": "cross-env BILLING_TEST_BOOTSTRAP=0 vitest run tests/unit/helpers tests/unit/worker tests/unit/optimistic tests/unit/guards",
    "test:behavior:api": "cross-env BILLING_TEST_BOOTSTRAP=0 vitest run tests/integration/api/contract",
    "test:behavior:provider": "cross-env BILLING_TEST_BOOTSTRAP=0 vitest run tests/integration/provider",
    "test:behavior:chain": "cross-env BILLING_TEST_BOOTSTRAP=0 vitest run tests/integration/chain",
    "test:behavior:guards": "npm run check:api-handler && npm run check:image-reference-normalization && npm run check:task-submit-compensation && npm run check:test-coverage-guards && npm run check:requirements-matrix",
    "test:behavior:full": "npm run test:behavior:guards && npm run test:behavior:unit && npm run test:behavior:api && npm run test:behavior:provider && npm run test:behavior:chain",
    "test:coverage:core-baseline": "cross-env SYSTEM_TEST_BOOTSTRAP=1 vitest run --config vitest.core-coverage.config.ts tests/unit tests/integration/api tests/integration/provider tests/integration/chain tests/integration/task tests/system tests/regression",
    "test:all": "npm run test:guards && npm run test:unit:all && npm run test:billing:integration && npm run test:billing:concurrency && npm run test:integration:api && npm run test:integration:provider && npm run test:integration:chain && npm run test:integration:task && npm run test:system && npm run test:regression:cases",
    "test:regression": "npm run test:all",
    "test:pr": "bash scripts/test-regression-runner.sh npm run test:all",
    "typecheck": "tsc --noEmit",
    "lint:all": "npm run lint -- .",
    "verify:commit": "npm run lint:all && npm run typecheck && npm run test:all",
    "verify:push": "npm run lint:all && npm run typecheck && npm run test:all && npm run build",
    "migrate:image-urls-contract": "tsx scripts/migrate-image-urls-contract.ts",
    "migrate:model-config-contract": "tsx scripts/migrations/migrate-model-config-contract.ts",
    "migrate:capability-selections": "tsx scripts/migrations/migrate-capability-selections.ts",
    "migrate:gateway-route-openai-compat": "tsx scripts/migrations/migrate-gateway-route-openai-compat.ts",
    "migrate:custom-pricing-v2": "tsx scripts/migrations/migrate-custom-pricing-v2.ts",
    "migrate:graph-artifacts-unique-index": "tsx scripts/migrations/migrate-graph-artifacts-unique-index.ts",
    "migrate:release-blockers": "tsx scripts/migrations/migrate-release-blockers.ts",
    "backup:media-safety": "tsx scripts/media-safety-backup.ts",
    "backup:media-restore-dry-run": "tsx scripts/media-restore-dry-run.ts",
    "media:backfill-refs": "tsx scripts/media-backfill-refs.ts",
    "backup:archive-legacy-media": "tsx scripts/media-archive-legacy-refs.ts",
    "backup:unreferenced-media-index": "tsx scripts/media-build-unreferenced-index.ts",
    "lint": "eslint",
    "clean": "rimraf .next"
  },
  "dependencies": {
    "@ai-sdk/google": "^3.0.22",
    "@ai-sdk/openai": "^3.0.26",
    "@ai-sdk/react": "^3.0.118",
    "@aws-sdk/client-s3": "^3.883.0",
    "@aws-sdk/s3-request-presigner": "^3.883.0",
    "@bull-board/api": "^6.16.4",
    "@bull-board/express": "^6.16.4",
    "@dnd-kit/core": "^6.3.1",
    "@dnd-kit/sortable": "^10.0.0",
    "@fal-ai/client": "^1.7.2",
    "@google/genai": "^1.34.0",
    "@next-auth/prisma-adapter": "^1.0.7",
    "@openrouter/sdk": "^0.3.11",
    "@prisma/client": "^6.19.2",
    "@remotion/cli": "^4.0.405",
    "@remotion/player": "^4.0.405",
    "@tanstack/react-query": "^5.90.20",
    "@types/archiver": "^7.0.0",
    "@types/bcryptjs": "^3.0.0",
    "@types/express": "^5.0.6",
    "@vercel/og": "^0.8.6",
    "ai": "^6.0.116",
    "archiver": "^7.0.1",
    "bcryptjs": "^3.0.2",
    "bullmq": "^5.67.3",
    "cos-nodejs-sdk-v5": "^2.15.4",
    "express": "^5.2.1",
    "file-saver": "^2.0.5",
    "geist": "^1.7.0",
    "ioredis": "^5.9.2",
    "jsonrepair": "^3.13.2",
    "jszip": "^3.10.1",
    "lru-cache": "^11.2.6",
    "lucide-react": "^0.575.0",
    "mammoth": "^1.11.0",
    "mysql2": "^3.15.1",
    "next": "^15.5.7",
    "next-auth": "^4.24.11",
    "next-intl": "^4.7.0",
    "openai": "^6.8.1",
    "prisma": "^6.19.2",
    "react": "^19.1.2",
    "react-dom": "^19.1.2",
    "react-grab": "^0.1.20",
    "react-hot-toast": "^2.6.0",
    "remotion": "^4.0.405",
    "sharp": "^0.34.5",
    "undici": "^7.22.0",
    "zod": "^3.25.76"
  },
  "devDependencies": {
    "@eslint/eslintrc": "^3",
    "@tailwindcss/postcss": "^4",
    "@types/file-saver": "^2.0.7",
    "@types/node": "^20",
    "@types/react": "^19",
    "@types/react-dom": "^19",
    "@vitest/coverage-v8": "^2.1.8",
    "concurrently": "^9.2.1",
    "cross-env": "^10.1.0",
    "eslint": "^9",
    "eslint-config-next": "15.5.4",
    "husky": "^9.1.7",
    "rimraf": "^6.1.2",
    "tailwindcss": "^4",
    "tsx": "^4.20.5",
    "typescript": "^5",
    "vitest": "^2.1.8"
  }
}
