{"_id":"factory-factory","_rev":"48-8915d41838cebe1391a8e500f3ae1935","name":"factory-factory","dist-tags":{"latest":"0.4.9"},"versions":{"0.1.0":{"name":"factory-factory","version":"0.1.0","keywords":["claude","claude-code","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.1.0","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://github.com/purplefish-ai/factory-factory#readme","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"018a8b9bbe4b182ea4a21704a2dc35015438cc33","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.1.0.tgz","fileCount":655,"integrity":"sha512-QOQA/JkI3Lrcbph0t6/gbjfK56b+5iUFPnAPTAniYYS4EfU/BqNAJSqFnV7dWwYzJ4t8K79F7VPUdVWpY3GdHg==","signatures":[{"sig":"MEUCIQDhLhDTrbapy/nTk9sEMU2dJkOE00ttEzp2W7AdiVFCZAIgGvdfxdloieXSD6ifm58pblVlqqX1KAVNww843INDfdg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":7500389},"main":"dist/src/cli/index.js","pnpm":{"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","gitHead":"7fe24314e7042e9d02b20b67ccc56df470bf373f","private":false,"scripts":{"dev":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"vitest run","build":"tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && cp -r prompts dist/ && vite build","check":"biome check .","start":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src --config .dependency-cruiser.cjs","test:watch":"vitest","db:generate":"prisma generate","dev:backend":"BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","test:coverage":"vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty"},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.5.1","react":"^19.2.4","dotenv":"^17.2.3","prisma":"^7.3.0","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.2","p-limit":"^7.2.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.2","input-otp":"^1.4.2","react-dom":"^19.2.4","superjson":"^2.2.6","remark-gfm":"^4.0.1","@trpc/client":"^11.9.0","@trpc/server":"^11.9.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.563.0","react-router":"^7.13.0","@prisma/client":"^7.3.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.4.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.1","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.0","@trpc/react-query":"^11.9.0","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.1.18","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.20","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.5.3","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.18","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"^7.3.0","@radix-ui/react-navigation-menu":"^1.2.14"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.82.1","vite":"^7.3.1","husky":"^9.1.7","prisma":"^7.3.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^8.0.3","electron":"^40.1.0","@types/ws":"^8.18.1","storybook":"10.2.1","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.1.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.1.18","@types/react":"^19.2.10","autoprefixer":"^10.4.23","concurrently":"^9.1.0","@biomejs/biome":"^2.3.13","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@storybook/react":"10.2.1","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.4.0","@electron/rebuild":"^4.0.2","@tailwindcss/vite":"^4.1.18","dependency-cruiser":"^17.3.7","@vitest/coverage-v8":"^4.0.18","@storybook/addon-mcp":"^0.2.2","@vitejs/plugin-react":"^5.1.2","@storybook/addon-a11y":"10.2.1","@storybook/react-vite":"10.2.1","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.1","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.1.0_1769906927490_0.16312948338454492","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"factory-factory","version":"0.1.1","keywords":["claude","claude-code","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.1.1","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://github.com/purplefish-ai/factory-factory#readme","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"dd11bf906e438b4de5264c0634dbe324aad68b38","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.1.1.tgz","fileCount":655,"integrity":"sha512-VB1lxk8oUoIMMAwP0p6hiEsSs+amDqcGLB0cEIJWVpVol41FNQZfM0MRk1JsL/ZhUPPTNhRZm5kHux6xvlTCnA==","signatures":[{"sig":"MEQCIBzXP3iyodWEWoc3BClgSxjHGBGWK82weybqFBBeVrDgAiAm0Ua3BU4uG0EhgPA5ytRZWRLIFA3jpA9SeYKOGaGZ6g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":7500699},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"tar":">=7.5.0","braces":">=3.0.3","micromatch":">=4.0.8"},"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","gitHead":"95a4324abd9781432c83bfa590f0d8087935805c","private":false,"scripts":{"dev":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"vitest run","build":"tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && cp -r prompts dist/ && vite build","check":"biome check .","start":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src --config .dependency-cruiser.cjs","test:watch":"vitest","db:generate":"prisma generate","dev:backend":"BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","test:coverage":"vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty"},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.5.1","react":"^19.2.4","dotenv":"^17.2.3","prisma":"^7.3.0","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.2","p-limit":"^7.2.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","superjson":"^2.2.6","remark-gfm":"^4.0.1","@trpc/client":"^11.9.0","@trpc/server":"^11.9.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.563.0","react-router":"^7.13.0","@prisma/client":"^7.3.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.4.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.1","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.0","@trpc/react-query":"^11.9.0","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.1.18","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.20","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.5.7","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.18","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"^7.3.0","@radix-ui/react-navigation-menu":"^1.2.14"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.82.1","vite":"^7.3.1","husky":"^9.1.7","prisma":"^7.3.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.3","electron":"^40.1.0","@types/ws":"^8.18.1","storybook":"10.2.3","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.1.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.1.18","@types/react":"^19.2.10","autoprefixer":"^10.4.24","concurrently":"^9.1.0","@biomejs/biome":"^2.3.13","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@storybook/react":"10.2.3","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.7.0","@electron/rebuild":"^4.0.2","@tailwindcss/vite":"^4.1.18","dependency-cruiser":"^17.3.7","@vitest/coverage-v8":"^4.0.18","@storybook/addon-mcp":"^0.2.2","@vitejs/plugin-react":"^5.1.2","@storybook/addon-a11y":"10.2.3","@storybook/react-vite":"10.2.3","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.3","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.1.1_1769910695635_0.9613412277920406","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"factory-factory","version":"0.1.2","keywords":["claude","claude-code","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.1.2","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://github.com/purplefish-ai/factory-factory#readme","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"03d98000b99942bb0cc64a63ca82e0f30b1050d8","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.1.2.tgz","fileCount":676,"integrity":"sha512-A6iJymzcg5Y1KJKkC250mU5zyJVAhHvO/Jjmb1eV9lsQ1EOoWPTo2okW7IXz1FWp1YXx0zIcn7bSuytg3ETJBA==","signatures":[{"sig":"MEQCIFykO1sJ1iF+BpB4Q5mCFnOTkaPpisgTqGTYsYgNgfW5AiB/eHJeRhlLlS9BluXb/ZoAxPg2CWqjZBO3F3fuIMuA5g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8219594},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.1","tar":">=7.5.0","hono":">=4.11.7","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3"},"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","gitHead":"532ff3621005cf468d79b5d92e085448e785f0b1","private":false,"scripts":{"dev":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"vitest run","build":"tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && cp -r prompts dist/ && vite build","check":"biome check .","start":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src --config .dependency-cruiser.cjs","test:watch":"vitest","db:generate":"prisma generate","dev:backend":"BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","test:coverage":"vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty"},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.5.1","react":"^19.2.4","dotenv":"^17.2.3","prisma":"^7.3.0","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.2","p-limit":"^7.2.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","superjson":"^2.2.6","remark-gfm":"^4.0.1","@trpc/client":"^11.9.0","@trpc/server":"^11.9.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.563.0","react-router":"^7.13.0","@prisma/client":"^7.3.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.4.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.1","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.0","@trpc/react-query":"^11.9.0","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.1.18","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.20","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.5.7","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.18","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"^7.3.0","@radix-ui/react-navigation-menu":"^1.2.14"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.82.1","vite":"^7.3.1","husky":"^9.1.7","prisma":"^7.3.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.3","electron":"^40.1.0","@types/ws":"^8.18.1","storybook":"10.2.3","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.1.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.1.18","@types/react":"^19.2.10","autoprefixer":"^10.4.24","concurrently":"^9.1.0","@biomejs/biome":"^2.3.13","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@storybook/react":"10.2.3","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.7.0","@electron/rebuild":"^4.0.2","@tailwindcss/vite":"^4.1.18","dependency-cruiser":"^17.3.7","@vitest/coverage-v8":"^4.0.18","@storybook/addon-mcp":"^0.2.2","@vitejs/plugin-react":"^5.1.2","@storybook/addon-a11y":"10.2.3","@storybook/react-vite":"10.2.3","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.3","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.1.2_1769977052638_0.7150027213749468","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"factory-factory","version":"0.1.3","keywords":["claude","claude-code","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.1.3","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://github.com/purplefish-ai/factory-factory#readme","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"0554b0ed0e0f427829887183800a60648300ae4b","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.1.3.tgz","fileCount":676,"integrity":"sha512-1UeRJ7O8fd5B1ZBcNnZgVCw2Ex0dMwuN5w6YBR0Y8f5TepY1IlM3XaGRCT0aiGM6EteXa1SJzuIBMdqlzABJhg==","signatures":[{"sig":"MEQCIANQ6DtmOJoggEPBNZHbSDtvrEsmsLHZiA6Vtxv7VOGMAiARmMxJusxgSDxq2+1exl6/jmI09XUhcVdNBCFVeg8nSA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8220291},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.1","tar":">=7.5.0","hono":">=4.11.7","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3"},"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","gitHead":"a18cfdf24283e5c362e031a1d75bfc4e04f4149b","private":false,"scripts":{"dev":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"vitest run","build":"tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && cp -r prompts dist/ && vite build","check":"biome check .","start":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src --config .dependency-cruiser.cjs","test:watch":"vitest","db:generate":"prisma generate","dev:backend":"BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","test:coverage":"vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty"},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.5.1","react":"^19.2.4","dotenv":"^17.2.3","prisma":"^7.3.0","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.2","p-limit":"^7.2.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","superjson":"^2.2.6","remark-gfm":"^4.0.1","@trpc/client":"^11.9.0","@trpc/server":"^11.9.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.563.0","react-router":"^7.13.0","@prisma/client":"^7.3.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.4.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.1","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.0","@trpc/react-query":"^11.9.0","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.1.18","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.20","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.5.7","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.18","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"^7.3.0","@radix-ui/react-navigation-menu":"^1.2.14"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.82.1","vite":"^7.3.1","husky":"^9.1.7","prisma":"^7.3.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.3","electron":"^40.1.0","@types/ws":"^8.18.1","storybook":"10.2.3","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.1.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.1.18","@types/react":"^19.2.10","autoprefixer":"^10.4.24","concurrently":"^9.1.0","@biomejs/biome":"^2.3.13","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@storybook/react":"10.2.3","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.7.0","@electron/rebuild":"^4.0.2","@tailwindcss/vite":"^4.1.18","dependency-cruiser":"^17.3.7","@vitest/coverage-v8":"^4.0.18","@storybook/addon-mcp":"^0.2.2","@vitejs/plugin-react":"^5.1.2","@storybook/addon-a11y":"10.2.3","@storybook/react-vite":"10.2.3","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.3","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.1.3_1769979582439_0.23853861517688135","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"factory-factory","version":"0.1.4","keywords":["claude","claude-code","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.1.4","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://github.com/purplefish-ai/factory-factory#readme","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"8475a1dcbc7121e5908be7c34359c830906db524","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.1.4.tgz","fileCount":697,"integrity":"sha512-0dMY7VOq9Igymp59d6JdQJ/DtXVbwDFPmAUv2YqNKZZi/QLhfIofawV36VwtILPzI4YsfIbJzpv20NCprPy0ew==","signatures":[{"sig":"MEQCIGpRss03GkDjbzFBRxO0nJkGCVAl5EpFp5xCsMg3/LVDAiB9XpGCOQ4yVyz+VbVyBEY1fHt7iLxMSE7CuAPxww4wSg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8461374},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.1","tar":">=7.5.0","hono":">=4.11.7","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3"},"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","gitHead":"d483c70ab0ddb2f1db36d7515306667d6d905363","private":false,"scripts":{"dev":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"vitest run","build":"tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && cp -r prompts dist/ && vite build","check":"biome check .","start":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src --config .dependency-cruiser.cjs","test:watch":"vitest","db:generate":"prisma generate","dev:backend":"BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","test:coverage":"vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty"},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.5.1","react":"^19.2.4","dotenv":"^17.2.3","prisma":"^7.3.0","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.2","p-limit":"^7.2.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","superjson":"^2.2.6","remark-gfm":"^4.0.1","@trpc/client":"^11.9.0","@trpc/server":"^11.9.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.563.0","react-router":"^7.13.0","@prisma/client":"^7.3.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.4.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.1","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.0","@trpc/react-query":"^11.9.0","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.1.18","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.20","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.5.7","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.18","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"^7.3.0","@radix-ui/react-navigation-menu":"^1.2.14"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.82.1","vite":"^7.3.1","husky":"^9.1.7","prisma":"^7.3.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.3","electron":"^40.1.0","@types/ws":"^8.18.1","storybook":"10.2.3","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.1.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.1.18","@types/react":"^19.2.10","autoprefixer":"^10.4.24","concurrently":"^9.1.0","@biomejs/biome":"^2.3.13","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@storybook/react":"10.2.3","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.7.0","@electron/rebuild":"^4.0.2","@tailwindcss/vite":"^4.1.18","dependency-cruiser":"^17.3.7","@vitest/coverage-v8":"^4.0.18","@storybook/addon-mcp":"^0.2.2","@vitejs/plugin-react":"^5.1.2","@storybook/addon-a11y":"10.2.3","@storybook/react-vite":"10.2.3","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.3","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.1.4_1770047887103_0.5551507613573889","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"factory-factory","version":"0.1.5","keywords":["claude","claude-code","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.1.5","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://github.com/purplefish-ai/factory-factory#readme","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"ed1d86291f2ffd8d8293a684f4983c941d1d0478","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.1.5.tgz","fileCount":703,"integrity":"sha512-JbHCjlcQcdJokykDEO6ZbccHR8GvKHenKDSen66dXLmP4gzhH3EK5KvSFN6sBHY1lOvduDjHUzY+m+UWbFFHFA==","signatures":[{"sig":"MEYCIQCaK1zqQuHC94HZqaAoHYM9etMEwVKztCm8hRwXBQAIOAIhAO6LS5JSlVKzQ5tBBnmmWwGzZ7FmGZsU5vxvxBHtSCm/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8577951},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.1","tar":">=7.5.0","hono":">=4.11.7","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3"},"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","gitHead":"1820c9ecd8ce907ff8bb189254997492ac7cba06","private":false,"scripts":{"dev":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"vitest run","build":"tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && cp -r prompts dist/ && vite build","check":"biome check .","start":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src --config .dependency-cruiser.cjs","test:watch":"vitest","db:generate":"prisma generate","dev:backend":"BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","test:coverage":"vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty"},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.5.1","react":"^19.2.4","dotenv":"^17.2.3","prisma":"^7.3.0","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.2","p-limit":"^7.2.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","superjson":"^2.2.6","remark-gfm":"^4.0.1","@trpc/client":"^11.9.0","@trpc/server":"^11.9.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.563.0","react-router":"^7.13.0","@prisma/client":"^7.3.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.4.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.1","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.0","@trpc/react-query":"^11.9.0","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.1.18","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.20","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.5.7","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.18","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"^7.3.0","@radix-ui/react-navigation-menu":"^1.2.14"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.82.1","vite":"^7.3.1","husky":"^9.1.7","prisma":"^7.3.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.3","electron":"^40.1.0","@types/ws":"^8.18.1","storybook":"10.2.3","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.1.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.1.18","@types/react":"^19.2.10","autoprefixer":"^10.4.24","concurrently":"^9.1.0","@biomejs/biome":"^2.3.13","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@storybook/react":"10.2.3","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.7.0","@electron/rebuild":"^4.0.2","@tailwindcss/vite":"^4.1.18","dependency-cruiser":"^17.3.7","@vitest/coverage-v8":"^4.0.18","@storybook/addon-mcp":"^0.2.2","@vitejs/plugin-react":"^5.1.2","@storybook/addon-a11y":"10.2.3","@storybook/addon-docs":"10.2.3","@storybook/react-vite":"10.2.3","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.3","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.1.5_1770077644189_0.6564449592008954","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"factory-factory","version":"0.1.6","keywords":["claude","claude-code","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.1.6","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://github.com/purplefish-ai/factory-factory#readme","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"2ef0a2d609c0e6ff341a71770ae16d2438295cd7","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.1.6.tgz","fileCount":918,"integrity":"sha512-xW91nFQdPd2CV4aEs9dgvjXUogiC7myfrrgP6cigeIb9RxoVmQYUSJTm/FECSSi/inUC5SoLbXlPZxlT+u5liw==","signatures":[{"sig":"MEUCIQDYvHjgzrnrk6sVYE0hea82iKLuOlwrWaK/bkM8j2Yp8wIgFtuHUWTLPnmPsDWjh01Or3RoNCxGJgyFzR23cCF34kM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9245646},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.1","tar":">=7.5.0","hono":">=4.11.7","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3"},"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","gitHead":"0c21ffdf73d83cbc66e542a7c071786bf3495148","private":false,"scripts":{"dev":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"vitest run","build":"tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && cp -r prompts dist/ && vite build","check":"biome check .","start":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src --config .dependency-cruiser.cjs","test:watch":"vitest","db:generate":"prisma generate","dev:backend":"BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","test:coverage":"vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty"},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.5.1","react":"^19.2.4","dotenv":"^17.2.3","prisma":"^7.3.0","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.2","p-limit":"^7.2.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","superjson":"^2.2.6","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@trpc/client":"^11.9.0","@trpc/server":"^11.9.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.563.0","react-router":"^7.13.0","@dnd-kit/core":"^6.3.1","@prisma/client":"^7.3.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.4.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.1","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.0","@dnd-kit/sortable":"^10.0.0","@trpc/react-query":"^11.9.0","@dnd-kit/utilities":"^3.2.2","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.1.18","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.20","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.5.9","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.18","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"^7.3.0","@radix-ui/react-navigation-menu":"^1.2.14"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.83.0","vite":"^7.3.1","husky":"^9.1.7","prisma":"^7.3.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.3","electron":"^40.1.0","@types/ws":"^8.18.1","storybook":"10.2.4","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.2.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.1.18","@types/react":"^19.2.10","autoprefixer":"^10.4.24","concurrently":"^9.2.1","@biomejs/biome":"^2.3.13","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@storybook/react":"10.2.4","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.7.0","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.1.18","dependency-cruiser":"^17.3.7","@vitest/coverage-v8":"^4.0.18","@storybook/addon-mcp":"^0.2.2","@vitejs/plugin-react":"^5.1.3","@storybook/addon-a11y":"10.2.4","@storybook/addon-docs":"10.2.4","@storybook/react-vite":"10.2.4","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.4","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.1.6_1770169896220_0.02705785585461018","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"factory-factory","version":"0.2.0","keywords":["claude","claude-code","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.2.0","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://github.com/purplefish-ai/factory-factory#readme","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"bb1298c49ca5d7a5a676bd439c326954892dba21","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.2.0.tgz","fileCount":963,"integrity":"sha512-AP8H7K1qnhQIsQO6r24xpWzbmIEhdnM/xzAIgwrtHtxPKRfhITELQChT8KniL/vwUzkPofaA3wHsVhEzryI1sA==","signatures":[{"sig":"MEYCIQCQ8kBl4CCzqswNKh1e0O/rZgMnSRu84DyvPE8Ygd8B7AIhAKEzcVC4pCL41LMWJ8LkkrQA/f0UThOCcar73mInMRQ+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9658778},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.1","tar":">=7.5.0","hono":">=4.11.7","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3","@isaacs/brace-expansion":">=5.0.1"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","gitHead":"2c9ab5aae1807dcec38f14ffadba73e3fb0ed484","private":false,"scripts":{"dev":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"vitest run","build":"tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && cp -r prompts dist/ && vite build","check":"biome check .","start":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src --config .dependency-cruiser.cjs","test:watch":"vitest","db:generate":"prisma generate","dev:backend":"BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","test:coverage":"vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty"},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.5.1","react":"^19.2.4","dotenv":"^17.2.3","prisma":"^7.3.0","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.2","p-limit":"^7.2.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","superjson":"^2.2.6","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@trpc/client":"^11.9.0","@trpc/server":"^11.9.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.563.0","react-router":"^7.13.0","@dnd-kit/core":"^6.3.1","@prisma/client":"^7.3.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.4.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.1","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.0","@dnd-kit/sortable":"^10.0.0","@trpc/react-query":"^11.9.0","@dnd-kit/utilities":"^3.2.2","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.1.18","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.20","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.5.9","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.18","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"^7.3.0","@radix-ui/react-navigation-menu":"^1.2.14"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.83.0","vite":"^7.3.1","husky":"^9.1.7","prisma":"^7.3.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.3","electron":"^40.1.0","@types/ws":"^8.18.1","storybook":"10.2.4","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.2.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.1.18","@types/react":"^19.2.10","autoprefixer":"^10.4.24","concurrently":"^9.2.1","@biomejs/biome":"^2.3.13","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@storybook/react":"10.2.4","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.7.0","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.1.18","dependency-cruiser":"^17.3.7","@vitest/coverage-v8":"^4.0.18","@storybook/addon-mcp":"^0.2.2","@vitejs/plugin-react":"^5.1.3","@storybook/addon-a11y":"10.2.4","@storybook/addon-docs":"10.2.4","@storybook/react-vite":"10.2.4","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.4","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.2.0_1770307663227_0.9771597842539974","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"factory-factory","version":"0.2.1","keywords":["claude","claude-code","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.2.1","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://github.com/purplefish-ai/factory-factory#readme","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"2a0d6b0948600ebf74e6efe274aa46e057aba522","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.2.1.tgz","fileCount":967,"integrity":"sha512-hFM94dk/zeaJHukMcKpFIHXiVyJEQYoRi4uZ5WqnOUysKTvpFoy5SFYWaNswCyqOuz0OdGk2FbSSO0tAdmInbA==","signatures":[{"sig":"MEYCIQDRDoamLe/sLezeyuyAE7O5EvDqqe9gVihTJX6DGPMOQAIhAOJX8DXkcqnVqh8pGEMreYDFBoDA3GOLi9NWK9GWEuku","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9690505},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.1","tar":">=7.5.0","hono":">=4.11.7","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3","@isaacs/brace-expansion":">=5.0.1"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","gitHead":"2e3649f1261a229c9e9ef5e872fb407e133ade8f","private":false,"scripts":{"dev":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"vitest run","build":"tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && cp -r prompts dist/ && vite build","check":"biome check .","start":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src --config .dependency-cruiser.cjs","test:watch":"vitest","db:generate":"prisma generate","dev:backend":"BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","test:coverage":"vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty"},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.5.1","react":"^19.2.4","dotenv":"^17.2.3","prisma":"^7.3.0","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.2","p-limit":"^7.2.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","superjson":"^2.2.6","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@trpc/client":"^11.9.0","@trpc/server":"^11.9.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.563.0","react-router":"^7.13.0","@dnd-kit/core":"^6.3.1","@prisma/client":"^7.3.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.4.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.1","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.0","@dnd-kit/sortable":"^10.0.0","@trpc/react-query":"^11.9.0","@dnd-kit/utilities":"^3.2.2","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.1.18","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.20","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.5.9","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.18","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"^7.3.0","@radix-ui/react-navigation-menu":"^1.2.14"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.83.0","vite":"^7.3.1","husky":"^9.1.7","prisma":"^7.3.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.3","electron":"^40.1.0","@types/ws":"^8.18.1","storybook":"10.2.4","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.2.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.1.18","@types/react":"^19.2.10","autoprefixer":"^10.4.24","concurrently":"^9.2.1","@biomejs/biome":"^2.3.13","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@storybook/react":"10.2.4","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.7.0","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.1.18","dependency-cruiser":"^17.3.7","@vitest/coverage-v8":"^4.0.18","@storybook/addon-mcp":"^0.2.2","@vitejs/plugin-react":"^5.1.3","@storybook/addon-a11y":"10.2.4","@storybook/addon-docs":"10.2.4","@storybook/react-vite":"10.2.4","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.4","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.2.1_1770319399597_0.4477650267714435","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"factory-factory","version":"0.2.2","keywords":["claude","claude-code","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.2.2","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://github.com/purplefish-ai/factory-factory#readme","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"d5d9e0f7d71b091af206bf29cd0cb5847f3a58e0","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.2.2.tgz","fileCount":1000,"integrity":"sha512-pPdwreNc6wzEs7aDD1Lr05cOSG+GBbAqZVgLK7Ya96xdqv/nJk/MHKapetQjeBTd1173CG7Rapw9WqCBoXMnZQ==","signatures":[{"sig":"MEUCIEpCnzxIM1EJdsfe1fLrXmcbzH/AEwFjlYNOsD9W0ODTAiEA8yYUuTckFx/QemDQpAJ1ecYddQ1OFWbE002c/Hy9Acs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9775974},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.1","tar":">=7.5.0","hono":">=4.11.7","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3","@isaacs/brace-expansion":">=5.0.1"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","gitHead":"780706627e6da80334d6db250175b467726c869e","private":false,"scripts":{"dev":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"vitest run","build":"tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && cp -r prompts dist/ && vite build","check":"biome check .","start":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src --config .dependency-cruiser.cjs","test:watch":"vitest","db:generate":"prisma generate","dev:backend":"BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","test:coverage":"vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty"},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.5.1","react":"^19.2.4","dotenv":"^17.2.3","prisma":"^7.3.0","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.2","p-limit":"^7.2.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","superjson":"^2.2.6","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@trpc/client":"^11.9.0","@trpc/server":"^11.9.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.563.0","react-router":"^7.13.0","@dnd-kit/core":"^6.3.1","@prisma/client":"^7.3.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.4.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.1","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.0","@dnd-kit/sortable":"^10.0.0","@trpc/react-query":"^11.9.0","@dnd-kit/utilities":"^3.2.2","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.1.18","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.20","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.5.9","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.18","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"^7.3.0","@radix-ui/react-navigation-menu":"^1.2.14"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.83.0","vite":"^7.3.1","husky":"^9.1.7","prisma":"^7.3.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.3","electron":"^40.1.0","@types/ws":"^8.18.1","storybook":"10.2.4","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.2.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.1.18","@types/react":"^19.2.10","autoprefixer":"^10.4.24","concurrently":"^9.2.1","@biomejs/biome":"^2.3.13","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@storybook/react":"10.2.4","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.7.0","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.1.18","dependency-cruiser":"^17.3.7","@vitest/coverage-v8":"^4.0.18","@storybook/addon-mcp":"^0.2.2","@vitejs/plugin-react":"^5.1.3","@storybook/addon-a11y":"10.2.4","@storybook/addon-docs":"10.2.4","@storybook/react-vite":"10.2.4","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.4","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.2.2_1770369743989_0.8851894717566529","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"factory-factory","version":"0.2.3","keywords":["claude","claude-code","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.2.3","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://github.com/purplefish-ai/factory-factory#readme","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"5ff6f8bf2a0234712bd189fc0e9bd5bca1cd04e6","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.2.3.tgz","fileCount":1000,"integrity":"sha512-jp67B0hou9iA1bivArtFPTLFHR43xzdXPEifhiphiuVoUz0SPkqYER9ULAB3RohgWyWu67/ys0sGE6aPmi1w5Q==","signatures":[{"sig":"MEUCIQCVv49Mq+J2vShMnQwK1AGTkNrH0+RZus2icVfMOu80qwIga47J6XzmDObV+M6gAV4ZqRUjKIkTwP0eU6bY2ANcpRQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9786290},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.1","tar":">=7.5.0","hono":">=4.11.7","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3","@isaacs/brace-expansion":">=5.0.1"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","gitHead":"629c0a4380f8ad23b23337c0e09ec8c535bffcaa","private":false,"scripts":{"dev":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"vitest run","build":"tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && cp -r prompts dist/ && vite build","check":"biome check .","start":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src --config .dependency-cruiser.cjs","test:watch":"vitest","db:generate":"prisma generate","dev:backend":"BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","test:coverage":"vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty"},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.5.1","react":"^19.2.4","dotenv":"^17.2.3","prisma":"^7.3.0","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.2","p-limit":"^7.2.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","superjson":"^2.2.6","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@trpc/client":"^11.9.0","@trpc/server":"^11.9.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.563.0","react-router":"^7.13.0","@dnd-kit/core":"^6.3.1","@prisma/client":"^7.3.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.4.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.1","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.0","@dnd-kit/sortable":"^10.0.0","@trpc/react-query":"^11.9.0","@dnd-kit/utilities":"^3.2.2","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.1.18","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.20","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.5.9","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.18","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"^7.3.0","@radix-ui/react-navigation-menu":"^1.2.14"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.83.0","vite":"^7.3.1","husky":"^9.1.7","prisma":"^7.3.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.3","electron":"^40.1.0","@types/ws":"^8.18.1","storybook":"10.2.4","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.2.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.1.18","@types/react":"^19.2.10","autoprefixer":"^10.4.24","concurrently":"^9.2.1","@biomejs/biome":"^2.3.13","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@storybook/react":"10.2.4","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.7.0","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.1.18","dependency-cruiser":"^17.3.7","@vitest/coverage-v8":"^4.0.18","@storybook/addon-mcp":"^0.2.2","@vitejs/plugin-react":"^5.1.3","@storybook/addon-a11y":"10.2.4","@storybook/addon-docs":"10.2.4","@storybook/react-vite":"10.2.4","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.4","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.2.3_1770393333716_0.8624373516812116","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"factory-factory","version":"0.2.4","keywords":["claude","claude-code","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.2.4","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://github.com/purplefish-ai/factory-factory#readme","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"2a445e2221308f505576983e075061399a902c74","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.2.4.tgz","fileCount":1014,"integrity":"sha512-sqoIqdc+jPpG84OecIT5qayquwA4N2S2N8xcq2sYBWX+Qz6vZj8GTiWPFJeZLn86UkYRuVwCAU7nnhEUj8/lRg==","signatures":[{"sig":"MEUCIDh0+HeAbpPvVshEh5m0UTFcC5BDwSi/iZKJoyIakKGzAiEAzHp+joMlW43VqBa/2dYuzeTRO5B2tEvynil4SbSfY/w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9974384},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.1","tar":">=7.5.0","hono":">=4.11.7","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3","@isaacs/brace-expansion":">=5.0.1"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","gitHead":"19ea67ddd1e026bd2773172bda9201bd9cc81449","private":false,"scripts":{"dev":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"vitest run","build":"tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && cp -r prompts dist/ && vite build","check":"biome check .","start":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src --config .dependency-cruiser.cjs","test:watch":"vitest","db:generate":"prisma generate","dev:backend":"BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","test:coverage":"vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty"},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.5.1","react":"^19.2.4","dotenv":"^17.2.3","prisma":"^7.3.0","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.2","p-limit":"^7.2.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","superjson":"^2.2.6","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@trpc/client":"^11.9.0","@trpc/server":"^11.9.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.563.0","react-router":"^7.13.0","@dnd-kit/core":"^6.3.1","@prisma/client":"^7.3.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.4.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.1","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.0","@dnd-kit/sortable":"^10.0.0","@trpc/react-query":"^11.9.0","@dnd-kit/utilities":"^3.2.2","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.1.18","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.20","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.5.9","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.18","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"^7.3.0","@radix-ui/react-navigation-menu":"^1.2.14"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.83.0","vite":"^7.3.1","husky":"^9.1.7","prisma":"^7.3.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.3","electron":"^40.1.0","@types/ws":"^8.18.1","storybook":"10.2.4","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.2.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.1.18","@types/react":"^19.2.10","autoprefixer":"^10.4.24","concurrently":"^9.2.1","@biomejs/biome":"^2.3.13","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@storybook/react":"10.2.4","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.7.0","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.1.18","dependency-cruiser":"^17.3.7","@vitest/coverage-v8":"^4.0.18","@storybook/addon-mcp":"^0.2.2","@vitejs/plugin-react":"^5.1.3","@storybook/addon-a11y":"10.2.4","@storybook/addon-docs":"10.2.4","@storybook/react-vite":"10.2.4","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.4","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.2.4_1770409778661_0.8481153813569777","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"factory-factory","version":"0.2.5","keywords":["claude","claude-code","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.2.5","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"65bb9be0d9b61be127e4fa24496c4ddbb46eb650","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.2.5.tgz","fileCount":1068,"integrity":"sha512-1A1aGGm8l2d9nkGs4Zzh0cUDXjMSV2xLUqugimQylGNoefizV2RoZTf15WrGavDMFYvSiNPFEOVRE9e6i1vogA==","signatures":[{"sig":"MEUCIDxMmDWN5L7E6ifK75sPVsdYZ/3Xq31rwKdBvjl219E0AiEA0et0xGCQVhlp/6ml8M9okim5ObZz0DeCf7eetPryf3s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.2.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":10196513},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.1","tar":">=7.5.0","hono":">=4.11.7","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3","@isaacs/brace-expansion":">=5.0.1"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","gitHead":"99df3da4a32d6b7500f5b7f16dc617eee4296bd0","private":false,"scripts":{"dev":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"vitest run","build":"tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && cp -r prompts dist/ && vite build","check":"biome check .","start":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src --config .dependency-cruiser.cjs","test:watch":"vitest","db:generate":"prisma generate","dev:backend":"BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","test:coverage":"vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty"},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.5.1","react":"^19.2.4","dotenv":"^17.2.3","prisma":"^7.3.0","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.2","p-limit":"^7.2.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","superjson":"^2.2.6","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@trpc/client":"^11.9.0","@trpc/server":"^11.9.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.563.0","react-router":"^7.13.0","@dnd-kit/core":"^6.3.1","@prisma/client":"^7.3.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.4.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.1","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.0","@dnd-kit/sortable":"^10.0.0","@trpc/react-query":"^11.9.0","@dnd-kit/utilities":"^3.2.2","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.1.18","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.20","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.5.9","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.18","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"^7.3.0","@radix-ui/react-navigation-menu":"^1.2.14"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.83.0","vite":"^7.3.1","husky":"^9.1.7","prisma":"^7.3.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.3","electron":"^40.1.0","@types/ws":"^8.18.1","storybook":"10.2.4","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.2.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.1.18","@types/react":"^19.2.10","autoprefixer":"^10.4.24","concurrently":"^9.2.1","@biomejs/biome":"^2.3.13","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@storybook/react":"10.2.4","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.7.0","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.1.18","dependency-cruiser":"^17.3.7","@vitest/coverage-v8":"^4.0.18","@storybook/addon-mcp":"^0.2.2","@vitejs/plugin-react":"^5.1.3","@storybook/addon-a11y":"10.2.4","@storybook/addon-docs":"10.2.4","@storybook/react-vite":"10.2.4","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.4","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.2.5_1770483756811_0.055365863018749906","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"factory-factory","version":"0.2.6","keywords":["claude","claude-code","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.2.6","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"b659a0742038c1cfa6d1e1cf1b3e4b726c04e09d","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.2.6.tgz","fileCount":1030,"integrity":"sha512-jip+gk+c+OBs4FjS8rxz2w71mYerJw4LCS5tguYu8aqeY51risqfse7eqFssQqr6F2f4S/Dbsxy2ld0vBVwJpw==","signatures":[{"sig":"MEQCIChk8doOOhmF7ztkjF/FHTsTZq1tScN52k4qm6mniEEFAiA8uFnBm2pDjlJpld52EPKFv2HuAF70ISZlOgIiJvVjyQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.2.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":10145792},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.1","tar":">=7.5.0","hono":">=4.11.7","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3","@isaacs/brace-expansion":">=5.0.1"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","gitHead":"961394f5ace0d12e58ec46872b806be186209a22","private":false,"scripts":{"dev":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"vitest run","build":"tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && cp -r prompts dist/ && vite build","check":"biome check .","start":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src --config .dependency-cruiser.cjs","test:watch":"vitest","db:generate":"prisma generate","dev:backend":"BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","test:coverage":"vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty"},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.5.1","react":"^19.2.4","dotenv":"^17.2.3","prisma":"^7.3.0","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.2","p-limit":"^7.2.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","superjson":"^2.2.6","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@trpc/client":"^11.9.0","@trpc/server":"^11.9.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.563.0","react-router":"^7.13.0","@dnd-kit/core":"^6.3.1","@prisma/client":"^7.3.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.4.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.1","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.0","@dnd-kit/sortable":"^10.0.0","@trpc/react-query":"^11.9.0","@dnd-kit/utilities":"^3.2.2","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.1.18","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.20","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.5.9","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.18","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"^7.3.0","@radix-ui/react-navigation-menu":"^1.2.14"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.83.0","vite":"^7.3.1","husky":"^9.1.7","prisma":"^7.3.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.3","electron":"^40.1.0","@types/ws":"^8.18.1","storybook":"10.2.4","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.2.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.1.18","@types/react":"^19.2.10","autoprefixer":"^10.4.24","concurrently":"^9.2.1","@biomejs/biome":"^2.3.13","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@storybook/react":"10.2.4","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.7.0","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.1.18","dependency-cruiser":"^17.3.7","@vitest/coverage-v8":"^4.0.18","@storybook/addon-mcp":"^0.2.2","@vitejs/plugin-react":"^5.1.3","@storybook/addon-a11y":"10.2.4","@storybook/addon-docs":"10.2.4","@storybook/react-vite":"10.2.4","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.4","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.2.6_1770587860997_0.6712328181341791","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"factory-factory","version":"0.2.7","keywords":["claude","claude-code","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.2.7","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"b9ea38e2366d1e69e7b05e5277691ad8a8627254","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.2.7.tgz","fileCount":1300,"integrity":"sha512-YC44fSoAzNUuy44xmaWPaO309AVG9w8FvcYK+3HVUd6rngNPxkzAS3M4K6mf2PwKaeYxNIHUxVzOM/hPyb2Iag==","signatures":[{"sig":"MEQCIBlIC+mHwClWvvu4VbbSSJzeH/yNnCTQVvBSik25hF7cAiA9axYFC7At0Nfn8AU/j25krb9kNTpOq++NCYQO2SCzyg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.2.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":10872466},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.1","tar":">=7.5.0","hono":">=4.11.7","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3","@isaacs/brace-expansion":">=5.0.1"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","gitHead":"c2fe960d8dc9fba47a8fbf3de54ae9e75cade02c","private":false,"scripts":{"dev":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"vitest run","build":"tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && cp -r prompts dist/ && vite build","check":"biome check .","start":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src --config .dependency-cruiser.cjs","test:watch":"vitest","db:generate":"prisma generate","dev:backend":"BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","test:coverage":"vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","check:biome-ignores":"node scripts/check-biome-ignores.mjs"},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.5.1","react":"^19.2.4","dotenv":"^17.2.3","prisma":"^7.3.0","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.2","p-limit":"^7.2.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@trpc/client":"^11.9.0","@trpc/server":"^11.9.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.563.0","react-router":"^7.13.0","@dnd-kit/core":"^6.3.1","@prisma/client":"^7.3.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.4.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.1","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.0","@dnd-kit/sortable":"^10.0.0","@trpc/react-query":"^11.9.0","@dnd-kit/utilities":"^3.2.2","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.1.18","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.20","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.5.9","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.18","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"^7.3.0","@radix-ui/react-navigation-menu":"^1.2.14"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.83.0","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^28.0.0","prisma":"^7.3.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.3","electron":"^40.1.0","@types/ws":"^8.18.1","storybook":"10.2.4","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.2.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.1.18","@types/react":"^19.2.10","autoprefixer":"^10.4.24","concurrently":"^9.2.1","@biomejs/biome":"^2.3.13","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@storybook/react":"10.2.4","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.7.0","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.1.18","dependency-cruiser":"^17.3.7","@vitest/coverage-v8":"^4.0.18","@storybook/addon-mcp":"^0.2.2","@vitejs/plugin-react":"^5.1.3","@storybook/addon-a11y":"10.2.4","@storybook/addon-docs":"10.2.4","@storybook/react-vite":"10.2.4","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.4","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.2.7_1770767679637_0.7877923698560847","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"factory-factory","version":"0.2.8","keywords":["claude","claude-code","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.2.8","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"edefc815c2bb6c93f5d1d1e9e814a6d838f922e4","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.2.8.tgz","fileCount":1412,"integrity":"sha512-//N7eq5TCYkktZT+OyehtpnHAIPbMCoQuOfsU3F1ewd3OunVWT5TSmfMlAlY+lAKTPR3J13jXsdSiicFhOoAWQ==","signatures":[{"sig":"MEYCIQDDFesX1GZDqUsNXylvvws/Usg3Anuq7f27mfRSKjWKYgIhAOP4Av3m1DiKb0YZqd7EqTbbeq5ynMKFXOL1D0+LH870","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.2.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":11198873},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.1","tar":">=7.5.0","hono":">=4.11.7","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3","@isaacs/brace-expansion":">=5.0.1"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","gitHead":"08c5e89acca4fccfd2b2865b413f591e3152aaed","private":false,"scripts":{"dev":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"node scripts/ensure-native-modules.mjs node && vitest run","build":"node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:ownership","start":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src --config .dependency-cruiser.cjs","test:watch":"node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"node scripts/ensure-native-modules.mjs node && vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-single-writer.mjs","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","check:biome-ignores":"node scripts/check-biome-ignores.mjs"},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.5.1","react":"^19.2.4","dotenv":"^17.2.3","prisma":"^7.3.0","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.2","p-limit":"^7.2.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@trpc/client":"^11.9.0","@trpc/server":"^11.9.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.563.0","react-router":"^7.13.0","@dnd-kit/core":"^6.3.1","@prisma/client":"^7.3.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.4.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.1","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.0","@dnd-kit/sortable":"^10.0.0","@trpc/react-query":"^11.9.0","@dnd-kit/utilities":"^3.2.2","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.1.18","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.20","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.5.9","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.18","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"^7.3.0","@radix-ui/react-navigation-menu":"^1.2.14"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.83.0","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^28.0.0","prisma":"^7.3.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.3","electron":"^40.1.0","@types/ws":"^8.18.1","storybook":"10.2.4","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.2.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.1.18","@types/react":"^19.2.10","autoprefixer":"^10.4.24","concurrently":"^9.2.1","@biomejs/biome":"^2.3.13","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@storybook/react":"10.2.4","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.7.0","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.1.18","dependency-cruiser":"^17.3.7","@vitest/coverage-v8":"^4.0.18","@vitejs/plugin-react":"^5.1.3","@storybook/addon-a11y":"10.2.4","@storybook/addon-docs":"10.2.4","@storybook/react-vite":"10.2.4","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.4","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.2.8_1770851051297_0.13364479184009048","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"factory-factory","version":"0.3.0","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.3.0","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"93e51a013a9a2634940cf4690b4041e5618e5966","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.3.0.tgz","fileCount":1443,"integrity":"sha512-rrB8ApIw6jB5E6wsXDu1vRanwmWNGX4/YfoM2B4aA7J4r/9VTR00K8s7u8BcbSR0u9WCXO2KQ6SJte7JfPQKng==","signatures":[{"sig":"MEUCIQDnKcaaAOPjo+SES2zgugjy9dlP46iKX35Kqv62Dt1VigIgbtdP0O4DLPJNcyUNJUPD3DeqyZ4ZUDocL5rQfgtl96o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":11323398},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.1","tar":">=7.5.0","hono":">=4.11.7","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3","@isaacs/brace-expansion":">=5.0.1"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","gitHead":"6e3d876bcd71b336c21ad0094fe1be7edfd64f90","private":false,"scripts":{"dev":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run","build":"pnpm --filter @factory-factory/core build && node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:ownership","start":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"pnpm --filter @factory-factory/core build && storybook dev -p 6006","typecheck":"pnpm --filter @factory-factory/core build && tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"pnpm --filter @factory-factory/core build && BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-single-writer.mjs","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update"},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.5.1","react":"^19.2.4","dotenv":"^17.2.3","prisma":"^7.3.0","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.2","p-limit":"^7.2.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@trpc/client":"^11.9.0","@trpc/server":"^11.9.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.563.0","react-router":"^7.13.0","@dnd-kit/core":"^6.3.1","@prisma/client":"^7.3.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.4.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.1","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.0","@dnd-kit/sortable":"^10.0.0","@trpc/react-query":"^11.9.0","@dnd-kit/utilities":"^3.2.2","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.1.18","embla-carousel-react":"^8.6.0","@factory-factory/core":"workspace:*","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.20","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.5.9","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.18","@agentclientprotocol/sdk":"0.14.1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@zed-industries/codex-acp":"0.9.2","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"^7.3.0","@radix-ui/react-navigation-menu":"^1.2.14","@zed-industries/claude-code-acp":"0.16.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.83.0","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^28.0.0","prisma":"^7.3.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.3","electron":"^40.1.0","@types/ws":"^8.18.1","storybook":"10.2.4","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.2.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.1.18","@types/react":"^19.2.10","autoprefixer":"^10.4.24","concurrently":"^9.2.1","@biomejs/biome":"^2.3.13","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@storybook/react":"10.2.4","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.7.0","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.1.18","dependency-cruiser":"^17.3.7","@vitest/coverage-v8":"^4.0.18","@vitejs/plugin-react":"^5.1.3","@storybook/addon-a11y":"10.2.4","@storybook/addon-docs":"10.2.4","@storybook/react-vite":"10.2.4","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.4","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.3.0_1771103760504_0.6974996942000427","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"factory-factory","version":"0.3.1","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.3.1","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"36b02b5e11e6c0cf748d001de530f8c15ca1121b","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.3.1.tgz","fileCount":1464,"integrity":"sha512-LMx6uJpf1FY50hdQtDYV8ezeDkICkaOSdwjsH4ODwhA1gB9OA6WB5ZDpK/MvnqXQDzxUhskWX5ty3BkyQI7x/Q==","signatures":[{"sig":"MEQCIDNwpQM5DRB5ppZR+snZQ3ikKHcuhZO04uEwlP44RUyrAiAwjoDF3KF/K36nDsHLo75Z1hCV3cUHjKO3HcUVDtyNeg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":11343068},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.1","tar":">=7.5.0","hono":">=4.11.7","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3","@isaacs/brace-expansion":">=5.0.1"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","gitHead":"54a6c95b128220af1111712484d521fb13d3bc14","private":false,"scripts":{"dev":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run","build":"pnpm --filter @factory-factory/core build && node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:ownership","start":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"pnpm --filter @factory-factory/core build && storybook dev -p 6006","typecheck":"pnpm --filter @factory-factory/core build && tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"pnpm --filter @factory-factory/core build && BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-single-writer.mjs","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update"},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.5.1","react":"^19.2.4","dotenv":"^17.2.3","prisma":"^7.3.0","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.2","p-limit":"^7.2.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@trpc/client":"^11.9.0","@trpc/server":"^11.9.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.563.0","react-router":"^7.13.0","@dnd-kit/core":"^6.3.1","@prisma/client":"^7.3.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.4.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.1","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.0","@dnd-kit/sortable":"^10.0.0","@trpc/react-query":"^11.9.0","@dnd-kit/utilities":"^3.2.2","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.1.18","embla-carousel-react":"^8.6.0","@factory-factory/core":"file:packages/core","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.20","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.5.9","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.18","@agentclientprotocol/sdk":"0.14.1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@zed-industries/codex-acp":"0.9.2","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"^7.3.0","@radix-ui/react-navigation-menu":"^1.2.14","@zed-industries/claude-code-acp":"0.16.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.83.0","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^28.0.0","prisma":"^7.3.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.3","electron":"^40.1.0","@types/ws":"^8.18.1","storybook":"10.2.4","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.2.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.1.18","@types/react":"^19.2.10","autoprefixer":"^10.4.24","concurrently":"^9.2.1","@biomejs/biome":"^2.3.13","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@storybook/react":"10.2.4","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.7.0","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.1.18","dependency-cruiser":"^17.3.7","@vitest/coverage-v8":"^4.0.18","@vitejs/plugin-react":"^5.1.3","@storybook/addon-a11y":"10.2.4","@storybook/addon-docs":"10.2.4","@storybook/react-vite":"10.2.4","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.4","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.3.1_1771104704774_0.8033667416847072","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"factory-factory","version":"0.3.2","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.3.2","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"7ce85693e0e6bcc3f4243f58a5f84462b3e9a888","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.3.2.tgz","fileCount":1464,"integrity":"sha512-jW8FcgrRTyAhM4mDGleScTuvt962TEegRfuKMkhx3A001aj2UT4zo/8mVq/NKaJdlNUV0+rLIbdtCyRwrmVV8w==","signatures":[{"sig":"MEUCICFr5XbthFu5LrN5HKimEkS22LHJNLGbIc/s2vDpVL20AiEAoND5UCsxGjxr9t68ZzPnUqNmSI+FmTQ50Pfew/C4mz0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":11343148},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.1","tar":">=7.5.0","hono":">=4.11.7","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3","@isaacs/brace-expansion":">=5.0.1"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^20.19 || ^22.12 || >=24.0"},"gitHead":"791cd6030038b6259aa9832726a86a37a1413167","private":false,"scripts":{"dev":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run","build":"pnpm --filter @factory-factory/core build && node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:ownership","start":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"pnpm --filter @factory-factory/core build && storybook dev -p 6006","typecheck":"pnpm --filter @factory-factory/core build && tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"pnpm --filter @factory-factory/core build && BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-single-writer.mjs","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update"},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.5.1","react":"^19.2.4","dotenv":"^17.2.3","prisma":"7.3.0","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.2","p-limit":"^7.2.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@trpc/client":"^11.9.0","@trpc/server":"^11.9.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.563.0","react-router":"^7.13.0","@dnd-kit/core":"^6.3.1","@prisma/client":"7.3.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.4.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.1","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.0","@dnd-kit/sortable":"^10.0.0","@trpc/react-query":"^11.9.0","@dnd-kit/utilities":"^3.2.2","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.1.18","embla-carousel-react":"^8.6.0","@factory-factory/core":"file:packages/core","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.20","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.5.9","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.18","@agentclientprotocol/sdk":"0.14.1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@zed-industries/codex-acp":"0.9.2","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"7.3.0","@radix-ui/react-navigation-menu":"^1.2.14","@zed-industries/claude-code-acp":"0.16.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.83.0","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^28.0.0","prisma":"7.3.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.3","electron":"^40.1.0","@types/ws":"^8.18.1","storybook":"10.2.4","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.2.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.1.18","@types/react":"^19.2.10","autoprefixer":"^10.4.24","concurrently":"^9.2.1","@biomejs/biome":"^2.3.13","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@storybook/react":"10.2.4","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.7.0","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.1.18","dependency-cruiser":"^17.3.7","@vitest/coverage-v8":"^4.0.18","@vitejs/plugin-react":"^5.1.3","@storybook/addon-a11y":"10.2.4","@storybook/addon-docs":"10.2.4","@storybook/react-vite":"10.2.4","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.4","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.3.2_1771106963198_0.07773598361983658","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"factory-factory","version":"0.3.3","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.3.3","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"0c551b383dfbe0a329837566308fd7a19bc871dc","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.3.3.tgz","fileCount":1467,"integrity":"sha512-/gFHymt6jM2VOxL/NFh3QY8Usk/x9dfRI8nP6GG7XDjEtLgTPXTECDDM1ZrChUcxmVxco+NRWK+XQS3l/FzeNw==","signatures":[{"sig":"MEQCIBhmSFKb/UQD2YMC+3VzjOcVmSed2lttUPjhUJT153MnAiBt5kzfUpU9WOjuHMqbS8wM5NZtknPpL/BdHyaTKlHyOA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.3.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":11379787},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.1","tar":">=7.5.0","hono":">=4.11.7","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3","@isaacs/brace-expansion":">=5.0.1"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^20.19 || ^22.12 || >=24.0"},"gitHead":"badf6c4a7c920967052b7ad28cac4f65fbf66ba1","private":false,"scripts":{"dev":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run","build":"pnpm --filter @factory-factory/core build && node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:ownership","start":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"pnpm --filter @factory-factory/core build && storybook dev -p 6006","typecheck":"pnpm --filter @factory-factory/core build && tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"pnpm --filter @factory-factory/core build && BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-single-writer.mjs","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update"},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.5.1","react":"^19.2.4","dotenv":"^17.2.3","prisma":"7.3.0","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.2","p-limit":"^7.2.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@trpc/client":"^11.9.0","@trpc/server":"^11.9.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.563.0","react-router":"^7.13.0","@dnd-kit/core":"^6.3.1","@prisma/client":"7.3.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.4.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.1","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.0","@dnd-kit/sortable":"^10.0.0","@trpc/react-query":"^11.9.0","@dnd-kit/utilities":"^3.2.2","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.1.18","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.20","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.5.9","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.18","@agentclientprotocol/sdk":"0.14.1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@zed-industries/codex-acp":"0.9.2","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"7.3.0","@radix-ui/react-navigation-menu":"^1.2.14","@zed-industries/claude-code-acp":"0.16.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.83.0","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^28.0.0","prisma":"7.3.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.3","electron":"^40.1.0","@types/ws":"^8.18.1","storybook":"10.2.4","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.2.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.1.18","@types/react":"^19.2.10","autoprefixer":"^10.4.24","concurrently":"^9.2.1","@biomejs/biome":"^2.3.13","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@storybook/react":"10.2.4","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.7.0","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.1.18","dependency-cruiser":"^17.3.7","@vitest/coverage-v8":"^4.0.18","@vitejs/plugin-react":"^5.1.3","@storybook/addon-a11y":"10.2.4","@storybook/addon-docs":"10.2.4","@storybook/react-vite":"10.2.4","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.4","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.3.3_1771108379223_0.6560570481832251","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"factory-factory","version":"0.3.4","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.3.4","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"bff0bd95e5edc5aa52229e4cfd7cc5a142053f31","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.3.4.tgz","fileCount":1520,"integrity":"sha512-09ZwISMjBRvF6QGESWXZHcXf6y9jDkhYw9jT0mKLRQlC2nA6SicBuKuHOGvycVMRVtm+FOE2n+tZQZ3k+4SIOA==","signatures":[{"sig":"MEUCIQCgM9WHHhIfP47Nwb9njd7mEgig/T+kjR/9oi4Xd8vnNQIgDIIitFuBLRXf41cbq5OSFOsLocOVTPHqgR6wZUz6OSg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.3.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":11816501},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.1","tar":">=7.5.0","hono":">=4.11.7","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3","@isaacs/brace-expansion":">=5.0.1"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^20.19 || ^22.12 || >=24.0"},"gitHead":"08234c96ab959685a023ed5ac743e1f5bc47b3c1","private":false,"scripts":{"dev":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run","build":"pnpm --filter @factory-factory/core build && node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:ownership","start":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"pnpm --filter @factory-factory/core build && storybook dev -p 6006","typecheck":"pnpm --filter @factory-factory/core build && tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"pnpm --filter @factory-factory/core build && BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-single-writer.mjs","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/domains/session/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:codex-app-server:manual:prompt":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run \"src/backend/domains/session/acp/codex-app-server-adapter/*.manual.integration.test.ts\""},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.5.1","react":"^19.2.4","dotenv":"^17.2.3","prisma":"7.3.0","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.2","p-limit":"^7.2.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@trpc/client":"^11.9.0","@trpc/server":"^11.9.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.563.0","react-router":"^7.13.0","@dnd-kit/core":"^6.3.1","@prisma/client":"7.3.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.4.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.1","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.0","@dnd-kit/sortable":"^10.0.0","@trpc/react-query":"^11.9.0","@dnd-kit/utilities":"^3.2.2","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.1.18","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.20","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.5.9","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.18","@agentclientprotocol/sdk":"0.14.1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"7.3.0","@radix-ui/react-navigation-menu":"^1.2.14","@zed-industries/claude-code-acp":"0.16.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.83.0","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^28.0.0","prisma":"7.3.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.3","electron":"^40.1.0","@types/ws":"^8.18.1","storybook":"10.2.4","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.2.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.1.18","@types/react":"^19.2.10","autoprefixer":"^10.4.24","concurrently":"^9.2.1","@biomejs/biome":"^2.3.13","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@storybook/react":"10.2.4","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.7.0","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.1.18","dependency-cruiser":"^17.3.7","@vitest/coverage-v8":"^4.0.18","@vitejs/plugin-react":"^5.1.3","@storybook/addon-a11y":"10.2.4","@storybook/addon-docs":"10.2.4","@storybook/react-vite":"10.2.4","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.4","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.3.4_1771205053798_0.5243967107599405","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"factory-factory","version":"0.3.5","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.3.5","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"a2dea6621b4734e43fb9b338d3b1d2f8757a2d1d","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.3.5.tgz","fileCount":1520,"integrity":"sha512-hPnM3v3HxMhgRr1bBuxJoWJFyPX/H1k8xVRlApeunkkMY2KKd27gX55m7ga0bfn76GUHkjDCTb9glGz0uxdBaQ==","signatures":[{"sig":"MEUCIQDPeCJEYibDPneLaNUeuJV6B5jdqa0Ki8etRmBsr8qhWgIgSx4CofEbVsPRZqSiemzuwLxdJ46iqywrTSvBj2NE8eE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.3.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":11927951},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.1","tar":">=7.5.0","hono":">=4.11.7","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3","@isaacs/brace-expansion":">=5.0.1"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^20.19 || ^22.12 || >=24.0"},"gitHead":"1f6ecd09ec667fbcdddf31ba28e455a006be6cea","private":false,"scripts":{"dev":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run","build":"pnpm --filter @factory-factory/core build && node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:ownership","start":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"pnpm --filter @factory-factory/core build && storybook dev -p 6006","typecheck":"pnpm --filter @factory-factory/core build && tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"pnpm --filter @factory-factory/core build && BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-single-writer.mjs","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/domains/session/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:codex-app-server:manual:prompt":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run \"src/backend/domains/session/acp/codex-app-server-adapter/*.manual.integration.test.ts\""},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.5.1","react":"^19.2.4","dotenv":"^17.2.3","prisma":"7.3.0","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.2","p-limit":"^7.2.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@trpc/client":"^11.9.0","@trpc/server":"^11.9.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.563.0","react-router":"^7.13.0","@dnd-kit/core":"^6.3.1","@prisma/client":"7.3.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.4.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.1","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.0","@dnd-kit/sortable":"^10.0.0","@trpc/react-query":"^11.9.0","@dnd-kit/utilities":"^3.2.2","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.1.18","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.20","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.5.9","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.18","@agentclientprotocol/sdk":"0.14.1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"7.3.0","@radix-ui/react-navigation-menu":"^1.2.14","@zed-industries/claude-code-acp":"0.16.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.83.0","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^28.0.0","prisma":"7.3.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.3","electron":"^40.1.0","@types/ws":"^8.18.1","storybook":"10.2.4","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.2.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.1.18","@types/react":"^19.2.10","autoprefixer":"^10.4.24","concurrently":"^9.2.1","@biomejs/biome":"^2.3.13","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@storybook/react":"10.2.4","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.7.0","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.1.18","dependency-cruiser":"^17.3.7","@vitest/coverage-v8":"^4.0.18","@vitejs/plugin-react":"^5.1.3","@storybook/addon-a11y":"10.2.4","@storybook/addon-docs":"10.2.4","@storybook/react-vite":"10.2.4","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.4","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.3.5_1771280222966_0.7345775063937483","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"factory-factory","version":"0.3.6","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.3.6","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"75f8ce1fef1e295b44e251bf61e24a97bb7b2881","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.3.6.tgz","fileCount":1562,"integrity":"sha512-iWZ1ie+ylxZN7R45mnzUSf0GsvBFVlHQISqm+F89Fk5NwgrIWZDzft7dgeWIA3YhYb6bS3HbvHi3S64EKKqUtw==","signatures":[{"sig":"MEQCIDfEq7ljyo0AToEUFgijEQbZyaMoycnaRtJkLKk+nCnmAiBSmuG8uXJP3+fAvGLAuW9qEXZjykZJxL/yxmB7vussOA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.3.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":12408577},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.2","tar":">=7.5.8","hono":">=4.11.7","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3","@isaacs/brace-expansion":">=5.0.1","@modelcontextprotocol/sdk>ajv":">=8.18.0"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^20.19 || ^22.12 || >=24.0"},"gitHead":"1809e296680858477aefec2406e25cd0e858b268","private":false,"scripts":{"dev":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run","build":"pnpm --filter @factory-factory/core build && node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:ownership","start":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"pnpm --filter @factory-factory/core build && storybook dev -p 6006","typecheck":"pnpm --filter @factory-factory/core build && tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"pnpm --filter @factory-factory/core build && BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-single-writer.mjs","test:e2e:mobile":"playwright test --config=playwright.mobile.config.ts","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/domains/session/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:codex-app-server:manual:prompt":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run \"src/backend/domains/session/acp/codex-app-server-adapter/*.manual.integration.test.ts\""},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.7.0","react":"^19.2.4","dotenv":"^17.3.1","prisma":"7.4.0","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.3","p-limit":"^7.3.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@linear/sdk":"^75.0.0","@trpc/client":"^11.10.0","@trpc/server":"^11.10.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.574.0","react-router":"^7.13.0","@dnd-kit/core":"^6.3.1","@prisma/client":"7.4.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.4.1","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.1","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.2","@dnd-kit/sortable":"^10.0.0","@trpc/react-query":"^11.10.0","@dnd-kit/utilities":"^3.2.2","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.1.18","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.21","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.6.4","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.18","@agentclientprotocol/sdk":"0.14.1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"7.4.0","@radix-ui/react-navigation-menu":"^1.2.14","@zed-industries/claude-code-acp":"0.16.2"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.84.0","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^28.1.0","prisma":"7.4.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.4","electron":"^40.4.1","@types/ws":"^8.18.1","storybook":"10.2.10","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.1.18","@types/react":"^19.2.14","autoprefixer":"^10.4.24","concurrently":"^9.2.1","@biomejs/biome":"^2.4.2","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@playwright/test":"^1.58.2","@storybook/react":"10.2.10","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.8.1","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.1.18","dependency-cruiser":"^17.3.8","@vitest/coverage-v8":"^4.0.18","@vitejs/plugin-react":"^5.1.4","@storybook/addon-a11y":"10.2.10","@storybook/addon-docs":"10.2.10","@storybook/react-vite":"10.2.10","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.10","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.3.6_1771463781831_0.8840193679275936","host":"s3://npm-registry-packages-npm-production"}},"0.3.7":{"name":"factory-factory","version":"0.3.7","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.3.7","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"d7a7aac5b339473f680b2a53b9324882c66f5844","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.3.7.tgz","fileCount":1716,"integrity":"sha512-jzuvWEGRe2i8me8bvA6j+jp9jJzPu52uziZ2CnNZ4jyyXkqU678nxdssJ5F1nNQt3wHXcd7iw1jMpmWSTDW1bA==","signatures":[{"sig":"MEUCIQDxy/miIDaSSku2AYXdXOJ33isbeRTsFyB29/QTp2wGRgIgZLHC+7gpThGx1OmhAhO1BHqV1msX0mcFElLU2E1x1ro=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.3.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":12954000},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.2","tar":">=7.5.8","hono":">=4.11.10","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3","filelist>minimatch":">=10.2.1","@isaacs/brace-expansion":">=5.0.1","app-builder-lib>minimatch":">=10.2.1","@modelcontextprotocol/sdk>ajv":">=8.18.0"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^20.19 || ^22.12 || >=24.0"},"gitHead":"331322610cbb191212ba942bb8da4aea17bd65e2","private":false,"scripts":{"dev":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run","build":"pnpm --filter @factory-factory/core build && node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && node scripts/fix-prisma-imports.mjs && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:ownership","proxy":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts proxy --private","start":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"pnpm --filter @factory-factory/core build && storybook dev -p 6006","typecheck":"pnpm --filter @factory-factory/core build && tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"pnpm --filter @factory-factory/core build && BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-single-writer.mjs","test:e2e:mobile":"playwright test --config=playwright.mobile.config.ts","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","test:coverage:backend":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/domains/session/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:coverage:backend:stable":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend --exclude src/backend/routers/health.router.test.ts --exclude src/backend/routers/websocket/websocket.integration.test.ts --exclude src/backend/domains/session/acp/codex-cli-import-resolution.integration.test.ts --exclude src/backend/domains/session/acp/acp-session-negotiation.integration.test.ts","test:codex-app-server:manual:prompt":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run \"src/backend/domains/session/acp/codex-app-server-adapter/*.manual.integration.test.ts\""},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.7.0","react":"^19.2.4","dotenv":"^17.3.1","prisma":"7.4.0","qrcode":"^1.5.4","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.3","p-limit":"^7.3.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@linear/sdk":"^75.0.0","@trpc/client":"^11.10.0","@trpc/server":"^11.10.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.574.0","react-router":"^7.13.0","@prisma/client":"7.4.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.4.1","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.1","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.2","@trpc/react-query":"^11.10.0","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.1.18","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.21","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.6.4","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.18","@agentclientprotocol/sdk":"0.14.1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"7.4.0","@radix-ui/react-navigation-menu":"^1.2.14","@zed-industries/claude-code-acp":"0.16.2"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.84.0","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^28.1.0","prisma":"7.4.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.4","electron":"^40.4.1","@types/ws":"^8.18.1","storybook":"10.2.10","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.1.18","@types/react":"^19.2.14","autoprefixer":"^10.4.24","concurrently":"^9.2.1","@types/qrcode":"^1.5.6","@biomejs/biome":"^2.4.2","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@playwright/test":"^1.58.2","@storybook/react":"10.2.10","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.8.1","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.1.18","dependency-cruiser":"^17.3.8","@vitest/coverage-v8":"^4.0.18","@vitejs/plugin-react":"^5.1.4","@storybook/addon-a11y":"10.2.10","@storybook/addon-docs":"10.2.10","@storybook/react-vite":"10.2.10","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.10","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.3.7_1771624116160_0.5569007813605329","host":"s3://npm-registry-packages-npm-production"}},"0.3.8":{"name":"factory-factory","version":"0.3.8","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.3.8","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"3d834a23bbaac51678ad0c21a180bb3ac755f720","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.3.8.tgz","fileCount":1777,"integrity":"sha512-0WFWJCEGc0PQ9MgRsE/rSP2ToPPFGn/hhcSQhb9Krn/ANYrayOqjcNZkcbIZf931sN3oIHqwIAIJc7ZEUsjI4Q==","signatures":[{"sig":"MEYCIQDUVnPNeR4W6ycJv6l5HbaJWO2z0HkwTVAtoj0SoKYKKQIhAMto34ebRqpRuQRmPExRVQUS+eOtVeIHLHJ4z6yO9nN/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.3.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13085972},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.2","tar":">=7.5.8","hono":">=4.11.10","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3","filelist>minimatch":">=10.2.1","@isaacs/brace-expansion":">=5.0.1","app-builder-lib>minimatch":">=10.2.1","@modelcontextprotocol/sdk>ajv":">=8.18.0"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^20.19 || ^22.12 || >=24.0"},"gitHead":"92e710dace6d35d2e3c0f3b85ecb054f102c1368","private":false,"scripts":{"dev":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run","build":"pnpm --filter @factory-factory/core build && node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && node scripts/fix-prisma-imports.mjs && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:ownership","proxy":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts proxy --private","start":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"pnpm --filter @factory-factory/core build && storybook dev -p 6006","typecheck":"pnpm --filter @factory-factory/core build && tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"pnpm --filter @factory-factory/core build && BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-single-writer.mjs","test:e2e:mobile":"playwright test --config=playwright.mobile.config.ts","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","test:coverage:backend":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/domains/session/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:coverage:backend:stable":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend --exclude src/backend/routers/health.router.test.ts --exclude src/backend/routers/websocket/websocket.integration.test.ts --exclude src/backend/domains/session/acp/codex-cli-import-resolution.integration.test.ts --exclude src/backend/domains/session/acp/acp-session-negotiation.integration.test.ts","test:codex-app-server:manual:prompt":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run \"src/backend/domains/session/acp/codex-app-server-adapter/*.manual.integration.test.ts\""},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.7.0","react":"^19.2.4","dotenv":"^17.3.1","prisma":"7.4.0","qrcode":"^1.5.4","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.3","p-limit":"^7.3.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@linear/sdk":"^75.0.0","@trpc/client":"^11.10.0","@trpc/server":"^11.10.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.574.0","react-router":"^7.13.0","@prisma/client":"7.4.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.4.1","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.1","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.2","@trpc/react-query":"^11.10.0","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.1.18","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.21","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.6.4","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.18","@agentclientprotocol/sdk":"0.14.1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"7.4.0","@radix-ui/react-navigation-menu":"^1.2.14","@zed-industries/claude-code-acp":"0.16.2"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.84.0","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^28.1.0","prisma":"7.4.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.4","electron":"^40.4.1","@types/ws":"^8.18.1","storybook":"10.2.10","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.1.18","@types/react":"^19.2.14","autoprefixer":"^10.4.24","concurrently":"^9.2.1","@types/qrcode":"^1.5.6","@biomejs/biome":"^2.4.2","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@playwright/test":"^1.58.2","@storybook/react":"10.2.10","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.8.1","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.1.18","dependency-cruiser":"^17.3.8","@vitest/coverage-v8":"^4.0.18","@vitejs/plugin-react":"^5.1.4","@storybook/addon-a11y":"10.2.10","@storybook/addon-docs":"10.2.10","@storybook/react-vite":"10.2.10","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.10","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.3.8_1771932069960_0.6031946325105468","host":"s3://npm-registry-packages-npm-production"}},"0.3.9":{"name":"factory-factory","version":"0.3.9","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.3.9","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"8cee9ae67c9223c003838446394cac425508f3b3","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.3.9.tgz","fileCount":1842,"integrity":"sha512-6UBZ9wEMgwFJqIepoTziSX99w3PiyrcPSA9enn2wAmn48V1Vu/zfJbuG7oWZsg0fAQ53ceOxkYmZbg6TMHrmag==","signatures":[{"sig":"MEUCIQD4PKfjTvucnhbQWu+vuz25Pbizjt+rofNCHQcnPp+PwwIgYQdgJfOgKmAovlkBS9OEgmaAMr59WSx0+aZ4zIcRfws=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.3.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13284227},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.2","tar":">=7.5.8","hono":">=4.11.10","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3","filelist>minimatch":">=10.2.1","@isaacs/brace-expansion":">=5.0.1","app-builder-lib>minimatch":">=10.2.1","@modelcontextprotocol/sdk>ajv":">=8.18.0"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^20.19 || ^22.12 || >=24.0"},"gitHead":"49158ec059de87b4c02d5af91ac1d87b8f7e1cae","private":false,"scripts":{"dev":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run","build":"pnpm --filter @factory-factory/core build && node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && node scripts/fix-prisma-imports.mjs && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:ownership","proxy":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts proxy --private","start":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"pnpm --filter @factory-factory/core build && storybook dev -p 6006","typecheck":"pnpm --filter @factory-factory/core build && tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"pnpm --filter @factory-factory/core build && BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-single-writer.mjs","test:e2e:mobile":"playwright test --config=playwright.mobile.config.ts","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","test:coverage:backend":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/domains/session/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:coverage:backend:stable":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend --exclude src/backend/routers/health.router.test.ts --exclude src/backend/routers/websocket/websocket.integration.test.ts --exclude src/backend/domains/session/acp/codex-cli-import-resolution.integration.test.ts --exclude src/backend/domains/session/acp/acp-session-negotiation.integration.test.ts","test:codex-app-server:manual:prompt":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run \"src/backend/domains/session/acp/codex-app-server-adapter/*.manual.integration.test.ts\""},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.7.0","react":"^19.2.4","dotenv":"^17.3.1","prisma":"7.4.0","qrcode":"^1.5.4","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.3","p-limit":"^7.3.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@linear/sdk":"^75.0.0","@trpc/client":"^11.10.0","@trpc/server":"^11.10.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.574.0","react-router":"^7.13.0","@prisma/client":"7.4.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.4.1","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.1","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.2","@trpc/react-query":"^11.10.0","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.1.18","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.21","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.6.4","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.18","@agentclientprotocol/sdk":"0.14.1","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"7.4.0","@radix-ui/react-navigation-menu":"^1.2.14","@zed-industries/claude-code-acp":"0.16.2"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.84.0","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^28.1.0","prisma":"7.4.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.4","electron":"^40.4.1","@types/ws":"^8.18.1","storybook":"10.2.10","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.2.3","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.1.18","@types/react":"^19.2.14","autoprefixer":"^10.4.24","concurrently":"^9.2.1","@types/qrcode":"^1.5.6","@biomejs/biome":"^2.4.2","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@playwright/test":"^1.58.2","@storybook/react":"10.2.10","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.8.1","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.1.18","dependency-cruiser":"^17.3.8","@vitest/coverage-v8":"^4.0.18","@vitejs/plugin-react":"^5.1.4","@storybook/addon-a11y":"10.2.10","@storybook/addon-docs":"10.2.10","@storybook/react-vite":"10.2.10","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.10","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.3.9_1771962568879_0.6538717346345362","host":"s3://npm-registry-packages-npm-production"}},"0.3.10":{"name":"factory-factory","version":"0.3.10","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.3.10","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"4c189192c89282151c35fe290f4c45aece223bad","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.3.10.tgz","fileCount":2065,"integrity":"sha512-sm5LIoJm21BiTmYEndIG1nshQm7yTeuqpXbOT5CDIWKbW/vZ/PnDGsFCNYxFbFio+ej4HvB/i/GaHG8E4ViLmw==","signatures":[{"sig":"MEUCICc/V4p7AMjVuigUgQeCMe8YFx7wML5TDWhCRxpsvZ02AiEAzSHbVOr4iGFdj4YJjBULfDd0d9rXunq+gVR5HM5SBJM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.3.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14334485},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.2","tar":">=7.5.8","hono":">=4.11.10","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3","filelist>minimatch":">=10.2.1","@isaacs/brace-expansion":">=5.0.1","app-builder-lib>minimatch":">=10.2.1","@modelcontextprotocol/sdk>ajv":">=8.18.0"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^20.19 || ^22.12 || >=24.0"},"gitHead":"b0f05c67f22e9841627953f6e87f3f194a5a10a1","private":false,"scripts":{"dev":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run","build":"pnpm --filter @factory-factory/core build && node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && node scripts/fix-prisma-imports.mjs && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:env && pnpm check:ownership","proxy":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts proxy --private","start":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:env":"node scripts/check-no-direct-process-env.mjs","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"pnpm --filter @factory-factory/core build && storybook dev -p 6006","typecheck":"pnpm --filter @factory-factory/core build && tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"pnpm --filter @factory-factory/core build && BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-single-writer.mjs && pnpm check:service-registry","test:e2e:mobile":"playwright test --config=playwright.mobile.config.ts","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","test:coverage:backend":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend","check:service-registry":"tsx scripts/check-service-registry.ts","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:coverage:backend:stable":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend --exclude src/backend/routers/health.router.test.ts --exclude src/backend/routers/websocket/websocket.integration.test.ts --exclude src/backend/services/session/service/acp/codex-cli-import-resolution.integration.test.ts --exclude src/backend/services/session/service/acp/acp-session-negotiation.integration.test.ts","test:codex-app-server:manual:prompt":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\""},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.1","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.7.0","react":"^19.2.4","dotenv":"^17.3.1","prisma":"7.4.1","qrcode":"^1.5.4","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.3","p-limit":"^7.3.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@linear/sdk":"^76.0.0","@trpc/client":"^11.10.0","@trpc/server":"^11.10.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.575.0","react-router":"^7.13.1","@prisma/client":"7.4.1","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.5.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.2","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.2","@trpc/react-query":"^11.10.0","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.2.1","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.21","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.6.5","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.19","@agentclientprotocol/sdk":"0.15.0","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"7.4.1","@radix-ui/react-navigation-menu":"^1.2.14","@zed-industries/claude-agent-acp":"^0.20.2"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.85.0","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^28.1.0","prisma":"7.4.1","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.4","electron":"^40.6.1","@types/ws":"^8.18.1","storybook":"10.2.12","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.3.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.2.1","@types/react":"^19.2.14","autoprefixer":"^10.4.27","concurrently":"^9.2.1","@types/qrcode":"^1.5.6","@biomejs/biome":"^2.4.4","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@playwright/test":"^1.58.2","@storybook/react":"10.2.12","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.8.1","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.2.1","dependency-cruiser":"^17.3.8","@vitest/coverage-v8":"^4.0.18","@vitejs/plugin-react":"^5.1.4","@storybook/addon-a11y":"10.2.12","@storybook/addon-docs":"10.2.12","@storybook/react-vite":"10.2.12","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.12","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.3.10_1774015339343_0.7160995336658977","host":"s3://npm-registry-packages-npm-production"}},"0.3.11":{"name":"factory-factory","version":"0.3.11","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.3.11","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"7c1c2a68cbeb747e04e082edae7f7a9b840323e0","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.3.11.tgz","fileCount":2065,"integrity":"sha512-kfy9eddNK0RlC0cQDcCtYx2Bz1U6tPebG+26EgaPW2Ex+kr0IsuVq2w0Uk0JqpWDDWhGojMNOADUxse8TaUx+A==","signatures":[{"sig":"MEYCIQDZgmcZsjzpPwJuJK6hgcER8iL1z+dygPTfxF+EPLTa2QIhAOturZuoIIUsnYKQaA+0+Zh/SZk7zHlvTvgR63DgK7ZS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.3.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14375580},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.2","tar":">=7.5.8","hono":">=4.11.10","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3","filelist>minimatch":">=10.2.1","@isaacs/brace-expansion":">=5.0.1","app-builder-lib>minimatch":">=10.2.1","@modelcontextprotocol/sdk>ajv":">=8.18.0"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^20.19 || ^22.12 || >=24.0"},"gitHead":"3144078bc9a62ccee15853ccfdb1445e0be02ec5","private":false,"scripts":{"dev":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run","build":"pnpm --filter @factory-factory/core build && node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && node scripts/fix-prisma-imports.mjs && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:env && pnpm check:ownership","proxy":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts proxy --private","start":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:env":"node scripts/check-no-direct-process-env.mjs","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"pnpm --filter @factory-factory/core build && storybook dev -p 6006","typecheck":"pnpm --filter @factory-factory/core build && tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"pnpm --filter @factory-factory/core build && BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-single-writer.mjs && pnpm check:service-registry","test:e2e:mobile":"playwright test --config=playwright.mobile.config.ts","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","test:coverage:backend":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend","check:service-registry":"tsx scripts/check-service-registry.ts","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:coverage:backend:stable":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend --exclude src/backend/routers/health.router.test.ts --exclude src/backend/routers/websocket/websocket.integration.test.ts --exclude src/backend/services/session/service/acp/codex-cli-import-resolution.integration.test.ts --exclude src/backend/services/session/service/acp/acp-session-negotiation.integration.test.ts","test:codex-app-server:manual:prompt":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\""},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.7.0","react":"^19.2.4","dotenv":"^17.3.1","prisma":"7.4.1","qrcode":"^1.5.4","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.3","p-limit":"^7.3.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@linear/sdk":"^76.0.0","@trpc/client":"^11.10.0","@trpc/server":"^11.10.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.575.0","react-router":"^7.13.1","@prisma/client":"7.4.1","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.5.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.2","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.2","@trpc/react-query":"^11.10.0","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.2.1","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.21","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.6.5","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.19","@agentclientprotocol/sdk":"0.15.0","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"7.4.1","@radix-ui/react-navigation-menu":"^1.2.14","@zed-industries/claude-agent-acp":"^0.20.2"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.85.0","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^28.1.0","prisma":"7.4.1","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.4","electron":"^40.6.1","@types/ws":"^8.18.1","storybook":"10.2.12","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.3.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.2.1","@types/react":"^19.2.14","autoprefixer":"^10.4.27","concurrently":"^9.2.1","@types/qrcode":"^1.5.6","@biomejs/biome":"^2.4.4","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@playwright/test":"^1.58.2","@storybook/react":"10.2.12","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.8.1","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.2.1","dependency-cruiser":"^17.3.8","@vitest/coverage-v8":"^4.0.18","@vitejs/plugin-react":"^5.1.4","@storybook/addon-a11y":"10.2.12","@storybook/addon-docs":"10.2.12","@storybook/react-vite":"10.2.12","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.12","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.3.11_1775145148253_0.17854768817984557","host":"s3://npm-registry-packages-npm-production"}},"0.3.12":{"name":"factory-factory","version":"0.3.12","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.3.12","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"7e5fdd2332eaf30382fa875b01b45dded33cdc26","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.3.12.tgz","fileCount":2110,"integrity":"sha512-Tj2YNcjWjitxn6S3hGjHVPyOFrTr0NdaMnXskAVV3pTOqxbyQYgLV7KFlFnKgAgPQspMy1Ok0W6rI+Mj1u1Shg==","signatures":[{"sig":"MEUCIQDWmWNNWWr2XFOu+I2/V5xobicoOZ7Z5r+nQEPXOAW0HAIgBdfCJJeTulHEnPXYF6QmWaoBw14qQtDuTLctjHorb/A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.3.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14645671},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.2","tar":">=7.5.8","hono":">=4.11.10","braces":">=3.0.3","lodash":">=4.17.23","form-data":">=2.5.4","lodash-es":">=4.17.23","micromatch":">=4.0.8","tough-cookie":">=4.1.3","filelist>minimatch":">=10.2.1","@isaacs/brace-expansion":">=5.0.1","app-builder-lib>minimatch":">=10.2.1","@modelcontextprotocol/sdk>ajv":">=8.18.0"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^20.19 || ^22.12 || >=24.0"},"gitHead":"fc43fc8a3f07150579e1ed9159c549318cfab9a1","private":false,"scripts":{"dev":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run","build":"pnpm --filter @factory-factory/core build && node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && node scripts/fix-prisma-imports.mjs && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:env && pnpm check:ownership","proxy":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts proxy --private","start":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:env":"node scripts/check-no-direct-process-env.mjs","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"pnpm --filter @factory-factory/core build && storybook dev -p 6006","typecheck":"pnpm --filter @factory-factory/core build && tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"pnpm --filter @factory-factory/core build && BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-single-writer.mjs && pnpm check:service-registry","test:e2e:mobile":"playwright test --config=playwright.mobile.config.ts","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","test:coverage:backend":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend","check:service-registry":"tsx scripts/check-service-registry.ts","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:coverage:backend:stable":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend --exclude src/backend/routers/health.router.test.ts --exclude src/backend/routers/websocket/websocket.integration.test.ts --exclude src/backend/services/session/service/acp/codex-cli-import-resolution.integration.test.ts --exclude src/backend/services/session/service/acp/acp-session-negotiation.integration.test.ts","test:codex-app-server:manual:prompt":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\""},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.7.0","react":"^19.2.4","dotenv":"^17.3.1","prisma":"7.4.1","qrcode":"^1.5.4","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.12.3","p-limit":"^7.3.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@linear/sdk":"^76.0.0","@trpc/client":"^11.10.0","@trpc/server":"^11.10.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.575.0","react-router":"^7.13.1","@prisma/client":"7.4.1","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.5.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.2","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.2","@trpc/react-query":"^11.10.0","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.2.1","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.21","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.6.5","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.19","@agentclientprotocol/sdk":"0.15.0","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"7.4.1","@radix-ui/react-navigation-menu":"^1.2.14","@agentclientprotocol/claude-agent-acp":"^0.25.3"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.85.0","vite":"^7.3.1","husky":"^9.1.7","jsdom":"^28.1.0","prisma":"7.4.1","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.4","electron":"^40.6.1","@types/ws":"^8.18.1","storybook":"10.2.12","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.3.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.2.1","@types/react":"^19.2.14","autoprefixer":"^10.4.27","concurrently":"^9.2.1","@types/qrcode":"^1.5.6","@biomejs/biome":"^2.4.4","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@playwright/test":"^1.58.2","@storybook/react":"10.2.12","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.8.1","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.2.1","dependency-cruiser":"^17.3.8","@vitest/coverage-v8":"^4.0.18","@vitejs/plugin-react":"^5.1.4","@storybook/addon-a11y":"10.2.12","@storybook/addon-docs":"10.2.12","@storybook/react-vite":"10.2.12","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.2.12","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.3.12_1775587638493_0.5173914989051234","host":"s3://npm-registry-packages-npm-production"}},"0.3.13":{"name":"factory-factory","version":"0.3.13","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.3.13","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"efba793478fc6b69f9c2269f8753c5ad99af21b3","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.3.13.tgz","fileCount":2114,"integrity":"sha512-Gw0vcmfaEJ+WZgbH/Ih8XeYuYyWfdG+jOBz27tHmQ3hnZWl4j0+yD+THiQir6WmOAUsvbVzCFbSNBi9YxmGOIQ==","signatures":[{"sig":"MEUCIQC4sSg3wRM1c1r8MT9Q9hru1aL4qwVD4s5/h6IpKUwHJgIgHL5yq9hzizAfqD37iN7fbx7924OmoZiVAbVdGRWAB9s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.3.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14926351},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.2","tar":"7.5.13","hono":"4.12.12","next":"16.1.7","yaml":"2.8.3","braces":">=3.0.3","lodash":"4.18.1","form-data":">=2.5.4","lodash-es":"4.18.1","smol-toml":"1.6.1","micromatch":">=4.0.8","picomatch@^2":"2.3.2","picomatch@^4":"4.0.4","tough-cookie":">=4.1.3","@xmldom/xmldom":"0.8.12","path-to-regexp":"8.4.2","@anthropic-ai/sdk":"0.81.0","@hono/node-server":"1.19.11","brace-expansion@^1":"1.1.13","brace-expansion@^5":"5.0.5","filelist>minimatch":">=10.2.1","serialize-javascript":"7.0.5","@isaacs/brace-expansion":">=5.0.1","app-builder-lib>minimatch":">=10.2.1","@modelcontextprotocol/sdk>ajv":">=8.18.0"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^20.19 || ^22.12 || >=24.0"},"gitHead":"688e0b4b276a7e60f711a9e2c132c03a0ffd4832","private":false,"scripts":{"dev":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run","build":"pnpm --filter @factory-factory/core build && node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && node scripts/fix-prisma-imports.mjs && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:env && pnpm check:ownership","proxy":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts proxy --private","start":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:env":"node scripts/check-no-direct-process-env.mjs","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"pnpm --filter @factory-factory/core build && storybook dev -p 6006","typecheck":"pnpm --filter @factory-factory/core build && tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"pnpm --filter @factory-factory/core build && BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-single-writer.mjs && pnpm check:service-registry","test:e2e:mobile":"playwright test --config=playwright.mobile.config.ts","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","test:coverage:backend":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend","check:service-registry":"tsx scripts/check-service-registry.ts","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:coverage:backend:stable":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend --exclude src/backend/routers/health.router.test.ts --exclude src/backend/routers/websocket/websocket.integration.test.ts --exclude src/backend/services/session/service/acp/codex-cli-import-resolution.integration.test.ts --exclude src/backend/services/session/service/acp/acp-session-negotiation.integration.test.ts","test:codex-app-server:manual:prompt":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\""},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.7.0","react":"^19.2.4","dotenv":"^17.3.1","prisma":"7.7.0","qrcode":"^1.5.4","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.14.0","p-limit":"^7.3.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@linear/sdk":"^76.0.0","@trpc/client":"^11.10.0","@trpc/server":"^11.10.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.575.0","react-router":"^7.13.1","@prisma/client":"7.7.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.5.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.2","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.2","@trpc/react-query":"^11.10.0","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.2.1","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.21","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.6.5","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.19","@agentclientprotocol/sdk":"0.15.0","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"7.7.0","@radix-ui/react-navigation-menu":"^1.2.14","@agentclientprotocol/claude-agent-acp":"^0.25.3"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.85.0","vite":"^7.3.2","husky":"^9.1.7","jsdom":"^29.0.2","prisma":"7.7.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.4","electron":"^40.8.5","@types/ws":"^8.18.1","storybook":"10.3.5","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.3.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.2.1","@types/react":"^19.2.14","autoprefixer":"^10.4.27","concurrently":"^9.2.1","@types/qrcode":"^1.5.6","@biomejs/biome":"^2.4.4","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@playwright/test":"^1.58.2","@storybook/react":"10.3.5","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.8.1","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.2.1","dependency-cruiser":"^17.3.8","@vitest/coverage-v8":"^4.0.18","@vitejs/plugin-react":"^5.1.4","@storybook/addon-a11y":"10.3.5","@storybook/addon-docs":"10.3.5","@storybook/react-vite":"10.3.5","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.3.5","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.3.13_1775654481091_0.7163726796133847","host":"s3://npm-registry-packages-npm-production"}},"0.3.14":{"name":"factory-factory","version":"0.3.14","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.3.14","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"9c59fd41e959e58bb9e6657b32c87e656925120e","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.3.14.tgz","fileCount":2115,"integrity":"sha512-sgPkChQ7cEowrYsez3L/uyoA8WWigGDHTQLxHwwI8Z5dHLUiXC42qxjMPvw6cCeJG6h7ARMxlW899yLJq870XQ==","signatures":[{"sig":"MEYCIQD/hNzz3a3Lrn4dAK9sU5Najl74xQOfiJMokljEHVtlkgIhAKKtcgRLeIKOHMZnsEPocxRqbkyyUFLmj28PycQGfETF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.3.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14956793},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.2","tar":"7.5.13","hono":"4.12.12","next":"16.1.7","yaml":"2.8.3","braces":">=3.0.3","lodash":"4.18.1","form-data":">=2.5.4","lodash-es":"4.18.1","smol-toml":"1.6.1","micromatch":">=4.0.8","picomatch@^2":"2.3.2","picomatch@^4":"4.0.4","tough-cookie":">=4.1.3","@xmldom/xmldom":"0.8.12","path-to-regexp":"8.4.2","@anthropic-ai/sdk":"0.81.0","@hono/node-server":"1.19.11","brace-expansion@^1":"1.1.13","brace-expansion@^5":"5.0.5","filelist>minimatch":">=10.2.1","serialize-javascript":"7.0.5","@isaacs/brace-expansion":">=5.0.1","app-builder-lib>minimatch":">=10.2.1","@modelcontextprotocol/sdk>ajv":">=8.18.0"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^20.19 || ^22.12 || >=24.0"},"gitHead":"23aa1e4440abb3a4fb47ee6e391352821dd53e2b","private":false,"scripts":{"dev":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run","build":"pnpm --filter @factory-factory/core build && node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && node scripts/fix-prisma-imports.mjs && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:env && pnpm check:ownership","proxy":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts proxy --private","start":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:env":"node scripts/check-no-direct-process-env.mjs","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"pnpm --filter @factory-factory/core build && storybook dev -p 6006","typecheck":"pnpm --filter @factory-factory/core build && tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"pnpm --filter @factory-factory/core build && BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-single-writer.mjs && pnpm check:service-registry","test:e2e:mobile":"playwright test --config=playwright.mobile.config.ts","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","test:coverage:backend":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend","check:service-registry":"tsx scripts/check-service-registry.ts","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:coverage:backend:stable":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend --exclude src/backend/routers/health.router.test.ts --exclude src/backend/routers/websocket/websocket.integration.test.ts --exclude src/backend/services/session/service/acp/codex-cli-import-resolution.integration.test.ts --exclude src/backend/services/session/service/acp/acp-session-negotiation.integration.test.ts","test:codex-app-server:manual:prompt":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\""},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.7.0","react":"^19.2.4","dotenv":"^17.3.1","prisma":"7.7.0","qrcode":"^1.5.4","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.14.0","p-limit":"^7.3.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@linear/sdk":"^76.0.0","@trpc/client":"^11.10.0","@trpc/server":"^11.10.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.575.0","react-router":"^7.13.1","@prisma/client":"7.7.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.5.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.2","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.2","@trpc/react-query":"^11.10.0","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.2.1","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.21","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.6.5","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.19","@agentclientprotocol/sdk":"0.15.0","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"7.7.0","@radix-ui/react-navigation-menu":"^1.2.14","@agentclientprotocol/claude-agent-acp":"^0.25.3"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.85.0","vite":"^7.3.2","husky":"^9.1.7","jsdom":"^29.0.2","prisma":"7.7.0","vitest":"^4.0.18","postcss":"^8.5.6","wait-on":"^9.0.4","electron":"^40.8.5","@types/ws":"^8.18.1","storybook":"10.3.5","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.3.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.2.1","@types/react":"^19.2.14","autoprefixer":"^10.4.27","concurrently":"^9.2.1","@types/qrcode":"^1.5.6","@biomejs/biome":"^2.4.4","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@playwright/test":"^1.58.2","@storybook/react":"10.3.5","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.8.1","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.2.1","dependency-cruiser":"^17.3.8","@vitest/coverage-v8":"^4.0.18","@vitejs/plugin-react":"^5.1.4","@storybook/addon-a11y":"10.3.5","@storybook/addon-docs":"10.3.5","@storybook/react-vite":"10.3.5","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.3.5","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.3.14_1775773176970_0.7140793841719695","host":"s3://npm-registry-packages-npm-production"}},"0.3.15":{"name":"factory-factory","version":"0.3.15","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.3.15","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"f37a98479fe8371ea42b2822ae951ebe8289813e","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.3.15.tgz","fileCount":2126,"integrity":"sha512-8OaSokIE7exeN6voTDnvm94Sq/u2zyUMIL1POFNdTa6doQVQAbGjfHeGcDsfcJp7ggxg0ewRkbsO+BQsFRI/8g==","signatures":[{"sig":"MEUCIH6bsj1MlkvJUPM42Ms+oCPhJOxrPd7JHkeTucjdcPwzAiEAwDfHAH0qVzMDsFVEtj0jUH0wfK4paffHyxjSqHAuBKs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.3.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":15146858},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.2","tar":"7.5.13","hono":"4.12.14","next":"16.2.3","uuid":"14.0.0","yaml":"2.8.3","braces":">=3.0.3","lodash":"4.18.1","postcss":"8.5.12","dompurify":"3.4.0","form-data":">=2.5.4","lodash-es":"4.18.1","smol-toml":"1.6.1","micromatch":">=4.0.8","picomatch@^2":"2.3.2","picomatch@^4":"4.0.4","tough-cookie":">=4.1.3","@xmldom/xmldom":"0.8.13","path-to-regexp":"8.4.2","follow-redirects":"1.16.0","@anthropic-ai/sdk":"0.81.0","@hono/node-server":"1.19.14","brace-expansion@^1":"1.1.13","brace-expansion@^5":"5.0.5","filelist>minimatch":">=10.2.1","serialize-javascript":"7.0.5","@isaacs/brace-expansion":">=5.0.1","app-builder-lib>minimatch":">=10.2.1","@modelcontextprotocol/sdk>ajv":">=8.18.0"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^20.19 || ^22.12 || >=24.0"},"gitHead":"a3b3b6e3d444c9b0fb834dbba119c1d99b351378","private":false,"scripts":{"dev":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run","build":"pnpm --filter @factory-factory/core build && node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && node scripts/fix-prisma-imports.mjs && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:env && pnpm check:ownership","proxy":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts proxy --private","start":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:env":"node scripts/check-no-direct-process-env.mjs","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"pnpm --filter @factory-factory/core build && storybook dev -p 6006","typecheck":"pnpm --filter @factory-factory/core build && tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"pnpm --filter @factory-factory/core build && BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-single-writer.mjs && pnpm check:service-registry","test:e2e:mobile":"playwright test --config=playwright.mobile.config.ts","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","test:coverage:backend":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend","check:service-registry":"tsx scripts/check-service-registry.ts","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:coverage:backend:stable":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend --exclude src/backend/routers/health.router.test.ts --exclude src/backend/routers/websocket/websocket.integration.test.ts --exclude src/backend/services/session/service/acp/codex-cli-import-resolution.integration.test.ts --exclude src/backend/services/session/service/acp/acp-session-negotiation.integration.test.ts","test:codex-app-server:manual:prompt":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\""},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","next":"16.2.3","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.7.0","react":"^19.2.4","dotenv":"^17.3.1","prisma":"7.7.0","qrcode":"^1.5.4","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.14.0","p-limit":"^7.3.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@linear/sdk":"^76.0.0","@trpc/client":"^11.10.0","@trpc/server":"^11.10.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.575.0","react-router":"^7.13.1","@prisma/client":"7.7.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.5.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.2","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.2","@trpc/react-query":"^11.10.0","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.2.1","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.21","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.6.5","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.19","@agentclientprotocol/sdk":"0.15.0","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"7.7.0","@radix-ui/react-navigation-menu":"^1.2.14","@agentclientprotocol/claude-agent-acp":"^0.25.3"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.85.0","vite":"^7.3.2","husky":"^9.1.7","jsdom":"^29.0.2","prisma":"7.7.0","vitest":"^4.0.18","postcss":"^8.5.12","wait-on":"^9.0.5","electron":"^40.8.5","@types/ws":"^8.18.1","storybook":"10.3.5","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.3.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.2.1","@types/react":"^19.2.14","autoprefixer":"^10.4.27","concurrently":"^9.2.1","@types/qrcode":"^1.5.6","@biomejs/biome":"^2.4.4","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@playwright/test":"^1.58.2","@storybook/react":"10.3.5","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.8.1","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.2.1","dependency-cruiser":"^17.3.8","@vitest/coverage-v8":"^4.0.18","@vitejs/plugin-react":"^5.1.4","@storybook/addon-a11y":"10.3.5","@storybook/addon-docs":"10.3.5","@storybook/react-vite":"10.3.5","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.3.5","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.3.15_1777478623064_0.7726541016116586","host":"s3://npm-registry-packages-npm-production"}},"0.3.16":{"name":"factory-factory","version":"0.3.16","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.3.16","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"5274b8a03a9da8ce3616c0e458987fcf092eab25","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.3.16.tgz","fileCount":2153,"integrity":"sha512-bRmDbLL0t3EvoR3czLL69XSNakX6HFnENdDL4gy62NMWo+L4d+hJvsGQ5uK3H4iwER7VF26VrJFYc7wJROBefg==","signatures":[{"sig":"MEQCIDWzWGqfLbMmjyfzgdBq7hFS5aRml7nbfeJEsBkPE3VFAiBbji4dzvvXLLzMfARqL3zlUsztp/hCZPVlbREas8aCdw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.3.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":15792790},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.2","tar":"7.5.13","hono":"4.12.18","next":"16.2.6","uuid":"14.0.0","yaml":"2.8.3","braces":">=3.0.3","lodash":"4.18.1","postcss":"8.5.12","webpack":"5.106.2","fast-uri":"3.1.2","dompurify":"3.4.0","form-data":">=2.5.4","lodash-es":"4.18.1","smol-toml":"1.6.1","ip-address":"10.1.1","micromatch":">=4.0.8","picomatch@^2":"2.3.2","picomatch@^4":"4.0.4","tough-cookie":">=4.1.3","@xmldom/xmldom":"0.8.13","path-to-regexp":"8.4.2","follow-redirects":"1.16.0","@anthropic-ai/sdk":"0.91.1","@hono/node-server":"1.19.14","brace-expansion@^1":"1.1.13","brace-expansion@^5":"5.0.5","filelist>minimatch":">=10.2.1","serialize-javascript":"7.0.5","@isaacs/brace-expansion":">=5.0.1","app-builder-lib>minimatch":">=10.2.1","@modelcontextprotocol/sdk>ajv":">=8.18.0"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^20.19 || ^22.12 || >=24.0"},"gitHead":"9d8e0746be8903d114a61d3f2076c5983660136b","private":false,"scripts":{"dev":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run","build":"pnpm --filter @factory-factory/core build && node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && node scripts/fix-prisma-imports.mjs && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:env && pnpm check:ownership","proxy":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts proxy --private","start":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:env":"node scripts/check-no-direct-process-env.mjs","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"pnpm --filter @factory-factory/core build && storybook dev -p 6006","typecheck":"pnpm --filter @factory-factory/core build && tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"pnpm --filter @factory-factory/core build && BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-single-writer.mjs && pnpm check:service-registry","test:e2e:mobile":"playwright test --config=playwright.mobile.config.ts","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","test:coverage:backend":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend","check:service-registry":"tsx scripts/check-service-registry.ts","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:coverage:backend:stable":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend --exclude src/backend/routers/health.router.test.ts --exclude src/backend/routers/websocket/websocket.integration.test.ts --exclude src/backend/services/session/service/acp/codex-cli-import-resolution.integration.test.ts --exclude src/backend/services/session/service/acp/acp-session-negotiation.integration.test.ts","test:codex-app-server:manual:prompt":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\""},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","next":"16.2.6","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.7.0","react":"^19.2.4","dotenv":"^17.3.1","prisma":"7.7.0","qrcode":"^1.5.4","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.15.0","p-limit":"^7.3.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@linear/sdk":"^76.0.0","@trpc/client":"^11.10.0","@trpc/server":"^11.10.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.575.0","react-router":"^7.13.1","@prisma/client":"7.7.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.5.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.2","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.2","@trpc/react-query":"^11.10.0","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.2.1","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.21","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.6.5","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.19","@agentclientprotocol/sdk":"0.15.0","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"7.7.0","@radix-ui/react-navigation-menu":"^1.2.14","@agentclientprotocol/claude-agent-acp":"^0.25.3"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.85.0","vite":"^7.3.2","husky":"^9.1.7","jsdom":"^29.0.2","prisma":"7.7.0","vitest":"^4.0.18","postcss":"^8.5.12","wait-on":"^9.0.10","electron":"^40.8.5","@types/ws":"^8.18.1","storybook":"10.3.6","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.3.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.2.1","@types/react":"^19.2.14","autoprefixer":"^10.4.27","concurrently":"^9.2.1","@types/qrcode":"^1.5.6","@biomejs/biome":"^2.4.4","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@playwright/test":"^1.58.2","@storybook/react":"10.3.6","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.8.1","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.2.1","dependency-cruiser":"^17.3.8","@vitest/coverage-v8":"^4.0.18","@vitejs/plugin-react":"^5.1.4","@storybook/addon-a11y":"10.3.6","@storybook/addon-docs":"10.3.6","@storybook/react-vite":"10.3.6","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.3.6","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.3.16_1778788872609_0.10616372245873462","host":"s3://npm-registry-packages-npm-production"}},"0.3.17":{"name":"factory-factory","version":"0.3.17","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.3.17","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"ef3345a664026886bc4e5b4f117248955b9b3040","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.3.17.tgz","fileCount":2153,"integrity":"sha512-attVyVowKbjDn+pLpYBT+6/ZdAEDdIQ6JEl4jss8qm1675J0qMPhkrnk/RfFBJsWQQyf99S/CYZ0Fp9+nxYXKg==","signatures":[{"sig":"MEUCIEZcEKgkVT04mSaqctTzxOZZF2lChc1FeWNof0bKuSxzAiEA/6Pb0IlMfNEJU4z5ZPDuG0/LfqY6wuULfguMHH2n9Cs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.3.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":15809862},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.2","tar":"7.5.13","hono":"4.12.18","next":"16.2.6","uuid":"14.0.0","yaml":"2.8.3","braces":">=3.0.3","lodash":"4.18.1","postcss":"8.5.12","webpack":"5.106.2","fast-uri":"3.1.2","dompurify":"3.4.0","form-data":">=2.5.4","lodash-es":"4.18.1","smol-toml":"1.6.1","ip-address":"10.1.1","micromatch":">=4.0.8","picomatch@^2":"2.3.2","picomatch@^4":"4.0.4","tough-cookie":">=4.1.3","@xmldom/xmldom":"0.8.13","path-to-regexp":"8.4.2","follow-redirects":"1.16.0","@anthropic-ai/sdk":"0.91.1","@hono/node-server":"1.19.14","brace-expansion@^1":"1.1.13","brace-expansion@^5":"5.0.5","filelist>minimatch":">=10.2.1","serialize-javascript":"7.0.5","@isaacs/brace-expansion":">=5.0.1","app-builder-lib>minimatch":">=10.2.1","@modelcontextprotocol/sdk>ajv":">=8.18.0"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^20.19 || ^22.12 || >=24.0"},"gitHead":"1ce2deec8abc83f9f79aab2a10d4cde064b11ff8","private":false,"scripts":{"dev":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run","build":"pnpm --filter @factory-factory/core build && node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && node scripts/fix-prisma-imports.mjs && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:env && pnpm check:ownership","proxy":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts proxy --private","start":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:env":"node scripts/check-no-direct-process-env.mjs","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"pnpm --filter @factory-factory/core build && storybook dev -p 6006","typecheck":"pnpm --filter @factory-factory/core build && tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"pnpm --filter @factory-factory/core build && BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-single-writer.mjs && pnpm check:service-registry","test:e2e:mobile":"playwright test --config=playwright.mobile.config.ts","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","test:coverage:backend":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend","check:service-registry":"tsx scripts/check-service-registry.ts","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:coverage:backend:stable":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend --exclude src/backend/routers/health.router.test.ts --exclude src/backend/routers/websocket/websocket.integration.test.ts --exclude src/backend/services/session/service/acp/codex-cli-import-resolution.integration.test.ts --exclude src/backend/services/session/service/acp/acp-session-negotiation.integration.test.ts","test:codex-app-server:manual:prompt":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\""},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","next":"16.2.6","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.7.0","react":"^19.2.4","dotenv":"^17.3.1","prisma":"7.7.0","qrcode":"^1.5.4","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.15.0","p-limit":"^7.3.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@linear/sdk":"^76.0.0","@trpc/client":"^11.10.0","@trpc/server":"^11.10.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.575.0","react-router":"^7.13.1","@prisma/client":"7.7.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.5.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.2","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.2","@trpc/react-query":"^11.10.0","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.2.1","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.21","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.6.5","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.19","@agentclientprotocol/sdk":"0.15.0","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"7.7.0","@radix-ui/react-navigation-menu":"^1.2.14","@agentclientprotocol/claude-agent-acp":"^0.25.3"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.85.0","vite":"^7.3.2","husky":"^9.1.7","jsdom":"^29.0.2","prisma":"7.7.0","vitest":"^4.0.18","postcss":"^8.5.12","wait-on":"^9.0.10","electron":"^40.8.5","@types/ws":"^8.18.1","storybook":"10.3.6","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.3.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.2.1","@types/react":"^19.2.14","autoprefixer":"^10.4.27","concurrently":"^9.2.1","@types/qrcode":"^1.5.6","@biomejs/biome":"^2.4.4","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@playwright/test":"^1.58.2","@storybook/react":"10.3.6","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.8.1","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.2.1","dependency-cruiser":"^17.3.8","@vitest/coverage-v8":"^4.0.18","@vitejs/plugin-react":"^5.1.4","@storybook/addon-a11y":"10.3.6","@storybook/addon-docs":"10.3.6","@storybook/react-vite":"10.3.6","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.3.6","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.3.17_1778795317994_0.9254291891399324","host":"s3://npm-registry-packages-npm-production"}},"0.3.18":{"name":"factory-factory","version":"0.3.18","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.3.18","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"048e186de0d23adfa05cfd0a17f27afda8fbb2c6","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.3.18.tgz","fileCount":2194,"integrity":"sha512-L0fuKn7yn21Z2gtrasdeIl+XWPWWu1IuNMT5ds+hudwRUvWl4s2dmB5TR18CgEBr5PSR0mJeGPs43Hlac7YD8w==","signatures":[{"sig":"MEUCIH1s3OpwBnV6IlV0vwbL5lTnnz85LFtzLdw2zYCD+1TiAiEA45EaAVc6gn6VBUJmituqpplG7qQjohxYYlMIbdXmDjs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.3.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":15894166},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.2","tar":"7.5.13","hono":"4.12.18","next":"16.2.6","uuid":"14.0.0","yaml":"2.8.3","braces":">=3.0.3","lodash":"4.18.1","postcss":"8.5.12","webpack":"5.106.2","fast-uri":"3.1.2","dompurify":"3.4.0","form-data":">=2.5.4","lodash-es":"4.18.1","smol-toml":"1.6.1","ip-address":"10.1.1","micromatch":">=4.0.8","picomatch@^2":"2.3.2","picomatch@^4":"4.0.4","tough-cookie":">=4.1.3","@xmldom/xmldom":"0.8.13","path-to-regexp":"8.4.2","follow-redirects":"1.16.0","@anthropic-ai/sdk":"0.91.1","@hono/node-server":"1.19.14","brace-expansion@^1":"1.1.13","brace-expansion@^5":"5.0.5","filelist>minimatch":">=10.2.1","serialize-javascript":"7.0.5","@isaacs/brace-expansion":">=5.0.1","app-builder-lib>minimatch":">=10.2.1","@modelcontextprotocol/sdk>ajv":">=8.18.0"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^20.19 || ^22.12 || >=24.0"},"gitHead":"c87510171038ec19565f160387372779befc6a32","private":false,"scripts":{"dev":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run","build":"pnpm --filter @factory-factory/core build && node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && node scripts/fix-prisma-imports.mjs && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:env && pnpm check:ownership && pnpm deps:check && pnpm check:codex-schema","proxy":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts proxy --private","start":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:env":"node scripts/check-no-direct-process-env.mjs","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"pnpm --filter @factory-factory/core build && storybook dev -p 6006","typecheck":"pnpm --filter @factory-factory/core build && tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"pnpm --filter @factory-factory/core build && BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage && pnpm check:coverage:critical","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-single-writer.mjs && pnpm check:service-registry","test:e2e:mobile":"playwright test --config=playwright.mobile.config.ts","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","test:coverage:backend":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend","check:service-registry":"tsx scripts/check-service-registry.ts","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:coverage:backend:stable":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend --exclude src/backend/routers/health.router.test.ts --exclude src/backend/routers/websocket/websocket.integration.test.ts --exclude src/backend/services/session/service/acp/codex-cli-import-resolution.integration.test.ts --exclude src/backend/services/session/service/acp/acp-session-negotiation.integration.test.ts","test:codex-app-server:manual:prompt":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\""},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","next":"16.2.6","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.7.0","react":"^19.2.4","dotenv":"^17.3.1","prisma":"7.7.0","qrcode":"^1.5.4","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.15.0","p-limit":"^7.3.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@linear/sdk":"^76.0.0","@trpc/client":"^11.10.0","@trpc/server":"^11.10.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.575.0","react-router":"^7.13.1","@prisma/client":"7.7.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.5.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.2","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.2","@trpc/react-query":"^11.10.0","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.2.1","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.21","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.6.5","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.19","@agentclientprotocol/sdk":"0.15.0","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"7.7.0","@radix-ui/react-navigation-menu":"^1.2.14","@agentclientprotocol/claude-agent-acp":"^0.25.3"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.85.0","vite":"^7.3.2","husky":"^9.1.7","jsdom":"^29.0.2","prisma":"7.7.0","vitest":"^4.0.18","postcss":"^8.5.12","wait-on":"^9.0.10","electron":"^40.8.5","@types/ws":"^8.18.1","storybook":"10.3.6","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.3.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.2.1","@types/react":"^19.2.14","autoprefixer":"^10.4.27","concurrently":"^9.2.1","@types/qrcode":"^1.5.6","@biomejs/biome":"^2.4.4","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@playwright/test":"^1.58.2","@storybook/react":"10.3.6","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.8.1","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.2.1","dependency-cruiser":"^17.3.8","@vitest/coverage-v8":"^4.0.18","@vitejs/plugin-react":"^5.1.4","@storybook/addon-a11y":"10.3.6","@storybook/addon-docs":"10.3.6","@storybook/react-vite":"10.3.6","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.3.6","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.3.18_1779284502826_0.6662465786907004","host":"s3://npm-registry-packages-npm-production"}},"0.3.19":{"name":"factory-factory","version":"0.3.19","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.3.19","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"8a9f125c5e3b86e122a21e6d7d4a0a0ee6e2002f","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.3.19.tgz","fileCount":2251,"integrity":"sha512-lueBflBouIsr/sZaBUXmCMALIex/3cIr2QNvFXRujzcPBHTg9dD+40EymSYVz5h3DzoPbPu+k/dLE74lJb32zg==","signatures":[{"sig":"MEUCIQCLhlth6CqZd4IxBv/y+Y0hGMayMeDL1BVMJVUNfjF4BwIgMrDTnPL39oVDdnwOJE9xbGFW0bbul0Elv2aX7CRbd9Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.3.19","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":15997671},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":">=6.14.2","tar":"7.5.13","hono":"4.12.18","next":"16.2.6","uuid":"14.0.0","yaml":"2.8.3","braces":">=3.0.3","lodash":"4.18.1","postcss":"8.5.12","webpack":"5.106.2","fast-uri":"3.1.2","dompurify":"3.4.0","form-data":">=2.5.4","lodash-es":"4.18.1","smol-toml":"1.6.1","ip-address":"10.1.1","micromatch":">=4.0.8","picomatch@^2":"2.3.2","picomatch@^4":"4.0.4","tough-cookie":">=4.1.3","@xmldom/xmldom":"0.8.13","path-to-regexp":"8.4.2","follow-redirects":"1.16.0","@anthropic-ai/sdk":"0.91.1","@hono/node-server":"1.19.14","brace-expansion@^1":"1.1.13","brace-expansion@^5":"5.0.5","filelist>minimatch":">=10.2.1","serialize-javascript":"7.0.5","@isaacs/brace-expansion":">=5.0.1","app-builder-lib>minimatch":">=10.2.1","@modelcontextprotocol/sdk>ajv":">=8.18.0"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^20.19 || ^22.12 || >=24.0"},"gitHead":"30be6d611d18bf1c962fdcc8220c6045ec88ccb6","private":false,"scripts":{"dev":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run","build":"pnpm --filter @factory-factory/core build && node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && node scripts/fix-prisma-imports.mjs && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:env && pnpm check:ownership && pnpm deps:check && pnpm check:codex-schema","proxy":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts proxy --private","start":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:env":"node scripts/check-no-direct-process-env.mjs","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"pnpm --filter @factory-factory/core build && storybook dev -p 6006","typecheck":"pnpm --filter @factory-factory/core build && tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"pnpm --filter @factory-factory/core build && BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage && pnpm check:coverage:critical","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-single-writer.mjs && pnpm check:service-registry","test:e2e:mobile":"playwright test --config=playwright.mobile.config.ts","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","check:prisma-schema":"pnpm db:generate && pnpm check:service-registry && pnpm typecheck","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","test:coverage:backend":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend","check:prisma-generated":"node scripts/check-prisma-generated-drift.mjs","check:service-registry":"tsx scripts/check-service-registry.ts","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:coverage:backend:stable":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend --exclude src/backend/routers/health.router.test.ts --exclude src/backend/routers/websocket/websocket.integration.test.ts --exclude src/backend/services/session/service/acp/codex-cli-import-resolution.integration.test.ts --exclude src/backend/services/session/service/acp/acp-session-negotiation.integration.test.ts","test:codex-app-server:manual:prompt":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\""},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.19.0","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","next":"16.2.6","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.7.0","react":"^19.2.4","dotenv":"^17.3.1","prisma":"7.7.0","qrcode":"^1.5.4","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.15.0","p-limit":"^7.3.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@linear/sdk":"^76.0.0","@trpc/client":"^11.10.0","@trpc/server":"^11.10.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.575.0","react-router":"^7.13.1","@prisma/client":"7.7.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.5.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.2","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.2","@trpc/react-query":"^11.10.0","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.2.1","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.21","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.6.5","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.19","@agentclientprotocol/sdk":"0.15.0","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"7.7.0","@radix-ui/react-navigation-menu":"^1.2.14","@agentclientprotocol/claude-agent-acp":"^0.25.3"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.85.0","vite":"^7.3.2","husky":"^9.1.7","jsdom":"^29.0.2","prisma":"7.7.0","vitest":"^4.0.18","postcss":"^8.5.12","wait-on":"^9.0.10","electron":"^40.8.5","@types/ws":"^8.18.1","storybook":"10.3.6","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.3.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.2.1","@types/react":"^19.2.14","autoprefixer":"^10.4.27","concurrently":"^9.2.1","@types/qrcode":"^1.5.6","@biomejs/biome":"^2.4.4","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@playwright/test":"^1.58.2","@storybook/react":"10.3.6","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.8.1","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.2.1","dependency-cruiser":"^17.3.8","@vitest/coverage-v8":"^4.0.18","@vitejs/plugin-react":"^5.1.4","@storybook/addon-a11y":"10.3.6","@storybook/addon-docs":"10.3.6","@storybook/react-vite":"10.3.6","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.3.6","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.3.19_1779296724272_0.6827891694154464","host":"s3://npm-registry-packages-npm-production"}},"0.3.20":{"name":"factory-factory","version":"0.3.20","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.3.20","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"7cbfae98ce36db26549c17e6f9284a9c17e073c2","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.3.20.tgz","fileCount":2281,"integrity":"sha512-VhOaijA2Irhmyz85AteFp74UMpjesmT161QDXU5vnS7yyu2FLNwT4Z6wcwmLjVNxA6qtynJU3PtGByDWze22yQ==","signatures":[{"sig":"MEYCIQCaIi49TfNy8fFI0sBTVO0LCXUORtU1clGg2YHhLgK7+wIhAKUlL1YNbRQjCPGvFTocPviL5/zxvhQZkgibjRiQDzFG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.3.20","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":16194736},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":"6.15.2","tar":"7.5.13","tmp":"0.2.6","hono":"4.12.18","next":"16.2.6","uuid":"14.0.0","yaml":"2.8.3","braces":">=3.0.3","lodash":"4.18.1","postcss":"8.5.12","webpack":"5.106.2","fast-uri":"3.1.2","dompurify":"3.4.0","form-data":">=2.5.4","lodash-es":"4.18.1","smol-toml":"1.6.1","ip-address":"10.1.1","micromatch":">=4.0.8","picomatch@^2":"2.3.2","picomatch@^4":"4.0.4","tough-cookie":">=4.1.3","@xmldom/xmldom":"0.8.13","path-to-regexp":"8.4.2","follow-redirects":"1.16.0","@anthropic-ai/sdk":"0.91.1","@hono/node-server":"1.19.14","brace-expansion@^1":"1.1.13","brace-expansion@^5":"5.0.6","filelist>minimatch":">=10.2.1","serialize-javascript":"7.0.5","@isaacs/brace-expansion":">=5.0.1","app-builder-lib>minimatch":">=10.2.1","@modelcontextprotocol/sdk>ajv":">=8.18.0"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"]},"type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^20.19 || ^22.12 || >=24.0"},"gitHead":"70a0824b55420e7bd51078f1339e941840d63d63","private":false,"scripts":{"dev":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run","build":"pnpm --filter @factory-factory/core build && node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && node scripts/fix-prisma-imports.mjs && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:env && pnpm check:ownership && pnpm deps:check && pnpm check:codex-schema","proxy":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts proxy --private","start":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:env":"node scripts/check-no-direct-process-env.mjs","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"pnpm --filter @factory-factory/core build && storybook dev -p 6006","typecheck":"pnpm --filter @factory-factory/core build && tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"pnpm --filter @factory-factory/core build && BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage && pnpm check:coverage:critical","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-single-writer.mjs && pnpm check:service-registry","test:e2e:mobile":"playwright test --config=playwright.mobile.config.ts","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","check:prisma-schema":"pnpm db:generate && pnpm check:service-registry && pnpm typecheck","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","test:coverage:backend":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend","check:prisma-generated":"node scripts/check-prisma-generated-drift.mjs","check:service-registry":"tsx scripts/check-service-registry.ts","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:coverage:backend:stable":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend --exclude src/backend/routers/health.router.test.ts --exclude src/backend/routers/websocket/websocket.integration.test.ts --exclude src/backend/services/session/service/acp/codex-cli-import-resolution.integration.test.ts --exclude src/backend/services/session/service/acp/acp-session-negotiation.integration.test.ts","test:codex-app-server:manual:prompt":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\""},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.20.1","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","next":"16.2.6","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.7.0","react":"^19.2.4","dotenv":"^17.3.1","prisma":"7.7.0","qrcode":"^1.5.4","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.15.0","p-limit":"^7.3.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@linear/sdk":"^76.0.0","@trpc/client":"^11.10.0","@trpc/server":"^11.10.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.575.0","react-router":"^7.13.1","@prisma/client":"7.7.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.5.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.2","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.2","@trpc/react-query":"^11.10.0","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.2.1","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.21","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.6.5","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.19","@agentclientprotocol/sdk":"0.15.0","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"7.7.0","@radix-ui/react-navigation-menu":"^1.2.14","@agentclientprotocol/claude-agent-acp":"^0.25.3"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.85.0","vite":"^7.3.2","husky":"^9.1.7","jsdom":"^29.0.2","prisma":"7.7.0","vitest":"^4.0.18","postcss":"^8.5.12","wait-on":"^9.0.10","electron":"^40.8.5","@types/ws":"^8.18.1","storybook":"10.3.6","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.3.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.2.1","@types/react":"^19.2.14","autoprefixer":"^10.4.27","concurrently":"^9.2.1","@types/qrcode":"^1.5.6","@biomejs/biome":"^2.4.4","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@playwright/test":"^1.58.2","@storybook/react":"10.3.6","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.8.1","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.2.1","dependency-cruiser":"^17.3.8","@vitest/coverage-v8":"^4.0.18","@vitejs/plugin-react":"^5.1.4","@storybook/addon-a11y":"10.3.6","@storybook/addon-docs":"10.3.6","@storybook/react-vite":"10.3.6","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.3.6","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.3.20_1780076452142_0.5605484414653257","host":"s3://npm-registry-packages-npm-production"}},"0.3.21":{"name":"factory-factory","version":"0.3.21","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.3.21","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"61973291d4e29922fc7959a25d945b9048c6eb5a","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.3.21.tgz","fileCount":2293,"integrity":"sha512-Oh5rlXQaRYN4NIke/w9EvGfeA4wGqkTZbNo0Uozv68reZCHaWAbWzo5sC9OgjdtlOLb1xKLupD/akaSOw6lzvA==","signatures":[{"sig":"MEUCIQCgaipttba0qGTp02XXI7TXnbA6MVOnMzl2J+6O4wRXawIgIihdtS0FIEyAck8xI6Zuo4SdW+zLOa9EQvfEH1V4BKc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.3.21","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":16378287},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":"6.15.2","tar":"7.5.16","tmp":"0.2.7","hono":"4.12.25","next":"16.2.6","uuid":"14.0.0","yaml":"2.8.3","braces":">=3.0.3","lodash":"4.18.1","undici":"7.28.0","esbuild":"0.28.1","js-yaml":"4.2.0","postcss":"8.5.12","webpack":"5.106.2","fast-uri":"3.1.2","dompurify":"3.4.11","form-data":"4.0.6","lodash-es":"4.18.1","smol-toml":"1.6.1","ip-address":"10.1.1","micromatch":">=4.0.8","@babel/core":"7.29.6","shell-quote":"1.8.4","picomatch@^2":"2.3.2","picomatch@^4":"4.0.4","tough-cookie":">=4.1.3","@xmldom/xmldom":"0.8.13","path-to-regexp":"8.4.2","follow-redirects":"1.16.0","@anthropic-ai/sdk":"0.91.1","@hono/node-server":"1.19.14","brace-expansion@^1":"1.1.13","brace-expansion@^5":"5.0.6","filelist>minimatch":">=10.2.1","serialize-javascript":"7.0.5","@isaacs/brace-expansion":">=5.0.1","app-builder-lib>minimatch":">=10.2.1","@modelcontextprotocol/sdk>ajv":">=8.18.0"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"],"ignoredBuiltDependencies":["electron-winstaller"]},"type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^20.19 || ^22.12 || >=24.0"},"gitHead":"e538a45608ce2142a586fb8e37b985c06bca9b29","private":false,"scripts":{"dev":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run","build":"pnpm --filter @factory-factory/core build && node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && node scripts/fix-prisma-imports.mjs && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:env && pnpm check:ownership && pnpm deps:check && pnpm check:codex-schema","proxy":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts proxy --private","start":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:env":"node scripts/check-no-direct-process-env.mjs","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"pnpm --filter @factory-factory/core build && storybook dev -p 6006","typecheck":"pnpm --filter @factory-factory/core build && tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"pnpm --filter @factory-factory/core build && BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage && pnpm check:coverage:critical","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-single-writer.mjs && pnpm check:service-registry","test:e2e:mobile":"playwright test --config=playwright.mobile.config.ts","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","check:prisma-schema":"pnpm db:generate && pnpm check:service-registry && pnpm typecheck","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","test:coverage:backend":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend","check:prisma-generated":"node scripts/check-prisma-generated-drift.mjs","check:service-registry":"tsx scripts/check-service-registry.ts","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:coverage:backend:stable":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend --exclude src/backend/routers/health.router.test.ts --exclude src/backend/routers/websocket/websocket.integration.test.ts --exclude src/backend/services/session/service/acp/codex-cli-import-resolution.integration.test.ts --exclude src/backend/services/session/service/acp/acp-session-negotiation.integration.test.ts","test:codex-app-server:manual:prompt":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\""},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.20.1","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","next":"16.2.6","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.7.0","react":"^19.2.4","dotenv":"^17.3.1","prisma":"7.7.0","qrcode":"^1.5.4","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.15.0","p-limit":"^7.3.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@linear/sdk":"^76.0.0","@trpc/client":"^11.10.0","@trpc/server":"^11.10.0","@xterm/xterm":"^6.0.0","lucide-react":"^0.575.0","react-router":"^7.15.0","@prisma/client":"7.7.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.5.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.2","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.2","@trpc/react-query":"^11.10.0","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.2.1","embla-carousel-react":"^8.6.0","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.21","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.6.5","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.19","@agentclientprotocol/sdk":"0.15.0","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"7.7.0","@radix-ui/react-navigation-menu":"^1.2.14","@agentclientprotocol/claude-agent-acp":"^0.25.3"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.85.0","vite":"^7.3.5","husky":"^9.1.7","jsdom":"^29.0.2","prisma":"7.7.0","vitest":"^4.1.0","postcss":"^8.5.12","wait-on":"^9.0.10","electron":"^40.8.5","@types/ws":"^8.18.1","storybook":"10.3.6","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.3.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.2.1","@types/react":"^19.2.14","autoprefixer":"^10.4.27","concurrently":"^9.2.1","@types/qrcode":"^1.5.6","@biomejs/biome":"^2.4.4","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@playwright/test":"^1.58.2","@storybook/react":"10.3.6","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.8.1","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.2.1","dependency-cruiser":"^17.3.8","@vitest/coverage-v8":"^4.1.0","@vitejs/plugin-react":"^5.1.4","@storybook/addon-a11y":"10.3.6","@storybook/addon-docs":"10.3.6","@storybook/react-vite":"10.3.6","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.3.6","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.3.21_1782158313836_0.3320744999584735","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"factory-factory","version":"0.4.0","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.4.0","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"bd0d4a7b8030fc9a358ea120434b77d59972dd3b","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.4.0.tgz","fileCount":2406,"integrity":"sha512-mNVG9/TwvHxxfMF07jDOfAmo4UQ2q97VnAfwKiFogw6cu3HDN8U0tGNMpMxEileKUa0+xWaEMAsTE/nVYOp9OQ==","signatures":[{"sig":"MEUCIALfNUW6XhQAUHqHvMEzQ9fN0PxcKlQSEynARyx95EFAAiEA8AqaCrUXqe+RVbo9h0dnHz1hSSBjHG+OCxiiVSrA5UI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":18071055},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":"6.15.2","tar":"7.5.16","tmp":"0.2.7","hono":"4.12.25","next":"16.2.6","uuid":"14.0.0","yaml":"2.8.3","braces":">=3.0.3","lodash":"4.18.1","undici":"7.28.0","esbuild":"0.28.1","js-yaml":"4.2.0","postcss":"8.5.12","webpack":"5.106.2","fast-uri":"3.1.2","dompurify":"3.4.11","form-data":"4.0.6","lodash-es":"4.18.1","smol-toml":"1.6.1","ip-address":"10.1.1","micromatch":">=4.0.8","@babel/core":"7.29.6","shell-quote":"1.8.4","picomatch@^2":"2.3.2","picomatch@^4":"4.0.4","tough-cookie":">=4.1.3","@xmldom/xmldom":"0.8.13","path-to-regexp":"8.4.2","follow-redirects":"1.16.0","@anthropic-ai/sdk":"0.91.1","@hono/node-server":"1.19.14","brace-expansion@^1":"1.1.13","brace-expansion@^5":"5.0.6","filelist>minimatch":">=10.2.1","serialize-javascript":"7.0.5","@isaacs/brace-expansion":">=5.0.1","app-builder-lib>minimatch":">=10.2.1","@modelcontextprotocol/sdk>ajv":">=8.18.0"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"],"ignoredBuiltDependencies":["electron-winstaller"]},"type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^20.19 || ^22.12 || >=24.0"},"gitHead":"2700d55b4bd5f7b30ebf09b4b82bacffd14e99aa","private":false,"scripts":{"dev":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run","build":"pnpm --filter @factory-factory/core build && node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && node scripts/fix-prisma-imports.mjs && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:env && pnpm check:ownership && pnpm deps:check && pnpm check:codex-schema","proxy":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts proxy --private","start":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:env":"node scripts/check-no-direct-process-env.mjs","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"pnpm --filter @factory-factory/core build && storybook dev -p 6006","typecheck":"pnpm --filter @factory-factory/core build && tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"pnpm --filter @factory-factory/core build && BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage && pnpm check:coverage:critical","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-single-writer.mjs && pnpm check:service-registry","test:e2e:mobile":"playwright test --config=playwright.mobile.config.ts","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","check:prisma-schema":"pnpm db:generate && pnpm check:service-registry && pnpm typecheck","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","test:coverage:backend":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend","check:prisma-generated":"node scripts/check-prisma-generated-drift.mjs","check:service-registry":"tsx scripts/check-service-registry.ts","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:coverage:backend:stable":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend --exclude src/backend/routers/health.router.test.ts --exclude src/backend/routers/websocket/websocket.integration.test.ts --exclude src/backend/services/session/service/acp/codex-cli-import-resolution.integration.test.ts --exclude src/backend/services/session/service/acp/acp-session-negotiation.integration.test.ts","test:codex-app-server:manual:prompt":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\""},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"!(prisma/generated/**/*)*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.20.1","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","next":"16.2.6","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","geist":"^1.7.0","react":"^19.2.4","dotenv":"^17.3.1","prisma":"7.7.0","qrcode":"^1.5.4","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.15.0","p-limit":"^7.3.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@linear/sdk":"^76.0.0","@trpc/client":"^11.10.0","@trpc/server":"^11.10.0","@xterm/xterm":"^6.0.0","react-router":"^7.15.0","@prisma/client":"7.7.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.5.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.2","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.2","@trpc/react-query":"^11.10.0","@hookform/resolvers":"^5.2.2","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.2.1","embla-carousel-react":"^8.6.0","@phosphor-icons/react":"^2.1.10","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.21","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.6.5","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.19","@agentclientprotocol/sdk":"0.15.0","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"7.7.0","@radix-ui/react-navigation-menu":"^1.2.14","@agentclientprotocol/claude-agent-acp":"^0.55.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.85.0","vite":"^7.3.5","husky":"^9.1.7","jsdom":"^29.0.2","prisma":"7.7.0","vitest":"^4.1.0","postcss":"^8.5.12","wait-on":"^9.0.10","electron":"^40.8.5","@types/ws":"^8.18.1","storybook":"10.3.6","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.3.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.2.1","@types/react":"^19.2.14","autoprefixer":"^10.4.27","concurrently":"^9.2.1","@types/qrcode":"^1.5.6","@biomejs/biome":"^2.4.4","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@playwright/test":"^1.58.2","@storybook/react":"10.3.6","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.8.1","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.2.1","dependency-cruiser":"^17.3.8","@vitest/coverage-v8":"^4.1.0","@vitejs/plugin-react":"^5.1.4","@storybook/addon-a11y":"10.3.6","@storybook/addon-docs":"10.3.6","@storybook/react-vite":"10.3.6","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.3.6","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.4.0_1784234683134_0.43065912173070453","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"factory-factory","version":"0.4.1","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.4.1","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"ee53affd03d4a0afb09c09e0f2f13ca01829c9df","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.4.1.tgz","fileCount":2604,"integrity":"sha512-qGUU8mPPLNorg/rUeEFNfAjngWF4zcSwPQb7eUcxnCbNCR0TzeBSdN+yVra2l9JC5W8LP8GCcbhXOA74oH0OPA==","signatures":[{"sig":"MEUCIQDDRLk8PcS/2mRyuBv8A4GSWUlMxFC3g8UaZPv+lTIXWQIgPi8NjYOgYdUpXelgLBS/VQzzUXvbMCOWyOOCdYGFJRE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19293620},"main":"dist/src/cli/index.js","pnpm":{"overrides":{"qs":"6.15.2","tar":"7.5.16","tmp":"0.2.7","hono":"4.12.25","next":"16.2.6","uuid":"14.0.0","yaml":"2.8.3","braces":">=3.0.3","lodash":"4.18.1","undici":"7.28.0","esbuild":"0.28.1","js-yaml":"4.2.0","postcss":"8.5.12","webpack":"5.106.2","fast-uri":"3.1.2","dompurify":"3.4.11","form-data":"4.0.6","lodash-es":"4.18.1","smol-toml":"1.6.1","ip-address":"10.1.1","micromatch":">=4.0.8","@babel/core":"7.29.6","shell-quote":"1.8.4","picomatch@^2":"2.3.2","picomatch@^4":"4.0.4","tough-cookie":">=4.1.3","@xmldom/xmldom":"0.8.13","path-to-regexp":"8.4.2","follow-redirects":"1.16.0","@anthropic-ai/sdk":"0.91.1","@hono/node-server":"1.19.14","brace-expansion@^1":"1.1.13","brace-expansion@^5":"5.0.6","filelist>minimatch":">=10.2.1","serialize-javascript":"7.0.5","@isaacs/brace-expansion":">=5.0.1","app-builder-lib>minimatch":">=10.2.1","@modelcontextprotocol/sdk>ajv":">=8.18.0"},"publicHoistPattern":["@types/*"],"onlyBuiltDependencies":["@prisma/engines","better-sqlite3","electron","esbuild","node-pty","prisma","protobufjs","sharp"],"ignoredBuiltDependencies":["electron-winstaller"]},"type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^20.19 || ^22.12 || >=24.0"},"gitHead":"c275ba86c25ec48f7a1df1867707bdd7baa2843e","private":false,"scripts":{"dev":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run","build":"pnpm --filter @factory-factory/core build && node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && node scripts/fix-prisma-imports.mjs && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:env && pnpm check:ownership && pnpm deps:check && pnpm check:codex-schema","proxy":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts proxy --private","start":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:env":"node scripts/check-no-direct-process-env.mjs","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"pnpm --filter @factory-factory/core build && storybook dev -p 6006","typecheck":"pnpm --filter @factory-factory/core build && tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"pnpm --filter @factory-factory/core build && BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage && pnpm check:coverage:critical","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-service-accessor-boundaries.mjs && node scripts/check-single-writer.mjs && pnpm check:service-registry","test:e2e:mobile":"playwright test --config=playwright.mobile.config.ts","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","check:prisma-schema":"pnpm db:generate && pnpm check:service-registry && pnpm typecheck","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","test:coverage:backend":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend","check:prisma-generated":"node scripts/check-prisma-generated-drift.mjs","check:service-registry":"tsx scripts/check-service-registry.ts","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:coverage:backend:stable":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend --exclude src/backend/routers/health.router.test.ts --exclude src/backend/routers/websocket/websocket.integration.test.ts --exclude src/backend/services/session/service/acp/codex-cli-import-resolution.integration.test.ts --exclude src/backend/services/session/service/acp/acp-session-negotiation.integration.test.ts","test:codex-app-server:manual:prompt":"pnpm --filter @factory-factory/core build && node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\""},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.8.2","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"!(prisma/generated/**/*)*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.20.1","zod":"^4.3.6","clsx":"^2.1.1","cmdk":"^1.1.1","next":"16.2.6","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","react":"^19.2.4","dotenv":"^17.3.1","prisma":"7.7.0","qrcode":"^1.5.4","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.15.0","p-limit":"^7.3.0","date-fns":"^4.1.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.4","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@linear/sdk":"^76.0.0","@trpc/client":"^11.10.0","@trpc/server":"^11.10.0","@xterm/xterm":"^6.0.0","react-router":"^7.15.0","@prisma/client":"7.7.0","better-sqlite3":"^12.6.2","react-markdown":"^10.1.0","tailwind-merge":"^3.5.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.71.2","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.13.2","@trpc/react-query":"^11.10.0","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.2.4","@radix-ui/react-tabs":"^1.1.13","@tailwindcss/postcss":"^4.2.1","embla-carousel-react":"^8.6.0","@phosphor-icons/react":"^2.1.10","@radix-ui/react-label":"^2.1.8","@tanstack/react-query":"^5.90.21","@radix-ui/react-avatar":"^1.1.11","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-select":"^2.2.6","@radix-ui/react-slider":"^1.3.6","@radix-ui/react-switch":"^1.2.6","@radix-ui/react-toggle":"^1.1.10","react-resizable-panels":"^4.6.5","@radix-ui/react-menubar":"^1.1.16","@radix-ui/react-popover":"^1.1.15","@radix-ui/react-tooltip":"^1.2.8","@tailwindcss/typography":"^0.5.19","@tanstack/react-virtual":"^3.13.19","@agentclientprotocol/sdk":"0.15.0","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-progress":"^1.1.8","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.0","@radix-ui/react-accordion":"^1.2.12","@radix-ui/react-separator":"^1.1.8","@radix-ui/react-hover-card":"^1.1.15","@radix-ui/react-collapsible":"^1.1.12","@radix-ui/react-radio-group":"^1.3.8","@radix-ui/react-scroll-area":"^1.2.10","@radix-ui/react-alert-dialog":"^1.1.15","@radix-ui/react-aspect-ratio":"^1.1.8","@radix-ui/react-context-menu":"^2.2.16","@radix-ui/react-toggle-group":"^1.1.11","@radix-ui/react-dropdown-menu":"^2.1.16","@prisma/adapter-better-sqlite3":"7.7.0","@radix-ui/react-navigation-menu":"^1.2.14","@agentclientprotocol/claude-agent-acp":"^0.55.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.21.0","knip":"^5.85.0","vite":"^7.3.5","husky":"^9.1.7","jsdom":"^29.0.2","prisma":"7.7.0","vitest":"^4.1.0","postcss":"^8.5.12","wait-on":"^9.0.10","electron":"^40.8.5","@types/ws":"^8.18.1","storybook":"10.3.6","supertest":"^7.2.2","tsc-alias":"^1.8.16","typescript":"^5.9.3","@types/node":"^25.3.0","lint-staged":"^16.2.7","next-themes":"^0.4.6","tailwindcss":"^4.2.1","@types/react":"^19.2.14","concurrently":"^9.2.1","@types/qrcode":"^1.5.6","@biomejs/biome":"^2.4.4","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@playwright/test":"^1.58.2","@storybook/react":"10.3.6","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.8.1","@electron/rebuild":"^4.0.3","@tailwindcss/vite":"^4.2.1","dependency-cruiser":"^17.3.8","@vitest/coverage-v8":"^4.1.0","@vitejs/plugin-react":"^5.1.4","@storybook/addon-a11y":"10.3.6","@storybook/addon-docs":"10.3.6","@storybook/react-vite":"10.3.6","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.3.6","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.4.1_1784332798452_0.21043665494851704","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"factory-factory","version":"0.4.2","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.4.2","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"0cf58495ddebc643bcdf4ce4f4e7364a1602b72f","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.4.2.tgz","fileCount":2689,"integrity":"sha512-A23Mkjat7pkCI1TR+WK2B8RsOcKDJdAzj+Fm8T+O1L4VlbknxAsCLModsRMDWJjhACKA7k5AFo66OiLQFsIsaQ==","signatures":[{"sig":"MEUCIQCIRkELoBfxgVuVGR1EYjOATC6I+22RmiXVmoHAKHAdSwIgMRGPijbD1R44IA+Zb1wf8itu6mqPYh8jlqDR72XQiAY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19941904},"main":"dist/src/cli/index.js","type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^22.22 || >=24.0"},"gitHead":"a928eac64e43dbbe64168d37dd80636586abcbb4","private":false,"scripts":{"dev":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"node scripts/ensure-native-modules.mjs node && vitest run","build":"node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && node scripts/fix-prisma-imports.mjs && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:env && pnpm check:ownership && pnpm deps:check && pnpm check:codex-schema","proxy":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts proxy --private","start":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:env":"node scripts/check-no-direct-process-env.mjs","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"node scripts/ensure-native-modules.mjs node && vitest run --coverage && pnpm check:coverage:critical","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-service-accessor-boundaries.mjs && node scripts/check-single-writer.mjs && pnpm check:service-registry","test:e2e:mobile":"playwright test --config=playwright.mobile.config.ts","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","check:prisma-schema":"pnpm db:generate && pnpm check:service-registry && pnpm typecheck","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","test:coverage:backend":"node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend","check:prisma-generated":"node scripts/check-prisma-generated-drift.mjs","check:service-registry":"tsx scripts/check-service-registry.ts","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:coverage:backend:stable":"node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend --exclude src/backend/routers/health.router.test.ts --exclude src/backend/routers/websocket/websocket.integration.test.ts --exclude src/backend/services/session/service/acp/codex-cli-import-resolution.integration.test.ts --exclude src/backend/services/session/service/acp/acp-session-negotiation.integration.test.ts","test:codex-app-server:manual:prompt":"node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\""},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.9.8","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"!(prisma/generated/**/*)*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"22.22.3","dependencies":{"ws":"^8.21.1","zod":"^4.4.3","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","react":"^19.2.8","dotenv":"^17.4.2","prisma":"7.9.0","qrcode":"^1.5.4","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.16.0","p-limit":"^7.3.1","date-fns":"^4.4.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.8","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@linear/sdk":"^76.0.0","@trpc/client":"^11.18.0","@trpc/server":"^11.18.0","@xterm/xterm":"^6.0.0","react-router":"^8.3.0","@prisma/client":"7.9.0","better-sqlite3":"^12.11.1","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.83.0","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.14.0","@trpc/react-query":"^11.18.0","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.3.3","@radix-ui/react-tabs":"^1.1.21","@tailwindcss/postcss":"^4.3.3","embla-carousel-react":"^8.6.0","@phosphor-icons/react":"^2.1.10","@radix-ui/react-label":"^2.1.15","@tanstack/react-query":"^5.101.4","@radix-ui/react-avatar":"^1.2.6","@radix-ui/react-dialog":"^1.1.23","@radix-ui/react-select":"^2.3.7","@radix-ui/react-slider":"^1.4.7","@radix-ui/react-switch":"^1.3.7","@radix-ui/react-toggle":"^1.1.18","react-resizable-panels":"^4.12.2","@radix-ui/react-menubar":"^1.1.24","@radix-ui/react-popover":"^1.1.23","@radix-ui/react-tooltip":"^1.2.16","@tailwindcss/typography":"^0.5.20","@tanstack/react-virtual":"^3.14.8","@agentclientprotocol/sdk":"0.15.0","@radix-ui/react-checkbox":"^1.3.11","@radix-ui/react-progress":"^1.1.16","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.1","@radix-ui/react-accordion":"^1.2.20","@radix-ui/react-separator":"^1.1.15","@radix-ui/react-hover-card":"^1.1.23","@radix-ui/react-collapsible":"^1.1.20","@radix-ui/react-radio-group":"^1.4.7","@radix-ui/react-scroll-area":"^1.2.18","@radix-ui/react-alert-dialog":"^1.1.23","@radix-ui/react-aspect-ratio":"^1.1.15","@radix-ui/react-context-menu":"^2.3.7","@radix-ui/react-toggle-group":"^1.1.19","@radix-ui/react-dropdown-menu":"^2.1.24","@prisma/adapter-better-sqlite3":"7.9.0","@radix-ui/react-navigation-menu":"^1.2.22","@agentclientprotocol/claude-agent-acp":"^0.55.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.23.1","knip":"^5.88.1","vite":"^7.3.6","husky":"^9.1.7","jsdom":"^29.1.1","vitest":"^4.1.10","postcss":"8.5.23","wait-on":"^9.1.0","electron":"^40.10.6","@types/ws":"^8.18.1","storybook":"10.3.6","supertest":"^7.2.2","tsc-alias":"^1.9.1","typescript":"^5.9.3","@types/node":"^25.9.5","lint-staged":"^16.4.0","next-themes":"^0.4.6","tailwindcss":"^4.3.3","@types/react":"^19.2.17","concurrently":"^9.2.4","@types/qrcode":"^1.5.6","@biomejs/biome":"2.4.4","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@playwright/test":"^1.62.0","@storybook/react":"10.3.6","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.15.3","@electron/rebuild":"^4.2.0","@tailwindcss/vite":"^4.3.3","dependency-cruiser":"^17.4.3","@vitest/coverage-v8":"^4.1.10","@vitejs/plugin-react":"^5.2.0","@storybook/addon-a11y":"10.3.6","@storybook/addon-docs":"10.3.6","@storybook/react-vite":"10.3.6","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.3.6","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.4.2_1785180110790_0.15524992142493876","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"factory-factory","version":"0.4.3","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.4.3","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"e7fc3d7dc63ae20416b84631e53192b656b69be8","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.4.3.tgz","fileCount":2705,"integrity":"sha512-BFZTuJi+0lBSzmq00mBXyO8IEIRF69zIddojEOijubexrVZ1MWvI9ymEIeLBEqKkrwCWJCa6lBqca4pcJwHi/Q==","signatures":[{"sig":"MEQCIEQGCG4ZXFqWQZJy4KuM+v40QGrQHuOFE36ATLP3lA/8AiBo4LJ4vQBGWNMvQTqdGPxBrEEvpuFI9kZ2NoX+bnXvTA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.4.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":20128015},"main":"dist/src/cli/index.js","type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^22.22 || >=24.0"},"gitHead":"1f35e98ac32ee282054e3520c61a2a56022f23d0","private":false,"scripts":{"dev":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"node scripts/ensure-native-modules.mjs node && vitest run","build":"node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && node scripts/fix-prisma-imports.mjs && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:env && pnpm check:ownership && pnpm check:fk-indexes && pnpm deps:check && pnpm check:codex-schema","proxy":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts proxy --private","start":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:env":"node scripts/check-no-direct-process-env.mjs","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"node scripts/ensure-native-modules.mjs node && vitest run --coverage && pnpm check:coverage:critical","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-service-accessor-boundaries.mjs && node scripts/check-single-writer.mjs && pnpm check:service-registry","test:e2e:mobile":"playwright test --config=playwright.mobile.config.ts","check:fk-indexes":"tsx scripts/check-fk-indexes.ts","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","check:prisma-schema":"pnpm db:generate && pnpm check:service-registry && pnpm typecheck","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","test:coverage:backend":"node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend","check:prisma-generated":"node scripts/check-prisma-generated-drift.mjs","check:service-registry":"tsx scripts/check-service-registry.ts","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:coverage:backend:stable":"node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend --exclude src/backend/routers/health.router.test.ts --exclude src/backend/routers/websocket/websocket.integration.test.ts --exclude src/backend/services/session/service/acp/codex-cli-import-resolution.integration.test.ts --exclude src/backend/services/session/service/acp/acp-session-negotiation.integration.test.ts","test:codex-app-server:manual:prompt":"node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\""},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.9.8","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"!(prisma/generated/**/*)*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"22.22.3","dependencies":{"ws":"^8.21.1","zod":"^4.4.3","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","react":"^19.2.8","dotenv":"^17.4.2","prisma":"7.9.0","qrcode":"^1.5.4","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.16.0","p-limit":"^7.3.1","date-fns":"^4.4.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.8","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@linear/sdk":"^76.0.0","@trpc/client":"^11.18.0","@trpc/server":"^11.18.0","@xterm/xterm":"^6.0.0","react-router":"^8.3.0","@prisma/client":"7.9.0","better-sqlite3":"^12.11.1","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.83.0","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.14.0","@trpc/react-query":"^11.18.0","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.3.3","@radix-ui/react-tabs":"^1.1.21","@tailwindcss/postcss":"^4.3.3","embla-carousel-react":"^8.6.0","@phosphor-icons/react":"^2.1.10","@radix-ui/react-label":"^2.1.15","@tanstack/react-query":"^5.101.4","@radix-ui/react-avatar":"^1.2.6","@radix-ui/react-dialog":"^1.1.23","@radix-ui/react-select":"^2.3.7","@radix-ui/react-slider":"^1.4.7","@radix-ui/react-switch":"^1.3.7","@radix-ui/react-toggle":"^1.1.18","react-resizable-panels":"^4.12.2","@radix-ui/react-menubar":"^1.1.24","@radix-ui/react-popover":"^1.1.23","@radix-ui/react-tooltip":"^1.2.16","@tailwindcss/typography":"^0.5.20","@tanstack/react-virtual":"^3.14.8","@agentclientprotocol/sdk":"0.15.0","@radix-ui/react-checkbox":"^1.3.11","@radix-ui/react-progress":"^1.1.16","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.1","@radix-ui/react-accordion":"^1.2.20","@radix-ui/react-separator":"^1.1.15","@radix-ui/react-hover-card":"^1.1.23","@radix-ui/react-collapsible":"^1.1.20","@radix-ui/react-radio-group":"^1.4.7","@radix-ui/react-scroll-area":"^1.2.18","@radix-ui/react-alert-dialog":"^1.1.23","@radix-ui/react-aspect-ratio":"^1.1.15","@radix-ui/react-context-menu":"^2.3.7","@radix-ui/react-toggle-group":"^1.1.19","@radix-ui/react-dropdown-menu":"^2.1.24","@prisma/adapter-better-sqlite3":"7.9.0","@radix-ui/react-navigation-menu":"^1.2.22","@agentclientprotocol/claude-agent-acp":"^0.55.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.23.1","knip":"^5.88.1","vite":"^7.3.6","husky":"^9.1.7","jsdom":"^29.1.1","vitest":"^4.1.10","postcss":"8.5.23","wait-on":"^9.1.0","electron":"^40.10.6","@types/ws":"^8.18.1","storybook":"10.3.6","supertest":"^7.2.2","tsc-alias":"^1.9.1","typescript":"^5.9.3","@types/node":"^25.9.5","lint-staged":"^16.4.0","next-themes":"^0.4.6","tailwindcss":"^4.3.3","@types/react":"^19.2.17","concurrently":"^9.2.4","@types/qrcode":"^1.5.6","@biomejs/biome":"2.4.4","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@playwright/test":"^1.62.0","@storybook/react":"10.3.6","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.15.3","@electron/rebuild":"^4.2.0","@tailwindcss/vite":"^4.3.3","dependency-cruiser":"^17.4.3","@vitest/coverage-v8":"^4.1.10","@vitejs/plugin-react":"^5.2.0","@storybook/addon-a11y":"10.3.6","@storybook/addon-docs":"10.3.6","@storybook/react-vite":"10.3.6","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.3.6","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.4.3_1785333478816_0.9693397263120906","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"factory-factory","version":"0.4.4","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.4.4","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"e54a67060130bb95c65ac283795c53a4769db62c","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.4.4.tgz","fileCount":2705,"integrity":"sha512-hGxrTjROlfs2uNTpS0rab6YG09oMCX+NFcZXkRLEl1sQ9qeDoH6rTPWTPwqEY3nm66ufJvztcNKX9Gbc+zAfgg==","signatures":[{"sig":"MEUCIBXu8y2UBbRjKnjGYAaD97XQ7SXaiCu05ZM6CEYsm5/UAiEAqxQnDx/EechfZ8bIU4BrLFNIRPTvrn8Fv42mmntHsyQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.4.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":20176458},"main":"dist/src/cli/index.js","type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^22.22 || >=24.0"},"gitHead":"f0d89c1c40ad8dfed6294a30e8aac80f17f2954a","private":false,"scripts":{"dev":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"node scripts/ensure-native-modules.mjs node && vitest run","build":"node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && node scripts/fix-prisma-imports.mjs && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:env && pnpm check:ownership && pnpm check:fk-indexes && pnpm deps:check && pnpm check:codex-schema","proxy":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts proxy --private","start":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:env":"node scripts/check-no-direct-process-env.mjs","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"node scripts/ensure-native-modules.mjs node && vitest run --coverage && pnpm check:coverage:critical","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-service-accessor-boundaries.mjs && node scripts/check-single-writer.mjs && pnpm check:service-registry","test:e2e:mobile":"playwright test --config=playwright.mobile.config.ts","check:fk-indexes":"tsx scripts/check-fk-indexes.ts","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","check:prisma-schema":"pnpm db:generate && pnpm check:service-registry && pnpm typecheck","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","test:coverage:backend":"node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend","check:prisma-generated":"node scripts/check-prisma-generated-drift.mjs","check:service-registry":"tsx scripts/check-service-registry.ts","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:coverage:backend:stable":"node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend --exclude src/backend/routers/health.router.test.ts --exclude src/backend/routers/websocket/websocket.integration.test.ts --exclude src/backend/services/session/service/acp/codex-cli-import-resolution.integration.test.ts --exclude src/backend/services/session/service/acp/acp-session-negotiation.integration.test.ts","test:codex-app-server:manual:prompt":"node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\""},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.9.8","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"!(prisma/generated/**/*)*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"22.22.3","dependencies":{"ws":"^8.21.1","zod":"^4.4.3","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","react":"^19.2.8","dotenv":"^17.4.2","prisma":"7.9.0","qrcode":"^1.5.4","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.16.0","p-limit":"^7.3.1","date-fns":"^4.4.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.8","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@linear/sdk":"^76.0.0","@trpc/client":"^11.18.0","@trpc/server":"^11.18.0","@xterm/xterm":"^6.0.0","react-router":"^8.3.0","@prisma/client":"7.9.0","better-sqlite3":"^12.11.1","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.83.0","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.14.0","@trpc/react-query":"^11.18.0","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.3.3","@radix-ui/react-tabs":"^1.1.21","@tailwindcss/postcss":"^4.3.3","embla-carousel-react":"^8.6.0","@phosphor-icons/react":"^2.1.10","@radix-ui/react-label":"^2.1.15","@tanstack/react-query":"^5.101.4","@radix-ui/react-avatar":"^1.2.6","@radix-ui/react-dialog":"^1.1.23","@radix-ui/react-select":"^2.3.7","@radix-ui/react-slider":"^1.4.7","@radix-ui/react-switch":"^1.3.7","@radix-ui/react-toggle":"^1.1.18","react-resizable-panels":"^4.12.2","@radix-ui/react-menubar":"^1.1.24","@radix-ui/react-popover":"^1.1.23","@radix-ui/react-tooltip":"^1.2.16","@tailwindcss/typography":"^0.5.20","@tanstack/react-virtual":"^3.14.8","@agentclientprotocol/sdk":"0.15.0","@radix-ui/react-checkbox":"^1.3.11","@radix-ui/react-progress":"^1.1.16","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.1","@radix-ui/react-accordion":"^1.2.20","@radix-ui/react-separator":"^1.1.15","@radix-ui/react-hover-card":"^1.1.23","@radix-ui/react-collapsible":"^1.1.20","@radix-ui/react-radio-group":"^1.4.7","@radix-ui/react-scroll-area":"^1.2.18","@radix-ui/react-alert-dialog":"^1.1.23","@radix-ui/react-aspect-ratio":"^1.1.15","@radix-ui/react-context-menu":"^2.3.7","@radix-ui/react-toggle-group":"^1.1.19","@radix-ui/react-dropdown-menu":"^2.1.24","@prisma/adapter-better-sqlite3":"7.9.0","@radix-ui/react-navigation-menu":"^1.2.22","@agentclientprotocol/claude-agent-acp":"^0.55.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.23.1","knip":"^5.88.1","vite":"^7.3.6","husky":"^9.1.7","jsdom":"^29.1.1","vitest":"^4.1.10","postcss":"8.5.23","wait-on":"^9.1.0","electron":"^40.10.6","@types/ws":"^8.18.1","storybook":"10.3.6","supertest":"^7.2.2","tsc-alias":"^1.9.1","typescript":"^5.9.3","@types/node":"^25.9.5","lint-staged":"^16.4.0","next-themes":"^0.4.6","tailwindcss":"^4.3.3","@types/react":"^19.2.17","concurrently":"^9.2.4","@types/qrcode":"^1.5.6","@biomejs/biome":"2.4.4","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@playwright/test":"^1.62.0","@storybook/react":"10.3.6","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.15.3","@electron/rebuild":"^4.2.0","@tailwindcss/vite":"^4.3.3","dependency-cruiser":"^17.4.3","@vitest/coverage-v8":"^4.1.10","@vitejs/plugin-react":"^5.2.0","@storybook/addon-a11y":"10.3.6","@storybook/addon-docs":"10.3.6","@storybook/react-vite":"10.3.6","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.3.6","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.4.4_1785371901682_0.8725731091028845","host":"s3://npm-registry-packages-npm-production"}},"0.4.5":{"name":"factory-factory","version":"0.4.5","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.4.5","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"ed2858717fe5fa55a0f26de4a08d946074a7dc38","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.4.5.tgz","fileCount":2742,"integrity":"sha512-lEQmzUBWlE2YnSw6eiPVLI7Tr9usJAdt8XUmtCSKtKZQSYXOt2Og5yyCfKghD/kf5C/A77AXb+SmGby8KYxMeg==","signatures":[{"sig":"MEUCICD1mhFsVnn6EbOafYfBImW57O4gAxta0SXMGxESp3zcAiEA0Xc4GX6IUsnWWh9rlrdR7qE/NTWxE6Ny9kJue+Xo30s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.4.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":20564714},"main":"dist/src/cli/index.js","type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^22.22 || >=24.0"},"gitHead":"b1b1624a0358a1195874c203888873dec4f5490e","private":false,"scripts":{"dev":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"node scripts/ensure-native-modules.mjs node && vitest run","build":"node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && node scripts/fix-prisma-imports.mjs && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:env && pnpm check:ownership && pnpm check:fk-indexes && pnpm deps:check && pnpm check:codex-schema","proxy":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts proxy --private","start":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:env":"node scripts/check-no-direct-process-env.mjs","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"node scripts/ensure-native-modules.mjs node && vitest run --coverage && pnpm check:coverage:critical","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-service-accessor-boundaries.mjs && node scripts/check-single-writer.mjs && pnpm check:service-registry","test:e2e:mobile":"playwright test --config=playwright.mobile.config.ts","check:fk-indexes":"tsx scripts/check-fk-indexes.ts","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","check:prisma-schema":"pnpm db:generate && pnpm check:service-registry && pnpm typecheck","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","test:coverage:backend":"node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend","check:prisma-generated":"node scripts/check-prisma-generated-drift.mjs","check:service-registry":"tsx scripts/check-service-registry.ts","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:coverage:backend:stable":"node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend --exclude src/backend/routers/health.router.test.ts --exclude src/backend/routers/websocket/websocket.integration.test.ts --exclude src/backend/services/session/service/acp/codex-cli-import-resolution.integration.test.ts --exclude src/backend/services/session/service/acp/acp-session-negotiation.integration.test.ts","test:codex-app-server:manual:prompt":"node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\""},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.9.8","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"!(prisma/generated/**/*)*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"22.22.3","dependencies":{"ws":"^8.21.1","zod":"^4.4.3","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","react":"^19.2.8","dotenv":"^17.4.2","prisma":"7.9.0","qrcode":"^1.5.4","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.16.0","p-limit":"^7.3.1","date-fns":"^4.4.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.8","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@linear/sdk":"^76.0.0","@trpc/client":"^11.18.0","@trpc/server":"^11.18.0","@xterm/xterm":"^6.0.0","react-router":"^8.3.0","@prisma/client":"7.9.0","better-sqlite3":"^12.11.1","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.83.0","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.14.0","@trpc/react-query":"^11.18.0","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.3.3","@radix-ui/react-tabs":"^1.1.21","@tailwindcss/postcss":"^4.3.3","embla-carousel-react":"^8.6.0","@phosphor-icons/react":"^2.1.10","@radix-ui/react-label":"^2.1.15","@tanstack/react-query":"^5.101.4","@radix-ui/react-avatar":"^1.2.6","@radix-ui/react-dialog":"^1.1.23","@radix-ui/react-select":"^2.3.7","@radix-ui/react-slider":"^1.4.7","@radix-ui/react-switch":"^1.3.7","@radix-ui/react-toggle":"^1.1.18","react-resizable-panels":"^4.12.2","@radix-ui/react-menubar":"^1.1.24","@radix-ui/react-popover":"^1.1.23","@radix-ui/react-tooltip":"^1.2.16","@tailwindcss/typography":"^0.5.20","@tanstack/react-virtual":"^3.14.8","@agentclientprotocol/sdk":"0.15.0","@radix-ui/react-checkbox":"^1.3.11","@radix-ui/react-progress":"^1.1.16","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.1","@radix-ui/react-accordion":"^1.2.20","@radix-ui/react-separator":"^1.1.15","@radix-ui/react-hover-card":"^1.1.23","@radix-ui/react-collapsible":"^1.1.20","@radix-ui/react-radio-group":"^1.4.7","@radix-ui/react-scroll-area":"^1.2.18","@radix-ui/react-alert-dialog":"^1.1.23","@radix-ui/react-aspect-ratio":"^1.1.15","@radix-ui/react-context-menu":"^2.3.7","@radix-ui/react-toggle-group":"^1.1.19","@radix-ui/react-dropdown-menu":"^2.1.24","@prisma/adapter-better-sqlite3":"7.9.0","@radix-ui/react-navigation-menu":"^1.2.22","@agentclientprotocol/claude-agent-acp":"^0.55.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.23.1","knip":"^5.88.1","vite":"^7.3.6","husky":"^9.1.7","jsdom":"^29.1.1","vitest":"^4.1.10","postcss":"8.5.23","wait-on":"^9.1.0","electron":"^40.10.6","@types/ws":"^8.18.1","storybook":"10.3.6","supertest":"^7.2.2","tsc-alias":"^1.9.1","typescript":"^5.9.3","@types/node":"^25.9.5","lint-staged":"^16.4.0","next-themes":"^0.4.6","tailwindcss":"^4.3.3","@types/react":"^19.2.17","concurrently":"^9.2.4","@types/qrcode":"^1.5.6","@biomejs/biome":"2.4.4","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@playwright/test":"^1.62.0","@storybook/react":"10.3.6","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.15.3","@electron/rebuild":"^4.2.0","@tailwindcss/vite":"^4.3.3","dependency-cruiser":"^17.4.3","@vitest/coverage-v8":"^4.1.10","@vitejs/plugin-react":"^5.2.0","@storybook/addon-a11y":"10.3.6","@storybook/addon-docs":"10.3.6","@storybook/react-vite":"10.3.6","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.3.6","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.4.5_1785457254064_0.21933915524298375","host":"s3://npm-registry-packages-npm-production"}},"0.4.6":{"name":"factory-factory","version":"0.4.6","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.4.6","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"7d8df48cb741bda80a934d7163b57dc96f784aa4","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.4.6.tgz","fileCount":2847,"integrity":"sha512-H+NljZ6v+FwpuocemVHP4njWWBTsm1CZD6hwcwvwnaY/6rFv7JOrGaLLUvWEkEVywRe15CB5vyh13Y3D0Va9Wg==","signatures":[{"sig":"MEYCIQCIweV/Auf2KTqEOzs3Fh/3ub3zQz9MfVE8JUUzL86+lQIhAM+/xEgM8zXA7IODKDAovBTp/w3ZHBbTaMfDpw23L775","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.4.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":21448159},"main":"dist/src/cli/index.js","type":"module","types":"./dist/src/cli/index.d.ts","engines":{"node":"^22.22 || >=24.0"},"gitHead":"0e0150fffd413e02d0130dcba3f5334d09a7b716","private":false,"scripts":{"dev":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"node scripts/ensure-native-modules.mjs node && vitest run","build":"node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && node scripts/fix-prisma-imports.mjs && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:env && pnpm check:ownership && pnpm check:fk-indexes && pnpm deps:check && pnpm check:codex-schema","proxy":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts proxy --private","start":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:env":"node scripts/check-no-direct-process-env.mjs","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"node scripts/ensure-native-modules.mjs node && vitest run --coverage && pnpm check:coverage:critical","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-service-accessor-boundaries.mjs && node scripts/check-single-writer.mjs && pnpm check:service-registry","test:e2e:mobile":"playwright test --config=playwright.mobile.config.ts","check:fk-indexes":"tsx scripts/check-fk-indexes.ts","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","check:prisma-schema":"pnpm db:generate && pnpm check:service-registry && pnpm typecheck","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","test:coverage:backend":"node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend","check:prisma-generated":"node scripts/check-prisma-generated-drift.mjs","check:service-registry":"tsx scripts/check-service-registry.ts","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:coverage:backend:stable":"node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend --exclude src/backend/routers/health.router.test.ts --exclude src/backend/routers/websocket/websocket.integration.test.ts --exclude src/backend/services/session/service/acp/codex-cli-import-resolution.integration.test.ts --exclude src/backend/services/session/service/acp/acp-session-negotiation.integration.test.ts","test:codex-app-server:manual:prompt":"node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run src/backend/services/session/service/acp/codex-app-server-adapter/codex-app-server-acp-adapter.manual.integration.test.ts"},"_npmUser":{"name":"martin-purplefish","email":"martin@purplefish.com"},"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"10.9.8","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"!(prisma/generated/**/*)*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"22.22.3","dependencies":{"ws":"^8.21.1","zod":"^4.4.3","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","react":"^19.2.8","dotenv":"^17.4.2","prisma":"7.9.0","qrcode":"^1.5.4","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.16.1","p-limit":"^7.3.1","date-fns":"^4.4.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.8","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@linear/sdk":"^76.0.0","@trpc/client":"^11.18.0","@trpc/server":"^11.18.0","@xterm/xterm":"^6.0.0","react-router":"^8.3.0","@prisma/client":"7.9.0","better-sqlite3":"^12.11.1","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.83.0","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.14.0","@trpc/react-query":"^11.18.0","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.3.3","@radix-ui/react-tabs":"^1.1.21","@tailwindcss/postcss":"^4.3.3","embla-carousel-react":"^8.6.0","@phosphor-icons/react":"^2.1.10","@radix-ui/react-label":"^2.1.15","@tanstack/react-query":"^5.101.4","@radix-ui/react-avatar":"^1.2.6","@radix-ui/react-dialog":"^1.1.23","@radix-ui/react-select":"^2.3.7","@radix-ui/react-slider":"^1.4.7","@radix-ui/react-switch":"^1.3.7","@radix-ui/react-toggle":"^1.1.18","react-resizable-panels":"^4.12.2","@radix-ui/react-menubar":"^1.1.24","@radix-ui/react-popover":"^1.1.23","@radix-ui/react-tooltip":"^1.2.16","@tailwindcss/typography":"^0.5.20","@tanstack/react-virtual":"^3.14.8","@agentclientprotocol/sdk":"0.15.0","@radix-ui/react-checkbox":"^1.3.11","@radix-ui/react-progress":"^1.1.16","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.1","@radix-ui/react-accordion":"^1.2.20","@radix-ui/react-separator":"^1.1.15","@radix-ui/react-hover-card":"^1.1.23","@radix-ui/react-collapsible":"^1.1.20","@radix-ui/react-radio-group":"^1.4.7","@radix-ui/react-scroll-area":"^1.2.18","@radix-ui/react-alert-dialog":"^1.1.23","@radix-ui/react-aspect-ratio":"^1.1.15","@radix-ui/react-context-menu":"^2.3.7","@radix-ui/react-toggle-group":"^1.1.19","@radix-ui/react-dropdown-menu":"^2.1.24","@prisma/adapter-better-sqlite3":"7.9.0","@radix-ui/react-navigation-menu":"^1.2.22","@agentclientprotocol/claude-agent-acp":"^0.66.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.23.1","knip":"^5.88.1","vite":"^7.3.6","husky":"^9.1.7","jsdom":"^29.1.1","vitest":"^4.1.10","postcss":"8.5.26","wait-on":"^9.1.0","electron":"^41.10.3","@types/ws":"^8.18.1","storybook":"10.3.6","supertest":"^7.2.2","tsc-alias":"^1.9.1","typescript":"^5.9.3","@types/node":"^25.9.5","lint-staged":"^16.4.0","next-themes":"^0.4.6","tailwindcss":"^4.3.3","@types/react":"^19.2.17","concurrently":"^9.2.4","@types/qrcode":"^1.5.6","@biomejs/biome":"2.4.4","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@playwright/test":"^1.62.0","@storybook/react":"10.3.6","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.15.3","@electron/rebuild":"^4.2.0","@tailwindcss/vite":"^4.3.3","dependency-cruiser":"^17.4.3","@vitest/coverage-v8":"^4.1.10","@vitejs/plugin-react":"^5.2.0","@storybook/addon-a11y":"10.3.6","@storybook/addon-docs":"10.3.6","@storybook/react-vite":"10.3.6","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.3.6","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.4.6_1786445250146_0.4698706026700057","host":"s3://npm-registry-packages-npm-production"}},"0.4.7":{"name":"factory-factory","version":"0.4.7","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.4.7","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"d493193f3177eb8dc12002aa0cd80f9fee4f545b","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.4.7.tgz","fileCount":3051,"integrity":"sha512-chfL4fBFKg0CmfuM0TkOvPxqE8qTFoFuFOfKFblL7lgK3GnPasir4P8u5fbDfU8FR+ATEjCtcTiD9+oG7R2NvA==","signatures":[{"sig":"MEUCIQDguLw4baWSIqyhbf5tXwcIXPEnXAKdMwoXuJQoEK0e3wIgIQtBVV9fIk6UFYY5m5r7l3APMJxFRRlbAnTDj15H5dQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.4.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":22085045},"main":"dist/src/cli/index.js","type":"module","_from":"file:npm-package/factory-factory-0.4.7.tgz","types":"./dist/src/cli/index.d.ts","engines":{"node":"^22.22 || >=24.0"},"private":false,"scripts":{"dev":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"node scripts/ensure-native-modules.mjs node && vitest run","build":"node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && node scripts/fix-prisma-imports.mjs && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:file-length && pnpm check:env && pnpm check:ownership && pnpm check:fk-indexes && pnpm deps:check && pnpm check:codex-schema","proxy":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts proxy --private","start":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:env":"node scripts/check-no-direct-process-env.mjs","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"node scripts/ensure-native-modules.mjs node && vitest run --coverage && pnpm check:coverage:critical","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-service-accessor-boundaries.mjs && node scripts/check-single-writer.mjs && pnpm check:service-registry","test:e2e:mobile":"playwright test --config=playwright.mobile.config.ts","check:fk-indexes":"tsx scripts/check-fk-indexes.ts","rebuild:electron":"electron-rebuild -f -m . -o better-sqlite3,node-pty","test:integration":"node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:file-length":"tsx scripts/check-file-length.ts","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","check:prisma-schema":"pnpm db:generate && pnpm check:service-registry && pnpm typecheck","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","test:coverage:backend":"node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend","check:prisma-generated":"node scripts/check-prisma-generated-drift.mjs","check:service-registry":"tsx scripts/check-service-registry.ts","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:file-length:update":"tsx scripts/check-file-length.ts --update","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:coverage:backend:stable":"node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend --exclude src/backend/routers/health.router.test.ts --exclude src/backend/routers/websocket/websocket.integration.test.ts --exclude src/backend/services/session/service/acp/codex-cli-import-resolution.integration.test.ts --exclude src/backend/services/session/service/acp/acp-session-negotiation.integration.test.ts","test:codex-app-server:manual:prompt":"node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run src/backend/services/session/service/acp/codex-app-server-adapter/codex-app-server-acp-adapter.manual.integration.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","approver":{"name":"martin-purplefish","email":"martin@purplefish.com"},"trustedPublisher":{"id":"github","oidcConfigId":"oidc:365611a1-9034-4895-9a30-be61cb70d16b"}},"_resolved":"/home/runner/work/factory-factory/factory-factory/npm-package/factory-factory-0.4.7.tgz","_integrity":"sha512-chfL4fBFKg0CmfuM0TkOvPxqE8qTFoFuFOfKFblL7lgK3GnPasir4P8u5fbDfU8FR+ATEjCtcTiD9+oG7R2NvA==","repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"11.19.0","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"!(prisma/generated/**/*)*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"22.22.3","dependencies":{"ws":"^8.21.1","zod":"^4.4.3","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.0","vaul":"^1.1.2","chalk":"^5.6.2","react":"^19.2.8","dotenv":"^17.4.2","prisma":"7.9.0","qrcode":"^1.5.4","sonner":"^2.0.7","express":"^5.2.1","mermaid":"^11.16.1","p-limit":"^7.3.1","date-fns":"^4.4.0","node-pty":"^1.1.0","pidusage":"^4.0.1","recharts":"3.7.0","commander":"^14.0.3","input-otp":"^1.4.2","react-dom":"^19.2.8","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@linear/sdk":"^76.0.0","@trpc/client":"^11.18.0","@trpc/server":"^11.18.0","@xterm/xterm":"^6.0.0","react-router":"^8.3.0","@prisma/client":"7.9.0","better-sqlite3":"^12.11.1","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","tw-animate-css":"^1.4.0","react-hook-form":"^7.83.0","rehype-sanitize":"^6.0.0","@xterm/addon-fit":"^0.11.0","react-day-picker":"^9.14.0","@trpc/react-query":"^11.18.0","tailwindcss-animate":"^1.0.7","@radix-ui/react-slot":"^1.3.3","@radix-ui/react-tabs":"^1.1.21","@tailwindcss/postcss":"^4.3.3","embla-carousel-react":"^8.6.0","@phosphor-icons/react":"^2.1.10","@radix-ui/react-label":"^2.1.15","@tanstack/react-query":"^5.101.4","@radix-ui/react-avatar":"^1.2.6","@radix-ui/react-dialog":"^1.1.23","@radix-ui/react-select":"^2.3.7","@radix-ui/react-slider":"^1.4.7","@radix-ui/react-switch":"^1.3.7","@radix-ui/react-toggle":"^1.1.18","react-resizable-panels":"^4.12.2","@radix-ui/react-menubar":"^1.1.24","@radix-ui/react-popover":"^1.1.23","@radix-ui/react-tooltip":"^1.2.16","@tailwindcss/typography":"^0.5.20","@tanstack/react-virtual":"^3.14.8","@agentclientprotocol/sdk":"0.15.0","@radix-ui/react-checkbox":"^1.3.11","@radix-ui/react-progress":"^1.1.16","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.1","@radix-ui/react-accordion":"^1.2.20","@radix-ui/react-separator":"^1.1.15","@radix-ui/react-hover-card":"^1.1.23","@radix-ui/react-collapsible":"^1.1.20","@radix-ui/react-radio-group":"^1.4.7","@radix-ui/react-scroll-area":"^1.2.18","@radix-ui/react-alert-dialog":"^1.1.23","@radix-ui/react-aspect-ratio":"^1.1.15","@radix-ui/react-context-menu":"^2.3.7","@radix-ui/react-toggle-group":"^1.1.19","@radix-ui/react-dropdown-menu":"^2.1.24","@prisma/adapter-better-sqlite3":"7.9.0","@radix-ui/react-navigation-menu":"^1.2.22","@agentclientprotocol/claude-agent-acp":"^0.66.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.28.1","devDependencies":{"tsx":"^4.23.1","knip":"^5.88.1","vite":"^7.3.6","yaml":"2.8.3","husky":"^9.1.7","jsdom":"^29.1.1","vitest":"^4.1.10","postcss":"8.5.26","wait-on":"^9.1.0","electron":"^41.10.3","@types/ws":"^8.18.1","storybook":"10.3.6","supertest":"^7.2.2","tsc-alias":"^1.9.1","typescript":"^5.9.3","@types/node":"^25.9.5","lint-staged":"^16.4.0","next-themes":"^0.4.6","tailwindcss":"^4.3.3","@types/react":"^19.2.17","concurrently":"^9.2.4","@types/qrcode":"^1.5.6","@biomejs/biome":"2.4.4","@types/express":"^5.0.6","@types/pidusage":"^2.0.5","@playwright/test":"^1.62.0","@storybook/react":"10.3.6","@types/react-dom":"^19.2.3","@types/supertest":"^6.0.3","electron-builder":"^26.15.3","@electron/rebuild":"^4.2.0","@tailwindcss/vite":"^4.3.3","dependency-cruiser":"^17.4.3","@vitest/coverage-v8":"^4.1.10","@vitejs/plugin-react":"^5.2.0","@storybook/addon-a11y":"10.3.6","@storybook/addon-docs":"10.3.6","@storybook/react-vite":"10.3.6","@types/better-sqlite3":"^7.6.13","@storybook/addon-themes":"10.3.6","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.4.7_1788895807779_0.10811831933215665","host":"s3://npm-registry-packages-npm-production"}},"0.4.8":{"name":"factory-factory","version":"0.4.8","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"author":{"name":"Purplefish"},"license":"MIT","_id":"factory-factory@0.4.8","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"homepage":"https://factoryfactory.ai","bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"dist":{"shasum":"d9d52339834f5c9262eaa0c7590a96c958ebcd08","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.4.8.tgz","fileCount":3217,"integrity":"sha512-nYPnUlVqB9V5JruS3hZ5ho64Bz+jc4txel6wm5uYjPHwguca9HuZS2Fd34p9ttH9Hfgge4g0AithbPNn/9MqvQ==","signatures":[{"sig":"MEQCIDwZVPl7Q1x+y1rbsFbw6WlGMBnmwYtnDtCSPE6LuRwtAiADXOk7Y4Q+fGcn29L2wsmkJSxOTDww0JuoFywImkdX5g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.4.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":22766993},"main":"dist/src/cli/index.js","type":"module","_from":"file:npm-package/factory-factory-0.4.8.tgz","types":"./dist/src/cli/index.d.ts","engines":{"node":">=26.8.1"},"private":false,"scripts":{"dev":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"node scripts/ensure-native-modules.mjs node && vitest run","build":"node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && node scripts/fix-prisma-imports.mjs && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:file-length && pnpm check:env && pnpm check:ownership && pnpm check:fk-indexes && pnpm deps:check && pnpm check:codex-schema","proxy":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts proxy --private","start":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:env":"node scripts/check-no-direct-process-env.mjs","check:fix":"biome check --write .","db:studio":"prisma studio","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"node scripts/ensure-native-modules.mjs node && vitest run --coverage && pnpm check:coverage:critical","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-service-accessor-boundaries.mjs && node scripts/check-single-writer.mjs && pnpm check:service-registry","test:e2e:mobile":"playwright test --config=playwright.mobile.config.ts","check:fk-indexes":"tsx scripts/check-fk-indexes.ts","rebuild:electron":"node scripts/ensure-native-modules.mjs electron --force","test:integration":"node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:file-length":"tsx scripts/check-file-length.ts","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","check:prisma-schema":"pnpm db:generate && pnpm check:service-registry && pnpm typecheck","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","test:coverage:backend":"node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend","check:prisma-generated":"node scripts/check-prisma-generated-drift.mjs","check:service-registry":"tsx scripts/check-service-registry.ts","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:file-length:update":"tsx scripts/check-file-length.ts --update","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:coverage:backend:stable":"node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend --exclude src/backend/routers/health.router.test.ts --exclude src/backend/routers/websocket/websocket.integration.test.ts --exclude src/backend/services/session/service/acp/codex-cli-import-resolution.integration.test.ts --exclude src/backend/services/session/service/acp/acp-session-negotiation.integration.test.ts","test:codex-app-server:manual:prompt":"node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run src/backend/services/session/service/acp/codex-app-server-adapter/codex-app-server-acp-adapter.manual.integration.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","approver":{"name":"martin-purplefish","email":"martin@purplefish.com"},"trustedPublisher":{"id":"github","oidcConfigId":"oidc:365611a1-9034-4895-9a30-be61cb70d16b"}},"_resolved":"/home/runner/work/factory-factory/factory-factory/npm-package/factory-factory-0.4.8.tgz","_integrity":"sha512-nYPnUlVqB9V5JruS3hZ5ho64Bz+jc4txel6wm5uYjPHwguca9HuZS2Fd34p9ttH9Hfgge4g0AithbPNn/9MqvQ==","repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"11.19.0","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"!(prisma/generated/**/*)*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"_nodeVersion":"26.8.1","dependencies":{"ws":"^8.21.3","zod":"^4.5.4","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.2","chalk":"^6.0.0","react":"^19.2.8","dotenv":"^17.4.2","prisma":"7.10.0","qrcode":"^1.5.4","sonner":"^2.0.8","express":"^5.2.1","mermaid":"^11.17.2","p-limit":"^7.3.2","date-fns":"^4.4.0","node-pty":"^1.1.0","pidusage":"^4.0.1","commander":"^15.0.0","react-dom":"^19.2.8","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@linear/sdk":"^94.0.0","@trpc/client":"^11.18.0","@trpc/server":"^11.18.0","@xterm/xterm":"^6.0.0","react-router":"^8.3.1","@prisma/client":"7.10.0","better-sqlite3":"^13.0.3","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","rehype-sanitize":"^6.0.0","@daypicker/react":"^10.0.1","@xterm/addon-fit":"^0.11.0","@trpc/react-query":"^11.18.0","@radix-ui/react-slot":"^1.3.3","@radix-ui/react-tabs":"^1.1.21","@phosphor-icons/react":"^2.1.10","@radix-ui/react-label":"^2.1.15","@tanstack/react-query":"^5.102.8","@radix-ui/react-dialog":"^1.1.23","@radix-ui/react-select":"^2.3.7","@radix-ui/react-slider":"^1.4.7","@radix-ui/react-switch":"^1.3.7","@radix-ui/react-toggle":"^1.1.18","react-resizable-panels":"^4.12.4","@radix-ui/react-popover":"^1.1.23","@radix-ui/react-tooltip":"^1.2.16","@tanstack/react-virtual":"^3.14.11","@agentclientprotocol/sdk":"1.4.0","@radix-ui/react-checkbox":"^1.3.11","@radix-ui/react-progress":"^1.1.16","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.1","@radix-ui/react-separator":"^1.1.15","@radix-ui/react-collapsible":"^1.1.20","@radix-ui/react-radio-group":"^1.4.7","@radix-ui/react-scroll-area":"^1.2.18","@radix-ui/react-alert-dialog":"^1.1.23","@radix-ui/react-context-menu":"^2.3.7","@radix-ui/react-dropdown-menu":"^2.1.24","@prisma/adapter-better-sqlite3":"7.10.0","@agentclientprotocol/claude-agent-acp":"^0.75.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.3.4","devDependencies":{"tsx":"^4.23.13","knip":"^6.35.0","vite":"^8.2.2","yaml":"2.9.0","husky":"^9.1.7","jsdom":"^30.0.1","vitest":"^5.0.0","wait-on":"^9.1.0","electron":"^44.3.0","@types/ws":"^8.18.1","storybook":"10.6.0","supertest":"^7.2.2","tsc-alias":"^1.9.4","typescript":"npm:@typescript/typescript6@^6.0.2","@types/node":"^26.5.0","lint-staged":"^17.5.0","next-themes":"^0.4.6","tailwindcss":"^4.3.3","@types/react":"^19.2.18","concurrently":"^10.0.5","@types/qrcode":"^1.5.6","@biomejs/biome":"2.5.12","@types/express":"^5.0.6","tw-animate-css":"^1.4.0","@types/pidusage":"^2.0.5","@playwright/test":"^1.63.0","@storybook/react":"10.6.0","@types/react-dom":"^19.2.7","@types/supertest":"^7.2.1","electron-builder":"^26.16.1","@electron/rebuild":"^4.2.0","@tailwindcss/vite":"^4.3.3","@typescript/native":"npm:typescript@^7.0.2","dependency-cruiser":"^18.2.0","@vitest/coverage-v8":"^5.0.0","@vitejs/plugin-react":"^6.1.1","@storybook/addon-a11y":"10.6.0","@storybook/addon-docs":"10.6.0","@storybook/react-vite":"10.6.0","@types/better-sqlite3":"^9.6.0","@storybook/addon-themes":"10.6.0","@tailwindcss/typography":"^0.5.20","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"tmp":"tmp/factory-factory_0.4.8_1788954157939_0.6871842782640651","host":"s3://npm-registry-packages-npm-production"}},"0.4.9":{"_id":"factory-factory@0.4.9","bin":{"ff":"dist/src/cli/index.js","factory-factory":"dist/src/cli/index.js"},"bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"dist":{"shasum":"1b6229c513ea5e9bc1f1d7f3ad36a7d98f2e64af","tarball":"https://registry.npmjs.org/factory-factory/-/factory-factory-0.4.9.tgz","integrity":"sha512-uSRsSHgFQYbTItk1lPtKq9uHYE7TaUIfhhg21AgDuoPDKt0Wt4eXoNSdia9uzdjBLItfg05eHNcCqSM42sQ7Ng==","fileCount":3230,"unpackedSize":22843249,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/factory-factory@0.4.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDwKxr44Jy7U77sTg+KM7hHOL0id9QyWcTjRti+1oqKmAiBuG8JPi0Gl1+3lnMZiz6ICB1++WmursU5BGutVODr8jA=="}]},"main":"dist/src/cli/index.js","name":"factory-factory","type":"module","_from":"file:npm-package/factory-factory-0.4.9.tgz","types":"./dist/src/cli/index.d.ts","author":{"name":"Purplefish"},"engines":{"node":">=26.8.1"},"license":"MIT","private":false,"scripts":{"dev":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve --dev","knip":"knip --include files,dependencies,unlisted","test":"node scripts/ensure-native-modules.mjs node && vitest run","build":"node scripts/check-ambiguous-relative-imports.mjs && rm -rf dist && tsc -p tsconfig.backend.json && tsc-alias -p tsconfig.backend.json --resolve-full-paths && node scripts/fix-prisma-imports.mjs && cp -r prompts dist/ && vite build","check":"biome check . && pnpm check:markdown && pnpm check:file-length && pnpm check:env && pnpm check:ownership && pnpm check:fk-indexes && pnpm deps:check && pnpm check:codex-schema","proxy":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts proxy --private","start":"node scripts/ensure-native-modules.mjs node && tsx src/cli/index.ts serve","prepare":"husky","check:env":"node scripts/check-no-direct-process-env.mjs","check:fix":"biome check --write . && pnpm format:markdown","db:studio":"prisma studio","storybook":"storybook dev -p 6006","typecheck":"tsc --noEmit","db:migrate":"prisma migrate dev","deps:check":"depcruise src electron --config .dependency-cruiser.cjs","test:watch":"node scripts/ensure-native-modules.mjs node && vitest","db:generate":"prisma generate","dev:backend":"BACKEND_PORT=3001 tsx watch src/backend/index.ts","postinstall":"node scripts/postinstall.mjs","dev:electron":"node scripts/ensure-native-modules.mjs electron && tsc -p tsconfig.electron.json && concurrently \"pnpm dev:backend\" \"pnpm dev:frontend\" \"wait-on http://localhost:5173 && VITE_DEV_SERVER_URL=http://localhost:5173 electron .\"","dev:frontend":"BACKEND_URL=http://localhost:3001 vite","check:imports":"node scripts/check-ambiguous-relative-imports.mjs","test:coverage":"node scripts/ensure-native-modules.mjs node && vitest run --coverage && pnpm check:coverage:critical","build:electron":"pnpm build && pnpm exec tsc -p tsconfig.electron.json && node scripts/ensure-native-modules.mjs electron && electron-builder","check:markdown":"prettier --check \"**/*.md\"","start:electron":"electron .","build:storybook":"storybook build","check:ownership":"node scripts/check-service-accessor-boundaries.mjs && node scripts/check-single-writer.mjs && pnpm check:service-registry","format:markdown":"prettier --write \"**/*.md\"","test:e2e:mobile":"playwright test --config=playwright.mobile.config.ts","check:fk-indexes":"tsx scripts/check-fk-indexes.ts","rebuild:electron":"node scripts/ensure-native-modules.mjs electron --force","test:integration":"node scripts/ensure-native-modules.mjs node && vitest run \"src/backend/**/*.integration.test.ts\"","check:file-length":"tsx scripts/check-file-length.ts","check:codex-schema":"node scripts/check-codex-schema-drift.mjs","check:biome-ignores":"node scripts/check-biome-ignores.mjs","check:prisma-schema":"pnpm db:generate && pnpm check:service-registry && pnpm typecheck","codex:schema:generate":"node scripts/generate-codex-app-server-schemas.mjs","test:coverage:backend":"node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend","check:prisma-generated":"node scripts/check-prisma-generated-drift.mjs","check:service-registry":"tsx scripts/check-service-registry.ts","check:coverage:critical":"node scripts/check-critical-coverage.mjs","check:file-length:update":"tsx scripts/check-file-length.ts --update","check:codex-schema:update":"node scripts/check-codex-schema-drift.mjs --update","test:codex-app-server:manual":"node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 vitest run \"src/backend/services/session/service/acp/codex-app-server-adapter/*.manual.integration.test.ts\"","test:coverage:backend:stable":"node scripts/ensure-native-modules.mjs node && vitest run --coverage src/backend --exclude src/backend/routers/health.router.test.ts --exclude src/backend/routers/websocket/websocket.integration.test.ts --exclude src/backend/services/session/service/acp/codex-cli-import-resolution.integration.test.ts --exclude src/backend/services/session/service/acp/acp-session-negotiation.integration.test.ts","test:codex-app-server:manual:prompt":"node scripts/ensure-native-modules.mjs node && RUN_REAL_CODEX_APP_SERVER_TESTS=1 RUN_REAL_CODEX_APP_SERVER_PROMPT_TESTS=1 vitest run src/backend/services/session/service/acp/codex-app-server-adapter/codex-app-server-acp-adapter.manual.integration.test.ts"},"version":"0.4.9","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:365611a1-9034-4895-9a30-be61cb70d16b"},"approver":{"name":"martin-purplefish","email":"martin@purplefish.com"}},"homepage":"https://factoryfactory.ai","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"_resolved":"/home/runner/work/factory-factory/factory-factory/npm-package/factory-factory-0.4.9.tgz","_integrity":"sha512-uSRsSHgFQYbTItk1lPtKq9uHYE7TaUIfhhg21AgDuoPDKt0Wt4eXoNSdia9uzdjBLItfg05eHNcCqSM42sQ7Ng==","repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"_npmVersion":"11.19.0","description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","directories":{},"lint-staged":{"*.md":["prettier --write"],"!(prisma/generated/**/*)*.{js,jsx,ts,tsx,json,css}":["biome check --write"]},"maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"_nodeVersion":"26.8.1","dependencies":{"ws":"^8.21.3","zod":"^4.6.5","clsx":"^2.1.1","cmdk":"^1.1.1","open":"^11.0.4","chalk":"^6.0.0","react":"^19.3.0","dotenv":"^17.4.2","prisma":"7.10.0","qrcode":"^1.5.4","sonner":"^2.0.8","express":"^5.2.1","mermaid":"^11.17.2","p-limit":"^7.3.2","date-fns":"^4.4.0","node-pty":"^1.1.0","pidusage":"^4.0.1","commander":"^15.0.0","react-dom":"^19.3.0","refractor":"^5.0.0","superjson":"^2.2.6","tree-kill":"^1.2.2","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","@linear/sdk":"^95.1.0","@trpc/client":"^11.18.0","@trpc/server":"^11.18.0","@xterm/xterm":"^6.0.0","react-router":"^8.4.0","@prisma/client":"7.10.0","better-sqlite3":"^13.0.3","react-markdown":"^10.1.0","tailwind-merge":"^3.7.0","rehype-sanitize":"^6.0.0","@daypicker/react":"^10.0.1","@xterm/addon-fit":"^0.11.0","@trpc/react-query":"^11.18.0","@radix-ui/react-slot":"^1.3.3","@radix-ui/react-tabs":"^1.1.21","@phosphor-icons/react":"^2.1.10","@radix-ui/react-label":"^2.1.15","@tanstack/react-query":"^5.103.1","@radix-ui/react-dialog":"^1.1.23","@radix-ui/react-select":"^2.3.7","@radix-ui/react-slider":"^1.4.7","@radix-ui/react-switch":"^1.3.7","@radix-ui/react-toggle":"^1.1.18","react-resizable-panels":"^4.12.4","@radix-ui/react-popover":"^1.1.23","@radix-ui/react-tooltip":"^1.2.16","@tanstack/react-virtual":"^3.14.13","@agentclientprotocol/sdk":"1.4.0","@radix-ui/react-checkbox":"^1.3.11","@radix-ui/react-progress":"^1.1.16","class-variance-authority":"^0.7.1","react-syntax-highlighter":"^16.1.1","@radix-ui/react-separator":"^1.1.15","@radix-ui/react-collapsible":"^1.1.20","@radix-ui/react-radio-group":"^1.4.7","@radix-ui/react-scroll-area":"^1.2.18","@radix-ui/react-alert-dialog":"^1.1.23","@radix-ui/react-context-menu":"^2.3.7","@radix-ui/react-dropdown-menu":"^2.1.24","@prisma/adapter-better-sqlite3":"7.10.0","@agentclientprotocol/claude-agent-acp":"^0.78.0"},"packageManager":"pnpm@12.4.2","devDependencies":{"tsx":"^4.23.13","knip":"^6.36.0","vite":"^8.3.0","yaml":"2.9.1","husky":"^9.1.7","jsdom":"^30.0.1","vitest":"^5.0.1","wait-on":"^9.1.0","electron":"^44.4.1","prettier":"3.9.7","@types/ws":"^8.18.1","storybook":"10.6.0","supertest":"^7.2.2","tsc-alias":"^1.9.5","typescript":"npm:@typescript/typescript6@^6.0.2","@types/node":"^26.6.1","lint-staged":"^17.5.1","next-themes":"^0.4.6","tailwindcss":"^4.3.3","@types/react":"^19.3.0","concurrently":"^10.0.5","@types/qrcode":"^1.5.6","@biomejs/biome":"2.5.14","@types/express":"^5.0.6","tw-animate-css":"^1.4.0","@types/pidusage":"^2.0.5","@playwright/test":"^1.63.0","@storybook/react":"10.6.0","@types/react-dom":"^19.3.0","@types/supertest":"^7.2.1","electron-builder":"^26.16.1","@electron/rebuild":"^4.2.0","@tailwindcss/vite":"^4.3.3","@typescript/native":"npm:typescript@^7.0.2","dependency-cruiser":"^18.3.1","@vitest/coverage-v8":"^5.0.1","@vitejs/plugin-react":"^6.1.1","@storybook/addon-a11y":"10.6.0","@storybook/addon-docs":"10.6.0","@storybook/react-vite":"10.6.0","@types/better-sqlite3":"^9.6.0","@storybook/addon-themes":"10.6.0","@tailwindcss/typography":"^0.5.20","@types/react-syntax-highlighter":"^15.5.13"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/factory-factory_0.4.9_1789656368982_0.3121837014351292"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-01T00:48:47.406Z","modified":"2026-09-17T14:46:09.638Z","0.1.0":"2026-02-01T00:48:47.758Z","0.1.1":"2026-02-01T01:51:35.855Z","0.1.2":"2026-02-01T20:17:32.941Z","0.1.3":"2026-02-01T20:59:42.757Z","0.1.4":"2026-02-02T15:58:07.408Z","0.1.5":"2026-02-03T00:14:04.452Z","0.1.6":"2026-02-04T01:51:36.534Z","0.2.0":"2026-02-05T16:07:43.505Z","0.2.1":"2026-02-05T19:23:19.868Z","0.2.2":"2026-02-06T09:22:24.256Z","0.2.3":"2026-02-06T15:55:34.023Z","0.2.4":"2026-02-06T20:29:38.912Z","0.2.5":"2026-02-07T17:02:37.084Z","0.2.6":"2026-02-08T21:57:41.284Z","0.2.7":"2026-02-10T23:54:40.000Z","0.2.8":"2026-02-11T23:04:11.664Z","0.3.0":"2026-02-14T21:16:00.845Z","0.3.1":"2026-02-14T21:31:45.115Z","0.3.2":"2026-02-14T22:09:23.578Z","0.3.3":"2026-02-14T22:32:59.514Z","0.3.4":"2026-02-16T01:24:14.131Z","0.3.5":"2026-02-16T22:17:03.314Z","0.3.6":"2026-02-19T01:16:22.235Z","0.3.7":"2026-02-20T21:48:36.472Z","0.3.8":"2026-02-24T11:21:10.248Z","0.3.9":"2026-02-24T19:49:29.251Z","0.3.10":"2026-03-20T14:02:19.668Z","0.3.11":"2026-04-02T15:52:28.621Z","0.3.12":"2026-04-07T18:47:18.875Z","0.3.13":"2026-04-08T13:21:21.444Z","0.3.14":"2026-04-09T22:19:37.361Z","0.3.15":"2026-04-29T16:03:43.492Z","0.3.16":"2026-05-14T20:01:12.988Z","0.3.17":"2026-05-14T21:48:38.280Z","0.3.18":"2026-05-20T13:41:43.092Z","0.3.19":"2026-05-20T17:05:24.726Z","0.3.20":"2026-05-29T17:40:52.468Z","0.3.21":"2026-06-22T19:58:34.106Z","0.4.0":"2026-07-16T20:44:43.443Z","0.4.1":"2026-07-17T23:59:58.727Z","0.4.2":"2026-07-27T19:21:51.055Z","0.4.3":"2026-07-29T13:57:59.086Z","0.4.4":"2026-07-30T00:38:21.980Z","0.4.5":"2026-07-31T00:20:54.327Z","0.4.6":"2026-08-11T10:47:30.465Z","0.4.7":"2026-09-08T19:30:07.987Z","0.4.8":"2026-09-09T11:42:38.163Z","0.4.9":"2026-09-17T14:46:09.295Z"},"bugs":{"url":"https://github.com/purplefish-ai/factory-factory/issues"},"author":{"name":"Purplefish"},"license":"MIT","homepage":"https://factoryfactory.ai","keywords":["claude","claude-code","codex","ai","coding","workspace","git","worktree","electron","development"],"repository":{"url":"git+https://github.com/purplefish-ai/factory-factory.git","type":"git"},"description":"Workspace-based coding environment for running multiple Claude Code and Codex sessions in parallel","maintainers":[{"name":"martin-purplefish","email":"martin@purplefish.com"}],"readme":"<p align=\"center\">\n  <img src=\"public/logo-full.svg\" alt=\"Factory Factory\" width=\"400\">\n</p>\n\n<p align=\"center\">\n  <strong>Run Claude Code and Codex in parallel, each in an isolated git workspace.</strong>\n</p>\n\n<p align=\"center\">\n  Turn issues into branches, steer multiple agents, review changes, and keep pull requests moving from one local command center.\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/factory-factory\"><img src=\"https://img.shields.io/npm/v/factory-factory\" alt=\"npm\"></a>\n  <a href=\"https://github.com/purplefish-ai/factory-factory/actions/workflows/ci.yml\"><img src=\"https://github.com/purplefish-ai/factory-factory/actions/workflows/ci.yml/badge.svg\" alt=\"CI\"></a>\n  <a href=\"https://github.com/purplefish-ai/factory-factory/blob/main/LICENSE\"><img src=\"https://img.shields.io/github/license/purplefish-ai/factory-factory\" alt=\"License\"></a>\n  <a href=\"https://factoryfactory.ai\"><img src=\"https://img.shields.io/badge/website-factoryfactory.ai-blue\" alt=\"Website\"></a>\n</p>\n\n<p align=\"center\">\n  <img src=\"public/working.png\" alt=\"Factory Factory workspace with parallel agents, code changes, and an integrated terminal\" width=\"1000\">\n</p>\n\nFactory Factory is a local workspace manager for AI coding agents. Every\nworkspace gets its own git worktree and branch, so agents can work on separate\ntasks without stepping on each other. The UI brings chat, diffs, files,\nterminals, issues, and pull request status together in one place.\n\n## Quick start\n\nYou will need:\n\n- Node.js 26.8.1+ for the CLI and development (pinned in `.node-version`); the\n  desktop app uses Electron's bundled Node.js runtime\n- macOS 13 (Ventura) or newer for the macOS desktop app\n- A local git repository\n- At least one agent provider:\n  - Claude Code, authenticated with `claude login`\n  - A ChatGPT/Codex account configured for Codex sessions\n- The authenticated [GitHub CLI](https://cli.github.com/) for GitHub issues and\n  pull requests\n\nStart Factory Factory without installing it:\n\n```bash\nnpx factory-factory@latest serve\n```\n\nFactory Factory opens in your browser and stores its database in\n`~/factory-factory/` by default.\n\nSee [Settings](docs/admin-settings.md) for IDE commands, default chat models,\nand project configuration.\n\nThen:\n\n1. Add a project by selecting a local git repository.\n2. Create a workspace, or start one from a GitHub or Linear issue.\n3. Choose Claude or Codex and start a session.\n4. Review the agent's changes, use the integrated terminal when needed, and open\n   a pull request.\n\n## What it does\n\n- **Parallel, isolated work:** Each task runs in a dedicated worktree and branch\n  while your main checkout stays untouched.\n- **One workspace for the whole task:** Chat with agents, inspect files and\n  diffs, run commands, and track PR state without switching tools.\n- **Claude and Codex sessions:** Factory Factory connects to both providers\n  through the Agent Client Protocol (ACP), with resumable sessions and runtime\n  model options.\n- **Issue-to-PR workflow:** Pull assigned work from GitHub or Linear, link it to\n  a workspace, and follow it through to merge.\n- **Automatic PR progression:** Ratchet watches open pull requests and can\n  dispatch follow-up agents for failing CI and actionable review feedback.\n- **Repeatable automation:** Quick actions, periodic tasks, and child workspaces\n  help split up or repeat common workflows.\n\nThe core model is intentionally small:\n\n```text\nProject (a local git repository)\n└── Workspace (an isolated worktree and branch)\n    ├── Agent sessions (Claude or Codex over ACP)\n    └── Terminal, files, changes, and pull request state\n```\n\n## Install and run\n\nFor regular use, install the CLI globally:\n\n```bash\nnpm install -g factory-factory\nff serve\n```\n\nUseful commands:\n\n```bash\nff serve --help     # Ports, database path, host, and other options\nff proxy --private  # Share the app through a password-protected Cloudflare tunnel\nff db:studio        # Inspect the local database with Prisma Studio\n```\n\n`ff proxy` requires `cloudflared` on your `PATH`. Factory Factory automatically\nruns database migrations, finds an available port, and opens the browser when\nthe server is ready.\n\n### Hosting behind your own reverse proxy\n\nTo serve Factory Factory from your own domain (e.g. `https://ff.example.com`)\nvia nginx, Caddy, or another reverse proxy:\n\n- Set `CORS_ALLOWED_ORIGINS` to the exact public origin(s), comma-separated:\n  `CORS_ALLOWED_ORIGINS=https://ff.example.com`. This gates both HTTP CORS and\n  WebSocket upgrades; non-loopback origins must match exactly (scheme + host +\n  non-default port, no trailing slash).\n- Keep `BACKEND_HOST` bound to `localhost`/`127.0.0.1` so only your proxy can\n  reach the server.\n\nBy default the server rejects WebSocket upgrades that carry client-address\nheaders (`x-forwarded-for`, `cf-connecting-ip`, etc.), because it expects to sit\nbehind an authenticated proxy that strips them. If your reverse proxy adds these\nheaders, either strip them before forwarding, or set `TRUST_PROXY_HEADERS=true`\nto accept them. **Only enable `TRUST_PROXY_HEADERS` when the backend is\nreachable solely through your trusted proxy** (i.e. bound to loopback) —\notherwise clients could spoof address headers. The remote-address trust check\n(loopback / `TRUSTED_LOCAL_CIDRS`) still applies.\n\n## Security\n\n> [!WARNING] Factory Factory runs coding agents that can execute commands and\n> modify files without manual confirmation. Workspaces isolate git branches;\n> they are not containers or security sandboxes.\n\nUse Factory Factory only with repositories and agent instructions you trust.\nReview changes before merging, protect your GitHub and Linear credentials, and\nconsider a VM or container when working with untrusted code.\n\n## Development\n\nUse pnpm 12.4.2, pinned in `package.json`. Dependency build permissions live in\n`pnpm-workspace.yaml` under `allowBuilds`; review new build scripts with\n`pnpm approve-builds` when adding or updating dependencies.\n\nDevelopment requires Git 2.32 or newer for lint-staged. Builds and typechecks\nuse TypeScript 7 through the `@typescript/native` package alias. The\n`typescript` alias provides Microsoft's TypeScript 6 compatibility API for\nguardrail scripts and tools that parse source files; `tsc` runs version 7 and\n`tsc6` runs version 6.\n\n```bash\ngit clone https://github.com/purplefish-ai/factory-factory.git\ncd factory-factory\npnpm install\npnpm dev\n```\n\nBefore opening a pull request, run the standard checks:\n\n```bash\npnpm test\npnpm typecheck\npnpm check\n```\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for project structure, conventions, and\nthe full contributor workflow.\n\n## Acknowledgements\n\nFactory Factory was inspired by [Conductor](https://conductor.build),\n[VibeKanban](https://vibekanban.com),\n[Gastown](https://github.com/steveyegge/gastown), and\n[Multiclaude](https://github.com/dlorenc/multiclaude).\n\n## License\n\n[MIT](LICENSE)\n","readmeFilename":"README.md"}