{ "name": "clawhub", "private": true, "workspaces": [ "packages/clawhub", "packages/clawhub-admin", "packages/schema" ], "type": "module", "scripts": { "admin": "bun packages/clawhub-admin/src/cli.ts", "build": "bun run llms:generate && vite build && bun scripts/copy-og-assets.ts", "build:vercel": "bun scripts/vercel-build.ts", "check": "bun run lint", "check:peers": "bun scripts/check-peer-deps.ts", "check:release-workflow-action-pins": "node scripts/check-release-workflow-action-pins.mjs", "ci:e2e-http": "bun run test:e2e:prod-http && bunx vitest run -c vitest.e2e.config.ts e2e/agent-skills-discovery.e2e.test.ts && bunx vitest run -c vitest.e2e.config.ts e2e/clawhub.e2e.test.ts --testNamePattern \"prints CLI version|search endpoint returns a results array|cli search does not error|cli scan rejects local folders|cli scan download fetches a stored submitted-version scan report|package publish --dry-run from a GitHub repo|package publish --dry-run --json|package publish exits non-zero when Plugin Inspector hard errors block publish|package publish exits zero and prints Plugin Inspector warnings|package publish help shows|skill verify help omits the redundant json flag|skill verify accepts the legacy json flag\" && bunx vitest run -c vitest.e2e.config.ts e2e/permissions.e2e.test.ts", "ci:packages": "bun run --cwd packages/schema build && bun run --cwd packages/clawhub verify && bun run --cwd packages/clawhub-admin verify", "ci:playwright": "VITE_CONVEX_URL=https://wry-manatee-359.convex.cloud VITE_CONVEX_SITE_URL=https://wry-manatee-359.convex.site bun run build && VITE_CONVEX_URL=https://wry-manatee-359.convex.cloud VITE_CONVEX_SITE_URL=https://wry-manatee-359.convex.site bun run test:pw", "ci:playwright-smoke": "VITE_CONVEX_URL=https://wry-manatee-359.convex.cloud VITE_CONVEX_SITE_URL=https://wry-manatee-359.convex.site bun run build && VITE_CONVEX_URL=https://wry-manatee-359.convex.cloud VITE_CONVEX_SITE_URL=https://wry-manatee-359.convex.site bun run test:pw -- --project=chromium e2e/ci-smoke.pw.test.ts e2e/public-routes-smoke.pw.test.ts", "ci:pr": "bun run ci:static && bun run ci:unit && bun run ci:packages && bun run ci:types-build && bun run ci:e2e-http", "ci:static": "bun run check:peers && bun audit --ignore GHSA-rmmr-r34h-pfm5 --ignore GHSA-gv7w-rqvm-qjhr --ignore GHSA-g7r4-m6w7-qqqr --ignore GHSA-x4vx-rjvf-j5p4 --ignore GHSA-76mc-f452-cxcm --ignore GHSA-hpcv-96wg-7vj8 --ignore GHSA-r47g-fvhr-h676 --ignore GHSA-vxr8-fq34-vvx9 --ignore GHSA-gvmj-g25r-r7wr --ignore GHSA-rp9w-3fw7-7cwq --ignore GHSA-cmwh-pvxp-8882 --ignore GHSA-vmh5-mc38-953g --ignore GHSA-pr7r-676h-xcf6 && bun run llms:check && bun run format:check && bun run lint && bun run deadcode:ci && bun run check:release-workflow-action-pins", "ci:types-build": "bunx tsc --noEmit && bunx tsc -p packages/schema/tsconfig.json --noEmit && bunx tsc -p packages/clawhub/tsconfig.json --noEmit && bun run --cwd packages/clawhub-admin typecheck && VITE_CONVEX_URL=https://example.invalid bun run build", "ci:unit": "SITE_URL= VITE_SITE_URL= VITE_CONVEX_URL=https://example.invalid bun run coverage", "clawscan:local": "bun scripts/local-clawscan-dry-run.ts", "convex:deploy": "bunx convex deploy --typecheck=disable --yes", "coverage": "vitest run --coverage", "crabbox:hydrate": "node scripts/crabbox-wrapper.mjs actions hydrate", "crabbox:run": "node scripts/crabbox-wrapper.mjs run", "crabbox:stop": "node scripts/crabbox-wrapper.mjs stop", "crabbox:warmup": "node scripts/crabbox-wrapper.mjs warmup", "dataset:snapshot": "bun scripts/security-dataset/export-snapshot.ts", "dataset:snapshot:prod:dry-run": "bun scripts/security-dataset/export-snapshot.ts --prod --limit 10 --dry-run", "deadcode:ci": "bun run deadcode:knip", "deadcode:dependencies": "bunx knip@6.8.0 --config knip.config.ts --production --no-progress --reporter compact --dependencies --no-config-hints", "deadcode:exports": "KNIP_INCLUDE_TESTS=1 bunx knip@6.8.0 --config knip.config.ts --no-progress --reporter compact --exports --no-config-hints", "deadcode:files": "bunx knip@6.8.0 --config knip.config.ts --production --no-progress --reporter compact --files --no-config-hints", "deadcode:knip": "bun run deadcode:files && bun run deadcode:dependencies && bun run deadcode:exports", "design:audit:browser": "bun scripts/design-audit/browser-check.ts", "design:audit:codex": "bun scripts/design-audit/run-codex.ts", "design:audit:finalize": "bun scripts/design-audit/finalize.ts", "design:audit:source": "bun scripts/design-audit/source-check.ts", "dev": "bun run llms:generate && bun --bun vite dev --port 3000", "dev:workers": "bun scripts/dev-workers.ts", "dev:worktree": "wt --yes dev", "docs:list": "bun scripts/docs-list.ts", "docs:run": "bun scripts/docs-run.ts", "email:dev": "email dev --dir emails --port 8765", "format": "oxfmt --write", "format:check": "oxfmt --check", "lint": "bun run lint:oxlint", "lint:fix": "oxlint --type-aware --tsconfig ./tsconfig.oxlint.json ./src ./convex ./packages/clawhub/src ./packages/clawhub-admin/src ./packages/schema/src --fix && bun run format", "lint:oxlint": "oxlint --type-aware --tsconfig ./tsconfig.oxlint.json ./src ./convex ./packages/clawhub/src ./packages/clawhub-admin/src ./packages/schema/src", "llms:check": "bun scripts/generate-llms-txt.ts --check", "llms:generate": "bun scripts/generate-llms-txt.ts", "preinstall": "bunx --bun only-allow@1.2.2 bun", "preview": "bun --bun vite preview", "proof:publish": "node scripts/ui-proof-publish.mjs", "proof:ui": "node scripts/ui-proof.mjs", "publish:prepublication-worker": "bun scripts/security/run-prepublication-worker.ts", "release:clawhub:cli:changelog": "node scripts/extract-changelog-release.mjs", "release:clawhub:cli:npm:check": "node scripts/clawhub-cli-npm-release-check.mjs", "search:prove-test": "bun scripts/canonical-search/prove-test.ts", "security:codex-worker": "bun scripts/security/run-codex-scan-worker.ts", "seed": "bun scripts/seed.ts", "seed:dev": "bun run setup:worktree -- --quiet && bun scripts/dev-worktree.ts --seed-only", "seed:public-corpus": "bun run setup:worktree -- --quiet && bunx convex dev --once --typecheck=disable && bun scripts/public-corpus/seed-public-corpus.ts", "seed:test": "bun scripts/seed-test.ts", "seed:test:import-snapshot": "bun scripts/staging-seed/import-test-snapshot.ts", "seed:test:ranking-export": "bun scripts/ranking-metrics/export-prod-ranking-metrics.ts", "seed:test:ranking-import": "bun scripts/ranking-metrics/import-test-ranking-metrics.ts", "seed:test:sanitize-snapshot": "bun scripts/staging-seed/sanitize-prod-snapshot.ts", "seed:test:validate-snapshot": "bun scripts/staging-seed/validate-sanitized-snapshot.ts", "setup:worktree": "bun scripts/setup-worktree.ts", "skill-cards:worker": "bun scripts/skill-cards/run-skill-card-worker.ts", "skills-sh:capture-500": "bun scripts/skills-sh-catalog/capture-frozen-snapshot.ts", "skills-sh:prove-500": "bun scripts/skills-sh-catalog/prove-500.ts", "skills-sh:prove-canary": "CLAWHUB_TEST_CATALOG_MODE=controlled-canary bun scripts/skills-sh-catalog/run-test-gate.ts", "skills-sh:prove-mirror": "bun scripts/skills-sh-catalog/prove-mirror-test.ts", "skills-sh:prove-trending": "bun scripts/skills-sh-catalog/prove-trending-test.ts", "skills:install": "npx --yes skills@1.5.16 add openclaw/carapace --skill openclaw-design openclaw-brand openclaw-carapace openclaw-design-system openclaw-marketing-pages openclaw-design-audit --agent codex --copy --yes", "test": "vitest run", "test:e2e": "vitest run -c vitest.e2e.config.ts", "test:e2e:local": "bash scripts/run-playwright-local.sh", "test:e2e:prod-http": "vitest run -c vitest.e2e.config.ts e2e/prod-http-smoke.e2e.test.ts", "test:pw": "playwright test", "test:pw:local-auth": "bun scripts/run-playwright-local-auth.ts", "test:pw:publish-lifecycle": "bun run test:pw:local-auth -- --project=chromium e2e/local-auth/publish-skill-lifecycle.pw.test.ts", "test:ui-contract": "vitest run src/__tests__/ui-design-contract.test.ts src/__tests__/header.test.tsx src/__tests__/home-route.test.tsx src/components/Footer.test.tsx src/lib/theme.test.tsx src/routes/-settings.test.tsx", "test:watch": "vitest", "trending:prove-test": "bun scripts/canonical-trending/prove-test.ts", "validate:public-corpus": "bun scripts/public-corpus/validate-public-corpus.ts", "verify:convex-contract": "bun scripts/verify-convex-contract.ts" }, "dependencies": { "@auth/core": "0.41.3", "@convex-dev/auth": "0.0.94", "@convex-dev/migrations": "0.3.6", "@convex-dev/rate-limiter": "0.3.2", "@fontsource/bricolage-grotesque": "5.3.0", "@fontsource/ibm-plex-mono": "5.3.0", "@fontsource/noto-sans-sc": "5.3.0", "@monaco-editor/react": "4.7.0", "@openclaw/carapace": "git+https://github.com/openclaw/carapace.git#v0.6.1", "@openclaw/plugin-inspector": "0.3.21", "@radix-ui/react-avatar": "1.2.6", "@radix-ui/react-dialog": "1.1.23", "@radix-ui/react-dropdown-menu": "2.1.24", "@radix-ui/react-label": "2.1.15", "@radix-ui/react-select": "2.3.7", "@radix-ui/react-separator": "1.1.15", "@radix-ui/react-slot": "1.3.3", "@radix-ui/react-toggle-group": "1.1.19", "@radix-ui/react-tooltip": "1.2.16", "@react-email/components": "^1.0.12", "@react-email/render": "^2.1.0", "@resvg/resvg-wasm": "2.6.2", "@shikijs/rehype": "4.4.1", "@tanstack/react-router": "1.170.18", "@tanstack/react-start": "1.168.34", "@vercel/analytics": "2.0.1", "@vercel/oidc": "^3.8.1", "@vercel/speed-insights": "2.0.0", "class-variance-authority": "0.7.1", "clawhub-schema": "workspace:0.0.2", "clsx": "2.1.1", "convex": "1.43.0", "convex-helpers": "0.1.120", "fflate": "0.8.3", "h3": "2.0.1-rc.25", "ignore": "7.0.6", "jose": "6.2.3", "lucide-react": "1.28.0", "mermaid": "^11.16.1", "mime": "4.1.0", "monaco-editor": "0.56.0", "parse5": "8.0.1", "pino": "10.3.1", "react": "19.2.8", "react-dom": "19.2.8", "react-markdown": "10.1.0", "rehype-raw": "7.0.0", "rehype-sanitize": "6.0.0", "remark-gfm": "4.0.1", "resend": "6.18.1", "semver": "7.8.5", "sharp": "0.35.3", "shiki": "4.4.1", "sonner": "2.0.7", "tailwind-merge": "3.6.0", "tailwindcss": "4.3.3", "tw-animate-css": "1.4.0", "unified": "11.0.5", "unist-util-visit": "5.1.0", "yaml": "2.9.0", "yauzl": "3.4.0", "zod": "4.4.3" }, "devDependencies": { "@edge-runtime/vm": "^5.0.0", "@faker-js/faker": "^10.5.0", "@playwright/test": "^1.62.1", "@react-email/ui": "^6.9.1", "@tailwindcss/vite": "^4.3.3", "@tanstack/devtools-vite": "0.8.3", "@testing-library/dom": "10.4.1", "@testing-library/react": "16.3.2", "@types/node": "26.1.2", "@types/react": "19.2.18", "@types/react-dom": "19.2.4", "@types/semver": "7.7.1", "@types/yauzl": "3.4.0", "@typescript/native": "npm:typescript@7.0.2", "@vitejs/plugin-react": "6.0.5", "@vitest/coverage-v8": "4.1.10", "convex-test": "^0.0.54", "jsdom": "29.1.1", "nitro": "3.0.260610-beta", "only-allow": "1.2.2", "oxfmt": "0.61.0", "oxlint": "1.76.0", "oxlint-tsgolint": "7.0.2001", "react-email": "^6.9.1", "typescript": "6.0.3", "undici": "7.29.0", "vite": "8.2.0", "vitest": "4.1.10" }, "overrides": { "ast-v8-to-istanbul": "1.0.4", "brace-expansion": "5.0.9", "dompurify": "3.4.13", "esbuild": "0.28.1", "fast-uri": "3.1.5", "js-yaml": "4.3.1", "nanoid": "3.3.18", "next": "16.2.11", "postcss": "8.5.23", "sharp": "0.35.3", "shell-quote": "1.10.0", "socket.io-parser": "4.2.7", "undici": "7.29.0", "ws": "8.21.0" } }