{ "name": "waoowaoo", "version": "0.1.0", "private": true, "engines": { "node": ">=18.18.0", "npm": ">=9.0.0" }, "scripts": { "dev": "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": "concurrently --kill-others \"npm run start:next\" \"npm run start:worker\" \"npm run start:watchdog\" \"npm run start:board\"", "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": "tsx scripts/check-api-handler.ts", "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: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: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:no-api-direct-llm-call && npm run check:test-coverage-guards", "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:chain": "cross-env BILLING_TEST_BOOTSTRAP=1 vitest run tests/integration/chain", "test:behavior:unit": "cross-env BILLING_TEST_BOOTSTRAP=0 vitest run tests/unit/helpers tests/unit/worker tests/unit/optimistic", "test:behavior:api": "cross-env BILLING_TEST_BOOTSTRAP=0 vitest run tests/integration/api/contract", "test:behavior:chain": "cross-env BILLING_TEST_BOOTSTRAP=0 vitest run tests/integration/chain", "test:behavior:guards": "npm run check:test-coverage-guards", "test:behavior:full": "npm run test:behavior:guards && npm run test:behavior:unit && npm run test:behavior:api && npm run test:behavior:chain", "test:regression": "npm run test:guards && npm run test:unit:all && npm run test:billing:integration && npm run test:integration:api && npm run test:integration:chain", "test:pr": "bash scripts/test-regression-runner.sh npm run test:regression", "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", "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", "@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", "@vercel/speed-insights": "^1.3.1", "ai": "^6.0.77", "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", "ioredis": "^5.9.2", "jszip": "^3.10.1", "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.16.2", "react": "19.1.0", "react-dom": "19.1.0", "react-hot-toast": "^2.6.0", "remotion": "^4.0.405" }, "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", "rimraf": "^6.1.2", "tailwindcss": "^4", "tsx": "^4.20.5", "typescript": "^5", "vitest": "^2.1.8" } }