{"_id":"farming-code","_rev":"56-a8ece852705969ce1844396740b492cf","name":"farming-code","dist-tags":{"latest":"2.2.72"},"versions":{"2.2.6":{"name":"farming-code","version":"2.2.6","keywords":["ai-agent","coding-agent","codex","claude","remote-workspace","terminal"],"author":"","license":"MIT","_id":"farming-code@2.2.6","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming"},"dist":{"shasum":"23edcdbb5c460b1a9d3295921e69c56956b330bc","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.6.tgz","fileCount":453,"integrity":"sha512-csKV2b5BU4XMgcguyfGXnYCDpu/1C6R6GenUBIxS4lSRkRUOtDzWdq6ddd0TDSRnXpzEgEnj/OrIchgrkZhEkA==","signatures":[{"sig":"MEUCIFjzSYxK7GOmI+HI0NSjukrewSt46vUUz6PVbqORL1LWAiEA7M2BUeoGzVhL3aiwvPk9yI0CVm8zifOcTpkUVrcneVA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":42423004},"main":"backend/server.js","engines":{"node":">=22"},"gitHead":"f82676db68f6f06af476156943507f3989d4e615","scripts":{"dev":"node backend/server.js & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.js\" \"frontend/**/*.js\" \"scripts/**/*.js\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"node scripts/run-tests.js","build":"vite build","check":"npm run typecheck && npm run lint && npm test","start":"npm run build && node backend/server.js","prepack":"FARMING_BASE_PATH=/farming npm run build","test:e2e":"npm run test:e2e:playwright","typecheck":"tsc --noEmit","dev:backend":"node backend/server.js","postinstall":"node scripts/sync-ghostty-vendor.js","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","deploy:remote":"./scripts/deploy.sh up","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:legacy":"npm run test:e2e:local","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js remote","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","sync:ghostty-vendor":"node scripts/sync-ghostty-vendor.js","test:e2e:playwright":"playwright test","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"node scripts/test-update-platforms.js","docs:product:screenshots":"node scripts/capture-product-screenshots.js","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js local","test:codex-app-server:real":"FARMING_REAL_CODEX_APP_SERVER_SMOKE=1 node scripts/smoke-codex-app-server.js","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js remote","test:remote-terminal:smoke":"node scripts/smoke-remote-terminal.js","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh"},"_npmUser":{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"},"overrides":{"qs":"6.15.3","dompurify":"3.4.11"},"repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.1","description":"Remote browser workspace for supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ws":"^8.21.0","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.18.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","ghostty-web":"^0.4.0","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","@agentclientprotocol/codex-acp":"1.1.2","@agentclientprotocol/claude-agent-acp":"0.58.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.6_1784002544451_0.30617629895023146","host":"s3://npm-registry-packages-npm-production"}},"2.2.7":{"name":"farming-code","version":"2.2.7","keywords":["ai-agent","coding-agent","codex","claude","remote-workspace","terminal"],"author":"","license":"MIT","_id":"farming-code@2.2.7","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming"},"dist":{"shasum":"e01ec32ff6a9de0d6fd627a7da5dbce41b335c4d","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.7.tgz","fileCount":453,"integrity":"sha512-RYA9RsEtix1/Vq4afi9vMtn7JKox9a6fUWWDrhdPPlvMjJCd0gH6ogzc9MjfIB2ldBhaGcLDkXruVqJDRCv5lQ==","signatures":[{"sig":"MEUCIQCKStN/zyWmFzn0a7fYMuVLxKkFVug/OLBqqT+/JOByeAIgH+7zXZ/1w8p0Ax/CjAhLBbrvdocN1Jm6p7OEhHfY59c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":42466859},"main":"backend/server.js","engines":{"node":">=22"},"gitHead":"c4558c018547bf8aa59c33e0093c6c483a22d5cc","scripts":{"dev":"node backend/server.js & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.js\" \"frontend/**/*.js\" \"scripts/**/*.js\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"node scripts/run-tests.js","build":"vite build","check":"npm run typecheck && npm run lint && npm test","start":"npm run build && node backend/server.js","prepack":"FARMING_BASE_PATH=/farming npm run build","test:e2e":"npm run test:e2e:playwright","typecheck":"tsc --noEmit","dev:backend":"node backend/server.js","postinstall":"node scripts/sync-ghostty-vendor.js","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","deploy:remote":"./scripts/deploy.sh up","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:legacy":"npm run test:e2e:local","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js remote","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","sync:ghostty-vendor":"node scripts/sync-ghostty-vendor.js","test:e2e:playwright":"playwright test","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"node scripts/test-update-platforms.js","docs:product:screenshots":"node scripts/capture-product-screenshots.js","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js local","test:codex-app-server:real":"FARMING_REAL_CODEX_APP_SERVER_SMOKE=1 node scripts/smoke-codex-app-server.js","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js remote","test:remote-terminal:smoke":"node scripts/smoke-remote-terminal.js","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh"},"_npmUser":{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"},"overrides":{"qs":"6.15.3","dompurify":"3.4.11"},"repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.1","description":"Remote browser workspace for supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ws":"^8.21.0","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.18.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","ghostty-web":"^0.4.0","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","@agentclientprotocol/codex-acp":"1.1.2","@agentclientprotocol/claude-agent-acp":"0.58.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.7_1784025847377_0.1470728697224699","host":"s3://npm-registry-packages-npm-production"}},"2.2.8":{"name":"farming-code","version":"2.2.8","keywords":["ai-agent","coding-agent","codex","claude","remote-workspace","terminal"],"author":"","license":"MIT","_id":"farming-code@2.2.8","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming"},"dist":{"shasum":"e1cb11e34f1d94df83fb30da1906c3325b4c68bb","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.8.tgz","fileCount":453,"integrity":"sha512-ZxObDPu6b4kYs1zf/aDUE4CShwJ/kDnv88dLmp4t2+qZ9Vuike0LwDq26thJc5HH2DjprcEpQnc6VzYC7IvIZw==","signatures":[{"sig":"MEQCIFWZHfCVcQBy0+rCiNuh4B6n/g7yeZyVFJva3R7jNFzCAiB+xx5aIwXij1pqNg03UXKV7CJy1DhoMn3uCVfHu6PWaA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":42452149},"main":"backend/server.js","engines":{"node":">=22"},"gitHead":"2e1ea6f5491afbab4fdd02724c630dda8dba8ac3","scripts":{"dev":"node backend/server.js & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.js\" \"frontend/**/*.js\" \"scripts/**/*.js\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"node scripts/run-tests.js","build":"vite build","check":"npm run typecheck && npm run lint && npm test","start":"npm run build && node backend/server.js","prepack":"FARMING_BASE_PATH=/farming npm run build","test:e2e":"npm run test:e2e:playwright","typecheck":"tsc --noEmit","dev:backend":"node backend/server.js","postinstall":"node scripts/sync-ghostty-vendor.js","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","deploy:remote":"./scripts/deploy.sh up","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:legacy":"npm run test:e2e:local","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js remote","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","sync:ghostty-vendor":"node scripts/sync-ghostty-vendor.js","test:e2e:playwright":"playwright test","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"node scripts/test-update-platforms.js","docs:product:screenshots":"node scripts/capture-product-screenshots.js","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js local","test:codex-app-server:real":"FARMING_REAL_CODEX_APP_SERVER_SMOKE=1 node scripts/smoke-codex-app-server.js","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js remote","test:remote-terminal:smoke":"node scripts/smoke-remote-terminal.js","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh"},"_npmUser":{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"},"overrides":{"qs":"6.15.3","dompurify":"3.4.11"},"repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.1","description":"Remote browser workspace for supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ws":"^8.21.0","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.18.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","ghostty-web":"^0.4.0","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","@agentclientprotocol/codex-acp":"1.1.2","@agentclientprotocol/claude-agent-acp":"0.58.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.8_1784055239466_0.4580645268069079","host":"s3://npm-registry-packages-npm-production"}},"2.2.11":{"name":"farming-code","version":"2.2.11","keywords":["ai-agent","coding-agent","codex","claude","remote-workspace","terminal"],"author":"","license":"MIT","_id":"farming-code@2.2.11","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming"},"dist":{"shasum":"d5269611efd05922a7548aa3bdaa65bc3fc6ade5","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.11.tgz","fileCount":479,"integrity":"sha512-2zNuhYqVJaGMxf+o9o8co2sIRx8bcFKZ8VP6pImMXiwLdLZJ3vthbsWRsYRJqByaWKy9OOgU7d3oo42/nmUe8w==","signatures":[{"sig":"MEQCIBMF9Ia5EhJSfennyvw1dMCw75CZ+rbJpN7mE0mcvpyhAiAbltWJWXBftU3ICPq8ck3MEHSOAVQT8QpmPoEj4sTmYA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":43081073},"main":"backend/server.js","engines":{"node":">=22"},"gitHead":"614075c7861395d437fd7fa57b09f4981857f5d0","scripts":{"dev":"node backend/server.js & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.js\" \"frontend/**/*.js\" \"scripts/**/*.js\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"node scripts/run-tests.js","build":"vite build","check":"npm run typecheck && npm run lint && npm test","start":"npm run build && node backend/server.js","prepack":"FARMING_BASE_PATH=/farming npm run build","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.js","typecheck":"tsc --noEmit","dev:backend":"node backend/server.js","postinstall":"node scripts/sync-ghostty-vendor.js","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","deploy:remote":"./scripts/deploy.sh up","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:legacy":"npm run test:e2e:local","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js remote","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","sync:ghostty-vendor":"node scripts/sync-ghostty-vendor.js","test:e2e:playwright":"playwright test","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"node scripts/test-update-platforms.js","test:performance:audit":"node tests/performance/agent-usage-hotpath.js && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","docs:product:screenshots":"node scripts/capture-product-screenshots.js","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:codex-app-server:real":"FARMING_REAL_CODEX_APP_SERVER_SMOKE=1 node scripts/smoke-codex-app-server.js","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js remote","test:remote-terminal:smoke":"node scripts/smoke-remote-terminal.js","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"},"overrides":{"qs":"6.15.3","dompurify":"3.4.11"},"repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.1","description":"Remote browser workspace for supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ws":"^8.21.0","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.18.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","ghostty-web":"^0.4.0","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","@agentclientprotocol/codex-acp":"1.1.4","@agentclientprotocol/claude-agent-acp":"0.59.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.11_1784350572254_0.28063342038244654","host":"s3://npm-registry-packages-npm-production"}},"2.2.12":{"name":"farming-code","version":"2.2.12","keywords":["ai-agent","coding-agent","codex","claude","remote-workspace","terminal"],"author":"","license":"MIT","_id":"farming-code@2.2.12","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming"},"dist":{"shasum":"5c41eac6e60c483c5505841871ef409af711b72a","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.12.tgz","fileCount":479,"integrity":"sha512-WSVxzTwU6l+IFpEfOFcoYXdKxyzyiFwYEJ6j8x3TcSYeyezFuo5bS35ftXwSPSP5MRCTDYpod5gwC0FvS31XqA==","signatures":[{"sig":"MEYCIQCW3YYu4KOEYCfBLjzsOaA1gCzaRl8q982Lk8RS6vk4zAIhAN6Rxrrt/43F5YiGn+w4vFUFV2L204ZFDcYLkRBB+IxS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":43158351},"main":"backend/server.js","engines":{"node":">=22"},"gitHead":"38a3ebbf43756853d5b5b61bf1a2bbe53655ad3a","scripts":{"dev":"node backend/server.js & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.js\" \"frontend/**/*.js\" \"scripts/**/*.js\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"node scripts/run-tests.js","build":"vite build","check":"npm run typecheck && npm run lint && npm test","start":"npm run build && node backend/server.js","prepack":"FARMING_BASE_PATH=/farming npm run build","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.js","typecheck":"tsc --noEmit","dev:backend":"node backend/server.js","postinstall":"node scripts/sync-ghostty-vendor.js","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","deploy:remote":"./scripts/deploy.sh up","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:legacy":"npm run test:e2e:local","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js remote","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","sync:ghostty-vendor":"node scripts/sync-ghostty-vendor.js","test:e2e:playwright":"playwright test","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"node scripts/test-update-platforms.js","test:performance:audit":"node tests/performance/agent-usage-hotpath.js && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","docs:product:screenshots":"node scripts/capture-product-screenshots.js","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:codex-app-server:real":"FARMING_REAL_CODEX_APP_SERVER_SMOKE=1 node scripts/smoke-codex-app-server.js","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js remote","test:remote-terminal:smoke":"node scripts/smoke-remote-terminal.js","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"},"overrides":{"qs":"6.15.3","dompurify":"3.4.11"},"repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.1","description":"Remote browser workspace for supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ws":"^8.21.0","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.18.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","ghostty-web":"^0.4.0","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","@agentclientprotocol/codex-acp":"1.1.4","@agentclientprotocol/claude-agent-acp":"0.59.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.12_1784399485542_0.021562642576014035","host":"s3://npm-registry-packages-npm-production"}},"2.2.13":{"name":"farming-code","version":"2.2.13","keywords":["ai-agent","coding-agent","codex","claude","remote-workspace","terminal"],"author":"","license":"MIT","_id":"farming-code@2.2.13","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming"},"dist":{"shasum":"ef868fe92ac5f01e35e5eabfa536689d2ff2ac8f","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.13.tgz","fileCount":543,"integrity":"sha512-0hIPhnTub7JDXlrh/ytdWlU9coIzF+5duLnZgkVwbypGTJAmJGFKK5VLC38AoIoMl6v7YkHNUL9Jk10XKSTaFg==","signatures":[{"sig":"MEQCIB4MW6GbLAw3z97jLrp2C897LZkM6gVQ8ydhSl+iXUjuAiAEHQtx4jGVBxR6JywjQqIYFqltZGKWjYsEM3ZtP/3/Lw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":48532991},"main":"backend/server.js","engines":{"node":">=22"},"gitHead":"8d2f0bca110ad0a47f6ba3f66ba95c15e4c8cea6","scripts":{"dev":"node backend/server.js & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.js\" \"frontend/**/*.js\" \"scripts/**/*.js\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"node scripts/run-tests.js","build":"vite build && npm run build:crt-markdown","check":"npm run typecheck && npm run lint && npm test","start":"npm run build && node backend/server.js","predev":"npm run build:crt-markdown","prepack":"FARMING_BASE_PATH=/farming npm run build","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.js","typecheck":"tsc --noEmit","dev:backend":"node backend/server.js","postinstall":"node scripts/sync-ghostty-vendor.js","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","deploy:remote":"./scripts/deploy.sh up","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:legacy":"npm run test:e2e:local","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js remote","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","sync:ghostty-vendor":"node scripts/sync-ghostty-vendor.js","test:e2e:playwright":"playwright test","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"node scripts/test-update-platforms.js","test:performance:audit":"node tests/performance/agent-usage-hotpath.js && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","docs:product:screenshots":"node scripts/capture-product-screenshots.js","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:codex-app-server:real":"FARMING_REAL_CODEX_APP_SERVER_SMOKE=1 node scripts/smoke-codex-app-server.js","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js remote","test:remote-terminal:smoke":"node scripts/smoke-remote-terminal.js","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"},"overrides":{"qs":"6.15.3","dompurify":"3.4.11"},"repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.1","description":"Remote browser workspace for supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ws":"^8.21.0","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.18.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","ghostty-web":"^0.4.0","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","@agentclientprotocol/codex-acp":"1.1.4","@agentclientprotocol/claude-agent-acp":"0.59.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.13_1784434366967_0.980738111641617","host":"s3://npm-registry-packages-npm-production"}},"2.2.14":{"name":"farming-code","version":"2.2.14","keywords":["ai-agent","coding-agent","codex","claude","remote-workspace","terminal"],"author":"","license":"MIT","_id":"farming-code@2.2.14","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming"},"dist":{"shasum":"e81fa2ac1b551f703d05e1c64f06da92eb96ff22","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.14.tgz","fileCount":543,"integrity":"sha512-l7C5nUEBE8+bDNO0FJmd6mj2m+ZIadDftpTMaTqBw3ulSkhU+cxi9m0o2lZAc7z9il1EsvQ/acc9aJSRirO7Og==","signatures":[{"sig":"MEYCIQD6Tbtdnj48EK6/GNMl2ie2oEonVcf2TNK7RN4cqEaldwIhAKH5ZrvH6CXYDXI6x6zsA9TQWTlCgx0uEnOppHmmLykd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":48526589},"main":"backend/server.js","engines":{"node":">=22"},"gitHead":"f89200a7004b682962bbab68800ea58327a6a332","scripts":{"dev":"node backend/server.js & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.js\" \"frontend/**/*.js\" \"scripts/**/*.js\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"node scripts/run-tests.js","build":"vite build && npm run build:crt-markdown","check":"npm run typecheck && npm run lint && npm test","start":"npm run build && node backend/server.js","predev":"npm run build:crt-markdown","prepack":"FARMING_BASE_PATH=/farming npm run build","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.js","typecheck":"tsc --noEmit","dev:backend":"node backend/server.js","postinstall":"node scripts/sync-ghostty-vendor.js","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","deploy:remote":"./scripts/deploy.sh up","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:legacy":"npm run test:e2e:local","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js remote","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","sync:ghostty-vendor":"node scripts/sync-ghostty-vendor.js","test:e2e:playwright":"playwright test","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"node scripts/test-update-platforms.js","test:performance:audit":"node tests/performance/agent-usage-hotpath.js && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","docs:product:screenshots":"node scripts/capture-product-screenshots.js","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:codex-app-server:real":"FARMING_REAL_CODEX_APP_SERVER_SMOKE=1 node scripts/smoke-codex-app-server.js","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js remote","test:remote-terminal:smoke":"node scripts/smoke-remote-terminal.js","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"},"overrides":{"qs":"6.15.3","dompurify":"3.4.11"},"repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.1","description":"Remote browser workspace for supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ws":"^8.21.0","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.18.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","ghostty-web":"^0.4.0","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","@agentclientprotocol/codex-acp":"1.1.4","@agentclientprotocol/claude-agent-acp":"0.59.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.14_1784452961569_0.7792435010302414","host":"s3://npm-registry-packages-npm-production"}},"2.2.16":{"name":"farming-code","version":"2.2.16","keywords":["ai-agent","coding-agent","codex","claude","remote-workspace","terminal"],"author":"","license":"MIT","_id":"farming-code@2.2.16","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming"},"dist":{"shasum":"9cd56d8f21a4df34270b2ce9021a92af737858bc","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.16.tgz","fileCount":542,"integrity":"sha512-Grx9okrp6z9v30+pkurgb85f2junqlAeM3uG23iXd4uKe5spFperqKh+7MwxkVD1KfClFL1QDnG/ANMEgsc7ag==","signatures":[{"sig":"MEUCIFqCIVcUJ5P6qIPszv8fuEOE+g7OiIgdAt6fB0A4Gfi2AiEA0/Qme9mEeWZ8GUu1RQkXS0Dk25SVpGbXkQ48lBWBZPo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":49584616},"main":"backend/server.js","engines":{"node":">=22"},"gitHead":"c6b231c1d8d221e5c7035442bcd3d82bef7759d7","scripts":{"dev":"node backend/server.js & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.js\" \"frontend/**/*.js\" \"scripts/**/*.js\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"node scripts/run-tests.js","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run typecheck && npm run lint && npm test","start":"npm run build && node backend/server.js","predev":"npm run prepare:acp-vendor && npm run build:crt-markdown","prepack":"FARMING_BASE_PATH=/farming npm run build","pretest":"npm run prepare:acp-vendor","prebuild":"node scripts/sync-ghostty-vendor.js && node scripts/prepare-codex-acp-vendor.js","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.js","typecheck":"tsc --noEmit","dev:backend":"node backend/server.js","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","deploy:remote":"./scripts/deploy.sh up","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run prepare:acp-vendor && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:legacy":"npm run test:e2e:local","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js remote","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"node scripts/prepare-codex-acp-vendor.js --copy","sync:ghostty-vendor":"node scripts/sync-ghostty-vendor.js","test:e2e:playwright":"playwright test","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"node scripts/test-update-platforms.js","test:performance:audit":"node tests/performance/agent-usage-hotpath.js && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","docs:product:screenshots":"node scripts/capture-product-screenshots.js","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js remote","test:remote-terminal:chaos":"node scripts/smoke-remote-terminal-chaos.js","test:remote-terminal:smoke":"node scripts/smoke-remote-terminal.js","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"overrides":{"qs":"6.15.3","dompurify":"3.4.12","express@^4.22.2":{".":"$express","body-parser":"1.20.6"},"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.1","description":"Remote browser workspace for supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","ghostty-web":"^0.4.0","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","@agentclientprotocol/codex-acp":"1.1.4","@agentclientprotocol/claude-agent-acp":"0.59.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.16_1784681010025_0.6937258321927298","host":"s3://npm-registry-packages-npm-production"}},"2.2.17":{"name":"farming-code","version":"2.2.17","keywords":["ai-agent","coding-agent","codex","claude","remote-workspace","terminal"],"author":"","license":"MIT","_id":"farming-code@2.2.17","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming"},"dist":{"shasum":"28d776e26e65e1ee1600dae1757650d022698723","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.17.tgz","fileCount":552,"integrity":"sha512-GmIVsXT7fbvMpujDjfYZfBZNVUS00JyqpzT+RU1rv5Ay/jqtned/BZeQ1fWUa3N3d3mY97ggojynfvY+GDT/iQ==","signatures":[{"sig":"MEUCIQDJqbYiYduHoS9wldyQni4+/bNgYtAdpH1Mxd3ptPDzXAIgK86Ls1dXHNqcFTmsEdSh2bxj7t3QkdfNwZvsaGzGUXM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":49820355},"main":"backend/server.js","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"f468164098571b4fceaa4fe2dc210fedf8accdab","scripts":{"dev":"node backend/server.js & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.js\" \"frontend/**/*.js\" \"scripts/**/*.js\" bin/farming --ignore-pattern \"backend/usage-history-scanner.generated.js\" --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"node scripts/run-tests.js","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run typecheck && npm run lint && npm test","start":"npm run build && node backend/server.js","predev":"npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","prepack":"FARMING_BASE_PATH=/farming npm run build","pretest":"npm run prepare:acp-vendor && npm run build:usage-history","prebuild":"node scripts/build-usage-history-scanner.js && node scripts/sync-ghostty-vendor.js && node scripts/prepare-codex-acp-vendor.js","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.js","typecheck":"tsc --noEmit && tsc -p tsconfig.usage.json","dev:backend":"node backend/server.js","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","deploy:remote":"./scripts/deploy.sh up","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:legacy":"npm run test:e2e:local","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js remote","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"node scripts/prepare-codex-acp-vendor.js --copy","build:usage-history":"node scripts/build-usage-history-scanner.js","sync:ghostty-vendor":"node scripts/sync-ghostty-vendor.js","test:e2e:playwright":"playwright test","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"node scripts/test-update-platforms.js","test:performance:audit":"node tests/performance/agent-usage-hotpath.js && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","docs:product:screenshots":"node scripts/capture-product-screenshots.js","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js remote","test:remote-terminal:chaos":"node scripts/smoke-remote-terminal-chaos.js","test:remote-terminal:smoke":"node scripts/smoke-remote-terminal.js","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"overrides":{"qs":"6.15.3","dompurify":"3.4.12","express@^4.22.2":{".":"$express","body-parser":"1.20.6"},"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.1","description":"Remote browser workspace for supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","ghostty-web":"^0.4.0","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","@agentclientprotocol/codex-acp":"1.1.4","@agentclientprotocol/claude-agent-acp":"0.59.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.17_1784841613224_0.25030730207901253","host":"s3://npm-registry-packages-npm-production"}},"2.2.18":{"name":"farming-code","version":"2.2.18","keywords":["ai-agent","coding-agent","codex","claude","remote-workspace","terminal"],"author":"","license":"MIT","_id":"farming-code@2.2.18","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming"},"dist":{"shasum":"012e83517665743b87ef245b1a6c21e98be09f2a","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.18.tgz","fileCount":552,"integrity":"sha512-L7KogPIYJi56rcseEWbZaz2/UZYPmjQ4Kg1Ug0zlKR3b7/meL5ZBW6G680b/5uWTzrnl63uf+xWFVx5gVtjWHw==","signatures":[{"sig":"MEUCIBCdy+VCpYiX8UNlegUxxhxlz6b4XRHMs1PD+TOrYJxwAiEAtItsSahujSNqqoSjuMXbv5ttgzurUa6vmIqrbLDTPWg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":49823411},"main":"backend/server.js","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"5f0a40dfa1fc01ad96cfe77cfc27de111bba9edc","scripts":{"dev":"node backend/server.js & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.js\" \"frontend/**/*.js\" \"scripts/**/*.js\" bin/farming --ignore-pattern \"backend/usage-history-scanner.generated.js\" --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"node scripts/run-tests.js","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run typecheck && npm run lint && npm test","start":"npm run build && node backend/server.js","predev":"npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","prepack":"FARMING_BASE_PATH=/farming npm run build","pretest":"npm run prepare:acp-vendor && npm run build:usage-history","prebuild":"node scripts/build-usage-history-scanner.js && node scripts/sync-ghostty-vendor.js && node scripts/prepare-codex-acp-vendor.js","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.js","typecheck":"tsc --noEmit && tsc -p tsconfig.usage.json","dev:backend":"node backend/server.js","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","deploy:remote":"./scripts/deploy.sh up","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:legacy":"npm run test:e2e:local","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js remote","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"node scripts/prepare-codex-acp-vendor.js --copy","build:usage-history":"node scripts/build-usage-history-scanner.js","sync:ghostty-vendor":"node scripts/sync-ghostty-vendor.js","test:e2e:playwright":"playwright test","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"node scripts/test-update-platforms.js","test:performance:audit":"node tests/performance/agent-usage-hotpath.js && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","docs:product:screenshots":"node scripts/capture-product-screenshots.js","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js remote","test:remote-terminal:chaos":"node scripts/smoke-remote-terminal-chaos.js","test:remote-terminal:smoke":"node scripts/smoke-remote-terminal.js","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"overrides":{"qs":"6.15.3","dompurify":"3.4.12","express@^4.22.2":{".":"$express","body-parser":"1.20.6"},"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.1","description":"Remote browser workspace for supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","ghostty-web":"^0.4.0","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","@agentclientprotocol/codex-acp":"1.1.4","@agentclientprotocol/claude-agent-acp":"0.59.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.18_1784847085775_0.3369452450889989","host":"s3://npm-registry-packages-npm-production"}},"2.2.19":{"name":"farming-code","version":"2.2.19","keywords":["ai-agent","coding-agent","codex","claude","remote-workspace","terminal"],"author":"","license":"MIT","_id":"farming-code@2.2.19","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming"},"dist":{"shasum":"c20390cbee792d41032aa86bc77607480a8947ba","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.19.tgz","fileCount":553,"integrity":"sha512-QOwalMB3/OsObMGnhfLTkswVsE2gDssW94UshaJv2NpicJqS2GEV07l8r13CXJYGBLUF6cKzCzMRlQpqv7CGmw==","signatures":[{"sig":"MEUCIQDiqS22sGcfA6tisky5AXSOr8XxUpWkOAIobICI2xWu+gIgW8bTwfc/l520aOKWdklMrLRtZuePlgppVEnsLQ+wULI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.19","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":49877645},"main":"backend/server.js","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"60acdf1868ca4c089d4eb70402fb8d67deb89f7b","scripts":{"dev":"node backend/server.js & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.js\" \"frontend/**/*.js\" \"scripts/**/*.js\" bin/farming --ignore-pattern \"backend/usage-history-scanner.generated.js\" --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"node scripts/run-tests.js","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run typecheck && npm run lint && npm test","start":"npm run build && node backend/server.js","predev":"npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","prepack":"FARMING_BASE_PATH=/farming npm run build","pretest":"npm run prepare:acp-vendor && npm run build:usage-history","prebuild":"node scripts/build-usage-history-scanner.js && node scripts/sync-ghostty-vendor.js && node scripts/prepare-codex-acp-vendor.js","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.js","typecheck":"tsc --noEmit && tsc -p tsconfig.usage.json","dev:backend":"node backend/server.js","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","deploy:remote":"./scripts/deploy.sh up","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:legacy":"npm run test:e2e:local","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js remote","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"node scripts/prepare-codex-acp-vendor.js --copy","build:usage-history":"node scripts/build-usage-history-scanner.js","sync:ghostty-vendor":"node scripts/sync-ghostty-vendor.js","test:e2e:playwright":"playwright test","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"node scripts/test-update-platforms.js","test:performance:audit":"node tests/performance/agent-usage-hotpath.js && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","docs:product:screenshots":"node scripts/capture-product-screenshots.js","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js remote","test:remote-terminal:chaos":"node scripts/smoke-remote-terminal-chaos.js","test:remote-terminal:smoke":"node scripts/smoke-remote-terminal.js","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"overrides":{"qs":"6.15.3","dompurify":"3.4.12","express@^4.22.2":{".":"$express","body-parser":"1.20.6"},"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.1","description":"Remote browser workspace for supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","ghostty-web":"^0.4.0","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","@agentclientprotocol/codex-acp":"1.1.4","@agentclientprotocol/claude-agent-acp":"0.59.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.19_1784902558722_0.5104575800820084","host":"s3://npm-registry-packages-npm-production"}},"2.2.20":{"name":"farming-code","version":"2.2.20","keywords":["ai-agent","coding-agent","codex","claude","remote-workspace","terminal"],"author":"","license":"MIT","_id":"farming-code@2.2.20","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming"},"dist":{"shasum":"86e9cc9bdc64b0f8f9f2664dc7eb450afc920ff8","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.20.tgz","fileCount":553,"integrity":"sha512-tJHt/4FeHOa0w3tislc+t+gYxw98XCGyN8grVjvGVlX7I0M7bxdlmGE6Db1Ll4//ONRXZ6l2UsPIpShhcBwtAA==","signatures":[{"sig":"MEUCIQCG0Ker+svCdvbUzJdNA1GP9vuNOJqc/U5lXPebicIiNAIgPBInD3aMseeYeiphNJJJQlAMBr1zUvxhl/Z28eGvwd8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.20","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":49883320},"main":"backend/server.js","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"ab8b3e836a3208f39e02a451b3804c522367f7d4","scripts":{"dev":"node backend/server.js & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.js\" \"frontend/**/*.js\" \"scripts/**/*.js\" bin/farming --ignore-pattern \"backend/usage-history-scanner.generated.js\" --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"node scripts/run-tests.js","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run typecheck && npm run lint && npm test","start":"npm run build && node backend/server.js","predev":"npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","prepack":"FARMING_BASE_PATH=/farming npm run build","pretest":"npm run prepare:acp-vendor && npm run build:usage-history","prebuild":"node scripts/build-usage-history-scanner.js && node scripts/sync-ghostty-vendor.js && node scripts/prepare-codex-acp-vendor.js","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.js","typecheck":"tsc --noEmit && tsc -p tsconfig.usage.json","dev:backend":"node backend/server.js","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","deploy:remote":"./scripts/deploy.sh up","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:legacy":"npm run test:e2e:local","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js remote","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"node scripts/prepare-codex-acp-vendor.js --copy","build:usage-history":"node scripts/build-usage-history-scanner.js","sync:ghostty-vendor":"node scripts/sync-ghostty-vendor.js","test:e2e:playwright":"playwright test","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"node scripts/test-update-platforms.js","test:performance:audit":"node tests/performance/agent-usage-hotpath.js && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","docs:product:screenshots":"node scripts/capture-product-screenshots.js","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js remote","test:remote-terminal:chaos":"node scripts/smoke-remote-terminal-chaos.js","test:remote-terminal:smoke":"node scripts/smoke-remote-terminal.js","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"overrides":{"qs":"6.15.3","dompurify":"3.4.12","express@^4.22.2":{".":"$express","body-parser":"1.20.6"},"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.1","description":"Remote browser workspace for supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","ghostty-web":"^0.4.0","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","@agentclientprotocol/codex-acp":"1.1.4","@agentclientprotocol/claude-agent-acp":"0.59.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.20_1784907510281_0.17583609861046923","host":"s3://npm-registry-packages-npm-production"}},"2.2.22":{"name":"farming-code","version":"2.2.22","keywords":["ai-agent","ai-agent-workspace","browser-terminal","claude-code","coding-agent","codex","codex-cli","developer-tools","farming-code","remote-workspace","self-hosted","terminal"],"author":"","license":"MIT","_id":"farming-code@2.2.22","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming"},"dist":{"shasum":"d6db223325430b2de883fa180c34b8bc4c2013c5","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.22.tgz","fileCount":554,"integrity":"sha512-BmSh84puXaB9cDFErMfmQQ9xv1pTwXYi8RCNCpCflO94OxAqWNa+m3UvO+4qM6+EXzG4Nb+j/SnY3rRkVhIDJA==","signatures":[{"sig":"MEQCICaOxbR6fb6hj39JIbI5xYdpd09revRtIUgFUue7qprBAiBYxdxdUyRLkPuvIfTGE2txrQRyS1vEEv8lAlHwP8YsnA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.22","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":50111228},"main":"backend/server.js","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"4556f9eec0f9e131884f492c49cc41f4444c2122","scripts":{"dev":"node backend/server.js & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.js\" \"frontend/**/*.js\" \"scripts/**/*.js\" bin/farming --ignore-pattern \"backend/usage-history-scanner.generated.js\" --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"node scripts/run-tests.js","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run typecheck && npm run lint && npm test","start":"npm run build && node backend/server.js","predev":"npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","prepack":"FARMING_BASE_PATH=/farming npm run build","pretest":"npm run prepare:acp-vendor && npm run build:usage-history","prebuild":"node scripts/build-usage-history-scanner.js && node scripts/sync-ghostty-vendor.js && node scripts/prepare-codex-acp-vendor.js","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.js","typecheck":"tsc --noEmit && tsc -p tsconfig.usage.json","dev:backend":"node backend/server.js","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","deploy:remote":"./scripts/deploy.sh up","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:legacy":"npm run test:e2e:local","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js remote","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"node scripts/prepare-codex-acp-vendor.js --copy","build:usage-history":"node scripts/build-usage-history-scanner.js","sync:ghostty-vendor":"node scripts/sync-ghostty-vendor.js","test:e2e:playwright":"playwright test","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"node scripts/test-update-platforms.js","test:performance:audit":"node tests/performance/agent-usage-hotpath.js && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","docs:product:screenshots":"node scripts/capture-product-screenshots.js","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js remote","test:remote-terminal:chaos":"node scripts/smoke-remote-terminal-chaos.js","test:remote-terminal:smoke":"node scripts/smoke-remote-terminal.js","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"overrides":{"qs":"6.15.3","dompurify":"3.4.12","express@^4.22.2":{".":"$express","body-parser":"1.20.6"},"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.1","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","ghostty-web":"^0.4.0","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","@agentclientprotocol/codex-acp":"1.1.4","@agentclientprotocol/claude-agent-acp":"0.59.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.22_1784994699576_0.4396737083382607","host":"s3://npm-registry-packages-npm-production"}},"2.2.23":{"name":"farming-code","version":"2.2.23","keywords":["ai-agent","ai-agent-workspace","browser-terminal","claude-code","coding-agent","codex","codex-cli","developer-tools","farming-code","remote-workspace","self-hosted","terminal"],"author":"","license":"MIT","_id":"farming-code@2.2.23","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming"},"dist":{"shasum":"be064df6e5bb591b45915a743bf1623612569914","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.23.tgz","fileCount":554,"integrity":"sha512-7s04EKVfTbUqMJkzBZVy5DoPcDSLtjQ+u1p+2oL7a8Np3azMMs6J92283BHsNCzqw+TaP25sv7wRtmrV6cIg9w==","signatures":[{"sig":"MEYCIQDx6Uyhnssj99a43RpX/slKCDDc9UIERffo5kiIytsJPAIhAL6Q5oWMJvwCp8dYpjVdbUux3nu0ln+QWbgYEcrOSO2Z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.23","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":50112717},"main":"backend/server.js","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"8335593481b19dd2550150693b581dfb68997f4b","scripts":{"dev":"node backend/server.js & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.js\" \"frontend/**/*.js\" \"scripts/**/*.js\" bin/farming --ignore-pattern \"backend/usage-history-scanner.generated.js\" --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"node scripts/run-tests.js","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run typecheck && npm run lint && npm test","start":"npm run build && node backend/server.js","predev":"npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","prepack":"FARMING_BASE_PATH=/farming npm run build","pretest":"npm run prepare:acp-vendor && npm run build:usage-history","prebuild":"node scripts/build-usage-history-scanner.js && node scripts/sync-ghostty-vendor.js && node scripts/prepare-codex-acp-vendor.js","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.js","typecheck":"tsc --noEmit && tsc -p tsconfig.usage.json","dev:backend":"node backend/server.js","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","deploy:remote":"./scripts/deploy.sh up","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:legacy":"npm run test:e2e:local","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js remote","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"node scripts/prepare-codex-acp-vendor.js --copy","build:usage-history":"node scripts/build-usage-history-scanner.js","sync:ghostty-vendor":"node scripts/sync-ghostty-vendor.js","test:e2e:playwright":"playwright test","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"node scripts/test-update-platforms.js","test:performance:audit":"node tests/performance/agent-usage-hotpath.js && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","docs:product:screenshots":"node scripts/capture-product-screenshots.js","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js remote","test:remote-terminal:chaos":"node scripts/smoke-remote-terminal-chaos.js","test:remote-terminal:smoke":"node scripts/smoke-remote-terminal.js","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"overrides":{"qs":"6.15.3","dompurify":"3.4.12","express@^4.22.2":{".":"$express","body-parser":"1.20.6"},"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.1","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","ghostty-web":"^0.4.0","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","@agentclientprotocol/codex-acp":"1.1.4","@agentclientprotocol/claude-agent-acp":"0.59.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.23_1784996943536_0.0943270626132442","host":"s3://npm-registry-packages-npm-production"}},"2.2.27":{"name":"farming-code","version":"2.2.27","keywords":["ai-agent","ai-agent-workspace","browser-terminal","claude-code","coding-agent","codex","codex-cli","developer-tools","farming-code","remote-workspace","self-hosted","terminal"],"author":"","license":"MIT","_id":"farming-code@2.2.27","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming"},"dist":{"shasum":"08f0bb4f55fa27610f167645d07db6c53edc06d8","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.27.tgz","fileCount":554,"integrity":"sha512-+EzzmJ+kkmIJmkRrfLhMbXnT3cVWAFdhv33OCAOHMpPMKOUvUnWmvzhB4AOkZHm4S2gt2alKEDFTgekekoqw7Q==","signatures":[{"sig":"MEQCIFbbrA3Iuu4aigT0hHaZD9PB8zAqHgaZ5Trch5uzUTDSAiB9U+hME3OlGpB6kT1iJiUzJFV4lr3IDOn50YKxwsNgBw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.27","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":50118432},"main":"backend/server.js","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"14727872d77eaf486725cade7b52336b7203d118","scripts":{"dev":"node backend/server.js & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.js\" \"frontend/**/*.js\" \"scripts/**/*.js\" bin/farming --ignore-pattern \"backend/usage-history-scanner.generated.js\" --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"node scripts/run-tests.js","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run typecheck && npm run lint && npm test","start":"npm run build && node backend/server.js","predev":"npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","prepack":"FARMING_BASE_PATH=/farming npm run build","pretest":"npm run prepare:acp-vendor && npm run build:usage-history","prebuild":"node scripts/build-usage-history-scanner.js && node scripts/sync-ghostty-vendor.js && node scripts/prepare-codex-acp-vendor.js","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.js","typecheck":"tsc --noEmit && tsc -p tsconfig.usage.json","dev:backend":"node backend/server.js","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","deploy:remote":"./scripts/deploy.sh up","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:legacy":"npm run test:e2e:local","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js remote","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"node scripts/prepare-codex-acp-vendor.js --copy","build:usage-history":"node scripts/build-usage-history-scanner.js","sync:ghostty-vendor":"node scripts/sync-ghostty-vendor.js","test:e2e:playwright":"playwright test","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"node scripts/test-update-platforms.js","test:performance:audit":"node tests/performance/agent-usage-hotpath.js && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","docs:product:screenshots":"node scripts/capture-product-screenshots.js","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js remote","test:remote-terminal:chaos":"node scripts/smoke-remote-terminal-chaos.js","test:remote-terminal:smoke":"node scripts/smoke-remote-terminal.js","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"overrides":{"qs":"6.15.3","dompurify":"3.4.12","express@^4.22.2":{".":"$express","body-parser":"1.20.6"},"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.1","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","ghostty-web":"^0.4.0","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","@agentclientprotocol/codex-acp":"1.1.4","@agentclientprotocol/claude-agent-acp":"0.59.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.27_1785001535132_0.570286610883701","host":"s3://npm-registry-packages-npm-production"}},"2.2.28":{"name":"farming-code","version":"2.2.28","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.28","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser"},"dist":{"shasum":"f0d9caffd2fb179648f656c41ff6a5eb12fe1d9f","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.28.tgz","fileCount":576,"integrity":"sha512-bR+jNjaAhc8ZnfkiNIZEBJw9GD8gEqdBWcNMDgaFW+P2KCLsDgkID+xZROfxDr6Ok/pw83IMemo8WBKNfczlVA==","signatures":[{"sig":"MEUCIQCWUQC5Nj+kxmegO5nJFuamyTG07ndLa/4xaxGVfRd2GQIgHkmgL8nnGCrdsaWFYU/1JGxBKvGWu+VcSLFV7kRGMKY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.28","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":50590154},"main":"backend/server.js","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"94e98d3cff2e52c94ebc3a70c9d25962983787c2","scripts":{"dev":"node backend/server.js & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.js\" \"frontend/**/*.js\" \"scripts/**/*.js\" bin/farming --ignore-pattern \"backend/usage-history-scanner.generated.js\" --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"node scripts/run-tests.js","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run typecheck && npm run lint && npm test","start":"npm run build && node backend/server.js","predev":"npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","prepack":"FARMING_BASE_PATH=/farming npm run build","pretest":"npm run prepare:acp-vendor && npm run build:usage-history","prebuild":"node scripts/build-usage-history-scanner.js && node scripts/sync-ghostty-vendor.js && node scripts/prepare-codex-acp-vendor.js","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.js","typecheck":"tsc --noEmit && tsc -p tsconfig.usage.json","dev:backend":"node backend/server.js","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","deploy:remote":"./scripts/deploy.sh up","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:legacy":"npm run test:e2e:local","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js remote","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"node scripts/prepare-codex-acp-vendor.js --copy","build:usage-history":"node scripts/build-usage-history-scanner.js","sync:ghostty-vendor":"node scripts/sync-ghostty-vendor.js","test:e2e:playwright":"playwright test","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"node scripts/test-update-platforms.js","test:performance:audit":"node tests/performance/agent-usage-hotpath.js && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","docs:product:screenshots":"node scripts/capture-product-screenshots.js","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js remote","test:remote-terminal:chaos":"node scripts/smoke-remote-terminal-chaos.js","test:remote-terminal:smoke":"node scripts/smoke-remote-terminal.js","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"overrides":{"qs":"6.15.3","dompurify":"3.4.12","express@^4.22.2":{".":"$express","body-parser":"1.20.6"},"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.1","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","ghostty-web":"^0.4.0","html2canvas":"^1.4.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","@modelcontextprotocol/sdk":"^1.29.0","@agentclientprotocol/codex-acp":"1.1.4","@agentclientprotocol/claude-agent-acp":"0.59.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.28_1785110137335_0.21357835917571788","host":"s3://npm-registry-packages-npm-production"}},"2.2.29":{"name":"farming-code","version":"2.2.29","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.29","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser"},"dist":{"shasum":"0298f8fce4e0188a51385bc380104ec55384386e","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.29.tgz","fileCount":584,"integrity":"sha512-KEzroCEtb1Qhq00GRQ4w2R1SU+X02+1Ll3CjaWPoyQlBRzJ3YxVdDYbuaJpxrdxgMjxGiiIGW4QDQHzBHKkIsw==","signatures":[{"sig":"MEYCIQDjaIbJ9Q4rGpL8ofZn27YN+OE8EzLOekAUoPddQkbQQgIhANIbL9RUL765wIXFOlIPJhheFEPe2/O0m7oNa6Kt6K2O","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.29","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":52597830},"main":"backend/server.js","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"609275e3893581a6b5be4639b88873eb8a73a79a","scripts":{"dev":"node backend/server.js & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.js\" \"frontend/**/*.js\" \"scripts/**/*.js\" bin/farming --ignore-pattern \"backend/usage-history-scanner.generated.js\" --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"node scripts/run-tests.js","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run typecheck && npm run lint && npm test","start":"npm run build && node backend/server.js","predev":"npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","prepack":"FARMING_BASE_PATH=/farming npm run build","pretest":"npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history","prebuild":"node scripts/build-usage-history-scanner.js && node scripts/sync-ghostty-vendor.js && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.js","typecheck":"tsc --noEmit && tsc -p tsconfig.usage.json","dev:backend":"node backend/server.js","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","deploy:remote":"./scripts/deploy.sh up","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:legacy":"npm run test:e2e:local","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js remote","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"node scripts/prepare-codex-acp-vendor.js --copy && node scripts/prepare-claude-acp-vendor.js --copy","build:usage-history":"node scripts/build-usage-history-scanner.js","sync:ghostty-vendor":"node scripts/sync-ghostty-vendor.js","test:e2e:playwright":"playwright test","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"node scripts/test-update-platforms.js","test:performance:audit":"node tests/performance/agent-usage-hotpath.js && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","docs:product:screenshots":"node scripts/capture-product-screenshots.js","prepare:runtime-manifest":"node scripts/build-runtime-dependency-manifest.js","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js remote","test:remote-terminal:chaos":"node scripts/smoke-remote-terminal-chaos.js","test:remote-terminal:smoke":"node scripts/smoke-remote-terminal.js","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"node backend/tests/test-acp-transcript-performance.js","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"overrides":{"qs":"6.15.3","dompurify":"3.4.12","express@^4.22.2":{".":"$express","body-parser":"1.20.6"},"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.1","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.19","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","ghostty-web":"^0.4.0","html2canvas":"^1.4.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@agentclientprotocol/codex-acp":"1.1.4","@agentclientprotocol/claude-agent-acp":"0.59.0"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.29_1785261005421_0.8456359501188244","host":"s3://npm-registry-packages-npm-production"}},"2.2.30":{"name":"farming-code","version":"2.2.30","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.30","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser"},"dist":{"shasum":"d0f781bf65f77658c6464bd866565516b41bae5c","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.30.tgz","fileCount":582,"integrity":"sha512-QAupTR///VSWO6dhQhLkb2OsIdPmvHsa3h9rTUvUT1O4EnBC0ZWvK8tVQKvL34i0JZSblHUGiZFCBl6B1f5QtA==","signatures":[{"sig":"MEUCIBOTAsF58t/HrUOwPk50GuHnB7qoKzK6pDt7mko52swmAiEAy1uMx3o0t0Vz8envKkdEqLdygCtdPztJ+3t3S4Bi9Xc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.30","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":52560510},"main":"backend/server.js","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"a472090cb51d286e49b22a07f768bce4d528d4ec","scripts":{"dev":"node backend/server.js & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.js\" \"frontend/**/*.js\" \"scripts/**/*.js\" bin/farming --ignore-pattern \"backend/usage-history-scanner.generated.js\" --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"node scripts/run-tests.js","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run typecheck && npm run lint && npm test","start":"npm run build && node backend/server.js","predev":"npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","prepack":"FARMING_BASE_PATH=/farming npm run build","pretest":"npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history","prebuild":"node scripts/build-usage-history-scanner.js && node scripts/sync-ghostty-vendor.js && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.js","typecheck":"tsc --noEmit && tsc -p tsconfig.usage.json","dev:backend":"node backend/server.js","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","deploy:remote":"./scripts/deploy.sh up","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:legacy":"npm run test:e2e:local","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e.js remote","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"node scripts/prepare-codex-acp-vendor.js --copy && node scripts/prepare-claude-acp-vendor.js --copy","build:usage-history":"node scripts/build-usage-history-scanner.js","sync:ghostty-vendor":"node scripts/sync-ghostty-vendor.js","test:e2e:playwright":"playwright test","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"node scripts/test-update-platforms.js","test:performance:audit":"node tests/performance/agent-usage-hotpath.js && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","docs:product:screenshots":"node scripts/capture-product-screenshots.js","prepare:runtime-manifest":"node scripts/build-runtime-dependency-manifest.js","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && node scripts/e2e-workspaces.js remote","test:remote-terminal:chaos":"node scripts/smoke-remote-terminal-chaos.js","test:remote-terminal:smoke":"node scripts/smoke-remote-terminal.js","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"node backend/tests/test-acp-transcript-performance.js","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"overrides":{"qs":"6.15.3","dompurify":"3.4.12","express@^4.22.2":{".":"$express","body-parser":"1.20.6"},"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.1","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.19","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","ghostty-web":"^0.4.0","html2canvas":"^1.4.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@agentclientprotocol/codex-acp":"1.1.4","@agentclientprotocol/claude-agent-acp":"0.59.0"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.30_1785293767952_0.723859006898413","host":"s3://npm-registry-packages-npm-production"}},"2.2.32":{"name":"farming-code","version":"2.2.32","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.32","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"8d77a399350dc915238abe0cc4e10269a2c89bcd","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.32.tgz","fileCount":595,"integrity":"sha512-cWlQdGppO5dC6egiB60j9B/Gd5vR8/jRcNAO90oojc+7Po5OrHZo9CxOyIIZIu0xvFvGmYD8beipf2A2LtSFgA==","signatures":[{"sig":"MEUCICCi2ntEF01lQc0FQGrS1t8wzRuyXUILi/GmJpsutQMXAiEAjutyQmwZxPtO+XhLQD0Btg9PNmlaUJW2N/yq4RgUr7M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.32","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":53150203},"main":"backend/server.cjs","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"7dad8963dec48b1f080193f79b06749fbb8cba7e","scripts":{"dev":"node backend/server.cjs & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/tests/test-*.ts\" \"frontend/**/*.js\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run typecheck && npm run lint && npm test","start":"npm run build && node backend/server.cjs","predev":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","prepack":"FARMING_BASE_PATH=/farming npm run build","pretest":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history","prebuild":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run sync:ghostty-vendor && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.usage.json","dev:backend":"node backend/server.cjs","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh up","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","sync:ghostty-vendor":"tsx scripts/sync-ghostty-vendor.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"overrides":{"qs":"6.15.3","dompurify":"3.4.12","express@^4.22.2":{".":"$express","body-parser":"1.20.6"},"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.19","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","extract-zip":"2.0.1","ghostty-web":"^0.4.0","html2canvas":"^1.4.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","@agentclientprotocol/codex-acp":"1.1.4","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.59.0"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.32_1785470914224_0.6213519779917851","host":"s3://npm-registry-packages-npm-production"}},"2.2.33":{"name":"farming-code","version":"2.2.33","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.33","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"354d242cfd5bf13768ac60c28eaba96e79c9e49e","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.33.tgz","fileCount":24028,"integrity":"sha512-Hr2K9Hrd1syZZmaocYybf/Z/+j9cHJ9uTvoJ0Gk2IQtDsvaLAOQdmJzc3uAUjtAV66EH44ugMCYmGygqa6qKOg==","signatures":[{"sig":"MEUCIE+jWx+iHfE5EwVM22qB9+ga5AFG6LSYmbEuhvWgEvMOAiEAv7eEVS7QY9n6liUHzT47QuZ80NofXalJufg1I0gOpzM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.33","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":366840127},"main":"backend/server.cjs","_from":"file:/home/runner/work/_temp/farming-npm-package/farming-code-2.2.33.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"5be9d3dc8055c346cb8c67b0e8390910bdb123d3","scripts":{"dev":"node backend/server.cjs & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/tests/test-*.ts\" \"frontend/**/*.js\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run typecheck && npm run lint && npm test","start":"npm run build && node backend/server.cjs","predev":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","prepack":"FARMING_BASE_PATH=/farming npm run build","pretest":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history","prebuild":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run sync:ghostty-vendor && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.usage.json","dev:backend":"node backend/server.cjs","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh up","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","sync:ghostty-vendor":"tsx scripts/sync-ghostty-vendor.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"_resolved":"/home/runner/work/_temp/farming-npm-package/farming-code-2.2.33.tgz","_integrity":"sha512-Hr2K9Hrd1syZZmaocYybf/Z/+j9cHJ9uTvoJ0Gk2IQtDsvaLAOQdmJzc3uAUjtAV66EH44ugMCYmGygqa6qKOg==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.19","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","extract-zip":"2.0.1","ghostty-web":"^0.4.0","html2canvas":"^1.4.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","@agentclientprotocol/codex-acp":"1.1.4","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.59.0"},"bundleDependencies":["@agentclientprotocol/sdk","@modelcontextprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","ansi-to-html","chokidar","compression","diff","express","extract-zip","ghostty-web","highlight.js","html2canvas","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","ripgrep","tar","ws","yaml","zod"],"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.33_1785488973648_0.501700679198676","host":"s3://npm-registry-packages-npm-production"}},"2.2.35":{"name":"farming-code","version":"2.2.35","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.35","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"aaa3908a3e38021b820341a054ec668233441dea","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.35.tgz","fileCount":23568,"integrity":"sha512-Db4OFaAuj+ZMGzECVxRDfoyBGISdcZeN3muZQBMUQB/6Xm4nH7emNLr6asszYAokqFukWhSAUJtGSxtD6LIkPg==","signatures":[{"sig":"MEUCIBM9RwwyHNa1jrZU0rlQBlLvvaKjvjkAiPRKSVVAzMXfAiEAwHPs6JVbzVU/rxR1toyhxFO1WTTIGBE76A3BOP0PuFI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.35","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":360463173},"main":"backend/server.cjs","_from":"file:/home/runner/work/_temp/farming-npm-package/farming-code-2.2.35.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"93866c4eaaa272cce81be7dbf498c5854e5f7e4a","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run typecheck && npm run lint && npm test","start":"npm run build && node bin/farming start --port 3000","predev":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","prepack":"FARMING_BASE_PATH=/farming npm run build","pretest":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history","prebuild":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh up","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"_resolved":"/home/runner/work/_temp/farming-npm-package/farming-code-2.2.35.tgz","_integrity":"sha512-Db4OFaAuj+ZMGzECVxRDfoyBGISdcZeN3muZQBMUQB/6Xm4nH7emNLr6asszYAokqFukWhSAUJtGSxtD6LIkPg==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.19","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","extract-zip":"2.0.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.1.4","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.59.0"},"bundleDependencies":["@agentclientprotocol/sdk","@modelcontextprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","extract-zip","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","ripgrep","tar","ws","yaml","zod"],"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.35_1785594329174_0.9620414228604734","host":"s3://npm-registry-packages-npm-production"}},"2.2.36":{"name":"farming-code","version":"2.2.36","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.36","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"f11a7b44bdfc35aff9004970b08bdca6eeebc35b","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.36.tgz","fileCount":23568,"integrity":"sha512-mJV4fQTqIfQtb5xQI2SD+ehVCm1Bn4S8wBUqubkjV/rjBtwRngkcBtUF58HfPraJ/kn17XDN8s1Qq0vt0yTpag==","signatures":[{"sig":"MEUCIGogm+2bkqxlEkpINd0AmQsfO9FP0h62uM7gLwsWIYXGAiEAoH+Y8lwjY2ilbrDnW/M1tQYn/kGxpsGArUP69Dcgc/E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.36","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":360472106},"main":"backend/server.cjs","_from":"file:/home/runner/work/_temp/farming-npm-package/farming-code-2.2.36.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"6a9c059a8c9869ba0515011306b22bdb732b68f0","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run typecheck && npm run lint && npm test","start":"npm run build && node bin/farming start --port 3000","predev":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","prepack":"FARMING_BASE_PATH=/farming npm run build","pretest":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history","prebuild":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh up","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"_resolved":"/home/runner/work/_temp/farming-npm-package/farming-code-2.2.36.tgz","_integrity":"sha512-mJV4fQTqIfQtb5xQI2SD+ehVCm1Bn4S8wBUqubkjV/rjBtwRngkcBtUF58HfPraJ/kn17XDN8s1Qq0vt0yTpag==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","extract-zip":"2.0.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.1.4","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.59.0"},"bundleDependencies":["@agentclientprotocol/sdk","@modelcontextprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","extract-zip","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","ripgrep","tar","ws","yaml","zod"],"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.36_1785610600560_0.8428687201430405","host":"s3://npm-registry-packages-npm-production"}},"2.2.37":{"name":"farming-code","version":"2.2.37","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.37","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"89b7e208a585a7d76cd4e72b49534cec4d17a8c2","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.37.tgz","fileCount":23568,"integrity":"sha512-Bj1pG1TR14Bd16Qo1j/gByIiE/wVL7RcFaIXmqWEEpJzmD3KO7Id5jGrZsA7KV9xTQbK7Ls4e9GOXnvwMjdoSQ==","signatures":[{"sig":"MEQCIE+Eu30GqtcO7gKk5WlkhNnU2w099PIH5hGMPCiCxupgAiBk/DUd4Zc2SKPzgCVpN2Oj2INPEY7a2f8lFEJctxyxdg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.37","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":360472158},"main":"backend/server.cjs","_from":"file:/home/runner/work/_temp/farming-npm-package/farming-code-2.2.37.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"f7b17abd44d50f43e1b7e85d4d34e078e01745a1","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run typecheck && npm run lint && npm test","start":"npm run build && node bin/farming start --port 3000","predev":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","prepack":"FARMING_BASE_PATH=/farming npm run build","pretest":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history","prebuild":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh up","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"_resolved":"/home/runner/work/_temp/farming-npm-package/farming-code-2.2.37.tgz","_integrity":"sha512-Bj1pG1TR14Bd16Qo1j/gByIiE/wVL7RcFaIXmqWEEpJzmD3KO7Id5jGrZsA7KV9xTQbK7Ls4e9GOXnvwMjdoSQ==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","extract-zip":"2.0.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.1.4","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.59.0"},"bundleDependencies":["@agentclientprotocol/sdk","@modelcontextprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","extract-zip","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","ripgrep","tar","ws","yaml","zod"],"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.37_1785616528145_0.09531134823883014","host":"s3://npm-registry-packages-npm-production"}},"2.2.38":{"name":"farming-code","version":"2.2.38","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.38","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"2f92b1b8b2044be44bf0b6ecfef4da23c6df442a","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.38.tgz","fileCount":23699,"integrity":"sha512-UhlZyspWSDXx8XK9fBGPNBZPifx4tM3OqBUxVfv9r2VTbhUP4vR9VqSpTsWJdi/WHEen1mb44IadZUDwU+M7dA==","signatures":[{"sig":"MEUCIE3fs8JUON+YsiyJkj/in8tqv7hwdGG5muAxkulsMwxFAiEAj2stdBxwQjL+WkZjK0NWmhO9Ea+iVEkf2P3196hkoik=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.38","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":361663053},"main":"backend/server.cjs","_from":"file:/home/runner/work/_temp/farming-npm-package/farming-code-2.2.38.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"82890062ff4ce7559781a96038c8253aeab5ffff","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build","pretest":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history","prebuild":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","postinstall":"node scripts/prepare-installed-runtime.cjs","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh up","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"_resolved":"/home/runner/work/_temp/farming-npm-package/farming-code-2.2.38.tgz","_integrity":"sha512-UhlZyspWSDXx8XK9fBGPNBZPifx4tM3OqBUxVfv9r2VTbhUP4vR9VqSpTsWJdi/WHEen1mb44IadZUDwU+M7dA==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","extract-zip":"2.0.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","@modelcontextprotocol/sdk":"^1.29.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.1.4","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.59.0"},"bundleDependencies":["@agentclientprotocol/sdk","@modelcontextprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","extract-zip","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","ripgrep","tar","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","zod"],"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.38_1785706995117_0.23638339191692803","host":"s3://npm-registry-packages-npm-production"}},"2.2.39":{"name":"farming-code","version":"2.2.39","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.39","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"96bd40e5232c1b5e81ad71a805914cfc5fb06082","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.39.tgz","fileCount":23699,"integrity":"sha512-OFaXC3X2a37qlxMpUQfhmknQMwDVGHyTqwSBJ1urogoAQxKRUV3UK/jcfBVkyASosgEwwNXhOkrUGp3T4giqaQ==","signatures":[{"sig":"MEQCIDORrz1ZPYNlGuihPkr/q4qBShoQgMOapF895rWbGhwFAiAC/0c1I+ySn40HCRWFy3ryhL5vrfWkwtTJKQMv9tENkw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.39","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":361688090},"main":"backend/server.cjs","_from":"file:/home/runner/work/_temp/farming-npm-package/farming-code-2.2.39.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"825412db68819940af46a1e8fa7ec067601ca17b","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build","pretest":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history","prebuild":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","postinstall":"node scripts/prepare-installed-runtime.cjs","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh up","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"_resolved":"/home/runner/work/_temp/farming-npm-package/farming-code-2.2.39.tgz","_integrity":"sha512-OFaXC3X2a37qlxMpUQfhmknQMwDVGHyTqwSBJ1urogoAQxKRUV3UK/jcfBVkyASosgEwwNXhOkrUGp3T4giqaQ==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","extract-zip":"2.0.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","@modelcontextprotocol/sdk":"^1.29.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.1.4","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.59.0"},"bundleDependencies":["@agentclientprotocol/sdk","@modelcontextprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","extract-zip","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","ripgrep","tar","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","zod"],"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.39_1785744275390_0.34551364517904193","host":"s3://npm-registry-packages-npm-production"}},"2.2.40":{"name":"farming-code","version":"2.2.40","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.40","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"0880d333da3e224824f8e43fbf1886c9a5c27c2c","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.40.tgz","fileCount":23702,"integrity":"sha512-YpHFk5RS4K82pWkH+VOedqYxH3OaJK1i443ApvsnVpoZwfRmAEe1QXPP9Ey1vYl5Lqqbk4lofLfjIuVxbwWM0A==","signatures":[{"sig":"MEUCIQCBEvLN0Xo0sO0dCA5DY06AI4ingk1M4es85jaRAXqDBwIgaC//TaM3hCizzilh6IeTQFuQUnDnIk4Wqoqqlows+ww=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.40","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":361769727},"main":"backend/server.cjs","_from":"file:/home/runner/work/_temp/farming-npm-package/farming-code-2.2.40.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"b52fef46f575eed9993910829169505c4e5c9965","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build","pretest":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history","prebuild":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","postinstall":"node scripts/prepare-installed-runtime.cjs","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh up","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"_resolved":"/home/runner/work/_temp/farming-npm-package/farming-code-2.2.40.tgz","_integrity":"sha512-YpHFk5RS4K82pWkH+VOedqYxH3OaJK1i443ApvsnVpoZwfRmAEe1QXPP9Ey1vYl5Lqqbk4lofLfjIuVxbwWM0A==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","extract-zip":"2.0.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","@modelcontextprotocol/sdk":"^1.29.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.1.4","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.59.0"},"bundleDependencies":["@agentclientprotocol/sdk","@modelcontextprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","extract-zip","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","ripgrep","tar","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","zod"],"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.40_1785780359408_0.5262387987305488","host":"s3://npm-registry-packages-npm-production"}},"2.2.41":{"name":"farming-code","version":"2.2.41","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.41","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"869da20849d92920e91b20532360aba8c7f21174","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.41.tgz","fileCount":20917,"integrity":"sha512-53hqlFwTNxiESzw26MRibFPH0weU6hrWI+2jzl7OO5OhZkodgJjecBoxkB+WBrub/C32nUEoajzKqUKZYi6XVg==","signatures":[{"sig":"MEYCIQD+Z4xmY1TgUsiY9Uwg784oigcoeBeu+Wuik3zs+wv+HAIhAL4Yh1D7Y/w2A0DHxtEZrMrqEXnEVkk7tLJzZXmdgXvy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.41","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":351386666},"main":"backend/server.cjs","_from":"file:/home/runner/work/_temp/farming-npm-package/farming-code-2.2.41.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"89ec33a07a570fffb0c585de9daedc7ef5993167","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build","pretest":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history","prebuild":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","postinstall":"node scripts/prepare-installed-runtime.cjs","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh up","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"_resolved":"/home/runner/work/_temp/farming-npm-package/farming-code-2.2.41.tgz","_integrity":"sha512-53hqlFwTNxiESzw26MRibFPH0weU6hrWI+2jzl7OO5OhZkodgJjecBoxkB+WBrub/C32nUEoajzKqUKZYi6XVg==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","extract-zip":"2.0.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.1.4","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.59.0"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","extract-zip","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","ripgrep","tar","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","zod"],"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.41_1786007908234_0.7099187774007627","host":"s3://npm-registry-packages-npm-production"}},"2.2.43":{"name":"farming-code","version":"2.2.43","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.43","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"0b684622ee0aa73cd5b6bd732ffcf34f8c105c41","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.43.tgz","fileCount":20917,"integrity":"sha512-imKyNZ/Lm6gS6A2jqD6ZKFfM0ovzGqCFNcNXuhMWkvtRcIYqAReDea+3PYu4XfBV34fRt1HAcPL6t3pdqI4dSw==","signatures":[{"sig":"MEQCIGAzhjoKjMrVHbuxNW7ZUxHayCkSoyretAPi4FqGduC5AiA/F1qckeKDWaElsF1ZzJBwVi9gRkr4mqoD672Li390TA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.43","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":351386666},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.43.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"aacba56b35dbcf18683703ab33af875bea6a44ea","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build","pretest":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history","prebuild":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","postinstall":"node scripts/prepare-installed-runtime.cjs","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh up","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.43.tgz","_integrity":"sha512-imKyNZ/Lm6gS6A2jqD6ZKFfM0ovzGqCFNcNXuhMWkvtRcIYqAReDea+3PYu4XfBV34fRt1HAcPL6t3pdqI4dSw==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","extract-zip":"2.0.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.1.4","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.59.0"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","extract-zip","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","ripgrep","tar","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","zod"],"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.43_1786016057859_0.07395678936999506","host":"s3://npm-registry-packages-npm-production"}},"2.2.45":{"name":"farming-code","version":"2.2.45","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.45","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"c030ee8a1be7bd04c58b51a61296a69a0260e8eb","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.45.tgz","fileCount":20917,"integrity":"sha512-Yo0bRLNCUIfA5CSgeQpcQNGuqamLXPzhrwkAAVsOVnz5//Id9R02xiAYQtu4oh65WOx7qnM8GXyo7qwqwuzBnQ==","signatures":[{"sig":"MEUCIQDczcQ4lxPSP6Qqikfexve03FGgonREepR2DMNkJvveDwIgNj8o/6bXiGsKux/U3gmYenrcKaDRUIxCBncN3sQMWHs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.45","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":351387040},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.45.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"45b7401eeb426d30e227e0be9a02221105649905","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build","pretest":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history","prebuild":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","postinstall":"node scripts/prepare-installed-runtime.cjs","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh up","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.45.tgz","_integrity":"sha512-Yo0bRLNCUIfA5CSgeQpcQNGuqamLXPzhrwkAAVsOVnz5//Id9R02xiAYQtu4oh65WOx7qnM8GXyo7qwqwuzBnQ==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","extract-zip":"2.0.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.1.4","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.59.0"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","extract-zip","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","ripgrep","tar","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","zod"],"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.45_1786018388101_0.703639040863647","host":"s3://npm-registry-packages-npm-production"}},"2.2.46":{"name":"farming-code","version":"2.2.46","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.46","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"f0f78173c447a55a5cb7a33c8f3b45009771a929","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.46.tgz","fileCount":20917,"integrity":"sha512-cQUN3tm/W/xggo/a0iEjhH3e/BOU8zRF46HSscxvd++SeRiXsBnMkz0BViK976UHpVeYUh7+YLN11FN7SUCaqw==","signatures":[{"sig":"MEYCIQCbIAxwgJVj1K3qzcxXLiAIdG3JtU+iUQySGlVVpwY4NgIhAM9aLxzCqAeLjdoMmlVnzVd9bCulvwJYuky3Xj1a0Zzq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.46","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":351387040},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.46.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"26ac1f2043e2e3662d8214e451dd0abd507e3032","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build","pretest":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history","prebuild":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","postinstall":"node scripts/prepare-installed-runtime.cjs","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh up","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.46.tgz","_integrity":"sha512-cQUN3tm/W/xggo/a0iEjhH3e/BOU8zRF46HSscxvd++SeRiXsBnMkz0BViK976UHpVeYUh7+YLN11FN7SUCaqw==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","extract-zip":"2.0.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.1.4","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.59.0"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","extract-zip","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","ripgrep","tar","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","zod"],"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.46_1786019933469_0.9317858315058527","host":"s3://npm-registry-packages-npm-production"}},"2.2.47":{"name":"farming-code","version":"2.2.47","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.47","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"9ffbcd67f730ebdeae40794e0bd96331cc43ef8b","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.47.tgz","fileCount":20918,"integrity":"sha512-T1sxYFc4i8iNjr6XQIFfwQGg35D1Ea1VDKWQYXhIELvsUGS4b46I9vd+LH13S36JPoNRBJh4KZqgVjJggN4qWA==","signatures":[{"sig":"MEYCIQDuLxJQguIi8lTbc1hNRO1/scF6Io2ve+Rv7dox3++ThAIhAP/O/neWqeMi4mdLBmPAIPLXzzLU2eJwQtyAPc/S5qo5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.47","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":351398703},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.47.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"75506069e41343fc47fdaf91e6aff1ed1d3ed198","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build","pretest":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history","prebuild":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","postinstall":"node scripts/prepare-installed-runtime.cjs","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh up","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh up --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-composite","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:codex-ui:smoke":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-smoke","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.47.tgz","_integrity":"sha512-T1sxYFc4i8iNjr6XQIFfwQGg35D1Ea1VDKWQYXhIELvsUGS4b46I9vd+LH13S36JPoNRBJh4KZqgVjJggN4qWA==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.0","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","extract-zip":"2.0.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.1.4","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.59.0"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","extract-zip","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","ripgrep","tar","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","zod"],"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.47_1786059189119_0.3026047958782734","host":"s3://npm-registry-packages-npm-production"}},"2.2.48":{"name":"farming-code","version":"2.2.48","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.48","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"7df005a4bf0c2f6dcc9f54f2c0afb7d0080161a2","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.48.tgz","fileCount":20920,"integrity":"sha512-FYlG/Z7ciYWlmghpq85WvpKRBz3UCQgGzPB2N03XtvFLJ+vnyGer7cEGAgSTg3vtCd3+pvf6HB8QsE6X9q2E0g==","signatures":[{"sig":"MEUCICuUkZk0vG87rpsTyNtheeoc780e6BYB1y95u/iNGiF2AiEAvn2yyWyyfCuR++q50TNh109IjhBEMwhOdT4H4HL+wdw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.48","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":351534291},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.48.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"ed249e53d7afd1195b3785e7f71a52d5b352b35d","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build","pretest":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history","prebuild":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","postinstall":"node scripts/prepare-installed-runtime.cjs","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh deploy","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh deploy --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-composite","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:codex-ui:smoke":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-smoke","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.48.tgz","_integrity":"sha512-FYlG/Z7ciYWlmghpq85WvpKRBz3UCQgGzPB2N03XtvFLJ+vnyGer7cEGAgSTg3vtCd3+pvf6HB8QsE6X9q2E0g==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.1","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","extract-zip":"2.0.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.2.1","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.1.4","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.59.0"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","extract-zip","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","ripgrep","tar","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","zod"],"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.48_1786186651040_0.999565404956483","host":"s3://npm-registry-packages-npm-production"}},"2.2.49":{"name":"farming-code","version":"2.2.49","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.49","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"d52c6e4063f5c5e8b45a25e56b61c3c69dc4425b","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.49.tgz","fileCount":20806,"integrity":"sha512-9JZAy970wKWUk9a3jrOe2e4QuzvDMDbotM7P/f6eF2iPAH992ix/oLfzIVH3syJyxhAtVp9+yPcmBrjTuMBJmw==","signatures":[{"sig":"MEYCIQDt03lYv9O7UTSOa2loe6BCbi248Rc0OPNmmedQfAQuxAIhALM3O/+vTmRjcPY3/BrVpfYN0M9y6Zeb04chSmJ1Q+Nz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.49","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":437307018},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.49.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"0cf5266bd216439ede2c435c0247651e4ae991c9","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build && npm run prepare:packaged-runtimes","pretest":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history","prebuild":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh deploy","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh deploy --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","prepare:packaged-runtimes":"tsx scripts/prepare-packaged-runtimes.ts","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-composite","release:dependencies:check":"node scripts/check-release-managed-dependency-updates.mjs","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:codex-ui:smoke":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-smoke","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.49.tgz","_integrity":"sha512-9JZAy970wKWUk9a3jrOe2e4QuzvDMDbotM7P/f6eF2iPAH992ix/oLfzIVH3syJyxhAtVp9+yPcmBrjTuMBJmw==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.1","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","extract-zip":"2.0.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.3.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.1.14","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.66.0"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","extract-zip","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","ripgrep","tar","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","zod"],"optionalDependencies":{"@openai/codex-linux-x64":"npm:@openai/codex@0.147.0-linux-x64","@openai/codex-win32-x64":"npm:@openai/codex@0.147.0-win32-x64","@openai/codex-darwin-x64":"npm:@openai/codex@0.147.0-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.147.0-linux-arm64","@openai/codex-win32-arm64":"npm:@openai/codex@0.147.0-win32-arm64","@openai/codex-darwin-arm64":"npm:@openai/codex@0.147.0-darwin-arm64","@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.220","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.220","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.220","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.220","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.220","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.220","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.220","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.220"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.49_1786195148452_0.37590400838733373","host":"s3://npm-registry-packages-npm-production"}},"2.2.50":{"name":"farming-code","version":"2.2.50","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.50","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"cb2dc610955664ee4c12fa163780ff4198a2bb54","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.50.tgz","fileCount":20892,"integrity":"sha512-WuhmnHXHVZOYkVJBWudMMMzJMQWqGjonI7ehGrHYfLSquXK2uMYt1lXWYi7F0Frnv6HY8NdrL5B+WF9LViYxyA==","signatures":[{"sig":"MEUCIDsQUMO8n8j31lylurYPvZJP/reYdC8+dDjFEf6UkvvxAiEA14qR4C0FH/1StoZFCAuehYcPbi9eG0bg06OwbiPtc+Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.50","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":437740844},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.50.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"f28b3efc593929fdda66ac4084d150dc57b3dc50","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run test:behavior:contracts && npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build && npm run prepare:packaged-runtimes","pretest":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history","restart":"npm run stop:all && FARMING_FORCE_ACP_HOST_RESTART=1 npm start","prebuild":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh deploy","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","test:behavior":"npm run test:behavior:contracts && npm run test:behavior:node && npm run test:behavior:e2e","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","test:update:npm":"npm run build:backend-runtime && node --test backend/tests/test-npm-update-helper.ts","pretest:behavior":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:runtime-manifest","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","test:behavior:e2e":"FARMING_E2E_REAL_CODEX=0 FARMING_E2E_FAKE_EXECUTABLES=1 FARMING_E2E_FAKE_ACP_AGENT=1 tsx scripts/run-behavior-e2e.ts","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy","test:behavior:node":"tsx scripts/run-behavior-node-tests.ts","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh deploy --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","generate:appearance-css":"tsx scripts/generate-code-appearance-css.ts","test:behavior:contracts":"tsx scripts/check-behavior-contracts.ts && tsx scripts/check-source-inspection-contracts.ts","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","prepare:packaged-runtimes":"tsx scripts/prepare-packaged-runtimes.ts","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-composite","release:dependencies:check":"node scripts/check-release-managed-dependency-updates.mjs","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:codex-ui:smoke":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-smoke","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.50.tgz","_integrity":"sha512-WuhmnHXHVZOYkVJBWudMMMzJMQWqGjonI7ehGrHYfLSquXK2uMYt1lXWYi7F0Frnv6HY8NdrL5B+WF9LViYxyA==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","express":"^4.22.2","mermaid":"^11.16.1","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","extract-zip":"2.0.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.3.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.2.0","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.66.0"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","extract-zip","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","ripgrep","tar","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","zod"],"optionalDependencies":{"@openai/codex-linux-x64":"npm:@openai/codex@0.147.0-linux-x64","@openai/codex-win32-x64":"npm:@openai/codex@0.147.0-win32-x64","@openai/codex-darwin-x64":"npm:@openai/codex@0.147.0-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.147.0-linux-arm64","@openai/codex-win32-arm64":"npm:@openai/codex@0.147.0-win32-arm64","@openai/codex-darwin-arm64":"npm:@openai/codex@0.147.0-darwin-arm64","@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.220","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.220","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.220","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.220","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.220","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.220","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.220","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.220"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.50_1786551948098_0.5905112829140506","host":"s3://npm-registry-packages-npm-production"}},"2.2.51":{"name":"farming-code","version":"2.2.51","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.51","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"5f4bcd286887a15299bb064317d8862bb1c8bf59","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.51.tgz","fileCount":20887,"integrity":"sha512-iYnbdcgoLEG6LL10vWp/MvrtcNx6ImD3uAsNnuKKd06oJrm7Ttt7l9BgH2U/48Z6VHU78ejvG49Hp23j+nZCkQ==","signatures":[{"sig":"MEUCIQDBb3iM9T84VR1fieFjc35aVea2PZDgCjaEEX8e3cuHogIgQ2AH3Zc0PFZFeER28i7uqp9HX63IHQoT0gWl5humMao=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.51","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":438705634},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.51.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"8fae91752fdbc566a3911b727e506338012d76c4","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run test:behavior:contracts && npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build && npm run prepare:packaged-runtimes","pretest":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history","restart":"npm run stop:all && FARMING_FORCE_ACP_HOST_RESTART=1 npm start","prebuild":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh deploy","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","test:behavior":"npm run test:behavior:contracts && npm run test:behavior:node && npm run test:behavior:e2e","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","test:update:npm":"npm run build:backend-runtime && node --test backend/tests/test-npm-update-helper.ts","pretest:behavior":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:runtime-manifest","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","test:behavior:e2e":"FARMING_E2E_REAL_CODEX=0 FARMING_E2E_FAKE_EXECUTABLES=1 FARMING_E2E_FAKE_ACP_AGENT=1 tsx scripts/run-behavior-e2e.ts","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy && tsx scripts/prepare-pi-acp-vendor.ts --copy","test:behavior:node":"tsx scripts/run-behavior-node-tests.ts","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh deploy --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","generate:appearance-css":"tsx scripts/generate-code-appearance-css.ts","test:behavior:contracts":"tsx scripts/check-behavior-contracts.ts && tsx scripts/check-source-inspection-contracts.ts","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","prepare:packaged-runtimes":"tsx scripts/prepare-packaged-runtimes.ts","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-composite","release:dependencies:check":"node scripts/check-release-managed-dependency-updates.mjs","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","sync:openclaw-browser-extension":"node scripts/sync-openclaw-browser-extension.mjs","test:pre-release:codex-ui:smoke":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-smoke","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.51.tgz","_integrity":"sha512-iYnbdcgoLEG6LL10vWp/MvrtcNx6ImD3uAsNnuKKd06oJrm7Ttt7l9BgH2U/48Z6VHU78ejvG49Hp23j+nZCkQ==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","yauzl":"3.4.0","express":"^4.22.2","mermaid":"^11.16.1","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.3.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","pi-acp":"0.0.33","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.3.0","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.68.0"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","ripgrep","tar","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","yauzl","zod"],"optionalDependencies":{"@openai/codex-linux-x64":"npm:@openai/codex@0.147.0-linux-x64","@openai/codex-win32-x64":"npm:@openai/codex@0.147.0-win32-x64","@openai/codex-darwin-x64":"npm:@openai/codex@0.147.0-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.147.0-linux-arm64","@openai/codex-win32-arm64":"npm:@openai/codex@0.147.0-win32-arm64","@openai/codex-darwin-arm64":"npm:@openai/codex@0.147.0-darwin-arm64","@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.232"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.51_1786738857713_0.8437009206641208","host":"s3://npm-registry-packages-npm-production"}},"2.2.52":{"name":"farming-code","version":"2.2.52","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.52","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"0032daf6e9e4645dd3de7f5942bdfbabddcd3263","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.52.tgz","fileCount":20887,"integrity":"sha512-73cOG8sUENvShtU6Lx9lbcNZntwqKVv16tYMaeLmV+BhutvPCj1mrt+SYLJEDbsUgWAe7vGEom9M7tHPgYw2wg==","signatures":[{"sig":"MEQCIGLC7+wXR0oOaVZXsUU9pmuIERc9CRFvmOd2j43F+GaXAiBdBJF4kM1YQfqMFZ6aB4H+kxF0BqJAO6Tn+8Ljq4UVQw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.52","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":439395419},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.52.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"17212c31c2c661b6c539fc2737b91c9a6ea85c26","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run test:behavior:contracts && npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build && npm run prepare:packaged-runtimes","pretest":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history","restart":"npm run stop:all && FARMING_FORCE_ACP_HOST_RESTART=1 npm start","prebuild":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh deploy","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","test:behavior":"npm run test:behavior:contracts && npm run test:behavior:node && npm run test:behavior:e2e","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","test:update:npm":"npm run build:backend-runtime && node --test backend/tests/test-npm-update-helper.ts","pretest:behavior":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:runtime-manifest","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","test:behavior:e2e":"FARMING_E2E_REAL_CODEX=0 FARMING_E2E_FAKE_EXECUTABLES=1 FARMING_E2E_FAKE_ACP_AGENT=1 tsx scripts/run-behavior-e2e.ts","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy && tsx scripts/prepare-pi-acp-vendor.ts --copy","test:behavior:node":"tsx scripts/run-behavior-node-tests.ts","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh deploy --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","generate:appearance-css":"tsx scripts/generate-code-appearance-css.ts","test:behavior:contracts":"tsx scripts/check-behavior-contracts.ts && tsx scripts/check-source-inspection-contracts.ts","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","prepare:packaged-runtimes":"tsx scripts/prepare-packaged-runtimes.ts","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-composite","release:dependencies:check":"node scripts/check-release-managed-dependency-updates.mjs","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","sync:openclaw-browser-extension":"node scripts/sync-openclaw-browser-extension.mjs","test:pre-release:codex-ui:smoke":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-smoke","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.52.tgz","_integrity":"sha512-73cOG8sUENvShtU6Lx9lbcNZntwqKVv16tYMaeLmV+BhutvPCj1mrt+SYLJEDbsUgWAe7vGEom9M7tHPgYw2wg==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","yauzl":"3.4.0","express":"^4.22.2","mermaid":"^11.16.1","ripgrep":"^0.3.1","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.3.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","pi-acp":"0.0.33","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.4.0","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.69.0"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","ripgrep","tar","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","yauzl","zod"],"optionalDependencies":{"@openai/codex-linux-x64":"npm:@openai/codex@0.147.0-linux-x64","@openai/codex-win32-x64":"npm:@openai/codex@0.147.0-win32-x64","@openai/codex-darwin-x64":"npm:@openai/codex@0.147.0-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.147.0-linux-arm64","@openai/codex-win32-arm64":"npm:@openai/codex@0.147.0-win32-arm64","@openai/codex-darwin-arm64":"npm:@openai/codex@0.147.0-darwin-arm64","@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.232"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.52_1786880654778_0.26532846382127184","host":"s3://npm-registry-packages-npm-production"}},"2.2.53":{"name":"farming-code","version":"2.2.53","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.53","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"5694eb025c7267b4ddd1464baecf6367ad2bf3a3","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.53.tgz","fileCount":20887,"integrity":"sha512-RfXHAU9ZfUHLsxASEANw0Lx2wqoqhtUW1MkxZOZBARiQya7ZwM1jihae+8gPW4fVdte7CTPGEFA23Q6ma3n2oQ==","signatures":[{"sig":"MEUCIQDFUnEjEJUBuUqun9gdRUEbPG3/zXQs0RvBCWJ39c8NiAIgCup/LrsNSAjArXQokZWQEMBxMJizuGuPwC/EDGRifqg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.53","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":439454786},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.53.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"d1343c606bf66d4c6f0de2e2167cbc0b73190a90","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run test:behavior:contracts && npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build && npm run prepare:packaged-runtimes","pretest":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history","restart":"npm run stop:all && FARMING_FORCE_ACP_HOST_RESTART=1 npm start","prebuild":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh deploy","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","test:behavior":"npm run test:behavior:contracts && npm run test:behavior:node && npm run test:behavior:e2e","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","test:update:npm":"npm run build:backend-runtime && node --test backend/tests/test-npm-update-helper.ts","pretest:behavior":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:runtime-manifest","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","test:behavior:e2e":"FARMING_E2E_REAL_CODEX=0 FARMING_E2E_FAKE_EXECUTABLES=1 FARMING_E2E_FAKE_ACP_AGENT=1 tsx scripts/run-behavior-e2e.ts","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy && tsx scripts/prepare-pi-acp-vendor.ts --copy","test:behavior:node":"tsx scripts/run-behavior-node-tests.ts","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh deploy --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","generate:appearance-css":"tsx scripts/generate-code-appearance-css.ts","test:behavior:contracts":"tsx scripts/check-behavior-contracts.ts && tsx scripts/check-source-inspection-contracts.ts","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","prepare:packaged-runtimes":"tsx scripts/prepare-packaged-runtimes.ts","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-composite","release:dependencies:check":"node scripts/check-release-managed-dependency-updates.mjs","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:project-files":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/file-auto-refresh.spec.ts tests/e2e/file-editor-header-layout.spec.ts tests/e2e/file-tree-hierarchy.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --output=.tmp/project-files-pre-release-state && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/project-files-human-stress.spec.ts --project=chromium --workers=1 --retries=0 --repeat-each=4 --trace=retain-on-failure --output=.tmp/project-files-pre-release-stress","sync:openclaw-browser-extension":"node scripts/sync-openclaw-browser-extension.mjs","test:pre-release:codex-ui:smoke":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-smoke","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.53.tgz","_integrity":"sha512-RfXHAU9ZfUHLsxASEANw0Lx2wqoqhtUW1MkxZOZBARiQya7ZwM1jihae+8gPW4fVdte7CTPGEFA23Q6ma3n2oQ==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","yauzl":"3.4.0","express":"^4.22.2","mermaid":"^11.16.1","ripgrep":"^0.3.1","unified":"^11.0.5","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","remark-parse":"^11.0.0","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.3.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","pi-acp":"0.0.33","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.4.0","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.69.0"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","remark-parse","ripgrep","tar","unified","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","yauzl","zod"],"optionalDependencies":{"@openai/codex-linux-x64":"npm:@openai/codex@0.147.0-linux-x64","@openai/codex-win32-x64":"npm:@openai/codex@0.147.0-win32-x64","@openai/codex-darwin-x64":"npm:@openai/codex@0.147.0-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.147.0-linux-arm64","@openai/codex-win32-arm64":"npm:@openai/codex@0.147.0-win32-arm64","@openai/codex-darwin-arm64":"npm:@openai/codex@0.147.0-darwin-arm64","@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.232"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.53_1787084759097_0.974459249921144","host":"s3://npm-registry-packages-npm-production"}},"2.2.54":{"name":"farming-code","version":"2.2.54","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.54","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"83fe51c60c641adb273b9b3714178c2a1e41cd4c","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.54.tgz","fileCount":20887,"integrity":"sha512-O3+0EQfGCb74fvL8mm1ONTVqYDs4WBEJaGS5XVoFEkvQbAMYJFzkaB4Fvo1+m2SHirCy3b028Vd1zwcbPgjWHw==","signatures":[{"sig":"MEYCIQDXTsGYfad6NwDcUHTMdd97+1qVe9Hy07GYs60IcbCGWQIhALdadtPnivsykhKZ7cjRTbO4o36pSci5iZkQwSbjAvF/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.54","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":439467353},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.54.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"03b57b1a8348249f0ff3df273f24ae73380d6889","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run test:behavior:contracts && npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build && npm run prepare:packaged-runtimes","pretest":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history","restart":"npm run stop:all && FARMING_FORCE_ACP_HOST_RESTART=1 npm start","prebuild":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh deploy","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","test:behavior":"npm run test:behavior:contracts && npm run test:behavior:node && npm run test:behavior:e2e","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","test:update:npm":"npm run build:backend-runtime && node --test backend/tests/test-npm-update-helper.ts","pretest:behavior":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:runtime-manifest","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","test:behavior:e2e":"FARMING_E2E_REAL_CODEX=0 FARMING_E2E_FAKE_EXECUTABLES=1 FARMING_E2E_FAKE_ACP_AGENT=1 tsx scripts/run-behavior-e2e.ts","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy && tsx scripts/prepare-pi-acp-vendor.ts --copy","test:behavior:node":"tsx scripts/run-behavior-node-tests.ts","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh deploy --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","generate:appearance-css":"tsx scripts/generate-code-appearance-css.ts","test:behavior:contracts":"tsx scripts/check-behavior-contracts.ts && tsx scripts/check-source-inspection-contracts.ts","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","prepare:packaged-runtimes":"tsx scripts/prepare-packaged-runtimes.ts","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-composite","release:dependencies:check":"node scripts/check-release-managed-dependency-updates.mjs","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:project-files":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/file-auto-refresh.spec.ts tests/e2e/file-editor-header-layout.spec.ts tests/e2e/file-markdown-preview.spec.ts tests/e2e/file-tree-hierarchy.spec.ts tests/e2e/file-viewer-types.spec.ts tests/e2e/project-files-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --output=.tmp/project-files-pre-release-state && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/project-files-human-stress.spec.ts --project=chromium --workers=1 --retries=0 --repeat-each=4 --trace=retain-on-failure --output=.tmp/project-files-pre-release-stress","sync:openclaw-browser-extension":"node scripts/sync-openclaw-browser-extension.mjs","test:pre-release:codex-ui:smoke":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-smoke","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.54.tgz","_integrity":"sha512-O3+0EQfGCb74fvL8mm1ONTVqYDs4WBEJaGS5XVoFEkvQbAMYJFzkaB4Fvo1+m2SHirCy3b028Vd1zwcbPgjWHw==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","yauzl":"3.4.0","express":"^4.22.2","mermaid":"^11.16.1","ripgrep":"^0.3.1","unified":"^11.0.5","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","remark-parse":"^11.0.0","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.3.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","pi-acp":"0.0.33","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.4.0","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.70.0"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","remark-parse","ripgrep","tar","unified","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","yauzl","zod"],"optionalDependencies":{"@openai/codex-linux-x64":"npm:@openai/codex@0.148.0-linux-x64","@openai/codex-win32-x64":"npm:@openai/codex@0.148.0-win32-x64","@openai/codex-darwin-x64":"npm:@openai/codex@0.148.0-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.148.0-linux-arm64","@openai/codex-win32-arm64":"npm:@openai/codex@0.148.0-win32-arm64","@openai/codex-darwin-arm64":"npm:@openai/codex@0.148.0-darwin-arm64","@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.232"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.54_1787101018360_0.5870468611444484","host":"s3://npm-registry-packages-npm-production"}},"2.2.55":{"name":"farming-code","version":"2.2.55","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.55","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"84477bee7ae7b2f4ae8a9740d70f0254ba3aff91","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.55.tgz","fileCount":20883,"integrity":"sha512-zPfLjrYGs4dlmOBgGWlykcMN3N9bMp2LqEYeA3xJF6DR8uo6GCpHyL98KJee2r5TO0vSNixmDJGHO6OsDlIK2Q==","signatures":[{"sig":"MEUCIGck44rTdtCS8mLPNn16KNSoaDVxAw1sES8VxyWn+ORvAiEAhJIsyrQWDu3o9to27TgljIZuUe4eA1OmpR/LG8vfM1c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.55","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":437763861},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.55.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"c15af30365e862c7eef7b36728025fe78ca07d9b","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor","check":"npm run test:behavior:contracts && npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build && npm run prepare:packaged-runtimes","pretest":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history","restart":"npm run stop:all && FARMING_FORCE_ACP_HOST_RESTART=1 npm start","prebuild":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh deploy","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","test:behavior":"npm run test:behavior:contracts && npm run test:behavior:node && npm run test:behavior:e2e","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","test:update:npm":"npm run build:backend-runtime && node --test backend/tests/test-npm-update-helper.ts","pretest:behavior":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:runtime-manifest","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","test:behavior:e2e":"FARMING_E2E_REAL_CODEX=0 FARMING_E2E_FAKE_EXECUTABLES=1 FARMING_E2E_FAKE_ACP_AGENT=1 tsx scripts/run-behavior-e2e.ts","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy && tsx scripts/prepare-pi-acp-vendor.ts --copy","test:behavior:node":"tsx scripts/run-behavior-node-tests.ts","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh deploy --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","generate:appearance-css":"tsx scripts/generate-code-appearance-css.ts","test:behavior:contracts":"tsx scripts/check-behavior-contracts.ts && tsx scripts/check-source-inspection-contracts.ts","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","prepare:packaged-runtimes":"tsx scripts/prepare-packaged-runtimes.ts","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-composite","release:dependencies:check":"node scripts/check-release-managed-dependency-updates.mjs","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:project-files":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/file-auto-refresh.spec.ts tests/e2e/file-editor-header-layout.spec.ts tests/e2e/file-markdown-preview.spec.ts tests/e2e/file-tree-hierarchy.spec.ts tests/e2e/file-viewer-types.spec.ts tests/e2e/project-files-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --output=.tmp/project-files-pre-release-state && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/project-files-human-stress.spec.ts --project=chromium --workers=1 --retries=0 --repeat-each=4 --trace=retain-on-failure --output=.tmp/project-files-pre-release-stress","sync:openclaw-browser-extension":"node scripts/sync-openclaw-browser-extension.mjs","test:pre-release:codex-ui:smoke":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-smoke","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:837613b0-b04d-4027-aea1-01c6f86d99be"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.55.tgz","_integrity":"sha512-zPfLjrYGs4dlmOBgGWlykcMN3N9bMp2LqEYeA3xJF6DR8uo6GCpHyL98KJee2r5TO0vSNixmDJGHO6OsDlIK2Q==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","yauzl":"3.4.0","express":"^4.22.2","mermaid":"^11.16.1","ripgrep":"^0.3.1","unified":"^11.0.5","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","remark-parse":"^11.0.0","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.3.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","pi-acp":"0.0.33","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.6.0","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.70.0"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","remark-parse","ripgrep","tar","unified","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","yauzl","zod"],"optionalDependencies":{"@openai/codex-linux-x64":"npm:@openai/codex@0.148.0-linux-x64","@openai/codex-win32-x64":"npm:@openai/codex@0.148.0-win32-x64","@openai/codex-darwin-x64":"npm:@openai/codex@0.148.0-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.148.0-linux-arm64","@openai/codex-win32-arm64":"npm:@openai/codex@0.148.0-win32-arm64","@openai/codex-darwin-arm64":"npm:@openai/codex@0.148.0-darwin-arm64","@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.232"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.55_1787162210881_0.1890271793364049","host":"s3://npm-registry-packages-npm-production"}},"2.2.56":{"name":"farming-code","version":"2.2.56","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.56","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"1885b136d2c0663db5438329420dd3b02acca452","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.56.tgz","fileCount":20884,"integrity":"sha512-2hiYlGWUv/JmzQt/psRMXNXMXYNSaSrKcBvpJeWneQMj0WSbE+6N8K2725BlqfHMt8nxRrTUVY0kc8ZIbFmJ4Q==","signatures":[{"sig":"MEUCIQCjLXmV3HOksoYqNkQPBVIHpiAW+p8Bz6jNUqaNnEj6fQIgFgZmOrTRWAj571aJvVn4Lc33FWVez2ytHDJR5LRZoyg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.56","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":466327376},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.56.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"25d361547592020f96fa136b6831ecbf27295595","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor && npm run prepare:ripgrep-runtime","check":"npm run test:behavior:contracts && npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build && npm run prepare:packaged-runtimes","pretest":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history && npm run prepare:ripgrep-runtime","restart":"npm run stop:all && FARMING_FORCE_ACP_HOST_RESTART=1 npm start","prebuild":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh deploy","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","test:behavior":"npm run test:behavior:contracts && npm run test:behavior:node && npm run test:behavior:e2e","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","test:update:npm":"npm run build:backend-runtime && node --test backend/tests/test-npm-update-helper.ts","pretest:behavior":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:runtime-manifest","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","test:behavior:e2e":"FARMING_E2E_REAL_CODEX=0 FARMING_E2E_FAKE_EXECUTABLES=1 FARMING_E2E_FAKE_ACP_AGENT=1 tsx scripts/run-behavior-e2e.ts","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy && tsx scripts/prepare-pi-acp-vendor.ts --copy","test:behavior:node":"tsx scripts/run-behavior-node-tests.ts","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","release:fast-screen":"tsx scripts/run-release-fast-screen.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh deploy --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","generate:appearance-css":"tsx scripts/generate-code-appearance-css.ts","prepare:ripgrep-runtime":"tsx scripts/prepare-ripgrep-runtime.ts","test:behavior:contracts":"tsx scripts/check-behavior-contracts.ts && tsx scripts/check-source-inspection-contracts.ts","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","prepare:packaged-runtimes":"tsx scripts/prepare-packaged-runtimes.ts","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-composite","release:dependencies:check":"node scripts/check-release-managed-dependency-updates.mjs","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:project-files":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/file-auto-refresh.spec.ts tests/e2e/file-editor-header-layout.spec.ts tests/e2e/file-markdown-preview.spec.ts tests/e2e/file-tree-hierarchy.spec.ts tests/e2e/file-viewer-types.spec.ts tests/e2e/project-files-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --output=.tmp/project-files-pre-release-state && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/project-files-human-stress.spec.ts --project=chromium --workers=1 --retries=0 --repeat-each=4 --trace=retain-on-failure --output=.tmp/project-files-pre-release-stress","sync:openclaw-browser-extension":"node scripts/sync-openclaw-browser-extension.mjs","test:pre-release:codex-ui:smoke":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-smoke","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5d740124-d6cf-4084-8d68-4b7f54a6cd4e"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.56.tgz","_integrity":"sha512-2hiYlGWUv/JmzQt/psRMXNXMXYNSaSrKcBvpJeWneQMj0WSbE+6N8K2725BlqfHMt8nxRrTUVY0kc8ZIbFmJ4Q==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","yauzl":"3.4.0","express":"^4.22.2","mermaid":"^11.16.1","unified":"^11.0.5","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","remark-parse":"^11.0.0","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.3.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","pi-acp":"0.0.33","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.6.2","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.70.0"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","remark-parse","tar","unified","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","yauzl","zod"],"optionalDependencies":{"@openai/codex-linux-x64":"npm:@openai/codex@0.148.0-linux-x64","@openai/codex-win32-x64":"npm:@openai/codex@0.148.0-win32-x64","@openai/codex-darwin-x64":"npm:@openai/codex@0.148.0-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.148.0-linux-arm64","@openai/codex-win32-arm64":"npm:@openai/codex@0.148.0-win32-arm64","@openai/codex-darwin-arm64":"npm:@openai/codex@0.148.0-darwin-arm64","@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.232"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.56_1787268830402_0.24137913372365305","host":"s3://npm-registry-packages-npm-production"}},"2.2.57":{"name":"farming-code","version":"2.2.57","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.57","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"c678b48c608a2d2c11eb5a7724b1ac3017885052","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.57.tgz","fileCount":20884,"integrity":"sha512-fGPD09kT+VaJ6YPGJTcCXfYD8+xyj9xRhHe2BnPjGfr0Eit0BdtAOYlievieA/RBd2qO0QmCXYOYCJhYHa9BUA==","signatures":[{"sig":"MEQCIBk/77NHRG/RwN66/y0xI7aWnh0CkHXmXaBTASA58GwfAiAVHsadlnbopAx2xNhV3KUW4e9EkvyinBdJGOGa1iBWPA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.57","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":466220238},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.57.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"129c994d807dc46c0787b7513332bbc068e328f6","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor && npm run prepare:ripgrep-runtime","check":"npm run test:behavior:contracts && npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build && npm run prepare:packaged-runtimes","pretest":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history && npm run prepare:ripgrep-runtime","restart":"npm run stop:all && FARMING_FORCE_ACP_HOST_RESTART=1 npm start","prebuild":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh deploy","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","test:behavior":"npm run test:behavior:contracts && npm run test:behavior:node && npm run test:behavior:e2e","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","test:update:npm":"npm run build:backend-runtime && node --test backend/tests/test-npm-update-helper.ts","pretest:behavior":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:runtime-manifest","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","test:behavior:e2e":"FARMING_E2E_REAL_CODEX=0 FARMING_E2E_FAKE_EXECUTABLES=1 FARMING_E2E_FAKE_ACP_AGENT=1 tsx scripts/run-behavior-e2e.ts","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy && tsx scripts/prepare-pi-acp-vendor.ts --copy","test:behavior:node":"tsx scripts/run-behavior-node-tests.ts","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","release:fast-screen":"tsx scripts/run-release-fast-screen.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh deploy --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","generate:appearance-css":"tsx scripts/generate-code-appearance-css.ts","prepare:ripgrep-runtime":"tsx scripts/prepare-ripgrep-runtime.ts","test:behavior:contracts":"tsx scripts/check-behavior-contracts.ts && tsx scripts/check-source-inspection-contracts.ts","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","prepare:packaged-runtimes":"tsx scripts/prepare-packaged-runtimes.ts","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-composite","release:dependencies:check":"node scripts/check-release-managed-dependency-updates.mjs","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:project-files":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/file-auto-refresh.spec.ts tests/e2e/file-editor-header-layout.spec.ts tests/e2e/file-markdown-preview.spec.ts tests/e2e/file-tree-hierarchy.spec.ts tests/e2e/file-viewer-types.spec.ts tests/e2e/project-files-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --output=.tmp/project-files-pre-release-state && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/project-files-human-stress.spec.ts --project=chromium --workers=1 --retries=0 --repeat-each=4 --trace=retain-on-failure --output=.tmp/project-files-pre-release-stress","sync:openclaw-browser-extension":"node scripts/sync-openclaw-browser-extension.mjs","test:pre-release:codex-ui:smoke":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-smoke","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5d740124-d6cf-4084-8d68-4b7f54a6cd4e"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.57.tgz","_integrity":"sha512-fGPD09kT+VaJ6YPGJTcCXfYD8+xyj9xRhHe2BnPjGfr0Eit0BdtAOYlievieA/RBd2qO0QmCXYOYCJhYHa9BUA==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","yauzl":"3.4.0","express":"^4.22.2","mermaid":"^11.16.1","unified":"^11.0.5","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","remark-parse":"^11.0.0","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.4.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","pi-acp":"0.0.33","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.6.2","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.70.0"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","remark-parse","tar","unified","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","yauzl","zod"],"optionalDependencies":{"@openai/codex-linux-x64":"npm:@openai/codex@0.149.1-linux-x64","@openai/codex-win32-x64":"npm:@openai/codex@0.149.1-win32-x64","@openai/codex-darwin-x64":"npm:@openai/codex@0.149.1-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.149.1-linux-arm64","@openai/codex-win32-arm64":"npm:@openai/codex@0.149.1-win32-arm64","@openai/codex-darwin-arm64":"npm:@openai/codex@0.149.1-darwin-arm64","@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.232"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.57_1787575566659_0.1842019529704968","host":"s3://npm-registry-packages-npm-production"}},"2.2.58":{"name":"farming-code","version":"2.2.58","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.58","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"937c457a673c4c1a3540fcdfe8c8421c5b54f978","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.58.tgz","fileCount":20884,"integrity":"sha512-lAapHq+yPkw2hriF1mPflhtfvej9B8hl5tLJNXIrrZIb/FnJ3Cv/U1GiJMQvq/gES1vDt2Eb+Qb1bgfyS7rfHA==","signatures":[{"sig":"MEUCIBNlEFJ6A2FMoyjNi9PaJtZ0YGT1SRRuoh/+wAb2rCqeAiEAgB6YQphbAvHqFhn1LtKrfQXlU+U2LKd6Uc7ooeUSY6o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.58","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":466232032},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.58.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"cb27cee4f4819630a4f509f9e5c54d729a314ee1","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor && npm run prepare:ripgrep-runtime","check":"npm run test:behavior:contracts && npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build && npm run prepare:packaged-runtimes","pretest":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history && npm run prepare:ripgrep-runtime","restart":"npm run stop:all && FARMING_FORCE_ACP_HOST_RESTART=1 npm start","prebuild":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh deploy","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","test:behavior":"npm run test:behavior:contracts && npm run test:behavior:node && npm run test:behavior:e2e","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","test:update:npm":"npm run build:backend-runtime && node --test backend/tests/test-npm-update-helper.ts","pretest:behavior":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:runtime-manifest","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","test:behavior:e2e":"FARMING_E2E_REAL_CODEX=0 FARMING_E2E_FAKE_EXECUTABLES=1 FARMING_E2E_FAKE_ACP_AGENT=1 tsx scripts/run-behavior-e2e.ts","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy && tsx scripts/prepare-pi-acp-vendor.ts --copy","test:behavior:node":"tsx scripts/run-behavior-node-tests.ts","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","release:fast-screen":"tsx scripts/run-release-fast-screen.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh deploy --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","generate:appearance-css":"tsx scripts/generate-code-appearance-css.ts","prepare:ripgrep-runtime":"tsx scripts/prepare-ripgrep-runtime.ts","test:behavior:contracts":"tsx scripts/check-behavior-contracts.ts && tsx scripts/check-source-inspection-contracts.ts","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","prepare:packaged-runtimes":"tsx scripts/prepare-packaged-runtimes.ts","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-composite","release:dependencies:check":"node scripts/check-release-managed-dependency-updates.mjs","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:project-files":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/file-auto-refresh.spec.ts tests/e2e/file-editor-header-layout.spec.ts tests/e2e/file-markdown-preview.spec.ts tests/e2e/file-tree-hierarchy.spec.ts tests/e2e/file-viewer-types.spec.ts tests/e2e/project-files-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --output=.tmp/project-files-pre-release-state && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/project-files-human-stress.spec.ts --project=chromium --workers=1 --retries=0 --repeat-each=4 --trace=retain-on-failure --output=.tmp/project-files-pre-release-stress","sync:openclaw-browser-extension":"node scripts/sync-openclaw-browser-extension.mjs","test:pre-release:codex-ui:smoke":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-smoke","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5d740124-d6cf-4084-8d68-4b7f54a6cd4e"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.58.tgz","_integrity":"sha512-lAapHq+yPkw2hriF1mPflhtfvej9B8hl5tLJNXIrrZIb/FnJ3Cv/U1GiJMQvq/gES1vDt2Eb+Qb1bgfyS7rfHA==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","yauzl":"3.4.0","express":"^4.22.2","mermaid":"^11.16.1","unified":"^11.0.5","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","remark-parse":"^11.0.0","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.4.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","pi-acp":"0.0.33","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.6.2","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.70.0"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","remark-parse","tar","unified","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","yauzl","zod"],"optionalDependencies":{"@openai/codex-linux-x64":"npm:@openai/codex@0.149.1-linux-x64","@openai/codex-win32-x64":"npm:@openai/codex@0.149.1-win32-x64","@openai/codex-darwin-x64":"npm:@openai/codex@0.149.1-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.149.1-linux-arm64","@openai/codex-win32-arm64":"npm:@openai/codex@0.149.1-win32-arm64","@openai/codex-darwin-arm64":"npm:@openai/codex@0.149.1-darwin-arm64","@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.232"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.58_1787684198702_0.7727661199235687","host":"s3://npm-registry-packages-npm-production"}},"2.2.59":{"name":"farming-code","version":"2.2.59","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.59","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"ea81a063aba140110cce6a7ea39bd58b175a512f","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.59.tgz","fileCount":20888,"integrity":"sha512-3Z3bUNRV/q3ZUCC/Z63kgDMETQPx66IMRH+gG/CU7TXx1ktZy0PoIt2dAWgQgQxfmLfZ6qR7dWEKkjaDjftiOg==","signatures":[{"sig":"MEQCIFzVVZ06cJBcj+q+hEV39BAeGyGVTLt4CIE1rUA2SkWyAiByiLcWtzBM21F+9TpHsbmpQZr+rjrvNmX/eM0+AJv87Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.59","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":466303884},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.59.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"dc99aeb6453ffe4504d043268f9e5f777e876864","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor && npm run prepare:ripgrep-runtime","check":"npm run test:behavior:contracts && npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build && npm run prepare:packaged-runtimes","pretest":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history && npm run prepare:ripgrep-runtime","restart":"npm run stop:all && FARMING_FORCE_ACP_HOST_RESTART=1 npm start","prebuild":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh deploy","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","test:behavior":"npm run test:behavior:contracts && npm run test:behavior:node && npm run test:behavior:e2e","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","test:update:npm":"npm run build:backend-runtime && node --test backend/tests/test-npm-update-helper.ts","pretest:behavior":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:runtime-manifest","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","test:behavior:e2e":"FARMING_E2E_REAL_CODEX=0 FARMING_E2E_FAKE_EXECUTABLES=1 FARMING_E2E_FAKE_ACP_AGENT=1 tsx scripts/run-behavior-e2e.ts","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy && tsx scripts/prepare-pi-acp-vendor.ts --copy","test:behavior:node":"tsx scripts/run-behavior-node-tests.ts","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","release:fast-screen":"tsx scripts/run-release-fast-screen.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh deploy --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","generate:appearance-css":"tsx scripts/generate-code-appearance-css.ts","prepare:ripgrep-runtime":"tsx scripts/prepare-ripgrep-runtime.ts","test:behavior:contracts":"tsx scripts/check-behavior-contracts.ts && tsx scripts/check-source-inspection-contracts.ts","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","prepare:packaged-runtimes":"tsx scripts/prepare-packaged-runtimes.ts","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-composite","release:dependencies:check":"node scripts/check-release-managed-dependency-updates.mjs","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:project-files":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/file-auto-refresh.spec.ts tests/e2e/file-editor-header-layout.spec.ts tests/e2e/file-markdown-preview.spec.ts tests/e2e/file-tree-hierarchy.spec.ts tests/e2e/file-viewer-types.spec.ts tests/e2e/project-files-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --output=.tmp/project-files-pre-release-state && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/project-files-human-stress.spec.ts --project=chromium --workers=1 --retries=0 --repeat-each=4 --trace=retain-on-failure --output=.tmp/project-files-pre-release-stress","sync:openclaw-browser-extension":"node scripts/sync-openclaw-browser-extension.mjs","test:pre-release:codex-ui:smoke":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-smoke","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5d740124-d6cf-4084-8d68-4b7f54a6cd4e"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.59.tgz","_integrity":"sha512-3Z3bUNRV/q3ZUCC/Z63kgDMETQPx66IMRH+gG/CU7TXx1ktZy0PoIt2dAWgQgQxfmLfZ6qR7dWEKkjaDjftiOg==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","yauzl":"3.4.0","express":"^4.22.2","mermaid":"^11.16.1","unified":"^11.0.5","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","remark-parse":"^11.0.0","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.4.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","pi-acp":"0.0.33","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.7.0","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.70.0"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","remark-parse","tar","unified","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","yauzl","zod"],"optionalDependencies":{"@openai/codex-linux-x64":"npm:@openai/codex@0.150.1-linux-x64","@openai/codex-win32-x64":"npm:@openai/codex@0.150.1-win32-x64","@openai/codex-darwin-x64":"npm:@openai/codex@0.150.1-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.150.1-linux-arm64","@openai/codex-win32-arm64":"npm:@openai/codex@0.150.1-win32-arm64","@openai/codex-darwin-arm64":"npm:@openai/codex@0.150.1-darwin-arm64","@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.232"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.59_1787848757281_0.914528094141051","host":"s3://npm-registry-packages-npm-production"}},"2.2.60":{"name":"farming-code","version":"2.2.60","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.60","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"87b355fed7ed6e3e09fff696613633cdce514904","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.60.tgz","fileCount":20888,"integrity":"sha512-zZRjpJaq/E3Wgs5/zavgzivajKCJbbnEVnUxj1U7CmPx65GU3Yv87x+xSMRuz0E9zVBJtYhaVnNiNww3d7AuOA==","signatures":[{"sig":"MEUCIDR0Fxfy6OBBqSFs5KTWuv5wBzCY5fXQwpgKntlhItLuAiEAz14ELxLMU3A5gnorIUenPwSsjlUa59NHsAXWzO1jcGU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.60","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":466619909},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.60.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"bae38317459673a78798bdfb9064e684d065f2dd","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor && npm run prepare:ripgrep-runtime","check":"npm run test:behavior:contracts && npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build && npm run prepare:packaged-runtimes","pretest":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history && npm run prepare:ripgrep-runtime","restart":"npm run stop:all && FARMING_FORCE_ACP_HOST_RESTART=1 npm start","prebuild":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh deploy","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","test:behavior":"npm run test:behavior:contracts && npm run test:behavior:node && npm run test:behavior:e2e","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","test:update:npm":"npm run build:backend-runtime && node --test backend/tests/test-npm-update-helper.ts","pretest:behavior":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:runtime-manifest","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","test:behavior:e2e":"FARMING_E2E_REAL_CODEX=0 FARMING_E2E_FAKE_EXECUTABLES=1 FARMING_E2E_FAKE_ACP_AGENT=1 tsx scripts/run-behavior-e2e.ts","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy && tsx scripts/prepare-pi-acp-vendor.ts --copy","test:behavior:node":"tsx scripts/run-behavior-node-tests.ts","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","release:fast-screen":"tsx scripts/run-release-fast-screen.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh deploy --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","generate:appearance-css":"tsx scripts/generate-code-appearance-css.ts","prepare:ripgrep-runtime":"tsx scripts/prepare-ripgrep-runtime.ts","test:behavior:contracts":"tsx scripts/check-behavior-contracts.ts && tsx scripts/check-source-inspection-contracts.ts","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","prepare:packaged-runtimes":"tsx scripts/prepare-packaged-runtimes.ts","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-composite","release:dependencies:check":"node scripts/check-release-managed-dependency-updates.mjs","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:project-files":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/file-auto-refresh.spec.ts tests/e2e/file-editor-header-layout.spec.ts tests/e2e/file-markdown-preview.spec.ts tests/e2e/file-tree-hierarchy.spec.ts tests/e2e/file-viewer-types.spec.ts tests/e2e/project-files-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --output=.tmp/project-files-pre-release-state && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/project-files-human-stress.spec.ts --project=chromium --workers=1 --retries=0 --repeat-each=4 --trace=retain-on-failure --output=.tmp/project-files-pre-release-stress","sync:openclaw-browser-extension":"node scripts/sync-openclaw-browser-extension.mjs","test:pre-release:codex-ui:smoke":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-smoke","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5d740124-d6cf-4084-8d68-4b7f54a6cd4e"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.60.tgz","_integrity":"sha512-zZRjpJaq/E3Wgs5/zavgzivajKCJbbnEVnUxj1U7CmPx65GU3Yv87x+xSMRuz0E9zVBJtYhaVnNiNww3d7AuOA==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","yauzl":"3.4.0","express":"^4.22.2","mermaid":"^11.16.1","unified":"^11.0.5","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","remark-parse":"^11.0.0","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.4.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","pi-acp":"0.0.33","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.7.0","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.70.0"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","remark-parse","tar","unified","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","yauzl","zod"],"optionalDependencies":{"@openai/codex-linux-x64":"npm:@openai/codex@0.150.1-linux-x64","@openai/codex-win32-x64":"npm:@openai/codex@0.150.1-win32-x64","@openai/codex-darwin-x64":"npm:@openai/codex@0.150.1-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.150.1-linux-arm64","@openai/codex-win32-arm64":"npm:@openai/codex@0.150.1-win32-arm64","@openai/codex-darwin-arm64":"npm:@openai/codex@0.150.1-darwin-arm64","@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.232"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.60_1787960341082_0.2463777180465494","host":"s3://npm-registry-packages-npm-production"}},"2.2.61":{"name":"farming-code","version":"2.2.61","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.61","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"7d3fe84974e1947f9e6093df829d1fbdd9db6143","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.61.tgz","fileCount":20888,"integrity":"sha512-GF3tBvJP0VIEfmkKrfP3j+30K10mGYArEV8UAjl88A5ohGFore9qWNzUGLn0MCZMndDDROiwRZrr75XtrM6ZhQ==","signatures":[{"sig":"MEUCIQCoxIsQ2XolTCbsYoSOiSPCwS88I8ir98YUQE/vy9TkBQIgaEzTNauFRRNYIMixfbWlgCpog13lIK6waBYFLbVCxN0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.61","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":466637556},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.61.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"6dcc35af217063861fd7e0491b34c0780a1a3105","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor && npm run prepare:ripgrep-runtime","check":"npm run test:behavior:contracts && npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build && npm run prepare:packaged-runtimes","pretest":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history && npm run prepare:ripgrep-runtime","restart":"npm run stop:all && FARMING_FORCE_ACP_HOST_RESTART=1 npm start","prebuild":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh deploy","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","test:behavior":"npm run test:behavior:contracts && npm run test:behavior:node && npm run test:behavior:e2e","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","test:update:npm":"npm run build:backend-runtime && node --test backend/tests/test-npm-update-helper.ts","pretest:behavior":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:runtime-manifest","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","test:behavior:e2e":"FARMING_E2E_REAL_CODEX=0 FARMING_E2E_FAKE_EXECUTABLES=1 FARMING_E2E_FAKE_ACP_AGENT=1 tsx scripts/run-behavior-e2e.ts","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy && tsx scripts/prepare-pi-acp-vendor.ts --copy","test:behavior:node":"tsx scripts/run-behavior-node-tests.ts","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","release:fast-screen":"tsx scripts/run-release-fast-screen.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh deploy --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","generate:appearance-css":"tsx scripts/generate-code-appearance-css.ts","prepare:ripgrep-runtime":"tsx scripts/prepare-ripgrep-runtime.ts","test:behavior:contracts":"tsx scripts/check-behavior-contracts.ts && tsx scripts/check-source-inspection-contracts.ts","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","prepare:packaged-runtimes":"tsx scripts/prepare-packaged-runtimes.ts","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-composite","release:dependencies:check":"node scripts/check-release-managed-dependency-updates.mjs","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:project-files":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/file-auto-refresh.spec.ts tests/e2e/file-editor-header-layout.spec.ts tests/e2e/file-markdown-preview.spec.ts tests/e2e/file-tree-hierarchy.spec.ts tests/e2e/file-viewer-types.spec.ts tests/e2e/project-files-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --output=.tmp/project-files-pre-release-state && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/project-files-human-stress.spec.ts --project=chromium --workers=1 --retries=0 --repeat-each=4 --trace=retain-on-failure --output=.tmp/project-files-pre-release-stress","sync:openclaw-browser-extension":"node scripts/sync-openclaw-browser-extension.mjs","test:pre-release:codex-ui:smoke":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-smoke","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5d740124-d6cf-4084-8d68-4b7f54a6cd4e"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.61.tgz","_integrity":"sha512-GF3tBvJP0VIEfmkKrfP3j+30K10mGYArEV8UAjl88A5ohGFore9qWNzUGLn0MCZMndDDROiwRZrr75XtrM6ZhQ==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","yauzl":"3.4.0","express":"^4.22.2","mermaid":"^11.16.1","unified":"^11.0.5","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","remark-parse":"^11.0.0","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.4.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","pi-acp":"0.0.33","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.7.0","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.70.0"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","remark-parse","tar","unified","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","yauzl","zod"],"optionalDependencies":{"@openai/codex-linux-x64":"npm:@openai/codex@0.150.1-linux-x64","@openai/codex-win32-x64":"npm:@openai/codex@0.150.1-win32-x64","@openai/codex-darwin-x64":"npm:@openai/codex@0.150.1-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.150.1-linux-arm64","@openai/codex-win32-arm64":"npm:@openai/codex@0.150.1-win32-arm64","@openai/codex-darwin-arm64":"npm:@openai/codex@0.150.1-darwin-arm64","@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.232"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.61_1787994896005_0.790721813478279","host":"s3://npm-registry-packages-npm-production"}},"2.2.62":{"name":"farming-code","version":"2.2.62","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.62","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"94271a12eb71b0b7c1e59b2d9ff2a54ac91b4700","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.62.tgz","fileCount":20889,"integrity":"sha512-IcnyIMFCC9cqFdyTgS1SJHNhwa30vqB/8wCd187ibud9KJodMh8oL6v/fNXAGYzD4EXwEE9MUCYc8RcKJUqyeA==","signatures":[{"sig":"MEUCIBMXyEkuFPsHk+pWyrVow/ypTHAJmkwLbPkk0TUsq00vAiEAlcZobfj8TEEV+JNmUG12zGOhmTCYkZ2Zo4IfH+0Mu0k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.62","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":466749923},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.62.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"87e6f29b3a0b906e3836cadacff398df7957e951","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor && npm run prepare:ripgrep-runtime","check":"npm run test:behavior:contracts && npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build && npm run prepare:packaged-runtimes","pretest":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history && npm run prepare:ripgrep-runtime","restart":"npm run stop:all && FARMING_FORCE_ACP_HOST_RESTART=1 npm start","prebuild":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh deploy","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","test:behavior":"npm run test:behavior:contracts && npm run test:behavior:node && npm run test:behavior:e2e","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","test:update:npm":"npm run build:backend-runtime && node --test backend/tests/test-npm-update-helper.ts","pretest:behavior":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:runtime-manifest","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","test:behavior:e2e":"FARMING_E2E_REAL_CODEX=0 FARMING_E2E_FAKE_EXECUTABLES=1 FARMING_E2E_FAKE_ACP_AGENT=1 tsx scripts/run-behavior-e2e.ts","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy && tsx scripts/prepare-pi-acp-vendor.ts --copy","test:behavior:node":"tsx scripts/run-behavior-node-tests.ts","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","release:fast-screen":"tsx scripts/run-release-fast-screen.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh deploy --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","generate:appearance-css":"tsx scripts/generate-code-appearance-css.ts","prepare:ripgrep-runtime":"tsx scripts/prepare-ripgrep-runtime.ts","test:behavior:contracts":"tsx scripts/check-behavior-contracts.ts && tsx scripts/check-source-inspection-contracts.ts","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","prepare:packaged-runtimes":"tsx scripts/prepare-packaged-runtimes.ts","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-composite","release:dependencies:check":"node scripts/check-release-managed-dependency-updates.mjs","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:project-files":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/file-auto-refresh.spec.ts tests/e2e/file-editor-header-layout.spec.ts tests/e2e/file-markdown-preview.spec.ts tests/e2e/file-tree-hierarchy.spec.ts tests/e2e/file-viewer-types.spec.ts tests/e2e/project-files-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --output=.tmp/project-files-pre-release-state && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/project-files-human-stress.spec.ts --project=chromium --workers=1 --retries=0 --repeat-each=4 --trace=retain-on-failure --output=.tmp/project-files-pre-release-stress","sync:openclaw-browser-extension":"node scripts/sync-openclaw-browser-extension.mjs","test:pre-release:codex-ui:smoke":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-smoke","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5d740124-d6cf-4084-8d68-4b7f54a6cd4e"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.62.tgz","_integrity":"sha512-IcnyIMFCC9cqFdyTgS1SJHNhwa30vqB/8wCd187ibud9KJodMh8oL6v/fNXAGYzD4EXwEE9MUCYc8RcKJUqyeA==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","yauzl":"3.4.0","express":"^4.22.2","mermaid":"^11.16.1","unified":"^11.0.5","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","remark-parse":"^11.0.0","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.4.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","pi-acp":"0.0.33","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.7.0","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.70.0"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","remark-parse","tar","unified","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","yauzl","zod"],"optionalDependencies":{"@openai/codex-linux-x64":"npm:@openai/codex@0.151.0-linux-x64","@openai/codex-win32-x64":"npm:@openai/codex@0.151.0-win32-x64","@openai/codex-darwin-x64":"npm:@openai/codex@0.151.0-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.151.0-linux-arm64","@openai/codex-win32-arm64":"npm:@openai/codex@0.151.0-win32-arm64","@openai/codex-darwin-arm64":"npm:@openai/codex@0.151.0-darwin-arm64","@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.232"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.62_1788104268765_0.24757385404247056","host":"s3://npm-registry-packages-npm-production"}},"2.2.63":{"name":"farming-code","version":"2.2.63","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.63","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"0ab220d5d76bc0c9b549121d25423f356f4b7e24","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.63.tgz","fileCount":20896,"integrity":"sha512-O0nUWyV2mMKW72HE1GJKOAFBKTc3uKWvtKGT/TO5cq2G5euhRPIRW657Q/aAuWCAFUui2/CpRAMSdeljuvhgvQ==","signatures":[{"sig":"MEUCIQDp9Kw8x6t2ZioLdI8MI+T3cES59m6khTsp9ZLEnb3QDQIgJe3e3QwPhpOpvesze1rwfg75pd03CVzriGiBmllwBrs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.63","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":466793810},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.63.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"bcd308ee4b8244f37471c9092e15db40cf08ffd2","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor && npm run prepare:ripgrep-runtime","check":"npm run test:behavior:contracts && npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build && npm run prepare:packaged-runtimes","pretest":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history && npm run prepare:ripgrep-runtime","restart":"npm run stop:all && FARMING_FORCE_ACP_HOST_RESTART=1 npm start","prebuild":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh deploy","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","test:behavior":"npm run test:behavior:contracts && npm run test:behavior:node && npm run test:behavior:e2e","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","test:update:npm":"npm run build:backend-runtime && node --test backend/tests/test-npm-update-helper.ts","pretest:behavior":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:runtime-manifest","release:npm:pack":"./scripts/package-npm-release.sh","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","test:behavior:e2e":"FARMING_E2E_REAL_CODEX=0 FARMING_E2E_FAKE_EXECUTABLES=1 FARMING_E2E_FAKE_ACP_AGENT=1 tsx scripts/run-behavior-e2e.ts","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy && tsx scripts/prepare-pi-acp-vendor.ts --copy","test:behavior:node":"tsx scripts/run-behavior-node-tests.ts","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","release:fast-screen":"tsx scripts/run-release-fast-screen.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh deploy --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","generate:appearance-css":"tsx scripts/generate-code-appearance-css.ts","prepare:ripgrep-runtime":"tsx scripts/prepare-ripgrep-runtime.ts","test:behavior:contracts":"tsx scripts/check-behavior-contracts.ts && tsx scripts/check-source-inspection-contracts.ts","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","prepare:packaged-runtimes":"tsx scripts/prepare-packaged-runtimes.ts","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-composite","release:dependencies:check":"node scripts/check-release-managed-dependency-updates.mjs","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:pre-release:project-files":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/file-auto-refresh.spec.ts tests/e2e/file-editor-header-layout.spec.ts tests/e2e/file-markdown-preview.spec.ts tests/e2e/file-tree-hierarchy.spec.ts tests/e2e/file-viewer-types.spec.ts tests/e2e/project-files-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --output=.tmp/project-files-pre-release-state && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/project-files-human-stress.spec.ts --project=chromium --workers=1 --retries=0 --repeat-each=4 --trace=retain-on-failure --output=.tmp/project-files-pre-release-stress","sync:openclaw-browser-extension":"node scripts/sync-openclaw-browser-extension.mjs","test:pre-release:codex-ui:smoke":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-smoke","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5d740124-d6cf-4084-8d68-4b7f54a6cd4e"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.63.tgz","_integrity":"sha512-O0nUWyV2mMKW72HE1GJKOAFBKTc3uKWvtKGT/TO5cq2G5euhRPIRW657Q/aAuWCAFUui2/CpRAMSdeljuvhgvQ==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","yauzl":"3.4.0","express":"^4.22.2","mermaid":"^11.16.1","unified":"^11.0.5","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","remark-parse":"^11.0.0","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.4.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","pi-acp":"0.0.33","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.7.0","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.70.0"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","remark-parse","tar","unified","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","yauzl","zod"],"optionalDependencies":{"@openai/codex-linux-x64":"npm:@openai/codex@0.151.0-linux-x64","@openai/codex-win32-x64":"npm:@openai/codex@0.151.0-win32-x64","@openai/codex-darwin-x64":"npm:@openai/codex@0.151.0-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.151.0-linux-arm64","@openai/codex-win32-arm64":"npm:@openai/codex@0.151.0-win32-arm64","@openai/codex-darwin-arm64":"npm:@openai/codex@0.151.0-darwin-arm64","@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.232","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.232"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.63_1788208812959_0.30843960514961855","host":"s3://npm-registry-packages-npm-production"}},"2.2.64":{"name":"farming-code","version":"2.2.64","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.64","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"54f42787a6c0568ca6d73d5088dfc8457889bf60","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.64.tgz","fileCount":20953,"integrity":"sha512-9nqOUksDee/3QxPiQpt1WURX+hp/+SI+50lqdcOBC5VrCWaI2ptSBmYHTwHIZ40n31HMZ8U0n/CAJDEZgnDHfQ==","signatures":[{"sig":"MEUCIQDXgxqtUmUMpyXCvbwLDmmRsngonA2j6+DgX8a+H/YDmgIgGXIShSFvyVt89dnBSZymAdZ20H4zE1CUUyoDKrTVu3A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.64","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":468077391},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.64.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"ec9289d6a93acc45c6f5518c5816d8de53028f4c","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor && npm run prepare:ripgrep-runtime","check":"npm run test:behavior:contracts && npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build && npm run prepare:packaged-runtimes","pretest":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history && npm run prepare:ripgrep-runtime","restart":"npm run stop:all && FARMING_FORCE_ACP_HOST_RESTART=1 npm start","prebuild":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh deploy","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","test:behavior":"npm run test:behavior:contracts && npm run test:behavior:node && npm run test:behavior:e2e","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","test:update:npm":"npm run build:backend-runtime && node --test backend/tests/test-npm-update-helper.ts","pretest:behavior":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:runtime-manifest","release:npm:pack":"./scripts/package-npm-release.sh","test:e2e:ios-pwa":"npm run build && tsx scripts/run-ios-pwa-acceptance.ts","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","test:behavior:e2e":"FARMING_E2E_REAL_CODEX=0 FARMING_E2E_FAKE_EXECUTABLES=1 FARMING_E2E_FAKE_ACP_AGENT=1 tsx scripts/run-behavior-e2e.ts","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy && tsx scripts/prepare-pi-acp-vendor.ts --copy","test:behavior:node":"tsx scripts/run-behavior-node-tests.ts && node --test scripts/run-playwright-isolated-lanes.test.mjs","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","release:fast-screen":"tsx scripts/run-release-fast-screen.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts desktop/native-browser-preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh deploy --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","generate:appearance-css":"tsx scripts/generate-code-appearance-css.ts","prepare:ripgrep-runtime":"tsx scripts/prepare-ripgrep-runtime.ts","test:behavior:contracts":"tsx scripts/check-behavior-contracts.ts && tsx scripts/check-source-inspection-contracts.ts","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","prepare:packaged-runtimes":"tsx scripts/prepare-packaged-runtimes.ts","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-composite","release:dependencies:check":"node scripts/check-release-managed-dependency-updates.mjs","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:e2e:playwright:isolated":"node scripts/run-playwright-isolated-lanes.mjs","test:desktop:browser-composed":"tsx scripts/run-desktop-browser-composed-e2e.ts","test:pre-release:project-files":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/file-auto-refresh.spec.ts tests/e2e/file-editor-header-layout.spec.ts tests/e2e/file-markdown-preview.spec.ts tests/e2e/file-tree-hierarchy.spec.ts tests/e2e/file-viewer-types.spec.ts tests/e2e/project-files-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --output=.tmp/project-files-pre-release-state && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/project-files-human-stress.spec.ts --project=chromium --workers=1 --retries=0 --repeat-each=4 --trace=retain-on-failure --output=.tmp/project-files-pre-release-stress","release:coordinator:linux:check":"./scripts/check-linux-release-coordinator.sh","sync:openclaw-browser-extension":"node scripts/sync-openclaw-browser-extension.mjs","test:pre-release:codex-ui:smoke":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-smoke","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:isolated:matrix":"node scripts/run-playwright-full-matrix.mjs","test:e2e:playwright:isolated:self-test":"node --test scripts/run-playwright-isolated-lanes.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5d740124-d6cf-4084-8d68-4b7f54a6cd4e"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.64.tgz","_integrity":"sha512-9nqOUksDee/3QxPiQpt1WURX+hp/+SI+50lqdcOBC5VrCWaI2ptSBmYHTwHIZ40n31HMZ8U0n/CAJDEZgnDHfQ==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","yauzl":"3.4.0","express":"^5.2.1","mermaid":"^11.16.1","unified":"^11.0.5","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","remark-parse":"^11.0.0","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.4.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","pi-acp":"0.0.33","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.8.0","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.73.0"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","remark-parse","tar","unified","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","yauzl","zod"],"optionalDependencies":{"@openai/codex-linux-x64":"npm:@openai/codex@0.153.0-linux-x64","@openai/codex-win32-x64":"npm:@openai/codex@0.153.0-win32-x64","@openai/codex-darwin-x64":"npm:@openai/codex@0.153.0-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.153.0-linux-arm64","@openai/codex-win32-arm64":"npm:@openai/codex@0.153.0-win32-arm64","@openai/codex-darwin-arm64":"npm:@openai/codex@0.153.0-darwin-arm64","@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.257","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.257","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.257","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.257","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.257","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.257","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.257","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.257"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.64_1788452993276_0.34198000677612694","host":"s3://npm-registry-packages-npm-production"}},"2.2.65":{"name":"farming-code","version":"2.2.65","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.65","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"86631baf19723411a0a6fbb15cab2b158107d512","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.65.tgz","fileCount":20953,"integrity":"sha512-BvPyyRD9WB6ER41HdMv1srFqt434p7JnH5KQAL4dhnZwSCaZtME6ao9mZSMICHIFP1+rdJe/EmJgbUnAdsSi9w==","signatures":[{"sig":"MEYCIQCscVV05AOSHtF4sL5YQqxsVFiP8+lTat19kZA440CapAIhALWB30rou5KFFSJ7Oegy4pJOnMgf0n18Y2l91U4Nxpuw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.65","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":468077391},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.65.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"5aa54230d73f8564c3cf6ab54af65a39207acc8c","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor && npm run prepare:ripgrep-runtime","check":"npm run test:behavior:contracts && npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build && npm run prepare:packaged-runtimes","pretest":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history && npm run prepare:ripgrep-runtime","restart":"npm run stop:all && FARMING_FORCE_ACP_HOST_RESTART=1 npm start","prebuild":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh deploy","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","test:behavior":"npm run test:behavior:contracts && npm run test:behavior:node && npm run test:behavior:e2e","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","test:update:npm":"npm run build:backend-runtime && node --test backend/tests/test-npm-update-helper.ts","pretest:behavior":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:runtime-manifest","release:npm:pack":"./scripts/package-npm-release.sh","test:e2e:ios-pwa":"npm run build && tsx scripts/run-ios-pwa-acceptance.ts","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","test:behavior:e2e":"FARMING_E2E_REAL_CODEX=0 FARMING_E2E_FAKE_EXECUTABLES=1 FARMING_E2E_FAKE_ACP_AGENT=1 tsx scripts/run-behavior-e2e.ts","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy && tsx scripts/prepare-pi-acp-vendor.ts --copy","test:behavior:node":"tsx scripts/run-behavior-node-tests.ts && node --test scripts/run-playwright-isolated-lanes.test.mjs","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","release:fast-screen":"tsx scripts/run-release-fast-screen.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts desktop/native-browser-preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh deploy --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","generate:appearance-css":"tsx scripts/generate-code-appearance-css.ts","prepare:ripgrep-runtime":"tsx scripts/prepare-ripgrep-runtime.ts","test:behavior:contracts":"tsx scripts/check-behavior-contracts.ts && tsx scripts/check-source-inspection-contracts.ts","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","prepare:packaged-runtimes":"tsx scripts/prepare-packaged-runtimes.ts","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-composite","release:dependencies:check":"node scripts/check-release-managed-dependency-updates.mjs","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:e2e:playwright:isolated":"node scripts/run-playwright-isolated-lanes.mjs","test:desktop:browser-composed":"tsx scripts/run-desktop-browser-composed-e2e.ts","test:pre-release:project-files":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/file-auto-refresh.spec.ts tests/e2e/file-editor-header-layout.spec.ts tests/e2e/file-markdown-preview.spec.ts tests/e2e/file-tree-hierarchy.spec.ts tests/e2e/file-viewer-types.spec.ts tests/e2e/project-files-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --output=.tmp/project-files-pre-release-state && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/project-files-human-stress.spec.ts --project=chromium --workers=1 --retries=0 --repeat-each=4 --trace=retain-on-failure --output=.tmp/project-files-pre-release-stress","release:coordinator:linux:check":"./scripts/check-linux-release-coordinator.sh","sync:openclaw-browser-extension":"node scripts/sync-openclaw-browser-extension.mjs","test:pre-release:codex-ui:smoke":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-smoke","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:isolated:matrix":"node scripts/run-playwright-full-matrix.mjs","test:e2e:playwright:isolated:self-test":"node --test scripts/run-playwright-isolated-lanes.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5d740124-d6cf-4084-8d68-4b7f54a6cd4e"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.65.tgz","_integrity":"sha512-BvPyyRD9WB6ER41HdMv1srFqt434p7JnH5KQAL4dhnZwSCaZtME6ao9mZSMICHIFP1+rdJe/EmJgbUnAdsSi9w==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","yauzl":"3.4.0","express":"^5.2.1","mermaid":"^11.16.1","unified":"^11.0.5","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","remark-parse":"^11.0.0","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.4.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","pi-acp":"0.0.33","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.8.0","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.73.0"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","remark-parse","tar","unified","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","yauzl","zod"],"optionalDependencies":{"@openai/codex-linux-x64":"npm:@openai/codex@0.153.0-linux-x64","@openai/codex-win32-x64":"npm:@openai/codex@0.153.0-win32-x64","@openai/codex-darwin-x64":"npm:@openai/codex@0.153.0-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.153.0-linux-arm64","@openai/codex-win32-arm64":"npm:@openai/codex@0.153.0-win32-arm64","@openai/codex-darwin-arm64":"npm:@openai/codex@0.153.0-darwin-arm64","@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.257","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.257","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.257","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.257","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.257","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.257","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.257","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.257"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.65_1788456952060_0.7056982237153038","host":"s3://npm-registry-packages-npm-production"}},"2.2.66":{"name":"farming-code","version":"2.2.66","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.66","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"285d58bf8b00f05a7a368ffe86193e7b7bd8d687","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.66.tgz","fileCount":20953,"integrity":"sha512-Fkw8gKsEbP30hsPX+N68SN5TxuMdbIYQ+PIz2FdTl+t1OJo6dRBQNdsZYlL7XQiAiRD/7Vs1/1QaekKDkibZvw==","signatures":[{"sig":"MEUCIQDcLekY1oD34iGTeYqoKjX92G0ry/78hfaSJP15hTbRiAIgacokFnOaiy3+qRHH9mgNJPsKhoWtGPGS/MMEDykwB68=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.66","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":468180016},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.66.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"4f9079f1d159291bb92e583edcd79c2bc9743099","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor && npm run prepare:ripgrep-runtime","check":"npm run test:behavior:contracts && npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build && npm run prepare:packaged-runtimes","pretest":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history && npm run prepare:ripgrep-runtime","restart":"npm run stop:all && FARMING_FORCE_ACP_HOST_RESTART=1 npm start","prebuild":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh deploy","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","test:behavior":"npm run test:behavior:contracts && npm run test:behavior:node && npm run test:behavior:e2e","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","test:update:npm":"npm run build:backend-runtime && node --test backend/tests/test-npm-update-helper.ts","pretest:behavior":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:runtime-manifest","release:npm:pack":"./scripts/package-npm-release.sh","test:e2e:ios-pwa":"npm run build && tsx scripts/run-ios-pwa-acceptance.ts","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","test:behavior:e2e":"FARMING_E2E_REAL_CODEX=0 FARMING_E2E_FAKE_EXECUTABLES=1 FARMING_E2E_FAKE_ACP_AGENT=1 tsx scripts/run-behavior-e2e.ts","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy && tsx scripts/prepare-pi-acp-vendor.ts --copy","test:behavior:node":"tsx scripts/run-behavior-node-tests.ts && node --test scripts/run-playwright-isolated-lanes.test.mjs","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","release:fast-screen":"tsx scripts/run-release-fast-screen.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts desktop/native-browser-preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh deploy --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","generate:appearance-css":"tsx scripts/generate-code-appearance-css.ts","prepare:ripgrep-runtime":"tsx scripts/prepare-ripgrep-runtime.ts","test:behavior:contracts":"tsx scripts/check-behavior-contracts.ts && tsx scripts/check-source-inspection-contracts.ts","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","prepare:packaged-runtimes":"tsx scripts/prepare-packaged-runtimes.ts","release:fast-screen:shell":"playwright test tests/e2e/shell-status-indicator.spec.ts tests/e2e/agent-completion-notifications.spec.ts --project=chromium --grep 'shell .* activity|uses Terminal-native notification' --retries=0","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-composite","release:dependencies:check":"node scripts/check-release-managed-dependency-updates.mjs","release:fast-screen:mobile":"playwright test tests/e2e/mobile-composer.spec.ts tests/e2e/acp-human-cases.spec.ts --project=chromium --project=iphone-webkit --project=iphone-human-webkit --project=android-human-chromium --grep 'mobile (chat|terminal) long input|opens native ACP image attachments' --retries=0","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:e2e:playwright:isolated":"node scripts/run-playwright-isolated-lanes.mjs","test:desktop:browser-composed":"tsx scripts/run-desktop-browser-composed-e2e.ts","test:pre-release:project-files":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/file-auto-refresh.spec.ts tests/e2e/file-editor-header-layout.spec.ts tests/e2e/file-markdown-preview.spec.ts tests/e2e/file-tree-hierarchy.spec.ts tests/e2e/file-viewer-types.spec.ts tests/e2e/project-files-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --output=.tmp/project-files-pre-release-state && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/project-files-human-stress.spec.ts --project=chromium --workers=1 --retries=0 --repeat-each=4 --trace=retain-on-failure --output=.tmp/project-files-pre-release-stress","release:coordinator:linux:check":"./scripts/check-linux-release-coordinator.sh","sync:openclaw-browser-extension":"node scripts/sync-openclaw-browser-extension.mjs","test:pre-release:codex-ui:smoke":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-smoke","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:isolated:matrix":"node scripts/run-playwright-full-matrix.mjs","test:e2e:playwright:isolated:self-test":"node --test scripts/run-playwright-isolated-lanes.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5d740124-d6cf-4084-8d68-4b7f54a6cd4e"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.66.tgz","_integrity":"sha512-Fkw8gKsEbP30hsPX+N68SN5TxuMdbIYQ+PIz2FdTl+t1OJo6dRBQNdsZYlL7XQiAiRD/7Vs1/1QaekKDkibZvw==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","yauzl":"3.4.0","express":"^5.2.1","mermaid":"^11.16.1","unified":"^11.0.5","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","remark-parse":"^11.0.0","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.4.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","pi-acp":"0.0.33","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.10.0","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.75.1"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","rehype-highlight","rehype-katex","remark-gfm","remark-math","remark-parse","tar","unified","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","yauzl","zod"],"optionalDependencies":{"@openai/codex-linux-x64":"npm:@openai/codex@0.153.4-linux-x64","@openai/codex-win32-x64":"npm:@openai/codex@0.153.4-win32-x64","@openai/codex-darwin-x64":"npm:@openai/codex@0.153.4-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.153.4-linux-arm64","@openai/codex-win32-arm64":"npm:@openai/codex@0.153.4-win32-arm64","@openai/codex-darwin-arm64":"npm:@openai/codex@0.153.4-darwin-arm64","@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.257","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.257","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.257","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.257","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.257","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.257","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.257","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.257"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.66_1788879884836_0.2479257443199956","host":"s3://npm-registry-packages-npm-production"}},"2.2.67":{"name":"farming-code","version":"2.2.67","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.67","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"6c3f466dcf8529efe2cdcc83866eb95d56910c73","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.67.tgz","fileCount":21019,"integrity":"sha512-FxzFg+uL267hGdDcl7XYhg/JyGi10YgvD3Co6S9YcQjhtdjR/XRFky3tjv4UaAsXVQKOPCizeRgweT4w2W/AdA==","signatures":[{"sig":"MEYCIQCO1ovrAoQz9I1oOIuUMrISdzaxqT+I+kLvx3sDiOrFcwIhAIDXmMBo5I//TSPuX9r9aNW+KK73YruFQSkJRv8IY26W","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQChNhHw8ST7lGFTLCyyz8GTC3mM+dTyouppku/+nyqSiQIhAJhJqcYMN/lTzPsteEmGuDT8Knyjpv0TptQz229JEXJd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.67","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":469747865},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.67.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"8eca0c152c0913f6be5cf0b6d332a02f4c4c634e","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor && npm run prepare:ripgrep-runtime","check":"npm run test:behavior:contracts && npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build && npm run prepare:packaged-runtimes","pretest":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history && npm run prepare:ripgrep-runtime","restart":"npm run stop:all && FARMING_FORCE_ACP_HOST_RESTART=1 npm start","prebuild":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh deploy","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","test:behavior":"npm run test:behavior:contracts && npm run test:behavior:node && npm run test:behavior:e2e","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","test:update:npm":"npm run build:backend-runtime && node --test backend/tests/test-npm-update-helper.ts","pretest:behavior":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:runtime-manifest","release:npm:pack":"./scripts/package-npm-release.sh","test:e2e:ios-pwa":"npm run build && tsx scripts/run-ios-pwa-acceptance.ts","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","test:behavior:e2e":"FARMING_E2E_REAL_CODEX=0 FARMING_E2E_FAKE_EXECUTABLES=1 FARMING_E2E_FAKE_ACP_AGENT=1 tsx scripts/run-behavior-e2e.ts","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy && tsx scripts/prepare-pi-acp-vendor.ts --copy","test:behavior:node":"tsx scripts/run-behavior-node-tests.ts && node --test scripts/run-playwright-isolated-lanes.test.mjs","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","release:fast-screen":"tsx scripts/run-release-fast-screen.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts desktop/native-browser-preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh deploy --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","generate:appearance-css":"tsx scripts/generate-code-appearance-css.ts","prepare:ripgrep-runtime":"tsx scripts/prepare-ripgrep-runtime.ts","test:behavior:contracts":"tsx scripts/check-behavior-contracts.ts && tsx scripts/check-source-inspection-contracts.ts","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","prepare:packaged-runtimes":"tsx scripts/prepare-packaged-runtimes.ts","release:fast-screen:shell":"playwright test tests/e2e/shell-status-indicator.spec.ts tests/e2e/agent-completion-notifications.spec.ts --project=chromium --grep 'shell .* activity|uses Terminal-native notification' --retries=0","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-composite","release:dependencies:check":"node scripts/check-release-managed-dependency-updates.mjs","release:fast-screen:mobile":"playwright test tests/e2e/mobile-composer.spec.ts tests/e2e/acp-human-cases.spec.ts --project=chromium --project=iphone-webkit --project=iphone-human-webkit --project=android-human-chromium --grep 'mobile (chat|terminal) long input|opens native ACP image attachments' --retries=0","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:e2e:playwright:isolated":"node scripts/run-playwright-isolated-lanes.mjs","test:desktop:browser-composed":"tsx scripts/run-desktop-browser-composed-e2e.ts","test:pre-release:project-files":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/file-auto-refresh.spec.ts tests/e2e/file-editor-header-layout.spec.ts tests/e2e/file-markdown-preview.spec.ts tests/e2e/file-tree-hierarchy.spec.ts tests/e2e/file-viewer-types.spec.ts tests/e2e/project-files-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --output=.tmp/project-files-pre-release-state && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/project-files-human-stress.spec.ts --project=chromium --workers=1 --retries=0 --repeat-each=4 --trace=retain-on-failure --output=.tmp/project-files-pre-release-stress","release:coordinator:linux:check":"./scripts/check-linux-release-coordinator.sh","sync:openclaw-browser-extension":"node scripts/sync-openclaw-browser-extension.mjs","test:pre-release:codex-ui:smoke":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-smoke","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:isolated:matrix":"node scripts/run-playwright-full-matrix.mjs","test:e2e:playwright:isolated:self-test":"node --test scripts/run-playwright-isolated-lanes.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5d740124-d6cf-4084-8d68-4b7f54a6cd4e"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.67.tgz","_integrity":"sha512-FxzFg+uL267hGdDcl7XYhg/JyGi10YgvD3Co6S9YcQjhtdjR/XRFky3tjv4UaAsXVQKOPCizeRgweT4w2W/AdA==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","yauzl":"3.4.0","express":"^5.2.1","mermaid":"^11.16.1","unified":"^11.0.5","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","remark-parse":"^11.0.0","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","react-zoom-pan-pinch":"4.2.0","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.4.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","pi-acp":"0.0.33","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.11.0","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.76.0"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","react-zoom-pan-pinch","rehype-highlight","rehype-katex","remark-gfm","remark-math","remark-parse","tar","unified","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","yauzl","zod"],"optionalDependencies":{"@openai/codex-linux-x64":"npm:@openai/codex@0.154.0-linux-x64","@openai/codex-win32-x64":"npm:@openai/codex@0.154.0-win32-x64","@openai/codex-darwin-x64":"npm:@openai/codex@0.154.0-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.154.0-linux-arm64","@openai/codex-win32-arm64":"npm:@openai/codex@0.154.0-win32-arm64","@openai/codex-darwin-arm64":"npm:@openai/codex@0.154.0-darwin-arm64","@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.257","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.257","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.257","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.257","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.257","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.257","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.257","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.257"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.67_1789188370232_0.9178157188970204","host":"s3://npm-registry-packages-npm-production"}},"2.2.68":{"name":"farming-code","version":"2.2.68","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.68","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"c1c0ff62431a9f765ec1bca68c3fa0d76f7979d5","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.68.tgz","fileCount":21021,"integrity":"sha512-+fGb4p+t1WKrvKShs1pO2oGWtdwBskaKNyYT52s9/SWvxHivsVp8xfEeZ5CbZznA90rwCIINduMUJyVJIrThDA==","signatures":[{"sig":"MEUCIDqB0PRj/SKKp3XUk4EHbZ0KnsCL3sbS2KRgU4lS7K/sAiEAyZTUOlKIWWcd73U/I6k0zo/azywOEhtYRTxioFMzCr0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC+xzCC2EZUe+hlvOCHgTb0X8O6b+d4PJYf9tQPoDJl0gIgM+0u1gbuLoCwgwKHO15JKsTM0bs0L5KheWLVdKn04Bc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.68","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":469761611},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.68.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"058eb172f065600055a6339b4199242560bdf366","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor && npm run prepare:ripgrep-runtime","check":"npm run test:behavior:contracts && npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build && npm run prepare:packaged-runtimes","pretest":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history && npm run prepare:ripgrep-runtime","restart":"npm run stop:all && FARMING_FORCE_ACP_HOST_RESTART=1 npm start","prebuild":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh deploy","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","test:behavior":"npm run test:behavior:contracts && npm run test:behavior:node && npm run test:behavior:e2e","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","test:update:npm":"npm run build:backend-runtime && node --test backend/tests/test-npm-update-helper.ts","pretest:behavior":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:runtime-manifest","release:npm:pack":"./scripts/package-npm-release.sh","test:e2e:ios-pwa":"npm run build && tsx scripts/run-ios-pwa-acceptance.ts","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","test:behavior:e2e":"FARMING_E2E_REAL_CODEX=0 FARMING_E2E_FAKE_EXECUTABLES=1 FARMING_E2E_FAKE_ACP_AGENT=1 tsx scripts/run-behavior-e2e.ts","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy && tsx scripts/prepare-pi-acp-vendor.ts --copy","test:behavior:node":"tsx scripts/run-behavior-node-tests.ts && node --test scripts/run-playwright-isolated-lanes.test.mjs","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","release:fast-screen":"tsx scripts/run-release-fast-screen.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts desktop/native-browser-preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh deploy --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","generate:appearance-css":"tsx scripts/generate-code-appearance-css.ts","prepare:ripgrep-runtime":"tsx scripts/prepare-ripgrep-runtime.ts","test:behavior:contracts":"tsx scripts/check-behavior-contracts.ts && tsx scripts/check-source-inspection-contracts.ts","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","prepare:packaged-runtimes":"tsx scripts/prepare-packaged-runtimes.ts","release:fast-screen:shell":"playwright test tests/e2e/shell-status-indicator.spec.ts tests/e2e/agent-completion-notifications.spec.ts --project=chromium --grep 'shell .* activity|uses Terminal-native notification' --retries=0","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-composite","release:dependencies:check":"node scripts/check-release-managed-dependency-updates.mjs","release:fast-screen:mobile":"playwright test tests/e2e/mobile-composer.spec.ts tests/e2e/acp-human-cases.spec.ts --project=chromium --project=iphone-webkit --project=iphone-human-webkit --project=android-human-chromium --grep 'mobile (chat|terminal) long input|opens native ACP image attachments' --retries=0","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:e2e:playwright:isolated":"node scripts/run-playwright-isolated-lanes.mjs","test:desktop:browser-composed":"tsx scripts/run-desktop-browser-composed-e2e.ts","test:pre-release:project-files":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/file-auto-refresh.spec.ts tests/e2e/file-editor-header-layout.spec.ts tests/e2e/file-markdown-preview.spec.ts tests/e2e/file-tree-hierarchy.spec.ts tests/e2e/file-viewer-types.spec.ts tests/e2e/project-files-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --output=.tmp/project-files-pre-release-state && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/project-files-human-stress.spec.ts --project=chromium --workers=1 --retries=0 --repeat-each=4 --trace=retain-on-failure --output=.tmp/project-files-pre-release-stress","release:coordinator:linux:check":"./scripts/check-linux-release-coordinator.sh","sync:openclaw-browser-extension":"node scripts/sync-openclaw-browser-extension.mjs","test:pre-release:codex-ui:smoke":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-smoke","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:isolated:matrix":"node scripts/run-playwright-full-matrix.mjs","test:e2e:playwright:isolated:self-test":"node --test scripts/run-playwright-isolated-lanes.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5d740124-d6cf-4084-8d68-4b7f54a6cd4e"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.68.tgz","_integrity":"sha512-+fGb4p+t1WKrvKShs1pO2oGWtdwBskaKNyYT52s9/SWvxHivsVp8xfEeZ5CbZznA90rwCIINduMUJyVJIrThDA==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","yauzl":"3.4.0","express":"^5.2.1","mermaid":"^11.16.1","unified":"^11.0.5","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","remark-parse":"^11.0.0","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","react-zoom-pan-pinch":"4.2.0","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.4.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","pi-acp":"0.0.33","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.12.0","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.78.0"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","react-zoom-pan-pinch","rehype-highlight","rehype-katex","remark-gfm","remark-math","remark-parse","tar","unified","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","yauzl","zod"],"optionalDependencies":{"@openai/codex-linux-x64":"npm:@openai/codex@0.154.0-linux-x64","@openai/codex-win32-x64":"npm:@openai/codex@0.154.0-win32-x64","@openai/codex-darwin-x64":"npm:@openai/codex@0.154.0-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.154.0-linux-arm64","@openai/codex-win32-arm64":"npm:@openai/codex@0.154.0-win32-arm64","@openai/codex-darwin-arm64":"npm:@openai/codex@0.154.0-darwin-arm64","@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.270","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.270","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.270","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.270","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.270","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.270","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.270","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.270"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.68_1789586030853_0.8380821800836311","host":"s3://npm-registry-packages-npm-production"}},"2.2.69":{"name":"farming-code","version":"2.2.69","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.69","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"3908c182718a9f4c3d00d7a2b647283c77998333","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.69.tgz","fileCount":21022,"integrity":"sha512-Jzc9KogYtp4jcUmhNmkZ7811ZYZvIKeVTFuT+FN80mmnh39GuNQY3ux53F8V9fg/Wc8Avornjj7KmBfNWB4VqA==","signatures":[{"sig":"MEQCIDhTQFRGHH6t5//v5Tmvqbc+lJSY6aeySOCmYe3e9u7YAiAc1Vpcdp1lVQm1qdKcDYzoHPT9azqcY2V4liMzWw1CIA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCqmgeTd75JN+HcBMRLZlXyXg4MUs/2IaBCanLxEWgHFwIgcD/PvGAyR9Z4daHO8bs5zAZAi7+OVVailJ43b4TRO2I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.69","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":469842132},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.69.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"8e8fc3871fe933f46f9591c8d124dfb5ed81f09f","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor && npm run prepare:ripgrep-runtime","check":"npm run test:behavior:contracts && npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build && npm run prepare:packaged-runtimes","pretest":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history && npm run prepare:ripgrep-runtime","restart":"npm run stop:all && FARMING_FORCE_ACP_HOST_RESTART=1 npm start","prebuild":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh deploy","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","test:behavior":"npm run test:behavior:contracts && npm run test:behavior:node && npm run test:behavior:e2e","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","test:update:npm":"npm run build:backend-runtime && node --test backend/tests/test-npm-update-helper.ts","pretest:behavior":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:runtime-manifest","release:npm:pack":"./scripts/package-npm-release.sh","test:e2e:ios-pwa":"npm run build && tsx scripts/run-ios-pwa-acceptance.ts","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","test:behavior:e2e":"FARMING_E2E_REAL_CODEX=0 FARMING_E2E_FAKE_EXECUTABLES=1 FARMING_E2E_FAKE_ACP_AGENT=1 tsx scripts/run-behavior-e2e.ts","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy && tsx scripts/prepare-pi-acp-vendor.ts --copy","test:behavior:node":"tsx scripts/run-behavior-node-tests.ts && node --test scripts/run-playwright-isolated-lanes.test.mjs","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","release:fast-screen":"tsx scripts/run-release-fast-screen.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts desktop/native-browser-preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh deploy --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","generate:appearance-css":"tsx scripts/generate-code-appearance-css.ts","prepare:ripgrep-runtime":"tsx scripts/prepare-ripgrep-runtime.ts","test:behavior:contracts":"tsx scripts/check-behavior-contracts.ts && tsx scripts/check-source-inspection-contracts.ts","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","prepare:packaged-runtimes":"tsx scripts/prepare-packaged-runtimes.ts","release:fast-screen:shell":"playwright test tests/e2e/shell-status-indicator.spec.ts tests/e2e/agent-completion-notifications.spec.ts --project=chromium --grep 'shell .* activity|uses Terminal-native notification' --retries=0","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-composite","release:dependencies:check":"node scripts/check-release-managed-dependency-updates.mjs","release:fast-screen:mobile":"playwright test tests/e2e/mobile-composer.spec.ts tests/e2e/acp-human-cases.spec.ts --project=chromium --project=iphone-webkit --project=iphone-human-webkit --project=android-human-chromium --grep 'mobile (chat|terminal) long input|opens native ACP image attachments' --retries=0","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:e2e:playwright:isolated":"node scripts/run-playwright-isolated-lanes.mjs","test:desktop:browser-composed":"tsx scripts/run-desktop-browser-composed-e2e.ts","test:pre-release:project-files":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/file-auto-refresh.spec.ts tests/e2e/file-editor-header-layout.spec.ts tests/e2e/file-markdown-preview.spec.ts tests/e2e/file-tree-hierarchy.spec.ts tests/e2e/file-viewer-types.spec.ts tests/e2e/project-files-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --output=.tmp/project-files-pre-release-state && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/project-files-human-stress.spec.ts --project=chromium --workers=1 --retries=0 --repeat-each=4 --trace=retain-on-failure --output=.tmp/project-files-pre-release-stress","release:coordinator:linux:check":"./scripts/check-linux-release-coordinator.sh","sync:openclaw-browser-extension":"node scripts/sync-openclaw-browser-extension.mjs","test:pre-release:codex-ui:smoke":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-smoke","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:isolated:matrix":"node scripts/run-playwright-full-matrix.mjs","test:e2e:playwright:isolated:self-test":"node --test scripts/run-playwright-isolated-lanes.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5d740124-d6cf-4084-8d68-4b7f54a6cd4e"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.69.tgz","_integrity":"sha512-Jzc9KogYtp4jcUmhNmkZ7811ZYZvIKeVTFuT+FN80mmnh39GuNQY3ux53F8V9fg/Wc8Avornjj7KmBfNWB4VqA==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","yauzl":"3.4.0","express":"^5.2.1","mermaid":"^11.16.1","unified":"^11.0.5","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","remark-parse":"^11.0.0","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","react-zoom-pan-pinch":"4.2.0","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.4.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","pi-acp":"0.0.33","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.12.0","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.79.0"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","highlight.js","katex","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","react-zoom-pan-pinch","rehype-highlight","rehype-katex","remark-gfm","remark-math","remark-parse","tar","unified","vscode-jsonrpc","vscode-languageserver-protocol","ws","yaml","yauzl","zod"],"optionalDependencies":{"@openai/codex-linux-x64":"npm:@openai/codex@0.155.1-linux-x64","@openai/codex-win32-x64":"npm:@openai/codex@0.155.1-win32-x64","@openai/codex-darwin-x64":"npm:@openai/codex@0.155.1-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.155.1-linux-arm64","@openai/codex-win32-arm64":"npm:@openai/codex@0.155.1-win32-arm64","@openai/codex-darwin-arm64":"npm:@openai/codex@0.155.1-darwin-arm64","@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.274","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.274","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.274","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.274","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.274","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.274","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.274","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.274"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.69_1789825566239_0.9342339584655845","host":"s3://npm-registry-packages-npm-production"}},"2.2.70":{"name":"farming-code","version":"2.2.70","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.70","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"69ed9c9fd1fd9f0f210af8175da594ff08bdd69d","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.70.tgz","fileCount":36034,"integrity":"sha512-Suo6uHTLlQC/I6mvgru1omRcyjGtfjqg4LUZtQSwGP4rc3Ls4383TRz9/i5098fHdxKBkBc4jADXuqVCSPcGnA==","signatures":[{"sig":"MEYCIQDcDvtaP/ChuZXqUA8OGnB7WYe7CtG7eZm6t9TG75pfBAIhANAwwmVIzTiC94z3/ok5kpxzuMlC5WvrRnlkYcSoJOu0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFdDixvBQex2iRd13UpSxXWW7SFXQR5Twgv/cb+RLp4kAiEAuc/weh1KWz8PU9seltWDuO85eWf4iQYyclS4rWHWDFs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.70","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":612539609},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.70.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"51fa6b0d696bee2e5e64a7da44f8ef14b5e2e30a","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor && npm run prepare:ripgrep-runtime","check":"npm run test:behavior:contracts && npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && node bin/farming start --port 3000","predev":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build && npm run prepare:packaged-runtimes","pretest":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history && npm run prepare:ripgrep-runtime","restart":"npm run stop:all && FARMING_FORCE_ACP_HOST_RESTART=1 npm start","prebuild":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh deploy","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","test:behavior":"npm run test:behavior:contracts && npm run test:behavior:node && npm run test:behavior:e2e","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","test:update:npm":"npm run build:backend-runtime && node --test backend/tests/test-npm-update-helper.ts","pretest:behavior":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:runtime-manifest","release:npm:pack":"./scripts/package-npm-release.sh","test:e2e:ios-pwa":"npm run build && tsx scripts/run-ios-pwa-acceptance.ts","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","test:behavior:e2e":"FARMING_E2E_REAL_CODEX=0 FARMING_E2E_FAKE_EXECUTABLES=1 FARMING_E2E_FAKE_ACP_AGENT=1 tsx scripts/run-behavior-e2e.ts","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy && tsx scripts/prepare-pi-acp-vendor.ts --copy","test:behavior:node":"tsx scripts/run-behavior-node-tests.ts && node --test scripts/run-playwright-isolated-lanes.test.mjs","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","release:fast-screen":"tsx scripts/run-release-fast-screen.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts desktop/native-browser-preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh deploy --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","generate:appearance-css":"tsx scripts/generate-code-appearance-css.ts","prepare:ripgrep-runtime":"tsx scripts/prepare-ripgrep-runtime.ts","test:behavior:contracts":"tsx scripts/check-behavior-contracts.ts && tsx scripts/check-source-inspection-contracts.ts","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","prepare:packaged-runtimes":"tsx scripts/prepare-packaged-runtimes.ts","release:fast-screen:shell":"playwright test tests/e2e/shell-status-indicator.spec.ts tests/e2e/agent-completion-notifications.spec.ts --project=chromium --grep 'shell .* activity|uses Terminal-native notification' --retries=0","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-composite","release:dependencies:check":"node scripts/check-release-managed-dependency-updates.mjs","release:fast-screen:mobile":"playwright test tests/e2e/mobile-composer.spec.ts tests/e2e/acp-human-cases.spec.ts --project=chromium --project=iphone-webkit --project=iphone-human-webkit --project=android-human-chromium --grep 'mobile (chat|terminal) long input|opens native ACP image attachments' --retries=0","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:e2e:playwright:isolated":"node scripts/run-playwright-isolated-lanes.mjs","test:desktop:browser-composed":"tsx scripts/run-desktop-browser-composed-e2e.ts","test:pre-release:project-files":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/file-auto-refresh.spec.ts tests/e2e/file-editor-header-layout.spec.ts tests/e2e/file-markdown-preview.spec.ts tests/e2e/file-tree-hierarchy.spec.ts tests/e2e/file-viewer-types.spec.ts tests/e2e/project-files-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --output=.tmp/project-files-pre-release-state && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/project-files-human-stress.spec.ts --project=chromium --workers=1 --retries=0 --repeat-each=4 --trace=retain-on-failure --output=.tmp/project-files-pre-release-stress","release:coordinator:linux:check":"./scripts/check-linux-release-coordinator.sh","sync:openclaw-browser-extension":"node scripts/sync-openclaw-browser-extension.mjs","test:pre-release:codex-ui:smoke":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-smoke","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:isolated:matrix":"node scripts/run-playwright-full-matrix.mjs","test:e2e:playwright:isolated:self-test":"node --test scripts/run-playwright-isolated-lanes.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5d740124-d6cf-4084-8d68-4b7f54a6cd4e"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.70.tgz","_integrity":"sha512-Suo6uHTLlQC/I6mvgru1omRcyjGtfjqg4LUZtQSwGP4rc3Ls4383TRz9/i5098fHdxKBkBc4jADXuqVCSPcGnA==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.0.2","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","xlsx":"https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","yauzl":"3.4.0","lucide":"1.47.0","express":"^5.2.1","mermaid":"^11.16.1","unified":"^11.0.5","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","remark-parse":"^11.0.0","monaco-editor":"^0.55.1","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@visactor/vtable":"1.26.8","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","react-zoom-pan-pinch":"4.2.0","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.4.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","pi-acp":"0.0.33","esbuild":"^0.27.7","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.12.0","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.79.0"},"bundleDependencies":["@agentclientprotocol/sdk","@visactor/vtable","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","highlight.js","katex","lucide","material-icon-theme","mermaid","monaco-editor","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","react-zoom-pan-pinch","rehype-highlight","rehype-katex","remark-gfm","remark-math","remark-parse","tar","unified","vscode-jsonrpc","vscode-languageserver-protocol","ws","xlsx","yaml","yauzl","zod"],"optionalDependencies":{"@openai/codex-linux-x64":"npm:@openai/codex@0.155.1-linux-x64","@openai/codex-win32-x64":"npm:@openai/codex@0.155.1-win32-x64","@openai/codex-darwin-x64":"npm:@openai/codex@0.155.1-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.155.1-linux-arm64","@openai/codex-win32-arm64":"npm:@openai/codex@0.155.1-win32-arm64","@openai/codex-darwin-arm64":"npm:@openai/codex@0.155.1-darwin-arm64","@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.274","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.274","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.274","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.274","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.274","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.274","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.274","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.274"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.70_1789852163345_0.10111235786710182","host":"s3://npm-registry-packages-npm-production"}},"2.2.71":{"name":"farming-code","version":"2.2.71","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"author":"","license":"MIT","_id":"farming-code@2.2.71","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"homepage":"https://github.com/zhuwenzhuang/farming#readme","bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"dist":{"shasum":"8954b421514d737ec52aa7bc95690c70fdb5d6e1","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.71.tgz","fileCount":14104,"integrity":"sha512-RL6UD8RvUtau0Klj/Hh2e4PM+3uW493ZKFCWZTMqihPxbxV7JMXsPVzHmZ2ld+zlFHD0XECzznd0pJB1Uuyv4Q==","signatures":[{"sig":"MEQCIFWShGT1WDput5WOHJSKYV/o96xaI7MvJBGKbitFctB7AiAfVGfXMYqVw8cwxq04ACr/q810oaj94Fc+RcOa+wlf8Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICt2BY5K9b0CnwJ0gbagMMx/KqVbXcZHPn/cXnax2rhgAiEAjT/VZnVigySG4ykTteJnbLUtPoS/1ljgSy57cfU+gqM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.71","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":342775057},"main":"backend/server.cjs","_from":"file:npm-package/farming-code-2.2.71.tgz","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"67d14ea4d0f9b27dfa8e4b0a83d6d2ec4fee73fc","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor && npm run prepare:ripgrep-runtime && node scripts/build-frontend-licenses.mjs","check":"npm run test:behavior:contracts && npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && npm run prepare:source-browser-runtime && node bin/farming start --port 3000","predev":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime && npm run prepare:source-browser-runtime","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build && npm run prepare:packaged-runtimes","pretest":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history && npm run prepare:ripgrep-runtime","restart":"npm run stop:all && FARMING_FORCE_ACP_HOST_RESTART=1 npm start","prebuild":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh deploy","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","test:behavior":"npm run test:behavior:contracts && npm run test:behavior:node && npm run test:behavior:e2e","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime && npm run prepare:source-browser-runtime","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","test:update:npm":"npm run build:backend-runtime && node --test backend/tests/test-npm-update-helper.ts","pretest:behavior":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:runtime-manifest","release:npm:pack":"./scripts/package-npm-release.sh","test:e2e:ios-pwa":"npm run build && tsx scripts/run-ios-pwa-acceptance.ts","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","test:behavior:e2e":"FARMING_E2E_REAL_CODEX=0 FARMING_E2E_FAKE_EXECUTABLES=1 FARMING_E2E_FAKE_ACP_AGENT=1 tsx scripts/run-behavior-e2e.ts","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy && tsx scripts/prepare-pi-acp-vendor.ts --copy","test:behavior:node":"tsx scripts/run-behavior-node-tests.ts && node --test scripts/run-playwright-isolated-lanes.test.mjs","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","release:fast-screen":"tsx scripts/run-release-fast-screen.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts desktop/native-browser-preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh deploy --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","generate:appearance-css":"tsx scripts/generate-code-appearance-css.ts","prepare:ripgrep-runtime":"tsx scripts/prepare-ripgrep-runtime.ts","test:behavior:contracts":"tsx scripts/check-behavior-contracts.ts && tsx scripts/check-source-inspection-contracts.ts","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","prepare:packaged-runtimes":"tsx scripts/prepare-packaged-runtimes.ts","release:fast-screen:shell":"playwright test tests/e2e/shell-status-indicator.spec.ts tests/e2e/agent-completion-notifications.spec.ts --project=chromium --grep 'shell .* activity|uses Terminal-native notification' --retries=0","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-composite","release:dependencies:check":"node scripts/check-release-managed-dependency-updates.mjs","release:fast-screen:mobile":"playwright test tests/e2e/mobile-composer.spec.ts tests/e2e/acp-human-cases.spec.ts --project=chromium --project=iphone-webkit --project=iphone-human-webkit --project=android-human-chromium --grep 'mobile (chat|terminal) long input|opens native ACP image attachments' --retries=0","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:e2e:playwright:isolated":"node scripts/run-playwright-isolated-lanes.mjs","release:fast-screen:workspace":"playwright test tests/e2e/file-auto-refresh.spec.ts tests/e2e/mobile-visual-acceptance.spec.ts --project=chromium --workers=2 --retries=0 --grep 'one hundred expanded|menu stays open when remembered'","test:desktop:browser-composed":"tsx scripts/run-desktop-browser-composed-e2e.ts","prepare:source-browser-runtime":"tsx scripts/prepare-source-browser-runtime.ts","test:pre-release:project-files":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/file-auto-refresh.spec.ts tests/e2e/file-editor-header-layout.spec.ts tests/e2e/file-markdown-preview.spec.ts tests/e2e/file-tree-hierarchy.spec.ts tests/e2e/file-viewer-types.spec.ts tests/e2e/project-files-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --output=.tmp/project-files-pre-release-state && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/project-files-human-stress.spec.ts --project=chromium --workers=1 --retries=0 --repeat-each=4 --trace=retain-on-failure --output=.tmp/project-files-pre-release-stress","release:coordinator:linux:check":"./scripts/check-linux-release-coordinator.sh","sync:openclaw-browser-extension":"node scripts/sync-openclaw-browser-extension.mjs","test:pre-release:codex-ui:smoke":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-smoke","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:isolated:matrix":"node scripts/run-playwright-full-matrix.mjs","test:e2e:playwright:isolated:self-test":"node --test scripts/run-playwright-isolated-lanes.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5d740124-d6cf-4084-8d68-4b7f54a6cd4e"}},"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.71.tgz","_integrity":"sha512-RL6UD8RvUtau0Klj/Hh2e4PM+3uW493ZKFCWZTMqihPxbxV7JMXsPVzHmZ2ld+zlFHD0XECzznd0pJB1Uuyv4Q==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.1.0","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","xlsx":"https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","yauzl":"3.4.0","lucide":"1.47.0","express":"^5.2.1","unified":"^11.0.5","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","remark-parse":"^11.0.0","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","react-zoom-pan-pinch":"4.2.0","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.5.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","pi-acp":"0.0.33","esbuild":"^0.27.7","mermaid":"^11.16.1","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","monaco-editor":"^0.55.1","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@visactor/vtable":"1.26.8","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.13.1","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.81.1"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","highlight.js","katex","lucide","material-icon-theme","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","react-zoom-pan-pinch","rehype-highlight","rehype-katex","remark-gfm","remark-math","remark-parse","tar","unified","vscode-jsonrpc","vscode-languageserver-protocol","ws","xlsx","yaml","yauzl","zod"],"farmingUserInstall":1,"optionalDependencies":{"@openai/codex-linux-x64":"npm:@openai/codex@0.156.1-linux-x64","@openai/codex-win32-x64":"npm:@openai/codex@0.156.1-win32-x64","@openai/codex-darwin-x64":"npm:@openai/codex@0.156.1-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.156.1-linux-arm64","@openai/codex-win32-arm64":"npm:@openai/codex@0.156.1-win32-arm64","@openai/codex-darwin-arm64":"npm:@openai/codex@0.156.1-darwin-arm64","@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.280","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.280","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.280","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.280","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.280","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.280","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.280","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.280"},"_npmOperationalInternal":{"tmp":"tmp/farming-code_2.2.71_1790205462612_0.39536342957155957","host":"s3://npm-registry-packages-npm-production"},"farmingUserRuntimeDependencies":{"npm":"12.1.0","node-linux-x64":"22.23.2","node-darwin-x64":"22.23.2","node-linux-arm64":"22.23.2","node-bin-darwin-arm64":"22.23.2"}},"2.2.72":{"_id":"farming-code@2.2.72","bin":{"farming":"bin/farming","farming-browser":"extensions/browser/bin/farming-browser","farming-computer":"extensions/computer/bin/farming-computer"},"bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"dist":{"shasum":"89634d51245d661863d421ac80c85feabb73e52f","tarball":"https://registry.npmjs.org/farming-code/-/farming-code-2.2.72.tgz","fileCount":14104,"integrity":"sha512-RPTHLGRvk2Nai1qHGdaDarbrtlBCSowRgO9jEqfT6681sNBCDRZZxxBP7GKCtPfAQ3H+X34Tm5TqlJm1dh6s4g==","signatures":[{"sig":"MEYCIQDrUzrEdh3mwCjrmBInoGKrDyF8VMWMYxEGI2h7jFr84gIhAPLLmlWmigVD/amo+X16073WsbQboeS6/rTu6g4TSHlF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDahZHFiI98ybxr9Y5ajSqHKMId2cvSjwU79Dr8ONR4GAIgBgiXTv5ghHtISINRlI15EESGzgWpAaoYPWFa3r607K0="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/farming-code@2.2.72","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":342779962},"main":"backend/server.cjs","name":"farming-code","_from":"file:npm-package/farming-code-2.2.72.tgz","author":"","engines":{"node":"^22.13.0 || >=24.0.0"},"gitHead":"b38cf7ecc2401e608504173af72f71d157952cac","license":"MIT","scripts":{"dev":"node bin/farming start --port 3000 & vite --open & wait","lint":"eslint --max-warnings=0 \"backend/**/*.cts\" \"backend/tests/test-*.ts\" \"desktop/**/*.ts\" \"extensions/*/backend/**/*.cts\" \"extensions/*/frontend/**/*.{ts,tsx}\" \"frontend/**/*.js\" \"frontend/**/*.ts\" \"scripts/**/*.ts\" \"shared/**/*.ts\" \"src/**/*.{ts,tsx}\" bin/farming --ignore-pattern \"frontend/vendor/**\" --ignore-pattern \"frontend/themes/**\"","test":"tsx scripts/run-tests.ts","build":"vite build && npm run build:crt-markdown && npm run prepare:acp-vendor && npm run prepare:ripgrep-runtime && node scripts/build-frontend-licenses.mjs","check":"npm run test:behavior:contracts && npm run typecheck && npm run lint && npm test","start":"FARMING_BASE_PATH=${FARMING_BASE_PATH:-/farming} npm run build && npm run prepare:source-browser-runtime && node bin/farming start --port 3000","predev":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime && npm run prepare:source-browser-runtime","desktop":"npm run desktop:build && electron dist-desktop/main.js","prepack":"FARMING_BASE_PATH=/farming npm run build && npm run prepare:packaged-runtimes","pretest":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run prepare:runtime-manifest && npm run build:usage-history && npm run prepare:ripgrep-runtime","restart":"npm run stop:all && FARMING_FORCE_ACP_HOST_RESTART=1 npm start","prebuild":"npm run generate:appearance-css && npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:acp-vendor && npm run prepare:runtime-manifest","stop:all":"bash scripts/stop-all-farming.sh","test:e2e":"npm run test:e2e:playwright","start:net":"node backend/farming-net-server.cjs","typecheck":"tsc --noEmit && tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json && tsc -p tsconfig.desktop.json && tsx scripts/typecheck-classic-runtime.ts && tsc -p tsconfig.shared.json && tsc -p tsconfig.scripts.json && tsc -p tsconfig.scripts-harness.json && tsc -p tsconfig.tests.json && tsc -p tsconfig.unit-tests.json && tsc -p tsconfig.usage.json","dev:backend":"node bin/farming start --port 3000","release:app":"./scripts/package-release.sh","release:cli":"./scripts/package-cli-release.sh","dev:frontend":"vite","pretypecheck":"npm run build:backend-runtime && npm run build:classic-runtime","deploy:remote":"./scripts/deploy.sh deploy","desktop:build":"FARMING_BASE_PATH=/ npm run build && npm run build:desktop-runtime","start:no-auth":"FARMING_DISABLE_AUTH=1 npm start","test:behavior":"npm run test:behavior:contracts && npm run test:behavior:node && npm run test:behavior:e2e","predev:backend":"npm run build:backend-runtime && npm run build:classic-runtime && npm run prepare:acp-vendor && npm run build:usage-history && npm run build:crt-markdown && npm run prepare:ripgrep-runtime && npm run prepare:source-browser-runtime","release:remote":"./scripts/install-remote-release.sh","test:e2e:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts local","release:cli:all":"FARMING_CLI_TARGETS=${FARMING_CLI_TARGETS:-node22-macos-arm64,node22-linux-x64} ./scripts/package-cli-release.sh","release:tarball":"./scripts/package-release.sh","test:e2e:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e.ts remote","test:update:npm":"npm run build:backend-runtime && node --test backend/tests/test-npm-update-helper.ts","pretest:behavior":"npm run build:backend-runtime && npm run build:classic-runtime && npm run build:usage-history && npm run prepare:runtime-manifest","release:npm:pack":"./scripts/package-npm-release.sh","test:e2e:ios-pwa":"npm run build && tsx scripts/run-ios-pwa-acceptance.ts","release:cli:smoke":"./scripts/smoke-cli-release.sh","release:npm:smoke":"./scripts/smoke-npm-package.sh","test:behavior:e2e":"FARMING_E2E_REAL_CODEX=0 FARMING_E2E_FAKE_EXECUTABLES=1 FARMING_E2E_FAKE_ACP_AGENT=1 tsx scripts/run-behavior-e2e.ts","typecheck:backend":"tsc -p tsconfig.backend-runtime.json && tsc -p tsconfig.backend.json","build:crt-markdown":"node -e \"require('fs').rmSync('dist/crt-markdown-assets',{recursive:true,force:true})\" && esbuild src/crt-markdown-renderer.tsx --bundle --outdir=dist --entry-names=crt-markdown-renderer --asset-names=crt-markdown-assets/[name]-[hash] --platform=browser --format=iife --target=es2022 --loader:.woff=file --loader:.woff2=file --loader:.ttf=file --minify && esbuild src/crt-mermaid-runtime.ts --bundle --outfile=dist/crt-mermaid-renderer.js --platform=browser --format=iife --target=es2022 --minify","prepare:acp-vendor":"tsx scripts/prepare-codex-acp-vendor.ts --copy && tsx scripts/prepare-claude-acp-vendor.ts --copy && tsx scripts/prepare-pi-acp-vendor.ts --copy","test:behavior:node":"tsx scripts/run-behavior-node-tests.ts && node --test scripts/run-playwright-isolated-lanes.test.mjs","test:desktop:smoke":"npm run desktop:build && tsx scripts/smoke-desktop.ts","build:usage-history":"tsx scripts/build-usage-history-scanner.ts","release:fast-screen":"tsx scripts/run-release-fast-screen.ts","test:e2e:playwright":"playwright test","pretypecheck:backend":"npm run build:backend-runtime && npm run build:classic-runtime","build:backend-runtime":"tsx scripts/build-backend-runtime.ts","build:classic-runtime":"tsx scripts/build-classic-browser-runtime.ts","build:desktop-runtime":"esbuild desktop/main.ts desktop/preload.ts desktop/native-browser-preload.ts --bundle --platform=node --format=cjs --target=node22 --outdir=dist-desktop --external:electron && node -e \"const fs=require('node:fs');fs.mkdirSync('dist-desktop/assets',{recursive:true});fs.copyFileSync('desktop/assets/farming-desktop.png','dist-desktop/assets/farming-desktop.png')\"","deploy:remote:no-auth":"./scripts/deploy.sh deploy --disable-auth","test:update:platforms":"tsx scripts/test-update-platforms.ts","test:performance:audit":"tsx tests/performance/agent-usage-hotpath.ts && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-bottlenecks.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:performance:scale":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/performance-scaling.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","generate:appearance-css":"tsx scripts/generate-code-appearance-css.ts","prepare:ripgrep-runtime":"tsx scripts/prepare-ripgrep-runtime.ts","test:behavior:contracts":"tsx scripts/check-behavior-contracts.ts && tsx scripts/check-source-inspection-contracts.ts","test:e2e:visual:capture":"FARMING_VISUAL_OUTPUT_DIR=${FARMING_VISUAL_OUTPUT_DIR:-.tmp/visual-capture} playwright test tests/e2e/visual-regression.spec.ts --project=chromium --workers=1 --retries=0","test:e2e:visual:compare":"node scripts/compare-visual-revisions.cjs","docs:product:screenshots":"tsx scripts/capture-product-screenshots.ts","prepare:runtime-manifest":"tsx scripts/build-runtime-dependency-manifest.ts","release:app:legacy-linux":"./scripts/package-linux-legacy-release.sh","release:app:linux-compat":"./scripts/package-linux-compat-release.sh","prepare:packaged-runtimes":"tsx scripts/prepare-packaged-runtimes.ts","release:fast-screen:shell":"playwright test tests/e2e/shell-status-indicator.spec.ts tests/e2e/agent-completion-notifications.spec.ts --project=chromium --grep 'shell .* activity|uses Terminal-native notification' --retries=0","test:e2e:visual:self-test":"node scripts/compare-visual-revisions.cjs --self-test","test:e2e:workspaces:local":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts local","test:pre-release:codex-ui":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-composite","release:dependencies:check":"node scripts/check-release-managed-dependency-updates.mjs","release:fast-screen:mobile":"playwright test tests/e2e/mobile-composer.spec.ts tests/e2e/acp-human-cases.spec.ts --project=chromium --project=iphone-webkit --project=iphone-human-webkit --project=android-human-chromium --grep 'mobile (chat|terminal) long input|opens native ACP image attachments' --retries=0","test:e2e:playwright:update":"playwright test --update-snapshots","test:e2e:workspaces:remote":"FARMING_BASE_PATH=/farming npm run build && tsx scripts/e2e-workspaces.ts remote","test:remote-terminal:chaos":"tsx scripts/smoke-remote-terminal-chaos.ts","test:remote-terminal:smoke":"tsx scripts/smoke-remote-terminal.ts","release:remote:linux-compat":"./scripts/install-remote-linux-compat-release.sh","test:performance:transcript":"tsx backend/tests/test-acp-transcript-performance.ts","test:e2e:playwright:isolated":"node scripts/run-playwright-isolated-lanes.mjs","release:fast-screen:workspace":"playwright test tests/e2e/file-auto-refresh.spec.ts tests/e2e/mobile-visual-acceptance.spec.ts --project=chromium --workers=2 --retries=0 --grep 'one hundred expanded|menu stays open when remembered'","test:desktop:browser-composed":"tsx scripts/run-desktop-browser-composed-e2e.ts","prepare:source-browser-runtime":"tsx scripts/prepare-source-browser-runtime.ts","test:pre-release:project-files":"FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/file-auto-refresh.spec.ts tests/e2e/file-editor-header-layout.spec.ts tests/e2e/file-markdown-preview.spec.ts tests/e2e/file-tree-hierarchy.spec.ts tests/e2e/file-viewer-types.spec.ts tests/e2e/project-files-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --output=.tmp/project-files-pre-release-state && FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/project-files-human-stress.spec.ts --project=chromium --workers=1 --retries=0 --repeat-each=4 --trace=retain-on-failure --output=.tmp/project-files-pre-release-stress","release:coordinator:linux:check":"./scripts/check-linux-release-coordinator.sh","sync:openclaw-browser-extension":"node scripts/sync-openclaw-browser-extension.mjs","test:pre-release:codex-ui:smoke":"FARMING_REAL_CODEX_BIN=\"$(command -v codex)\" FARMING_CODEX_BIN=\"$PWD/tests/e2e/fixtures/real-codex-no-update\" FARMING_REAL_CODEX_RELEASE_CASE=1 FARMING_E2E_REAL_CODEX=1 FARMING_PLAYWRIGHT_INTERNAL=1 playwright test tests/e2e/internal/real-codex-release-case.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure --grep @release-smoke","test:pre-release:terminal-input":"playwright test tests/e2e/terminal-input-performance.spec.ts --project=chromium --workers=1 --retries=0 --trace=retain-on-failure","test:e2e:playwright:isolated:matrix":"node scripts/run-playwright-full-matrix.mjs","test:e2e:playwright:isolated:self-test":"node --test scripts/run-playwright-isolated-lanes.test.mjs"},"version":"2.2.72","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5d740124-d6cf-4084-8d68-4b7f54a6cd4e"}},"homepage":"https://github.com/zhuwenzhuang/farming#readme","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"_resolved":"/home/runner/work/farming/farming/npm-package/farming-code-2.2.72.tgz","_integrity":"sha512-RPTHLGRvk2Nai1qHGdaDarbrtlBCSowRgO9jEqfT6681sNBCDRZZxxBP7GKCtPfAQ3H+X34Tm5TqlJm1dh6s4g==","repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"_npmVersion":"12.1.0","description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","directories":{},"maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"_nodeVersion":"22.23.2","allowScripts":{"fsevents":false,"puppeteer":false,"esbuild@0.27.7":true,"esbuild@0.28.1":true,"electron@42.3.3":true,"node-pty@1.2.0-beta.12":true},"dependencies":{"ws":"^8.21.0","tar":"7.5.22","zod":"^3.25.76","diff":"^9.0.0","xlsx":"https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz","yaml":"^2.9.0","katex":"^0.17.0","react":"^19.2.4","yauzl":"3.4.0","lucide":"1.47.0","express":"^5.2.1","unified":"^11.0.5","chokidar":"^5.0.0","node-pty":"^1.2.0-beta.12","react-dom":"^19.2.4","remark-gfm":"^4.0.1","compression":"^1.8.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","ansi-to-html":"^0.7.2","highlight.js":"^11.11.1","rehype-katex":"^7.0.1","remark-parse":"^11.0.0","@zumer/snapdom":"2.23.1","react-arborist":"^3.10.5","react-markdown":"^10.1.0","vscode-jsonrpc":"9.0.1","@xterm/headless":"^6.0.0","@xterm/addon-fit":"^0.11.0","qrcode-generator":"^2.0.4","rehype-highlight":"^7.0.2","@xterm/addon-webgl":"^0.19.0","@xterm/addon-search":"^0.16.0","material-icon-theme":"^5.36.1","react-zoom-pan-pinch":"4.2.0","@xterm/addon-clipboard":"^0.2.0","@xterm/addon-serialize":"^0.14.0","@agentclientprotocol/sdk":"1.5.0","vscode-languageserver-protocol":"3.18.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vite":"^8.0.3","eslint":"^10.2.0","pi-acp":"0.0.33","esbuild":"^0.27.7","mermaid":"^11.16.1","electron":"^42.3.3","@types/ws":"^8.18.1","puppeteer":"^24.40.0","@eslint/js":"^10.0.1","typescript":"^6.0.2","@types/node":"^26.1.1","@types/react":"^19.2.14","@yao-pkg/pkg":"6.20.0","agent-browser":"0.32.3","monaco-editor":"^0.55.1","patch-package":"8.0.1","@playwright/test":"^1.59.1","@types/react-dom":"^19.2.3","@visactor/vtable":"1.26.8","@vitejs/plugin-react":"^6.0.1","@typescript-eslint/parser":"8.65.0","eslint-plugin-react-hooks":"^7.1.1","@agentclientprotocol/codex-acp":"1.13.1","@typescript-eslint/eslint-plugin":"8.65.0","@agentclientprotocol/claude-agent-acp":"0.81.1"},"bundleDependencies":["@agentclientprotocol/sdk","@xterm/addon-clipboard","@xterm/addon-fit","@xterm/addon-search","@xterm/addon-serialize","@xterm/addon-webgl","@xterm/headless","@xterm/xterm","@zumer/snapdom","ansi-to-html","chokidar","compression","diff","express","highlight.js","katex","lucide","material-icon-theme","node-pty","qrcode-generator","react","react-arborist","react-dom","react-markdown","react-zoom-pan-pinch","rehype-highlight","rehype-katex","remark-gfm","remark-math","remark-parse","tar","unified","vscode-jsonrpc","vscode-languageserver-protocol","ws","xlsx","yaml","yauzl","zod"],"farmingUserInstall":1,"optionalDependencies":{"@openai/codex-linux-x64":"npm:@openai/codex@0.156.1-linux-x64","@openai/codex-win32-x64":"npm:@openai/codex@0.156.1-win32-x64","@openai/codex-darwin-x64":"npm:@openai/codex@0.156.1-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.156.1-linux-arm64","@openai/codex-win32-arm64":"npm:@openai/codex@0.156.1-win32-arm64","@openai/codex-darwin-arm64":"npm:@openai/codex@0.156.1-darwin-arm64","@anthropic-ai/claude-agent-sdk-linux-x64":"0.3.280","@anthropic-ai/claude-agent-sdk-win32-x64":"0.3.280","@anthropic-ai/claude-agent-sdk-darwin-x64":"0.3.280","@anthropic-ai/claude-agent-sdk-linux-arm64":"0.3.280","@anthropic-ai/claude-agent-sdk-win32-arm64":"0.3.280","@anthropic-ai/claude-agent-sdk-darwin-arm64":"0.3.280","@anthropic-ai/claude-agent-sdk-linux-x64-musl":"0.3.280","@anthropic-ai/claude-agent-sdk-linux-arm64-musl":"0.3.280"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/farming-code_2.2.72_1790217350680_0.4914855230309694"},"farmingUserRuntimeDependencies":{"npm":"12.1.0","node-linux-x64":"22.23.2","node-darwin-x64":"22.23.2","node-linux-arm64":"22.23.2","node-bin-darwin-arm64":"22.23.2"}}},"time":{"created":"2026-07-14T04:15:44.267Z","modified":"2026-09-24T02:35:52.655Z","2.2.6":"2026-07-14T04:15:44.943Z","2.2.7":"2026-07-14T10:44:07.794Z","2.2.8":"2026-07-14T18:53:59.880Z","2.2.11":"2026-07-18T04:56:12.714Z","2.2.12":"2026-07-18T18:31:25.962Z","2.2.13":"2026-07-19T04:12:47.406Z","2.2.14":"2026-07-19T09:22:42.012Z","2.2.16":"2026-07-22T00:43:30.528Z","2.2.17":"2026-07-23T21:20:13.691Z","2.2.18":"2026-07-23T22:51:26.365Z","2.2.19":"2026-07-24T14:15:59.145Z","2.2.20":"2026-07-24T15:38:30.751Z","2.2.22":"2026-07-25T15:51:40.025Z","2.2.23":"2026-07-25T16:29:04.013Z","2.2.27":"2026-07-25T17:45:35.554Z","2.2.28":"2026-07-26T23:55:37.753Z","2.2.29":"2026-07-28T17:50:05.859Z","2.2.30":"2026-07-29T02:56:08.426Z","2.2.32":"2026-07-31T04:08:34.666Z","2.2.33":"2026-07-31T09:09:35.016Z","2.2.35":"2026-08-01T14:25:30.511Z","2.2.36":"2026-08-01T18:56:41.846Z","2.2.37":"2026-08-01T20:35:29.426Z","2.2.38":"2026-08-02T21:43:16.988Z","2.2.39":"2026-08-03T08:04:36.700Z","2.2.40":"2026-08-03T18:06:00.685Z","2.2.41":"2026-08-06T09:18:29.596Z","2.2.43":"2026-08-06T11:34:19.132Z","2.2.45":"2026-08-06T12:13:09.340Z","2.2.46":"2026-08-06T12:38:54.725Z","2.2.47":"2026-08-06T23:33:10.391Z","2.2.48":"2026-08-08T10:57:32.315Z","2.2.49":"2026-08-08T13:19:10.165Z","2.2.50":"2026-08-12T16:25:49.922Z","2.2.51":"2026-08-14T20:20:59.427Z","2.2.52":"2026-08-16T11:44:16.563Z","2.2.53":"2026-08-18T20:26:01.176Z","2.2.54":"2026-08-19T00:57:00.676Z","2.2.55":"2026-08-19T17:56:52.650Z","2.2.56":"2026-08-20T23:33:52.321Z","2.2.57":"2026-08-24T12:46:08.929Z","2.2.58":"2026-08-25T18:56:40.602Z","2.2.59":"2026-08-27T16:39:19.190Z","2.2.60":"2026-08-28T23:39:02.952Z","2.2.61":"2026-08-29T09:14:57.853Z","2.2.62":"2026-08-30T15:37:50.943Z","2.2.63":"2026-08-31T20:40:14.913Z","2.2.64":"2026-09-03T16:29:55.869Z","2.2.65":"2026-09-03T17:35:53.901Z","2.2.66":"2026-09-08T15:04:46.681Z","2.2.67":"2026-09-12T04:46:12.091Z","2.2.68":"2026-09-16T19:13:52.853Z","2.2.69":"2026-09-19T13:46:08.053Z","2.2.70":"2026-09-19T21:09:25.908Z","2.2.71":"2026-09-23T23:17:44.101Z","2.2.72":"2026-09-24T02:35:52.323Z"},"bugs":{"url":"https://github.com/zhuwenzhuang/farming/issues"},"license":"MIT","homepage":"https://github.com/zhuwenzhuang/farming#readme","keywords":["coding-agent-workspace","agent-supervision","agent-orchestration","multi-agent","browser-terminal","browser-workspace","remote-development","self-hosted","codex","claude-code","opencode"],"repository":{"url":"git+https://github.com/zhuwenzhuang/farming.git","type":"git"},"description":"Farming Code is a self-hosted browser workspace for running and supervising AI coding agents","maintainers":[{"name":"wenzhuang.zwz","email":"wenzhuang.zwz@gmail.com"}],"readme":"<p align=\"center\">\n  <a href=\"./public/farming-2/app-icon-v2-512.png\"><img src=\"./public/farming-2/app-icon-v2-512.webp\" alt=\"Farming Code\" width=\"112\"></a>\n</p>\n\n<h1 align=\"center\">Farming Code</h1>\n\n<p align=\"center\">\n  Farming Code 是一个开源、自托管的浏览器工作区，用于启动和管理 Codex、Claude Code、Pi、OpenCode 及其他 AI Coding Agent。\n</p>\n\n<p align=\"center\">\n  <a href=\"https://zhuwenzhuang.github.io/farming/cn/\">在线文档</a> ·\n  <a href=\"./README.md\">English</a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/zhuwenzhuang/farming/actions/workflows/ci.yml\"><img alt=\"CI\" src=\"https://github.com/zhuwenzhuang/farming/actions/workflows/ci.yml/badge.svg\"></a>\n  <a href=\"https://github.com/zhuwenzhuang/farming/releases\"><img alt=\"Release\" src=\"https://img.shields.io/github/v/release/zhuwenzhuang/farming?label=release\"></a>\n  <a href=\"https://www.npmjs.com/package/farming-code\"><img alt=\"npm\" src=\"https://img.shields.io/npm/v/farming-code?label=npm\"></a>\n  <a href=\"./LICENSE\"><img alt=\"License\" src=\"https://img.shields.io/github/license/zhuwenzhuang/farming\"></a>\n  <img alt=\"macOS and Linux\" src=\"https://img.shields.io/badge/platform-macOS%20%7C%20Linux-555\">\n</p>\n\n## 快速开始\n\n**npm 安装** — 已有 Node.js 22.13+（22.x）或 24+，且 npm 的 bin 目录已在 PATH 中。\n\n```bash\nnpm install --global farming-code@latest\nfarming daemon\n```\n\n**指定目录安装** — 安装到你选择的目录，自带 Node.js，并为受支持的旧 Linux 主机提供兼容运行环境。\n\n```bash\ncurl -fsSL https://zhuwenzhuang.github.io/farming/install.sh | FARMING_INSTALL_ROOT=\"$HOME/farming\" bash\n\"$HOME/farming/farming\" daemon\n```\n\nmacOS / Linux；任选一种方式，打开输出的访问地址，选择 **New Agent** 即可开始。\n详见[安装要求](https://zhuwenzhuang.github.io/farming/cn/get-started/installation)。\n\n[![Farming Code 工作台](./docs/products/code/assets/01-code-workspace.webp)](./docs/products/code/assets/01-code-workspace.png)\n\nFarming Code 与代码仓库和 Coding CLI 运行在同一台开发机上。Agent 进程、终端和项目文件都留在这台机器上；电脑或手机浏览器连接并操作这些真实 Session。\n\n[![启动 Agent](./docs/products/code/assets/02-start-agent-picker.webp)](./docs/products/code/assets/02-start-agent-picker.png)\n\n## Farming Code\n\nFarming Code 是默认的桌面与手机界面。它按项目组织工作，把实时 Agent、可恢复的 History、文件、浏览器和 Review 放在同一个浏览器工作区里。\n\n### Agent、Chat 与 Terminal\n\n启动或恢复 Codex、Claude Code、Pi、OpenCode、Qoder、Qwen Code 以及其他检测到的 Coding Agent。使用结构化 Chat 阅读结果和检查过程，或使用 Terminal 直接操作 CLI。\n\n[![Farming Code 结构化 Agent 过程](./docs/products/code/assets/11-code-agent-process.webp)](./docs/products/code/assets/11-code-agent-process.png)\n\n### Files 与 Review\n\n浏览、搜索并轻量编辑 Project Files，不需要离开当前任务。需要证据时可以检查修改并打开 Review。\n\n### Browser Resource\n\nFarming 让人和 Agent 使用同一个 Project Browser。详见 [Farming Browser](docs/products/code/browser-agent-cli.zh_cn.md)。\n\n## 支持的 Agent\n\n| Agent | 结构化 Chat | Terminal | History / Resume |\n| --- | --- | --- | --- |\n| Codex | 是 | 是 | 是 |\n| Claude Code | 是 | 是 | 是 |\n| Pi | 是 | 是 | 是 |\n| OpenCode | 是 | 是 | 是 |\n| Qoder | 是 | 是 | 是 |\n| Qwen Code | 是 | 是 | 是 |\n| bash / zsh | — | 是 | 否 |\n\n使用 Provider 的 Agent 仍需要有效登录；其他被发现的 CLI 必须能在 Farming Host 上正常运行。\n\n## 远程使用\n\n在开发机上运行 Farming，再从能够访问这台机器的电脑或手机打开带鉴权 URL。浏览器断开后 Agent 仍会继续运行。远程访问和安全说明见[运行与维护](./docs/operations/README.zh_cn.md)。\n\n## Farming CRT\n\nFarming CRT 是可选的键盘优先复古控制室，用来扫视多个 Agent、打开它们的 Chat 或 Terminal、搜索 History，以及查看用量遥测。\n\n[![Farming CRT 多 Agent 仪表盘](./docs/products/crt/assets/01-crt-dashboard.webp)](./docs/products/crt/assets/01-crt-dashboard.png)\n\nCode 与 CRT 使用相同的后端 Agent 和 Session，切换界面不会创建第二个 Agent。Farming Code 仍是默认界面，也是受支持的手机界面。控制方式和完整流程见 [Farming CRT 指南](./docs/products/crt/README.zh_cn.md)。\n\n## 安装与更新\n\n通过上面的命令安装，在 **Settings → Updates** 中更新。安装和更新均使用 npm registry。\n\n[![Farming npm 更新设置](./docs/products/code/assets/14-code-settings.webp)](./docs/products/code/assets/14-code-settings.png)\n\n独立 CLI 和目录 Bundle 仍可从 [GitHub Releases](https://github.com/zhuwenzhuang/farming/releases) 手动下载安装。应用内更新不会读取 GitHub Releases，只对 npm 安装开放。\n\n## 安全\n\nFarming 会控制开发机上的真实终端和文件。请只运行在可信主机和可信网络中，不要在没有 VPN、SSH Tunnel、HTTPS Reverse Proxy 或等价访问控制时直接暴露到公网。\n\n部署与报告说明见 [SECURITY.zh_cn.md](./SECURITY.zh_cn.md)。\n\n## 文档\n\n- [在线中文文档](https://zhuwenzhuang.github.io/farming/cn/)\n- [仓库架构与开发文档](./docs/README.zh_cn.md)\n- [版本历史](https://github.com/zhuwenzhuang/farming/releases)\n- [参与贡献](./CONTRIBUTING.zh_cn.md)\n\n## License\n\nFarming 使用 [MIT License](./LICENSE)。第三方组件声明见 [THIRD_PARTY_NOTICES.md](./THIRD_PARTY_NOTICES.md)。\n","readmeFilename":"README.zh_cn.md"}