Replaces the plain-text output <div> with a real xterm.js terminal (@xterm/xterm + @xterm/addon-fit), so ANSI color/control codes from scripts render as actual colors instead of raw escape characters. stderr chunks are wrapped in ANSI red so failures stand out even from tools that don't colorize their own output. Also sets FORCE_COLOR=1/ CLICOLOR_FORCE=1 as env defaults (real/script env still wins) since scripts run without a real TTY and most tools auto-disable color without one of these overrides. Fixed a React Strict Mode bug found while testing: the initial log was written to the terminal via a "write once" ref flag in the parent, but Strict Mode's dev-only mount->cleanup->remount cycle creates a fresh Terminal on the real mount, so that flag silently skipped writing to the surviving instance - the terminal looked completely blank until live output arrived. Fixed by writing initialData inside the same effect that creates the Terminal, so it's correct by construction regardless of how many times the effect runs. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
68 lines
1.8 KiB
JSON
68 lines
1.8 KiB
JSON
{
|
|
"name": "app",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"type": "module",
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "https://dev.pivoine.art/valknar/triggershell.git",
|
|
"directory": "app"
|
|
},
|
|
"scripts": {
|
|
"dev": "tsx watch server.ts",
|
|
"build": "next build",
|
|
"start": "cross-env NODE_ENV=production tsx server.ts",
|
|
"lint": "eslint",
|
|
"typecheck": "tsc --noEmit",
|
|
"format": "prettier --write .",
|
|
"validate-config": "tsx scripts/validate-config.ts",
|
|
"db:generate": "drizzle-kit generate",
|
|
"db:studio": "drizzle-kit studio"
|
|
},
|
|
"dependencies": {
|
|
"@base-ui/react": "^1.7.0",
|
|
"@hookform/resolvers": "^5.8.0",
|
|
"@xterm/addon-fit": "^0.11.0",
|
|
"@xterm/xterm": "^6.0.0",
|
|
"argon2": "^0.45.1",
|
|
"better-sqlite3": "^13.0.3",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"cmdk": "^1.1.1",
|
|
"drizzle-orm": "^0.45.2",
|
|
"execa": "^10.0.1",
|
|
"iron-session": "^8.0.4",
|
|
"lucide-react": "^1.31.0",
|
|
"next": "16.3.1",
|
|
"next-themes": "^0.4.6",
|
|
"react": "19.2.8",
|
|
"react-dom": "19.2.8",
|
|
"react-hook-form": "^7.85.0",
|
|
"shadcn": "^4.18.0",
|
|
"sonner": "^2.0.8",
|
|
"tailwind-merge": "^3.6.0",
|
|
"tw-animate-css": "^1.4.0",
|
|
"ws": "^8.21.3",
|
|
"yaml": "^2.9.0",
|
|
"zod": "^4.4.3"
|
|
},
|
|
"devDependencies": {
|
|
"@tailwindcss/postcss": "^4",
|
|
"@types/better-sqlite3": "^9.6.0",
|
|
"@types/node": "^20",
|
|
"@types/react": "^19",
|
|
"@types/react-dom": "^19",
|
|
"@types/ws": "^8.18.1",
|
|
"cross-env": "^10.1.0",
|
|
"drizzle-kit": "^0.31.10",
|
|
"eslint": "^9",
|
|
"eslint-config-next": "16.3.1",
|
|
"prettier": "^3.9.6",
|
|
"prettier-plugin-tailwindcss": "^0.8.1",
|
|
"tailwindcss": "^4",
|
|
"tsx": "^4.23.12",
|
|
"typescript": "^5"
|
|
},
|
|
"packageManager": "pnpm@11.21.0"
|
|
}
|