{ "dependencies": { "@core/social": "file:core/social", "@nestjs/swagger": "7.4.2", "bcrypt": "^6.0.0", "electron-vite": "3.1.0", "next": "15.5.9", "playwright-extra": "^4.3.6", "puppeteer-extra-plugin-stealth": "^2.11.2", "reflect-metadata": "^0.2.2", "sqlite3": "^5.1.7", "tsyringe": "^4.10.0", "uuid": "^13.0.0", "vite": "6.4.1" }, "description": "GridPilot - Clean Architecture monorepo for web platform and Electron companion app", "devDependencies": { "@cucumber/cucumber": "^11.0.1", "@nestjs/common": "10.4.20", "@nestjs/core": "10.4.20", "@nestjs/platform-express": "10.4.20", "@nestjs/testing": "10.4.20", "@playwright/test": "^1.57.0", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.0", "@types/bcrypt": "^6.0.0", "@types/express": "^4.17.21", "@types/jsdom": "^27.0.0", "@types/node": "^24.10.1", "@types/supertest": "^6.0.3", "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", "@vitest/coverage-v8": "^4.0.16", "@vitest/ui": "^4.0.16", "cheerio": "^1.0.0", "commander": "^11.0.0", "electron": "^39.2.7", "eslint": "^8.0.0", "eslint-import-resolver-typescript": "2.7.1", "eslint-plugin-boundaries": "^5.3.1", "eslint-plugin-gridpilot-adapters-rules": "file:adapters/eslint-rules", "eslint-plugin-gridpilot-core-rules": "file:core/eslint-rules", "eslint-plugin-import": "^2.32.0", "faker": "^6.6.6", "glob": "^13.0.0", "husky": "^9.1.7", "jsdom": "^22.1.0", "lint-staged": "^15.2.10", "openapi-typescript": "^7.4.3", "prettier": "^3.0.0", "puppeteer": "^24.31.0", "supertest": "^7.1.4", "ts-node": "^10.9.2", "tsx": "^4.7.0", "typescript": "^5.9.3", "vitest": "^4.0.16" }, "engines": { "node": ">=20.0.0" }, "name": "gridpilot", "overrides": { "@types/react": "19.2.7", "@types/react-dom": "19.2.3" }, "private": true, "scripts": { "api:build": "npm run build --workspace=@gridpilot/api", "api:coverage": "vitest run --config vitest.api.config.ts --coverage", "api:generate-spec": "tsx scripts/generate-openapi-spec.ts", "api:generate-types": "tsx scripts/generate-api-types.ts", "api:sync-types": "npm run api:generate-spec && npm run api:generate-types", "api:test": "vitest run --config vitest.api.config.ts", "build": "echo 'Build all packages placeholder - to be configured'", "chrome:debug": "node -e \"console.log('Chrome debug: Open Chrome manually with --remote-debugging-port=9222')\"", "companion:build": "npm run build --workspace=@gridpilot/companion", "companion:dev": "npm run dev --workspace=@gridpilot/companion", "companion:start": "npm run start --workspace=@gridpilot/companion", "deploy:website": "npm run deploy:website:prod", "deploy:website:preview": "npx vercel deploy --cwd apps/website", "deploy:website:prod": "npx vercel deploy --prod", "dev": "echo 'Development server placeholder - to be configured'", "docker:dev": "node scripts/docker.js dev", "docker:dev:build": "node scripts/docker.js dev:build", "docker:dev:clean": "node scripts/docker.js dev:clean", "docker:dev:down": "node scripts/docker.js dev:down", "docker:dev:inmemory": "cross-env GRIDPILOT_API_PERSISTENCE=inmemory npm run docker:dev:up", "docker:dev:postgres": "cross-env GRIDPILOT_API_PERSISTENCE=postgres npm run docker:dev:up", "docker:dev:up": "node scripts/docker.js dev:up", "docker:e2e:build": "node scripts/docker.js e2e:build", "docker:e2e:clean": "node scripts/docker.js e2e:clean", "docker:e2e:down": "node scripts/docker.js e2e:down", "docker:e2e:up": "node scripts/docker.js e2e:up", "docker:prod": "docker-compose -p gridpilot-prod -f docker-compose.prod.yml up -d", "docker:prod:build": "docker-compose -p gridpilot-prod -f docker-compose.prod.yml up -d --build", "docker:prod:clean": "docker-compose -p gridpilot-prod -f docker-compose.prod.yml down -v", "docker:prod:down": "docker-compose -p gridpilot-prod -f docker-compose.prod.yml down", "docker:prod:logs": "docker-compose -p gridpilot-prod -f docker-compose.prod.yml logs -f", "dom:process": "npx tsx scripts/dom-export/processWorkflows.ts", "env:website:merge": "node scripts/merge-website-env.js", "generate-templates": "npx tsx scripts/generate-templates/index.ts", "lint": "npx eslint apps/api/src --ext .ts,.tsx --max-warnings 0", "migrate:media:exec": "ts-node scripts/migrate-media-refs.ts --execute", "migrate:media:help": "ts-node scripts/migrate-media-refs.ts --help", "migrate:media:test": "ts-node scripts/migrate-media-refs.ts", "minify-fixtures": "npx tsx scripts/minify-fixtures.ts", "minify-fixtures:force": "npx tsx scripts/minify-fixtures.ts --force", "prepare": "husky install || true", "smoke:website": "npm run website:build && npx playwright test -c playwright.website.config.ts", "smoke:website:docker": "npx playwright test -c playwright.website.config.ts", "test": "vitest run", "test:api:contracts": "vitest run --config vitest.api.config.ts apps/api/src/shared/testing/contractValidation.test.ts", "test:api:smoke": "npx playwright test tests/e2e/api/api-smoke.test.ts --reporter=json,html", "test:api:smoke:docker": "docker-compose -f docker-compose.e2e.yml run --rm playwright npx playwright test tests/e2e/api/api-smoke.test.ts --reporter=json,html", "test:companion-hosted": "vitest run --config vitest.e2e.config.ts tests/e2e/companion/companion-ui-full-workflow.e2e.test.ts", "test:contract:compatibility": "tsx scripts/contract-compatibility.ts", "test:contracts": "tsx scripts/run-contract-tests.ts", "test:e2e": "vitest run --config vitest.e2e.config.ts", "test:e2e:docker": "vitest run --config vitest.e2e.config.ts tests/e2e/docker/", "test:e2e:run": "node scripts/docker.js e2e:up && docker-compose -f docker-compose.e2e.yml run --rm playwright npx playwright test", "test:e2e:website": "node scripts/docker.js e2e:up && sleep 10 && docker-compose -f docker-compose.e2e.yml run --rm playwright", "test:hosted-real": "vitest run --config vitest.e2e.config.ts tests/e2e/hosted-real/", "test:integration": "vitest run tests/integration", "test:smoke": "vitest run --config vitest.smoke.config.ts", "test:smoke:electron": "playwright test --config=playwright.smoke.config.ts", "test:smoke:watch": "vitest watch --config vitest.smoke.config.ts", "test:type-generation": "vitest run --config vitest.scripts.config.ts scripts/test/type-generation.test.ts", "test:types": "tsc --noEmit -p tsconfig.tests.json", "test:unit": "vitest run tests/unit", "test:watch": "vitest watch", "test:website:types": "vitest run --config vitest.website.config.ts apps/website/lib/types/contractConsumption.test.ts", "verify": "npm run lint && npm run typecheck && npm run test:unit && npm run test:integration", "typecheck": "npm run typecheck:targets", "typecheck:grep": "npm run typescript", "typecheck:root": "npx tsc --noEmit --project tsconfig.json", "typecheck:targets": "npx tsc --noEmit -p apps/website/tsconfig.json && npx tsc --noEmit -p apps/api/tsconfig.json && npx tsc --noEmit -p adapters/tsconfig.json && npx tsc --noEmit -p core/tsconfig.json", "website:build": "npm run env:website:merge && npm run build --workspace=@gridpilot/website", "website:clean": "npm run clean --workspace=@gridpilot/website", "website:dev": "npm run env:website:merge && npm run dev --workspace=@gridpilot/website", "website:lint": "npm run lint --workspace=@gridpilot/website", "website:start": "npm run start --workspace=@gridpilot/website", "website:type-check": "npm run type-check --workspace=@gridpilot/website" }, "lint-staged": { "*.{js,ts,tsx}": [ "eslint --fix", "vitest related --run" ], "*.{json,md,yml}": [ "prettier --write" ] }, "version": "0.1.0", "workspaces": [ "core/*", "apps/*", "testing/*" ] }