Files
waooplus/package.json
2026-04-03 23:06:05 +08:00

183 lines
12 KiB
JSON

{
"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"
}
}