{ "name": "tasktopia", "version": "1.28.0", "private": true, "license": "MIT", "type": "module", "tasktopiaRuntime": { "blockTemplateVersions": [ 2, 3 ], "citySceneSchemaVersions": [ 4, 5 ], "countryOverviewSchemaVersions": [ 7, 8 ], "countryRoadSnapshotTables": [ "country_road_snapshots_v1" ], "citySceneMaxChunks": 4096, "blockStructuralShapes": { "compact-apartment-v1": { "width": 6, "height": 6, "floors": 3 }, "compact-row-v1": { "width": 6, "height": 3, "floors": 1 }, "compact-wide-v1": { "width": 6, "height": 4, "floors": 2 }, "compact-long-gallery-v1": { "width": 12, "height": 6, "floors": 2 }, "compact-corner-court-v1": { "width": 8, "height": 8, "floors": 2 }, "compact-u-courtyard-v1": { "width": 12, "height": 8, "floors": 2 }, "compact-long-slate-wing-v1": { "width": 6, "height": 12, "floors": 2 } } }, "engines": { "node": ">=24.0.0" }, "scripts": { "dev": "concurrently -k -n web,server -c cyan,yellow \"vite --host 0.0.0.0\" \"tsx watch src/server/index.ts\"", "build": "npm run typecheck && vite build && esbuild src/server/index.ts --bundle --packages=external --platform=node --format=esm --target=node24 --outfile=dist/server.mjs && esbuild src/server/regenerate-worlds.ts --bundle --packages=external --platform=node --format=esm --target=node24 --outfile=dist/regenerate-worlds.mjs && esbuild src/server/create-user-cli.ts --bundle --packages=external --platform=node --format=esm --target=node24 --outfile=dist/create-user.mjs && esbuild src/server/synchronize-assets-cli.ts --bundle --packages=external --platform=node --format=esm --target=node24 --outfile=dist/synchronize-assets.mjs && esbuild src/server/migrate-worlds.ts --bundle --packages=external --platform=node --format=esm --target=node24 --outfile=dist/migrate-worlds.mjs && esbuild scripts/audit-prod.ts --bundle --packages=external --platform=node --format=esm --target=node24 --outfile=dist/audit-worlds.mjs && esbuild src/server/synchronize-transport-cli.ts --bundle --packages=external --platform=node --format=esm --target=node24 --outfile=dist/synchronize-transport.mjs && esbuild src/server/synchronize-roads-cli.ts --bundle --packages=external --platform=node --format=esm --target=node24 --outfile=dist/synchronize-roads.mjs && esbuild src/server/synchronize-city-scenes-cli.ts --bundle --packages=external --platform=node --format=esm --target=node24 --outfile=dist/synchronize-city-scenes.mjs && node scripts/write-runtime-build-manifest.mjs", "start": "node dist/server.mjs", "typecheck": "tsc --noEmit", "lint": "eslint .", "test": "vitest run", "test:e2e": "playwright test", "test:atlas": "playwright test tests/e2e/planet-navigation.spec.ts tests/e2e/planet-city-ui.spec.ts tests/e2e/atlas-pixel-zoom.spec.ts tests/e2e/atlas-transport.spec.ts tests/e2e/overview-trains.spec.ts --project=chromium --workers=1", "smoke:mcp": "tsx scripts/mcp-smoke.ts", "test:watch": "vitest", "seed": "tsx scripts/seed-demo.ts", "seed:test": "tsx scripts/seed-test.ts", "seed:growth": "tsx scripts/seed-growth-demo.ts", "seed:showcase": "tsx scripts/seed-readme-showcase.ts", "seed:world-validation": "tsx scripts/seed-world-validation.ts", "seed:megacity-validation": "tsx scripts/seed-megacity-validation.ts", "test:world-validation": "npm run seed:world-validation && WORLD_VALIDATION_SCREENSHOT_DIR=screenshots/world-validation E2E_BASE_URL=http://127.0.0.1:5198 E2E_SEED_COMMAND=true playwright test tests/e2e/world-validation.spec.ts --project=chromium --workers=1", "test:megacity-validation": "npm run seed:megacity-validation && MEGACITY_VALIDATION_SCREENSHOT_DIR=screenshots/megacity-validation E2E_BASE_URL=http://127.0.0.1:5197 E2E_SEED_COMMAND=true playwright test tests/e2e/megacity-validation.spec.ts --project=chromium --workers=1", "test:db:start": "docker compose -f docker-compose.test.yml up -d --wait", "test:db:stop": "docker compose -f docker-compose.test.yml down", "test:scale": "tsx scripts/worldgen-scale-smoke.ts", "test:worldgen": "vitest run tests/compact-city-runtime.test.ts tests/block-layout-grid.test.ts tests/world-audit-blocks.test.ts tests/dense-worldgen.test.ts --no-file-parallelism", "test:release-world": "npm run test:worldgen && npm run test:atlas", "worlds:regenerate": "node dist/regenerate-worlds.mjs", "worlds:audit": "node dist/audit-worlds.mjs", "user:create": "node dist/create-user.mjs", "study:worldgen": "tsx scripts/worldgen-algorithm-study.ts", "assets:setup": "python3 -m venv .venv-assets && .venv-assets/bin/python -m pip install -r requirements-assets.txt", "assets:compact:verify": ".venv-assets/bin/python scripts/verify-compact-building-art.py --require-complete --require-review", "assets:construction:build": ".venv-assets/bin/python scripts/build-compact-construction-kit.py", "assets:build": ".venv-assets/bin/python scripts/build-pixel-city-pack.py && .venv-assets/bin/python scripts/build-road-atlas-v2.py", "assets:verify": ".venv-assets/bin/python scripts/audit-pixel-city-pack.py && .venv-assets/bin/python scripts/verify-atlas-assets.py && .venv-assets/bin/python scripts/verify-block-surfaces.py --preview screenshots/block-v1-micro-surfaces.png --report tmp/block-v1-micro-surfaces.json && .venv-assets/bin/python scripts/verify-micro-ambient.py && .venv-assets/bin/python .agents/skills/tasktopia-pixel-city-art/scripts/audit_pixel_style.py --manifest assets/pixel-city-pack/manifest.json --runtime assets/pixel-city-pack/runtime --report tmp/pixel-city-style-audit.json && .venv-assets/bin/python scripts/transport_furniture_art.py --published", "assets:storybook": ".venv-assets/bin/python scripts/render-pixel-city-storybook.py", "transport:synchronize": "tsx src/server/synchronize-transport-cli.ts", "roads:synchronize": "tsx src/server/synchronize-roads-cli.ts", "scenes:synchronize": "NODE_ENV=production node dist/synchronize-city-scenes.mjs" }, "dependencies": { "@fastify/compress": "^9.1.1", "@fastify/cookie": "^11.0.2", "@fastify/helmet": "^13.1.0", "@fastify/rate-limit": "^11.2.0", "@fastify/static": "10.1.2", "@modelcontextprotocol/client": "2.3.0", "@modelcontextprotocol/server": "2.3.0", "@resvg/resvg-js": "2.6.2", "fastify": "^5.12.3", "pixi.js": "8.19.0", "postgres": "^3.4.9", "react": "19.2.8", "react-dom": "19.2.8", "redis": "^6.2.1", "socket.io": "4.8.3", "socket.io-client": "4.8.3", "web-push": "^3.6.7", "zod": "^4.6.6" }, "devDependencies": { "@axe-core/playwright": "^4.12.1", "@eslint/js": "^10.0.1", "@playwright/test": "^1.62.1", "@tailwindcss/vite": "^4.3.3", "@types/node": "^24.10.0", "@types/react": "^19.2.2", "@types/react-dom": "^19.2.2", "@types/web-push": "^3.6.0", "@vitejs/plugin-react": "^6.0.5", "@vitest/coverage-v8": "^4.1.10", "concurrently": "^10.0.4", "esbuild": "^0.28.1", "eslint": "^10.8.0", "eslint-plugin-react-hooks": "^7.1.1", "globals": "^17.9.0", "tailwindcss": "^4.3.3", "tsx": "^4.23.7", "typescript": "^6.0.3", "typescript-eslint": "^8.66.0", "vite": "8.2.4", "vitest": "^4.1.10" }, "overrides": { "concurrently": { "shell-quote": "1.11.0" } } }