{ "name": "ra2-vm", "version": "0.1.0", "private": true, "packageManager": "pnpm@11.24.0", "engines": { "pnpm": "11.24.0" }, "type": "module", "description": "Browser VM runtime for Red Alert 2 and Yuri's Revenge", "scripts": { "ra2ctl": "tsx .agents/skills/ra2-battle-control/scripts/ra2ctl.mts", "ra2agent": "tsx .agents/skills/ra2-battle-control/scripts/agent.mts", "test:browser:control": "tsx tests/real-game/browser/controlBrowserSmoke.mts", "format:check": "biome format .", "test:browser:support": "RA2_CONTROL_SCENARIO=support tsx tests/real-game/browser/controlBrowserSmoke.mts", "test:browser:exit-battle": "tsx tests/real-game/browser/exitBattleBrowserSmoke.mts", "ci:resources": "tsx scripts/ci/resources.mts", "ci:real-game": "tsx scripts/ci/run.mts real-game", "dev": "pnpm run build:cpu && pnpm --filter relay-package run build:lib && vite", "server:relay": "pnpm --filter relay-package exec tsx src/cli.mts", "server:relay:dev": "pnpm --filter relay-package run dev", "typecheck": "tsc --noEmit && pnpm --filter relay-package run typecheck && pnpm --filter @ra2vm/control run typecheck", "build": "pnpm run build:cpu && pnpm --filter relay-package run build:lib && pnpm run typecheck && vite build && pnpm run check:distribution", "preview": "pnpm --filter relay-package run build:lib && vite preview", "build:boot": "nasm -f bin -o src/vm86/boot.bin src/vm86/boot.asm", "gen:icons": "python3 scripts/assets/generateIcons.py public/", "gen:icons:check": "python3 scripts/assets/generateIcons.py public/ --check", "test": "pnpm --filter relay-package run build:lib && vitest run", "test:unit": "pnpm run build:cpu && pnpm --filter relay-package run build:lib && vitest run tests/basic packages/relay/tests", "check": "pnpm run build:cpu && pnpm run typecheck && pnpm run test:unit && vite build && pnpm run check:distribution", "test:graphics": "tsx tests/basic/browser/graphicsBrowserSmoke.mts", "test:graphics:upscale": "tsx tests/basic/browser/spatialUpscaleBrowserSmoke.mts", "test:graphics:ai": "tsx tests/basic/browser/aiUpscaleBrowserSmoke.mts", "test:graphics:gan": "tsx tests/basic/browser/ganUpscaleBrowserSmoke.mts", "test:graphics:model-probe": "tsx tests/experimental/browser/modelProbeBrowserSmoke.mts", "test:custom-maps": "tsx tests/basic/browser/customMapBrowserSmoke.mts", "test:e2e": "vitest run tests/real-game --maxWorkers=1", "test:browser": "tsx tests/real-game/browser/ra2BrowserSmoke.mts", "test:browser:ra2": "RA2_BROWSER_GAME=ra2 tsx tests/real-game/browser/ra2BrowserSmoke.mts", "test:startup": "tsx tests/real-game/browser/ra2StartupSmoke.mts", "test:browser:yr": "RA2_BROWSER_GAME=yr tsx tests/real-game/browser/ra2BrowserSmoke.mts", "test:browser:install": "playwright install chromium", "test:vm": "tsx tests/real-game/smoke/ra2Smoke.mts", "test:win32": "tsx tests/basic/smoke/win32SemanticsSmoke.mts", "test:vm:ra2": "tsx tests/real-game/smoke/ra2Smoke.mts", "test:vm:yr": "vitest run tests/real-game/yr/boot.test.ts", "test:ra2-winsock": "tsx tests/basic/smoke/ra2WinsockSmoke.mts", "test:browser:relay": "tsx tests/basic/browser/relayBrowserSmoke.mts", "test:ra2-relay": "tsx tests/basic/smoke/ra2NetworkRelaySmoke.mts", "test:browser:network": "tsx tests/real-game/browser/ra2NetworkBrowserSmoke.mts", "test:browser:network:yr": "RA2_BROWSER_GAME=yr tsx tests/real-game/browser/ra2NetworkBrowserSmoke.mts", "test:browser:keyboard-lock": "tsx tests/basic/browser/keyboardLockBrowserSmoke.mts", "test:browser:touch-ui": "tsx tests/basic/browser/touchUiBrowserSmoke.mts", "test:browser:performance": "tsx tests/basic/browser/performanceDiagnosticsBrowserSmoke.mts", "test:browser:audio": "tsx tests/basic/browser/audioLifecycleBrowserSmoke.mts", "test:browser:react-ui": "tsx tests/basic/browser/reactUiBrowserSmoke.mts", "test:browser:monitoring": "tsx tests/basic/browser/operationMonitoringBrowserSmoke.mts", "test:browser:startup-page": "tsx tests/real-game/browser/ra2StartupPageBrowserSmoke.mts", "test:browser:mo-startup": "tsx tests/real-game/browser/mentalOmegaStartupBrowserSmoke.mts", "test:browser:battle-start": "tsx tests/real-game/browser/battleStartupBrowserSmoke.mts", "test:browser:cache-reload": "tsx tests/real-game/browser/ra2CacheReloadBrowserSmoke.mts", "test:browser:archive-layers": "tsx tests/basic/browser/archiveLayersBrowserSmoke.mts", "test:ra2-nsis": "tsx tests/real-game/smoke/ra2NsisSmoke.mts", "test:ra2-online": "tsx tests/real-game/smoke/ra2OnlineSmoke.mts", "sync:game": "tsx scripts/resources/syncGamePackages.mts", "deploy": "bash scripts/deploy.sh", "build:relay": "pnpm --filter relay-package run build", "ci:quality": "pnpm run ci:basic", "ci:browser": "tsx scripts/ci/run.mts browser", "ci:basic": "tsx scripts/ci/run.mts basic", "format": "biome format --write .", "build:cpu": "tsx scripts/vm/buildV86.mts", "check:distribution": "tsx scripts/legal/verifyDistribution.ts" }, "devDependencies": { "@biomejs/biome": "2.5.15", "@playwright/test": "1.60.0", "@types/node": "^26.2.0", "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "@types/ws": "^8.18.1", "@vitejs/plugin-basic-ssl": "^2.3.0", "tsx": "^4.23.12", "typescript": "^5.6.0", "vite": "^6.0.0", "vitest": "^4.1.11", "ws": "^8.21.3" }, "dependencies": { "7z-wasm": "^1.2.0", "@ra2vm/control": "workspace:*", "fflate": "^0.8.3", "onnxruntime-web": "1.29.0", "posthog-js": "1.434.16", "react": "^19.3.0", "react-dom": "^19.3.0", "relay-package": "workspace:*", "v86": "^0.5.441" }, "license": "GPL-3.0-or-later" }