{ "name": "vibetunnel-web", "version": "1.0.0", "description": "Web frontend for terminal multiplexer", "main": "dist/server.js", "scripts": { "dev": "npm run bundle:assets && npm run bundle:css && concurrently --kill-others-on-fail \"npm run watch:css\" \"npm run watch:assets\" \"npm run bundle:client -- --watch\" \"npm run bundle:test -- --watch\" \"npm run watch:server\"", "watch:server": "tsx watch src/server.ts", "watch:css": "npx tailwindcss -i ./src/input.css -o ./public/bundle/output.css --watch", "watch:assets": "chokidar 'src/client/assets/**/*' -c 'npm run bundle:assets'", "clean": "node scripts/clean.js", "build": "npm run bundle", "typecheck": "tsc --noEmit", "ensure:dirs": "node scripts/ensure-dirs.js", "bundle": "npm run clean && npm run bundle:assets && npm run bundle:css && npm run bundle:client && npm run bundle:test", "bundle:assets": "node scripts/copy-assets.js", "bundle:css": "npm run ensure:dirs && npx tailwindcss -i ./src/input.css -o ./public/bundle/output.css --minify", "bundle:client": "npm run ensure:dirs && esbuild src/client/app-entry.ts --bundle --outfile=public/bundle/client-bundle.js --format=esm --sourcemap", "bundle:test": "npm run ensure:dirs && esbuild src/client/test-terminals-entry.ts --bundle --outfile=public/bundle/terminal.js --format=esm --sourcemap", "start": "node dist/server.js", "lint": "eslint 'src/**/*.{ts,tsx}'", "lint:fix": "eslint 'src/**/*.{ts,tsx}' --fix", "format": "prettier --write 'src/**/*.{ts,tsx,js,jsx,json,css,md}'", "format:check": "prettier --check 'src/**/*.{ts,tsx,js,jsx,json,css,md}'", "pre-commit": "./scripts/pre-commit-check.sh", "test": "vitest", "test:ui": "vitest --ui", "test:run": "vitest run", "test:coverage": "vitest run --coverage", "test:unit": "vitest run src/test/unit", "test:integration": "vitest run --config vitest.integration.config.ts", "test:critical": "vitest run src/test/critical.test.ts src/test/smoke.test.ts", "test:all": "npm run test:unit && npm run test:integration && npm run test:critical" }, "dependencies": { "@xterm/headless": "^5.5.0", "express": "^4.19.2", "lit": "^3.3.0", "@homebridge/node-pty-prebuilt-multiarch": "^0.12.0", "signal-exit": "^4.1.0", "ws": "^8.18.2" }, "devDependencies": { "@eslint/js": "^9.29.0", "@testing-library/dom": "^10.4.0", "@types/express": "^4.17.21", "@types/jest": "^30.0.0", "@types/node": "^24.0.3", "@types/supertest": "^6.0.3", "@types/uuid": "^10.0.0", "@types/ws": "^8.18.1", "@typescript-eslint/eslint-plugin": "^8.34.1", "@typescript-eslint/parser": "^8.34.1", "@vitest/coverage-v8": "^3.2.4", "@vitest/ui": "^3.2.4", "autoprefixer": "^10.4.21", "chokidar": "^4.0.3", "chokidar-cli": "^3.0.0", "concurrently": "^9.1.2", "esbuild": "^0.25.5", "eslint": "^9.29.0", "eslint-config-prettier": "^10.1.5", "eslint-plugin-prettier": "^5.5.0", "happy-dom": "^18.0.1", "husky": "^9.1.7", "jest": "^30.0.0", "lint-staged": "^16.1.2", "node-fetch": "^3.3.2", "postcss": "^8.5.6", "prettier": "^3.5.3", "puppeteer": "^24.10.2", "supertest": "^7.1.1", "tailwindcss": "^3.4.17", "ts-jest": "^29.4.0", "tsx": "^4.20.3", "typescript": "^5.8.3", "typescript-eslint": "^8.34.1", "uuid": "^11.1.0", "vitest": "^3.2.4", "ws-mock": "^0.1.0" }, "keywords": [ "terminal", "multiplexer", "websocket", "asciinema" ], "author": "", "license": "MIT" }