{
  "name": "opencodehub",
  "version": "1.0.0",
  "description": "A fully self-hosted, open-source GitHub/GitLab alternative with SSH git hosting, pipelines/actions, and advanced UI",
  "type": "module",
  "workspaces": [
    "cli"
  ],
  "repository": {
    "type": "git",
    "url": "https://github.com/swadhinbiswas/OpencodeHub.git"
  },
  "homepage": "https://github.com/swadhinbiswas/OpencodeHub#readme",
  "bugs": {
    "url": "https://github.com/swadhinbiswas/OpencodeHub/issues"
  },
  "scripts": {
    "dev": "astro dev",
    "start": "astro dev",
    "build": "astro build",
    "preview": "astro preview",
    "astro": "astro",
    "db:generate": "drizzle-kit generate",
    "db:migrate": "drizzle-kit migrate",
    "db:push": "drizzle-kit push",
    "db:studio": "drizzle-kit studio",
    "git:init": "node scripts/init-git-server.cjs",
    "git:start": "bun scripts/ssh-server.ts",
    "worker:start": "bun scripts/worker.ts",
    "runner:start": "bun src/runner/index.ts",
    "lint": "bunx astro check",
    "typecheck": "tsc --noEmit",
    "test": "vitest run",
    "test:unit": "vitest run tests/unit src",
    "test:integration": "vitest run tests/integration",
    "test:contract": "vitest run tests/contract",
    "test:smoke": "vitest run tests/smoke",
    "test:coverage": "vitest run --coverage",
    "security:audit": "node scripts/security/audit.mjs",
    "security:prepush": "bash scripts/security/pre-push-secret-scan.sh",
    "hooks:install": "bash scripts/security/install-hooks.sh",
    "backup": "bun scripts/backup.ts",
    "docs:parity": "node scripts/check-docs-parity.mjs",
    "perf:baseline": "node scripts/perf/load-baseline.mjs"
  },
  "dependencies": {
    "@astrojs/check": "^0.9.6",
    "@astrojs/node": "^8.3.0",
    "@astrojs/react": "^3.6.0",
    "@astrojs/vercel": "^7.7.0",
    "@aws-sdk/client-s3": "^3.948.0",
    "@aws-sdk/lib-storage": "^3.972.0",
    "@aws-sdk/s3-request-presigner": "^3.948.0",
    "@dnd-kit/core": "^6.3.1",
    "@dnd-kit/sortable": "^10.0.0",
    "@dnd-kit/utilities": "^3.2.2",
    "@google/genai": "^2.11.0",
    "@iconify-json/file-icons": "^1.2.2",
    "@iconify-json/vscode-icons": "^1.2.67",
    "@libsql/client": "^0.15.15",
    "@mistralai/mistralai": "^2.4.1",
    "@monaco-editor/react": "^4.6.0",
    "@opentelemetry/auto-instrumentations-node": "^0.76.0",
    "@opentelemetry/exporter-trace-otlp-http": "^0.218.0",
    "@opentelemetry/sdk-node": "^0.218.0",
    "@radix-ui/react-accordion": "^1.2.0",
    "@radix-ui/react-alert-dialog": "^1.1.1",
    "@radix-ui/react-avatar": "^1.1.0",
    "@radix-ui/react-checkbox": "^1.3.3",
    "@radix-ui/react-collapsible": "^1.1.0",
    "@radix-ui/react-context-menu": "^2.2.1",
    "@radix-ui/react-dialog": "^1.1.1",
    "@radix-ui/react-dropdown-menu": "^2.1.1",
    "@radix-ui/react-hover-card": "^1.1.1",
    "@radix-ui/react-label": "^2.1.0",
    "@radix-ui/react-menubar": "^1.1.1",
    "@radix-ui/react-navigation-menu": "^1.2.0",
    "@radix-ui/react-popover": "^1.1.1",
    "@radix-ui/react-progress": "^1.1.0",
    "@radix-ui/react-scroll-area": "^1.1.0",
    "@radix-ui/react-select": "^2.2.6",
    "@radix-ui/react-separator": "^1.1.0",
    "@radix-ui/react-slider": "^1.2.0",
    "@radix-ui/react-slot": "^1.1.0",
    "@radix-ui/react-switch": "^1.1.0",
    "@radix-ui/react-tabs": "^1.1.0",
    "@radix-ui/react-toast": "^1.2.1",
    "@radix-ui/react-toggle": "^1.1.0",
    "@radix-ui/react-toggle-group": "^1.1.0",
    "@radix-ui/react-tooltip": "^1.1.2",
    "@types/nodemailer": "^7.0.4",
    "@types/qrcode": "^1.5.6",
    "@upstash/redis": "^1.36.0",
    "arctic": "^3.7.0",
    "astro": "^4.11.0",
    "astro-icon": "^1.1.5",
    "bcryptjs": "^2.4.3",
    "better-sqlite3": "^11.1.2",
    "bullmq": "^5.65.1",
    "class-variance-authority": "^0.7.0",
    "clsx": "^2.1.1",
    "cmdk": "^1.1.1",
    "cobe": "^0.6.5",
    "date-fns": "^4.1.0",
    "dockerode": "^4.0.12",
    "dotenv": "^17.4.2",
    "drizzle-orm": "^0.45.2",
    "framer-motion": "^11.18.2",
    "github-markdown-css": "^5.8.1",
    "graphql": "^16.12.0",
    "graphql-yoga": "^5.18.0",
    "highlight.js": "^11.11.1",
    "ioredis": "^5.9.2",
    "isomorphic-dompurify": "^2.35.0",
    "isomorphic-git": "^1.25.10",
    "jose": "^5.6.3",
    "js-yaml": "^4.1.0",
    "lucide-react": "^0.400.0",
    "marked": "^17.0.1",
    "micromatch": "^4.0.8",
    "minimatch": "^9.0.9",
    "monaco-editor": "^0.50.0",
    "mysql2": "^3.15.3",
    "nanoid": "^5.0.7",
    "nodegit": "^0.28.0-alpha.27",
    "nodemailer": "^7.0.12",
    "openai": "^6.16.0",
    "openid-client": "^6.8.1",
    "openpgp": "^6.3.0",
    "otplib": "^12.0.1",
    "pg": "^8.16.3",
    "pino": "^10.1.0",
    "pino-loki": "^3.0.0",
    "postgres": "^3.4.7",
    "prom-client": "^15.1.3",
    "qrcode": "^1.5.4",
    "react": "^18.3.1",
    "react-dom": "^18.3.1",
    "react-globe.gl": "^2.37.0",
    "recharts": "^3.7.0",
    "rehype-highlight": "^7.0.2",
    "rehype-sanitize": "^6.0.0",
    "rehype-stringify": "^10.0.1",
    "remark-gfm": "^4.0.1",
    "remark-parse": "^11.0.0",
    "remark-rehype": "^11.1.2",
    "shiki": "^1.29.0",
    "simple-git": "^3.36.0",
    "sonner": "^2.0.7",
    "ssh2": "^1.15.0",
    "tailwind-merge": "^2.6.0",
    "tailwindcss-animate": "^1.0.7",
    "three": "^0.182.0",
    "unified": "^11.0.5",
    "unist-util-visit": "^5.1.0",
    "yaml": "^2.8.0",
    "zod": "^3.23.8",
    "zustand": "^4.5.4",
    "autoprefixer": "^10.4.19",
    "postcss": "~8.4.49",
    "tailwindcss": "^3.4.4"
  },
  "devDependencies": {
    "@axe-core/playwright": "^4.10.0",
    "@faker-js/faker": "^10.1.0",
    "@playwright/test": "^1.57.0",
    "@tailwindcss/typography": "^0.5.19",
    "@types/bcryptjs": "^2.4.6",
    "@types/better-sqlite3": "^7.6.11",
    "@types/dockerode": "^3.3.29",
    "@types/js-yaml": "^4.0.9",
    "@types/mdast": "^4.0.4",
    "@types/micromatch": "^4.0.10",
    "@types/node": "^20.14.9",
    "@types/pg": "^8.16.0",
    "@types/react": "^18.3.3",
    "@types/react-dom": "^18.3.0",
    "@types/ssh2": "^1.15.0",
    "@types/three": "^0.182.0",
    "@vitest/coverage-v8": "^4.1.5",
    "drizzle-kit": "^0.31.8",
    "pino-pretty": "^13.1.3",
    "typescript": "^5.9.3",
    "vite": "^5.4.11",
    "vitest": "^4.1.5"
  },
  "engines": {
    "node": ">=20.0.0"
  },
  "overrides": {
    "fast-xml-parser": "^5.8.0",
    "fast-xml-builder": "^1.2.0",
    "fast-uri": "^3.0.6",
    "protobufjs": "^7.6.0",
    "tar": "^7.5.8",
    "rollup": "^4.61.0",
    "picomatch": "^4.0.4",
    "picomatch@2": "^2.3.2",
    "qs": "^6.15.0",
    "ws": "^8.18.0",
    "yaml": "^2.8.0",
    "js-yaml": "^4.1.1",
    "devalue": "^5.8.1",
    "lodash": "^4.17.23",
    "lodash-es": "^4.17.23",
    "preact": "^10.29.0",
    "brace-expansion": "^2.0.1",
    "diff": "^5.2.0",
    "cross-spawn": "^7.0.6",
    "postcss": "^8.5.2"
  }
}
