{"_id":"@twofive/snail-pi-web","_rev":"32-cce1587345e158042858740d4042193b","name":"@twofive/snail-pi-web","dist-tags":{"latest":"0.9.25"},"versions":{"0.7.2":{"name":"@twofive/snail-pi-web","version":"0.7.2","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.7.2","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/602362837/pi-agnet-web#readme","bugs":{"url":"https://github.com/602362837/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"f8f9a4d68fac74ce2a8e21dbc80f2ff63df8a8dc","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.7.2.tgz","fileCount":765,"integrity":"sha512-eYm/+5yllJ9XJMoWzlr+ZiUrCBIjy2+vASD6Ce1IPYTL2xE7Xa3pm2wgLwVYKQEbiOs9Bb4Kc0pm01vNp1ZFdg==","signatures":[{"sig":"MEUCIQDQZoJt/yF1NnS73xkDuU2dL93UbzBVcJFxDqjsbG30TgIgaf0Ci7cS1keKk+zTDh9gt9bqPuse1jwBChT08fMGNeU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57209718},"scripts":{"dev":"next dev -p 30141","lint":"eslint .","build":"node scripts/build-next.js","start":"next start -p 30141","release":"npm run release:patch","release:patch":"npm version patch && npm publish --access public","prepublishOnly":"npm run lint && tsc --noEmit && npm run build"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"repository":{"url":"git+https://github.com/602362837/pi-agnet-web.git","type":"git"},"_npmVersion":"11.11.0","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"diff":"^8.0.4","next":"16.2.9","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"^0.80.2","react-syntax-highlighter":"^16.1.1","@earendil-works/pi-coding-agent":"^0.80.2","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","postcss":"^8","typescript":"^5","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.9","@tailwindcss/postcss":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.7.2_1784200118901_0.7388598517590961","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"name":"@twofive/snail-pi-web","version":"0.7.3","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.7.3","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/602362837/pi-agnet-web#readme","bugs":{"url":"https://github.com/602362837/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"526c97e75a60955480ca74a4be719fbc9fc88b82","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.7.3.tgz","fileCount":775,"integrity":"sha512-NevPcbvwTmFX26wrDZrwo7eTN2RHksbxLXvJiTcZPcjwXtrabyM917vYxvvauTZYJLh8iZ+XLT3gZuRFjCM6cg==","signatures":[{"sig":"MEQCIBtq65hv7nu8cRaLzZp/GXC1xYIRLlQbCBP0ailcggrMAiAxuqbJfls3SrYPqFA8vIALQvgL+zmIvuwN5AcbO4O/zQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58331895},"gitHead":"42f5e338f35dae8dd0383fa9c95f55ebf9cba28b","scripts":{"dev":"next dev -p 62666","lint":"eslint .","build":"node scripts/build-next.js","start":"next start -p 62666","release":"npm run release:patch","release:patch":"npm version patch && npm publish --access public","prepublishOnly":"npm run lint && tsc --noEmit && npm run build"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"repository":{"url":"git+https://github.com/602362837/pi-agnet-web.git","type":"git"},"_npmVersion":"11.11.0","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"diff":"^8.0.4","next":"16.2.9","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"^0.80.7","react-syntax-highlighter":"^16.1.1","@earendil-works/pi-coding-agent":"^0.80.7","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","postcss":"^8","typescript":"^5","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.9","@tailwindcss/postcss":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.7.3_1784391952221_0.5209441749776766","host":"s3://npm-registry-packages-npm-production"}},"0.7.4":{"name":"@twofive/snail-pi-web","version":"0.7.4","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.7.4","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/602362837/pi-agnet-web#readme","bugs":{"url":"https://github.com/602362837/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"b370bc618f2dff9f2b0899f7ee720681b1f9a23a","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.7.4.tgz","fileCount":775,"integrity":"sha512-R/A1uqFblp3zHPXO0yOBd+nhl+Kwn/tyLICpwf6PFwYWAk7oLz14BNDvHBUmazEEvGP0raYn9nQUGbJUNoqLog==","signatures":[{"sig":"MEUCIQCtGxCmfgOvYtXoiiVH1XsBT6/KQkPndsNsgL+NUD629AIgXwrZWjLB8rHq8qNNH0HLKCU9BEXCIdPofHThJV5RNpI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58331919},"gitHead":"42f5e338f35dae8dd0383fa9c95f55ebf9cba28b","scripts":{"dev":"next dev -p 62666","lint":"eslint .","build":"node scripts/build-next.js","start":"next start -p 62666","release":"npm run release:patch","release:patch":"npm version patch && npm publish --access public","prepublishOnly":"npm run lint && tsc --noEmit && npm run build"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"repository":{"url":"git+https://github.com/602362837/pi-agnet-web.git","type":"git"},"_npmVersion":"11.11.0","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"diff":"^8.0.4","next":"16.2.9","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.80.7","react-syntax-highlighter":"^16.1.1","@earendil-works/pi-coding-agent":"0.80.7","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","postcss":"^8","typescript":"^5","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.9","@tailwindcss/postcss":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.7.4_1784394223250_0.24056052062056987","host":"s3://npm-registry-packages-npm-production"}},"0.7.5":{"name":"@twofive/snail-pi-web","version":"0.7.5","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.7.5","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/602362837/pi-agnet-web#readme","bugs":{"url":"https://github.com/602362837/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"98254bf40e9d314dd1457878effdc075a231cfe7","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.7.5.tgz","fileCount":775,"integrity":"sha512-iRQe8TZYjzz8gEj4UAlPeJdLbPLTZv+mNPX2qxGwbTWTH6lgVQeRqljxKrtfE86/zZOHInzG3f2cGCNEo6K7Kg==","signatures":[{"sig":"MEQCIDPj4D9DSo4oSjDAxulfojYLSrdR8bo/EQvFspNQNLWZAiADNqI4XVeon2K+dncSS7sdt1QCoz4wnG8cN4q93y5QFw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59108585},"gitHead":"42f5e338f35dae8dd0383fa9c95f55ebf9cba28b","scripts":{"dev":"next dev -p 62666","lint":"eslint .","build":"node scripts/build-next.js","start":"next start -p 62666","release":"npm run release:patch","release:patch":"npm version patch && npm publish --access public","prepublishOnly":"npm run lint && tsc --noEmit && npm run build"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"repository":{"url":"git+https://github.com/602362837/pi-agnet-web.git","type":"git"},"_npmVersion":"11.11.0","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"diff":"^8.0.4","next":"16.2.9","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.80.10","react-syntax-highlighter":"^16.1.1","@earendil-works/pi-coding-agent":"0.80.10","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","postcss":"^8","typescript":"^5","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.9","@tailwindcss/postcss":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.7.5_1784395646223_0.2824023919187475","host":"s3://npm-registry-packages-npm-production"}},"0.7.6":{"name":"@twofive/snail-pi-web","version":"0.7.6","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.7.6","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/602362837/pi-agnet-web#readme","bugs":{"url":"https://github.com/602362837/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"7a3c670a2f9f9933c6375f7f5aadd29cad151e83","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.7.6.tgz","fileCount":775,"integrity":"sha512-4SZOyZXXQ75K55rHdrXmAo9RyI5krf7bF3A0eZGrbj2ODSHY8XlnkHEd09VEEQLhYxUxeMc8xcXkvCF2US8Myg==","signatures":[{"sig":"MEUCIQDFNZOR7J67Etj/iGkwrbolIfbR29zZeYGnKOFjhCZMCAIgUoXCzI1FnmQ0nlBZOvlJHrYQ0uaT2vISlpzKdLSASRk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59105272},"gitHead":"37a4b8771f17d520179430561f39b76aec39b981","scripts":{"dev":"next dev -p 62666","lint":"eslint .","build":"node scripts/build-next.js","start":"next start -p 62666","release":"npm run release:patch","release:patch":"npm version patch && npm publish --access public","prepublishOnly":"npm run lint && tsc --noEmit && npm run build"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"repository":{"url":"git+https://github.com/602362837/pi-agnet-web.git","type":"git"},"_npmVersion":"11.11.0","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"diff":"^8.0.4","next":"16.2.9","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.80.10","react-syntax-highlighter":"^16.1.1","@earendil-works/pi-coding-agent":"0.80.10","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","postcss":"^8","typescript":"^5","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.9","@tailwindcss/postcss":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.7.6_1784399679569_0.09375507066175759","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@twofive/snail-pi-web","version":"0.8.0","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.8.0","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/602362837/pi-agnet-web#readme","bugs":{"url":"https://github.com/602362837/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"497e9aa5ce85ba1da70b11d064ca5585aa9d4584","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.8.0.tgz","fileCount":795,"integrity":"sha512-NgkizVYuPqDBldmO4ygPpCFESRQCyd1jvWbvBOcQqdQI6/iaEiVfAv8UDXxgviEPcxW0u/a9fuYaFi1mzLgp4A==","signatures":[{"sig":"MEYCIQDOIzy2CVodq4WhQVgNbV2OrddXJFc9SevI7MQIM+YFcgIhAOdPdS50cYed1UCtWOY0czpBYkLwHhTlRDb8zFxUJiuE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61190556},"gitHead":"8e94b201cf3740e45e4688350cf3c069441b7add","scripts":{"dev":"next dev -p 62666","lint":"eslint .","build":"node scripts/build-next.js","start":"next start -p 62666","release":"npm run release:patch","release:patch":"npm version patch && npm publish --access public","prepublishOnly":"npm run lint && tsc --noEmit && npm run build"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"repository":{"url":"git+https://github.com/602362837/pi-agnet-web.git","type":"git"},"_npmVersion":"11.11.0","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"diff":"^8.0.4","next":"16.2.9","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.80.10","react-syntax-highlighter":"^16.1.1","@earendil-works/pi-coding-agent":"0.80.10","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","postcss":"^8","typescript":"^5","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.9","@tailwindcss/postcss":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.8.0_1784464613454_0.7813862373608276","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@twofive/snail-pi-web","version":"0.9.0","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.9.0","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/602362837/pi-agnet-web#readme","bugs":{"url":"https://github.com/602362837/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"392241d993d6f1528b80d6f30426ec0d8ed110bd","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.9.0.tgz","fileCount":1035,"integrity":"sha512-RtP89WYL8WQg4iuNUAYvFEIY27lxj7KE4JkS6rsi8Cs/d6zruAoroVwnbk9I0g8dxS23sozENtkkR/bblX1K5g==","signatures":[{"sig":"MEUCIQDqz5/0bbjXCRIdGPhBpkq+iEnUWwudfCazdBnw6CHKGAIgNlvAFVs6nFtYysjwd6mgoJJlSY0HGH5sanmSy3VXUz8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71237938},"gitHead":"b373b0e6d1969c9839a9a50f3b1108083e0ec541","scripts":{"dev":"next dev -p 62666","lint":"eslint .","build":"node scripts/build-next.js","start":"next start -p 62666","release":"npm run release:patch","test:browser":"tsx scripts/smoke-browser-binding.ts && tsx scripts/smoke-chrome-extension-artifacts.ts","release:patch":"npm version patch && npm publish --access public","prepublishOnly":"npm run lint && tsc --noEmit && npm run build"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"repository":{"url":"git+https://github.com/602362837/pi-agnet-web.git","type":"git"},"_npmVersion":"11.11.0","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.3","diff":"^8.0.4","next":"16.2.9","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.80.10","react-syntax-highlighter":"^16.1.1","@earendil-works/pi-coding-agent":"0.80.10","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","eslint":"^9","postcss":"^8","@types/ws":"^8.18.1","typescript":"^5","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.9","@tailwindcss/postcss":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.9.0_1784966805376_0.7594441956388283","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"@twofive/snail-pi-web","version":"0.9.1","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.9.1","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/602362837/pi-agnet-web#readme","bugs":{"url":"https://github.com/602362837/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"cf9b6f4c40bb61bbab1fdcd78a4bbc6ed4a2b51f","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.9.1.tgz","fileCount":1035,"integrity":"sha512-kxr2OB076TzKitRpf7Xb4XDCsk/HZiZj3qPxfl1elsx59DnQJIOF+cqpAr87PpIn2viAD+AwUlEp1kqTBrlN+w==","signatures":[{"sig":"MEQCIAhbCQ4734dkCu8SveDJgj8e4xSSWTqCnAaHtP6z1r/hAiAhoow/aCL4OS62EuLW9LfHT/XFcGANmUimX74SUE9Ksg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71244420},"gitHead":"45f3b81ab6a51675275eb9657420a7c86212d211","scripts":{"dev":"next dev -p 62666","lint":"eslint .","build":"node scripts/build-next.js","start":"next start -p 62666","release":"npm run release:patch","test:browser":"tsx scripts/smoke-browser-binding.ts && tsx scripts/smoke-chrome-extension-artifacts.ts","release:patch":"npm version patch && npm publish --access public","prepublishOnly":"npm run lint && tsc --noEmit && npm run build"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"repository":{"url":"git+https://github.com/602362837/pi-agnet-web.git","type":"git"},"_npmVersion":"11.11.0","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.3","diff":"^8.0.4","next":"16.2.9","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.80.10","react-syntax-highlighter":"^16.1.1","@earendil-works/pi-coding-agent":"0.80.10","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","eslint":"^9","postcss":"^8","@types/ws":"^8.18.1","typescript":"^5","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.9","@tailwindcss/postcss":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.9.1_1784988960537_0.9641969778446609","host":"s3://npm-registry-packages-npm-production"}},"0.9.2":{"name":"@twofive/snail-pi-web","version":"0.9.2","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.9.2","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/602362837/pi-agnet-web#readme","bugs":{"url":"https://github.com/602362837/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"9bc4649a006eef4cd4befa1396d57d12b46fe74c","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.9.2.tgz","fileCount":1036,"integrity":"sha512-hd9yqEWa9ttiYlaIzo4vgpBJc9yuNQx5gCLrBAuV19/2+UKYc6vfuOor+7eD7jqJr3jTbWc6ep2Jx3wttwMusg==","signatures":[{"sig":"MEUCIGWiuEt+9JiqBcKtGALMhH7L4zVrabjlGS5WB7/+CMKWAiEAn4yBz6InwPW6O4++Hzr/kSOq75+Nac8+PRtexSlwQl0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71211874},"gitHead":"2ad9c64bd89a16bfbbadd71d6fcaab138c54889e","scripts":{"dev":"next dev -p 62666","lint":"eslint .","build":"node scripts/build-next.js","start":"next start -p 62666","release":"npm run release:patch","test:browser":"tsx scripts/smoke-browser-binding.ts && tsx scripts/smoke-chrome-extension-artifacts.ts","test:runtime":"tsx scripts/smoke-runtime-packaging.ts","release:patch":"npm version patch && npm publish --access public","prepublishOnly":"npm run lint && tsc --noEmit && npm run test:runtime && npm run build"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"repository":{"url":"git+https://github.com/602362837/pi-agnet-web.git","type":"git"},"_npmVersion":"11.11.0","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.3","diff":"^8.0.4","next":"16.2.9","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.80.10","react-syntax-highlighter":"^16.1.1","@earendil-works/pi-coding-agent":"0.80.10","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","eslint":"^9","postcss":"^8","@types/ws":"^8.18.1","typescript":"^5","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.9","@tailwindcss/postcss":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.9.2_1784993395615_0.9803290775112219","host":"s3://npm-registry-packages-npm-production"}},"0.9.3":{"name":"@twofive/snail-pi-web","version":"0.9.3","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.9.3","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/602362837/pi-agnet-web#readme","bugs":{"url":"https://github.com/602362837/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"29a7f28f78de03f90ccc8c892400247d0062a04b","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.9.3.tgz","fileCount":996,"integrity":"sha512-iLicUYXTHubToRKow3D1rq0RvtSVP9uraYW+wj5DdSoAJJZbr1PKxa9j2TwBSx7IGRY5lFl0tEfzdg6CJ+VKzA==","signatures":[{"sig":"MEYCIQCyBikBoYjRCT1ie+OlQ2rXZythmOehVrQUrmzRPO6DIwIhAOCBbyhfdP1qreVYNhy5ZBEz1rrjnpoP6AwA/CyV0nog","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65943333},"gitHead":"d37daf01b2bb67b57c0de39f133814e41fd621a2","scripts":{"dev":"next dev -p 62666","lint":"eslint .","build":"node scripts/build-next.js","start":"next start -p 62666","release":"npm run release:patch","test:browser":"tsx scripts/generate-browser-extension-shared.ts && tsx scripts/smoke-browser-binding.ts && tsx scripts/smoke-chrome-extension-artifacts.ts","test:runtime":"tsx scripts/smoke-runtime-packaging.ts","release:patch":"npm version patch && npm publish --access public","prepublishOnly":"npm run lint && tsc --noEmit && npm run test:runtime && npm run build","generate:browser-extension":"tsx scripts/generate-browser-extension-shared.ts"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"repository":{"url":"git+https://github.com/602362837/pi-agnet-web.git","type":"git"},"_npmVersion":"9.6.6","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.3","diff":"^8.0.4","next":"16.2.9","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.82.1","react-syntax-highlighter":"^16.1.1","@earendil-works/pi-coding-agent":"0.82.1","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","eslint":"^9","postcss":"^8","@types/ws":"^8.18.1","typescript":"^5","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.9","@tailwindcss/postcss":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.9.3_1785205609135_0.08671473116402328","host":"s3://npm-registry-packages-npm-production"}},"0.9.4":{"name":"@twofive/snail-pi-web","version":"0.9.4","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.9.4","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/twofive1203/pi-agnet-web#readme","bugs":{"url":"https://github.com/twofive1203/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"320baf42f1382d134e15e41820c29cbeeac24698","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.9.4.tgz","fileCount":996,"integrity":"sha512-sbqxCxMJlJMN7+8J2XTsgnMb1+UhtgAopkmGHAG1CNxk7ccbwvfuezELP0oqt5nv8FCmrqBKFOZ/6gGW/HEO1A==","signatures":[{"sig":"MEQCIFDU4SJEpCI3DfbkcHQsvMIj8QLm77ReT/uZsQU3sH2QAiANB4dwuc+HI2L9Q4wVtTWB1BN6b8k3yZRLs1sKVM0y6w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65962909},"gitHead":"5f9a827576041ae674ef356ed92a02b6fd58acab","scripts":{"dev":"next dev -p 62666","lint":"eslint .","build":"node scripts/build-next.js","start":"next start -p 62666","release":"npm run release:patch","test:browser":"tsx scripts/generate-browser-extension-shared.ts && tsx scripts/smoke-browser-binding.ts && tsx scripts/smoke-chrome-extension-artifacts.ts","test:runtime":"tsx scripts/smoke-runtime-packaging.ts","release:patch":"npm version patch && npm publish --access public","prepublishOnly":"npm run lint && tsc --noEmit && npm run test:runtime && npm run build","generate:browser-extension":"tsx scripts/generate-browser-extension-shared.ts"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"repository":{"url":"git+https://github.com/twofive1203/pi-agnet-web.git","type":"git"},"_npmVersion":"9.6.6","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.3","diff":"^8.0.4","next":"16.2.9","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.82.1","react-syntax-highlighter":"^16.1.1","@earendil-works/pi-coding-agent":"0.82.1","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","eslint":"^9","postcss":"^8","@types/ws":"^8.18.1","typescript":"^5","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.9","@tailwindcss/postcss":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.9.4_1785222103626_0.6062580082146736","host":"s3://npm-registry-packages-npm-production"}},"0.9.5":{"name":"@twofive/snail-pi-web","version":"0.9.5","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.9.5","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/twofive1203/pi-agnet-web#readme","bugs":{"url":"https://github.com/twofive1203/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"1c6a9bb32df26155f1a0d6dd215466438f5b9e44","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.9.5.tgz","fileCount":1206,"integrity":"sha512-uiNanm7ew9jhju6Q3/hj7k8VlgvUMAMRcSmLmS0H7om3udkFRMW8aBsIA5/8z/SIYIlfCH3a0i1iZJ2fmm488A==","signatures":[{"sig":"MEUCIQCmHm9ajdoA0fW6GPy5xKK9u3h7SuAM+gBpnrk+Iu8DZgIgaWW29LP2Lfla3GxhSGeUEz1IdvFhicr36Qdo0ja1W/8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78043574},"engines":{"node":">=22.19.0"},"gitHead":"54d7c1b3e3bb8e748a164d3999da6f96307083f3","scripts":{"dev":"next dev -p 62666","lint":"eslint .","build":"node scripts/build-next.js","start":"next start -p 62666","release":"npm run release:patch","test:mcp":"npx --yes tsx@4.23.1 scripts/smoke-mcp-config.ts","test:snflow":"npx --yes tsx@4.23.1 scripts/smoke-snflow-setup.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-store.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-session-link.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-snflow-spec-review.ts","test:browser":"npx --yes tsx@4.23.1 scripts/generate-browser-extension-shared.ts && npx --yes tsx@4.23.1 scripts/smoke-browser-binding.ts && npx --yes tsx@4.23.1 scripts/smoke-chrome-extension-artifacts.ts","test:runtime":"npx --yes tsx@4.23.1 scripts/smoke-runtime-packaging.ts","release:patch":"npm version patch && npm publish --access public","prepublishOnly":"npm run lint && tsc --noEmit && npm run test:runtime && npm run build","test:automation":"node scripts/run-automation-smokes.cjs","test:agent-stream":"node --import tsx scripts/smoke-agent-event-throttler.mjs","test:api-protection":"node --import tsx scripts/smoke-grok-usage.mjs","test:session-changes":"node --import tsx scripts/smoke-session-file-changes.mjs","generate:browser-extension":"tsx scripts/generate-browser-extension-shared.ts","test:subagent-observability":"npx --yes tsx@4.23.1 scripts/smoke-subagent-observability.ts && node --import tsx scripts/smoke-subagent-progress.mjs && npx --yes tsx@4.23.1 scripts/smoke-subagent-session-runs.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail-route.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-store.ts"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"repository":{"url":"git+https://github.com/twofive1203/pi-agnet-web.git","type":"git"},"_npmVersion":"9.6.6","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.3","diff":"^8.0.4","next":"16.2.9","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","typebox":"1.3.7","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","cron-parser":"^4.9.0","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","jsonc-parser":"^3.3.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.83.0","react-syntax-highlighter":"^16.1.1","@earendil-works/pi-coding-agent":"0.83.0","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","eslint":"^9","postcss":"^8","@types/ws":"^8.18.1","typescript":"^5","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.9","@tailwindcss/postcss":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.9.5_1785476181510_0.7798266993299563","host":"s3://npm-registry-packages-npm-production"}},"0.9.6":{"name":"@twofive/snail-pi-web","version":"0.9.6","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.9.6","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/twofive1203/pi-agnet-web#readme","bugs":{"url":"https://github.com/twofive1203/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"2578dca9ee2046f5cfb3c062eb806cfa1fdb1b77","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.9.6.tgz","fileCount":1215,"integrity":"sha512-bN05E2FfkulmGht6/XGTFl2bVw10g5WK3KFOI5eWKMYVV2grRa3SN96r5wvhsttXq+4pqp7b/Cx6e57tRQHDhQ==","signatures":[{"sig":"MEUCIQDXtV9vlpKRksckhuUIc7SjYdEbMmGAFgzOe4yCixMyDwIgTNiwQZuu85/8+RzvtzmSile1iP2joYbWkENNAdEfihQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78617730},"engines":{"node":">=22.19.0"},"gitHead":"9eb033acd8ed290ca24afe520bbfa4a572315bc2","scripts":{"dev":"next dev -p 62666","lint":"eslint .","build":"node scripts/build-next.js","start":"next start -p 62666","release":"npm run release:patch","test:mcp":"npx --yes tsx@4.23.1 scripts/smoke-mcp-config.ts","test:snflow":"npx --yes tsx@4.23.1 scripts/smoke-snflow-setup.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-store.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-session-link.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-snflow-spec-review.ts","test:browser":"npx --yes tsx@4.23.1 scripts/generate-browser-extension-shared.ts && npx --yes tsx@4.23.1 scripts/smoke-browser-binding.ts && npx --yes tsx@4.23.1 scripts/smoke-chrome-extension-artifacts.ts","test:runtime":"npx --yes tsx@4.23.1 scripts/smoke-runtime-packaging.ts","release:patch":"npm version patch && npm publish --access public","test:ui-theme":"npx --yes tsx@4.23.1 scripts/smoke-ui-theme-contract.ts","prepublishOnly":"npm run lint && tsc --noEmit && npm run test:runtime && npm run build","test:automation":"node scripts/run-automation-smokes.cjs","test:open-folder":"npx --yes tsx@4.23.1 scripts/smoke-open-project-folder.ts","test:agent-stream":"node --import tsx scripts/smoke-agent-event-throttler.mjs","test:api-protection":"node --import tsx scripts/smoke-grok-usage.mjs","test:session-changes":"node --import tsx scripts/smoke-session-file-changes.mjs","generate:browser-extension":"tsx scripts/generate-browser-extension-shared.ts","test:subagent-observability":"npx --yes tsx@4.23.1 scripts/smoke-subagent-observability.ts && node --import tsx scripts/smoke-subagent-progress.mjs && npx --yes tsx@4.23.1 scripts/smoke-subagent-session-runs.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail-route.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-store.ts"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"repository":{"url":"git+https://github.com/twofive1203/pi-agnet-web.git","type":"git"},"_npmVersion":"9.6.6","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.3","diff":"^8.0.4","next":"16.2.9","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","typebox":"1.3.7","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","cron-parser":"^4.9.0","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","jsonc-parser":"^3.3.1","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.83.0","react-syntax-highlighter":"^16.1.1","@earendil-works/pi-coding-agent":"0.83.0","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","eslint":"^9","postcss":"^8","@types/ws":"^8.18.1","typescript":"^5","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.9","@tailwindcss/postcss":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.9.6_1785813838565_0.15207541315371476","host":"s3://npm-registry-packages-npm-production"}},"0.9.7":{"name":"@twofive/snail-pi-web","version":"0.9.7","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.9.7","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/twofive1203/pi-agnet-web#readme","bugs":{"url":"https://github.com/twofive1203/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"d6ae0811b3d12c3436be4f465c36886876a04b4e","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.9.7.tgz","fileCount":1228,"integrity":"sha512-M/xazainGCAZe4rioLp4gjhGpEMrhU6UcOrHwzGqIMf+wwv2+jeGP0p7+egPGpB7679/+qJIAxbO6vbKHfLg+A==","signatures":[{"sig":"MEUCIQCUttx6fxljv37UEg3dV9Vj+dqD1C74kzODyUvscf0CEgIgAZJwAtobHYZGq/0VlOqPs0MhYwK+nCI0ChHAUaJry1w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78739154},"engines":{"node":">=22.19.0"},"gitHead":"6c3c6530a574c6a8184a34294702eeb2228d8484","scripts":{"dev":"next dev -p 62666","lint":"eslint .","build":"node scripts/build-next.js","start":"next start -p 62666","release":"npm run release:patch","test:mcp":"npx --yes tsx@4.23.1 scripts/smoke-mcp-config.ts","test:snflow":"npx --yes tsx@4.23.1 scripts/smoke-snflow-setup.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-store.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-session-link.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-snflow-spec-review.ts","test:browser":"npx --yes tsx@4.23.1 scripts/generate-browser-extension-shared.ts && npx --yes tsx@4.23.1 scripts/smoke-browser-binding.ts && npx --yes tsx@4.23.1 scripts/smoke-chrome-extension-artifacts.ts","test:runtime":"npx --yes tsx@4.23.1 scripts/smoke-runtime-packaging.ts","release:patch":"npm version patch && npm publish --access public","test:ui-theme":"npx --yes tsx@4.23.1 scripts/smoke-ui-theme-contract.ts","prepublishOnly":"npm run lint && tsc --noEmit && npm run test:runtime && npm run build","test:automation":"node scripts/run-automation-smokes.cjs","test:open-folder":"npx --yes tsx@4.23.1 scripts/smoke-open-project-folder.ts","test:agent-stream":"node --import tsx scripts/smoke-agent-event-throttler.mjs","test:session-stats":"npx --yes tsx@4.23.1 scripts/smoke-session-billing-stats.ts","test:api-protection":"node --import tsx scripts/smoke-grok-usage.mjs","test:session-changes":"node --import tsx scripts/smoke-session-file-changes.mjs","test:web-tools-config":"npx --yes tsx@4.23.1 scripts/smoke-web-tools-config.ts","test:bundled-extensions":"npx --yes tsx@4.23.1 scripts/smoke-bundled-pi-extensions.ts","generate:browser-extension":"tsx scripts/generate-browser-extension-shared.ts","test:subagent-observability":"npx --yes tsx@4.23.1 scripts/smoke-subagent-observability.ts && node --import tsx scripts/smoke-subagent-progress.mjs && npx --yes tsx@4.23.1 scripts/smoke-subagent-session-runs.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail-route.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-store.ts"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"repository":{"url":"git+https://github.com/twofive1203/pi-agnet-web.git","type":"git"},"_npmVersion":"9.6.6","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.3","diff":"^8.0.4","next":"16.2.9","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","typebox":"1.3.7","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","cron-parser":"^4.9.0","pi-ask-user":"0.13.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","jsonc-parser":"^3.3.1","pi-subagents":"0.40.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","pi-manage-todo-list":"0.4.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.83.0","react-syntax-highlighter":"^16.1.1","@juicesharp/rpiv-web-tools":"2.3.1","@earendil-works/pi-coding-agent":"0.83.0","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","eslint":"^9","postcss":"^8","@types/ws":"^8.18.1","typescript":"^5","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.9","@tailwindcss/postcss":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.9.7_1785837342490_0.8558550412695123","host":"s3://npm-registry-packages-npm-production"}},"0.9.8":{"name":"@twofive/snail-pi-web","version":"0.9.8","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.9.8","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/twofive1203/pi-agnet-web#readme","bugs":{"url":"https://github.com/twofive1203/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"adf6dbd69ff21b887298a922ca1743243ce17510","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.9.8.tgz","fileCount":1244,"integrity":"sha512-WcTRNbk417C3r/Q8ANwhpL396WpxMu9/OaCqcrjz9yml6IbTToa+O6s2SdBOrQGv0vsI27vAALr5IaOYSm2t7g==","signatures":[{"sig":"MEYCIQDpQOh7tOTWkjzcaVEurLgXqhnKj4WUphgX/rPBki1VUwIhAKE1fzaViXnucKLMHiwGqwEJUDGHc20MeFYLZZ96OS54","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78989370},"engines":{"node":">=22.19.0"},"gitHead":"4c40d259af72f3c07e49b9cc377ede658d2762a8","scripts":{"dev":"next dev -p 62666","lint":"eslint .","build":"node scripts/build-next.js","start":"next start -p 62666","release":"npm run release:patch","test:mcp":"npx --yes tsx@4.23.1 scripts/smoke-mcp-config.ts","test:snflow":"npx --yes tsx@4.23.1 scripts/smoke-snflow-setup.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-store.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-session-link.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-snflow-spec-review.ts","test:browser":"npx --yes tsx@4.23.1 scripts/generate-browser-extension-shared.ts && npx --yes tsx@4.23.1 scripts/smoke-browser-binding.ts && npx --yes tsx@4.23.1 scripts/smoke-chrome-extension-artifacts.ts","test:runtime":"npx --yes tsx@4.23.1 scripts/smoke-runtime-packaging.ts","release:patch":"npm version patch && npm publish --access public","test:ui-theme":"npx --yes tsx@4.23.1 scripts/smoke-ui-theme-contract.ts","prepublishOnly":"npm run lint && tsc --noEmit && npm run test:runtime && npm run build","test:automation":"node scripts/run-automation-smokes.cjs","test:cwd-browse":"npx --yes tsx@4.23.1 scripts/smoke-cwd-browse.ts","test:open-folder":"npx --yes tsx@4.23.1 scripts/smoke-open-project-folder.ts","test:agent-stream":"node --import tsx scripts/smoke-agent-event-throttler.mjs","test:session-stats":"npx --yes tsx@4.23.1 scripts/smoke-session-billing-stats.ts","test:api-protection":"node --import tsx scripts/smoke-grok-usage.mjs","test:cwd-native-pick":"npx --yes tsx@4.23.1 scripts/smoke-cwd-native-pick.ts","test:session-changes":"node --import tsx scripts/smoke-session-file-changes.mjs","test:web-tools-config":"npx --yes tsx@4.23.1 scripts/smoke-web-tools-config.ts","test:bundled-extensions":"npx --yes tsx@4.23.1 scripts/smoke-bundled-pi-extensions.ts","generate:browser-extension":"tsx scripts/generate-browser-extension-shared.ts","test:subagent-observability":"npx --yes tsx@4.23.1 scripts/smoke-subagent-observability.ts && node --import tsx scripts/smoke-subagent-progress.mjs && npx --yes tsx@4.23.1 scripts/smoke-subagent-session-runs.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail-route.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-store.ts"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"repository":{"url":"git+https://github.com/twofive1203/pi-agnet-web.git","type":"git"},"_npmVersion":"9.6.6","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.3","diff":"^8.0.4","next":"16.2.9","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","typebox":"1.3.7","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","cron-parser":"^4.9.0","pi-ask-user":"0.13.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","jsonc-parser":"^3.3.1","pi-subagents":"0.40.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","pi-manage-todo-list":"0.4.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.83.0","react-syntax-highlighter":"^16.1.1","@juicesharp/rpiv-web-tools":"2.3.1","@earendil-works/pi-coding-agent":"0.83.0","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","eslint":"^9","postcss":"^8","@types/ws":"^8.18.1","typescript":"^5","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.9","@tailwindcss/postcss":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.9.8_1785916028942_0.7376365382276275","host":"s3://npm-registry-packages-npm-production"}},"0.9.9":{"name":"@twofive/snail-pi-web","version":"0.9.9","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.9.9","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/twofive1203/pi-agnet-web#readme","bugs":{"url":"https://github.com/twofive1203/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"3298a915eaed1a7f25967849a199262c52faf1d4","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.9.9.tgz","fileCount":1248,"integrity":"sha512-VHeApKhs+VpGDhnFAJMKBt02pnKoX28Ay8kLFpcjs7FbwFgjg8/9u6wiTTldIIpuK0sLylvvv88DJfxywNMxwQ==","signatures":[{"sig":"MEYCIQDViKpF/g0ebYORZlV1JALzetNQP0I+oTiUwG6Z2ifsCgIhAOmEvjn07hZv5Qs+SutuvvfTNxlLZ3ENU6eq3Kv5+xKe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79028634},"engines":{"node":">=22.19.0"},"gitHead":"8283f43d983bce9fe06cbc47298bfa94ad4e7d35","scripts":{"dev":"next dev -p 62666","lint":"eslint .","build":"node scripts/build-next.js","start":"next start -p 62666","release":"npm run release:patch","test:mcp":"npx --yes tsx@4.23.1 scripts/smoke-mcp-config.ts","test:snflow":"npx --yes tsx@4.23.1 scripts/smoke-snflow-setup.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-store.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-session-link.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-snflow-spec-review.ts","test:browser":"npx --yes tsx@4.23.1 scripts/generate-browser-extension-shared.ts && npx --yes tsx@4.23.1 scripts/smoke-browser-binding.ts && npx --yes tsx@4.23.1 scripts/smoke-chrome-extension-artifacts.ts","test:runtime":"npx --yes tsx@4.23.1 scripts/smoke-runtime-packaging.ts","release:patch":"npm version patch && npm publish --access public","test:ui-theme":"npx --yes tsx@4.23.1 scripts/smoke-ui-theme-contract.ts","prepublishOnly":"npm run lint && tsc --noEmit && npm run test:runtime && npm run build","test:automation":"node scripts/run-automation-smokes.cjs","test:cwd-browse":"npx --yes tsx@4.23.1 scripts/smoke-cwd-browse.ts","test:open-folder":"npx --yes tsx@4.23.1 scripts/smoke-open-project-folder.ts","test:agent-stream":"node --import tsx scripts/smoke-agent-event-throttler.mjs && node --import tsx scripts/smoke-empty-completed-retry.mjs","test:session-stats":"npx --yes tsx@4.23.1 scripts/smoke-session-billing-stats.ts","test:api-protection":"node --import tsx scripts/smoke-grok-usage.mjs","test:cwd-native-pick":"npx --yes tsx@4.23.1 scripts/smoke-cwd-native-pick.ts","test:session-changes":"node --import tsx scripts/smoke-session-file-changes.mjs","test:web-tools-config":"npx --yes tsx@4.23.1 scripts/smoke-web-tools-config.ts","test:bundled-extensions":"npx --yes tsx@4.23.1 scripts/smoke-bundled-pi-extensions.ts","generate:browser-extension":"tsx scripts/generate-browser-extension-shared.ts","test:subagent-observability":"npx --yes tsx@4.23.1 scripts/smoke-subagent-observability.ts && node --import tsx scripts/smoke-subagent-progress.mjs && npx --yes tsx@4.23.1 scripts/smoke-subagent-session-runs.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail-route.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-store.ts"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"repository":{"url":"git+https://github.com/twofive1203/pi-agnet-web.git","type":"git"},"_npmVersion":"9.6.6","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.3","diff":"^8.0.4","next":"16.2.9","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","typebox":"1.3.7","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","cron-parser":"^4.9.0","pi-ask-user":"0.13.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","jsonc-parser":"^3.3.1","pi-subagents":"0.40.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","pi-manage-todo-list":"0.4.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.83.0","react-syntax-highlighter":"^16.1.1","@juicesharp/rpiv-web-tools":"2.3.1","@earendil-works/pi-coding-agent":"0.83.0","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","eslint":"^9","postcss":"^8","@types/ws":"^8.18.1","typescript":"^5","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.9","@tailwindcss/postcss":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.9.9_1785926419997_0.08515836929019449","host":"s3://npm-registry-packages-npm-production"}},"0.9.10":{"name":"@twofive/snail-pi-web","version":"0.9.10","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.9.10","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/twofive1203/pi-agnet-web#readme","bugs":{"url":"https://github.com/twofive1203/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"6b74b5a1199e1702ef9ca2b83e73b7bde5034859","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.9.10.tgz","fileCount":1248,"integrity":"sha512-/HtvyTqio9LAGA+IY3iOkvbLWlDZq7sxY1UOZOY4nJlDo4n7TGb6lqkfTyRQDCm7lzewHMvzem4etnYwJZqm5Q==","signatures":[{"sig":"MEQCIAY9C/CJvLAQu7VZ3dVGZy1IiWCbMRI0mgNUniMQHZ4gAiAi2W7wLZQIrUu3INHO0GifHUxl/BQjHhfL05ixtYM1rA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79036930},"engines":{"node":">=22.19.0"},"gitHead":"9b2aba8574f934e5b65a7022cc78a3282340a31d","scripts":{"dev":"next dev -p 62666","lint":"eslint .","build":"node scripts/build-next.js","start":"next start -p 62666","release":"npm run release:patch","test:mcp":"npx --yes tsx@4.23.1 scripts/smoke-mcp-config.ts","test:snflow":"npx --yes tsx@4.23.1 scripts/smoke-snflow-setup.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-store.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-session-link.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-snflow-spec-review.ts","test:browser":"npx --yes tsx@4.23.1 scripts/generate-browser-extension-shared.ts && npx --yes tsx@4.23.1 scripts/smoke-browser-binding.ts && npx --yes tsx@4.23.1 scripts/smoke-chrome-extension-artifacts.ts","test:runtime":"npx --yes tsx@4.23.1 scripts/smoke-runtime-packaging.ts","release:patch":"npm version patch && npm publish --access public","test:ui-theme":"npx --yes tsx@4.23.1 scripts/smoke-ui-theme-contract.ts","prepublishOnly":"npm run lint && tsc --noEmit && npm run test:runtime && npm run build","test:automation":"node scripts/run-automation-smokes.cjs","test:cwd-browse":"npx --yes tsx@4.23.1 scripts/smoke-cwd-browse.ts","test:open-folder":"npx --yes tsx@4.23.1 scripts/smoke-open-project-folder.ts","test:agent-stream":"node --import tsx scripts/smoke-agent-event-throttler.mjs && node --import tsx scripts/smoke-empty-completed-retry.mjs","test:session-stats":"npx --yes tsx@4.23.1 scripts/smoke-session-billing-stats.ts","test:api-protection":"node --import tsx scripts/smoke-grok-usage.mjs","test:cwd-native-pick":"npx --yes tsx@4.23.1 scripts/smoke-cwd-native-pick.ts","test:session-changes":"node --import tsx scripts/smoke-session-file-changes.mjs","test:web-tools-config":"npx --yes tsx@4.23.1 scripts/smoke-web-tools-config.ts","test:bundled-extensions":"npx --yes tsx@4.23.1 scripts/smoke-bundled-pi-extensions.ts","generate:browser-extension":"tsx scripts/generate-browser-extension-shared.ts","test:subagent-observability":"npx --yes tsx@4.23.1 scripts/smoke-subagent-observability.ts && node --import tsx scripts/smoke-subagent-progress.mjs && npx --yes tsx@4.23.1 scripts/smoke-subagent-session-runs.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail-route.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-store.ts"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"repository":{"url":"git+https://github.com/twofive1203/pi-agnet-web.git","type":"git"},"_npmVersion":"9.6.6","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.3","diff":"^8.0.4","next":"16.2.9","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","typebox":"1.3.7","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","cron-parser":"^4.9.0","pi-ask-user":"0.13.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","jsonc-parser":"^3.3.1","pi-subagents":"0.40.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","pi-manage-todo-list":"0.4.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.83.0","react-syntax-highlighter":"^16.1.1","@juicesharp/rpiv-web-tools":"2.3.1","@earendil-works/pi-coding-agent":"0.83.0","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","eslint":"^9","postcss":"^8","@types/ws":"^8.18.1","typescript":"^5","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.9","@tailwindcss/postcss":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.9.10_1785999466324_0.7976806580249816","host":"s3://npm-registry-packages-npm-production"}},"0.9.11":{"name":"@twofive/snail-pi-web","version":"0.9.11","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.9.11","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/twofive1203/pi-agnet-web#readme","bugs":{"url":"https://github.com/twofive1203/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"4e37f346850356764c7ffd946986307a51854654","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.9.11.tgz","fileCount":1288,"integrity":"sha512-yKjECCXn1E5Ntauo2GQ4QBiGR3m+3XNLvsY5PMnp7270qdtF4mcTTHpxYmx5J6vNiOq1TY+RRKpYd/z5meJB3A==","signatures":[{"sig":"MEYCIQD5Oo42wQen2Wgrsob4HUoHCEsvtxUNigyqhvPvynxPgQIhAPlU5Ykp41xQxf0w3l/0rUOlHIbW//qiZKrfsnvvgU2s","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81896670},"engines":{"node":">=22.19.0"},"gitHead":"97b047ffd203a7651e17269d2d7ef561befb7422","scripts":{"dev":"node bin/pi-web.js --dev","lint":"eslint .","build":"node scripts/build-next.js","start":"node bin/pi-web.js","release":"npm run release:patch","test:mcp":"npx --yes tsx@4.23.1 scripts/smoke-mcp-config.ts","test:i18n":"npx --yes tsx@4.23.1 scripts/check-i18n-keys.ts","test:snflow":"npx --yes tsx@4.23.1 scripts/smoke-snflow-setup.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-store.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-session-link.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-snflow-spec-review.ts","test:browser":"npx --yes tsx@4.23.1 scripts/generate-browser-extension-shared.ts && npx --yes tsx@4.23.1 scripts/smoke-browser-binding.ts && npx --yes tsx@4.23.1 scripts/smoke-chrome-extension-artifacts.ts","test:runtime":"npx --yes tsx@4.23.1 scripts/smoke-runtime-packaging.ts","release:patch":"npm version patch && npm publish --access public","test:ui-theme":"npx --yes tsx@4.23.1 scripts/smoke-ui-theme-contract.ts","prepublishOnly":"npm run lint && tsc --noEmit && npm run test:server-auth && npm run test:runtime && npm run build && npm run test:server-auth:e2e","test:automation":"node scripts/run-automation-smokes.cjs","test:cwd-browse":"npx --yes tsx@4.23.1 scripts/smoke-cwd-browse.ts","test:open-folder":"npx --yes tsx@4.23.1 scripts/smoke-open-project-folder.ts","test:server-auth":"npx --yes tsx@4.23.1 scripts/smoke-server-access-auth.ts && npx --yes tsx@4.23.1 scripts/smoke-server-access-proxy.ts","test:agent-stream":"node --import tsx scripts/smoke-agent-event-throttler.mjs && node --import tsx scripts/smoke-empty-completed-retry.mjs","test:session-stats":"npx --yes tsx@4.23.1 scripts/smoke-session-billing-stats.ts","test:api-protection":"node --import tsx scripts/smoke-grok-usage.mjs","test:cwd-native-pick":"npx --yes tsx@4.23.1 scripts/smoke-cwd-native-pick.ts","test:server-auth:e2e":"node scripts/e2e-server-access-auth.mjs","test:session-changes":"node --import tsx scripts/smoke-session-file-changes.mjs","test:web-tools-config":"npx --yes tsx@4.23.1 scripts/smoke-web-tools-config.ts","test:bundled-extensions":"npx --yes tsx@4.23.1 scripts/smoke-bundled-pi-extensions.ts","generate:browser-extension":"tsx scripts/generate-browser-extension-shared.ts","test:subagent-observability":"npx --yes tsx@4.23.1 scripts/smoke-subagent-observability.ts && node --import tsx scripts/smoke-subagent-progress.mjs && npx --yes tsx@4.23.1 scripts/smoke-subagent-session-runs.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail-route.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-store.ts"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"repository":{"url":"git+https://github.com/twofive1203/pi-agnet-web.git","type":"git"},"_npmVersion":"9.6.6","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.3","diff":"^8.0.4","next":"16.2.12","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","typebox":"1.3.7","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","cron-parser":"^4.9.0","pi-ask-user":"0.13.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","jsonc-parser":"^3.3.1","pi-subagents":"0.40.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","pi-manage-todo-list":"0.4.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.83.0","react-syntax-highlighter":"^16.1.1","@juicesharp/rpiv-web-tools":"2.3.1","@earendil-works/pi-coding-agent":"0.83.0","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","eslint":"^9","postcss":"^8","@types/ws":"^8.18.1","typescript":"^5","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.12","@tailwindcss/postcss":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.9.11_1786100142072_0.25791427989397064","host":"s3://npm-registry-packages-npm-production"}},"0.9.12":{"name":"@twofive/snail-pi-web","version":"0.9.12","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.9.12","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/twofive1203/pi-agnet-web#readme","bugs":{"url":"https://github.com/twofive1203/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"72a901043e39b278e3cd79a3c6e56296e898f446","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.9.12.tgz","fileCount":1482,"integrity":"sha512-Q2mM6TnuXLCt/zakIuceoRBd7VCVLrSErkkezEacJH3LxZj26KW2UDEl+ZzNSOGSJfYQhyzmosR/32PlG9E8mg==","signatures":[{"sig":"MEQCIBUTkmwbDt9lo8IbW8mTPBSqRA3CZNkdHLVB0lNlVx88AiAaHEKN1O/DiPNDiatyscVx84NlHI1PQ7RmKeTfGUj2Sg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91267206},"engines":{"node":">=22.19.0"},"gitHead":"cff9bf8ccf38f8805aec3fb97d3550271636d686","scripts":{"dev":"node bin/pi-web.js --dev","lint":"eslint .","build":"node scripts/build-next.js","start":"node bin/pi-web.js","release":"npm run release:patch","test:mcp":"npx --yes tsx@4.23.1 scripts/smoke-mcp-config.ts","test:i18n":"npx --yes tsx@4.23.1 scripts/check-i18n-keys.ts","test:usage":"npx --yes tsx@4.23.1 scripts/smoke-usage-timeline.ts && npx --yes tsx@4.23.1 scripts/smoke-usage-subagents.ts","desktop:dev":"node scripts/run-desktop-pet.mjs","postinstall":"node scripts/patch-pi-subagents-stale-ctx.mjs","test:snflow":"npx --yes tsx@4.23.1 scripts/smoke-snflow-setup.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-store.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-session-link.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-snflow-spec-review.ts","test:vision":"npx --yes tsx@4.23.1 scripts/smoke-vision-resolver.ts","desktop:make":"node scripts/run-desktop-forge.mjs make","test:browser":"npx --yes tsx@4.23.1 scripts/generate-browser-extension-shared.ts && npx --yes tsx@4.23.1 scripts/smoke-browser-binding.ts && npx --yes tsx@4.23.1 scripts/smoke-chrome-extension-artifacts.ts","test:runtime":"npx --yes tsx@4.23.1 scripts/smoke-runtime-packaging.ts","desktop:build":"node scripts/build-desktop-pet.mjs","release:patch":"npm version patch && npm publish --access public","test:git-diff":"npx --yes tsx@4.23.1 scripts/smoke-git-diff.ts","test:ui-theme":"npx --yes tsx@4.23.1 scripts/smoke-ui-theme-contract.ts","prepublishOnly":"npm run lint && tsc --noEmit && npm run test:server-auth && npm run test:runtime && npm run build && npm run test:server-auth:e2e","desktop:package":"node scripts/run-desktop-forge.mjs package","desktop:preview":"node scripts/preview-desktop-pet-states.mjs","test:automation":"node scripts/run-automation-smokes.cjs","test:chat-draft":"npx --yes tsx@4.23.1 scripts/smoke-chat-draft.ts","test:cwd-browse":"npx --yes tsx@4.23.1 scripts/smoke-cwd-browse.ts","test:chat-errors":"npx --yes tsx@4.23.1 scripts/smoke-chat-provider-errors.ts","test:file-search":"npx --yes tsx@4.23.1 scripts/smoke-workspace-file-search.ts","test:file-upload":"npx --yes tsx@4.23.1 scripts/smoke-file-upload.ts","test:open-folder":"npx --yes tsx@4.23.1 scripts/smoke-open-project-folder.ts","test:server-auth":"npx --yes tsx@4.23.1 scripts/smoke-server-access-auth.ts && npx --yes tsx@4.23.1 scripts/smoke-server-access-proxy.ts","test:agent-stream":"node --import tsx scripts/smoke-agent-event-throttler.mjs && node --import tsx scripts/smoke-empty-completed-retry.mjs && npx --yes tsx@4.23.1 scripts/smoke-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-pi-session-lifecycle.ts","test:session-tabs":"npx --yes tsx@4.23.1 scripts/smoke-session-tab-coordination.ts","test:session-index":"npx --yes tsx@4.23.1 scripts/smoke-session-index.ts","test:session-stats":"npx --yes tsx@4.23.1 scripts/smoke-session-billing-stats.ts","test:task-observer":"npx --yes tsx@4.23.1 scripts/smoke-task-observer.ts","desktop:dev:rebuild":"node scripts/run-desktop-pet.mjs --rebuild","test:api-protection":"node --import tsx scripts/smoke-grok-usage.mjs","test:quick-commands":"npx --yes tsx@4.23.1 scripts/smoke-quick-commands.ts","test:scale-baseline":"npx --yes tsx@4.23.1 scripts/smoke-scale-baseline.ts","test:session-search":"npx --yes tsx@4.23.1 scripts/smoke-session-search.ts","test:cwd-native-pick":"npx --yes tsx@4.23.1 scripts/smoke-cwd-native-pick.ts","test:desktop-package":"node scripts/smoke-desktop-package.mjs","test:server-auth:e2e":"node scripts/e2e-server-access-auth.mjs","test:session-changes":"node --import tsx scripts/smoke-session-file-changes.mjs","test:desktop-contract":"npx --yes tsx@4.23.1 scripts/smoke-desktop-contract.ts","test:desktop-observer":"npm run test:task-observer && npm run test:desktop-observer-api && npm run test:desktop-deep-links && npm run test:desktop-connection && npm run test:desktop-contract && npm run test:desktop-package","test:web-tools-config":"npx --yes tsx@4.23.1 scripts/smoke-web-tools-config.ts","test:bundled-extensions":"npx --yes tsx@4.23.1 scripts/smoke-bundled-pi-extensions.ts","test:desktop-connection":"npx --yes tsx@4.23.1 scripts/smoke-desktop-connection.ts","test:desktop-deep-links":"npx --yes tsx@4.23.1 scripts/smoke-desktop-deep-links.ts","test:session-performance":"npx --yes tsx@4.23.1 scripts/smoke-session-performance.ts","test:desktop-observer-api":"npx --yes tsx@4.23.1 scripts/smoke-desktop-observer-api.ts","test:package-update-check":"npx --yes tsx@4.23.1 scripts/smoke-package-update-check.ts","generate:browser-extension":"tsx scripts/generate-browser-extension-shared.ts","test:subagent-observability":"npx --yes tsx@4.23.1 scripts/smoke-subagent-observability.ts && node --import tsx scripts/smoke-subagent-progress.mjs && npx --yes tsx@4.23.1 scripts/smoke-subagent-session-runs.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail-route.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-store.ts","test:model-primary-candidates":"npx --yes tsx@4.23.1 scripts/smoke-model-primary-candidates.ts"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"overrides":{"@earendil-works/pi-ai":"0.84.1","@earendil-works/pi-tui":"0.84.1","@earendil-works/pi-agent-core":"0.84.1"},"repository":{"url":"git+https://github.com/twofive1203/pi-agnet-web.git","type":"git"},"_npmVersion":"9.6.6","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.3","diff":"^8.0.4","next":"16.2.12","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","typebox":"1.3.7","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","cron-parser":"^4.9.0","pi-ask-user":"0.13.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","jsonc-parser":"^3.3.1","pi-subagents":"0.40.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","pi-manage-todo-list":"0.4.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.84.1","react-syntax-highlighter":"^16.1.1","@juicesharp/rpiv-web-tools":"2.3.1","@earendil-works/pi-coding-agent":"0.84.1","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","eslint":"^9","esbuild":"^0.25.12","postcss":"^8","electron":"^43.4.0","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.12","@electron-forge/cli":"^7.11.2","@tailwindcss/postcss":"^4.2.2","@electron-forge/maker-squirrel":"^7.11.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.9.12_1786702430901_0.5104483275734106","host":"s3://npm-registry-packages-npm-production"}},"0.9.13":{"name":"@twofive/snail-pi-web","version":"0.9.13","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.9.13","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/twofive1203/pi-agnet-web#readme","bugs":{"url":"https://github.com/twofive1203/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"16b1b505733241014c5a620c386b401d0aec2f1a","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.9.13.tgz","fileCount":1446,"integrity":"sha512-vWwhBez4CaGlQ1DWjsEaSnjbEa8CWie0vIGc3gaVnn/U4j9R4sulap+JFVwDySatfT7zy3oLQ9nqlOb54nGCVA==","signatures":[{"sig":"MEQCIE2FW9iSRCqJwagojti9pzK3keeqY6qnYAYjh5zLAhxxAiBfCV1VO0MkqQFg11PktYPlBK/EE+tKHNbDMezBF0basw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92554976},"engines":{"node":">=22.19.0"},"gitHead":"d7916018cb3fdef6ef2a7a1bba727463cdc0d4e2","scripts":{"dev":"node bin/pi-web.js --dev","lint":"eslint .","build":"node scripts/build-next.js","start":"node bin/pi-web.js","release":"npm run release:patch","test:mcp":"npx --yes tsx@4.23.1 scripts/smoke-mcp-config.ts","test:i18n":"npx --yes tsx@4.23.1 scripts/check-i18n-keys.ts","test:usage":"npx --yes tsx@4.23.1 scripts/smoke-usage-timeline.ts && npx --yes tsx@4.23.1 scripts/smoke-usage-subagents.ts","desktop:dev":"node scripts/run-desktop-pet.mjs","postinstall":"node scripts/patch-pi-subagents-stale-ctx.mjs","test:snflow":"npx --yes tsx@4.23.1 scripts/smoke-snflow-setup.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-store.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-session-link.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-snflow-spec-review.ts","test:vision":"npx --yes tsx@4.23.1 scripts/smoke-vision-resolver.ts","desktop:make":"node scripts/run-desktop-forge.mjs make","test:browser":"npx --yes tsx@4.23.1 scripts/generate-browser-extension-shared.ts && npx --yes tsx@4.23.1 scripts/smoke-browser-binding.ts && npx --yes tsx@4.23.1 scripts/smoke-chrome-extension-artifacts.ts","test:runtime":"npx --yes tsx@4.23.1 scripts/smoke-runtime-packaging.ts","desktop:build":"node scripts/build-desktop-pet.mjs","release:patch":"npm version patch && npm publish --access public","test:git-diff":"npx --yes tsx@4.23.1 scripts/smoke-git-diff.ts","test:ui-theme":"npx --yes tsx@4.23.1 scripts/smoke-ui-theme-contract.ts","prepublishOnly":"npm run lint && tsc --noEmit && npm run test:server-auth && npm run test:runtime && npm run build && npm run test:server-auth:e2e","desktop:package":"node scripts/run-desktop-forge.mjs package","desktop:preview":"node scripts/preview-desktop-pet-states.mjs","test:automation":"node scripts/run-automation-smokes.cjs","test:chat-draft":"npx --yes tsx@4.23.1 scripts/smoke-chat-draft.ts","test:cwd-browse":"npx --yes tsx@4.23.1 scripts/smoke-cwd-browse.ts","test:chat-errors":"npx --yes tsx@4.23.1 scripts/smoke-chat-provider-errors.ts","test:file-search":"npx --yes tsx@4.23.1 scripts/smoke-workspace-file-search.ts","test:file-upload":"npx --yes tsx@4.23.1 scripts/smoke-file-upload.ts","test:open-folder":"npx --yes tsx@4.23.1 scripts/smoke-open-project-folder.ts","test:server-auth":"npx --yes tsx@4.23.1 scripts/smoke-server-access-auth.ts && npx --yes tsx@4.23.1 scripts/smoke-server-access-proxy.ts","test:agent-stream":"node --import tsx scripts/smoke-agent-event-throttler.mjs && node --import tsx scripts/smoke-empty-completed-retry.mjs && npx --yes tsx@4.23.1 scripts/smoke-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-pi-session-lifecycle.ts","test:session-tabs":"npx --yes tsx@4.23.1 scripts/smoke-session-tab-coordination.ts","test:session-index":"npx --yes tsx@4.23.1 scripts/smoke-session-index.ts","test:session-stats":"npx --yes tsx@4.23.1 scripts/smoke-session-billing-stats.ts","test:task-observer":"npx --yes tsx@4.23.1 scripts/smoke-task-observer.ts","desktop:dev:rebuild":"node scripts/run-desktop-pet.mjs --rebuild","test:api-protection":"node --import tsx scripts/smoke-grok-usage.mjs","test:quick-commands":"npx --yes tsx@4.23.1 scripts/smoke-quick-commands.ts","test:scale-baseline":"npx --yes tsx@4.23.1 scripts/smoke-scale-baseline.ts","test:session-search":"npx --yes tsx@4.23.1 scripts/smoke-session-search.ts","test:cwd-native-pick":"npx --yes tsx@4.23.1 scripts/smoke-cwd-native-pick.ts","test:desktop-package":"node scripts/smoke-desktop-package.mjs","test:server-auth:e2e":"node scripts/e2e-server-access-auth.mjs","test:session-changes":"node --import tsx scripts/smoke-session-file-changes.mjs","test:desktop-contract":"npx --yes tsx@4.23.1 scripts/smoke-desktop-contract.ts","test:desktop-observer":"npm run test:task-observer && npm run test:desktop-observer-api && npm run test:desktop-deep-links && npm run test:desktop-connection && npm run test:desktop-contract && npm run test:desktop-package && npm run test:desktop-quick-session","test:web-tools-config":"npx --yes tsx@4.23.1 scripts/smoke-web-tools-config.ts","test:bundled-extensions":"npx --yes tsx@4.23.1 scripts/smoke-bundled-pi-extensions.ts","test:desktop-connection":"npx --yes tsx@4.23.1 scripts/smoke-desktop-connection.ts","test:desktop-deep-links":"npx --yes tsx@4.23.1 scripts/smoke-desktop-deep-links.ts","test:session-performance":"npx --yes tsx@4.23.1 scripts/smoke-session-performance.ts","test:desktop-observer-api":"npx --yes tsx@4.23.1 scripts/smoke-desktop-observer-api.ts","test:package-update-check":"npx --yes tsx@4.23.1 scripts/smoke-package-update-check.ts","generate:browser-extension":"tsx scripts/generate-browser-extension-shared.ts","test:desktop-quick-session":"npx --yes tsx@4.23.1 scripts/smoke-desktop-quick-session.ts","test:subagent-observability":"npx --yes tsx@4.23.1 scripts/smoke-subagent-observability.ts && node --import tsx scripts/smoke-subagent-progress.mjs && npx --yes tsx@4.23.1 scripts/smoke-subagent-session-runs.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail-route.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-store.ts","test:model-primary-candidates":"npx --yes tsx@4.23.1 scripts/smoke-model-primary-candidates.ts"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"overrides":{"@earendil-works/pi-ai":"0.84.1","@earendil-works/pi-tui":"0.84.1","@earendil-works/pi-agent-core":"0.84.1"},"repository":{"url":"git+https://github.com/twofive1203/pi-agnet-web.git","type":"git"},"_npmVersion":"9.6.6","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.3","diff":"^8.0.4","next":"16.2.12","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","typebox":"1.3.7","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","cron-parser":"^4.9.0","pi-ask-user":"0.13.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","jsonc-parser":"^3.3.1","pi-subagents":"0.40.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","pi-manage-todo-list":"0.4.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.84.1","react-syntax-highlighter":"^16.1.1","@juicesharp/rpiv-web-tools":"2.3.1","@earendil-works/pi-coding-agent":"0.84.1","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","eslint":"^9","esbuild":"^0.25.12","postcss":"^8","electron":"^43.4.0","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.12","@electron-forge/cli":"^7.11.2","@tailwindcss/postcss":"^4.2.2","@electron-forge/maker-squirrel":"^7.11.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.9.13_1787134685456_0.6048728826865621","host":"s3://npm-registry-packages-npm-production"}},"0.9.14":{"name":"@twofive/snail-pi-web","version":"0.9.14","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.9.14","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/twofive1203/pi-agnet-web#readme","bugs":{"url":"https://github.com/twofive1203/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"8c89b4fd57403d0d385d0965bd7d2352816450d2","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.9.14.tgz","fileCount":1452,"integrity":"sha512-mMwXl3rA/Fktxm1AE46Yywcy7eujalCsFMkuE2SGlenls/1hpaF5lt0y8RNOPosr6wMZt8hHcDkNiMZQ0QI6rg==","signatures":[{"sig":"MEQCIEZaEEmDOMQ1zZr/ii5f2I2UKEjAGfeJ0SJf+wpzBIakAiBp3f6iQWN0XGQVKPfu5BDyb42USWAFZoQHJZu+pnCPvQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93160715},"engines":{"node":">=22.19.0"},"gitHead":"3b204e364a799c07ab86687170e3e0b0b82e5d0f","scripts":{"dev":"node bin/pi-web.js --dev","lint":"eslint .","build":"node scripts/build-next.js","start":"node bin/pi-web.js","release":"npm run release:patch","test:mcp":"npx --yes tsx@4.23.1 scripts/smoke-mcp-config.ts","test:i18n":"npx --yes tsx@4.23.1 scripts/check-i18n-keys.ts","test:usage":"npx --yes tsx@4.23.1 scripts/smoke-usage-timeline.ts && npx --yes tsx@4.23.1 scripts/smoke-usage-subagents.ts","desktop:dev":"node scripts/run-desktop-pet.mjs","postinstall":"node scripts/patch-pi-subagents-stale-ctx.mjs","test:snflow":"npx --yes tsx@4.23.1 scripts/smoke-snflow-setup.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-store.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-session-link.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-snflow-spec-review.ts","test:vision":"npx --yes tsx@4.23.1 scripts/smoke-vision-resolver.ts","desktop:make":"node scripts/run-desktop-forge.mjs make","test:browser":"npx --yes tsx@4.23.1 scripts/generate-browser-extension-shared.ts && npx --yes tsx@4.23.1 scripts/smoke-browser-binding.ts && npx --yes tsx@4.23.1 scripts/smoke-chrome-extension-artifacts.ts","test:runtime":"npx --yes tsx@4.23.1 scripts/smoke-runtime-packaging.ts","desktop:build":"node scripts/build-desktop-pet.mjs","release:patch":"npm version patch && npm publish --access public","test:git-diff":"npx --yes tsx@4.23.1 scripts/smoke-git-diff.ts","test:ui-theme":"npx --yes tsx@4.23.1 scripts/smoke-ui-theme-contract.ts","prepublishOnly":"npm run lint && tsc --noEmit && npm run test:server-auth && npm run test:runtime && npm run build && npm run test:server-auth:e2e","desktop:package":"node scripts/run-desktop-forge.mjs package","desktop:preview":"node scripts/preview-desktop-pet-states.mjs","test:automation":"node scripts/run-automation-smokes.cjs","test:chat-draft":"npx --yes tsx@4.23.1 scripts/smoke-chat-draft.ts","test:cwd-browse":"npx --yes tsx@4.23.1 scripts/smoke-cwd-browse.ts","test:chat-errors":"npx --yes tsx@4.23.1 scripts/smoke-chat-provider-errors.ts","test:file-search":"npx --yes tsx@4.23.1 scripts/smoke-workspace-file-search.ts","test:file-upload":"npx --yes tsx@4.23.1 scripts/smoke-file-upload.ts","test:open-folder":"npx --yes tsx@4.23.1 scripts/smoke-open-project-folder.ts","test:server-auth":"npx --yes tsx@4.23.1 scripts/smoke-server-access-auth.ts && npx --yes tsx@4.23.1 scripts/smoke-server-access-proxy.ts","desktop:tauri:dev":"npm --prefix desktop-tauri run dev","test:agent-stream":"node --import tsx scripts/smoke-agent-event-throttler.mjs && node --import tsx scripts/smoke-empty-completed-retry.mjs && npx --yes tsx@4.23.1 scripts/smoke-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-pi-session-lifecycle.ts","test:session-tabs":"npx --yes tsx@4.23.1 scripts/smoke-session-tab-coordination.ts","test:session-index":"npx --yes tsx@4.23.1 scripts/smoke-session-index.ts","test:session-stats":"npx --yes tsx@4.23.1 scripts/smoke-session-billing-stats.ts","test:task-observer":"npx --yes tsx@4.23.1 scripts/smoke-task-observer.ts","desktop:dev:rebuild":"node scripts/run-desktop-pet.mjs --rebuild","desktop:tauri:build":"npm --prefix desktop-tauri run build","test:api-protection":"node --import tsx scripts/smoke-grok-usage.mjs","test:quick-commands":"npx --yes tsx@4.23.1 scripts/smoke-quick-commands.ts","test:scale-baseline":"npx --yes tsx@4.23.1 scripts/smoke-scale-baseline.ts","test:session-search":"npx --yes tsx@4.23.1 scripts/smoke-session-search.ts","test:desktop-package":"node scripts/smoke-desktop-package.mjs","test:server-auth:e2e":"node scripts/e2e-server-access-auth.mjs","test:session-changes":"node --import tsx scripts/smoke-session-file-changes.mjs","test:desktop-contract":"npx --yes tsx@4.23.1 scripts/smoke-desktop-contract.ts","test:desktop-observer":"npm run test:task-observer && npm run test:desktop-observer-api && npm run test:desktop-deep-links && npm run test:desktop-connection && npm run test:desktop-contract && npm run test:desktop-package && npm run test:desktop-quick-session","test:web-tools-config":"npx --yes tsx@4.23.1 scripts/smoke-web-tools-config.ts","desktop:tauri:build-ui":"node scripts/build-desktop-tauri.mjs","test:bundled-extensions":"npx --yes tsx@4.23.1 scripts/smoke-bundled-pi-extensions.ts","test:desktop-connection":"npx --yes tsx@4.23.1 scripts/smoke-desktop-connection.ts","test:desktop-deep-links":"npx --yes tsx@4.23.1 scripts/smoke-desktop-deep-links.ts","test:session-performance":"npx --yes tsx@4.23.1 scripts/smoke-session-performance.ts","test:desktop-observer-api":"npx --yes tsx@4.23.1 scripts/smoke-desktop-observer-api.ts","test:package-update-check":"npx --yes tsx@4.23.1 scripts/smoke-package-update-check.ts","generate:browser-extension":"tsx scripts/generate-browser-extension-shared.ts","test:desktop-quick-session":"npx --yes tsx@4.23.1 scripts/smoke-desktop-quick-session.ts","test:desktop-tauri-package":"node scripts/smoke-desktop-tauri-package.mjs","test:desktop-tauri-contract":"npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-contract.ts && npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-view-parity.ts && node scripts/smoke-desktop-tauri-package.mjs && cargo test --manifest-path desktop-tauri/src-tauri/Cargo.toml","test:subagent-observability":"npx --yes tsx@4.23.1 scripts/smoke-subagent-observability.ts && node --import tsx scripts/smoke-subagent-progress.mjs && npx --yes tsx@4.23.1 scripts/smoke-subagent-session-runs.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail-route.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-store.ts","test:model-primary-candidates":"npx --yes tsx@4.23.1 scripts/smoke-model-primary-candidates.ts","test:desktop-tauri-view-parity":"npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-view-parity.ts"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"overrides":{"@earendil-works/pi-ai":"0.84.1","@earendil-works/pi-tui":"0.84.1","@earendil-works/pi-agent-core":"0.84.1"},"repository":{"url":"git+https://github.com/twofive1203/pi-agnet-web.git","type":"git"},"_npmVersion":"9.6.6","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.3","diff":"^8.0.4","next":"16.2.12","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","typebox":"1.3.7","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","cron-parser":"^4.9.0","pi-ask-user":"0.13.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","jsonc-parser":"^3.3.1","pi-subagents":"0.40.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","pi-manage-todo-list":"0.4.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.84.1","react-syntax-highlighter":"^16.1.1","@juicesharp/rpiv-web-tools":"2.3.1","@earendil-works/pi-coding-agent":"0.84.1","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","eslint":"^9","esbuild":"^0.25.12","postcss":"^8","electron":"^43.4.0","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.12","@electron-forge/cli":"^7.11.2","@tailwindcss/postcss":"^4.2.2","@electron-forge/maker-squirrel":"^7.11.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.9.14_1787306318604_0.4808948567297793","host":"s3://npm-registry-packages-npm-production"}},"0.9.15":{"name":"@twofive/snail-pi-web","version":"0.9.15","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.9.15","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/twofive1203/pi-agnet-web#readme","bugs":{"url":"https://github.com/twofive1203/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"926acbe34a9298e0a1320a7241e213f2b50f62b8","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.9.15.tgz","fileCount":1215,"integrity":"sha512-Skp3KCp6+lS4iclgk0ejeUz3tnNkMHHMmCXA0iLUBcSNO8dsqSeSuPMwRvylhZ8W5ePebFXLOFxy61XjChXsvQ==","signatures":[{"sig":"MEUCIDQwFip3HzZniLH+lG6vvmYIeqgqDrGC+k8WQ0x5pHtUAiEA04PgD5cIa1znf3/CwN/2ZiMyM7o540kEFUc0oqKxGZ4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36468287},"engines":{"node":">=22.19.0"},"gitHead":"1a8d2fd8739fcdea9e4191c4e73d405d1fb6dad8","scripts":{"dev":"node bin/pi-web.js --dev","lint":"eslint .","build":"node scripts/build-next.js","start":"node bin/pi-web.js","release":"npm run release:patch","test:mcp":"npx --yes tsx@4.23.1 scripts/smoke-mcp-config.ts","test:i18n":"npx --yes tsx@4.23.1 scripts/check-i18n-keys.ts","test:usage":"npx --yes tsx@4.23.1 scripts/smoke-usage-timeline.ts && npx --yes tsx@4.23.1 scripts/smoke-usage-subagents.ts","desktop:dev":"node scripts/run-desktop-pet.mjs","postinstall":"node scripts/patch-pi-subagents-stale-ctx.mjs","test:snflow":"npx --yes tsx@4.23.1 scripts/smoke-snflow-setup.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-store.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-session-link.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-snflow-spec-review.ts","test:vision":"npx --yes tsx@4.23.1 scripts/smoke-vision-resolver.ts","desktop:make":"node scripts/run-desktop-forge.mjs make","test:browser":"npx --yes tsx@4.23.1 scripts/generate-browser-extension-shared.ts && npx --yes tsx@4.23.1 scripts/smoke-browser-binding.ts && npx --yes tsx@4.23.1 scripts/smoke-chrome-extension-artifacts.ts","test:runtime":"npx --yes tsx@4.23.1 scripts/smoke-runtime-packaging.ts","desktop:build":"node scripts/build-desktop-pet.mjs","release:patch":"npm version patch && npm publish --access public","test:git-diff":"npx --yes tsx@4.23.1 scripts/smoke-git-diff.ts","test:ui-theme":"npx --yes tsx@4.23.1 scripts/smoke-ui-theme-contract.ts","prepublishOnly":"npm run lint && tsc --noEmit && npm run test:server-auth && npm run test:runtime && npm run build && npm run test:npm-package && npm run test:server-auth:e2e","test:git-stash":"npx --yes tsx@4.23.1 scripts/smoke-git-stash.ts","desktop:package":"node scripts/run-desktop-forge.mjs package","desktop:preview":"node scripts/preview-desktop-pet-states.mjs","test:automation":"node scripts/run-automation-smokes.cjs","test:chat-draft":"npx --yes tsx@4.23.1 scripts/smoke-chat-draft.ts","test:cwd-browse":"npx --yes tsx@4.23.1 scripts/smoke-cwd-browse.ts","test:chat-errors":"npx --yes tsx@4.23.1 scripts/smoke-chat-provider-errors.ts","test:file-search":"npx --yes tsx@4.23.1 scripts/smoke-workspace-file-search.ts","test:file-upload":"npx --yes tsx@4.23.1 scripts/smoke-file-upload.ts","test:npm-package":"node scripts/check-npm-package-size.mjs","test:open-folder":"npx --yes tsx@4.23.1 scripts/smoke-open-project-folder.ts","test:server-auth":"npx --yes tsx@4.23.1 scripts/smoke-server-access-auth.ts && npx --yes tsx@4.23.1 scripts/smoke-server-access-proxy.ts","desktop:tauri:dev":"npm --prefix desktop-tauri run dev","test:agent-stream":"node --import tsx scripts/smoke-agent-event-throttler.mjs && node --import tsx scripts/smoke-empty-completed-retry.mjs && npx --yes tsx@4.23.1 scripts/smoke-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-pi-session-lifecycle.ts","test:session-tabs":"npx --yes tsx@4.23.1 scripts/smoke-session-tab-coordination.ts","test:git-workbench":"npx --yes tsx@4.23.1 scripts/smoke-git-workbench.ts","test:session-index":"npx --yes tsx@4.23.1 scripts/smoke-session-index.ts","test:session-stats":"npx --yes tsx@4.23.1 scripts/smoke-session-billing-stats.ts","test:task-observer":"npx --yes tsx@4.23.1 scripts/smoke-task-observer.ts","desktop:dev:rebuild":"node scripts/run-desktop-pet.mjs --rebuild","desktop:tauri:build":"npm --prefix desktop-tauri run build","test:api-protection":"node --import tsx scripts/smoke-grok-usage.mjs","test:quick-commands":"npx --yes tsx@4.23.1 scripts/smoke-quick-commands.ts","test:scale-baseline":"npx --yes tsx@4.23.1 scripts/smoke-scale-baseline.ts","test:session-search":"npx --yes tsx@4.23.1 scripts/smoke-session-search.ts","test:desktop-package":"node scripts/smoke-desktop-package.mjs","test:server-auth:e2e":"node scripts/e2e-server-access-auth.mjs","test:session-changes":"node --import tsx scripts/smoke-session-file-changes.mjs","test:desktop-contract":"npx --yes tsx@4.23.1 scripts/smoke-desktop-contract.ts","test:desktop-observer":"npm run test:task-observer && npm run test:desktop-observer-api && npm run test:desktop-deep-links && npm run test:desktop-connection && npm run test:desktop-contract && npm run test:desktop-package && npm run test:desktop-quick-session","test:web-tools-config":"npx --yes tsx@4.23.1 scripts/smoke-web-tools-config.ts","desktop:tauri:build-ui":"node scripts/build-desktop-tauri.mjs","test:bundled-extensions":"npx --yes tsx@4.23.1 scripts/smoke-bundled-pi-extensions.ts","test:desktop-connection":"npx --yes tsx@4.23.1 scripts/smoke-desktop-connection.ts","test:desktop-deep-links":"npx --yes tsx@4.23.1 scripts/smoke-desktop-deep-links.ts","test:session-transcript":"npx --yes tsx@4.23.1 scripts/smoke-session-transcript.ts","test:session-performance":"npx --yes tsx@4.23.1 scripts/smoke-session-performance.ts","test:desktop-observer-api":"npx --yes tsx@4.23.1 scripts/smoke-desktop-observer-api.ts","test:package-update-check":"npx --yes tsx@4.23.1 scripts/smoke-package-update-check.ts","generate:browser-extension":"tsx scripts/generate-browser-extension-shared.ts","test:desktop-quick-session":"npx --yes tsx@4.23.1 scripts/smoke-desktop-quick-session.ts","test:desktop-tauri-package":"node scripts/smoke-desktop-tauri-package.mjs","test:desktop-tauri-contract":"npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-contract.ts && npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-view-parity.ts && node scripts/smoke-desktop-tauri-package.mjs && cargo test --manifest-path desktop-tauri/src-tauri/Cargo.toml","test:subagent-observability":"npx --yes tsx@4.23.1 scripts/smoke-subagent-observability.ts && node --import tsx scripts/smoke-subagent-progress.mjs && npx --yes tsx@4.23.1 scripts/smoke-subagent-session-runs.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail-route.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-store.ts","test:model-primary-candidates":"npx --yes tsx@4.23.1 scripts/smoke-model-primary-candidates.ts","test:desktop-tauri-view-parity":"npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-view-parity.ts"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"overrides":{"@earendil-works/pi-ai":"0.84.1","@earendil-works/pi-tui":"0.84.1","@earendil-works/pi-agent-core":"0.84.1"},"repository":{"url":"git+https://github.com/twofive1203/pi-agnet-web.git","type":"git"},"_npmVersion":"9.6.6","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.3","diff":"^8.0.4","next":"16.2.12","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","typebox":"1.3.7","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","cron-parser":"^4.9.0","pi-ask-user":"0.13.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","jsonc-parser":"^3.3.1","pi-subagents":"0.40.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","pi-manage-todo-list":"0.4.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.84.1","react-syntax-highlighter":"^16.1.1","@juicesharp/rpiv-web-tools":"2.3.1","@earendil-works/pi-coding-agent":"0.84.1","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","eslint":"^9","esbuild":"^0.25.12","postcss":"^8","electron":"^43.4.0","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.12","@electron-forge/cli":"^7.11.2","@tailwindcss/postcss":"^4.2.2","@electron-forge/maker-squirrel":"^7.11.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.9.15_1787727447776_0.08012805323074268","host":"s3://npm-registry-packages-npm-production"}},"0.9.16":{"name":"@twofive/snail-pi-web","version":"0.9.16","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.9.16","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/twofive1203/pi-agnet-web#readme","bugs":{"url":"https://github.com/twofive1203/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"b4b135da540261014d6b0185c7cc64a30164b0e8","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.9.16.tgz","fileCount":1217,"integrity":"sha512-BPXjMhVwJR9upmsVNiaJjVuQhA4KLP0/pLvXUO3onGrfpVMVxyKJXHU8Zgx/6GdKumC6MuKHc9F67+2kqZ4K6w==","signatures":[{"sig":"MEYCIQC5y/iO2LTa+D+7WKkOeERcynUa6vIvI+F64SHGJvkxaQIhAMt434OOOMKq76VK/q8i3WfWBC6/MKJT/g8KXDfreYOO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36507872},"engines":{"node":">=22.19.0"},"gitHead":"5bd0cc0d6d6679fd9ef346a432d685edb704c6a1","scripts":{"dev":"node bin/pi-web.js --dev","lint":"eslint .","build":"node scripts/build-next.js","start":"node bin/pi-web.js","release":"npm run release:patch","test:mcp":"npx --yes tsx@4.23.1 scripts/smoke-mcp-config.ts","test:i18n":"npx --yes tsx@4.23.1 scripts/check-i18n-keys.ts","test:usage":"npx --yes tsx@4.23.1 scripts/smoke-usage-timeline.ts && npx --yes tsx@4.23.1 scripts/smoke-usage-subagents.ts","desktop:dev":"node scripts/run-desktop-pet.mjs","postinstall":"node scripts/patch-pi-subagents-stale-ctx.mjs","test:snflow":"npx --yes tsx@4.23.1 scripts/smoke-snflow-setup.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-store.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-session-link.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-snflow-spec-review.ts","test:vision":"npx --yes tsx@4.23.1 scripts/smoke-vision-resolver.ts","desktop:make":"node scripts/run-desktop-forge.mjs make","test:browser":"npx --yes tsx@4.23.1 scripts/generate-browser-extension-shared.ts && npx --yes tsx@4.23.1 scripts/smoke-browser-binding.ts && npx --yes tsx@4.23.1 scripts/smoke-chrome-extension-artifacts.ts","test:runtime":"npx --yes tsx@4.23.1 scripts/smoke-runtime-packaging.ts","desktop:build":"node scripts/build-desktop-pet.mjs","release:patch":"npm version patch && npm publish --access public","test:git-diff":"npx --yes tsx@4.23.1 scripts/smoke-git-diff.ts","test:ui-theme":"npx --yes tsx@4.23.1 scripts/smoke-ui-theme-contract.ts","prepublishOnly":"npm run lint && tsc --noEmit && npm run test:server-auth && npm run test:runtime && npm run build && npm run test:bundled-extensions:production && npm run test:npm-package && npm run test:server-auth:e2e","test:git-stash":"npx --yes tsx@4.23.1 scripts/smoke-git-stash.ts","desktop:package":"node scripts/run-desktop-forge.mjs package","desktop:preview":"node scripts/preview-desktop-pet-states.mjs","test:automation":"node scripts/run-automation-smokes.cjs","test:chat-draft":"npx --yes tsx@4.23.1 scripts/smoke-chat-draft.ts","test:cwd-browse":"npx --yes tsx@4.23.1 scripts/smoke-cwd-browse.ts","test:chat-errors":"npx --yes tsx@4.23.1 scripts/smoke-chat-provider-errors.ts","test:file-search":"npx --yes tsx@4.23.1 scripts/smoke-workspace-file-search.ts","test:file-upload":"npx --yes tsx@4.23.1 scripts/smoke-file-upload.ts","test:npm-package":"node scripts/check-npm-package-size.mjs","test:open-folder":"npx --yes tsx@4.23.1 scripts/smoke-open-project-folder.ts","test:server-auth":"npx --yes tsx@4.23.1 scripts/smoke-server-access-auth.ts && npx --yes tsx@4.23.1 scripts/smoke-server-access-proxy.ts","desktop:tauri:dev":"npm --prefix desktop-tauri run dev","test:agent-stream":"node --import tsx scripts/smoke-agent-event-throttler.mjs && node --import tsx scripts/smoke-empty-completed-retry.mjs && npx --yes tsx@4.23.1 scripts/smoke-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-pi-session-lifecycle.ts","test:session-tabs":"npx --yes tsx@4.23.1 scripts/smoke-session-tab-coordination.ts","test:git-workbench":"npx --yes tsx@4.23.1 scripts/smoke-git-workbench.ts","test:session-index":"npx --yes tsx@4.23.1 scripts/smoke-session-index.ts","test:session-stats":"npx --yes tsx@4.23.1 scripts/smoke-session-billing-stats.ts","test:task-observer":"npx --yes tsx@4.23.1 scripts/smoke-task-observer.ts","desktop:dev:rebuild":"node scripts/run-desktop-pet.mjs --rebuild","desktop:tauri:build":"npm --prefix desktop-tauri run build","test:api-protection":"node --import tsx scripts/smoke-grok-usage.mjs","test:quick-commands":"npx --yes tsx@4.23.1 scripts/smoke-quick-commands.ts","test:scale-baseline":"npx --yes tsx@4.23.1 scripts/smoke-scale-baseline.ts","test:session-search":"npx --yes tsx@4.23.1 scripts/smoke-session-search.ts","test:desktop-package":"node scripts/smoke-desktop-package.mjs","test:server-auth:e2e":"node scripts/e2e-server-access-auth.mjs","test:session-changes":"node --import tsx scripts/smoke-session-file-changes.mjs","test:desktop-contract":"npx --yes tsx@4.23.1 scripts/smoke-desktop-contract.ts","test:desktop-observer":"npm run test:task-observer && npm run test:desktop-observer-api && npm run test:desktop-deep-links && npm run test:desktop-connection && npm run test:desktop-contract && npm run test:desktop-package && npm run test:desktop-quick-session","test:web-tools-config":"npx --yes tsx@4.23.1 scripts/smoke-web-tools-config.ts","desktop:tauri:build-ui":"node scripts/build-desktop-tauri.mjs","test:bundled-extensions":"npx --yes tsx@4.23.1 scripts/smoke-bundled-pi-extensions.ts","test:desktop-connection":"npx --yes tsx@4.23.1 scripts/smoke-desktop-connection.ts","test:desktop-deep-links":"npx --yes tsx@4.23.1 scripts/smoke-desktop-deep-links.ts","test:session-transcript":"npx --yes tsx@4.23.1 scripts/smoke-session-transcript.ts","test:session-performance":"npx --yes tsx@4.23.1 scripts/smoke-session-performance.ts","test:desktop-observer-api":"npx --yes tsx@4.23.1 scripts/smoke-desktop-observer-api.ts","test:package-update-check":"npx --yes tsx@4.23.1 scripts/smoke-package-update-check.ts","generate:browser-extension":"tsx scripts/generate-browser-extension-shared.ts","test:desktop-quick-session":"npx --yes tsx@4.23.1 scripts/smoke-desktop-quick-session.ts","test:desktop-tauri-package":"node scripts/smoke-desktop-tauri-package.mjs","test:desktop-tauri-contract":"npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-contract.ts && npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-view-parity.ts && node scripts/smoke-desktop-tauri-package.mjs && cargo test --manifest-path desktop-tauri/src-tauri/Cargo.toml","test:subagent-observability":"npx --yes tsx@4.23.1 scripts/smoke-subagent-observability.ts && node --import tsx scripts/smoke-subagent-progress.mjs && npx --yes tsx@4.23.1 scripts/smoke-subagent-session-runs.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail-route.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-store.ts","test:model-primary-candidates":"npx --yes tsx@4.23.1 scripts/smoke-model-primary-candidates.ts","test:desktop-tauri-view-parity":"npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-view-parity.ts","test:bundled-extensions:production":"node scripts/e2e-bundled-pi-extensions-production.mjs"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"overrides":{"@earendil-works/pi-ai":"0.84.1","@earendil-works/pi-tui":"0.84.1","@earendil-works/pi-agent-core":"0.84.1"},"repository":{"url":"git+https://github.com/twofive1203/pi-agnet-web.git","type":"git"},"_npmVersion":"9.6.6","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.3","diff":"^8.0.4","next":"16.2.12","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","typebox":"1.3.7","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","cron-parser":"^4.9.0","pi-ask-user":"0.13.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","jsonc-parser":"^3.3.1","pi-subagents":"0.40.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","pi-manage-todo-list":"0.4.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.84.1","react-syntax-highlighter":"^16.1.1","@juicesharp/rpiv-web-tools":"2.3.1","@earendil-works/pi-coding-agent":"0.84.1","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","eslint":"^9","esbuild":"^0.25.12","postcss":"^8","electron":"^43.4.0","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.12","@electron-forge/cli":"^7.11.2","@tailwindcss/postcss":"^4.2.2","@electron-forge/maker-squirrel":"^7.11.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.9.16_1788231069966_0.2833336202679435","host":"s3://npm-registry-packages-npm-production"}},"0.9.17":{"name":"@twofive/snail-pi-web","version":"0.9.17","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.9.17","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/twofive1203/pi-agnet-web#readme","bugs":{"url":"https://github.com/twofive1203/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"9de23a49bbe3a31b051506b74f800b6958ad3fae","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.9.17.tgz","fileCount":1237,"integrity":"sha512-K9gmh7JmArevLY9ihTvj1IlyyCfaINX9by6kFPZYzCGdokA9l2xufUTZDqAanpcNtk5mNx+vluJqg1X/v/eXIg==","signatures":[{"sig":"MEUCIQD0bKa7FQWQKknGx63Zz33lK2NgFHQpkqZdkI+32nV1TwIgGjLyXsjRMZp1XOTRlyiifFznERc8vdC408cHpsZsCzA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36775685},"engines":{"node":">=22.19.0"},"gitHead":"45a41c9931f4ff4d7ead0162f0b09d17799078df","scripts":{"dev":"node bin/pi-web.js --dev","lint":"eslint .","build":"node scripts/build-next.js","start":"node bin/pi-web.js","release":"npm run release:patch","test:mcp":"npx --yes tsx@4.23.1 scripts/smoke-mcp-config.ts","test:i18n":"npx --yes tsx@4.23.1 scripts/check-i18n-keys.ts","test:usage":"npx --yes tsx@4.23.1 scripts/smoke-usage-timeline.ts && npx --yes tsx@4.23.1 scripts/smoke-usage-subagents.ts","desktop:dev":"node scripts/run-desktop-pet.mjs","postinstall":"node scripts/patch-pi-subagents-stale-ctx.mjs","test:snflow":"npx --yes tsx@4.23.1 scripts/smoke-snflow-setup.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-store.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-session-link.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-snflow-spec-review.ts","test:vision":"npx --yes tsx@4.23.1 scripts/smoke-vision-resolver.ts","desktop:make":"node scripts/run-desktop-forge.mjs make","test:browser":"npx --yes tsx@4.23.1 scripts/generate-browser-extension-shared.ts && npx --yes tsx@4.23.1 scripts/smoke-browser-binding.ts && npx --yes tsx@4.23.1 scripts/smoke-chrome-extension-artifacts.ts","test:runtime":"npx --yes tsx@4.23.1 scripts/smoke-runtime-packaging.ts","desktop:build":"node scripts/build-desktop-pet.mjs","release:patch":"npm version patch && npm publish --access public","test:git-diff":"npx --yes tsx@4.23.1 scripts/smoke-git-diff.ts","test:ui-theme":"npx --yes tsx@4.23.1 scripts/smoke-ui-theme-contract.ts","prepublishOnly":"npm run lint && tsc --noEmit && npm run test:server-auth && npm run test:runtime && npm run build && npm run test:bundled-extensions:production && npm run test:npm-package && npm run test:server-auth:e2e","test:git-stash":"npx --yes tsx@4.23.1 scripts/smoke-git-stash.ts","desktop:package":"node scripts/run-desktop-forge.mjs package","desktop:preview":"node scripts/preview-desktop-pet-states.mjs","test:automation":"node scripts/run-automation-smokes.cjs","test:chat-draft":"npx --yes tsx@4.23.1 scripts/smoke-chat-draft.ts","test:cwd-browse":"npx --yes tsx@4.23.1 scripts/smoke-cwd-browse.ts","test:chat-errors":"npx --yes tsx@4.23.1 scripts/smoke-chat-provider-errors.ts","test:file-search":"npx --yes tsx@4.23.1 scripts/smoke-workspace-file-search.ts","test:file-upload":"npx --yes tsx@4.23.1 scripts/smoke-file-upload.ts","test:npm-package":"node scripts/check-npm-package-size.mjs","test:open-folder":"npx --yes tsx@4.23.1 scripts/smoke-open-project-folder.ts","test:server-auth":"npx --yes tsx@4.23.1 scripts/smoke-server-access-auth.ts && npx --yes tsx@4.23.1 scripts/smoke-server-access-proxy.ts","desktop:tauri:dev":"npm --prefix desktop-tauri run dev","test:agent-stream":"node --import tsx scripts/smoke-agent-event-throttler.mjs && node --import tsx scripts/smoke-empty-completed-retry.mjs && npx --yes tsx@4.23.1 scripts/smoke-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-pi-session-lifecycle.ts","test:session-tabs":"npx --yes tsx@4.23.1 scripts/smoke-session-tab-coordination.ts","test:git-workbench":"npx --yes tsx@4.23.1 scripts/smoke-git-workbench.ts","test:model-default":"npx --yes tsx@4.23.1 scripts/smoke-model-default.ts","test:session-index":"npx --yes tsx@4.23.1 scripts/smoke-session-index.ts","test:session-stats":"npx --yes tsx@4.23.1 scripts/smoke-session-billing-stats.ts","test:task-observer":"npx --yes tsx@4.23.1 scripts/smoke-task-observer.ts","desktop:dev:rebuild":"node scripts/run-desktop-pet.mjs --rebuild","desktop:tauri:build":"npm --prefix desktop-tauri run build","test:api-protection":"node --import tsx scripts/smoke-grok-usage.mjs","test:quick-commands":"npx --yes tsx@4.23.1 scripts/smoke-quick-commands.ts","test:scale-baseline":"npx --yes tsx@4.23.1 scripts/smoke-scale-baseline.ts","test:session-search":"npx --yes tsx@4.23.1 scripts/smoke-session-search.ts","test:desktop-package":"node scripts/smoke-desktop-package.mjs","test:server-auth:e2e":"node scripts/e2e-server-access-auth.mjs","test:session-changes":"node --import tsx scripts/smoke-session-file-changes.mjs","test:desktop-contract":"npx --yes tsx@4.23.1 scripts/smoke-desktop-contract.ts","test:desktop-observer":"npm run test:task-observer && npm run test:desktop-observer-api && npm run test:desktop-deep-links && npm run test:desktop-connection && npm run test:desktop-contract && npm run test:desktop-package && npm run test:desktop-quick-session","test:git-repositories":"npx --yes tsx@4.23.1 scripts/smoke-git-repositories.ts","test:web-tools-config":"npx --yes tsx@4.23.1 scripts/smoke-web-tools-config.ts","desktop:tauri:build-ui":"node scripts/build-desktop-tauri.mjs","test:file-editor-state":"npx --yes tsx@4.23.1 scripts/smoke-file-editor-state.ts","test:file-preview-diff":"npx --yes tsx@4.23.1 scripts/smoke-file-preview-diff.ts","test:project-knowledge":"npx --yes tsx@4.23.1 scripts/smoke-project-knowledge.ts","test:bundled-extensions":"npx --yes tsx@4.23.1 scripts/smoke-bundled-pi-extensions.ts","test:desktop-connection":"npx --yes tsx@4.23.1 scripts/smoke-desktop-connection.ts","test:desktop-deep-links":"npx --yes tsx@4.23.1 scripts/smoke-desktop-deep-links.ts","test:session-transcript":"npx --yes tsx@4.23.1 scripts/smoke-session-transcript.ts","test:session-performance":"npx --yes tsx@4.23.1 scripts/smoke-session-performance.ts","test:desktop-observer-api":"npx --yes tsx@4.23.1 scripts/smoke-desktop-observer-api.ts","test:git-client-lifecycle":"npx --yes tsx@4.23.1 scripts/smoke-git-client-lifecycle.ts","test:git-read-performance":"npx --yes tsx@4.23.1 scripts/smoke-git-read-performance.ts","test:package-update-check":"npx --yes tsx@4.23.1 scripts/smoke-package-update-check.ts","generate:browser-extension":"tsx scripts/generate-browser-extension-shared.ts","test:desktop-quick-session":"npx --yes tsx@4.23.1 scripts/smoke-desktop-quick-session.ts","test:desktop-tauri-package":"node scripts/smoke-desktop-tauri-package.mjs","test:desktop-tauri-contract":"npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-contract.ts && npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-view-parity.ts && node scripts/smoke-desktop-tauri-package.mjs && cargo test --manifest-path desktop-tauri/src-tauri/Cargo.toml","test:subagent-observability":"npx --yes tsx@4.23.1 scripts/smoke-subagent-observability.ts && node --import tsx scripts/smoke-subagent-progress.mjs && npx --yes tsx@4.23.1 scripts/smoke-subagent-session-runs.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail-route.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-store.ts","test:model-primary-candidates":"npx --yes tsx@4.23.1 scripts/smoke-model-primary-candidates.ts","test:desktop-tauri-view-parity":"npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-view-parity.ts","test:bundled-extensions:production":"node scripts/e2e-bundled-pi-extensions-production.mjs"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"overrides":{"@earendil-works/pi-ai":"0.85.1","@earendil-works/pi-tui":"0.85.1","@earendil-works/pi-agent-core":"0.85.1"},"repository":{"url":"git+https://github.com/twofive1203/pi-agnet-web.git","type":"git"},"_npmVersion":"9.6.6","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.3","diff":"^8.0.4","next":"16.2.12","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","typebox":"1.3.7","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","cron-parser":"^4.9.0","pi-ask-user":"0.13.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","jsonc-parser":"^3.3.1","pi-subagents":"0.40.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","pi-manage-todo-list":"0.4.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.85.1","react-syntax-highlighter":"^16.1.1","@juicesharp/rpiv-web-tools":"2.3.1","@earendil-works/pi-coding-agent":"0.85.1","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","eslint":"^9","esbuild":"^0.25.12","postcss":"^8","electron":"^43.4.0","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.12","@electron-forge/cli":"^7.11.2","@tailwindcss/postcss":"^4.2.2","@electron-forge/maker-squirrel":"^7.11.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.9.17_1788851507313_0.8071682650428964","host":"s3://npm-registry-packages-npm-production"}},"0.9.18":{"name":"@twofive/snail-pi-web","version":"0.9.18","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.9.18","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/twofive1203/pi-agnet-web#readme","bugs":{"url":"https://github.com/twofive1203/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"91a6f226d581276e218e2904892261f6cbb6c6d0","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.9.18.tgz","fileCount":1245,"integrity":"sha512-pCiPobRYPtYmiOFIyQOr5HyTOafhfNpb1E4LwilX1mNzMU0qZDwC38ujVzpIemXBfp/0G+YpU8kHGuFqrVvGMw==","signatures":[{"sig":"MEUCIFCP2DtODwTB8Ag811d1rU9QV/JrgFGQLD1GcxWQwi+RAiEA7nmL9QXVl6/Oe8NCPdt9uH/SvWPk6xRzCf4BOFYrYWM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36916314},"engines":{"node":">=22.19.0"},"gitHead":"a7f0ab5f7132fea9e90a5040f921e203c1a620e1","scripts":{"dev":"node bin/pi-web.js --dev","lint":"eslint .","build":"node scripts/build-next.js","start":"node bin/pi-web.js","release":"npm run release:patch","test:mcp":"npx --yes tsx@4.23.1 scripts/smoke-mcp-config.ts","test:i18n":"npx --yes tsx@4.23.1 scripts/check-i18n-keys.ts","test:usage":"npx --yes tsx@4.23.1 scripts/smoke-usage-timeline.ts && npx --yes tsx@4.23.1 scripts/smoke-usage-subagents.ts","desktop:dev":"node scripts/run-desktop-pet.mjs","postinstall":"node scripts/patch-pi-subagents-stale-ctx.mjs","test:snflow":"npx --yes tsx@4.23.1 scripts/smoke-snflow-setup.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-store.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-session-link.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-snflow-spec-review.ts","test:vision":"npx --yes tsx@4.23.1 scripts/smoke-vision-resolver.ts","desktop:make":"node scripts/run-desktop-forge.mjs make","test:browser":"npx --yes tsx@4.23.1 scripts/generate-browser-extension-shared.ts && npx --yes tsx@4.23.1 scripts/smoke-browser-binding.ts && npx --yes tsx@4.23.1 scripts/smoke-chrome-extension-artifacts.ts","test:runtime":"npx --yes tsx@4.23.1 scripts/smoke-runtime-packaging.ts","desktop:build":"node scripts/build-desktop-pet.mjs","release:patch":"npm version patch && npm publish --access public","test:git-diff":"npx --yes tsx@4.23.1 scripts/smoke-git-diff.ts","test:ui-theme":"npx --yes tsx@4.23.1 scripts/smoke-ui-theme-contract.ts","prepublishOnly":"npm run lint && tsc --noEmit && npm run test:server-auth && npm run test:runtime && npm run build && npm run test:bundled-extensions:production && npm run test:npm-package && npm run test:server-auth:e2e","test:git-stash":"npx --yes tsx@4.23.1 scripts/smoke-git-stash.ts","desktop:package":"node scripts/run-desktop-forge.mjs package","desktop:preview":"node scripts/preview-desktop-pet-states.mjs","test:automation":"node scripts/run-automation-smokes.cjs","test:chat-draft":"npx --yes tsx@4.23.1 scripts/smoke-chat-draft.ts","test:cwd-browse":"npx --yes tsx@4.23.1 scripts/smoke-cwd-browse.ts","test:chat-errors":"npx --yes tsx@4.23.1 scripts/smoke-chat-provider-errors.ts","test:file-search":"npx --yes tsx@4.23.1 scripts/smoke-workspace-file-search.ts","test:file-upload":"npx --yes tsx@4.23.1 scripts/smoke-file-upload.ts","test:npm-package":"node scripts/check-npm-package-size.mjs","test:open-folder":"npx --yes tsx@4.23.1 scripts/smoke-open-project-folder.ts","test:server-auth":"npx --yes tsx@4.23.1 scripts/smoke-server-access-auth.ts && npx --yes tsx@4.23.1 scripts/smoke-server-access-proxy.ts","desktop:tauri:dev":"npm --prefix desktop-tauri run dev","test:agent-stream":"node --import tsx scripts/smoke-agent-event-throttler.mjs && node --import tsx scripts/smoke-empty-completed-retry.mjs && npx --yes tsx@4.23.1 scripts/smoke-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-pi-session-lifecycle.ts","test:session-tabs":"npx --yes tsx@4.23.1 scripts/smoke-session-tab-coordination.ts","test:git-workbench":"npx --yes tsx@4.23.1 scripts/smoke-git-workbench.ts","test:model-default":"npx --yes tsx@4.23.1 scripts/smoke-model-default.ts","test:session-index":"npx --yes tsx@4.23.1 scripts/smoke-session-index.ts","test:session-stats":"npx --yes tsx@4.23.1 scripts/smoke-session-billing-stats.ts","test:task-observer":"npx --yes tsx@4.23.1 scripts/smoke-task-observer.ts","desktop:dev:rebuild":"node scripts/run-desktop-pet.mjs --rebuild","desktop:tauri:build":"npm --prefix desktop-tauri run build","test:api-protection":"node --import tsx scripts/smoke-grok-usage.mjs","test:quick-commands":"npx --yes tsx@4.23.1 scripts/smoke-quick-commands.ts","test:scale-baseline":"npx --yes tsx@4.23.1 scripts/smoke-scale-baseline.ts","test:session-search":"npx --yes tsx@4.23.1 scripts/smoke-session-search.ts","test:desktop-package":"node scripts/smoke-desktop-package.mjs","test:server-auth:e2e":"node scripts/e2e-server-access-auth.mjs","test:session-changes":"node --import tsx scripts/smoke-session-file-changes.mjs","test:desktop-contract":"npx --yes tsx@4.23.1 scripts/smoke-desktop-contract.ts","test:desktop-observer":"npm run test:task-observer && npm run test:desktop-observer-api && npm run test:desktop-deep-links && npm run test:desktop-connection && npm run test:desktop-contract && npm run test:desktop-package && npm run test:desktop-quick-session","test:git-repositories":"npx --yes tsx@4.23.1 scripts/smoke-git-repositories.ts","test:web-tools-config":"npx --yes tsx@4.23.1 scripts/smoke-web-tools-config.ts","desktop:tauri:build-ui":"node scripts/build-desktop-tauri.mjs","test:antigravity-usage":"node --import tsx scripts/smoke-antigravity-usage.mjs","test:file-editor-state":"npx --yes tsx@4.23.1 scripts/smoke-file-editor-state.ts","test:file-preview-diff":"npx --yes tsx@4.23.1 scripts/smoke-file-preview-diff.ts","test:project-knowledge":"npx --yes tsx@4.23.1 scripts/smoke-project-knowledge.ts","test:bundled-extensions":"npx --yes tsx@4.23.1 scripts/smoke-bundled-pi-extensions.ts","test:desktop-connection":"npx --yes tsx@4.23.1 scripts/smoke-desktop-connection.ts","test:desktop-deep-links":"npx --yes tsx@4.23.1 scripts/smoke-desktop-deep-links.ts","test:session-transcript":"npx --yes tsx@4.23.1 scripts/smoke-session-transcript.ts","test:auth-oauth-packages":"node --import tsx scripts/smoke-auth-oauth-packages.mjs","test:session-performance":"npx --yes tsx@4.23.1 scripts/smoke-session-performance.ts","test:desktop-observer-api":"npx --yes tsx@4.23.1 scripts/smoke-desktop-observer-api.ts","test:git-client-lifecycle":"npx --yes tsx@4.23.1 scripts/smoke-git-client-lifecycle.ts","test:git-read-performance":"npx --yes tsx@4.23.1 scripts/smoke-git-read-performance.ts","test:package-update-check":"npx --yes tsx@4.23.1 scripts/smoke-package-update-check.ts","generate:browser-extension":"tsx scripts/generate-browser-extension-shared.ts","test:desktop-quick-session":"npx --yes tsx@4.23.1 scripts/smoke-desktop-quick-session.ts","test:desktop-tauri-package":"node scripts/smoke-desktop-tauri-package.mjs","test:oauth-accounts-export":"node --import tsx scripts/smoke-oauth-accounts-export.mjs","test:desktop-tauri-contract":"npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-contract.ts && npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-view-parity.ts && node scripts/smoke-desktop-tauri-package.mjs && cargo test --manifest-path desktop-tauri/src-tauri/Cargo.toml","test:subagent-observability":"npx --yes tsx@4.23.1 scripts/smoke-subagent-observability.ts && node --import tsx scripts/smoke-subagent-progress.mjs && npx --yes tsx@4.23.1 scripts/smoke-subagent-session-runs.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail-route.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-store.ts","test:model-primary-candidates":"npx --yes tsx@4.23.1 scripts/smoke-model-primary-candidates.ts","test:desktop-tauri-view-parity":"npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-view-parity.ts","test:bundled-extensions:production":"node scripts/e2e-bundled-pi-extensions-production.mjs"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"overrides":{"@earendil-works/pi-ai":"0.85.1","@earendil-works/pi-tui":"0.85.1","@earendil-works/pi-agent-core":"0.85.1"},"repository":{"url":"git+https://github.com/twofive1203/pi-agnet-web.git","type":"git"},"_npmVersion":"9.6.6","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.3","diff":"^8.0.4","next":"16.2.12","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","typebox":"1.3.7","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","cron-parser":"^4.9.0","pi-ask-user":"0.13.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","jsonc-parser":"^3.3.1","pi-subagents":"0.40.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","pi-manage-todo-list":"0.4.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.85.1","react-syntax-highlighter":"^16.1.1","@juicesharp/rpiv-web-tools":"2.3.1","@earendil-works/pi-coding-agent":"0.85.1","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","eslint":"^9","esbuild":"^0.25.12","postcss":"^8","electron":"^43.4.0","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.12","@electron-forge/cli":"^7.11.2","@tailwindcss/postcss":"^4.2.2","@electron-forge/maker-squirrel":"^7.11.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.9.18_1789007358372_0.6591794964631723","host":"s3://npm-registry-packages-npm-production"}},"0.9.19":{"name":"@twofive/snail-pi-web","version":"0.9.19","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.9.19","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/twofive1203/pi-agnet-web#readme","bugs":{"url":"https://github.com/twofive1203/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"f8af921e066eefc58b28ee4bcc2ba21e5a2b738d","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.9.19.tgz","fileCount":1245,"integrity":"sha512-6T6xQurrpEIdSTRTHvD3812vcd2Sty80AhNdZ3Nq6ftRymAGBacdUA/jdZZhjyKWyIC/VGkwwf6Lt0cNjfJKXQ==","signatures":[{"sig":"MEYCIQCt9Xb8y8T6utYLAZc4F7OpbMXHJaUXXsQbXK+1vNv6vgIhAIW5RL/UM2DHH3IH3rH3R8jrkRCqxQGKT4reLBq5OwTI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36929486},"engines":{"node":">=22.19.0"},"gitHead":"d56849a35359dfe72b2a2b8ce8bb79154999f9aa","scripts":{"dev":"node bin/pi-web.js --dev","lint":"eslint .","build":"node scripts/build-next.js","start":"node bin/pi-web.js","release":"npm run release:patch","test:mcp":"npx --yes tsx@4.23.1 scripts/smoke-mcp-config.ts","test:i18n":"npx --yes tsx@4.23.1 scripts/check-i18n-keys.ts","test:usage":"npx --yes tsx@4.23.1 scripts/smoke-usage-timeline.ts && npx --yes tsx@4.23.1 scripts/smoke-usage-subagents.ts","desktop:dev":"node scripts/run-desktop-pet.mjs","postinstall":"node scripts/patch-pi-subagents-stale-ctx.mjs","test:snflow":"npx --yes tsx@4.23.1 scripts/smoke-snflow-setup.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-store.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-session-link.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-snflow-spec-review.ts","test:vision":"npx --yes tsx@4.23.1 scripts/smoke-vision-resolver.ts","desktop:make":"node scripts/run-desktop-forge.mjs make","test:browser":"npx --yes tsx@4.23.1 scripts/generate-browser-extension-shared.ts && npx --yes tsx@4.23.1 scripts/smoke-browser-binding.ts && npx --yes tsx@4.23.1 scripts/smoke-chrome-extension-artifacts.ts","test:runtime":"npx --yes tsx@4.23.1 scripts/smoke-runtime-packaging.ts","desktop:build":"node scripts/build-desktop-pet.mjs","release:patch":"npm version patch && npm publish --access public","test:git-diff":"npx --yes tsx@4.23.1 scripts/smoke-git-diff.ts","test:ui-theme":"npx --yes tsx@4.23.1 scripts/smoke-ui-theme-contract.ts","prepublishOnly":"npm run lint && tsc --noEmit && npm run test:server-auth && npm run test:runtime && npm run build && npm run test:bundled-extensions:production && npm run test:npm-package && npm run test:server-auth:e2e","test:git-stash":"npx --yes tsx@4.23.1 scripts/smoke-git-stash.ts","desktop:package":"node scripts/run-desktop-forge.mjs package","desktop:preview":"node scripts/preview-desktop-pet-states.mjs","test:automation":"node scripts/run-automation-smokes.cjs","test:chat-draft":"npx --yes tsx@4.23.1 scripts/smoke-chat-draft.ts","test:cwd-browse":"npx --yes tsx@4.23.1 scripts/smoke-cwd-browse.ts","test:chat-errors":"npx --yes tsx@4.23.1 scripts/smoke-chat-provider-errors.ts","test:file-search":"npx --yes tsx@4.23.1 scripts/smoke-workspace-file-search.ts","test:file-upload":"npx --yes tsx@4.23.1 scripts/smoke-file-upload.ts","test:npm-package":"node scripts/check-npm-package-size.mjs","test:open-folder":"npx --yes tsx@4.23.1 scripts/smoke-open-project-folder.ts","test:server-auth":"npx --yes tsx@4.23.1 scripts/smoke-server-access-auth.ts && npx --yes tsx@4.23.1 scripts/smoke-server-access-proxy.ts","desktop:tauri:dev":"npm --prefix desktop-tauri run dev","test:agent-stream":"node --import tsx scripts/smoke-agent-event-throttler.mjs && node --import tsx scripts/smoke-empty-completed-retry.mjs && npx --yes tsx@4.23.1 scripts/smoke-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-pi-session-lifecycle.ts","test:session-tabs":"npx --yes tsx@4.23.1 scripts/smoke-session-tab-coordination.ts","test:git-workbench":"npx --yes tsx@4.23.1 scripts/smoke-git-workbench.ts","test:model-default":"npx --yes tsx@4.23.1 scripts/smoke-model-default.ts","test:session-index":"npx --yes tsx@4.23.1 scripts/smoke-session-index.ts","test:session-stats":"npx --yes tsx@4.23.1 scripts/smoke-session-billing-stats.ts","test:task-observer":"npx --yes tsx@4.23.1 scripts/smoke-task-observer.ts","desktop:dev:rebuild":"node scripts/run-desktop-pet.mjs --rebuild","desktop:tauri:build":"npm --prefix desktop-tauri run build","test:api-protection":"node --import tsx scripts/smoke-grok-usage.mjs","test:quick-commands":"npx --yes tsx@4.23.1 scripts/smoke-quick-commands.ts","test:scale-baseline":"npx --yes tsx@4.23.1 scripts/smoke-scale-baseline.ts","test:session-search":"npx --yes tsx@4.23.1 scripts/smoke-session-search.ts","test:desktop-package":"node scripts/smoke-desktop-package.mjs","test:server-auth:e2e":"node scripts/e2e-server-access-auth.mjs","test:session-changes":"node --import tsx scripts/smoke-session-file-changes.mjs","test:desktop-contract":"npx --yes tsx@4.23.1 scripts/smoke-desktop-contract.ts","test:desktop-observer":"npm run test:task-observer && npm run test:desktop-observer-api && npm run test:desktop-deep-links && npm run test:desktop-connection && npm run test:desktop-contract && npm run test:desktop-package && npm run test:desktop-quick-session","test:git-repositories":"npx --yes tsx@4.23.1 scripts/smoke-git-repositories.ts","test:web-tools-config":"npx --yes tsx@4.23.1 scripts/smoke-web-tools-config.ts","desktop:tauri:build-ui":"node scripts/build-desktop-tauri.mjs","test:antigravity-usage":"node --import tsx scripts/smoke-antigravity-usage.mjs","test:file-editor-state":"npx --yes tsx@4.23.1 scripts/smoke-file-editor-state.ts","test:file-preview-diff":"npx --yes tsx@4.23.1 scripts/smoke-file-preview-diff.ts","test:project-knowledge":"npx --yes tsx@4.23.1 scripts/smoke-project-knowledge.ts","test:bundled-extensions":"npx --yes tsx@4.23.1 scripts/smoke-bundled-pi-extensions.ts","test:desktop-connection":"npx --yes tsx@4.23.1 scripts/smoke-desktop-connection.ts","test:desktop-deep-links":"npx --yes tsx@4.23.1 scripts/smoke-desktop-deep-links.ts","test:session-transcript":"npx --yes tsx@4.23.1 scripts/smoke-session-transcript.ts","test:auth-oauth-packages":"node --import tsx scripts/smoke-auth-oauth-packages.mjs","test:session-performance":"npx --yes tsx@4.23.1 scripts/smoke-session-performance.ts","test:desktop-observer-api":"npx --yes tsx@4.23.1 scripts/smoke-desktop-observer-api.ts","test:git-client-lifecycle":"npx --yes tsx@4.23.1 scripts/smoke-git-client-lifecycle.ts","test:git-read-performance":"npx --yes tsx@4.23.1 scripts/smoke-git-read-performance.ts","test:package-update-check":"npx --yes tsx@4.23.1 scripts/smoke-package-update-check.ts","generate:browser-extension":"tsx scripts/generate-browser-extension-shared.ts","test:desktop-quick-session":"npx --yes tsx@4.23.1 scripts/smoke-desktop-quick-session.ts","test:desktop-tauri-package":"node scripts/smoke-desktop-tauri-package.mjs","test:oauth-accounts-export":"node --import tsx scripts/smoke-oauth-accounts-export.mjs","test:desktop-tauri-contract":"npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-contract.ts && npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-view-parity.ts && node scripts/smoke-desktop-tauri-package.mjs && cargo test --manifest-path desktop-tauri/src-tauri/Cargo.toml","test:subagent-observability":"npx --yes tsx@4.23.1 scripts/smoke-subagent-observability.ts && node --import tsx scripts/smoke-subagent-progress.mjs && npx --yes tsx@4.23.1 scripts/smoke-subagent-session-runs.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail-route.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-store.ts","test:model-primary-candidates":"npx --yes tsx@4.23.1 scripts/smoke-model-primary-candidates.ts","test:desktop-tauri-view-parity":"npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-view-parity.ts","test:bundled-extensions:production":"node scripts/e2e-bundled-pi-extensions-production.mjs"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"overrides":{"@earendil-works/pi-ai":"0.85.1","@earendil-works/pi-tui":"0.85.1","@earendil-works/pi-agent-core":"0.85.1"},"repository":{"url":"git+https://github.com/twofive1203/pi-agnet-web.git","type":"git"},"_npmVersion":"9.6.6","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.3","diff":"^8.0.4","next":"16.2.12","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","typebox":"1.3.7","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","cron-parser":"^4.9.0","pi-ask-user":"0.13.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","jsonc-parser":"^3.3.1","pi-subagents":"0.40.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","pi-manage-todo-list":"0.4.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.85.1","react-syntax-highlighter":"^16.1.1","@juicesharp/rpiv-web-tools":"2.3.1","@earendil-works/pi-coding-agent":"0.85.1","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","eslint":"^9","esbuild":"^0.25.12","postcss":"^8","electron":"^43.4.0","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.12","@electron-forge/cli":"^7.11.2","@tailwindcss/postcss":"^4.2.2","@electron-forge/maker-squirrel":"^7.11.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.9.19_1789011237131_0.8311043377550589","host":"s3://npm-registry-packages-npm-production"}},"0.9.20":{"name":"@twofive/snail-pi-web","version":"0.9.20","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.9.20","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/twofive1203/pi-agnet-web#readme","bugs":{"url":"https://github.com/twofive1203/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"31ec70b742305a192bb46aca58ca2af5f641c77b","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.9.20.tgz","fileCount":1261,"integrity":"sha512-pd7G8YaG32RnkwokAC6SOefiK0ofyYwP448sFqDNo90gMCt+iMrS4uKs6hthwAzmu5LKo/JVxcjzHXg6+KRC3g==","signatures":[{"sig":"MEYCIQCeBRtYZ5X2Vg77gP3bm/heYZNc8pOoBp/TDvXJ+aLYLAIhAPVzAwqww5Yq/f/drdww4fBPz41i1RiK6u1A0WRzbD24","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37073135},"engines":{"node":">=22.19.0"},"gitHead":"007f5269de2d0b1f30b98d3bbfab309f85d00a89","scripts":{"dev":"node bin/pi-web.js --dev","lint":"eslint .","build":"node scripts/build-next.js","start":"node bin/pi-web.js","release":"npm run release:patch","test:mcp":"npx --yes tsx@4.23.1 scripts/smoke-mcp-config.ts","test:i18n":"npx --yes tsx@4.23.1 scripts/check-i18n-keys.ts","test:usage":"npx --yes tsx@4.23.1 scripts/smoke-usage-timeline.ts && npx --yes tsx@4.23.1 scripts/smoke-usage-subagents.ts","desktop:dev":"node scripts/run-desktop-pet.mjs","postinstall":"node scripts/patch-pi-subagents-stale-ctx.mjs","test:snflow":"npx --yes tsx@4.23.1 scripts/smoke-snflow-setup.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-store.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-session-link.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-snflow-spec-review.ts","test:vision":"npx --yes tsx@4.23.1 scripts/smoke-vision-resolver.ts","desktop:make":"node scripts/run-desktop-forge.mjs make","test:browser":"npx --yes tsx@4.23.1 scripts/generate-browser-extension-shared.ts && npx --yes tsx@4.23.1 scripts/smoke-browser-binding.ts && npx --yes tsx@4.23.1 scripts/smoke-chrome-extension-artifacts.ts","test:runtime":"npx --yes tsx@4.23.1 scripts/smoke-runtime-packaging.ts","desktop:build":"node scripts/build-desktop-pet.mjs","release:patch":"npm version patch && npm publish --access public","test:git-diff":"npx --yes tsx@4.23.1 scripts/smoke-git-diff.ts","test:ui-theme":"npx --yes tsx@4.23.1 scripts/smoke-ui-theme-contract.ts","prepublishOnly":"npm run lint && tsc --noEmit && npm run test:server-auth && npm run test:runtime && npm run build && npm run test:bundled-extensions:production && npm run test:npm-package && npm run test:server-auth:e2e","test:git-stash":"npx --yes tsx@4.23.1 scripts/smoke-git-stash.ts","desktop:package":"node scripts/run-desktop-forge.mjs package","desktop:preview":"node scripts/preview-desktop-pet-states.mjs","test:automation":"node scripts/run-automation-smokes.cjs","test:chat-draft":"npx --yes tsx@4.23.1 scripts/smoke-chat-draft.ts","test:cwd-browse":"npx --yes tsx@4.23.1 scripts/smoke-cwd-browse.ts","test:grok-usage":"node --import tsx scripts/smoke-grok-usage.mjs","test:chat-errors":"npx --yes tsx@4.23.1 scripts/smoke-chat-provider-errors.ts","test:file-search":"npx --yes tsx@4.23.1 scripts/smoke-workspace-file-search.ts","test:file-upload":"npx --yes tsx@4.23.1 scripts/smoke-file-upload.ts","test:npm-package":"node scripts/check-npm-package-size.mjs","test:open-folder":"npx --yes tsx@4.23.1 scripts/smoke-open-project-folder.ts","test:server-auth":"npx --yes tsx@4.23.1 scripts/smoke-server-access-auth.ts && npx --yes tsx@4.23.1 scripts/smoke-server-access-proxy.ts","desktop:tauri:dev":"npm --prefix desktop-tauri run dev","test:agent-stream":"node --import tsx scripts/smoke-agent-event-throttler.mjs && node --import tsx scripts/smoke-empty-completed-retry.mjs && npx --yes tsx@4.23.1 scripts/smoke-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-pi-session-lifecycle.ts","test:session-tabs":"npx --yes tsx@4.23.1 scripts/smoke-session-tab-coordination.ts","test:git-workbench":"npx --yes tsx@4.23.1 scripts/smoke-git-workbench.ts","test:model-default":"npx --yes tsx@4.23.1 scripts/smoke-model-default.ts","test:session-index":"npx --yes tsx@4.23.1 scripts/smoke-session-index.ts","test:session-stats":"npx --yes tsx@4.23.1 scripts/smoke-session-billing-stats.ts","test:task-observer":"npx --yes tsx@4.23.1 scripts/smoke-task-observer.ts","desktop:dev:rebuild":"node scripts/run-desktop-pet.mjs --rebuild","desktop:tauri:build":"npm --prefix desktop-tauri run build","test:api-protection":"npx --yes tsx@4.23.1 scripts/smoke-api-protection.ts","test:prompts-config":"npx --yes tsx@4.23.1 test/prompts-config.test.ts","test:quick-commands":"npx --yes tsx@4.23.1 scripts/smoke-quick-commands.ts","test:scale-baseline":"npx --yes tsx@4.23.1 scripts/smoke-scale-baseline.ts","test:session-search":"npx --yes tsx@4.23.1 scripts/smoke-session-search.ts","test:desktop-package":"node scripts/smoke-desktop-package.mjs","test:server-auth:e2e":"node scripts/e2e-server-access-auth.mjs","test:session-changes":"node --import tsx scripts/smoke-session-file-changes.mjs","test:desktop-contract":"npx --yes tsx@4.23.1 scripts/smoke-desktop-contract.ts","test:desktop-observer":"npm run test:task-observer && npm run test:desktop-observer-api && npm run test:desktop-deep-links && npm run test:desktop-connection && npm run test:desktop-contract && npm run test:desktop-package && npm run test:desktop-quick-session","test:git-repositories":"npx --yes tsx@4.23.1 scripts/smoke-git-repositories.ts","test:web-tools-config":"npx --yes tsx@4.23.1 scripts/smoke-web-tools-config.ts","desktop:tauri:build-ui":"node scripts/build-desktop-tauri.mjs","test:antigravity-usage":"node --import tsx scripts/smoke-antigravity-usage.mjs","test:commandcode-usage":"npx --yes tsx@4.23.1 scripts/smoke-commandcode-usage.ts","test:file-editor-state":"npx --yes tsx@4.23.1 scripts/smoke-file-editor-state.ts","test:file-preview-diff":"npx --yes tsx@4.23.1 scripts/smoke-file-preview-diff.ts","test:project-knowledge":"npx --yes tsx@4.23.1 scripts/smoke-project-knowledge.ts","test:bundled-extensions":"npx --yes tsx@4.23.1 scripts/smoke-bundled-pi-extensions.ts","test:desktop-connection":"npx --yes tsx@4.23.1 scripts/smoke-desktop-connection.ts","test:desktop-deep-links":"npx --yes tsx@4.23.1 scripts/smoke-desktop-deep-links.ts","test:session-transcript":"npx --yes tsx@4.23.1 scripts/smoke-session-transcript.ts","test:auth-oauth-packages":"node --import tsx scripts/smoke-auth-oauth-packages.mjs","test:model-extra-prompts":"npx --yes tsx@4.23.1 scripts/smoke-model-extra-prompts.ts","test:session-performance":"npx --yes tsx@4.23.1 scripts/smoke-session-performance.ts","test:desktop-observer-api":"npx --yes tsx@4.23.1 scripts/smoke-desktop-observer-api.ts","test:git-client-lifecycle":"npx --yes tsx@4.23.1 scripts/smoke-git-client-lifecycle.ts","test:git-read-performance":"npx --yes tsx@4.23.1 scripts/smoke-git-read-performance.ts","test:package-update-check":"npx --yes tsx@4.23.1 scripts/smoke-package-update-check.ts","generate:browser-extension":"tsx scripts/generate-browser-extension-shared.ts","test:desktop-quick-session":"npx --yes tsx@4.23.1 scripts/smoke-desktop-quick-session.ts","test:desktop-tauri-package":"node scripts/smoke-desktop-tauri-package.mjs","test:model-session-restore":"npx --yes tsx@4.23.1 scripts/smoke-session-model-restore.ts","test:oauth-accounts-export":"node --import tsx scripts/smoke-oauth-accounts-export.mjs","test:desktop-tauri-contract":"npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-contract.ts && npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-view-parity.ts && node scripts/smoke-desktop-tauri-package.mjs && cargo test --manifest-path desktop-tauri/src-tauri/Cargo.toml","test:subagent-observability":"npx --yes tsx@4.23.1 scripts/smoke-subagent-observability.ts && node --import tsx scripts/smoke-subagent-progress.mjs && npx --yes tsx@4.23.1 scripts/smoke-subagent-session-runs.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail-route.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-store.ts","test:model-primary-candidates":"npx --yes tsx@4.23.1 scripts/smoke-model-primary-candidates.ts","test:desktop-tauri-view-parity":"npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-view-parity.ts","test:bundled-extensions:production":"node scripts/e2e-bundled-pi-extensions-production.mjs"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"overrides":{"@earendil-works/pi-ai":"0.85.1","@earendil-works/pi-tui":"0.85.1","@earendil-works/pi-agent-core":"0.85.1"},"repository":{"url":"git+https://github.com/twofive1203/pi-agnet-web.git","type":"git"},"_npmVersion":"9.6.6","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.3","diff":"^8.0.4","next":"16.2.12","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","typebox":"1.3.7","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","cron-parser":"^4.9.0","pi-ask-user":"0.13.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","jsonc-parser":"^3.3.1","pi-subagents":"0.40.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","pi-antigravity":"0.7.2","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","pi-manage-todo-list":"0.4.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.85.1","pi-commandcode-provider":"0.6.4","react-syntax-highlighter":"^16.1.1","@juicesharp/rpiv-web-tools":"2.3.1","@earendil-works/pi-coding-agent":"0.85.1","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","eslint":"^9","esbuild":"^0.25.12","postcss":"^8","electron":"^43.4.0","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.12","@electron-forge/cli":"^7.11.2","@tailwindcss/postcss":"^4.2.2","@electron-forge/maker-squirrel":"^7.11.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.9.20_1789114430235_0.766346321511215","host":"s3://npm-registry-packages-npm-production"}},"0.9.21":{"name":"@twofive/snail-pi-web","version":"0.9.21","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.9.21","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/twofive1203/pi-agnet-web#readme","bugs":{"url":"https://github.com/twofive1203/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"400f8f0b6d1723ed5f55d828560a64680e529a22","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.9.21.tgz","fileCount":1263,"integrity":"sha512-q/4mnpnpIfm0G0X4p93Ml6mBXTOun7Y3x2lGVlNF7yn4d/m+/IVkDk2yWSp0akv+6/Ukfxis/JGR0Wu5fOxqnA==","signatures":[{"sig":"MEQCIDmULhKjw9sS3RVDAXYATA4OYRaYFCKwmRt1o594cPLQAiABRAnlfJLUIXmc6gUdu/XUnGvOlGSZi0fHFbm525WNUg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37134430},"engines":{"node":">=22.19.0"},"gitHead":"00240cc33cffb0aa2f1b4ff7c8df8b7058343851","scripts":{"dev":"node bin/pi-web.js --dev","lint":"eslint .","build":"node scripts/build-next.js","start":"node bin/pi-web.js","release":"npm run release:patch","test:mcp":"npx --yes tsx@4.23.1 scripts/smoke-mcp-config.ts","test:i18n":"npx --yes tsx@4.23.1 scripts/check-i18n-keys.ts","test:usage":"npx --yes tsx@4.23.1 scripts/smoke-usage-timeline.ts && npx --yes tsx@4.23.1 scripts/smoke-usage-subagents.ts","desktop:dev":"node scripts/run-desktop-pet.mjs","postinstall":"node scripts/patch-pi-subagents-stale-ctx.mjs && node scripts/patch-pi-commandcode-cache-race.mjs","test:snflow":"npx --yes tsx@4.23.1 scripts/smoke-snflow-setup.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-store.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-session-link.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-snflow-spec-review.ts","test:vision":"npx --yes tsx@4.23.1 scripts/smoke-vision-resolver.ts","desktop:make":"node scripts/run-desktop-forge.mjs make","test:browser":"npx --yes tsx@4.23.1 scripts/generate-browser-extension-shared.ts && npx --yes tsx@4.23.1 scripts/smoke-browser-binding.ts && npx --yes tsx@4.23.1 scripts/smoke-chrome-extension-artifacts.ts","test:runtime":"npx --yes tsx@4.23.1 scripts/smoke-runtime-packaging.ts","desktop:build":"node scripts/build-desktop-pet.mjs","release:patch":"npm version patch && npm publish --access public","test:git-diff":"npx --yes tsx@4.23.1 scripts/smoke-git-diff.ts","test:ui-theme":"npx --yes tsx@4.23.1 scripts/smoke-ui-theme-contract.ts","prepublishOnly":"npm run lint && tsc --noEmit && npm run test:server-auth && npm run test:runtime && npm run build && npm run test:bundled-extensions:production && npm run test:npm-package && npm run test:server-auth:e2e","test:git-stash":"npx --yes tsx@4.23.1 scripts/smoke-git-stash.ts","desktop:package":"node scripts/run-desktop-forge.mjs package","desktop:preview":"node scripts/preview-desktop-pet-states.mjs","test:automation":"node scripts/run-automation-smokes.cjs","test:chat-draft":"npx --yes tsx@4.23.1 scripts/smoke-chat-draft.ts","test:cwd-browse":"npx --yes tsx@4.23.1 scripts/smoke-cwd-browse.ts","test:grok-usage":"node --import tsx scripts/smoke-grok-usage.mjs","test:chat-errors":"npx --yes tsx@4.23.1 scripts/smoke-chat-provider-errors.ts","test:file-search":"npx --yes tsx@4.23.1 scripts/smoke-workspace-file-search.ts","test:file-upload":"npx --yes tsx@4.23.1 scripts/smoke-file-upload.ts","test:npm-package":"node scripts/check-npm-package-size.mjs","test:open-folder":"npx --yes tsx@4.23.1 scripts/smoke-open-project-folder.ts","test:server-auth":"npx --yes tsx@4.23.1 scripts/smoke-server-access-auth.ts && npx --yes tsx@4.23.1 scripts/smoke-server-access-proxy.ts","desktop:tauri:dev":"npm --prefix desktop-tauri run dev","test:agent-stream":"node --import tsx scripts/smoke-agent-event-throttler.mjs && node --import tsx scripts/smoke-empty-completed-retry.mjs && npx --yes tsx@4.23.1 scripts/smoke-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-pi-session-lifecycle.ts","test:session-tabs":"npx --yes tsx@4.23.1 scripts/smoke-session-tab-coordination.ts","test:git-workbench":"npx --yes tsx@4.23.1 scripts/smoke-git-workbench.ts","test:model-default":"npx --yes tsx@4.23.1 scripts/smoke-model-default.ts","test:session-index":"npx --yes tsx@4.23.1 scripts/smoke-session-index.ts","test:session-stats":"npx --yes tsx@4.23.1 scripts/smoke-session-billing-stats.ts","test:task-observer":"npx --yes tsx@4.23.1 scripts/smoke-task-observer.ts","desktop:dev:rebuild":"node scripts/run-desktop-pet.mjs --rebuild","desktop:tauri:build":"npm --prefix desktop-tauri run build","test:api-protection":"npx --yes tsx@4.23.1 scripts/smoke-api-protection.ts","test:prompts-config":"npx --yes tsx@4.23.1 test/prompts-config.test.ts","test:quick-commands":"npx --yes tsx@4.23.1 scripts/smoke-quick-commands.ts","test:scale-baseline":"npx --yes tsx@4.23.1 scripts/smoke-scale-baseline.ts","test:session-search":"npx --yes tsx@4.23.1 scripts/smoke-session-search.ts","test:desktop-package":"node scripts/smoke-desktop-package.mjs","test:server-auth:e2e":"node scripts/e2e-server-access-auth.mjs","test:session-changes":"node --import tsx scripts/smoke-session-file-changes.mjs","test:desktop-contract":"npx --yes tsx@4.23.1 scripts/smoke-desktop-contract.ts","test:desktop-observer":"npm run test:task-observer && npm run test:desktop-observer-api && npm run test:desktop-deep-links && npm run test:desktop-connection && npm run test:desktop-contract && npm run test:desktop-package && npm run test:desktop-quick-session","test:git-repositories":"npx --yes tsx@4.23.1 scripts/smoke-git-repositories.ts","test:web-tools-config":"npx --yes tsx@4.23.1 scripts/smoke-web-tools-config.ts","desktop:tauri:build-ui":"node scripts/build-desktop-tauri.mjs","test:antigravity-usage":"node --import tsx scripts/smoke-antigravity-usage.mjs","test:commandcode-usage":"npx --yes tsx@4.23.1 scripts/smoke-commandcode-usage.ts","test:file-editor-state":"npx --yes tsx@4.23.1 scripts/smoke-file-editor-state.ts","test:file-preview-diff":"npx --yes tsx@4.23.1 scripts/smoke-file-preview-diff.ts","test:project-knowledge":"npx --yes tsx@4.23.1 scripts/smoke-project-knowledge.ts","test:bundled-extensions":"npx --yes tsx@4.23.1 scripts/smoke-bundled-pi-extensions.ts","test:desktop-connection":"npx --yes tsx@4.23.1 scripts/smoke-desktop-connection.ts","test:desktop-deep-links":"npx --yes tsx@4.23.1 scripts/smoke-desktop-deep-links.ts","test:session-transcript":"npx --yes tsx@4.23.1 scripts/smoke-session-transcript.ts","test:auth-oauth-packages":"node --import tsx scripts/smoke-auth-oauth-packages.mjs","test:model-extra-prompts":"npx --yes tsx@4.23.1 scripts/smoke-model-extra-prompts.ts","test:session-performance":"npx --yes tsx@4.23.1 scripts/smoke-session-performance.ts","test:desktop-observer-api":"npx --yes tsx@4.23.1 scripts/smoke-desktop-observer-api.ts","test:git-client-lifecycle":"npx --yes tsx@4.23.1 scripts/smoke-git-client-lifecycle.ts","test:git-read-performance":"npx --yes tsx@4.23.1 scripts/smoke-git-read-performance.ts","test:package-update-check":"npx --yes tsx@4.23.1 scripts/smoke-package-update-check.ts","generate:browser-extension":"tsx scripts/generate-browser-extension-shared.ts","test:desktop-quick-session":"npx --yes tsx@4.23.1 scripts/smoke-desktop-quick-session.ts","test:desktop-tauri-package":"node scripts/smoke-desktop-tauri-package.mjs","test:model-session-restore":"npx --yes tsx@4.23.1 scripts/smoke-session-model-restore.ts","test:oauth-accounts-export":"node --import tsx scripts/smoke-oauth-accounts-export.mjs","test:desktop-tauri-contract":"npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-contract.ts && npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-view-parity.ts && node scripts/smoke-desktop-tauri-package.mjs && cargo test --manifest-path desktop-tauri/src-tauri/Cargo.toml","test:subagent-observability":"npx --yes tsx@4.23.1 scripts/smoke-subagent-observability.ts && node --import tsx scripts/smoke-subagent-progress.mjs && npx --yes tsx@4.23.1 scripts/smoke-subagent-session-runs.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail-route.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-store.ts","test:model-primary-candidates":"npx --yes tsx@4.23.1 scripts/smoke-model-primary-candidates.ts","test:desktop-tauri-view-parity":"npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-view-parity.ts","test:bundled-extensions:production":"node scripts/e2e-bundled-pi-extensions-production.mjs"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"overrides":{"@earendil-works/pi-ai":"0.85.1","@earendil-works/pi-tui":"0.85.1","@earendil-works/pi-agent-core":"0.85.1"},"repository":{"url":"git+https://github.com/twofive1203/pi-agnet-web.git","type":"git"},"_npmVersion":"9.6.6","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.3","diff":"^8.0.4","next":"16.2.12","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","typebox":"1.3.7","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","cron-parser":"^4.9.0","pi-ask-user":"0.13.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","jsonc-parser":"^3.3.1","pi-subagents":"0.40.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","pi-antigravity":"0.7.2","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","pi-manage-todo-list":"0.4.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.85.1","pi-commandcode-provider":"0.6.4","react-syntax-highlighter":"^16.1.1","@juicesharp/rpiv-web-tools":"2.3.1","@earendil-works/pi-coding-agent":"0.85.1","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","eslint":"^9","esbuild":"^0.25.12","postcss":"^8","electron":"^43.4.0","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.12","@electron-forge/cli":"^7.11.2","@tailwindcss/postcss":"^4.2.2","@electron-forge/maker-squirrel":"^7.11.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.9.21_1789126926883_0.2389314386763739","host":"s3://npm-registry-packages-npm-production"}},"0.9.22":{"name":"@twofive/snail-pi-web","version":"0.9.22","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.9.22","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/twofive1203/pi-agnet-web#readme","bugs":{"url":"https://github.com/twofive1203/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"838290fde0197841c597382e06e2e039c7e64779","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.9.22.tgz","fileCount":1264,"integrity":"sha512-yH+3b330WlYc4Z46UuAqf56UR3+ZJj+cVr1PDt/FXrK5cSJr6LgWHfHYTBiq3CBsbKDgdSy2CARjFcpcHxf9KQ==","signatures":[{"sig":"MEYCIQCh6LQBl9wqdAwt67SxV7AK9sKZVNnDCwhLPcULhVaarQIhAJ6kOC5MsZfUFslsI0Xd/NUYe3oQFTCCQdmxTPmE66YH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37137905},"engines":{"node":">=22.19.0"},"gitHead":"e6ca37822ae40cd1442520acbb822cfb3943c81d","scripts":{"dev":"node bin/pi-web.js --dev","lint":"eslint .","build":"node scripts/build-next.js","start":"node bin/pi-web.js","release":"npm run release:patch","test:mcp":"npx --yes tsx@4.23.1 scripts/smoke-mcp-config.ts","test:i18n":"npx --yes tsx@4.23.1 scripts/check-i18n-keys.ts","test:usage":"npx --yes tsx@4.23.1 scripts/smoke-usage-timeline.ts && npx --yes tsx@4.23.1 scripts/smoke-usage-subagents.ts","desktop:dev":"node scripts/run-desktop-pet.mjs","postinstall":"node scripts/patch-pi-subagents-stale-ctx.mjs && node scripts/patch-pi-commandcode-cache-race.mjs && node scripts/patch-pi-commandcode-model-capabilities.mjs","test:snflow":"npx --yes tsx@4.23.1 scripts/smoke-snflow-setup.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-store.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-session-link.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-snflow-spec-review.ts","test:vision":"npx --yes tsx@4.23.1 scripts/smoke-vision-resolver.ts","desktop:make":"node scripts/run-desktop-forge.mjs make","test:browser":"npx --yes tsx@4.23.1 scripts/generate-browser-extension-shared.ts && npx --yes tsx@4.23.1 scripts/smoke-browser-binding.ts && npx --yes tsx@4.23.1 scripts/smoke-chrome-extension-artifacts.ts","test:runtime":"npx --yes tsx@4.23.1 scripts/smoke-runtime-packaging.ts","desktop:build":"node scripts/build-desktop-pet.mjs","release:patch":"npm version patch && npm publish --access public","test:git-diff":"npx --yes tsx@4.23.1 scripts/smoke-git-diff.ts","test:ui-theme":"npx --yes tsx@4.23.1 scripts/smoke-ui-theme-contract.ts","prepublishOnly":"npm run lint && tsc --noEmit && npm run test:server-auth && npm run test:runtime && npm run build && npm run test:bundled-extensions:production && npm run test:npm-package && npm run test:server-auth:e2e","test:git-stash":"npx --yes tsx@4.23.1 scripts/smoke-git-stash.ts","desktop:package":"node scripts/run-desktop-forge.mjs package","desktop:preview":"node scripts/preview-desktop-pet-states.mjs","test:automation":"node scripts/run-automation-smokes.cjs","test:chat-draft":"npx --yes tsx@4.23.1 scripts/smoke-chat-draft.ts","test:cwd-browse":"npx --yes tsx@4.23.1 scripts/smoke-cwd-browse.ts","test:grok-usage":"node --import tsx scripts/smoke-grok-usage.mjs","test:chat-errors":"npx --yes tsx@4.23.1 scripts/smoke-chat-provider-errors.ts","test:file-search":"npx --yes tsx@4.23.1 scripts/smoke-workspace-file-search.ts","test:file-upload":"npx --yes tsx@4.23.1 scripts/smoke-file-upload.ts","test:npm-package":"node scripts/check-npm-package-size.mjs","test:open-folder":"npx --yes tsx@4.23.1 scripts/smoke-open-project-folder.ts","test:server-auth":"npx --yes tsx@4.23.1 scripts/smoke-server-access-auth.ts && npx --yes tsx@4.23.1 scripts/smoke-server-access-proxy.ts","desktop:tauri:dev":"npm --prefix desktop-tauri run dev","test:agent-stream":"node --import tsx scripts/smoke-agent-event-throttler.mjs && node --import tsx scripts/smoke-empty-completed-retry.mjs && npx --yes tsx@4.23.1 scripts/smoke-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-pi-session-lifecycle.ts","test:session-tabs":"npx --yes tsx@4.23.1 scripts/smoke-session-tab-coordination.ts","test:git-workbench":"npx --yes tsx@4.23.1 scripts/smoke-git-workbench.ts","test:model-default":"npx --yes tsx@4.23.1 scripts/smoke-model-default.ts","test:session-index":"npx --yes tsx@4.23.1 scripts/smoke-session-index.ts","test:session-stats":"npx --yes tsx@4.23.1 scripts/smoke-session-billing-stats.ts","test:task-observer":"npx --yes tsx@4.23.1 scripts/smoke-task-observer.ts","desktop:dev:rebuild":"node scripts/run-desktop-pet.mjs --rebuild","desktop:tauri:build":"npm --prefix desktop-tauri run build","test:api-protection":"npx --yes tsx@4.23.1 scripts/smoke-api-protection.ts","test:prompts-config":"npx --yes tsx@4.23.1 test/prompts-config.test.ts","test:quick-commands":"npx --yes tsx@4.23.1 scripts/smoke-quick-commands.ts","test:scale-baseline":"npx --yes tsx@4.23.1 scripts/smoke-scale-baseline.ts","test:session-search":"npx --yes tsx@4.23.1 scripts/smoke-session-search.ts","test:desktop-package":"node scripts/smoke-desktop-package.mjs","test:server-auth:e2e":"node scripts/e2e-server-access-auth.mjs","test:session-changes":"node --import tsx scripts/smoke-session-file-changes.mjs","test:desktop-contract":"npx --yes tsx@4.23.1 scripts/smoke-desktop-contract.ts","test:desktop-observer":"npm run test:task-observer && npm run test:desktop-observer-api && npm run test:desktop-deep-links && npm run test:desktop-connection && npm run test:desktop-contract && npm run test:desktop-package && npm run test:desktop-quick-session","test:git-repositories":"npx --yes tsx@4.23.1 scripts/smoke-git-repositories.ts","test:web-tools-config":"npx --yes tsx@4.23.1 scripts/smoke-web-tools-config.ts","desktop:tauri:build-ui":"node scripts/build-desktop-tauri.mjs","test:antigravity-usage":"node --import tsx scripts/smoke-antigravity-usage.mjs","test:commandcode-usage":"npx --yes tsx@4.23.1 scripts/smoke-commandcode-usage.ts","test:file-editor-state":"npx --yes tsx@4.23.1 scripts/smoke-file-editor-state.ts","test:file-preview-diff":"npx --yes tsx@4.23.1 scripts/smoke-file-preview-diff.ts","test:project-knowledge":"npx --yes tsx@4.23.1 scripts/smoke-project-knowledge.ts","test:bundled-extensions":"npx --yes tsx@4.23.1 scripts/smoke-bundled-pi-extensions.ts","test:desktop-connection":"npx --yes tsx@4.23.1 scripts/smoke-desktop-connection.ts","test:desktop-deep-links":"npx --yes tsx@4.23.1 scripts/smoke-desktop-deep-links.ts","test:session-transcript":"npx --yes tsx@4.23.1 scripts/smoke-session-transcript.ts","test:auth-oauth-packages":"node --import tsx scripts/smoke-auth-oauth-packages.mjs","test:model-extra-prompts":"npx --yes tsx@4.23.1 scripts/smoke-model-extra-prompts.ts","test:session-performance":"npx --yes tsx@4.23.1 scripts/smoke-session-performance.ts","test:desktop-observer-api":"npx --yes tsx@4.23.1 scripts/smoke-desktop-observer-api.ts","test:git-client-lifecycle":"npx --yes tsx@4.23.1 scripts/smoke-git-client-lifecycle.ts","test:git-read-performance":"npx --yes tsx@4.23.1 scripts/smoke-git-read-performance.ts","test:package-update-check":"npx --yes tsx@4.23.1 scripts/smoke-package-update-check.ts","generate:browser-extension":"tsx scripts/generate-browser-extension-shared.ts","test:desktop-quick-session":"npx --yes tsx@4.23.1 scripts/smoke-desktop-quick-session.ts","test:desktop-tauri-package":"node scripts/smoke-desktop-tauri-package.mjs","test:model-session-restore":"npx --yes tsx@4.23.1 scripts/smoke-session-model-restore.ts","test:oauth-accounts-export":"node --import tsx scripts/smoke-oauth-accounts-export.mjs","test:desktop-tauri-contract":"npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-contract.ts && npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-view-parity.ts && node scripts/smoke-desktop-tauri-package.mjs && cargo test --manifest-path desktop-tauri/src-tauri/Cargo.toml","test:subagent-observability":"npx --yes tsx@4.23.1 scripts/smoke-subagent-observability.ts && node --import tsx scripts/smoke-subagent-progress.mjs && npx --yes tsx@4.23.1 scripts/smoke-subagent-session-runs.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail-route.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-store.ts","test:model-primary-candidates":"npx --yes tsx@4.23.1 scripts/smoke-model-primary-candidates.ts","test:desktop-tauri-view-parity":"npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-view-parity.ts","test:bundled-extensions:production":"node scripts/e2e-bundled-pi-extensions-production.mjs"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"overrides":{"@earendil-works/pi-ai":"0.85.1","@earendil-works/pi-tui":"0.85.1","@earendil-works/pi-agent-core":"0.85.1"},"repository":{"url":"git+https://github.com/twofive1203/pi-agnet-web.git","type":"git"},"_npmVersion":"9.6.6","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.3","diff":"^8.0.4","next":"16.2.12","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","typebox":"1.3.7","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","cron-parser":"^4.9.0","pi-ask-user":"0.13.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","jsonc-parser":"^3.3.1","pi-subagents":"0.40.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","pi-antigravity":"0.7.2","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","pi-manage-todo-list":"0.4.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.85.1","pi-commandcode-provider":"0.6.4","react-syntax-highlighter":"^16.1.1","@juicesharp/rpiv-web-tools":"2.3.1","@earendil-works/pi-coding-agent":"0.85.1","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","eslint":"^9","esbuild":"^0.25.12","postcss":"^8","electron":"^43.4.0","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.12","@electron-forge/cli":"^7.11.2","@tailwindcss/postcss":"^4.2.2","@electron-forge/maker-squirrel":"^7.11.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.9.22_1789281492809_0.4121861327836185","host":"s3://npm-registry-packages-npm-production"}},"0.9.23":{"name":"@twofive/snail-pi-web","version":"0.9.23","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.9.23","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/twofive1203/pi-agnet-web#readme","bugs":{"url":"https://github.com/twofive1203/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"e3e59871676d71970bc2daef8369a4a857b2d04d","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.9.23.tgz","fileCount":1265,"integrity":"sha512-npfIOBbh0bo71YqF8+6bQ9D9t24yU/IVyUuEMwQjeOfCLMfSolPslEzGyDRK1huu9Gqz5tXGji2T6E1Yn1/r0w==","signatures":[{"sig":"MEUCIDNO5MDAcfltR4fyEUYCVsn109Rvke9naP58bDVdTs/ZAiEAwmn3g2x/nAdKN6BpYyY7VMhs6b1NyXxlyj89IdWgH/M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDwvd/a+q42BmNosCJGb5KMAg9WiZkyLdh60wAL2PeyrQIhAKNK3z44iOM1LV8g2wJ0PPT7LXmHFskYddKQEcEx0E7k","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37165751},"engines":{"node":">=22.19.0"},"gitHead":"4a38529ee516808cc2a93681bb40590e6a591b3d","scripts":{"dev":"node bin/pi-web.js --dev","lint":"eslint .","build":"node scripts/build-next.js","start":"node bin/pi-web.js","release":"npm run release:patch","test:mcp":"npx --yes tsx@4.23.1 scripts/smoke-mcp-config.ts","test:i18n":"npx --yes tsx@4.23.1 scripts/check-i18n-keys.ts","test:usage":"npx --yes tsx@4.23.1 scripts/smoke-usage-timeline.ts && npx --yes tsx@4.23.1 scripts/smoke-usage-subagents.ts","desktop:dev":"node scripts/run-desktop-pet.mjs","postinstall":"node scripts/patch-pi-subagents-stale-ctx.mjs && node scripts/patch-pi-commandcode-cache-race.mjs && node scripts/patch-pi-commandcode-model-capabilities.mjs","test:snflow":"npx --yes tsx@4.23.1 scripts/smoke-snflow-setup.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-store.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-session-link.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-snflow-spec-review.ts","test:vision":"npx --yes tsx@4.23.1 scripts/smoke-vision-resolver.ts","desktop:make":"node scripts/run-desktop-forge.mjs make","test:browser":"npx --yes tsx@4.23.1 scripts/generate-browser-extension-shared.ts && npx --yes tsx@4.23.1 scripts/smoke-browser-binding.ts && npx --yes tsx@4.23.1 scripts/smoke-chrome-extension-artifacts.ts","test:runtime":"npx --yes tsx@4.23.1 scripts/smoke-runtime-packaging.ts","desktop:build":"node scripts/build-desktop-pet.mjs","release:patch":"npm version patch && npm publish --access public","test:git-diff":"npx --yes tsx@4.23.1 scripts/smoke-git-diff.ts","test:ui-theme":"npx --yes tsx@4.23.1 scripts/smoke-ui-theme-contract.ts","prepublishOnly":"npm run lint && tsc --noEmit && npm run test:server-auth && npm run test:runtime && npm run build && npm run test:bundled-extensions:production && npm run test:npm-package && npm run test:server-auth:e2e","test:git-stash":"npx --yes tsx@4.23.1 scripts/smoke-git-stash.ts","desktop:package":"node scripts/run-desktop-forge.mjs package","desktop:preview":"node scripts/preview-desktop-pet-states.mjs","test:automation":"node scripts/run-automation-smokes.cjs","test:chat-draft":"npx --yes tsx@4.23.1 scripts/smoke-chat-draft.ts","test:cwd-browse":"npx --yes tsx@4.23.1 scripts/smoke-cwd-browse.ts","test:grok-usage":"node --import tsx scripts/smoke-grok-usage.mjs","test:chat-errors":"npx --yes tsx@4.23.1 scripts/smoke-chat-provider-errors.ts","test:file-search":"npx --yes tsx@4.23.1 scripts/smoke-workspace-file-search.ts","test:file-upload":"npx --yes tsx@4.23.1 scripts/smoke-file-upload.ts","test:npm-package":"node scripts/check-npm-package-size.mjs","test:open-folder":"npx --yes tsx@4.23.1 scripts/smoke-open-project-folder.ts","test:server-auth":"npx --yes tsx@4.23.1 scripts/smoke-server-access-auth.ts && npx --yes tsx@4.23.1 scripts/smoke-server-access-proxy.ts","desktop:tauri:dev":"npm --prefix desktop-tauri run dev","test:agent-stream":"node --import tsx scripts/smoke-agent-event-throttler.mjs && node --import tsx scripts/smoke-empty-completed-retry.mjs && npx --yes tsx@4.23.1 scripts/smoke-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-pi-session-lifecycle.ts","test:session-tabs":"npx --yes tsx@4.23.1 scripts/smoke-session-tab-coordination.ts","test:git-workbench":"npx --yes tsx@4.23.1 scripts/smoke-git-workbench.ts","test:model-default":"npx --yes tsx@4.23.1 scripts/smoke-model-default.ts","test:session-index":"npx --yes tsx@4.23.1 scripts/smoke-session-index.ts","test:session-stats":"npx --yes tsx@4.23.1 scripts/smoke-session-billing-stats.ts","test:task-observer":"npx --yes tsx@4.23.1 scripts/smoke-task-observer.ts","desktop:dev:rebuild":"node scripts/run-desktop-pet.mjs --rebuild","desktop:tauri:build":"npm --prefix desktop-tauri run build","test:api-protection":"npx --yes tsx@4.23.1 scripts/smoke-api-protection.ts","test:prompts-config":"npx --yes tsx@4.23.1 test/prompts-config.test.ts","test:quick-commands":"npx --yes tsx@4.23.1 scripts/smoke-quick-commands.ts","test:scale-baseline":"npx --yes tsx@4.23.1 scripts/smoke-scale-baseline.ts","test:session-search":"npx --yes tsx@4.23.1 scripts/smoke-session-search.ts","test:desktop-package":"node scripts/smoke-desktop-package.mjs","test:model-overrides":"npx --yes tsx@4.23.1 scripts/smoke-model-overrides.ts","test:server-auth:e2e":"node scripts/e2e-server-access-auth.mjs","test:session-changes":"node --import tsx scripts/smoke-session-file-changes.mjs","test:desktop-contract":"npx --yes tsx@4.23.1 scripts/smoke-desktop-contract.ts","test:desktop-observer":"npm run test:task-observer && npm run test:desktop-observer-api && npm run test:desktop-deep-links && npm run test:desktop-connection && npm run test:desktop-contract && npm run test:desktop-package && npm run test:desktop-quick-session","test:git-repositories":"npx --yes tsx@4.23.1 scripts/smoke-git-repositories.ts","test:web-tools-config":"npx --yes tsx@4.23.1 scripts/smoke-web-tools-config.ts","desktop:tauri:build-ui":"node scripts/build-desktop-tauri.mjs","test:antigravity-usage":"node --import tsx scripts/smoke-antigravity-usage.mjs","test:commandcode-usage":"npx --yes tsx@4.23.1 scripts/smoke-commandcode-usage.ts","test:file-editor-state":"npx --yes tsx@4.23.1 scripts/smoke-file-editor-state.ts","test:file-preview-diff":"npx --yes tsx@4.23.1 scripts/smoke-file-preview-diff.ts","test:project-knowledge":"npx --yes tsx@4.23.1 scripts/smoke-project-knowledge.ts","test:bundled-extensions":"npx --yes tsx@4.23.1 scripts/smoke-bundled-pi-extensions.ts","test:desktop-connection":"npx --yes tsx@4.23.1 scripts/smoke-desktop-connection.ts","test:desktop-deep-links":"npx --yes tsx@4.23.1 scripts/smoke-desktop-deep-links.ts","test:session-transcript":"npx --yes tsx@4.23.1 scripts/smoke-session-transcript.ts","test:auth-oauth-packages":"node --import tsx scripts/smoke-auth-oauth-packages.mjs","test:model-extra-prompts":"npx --yes tsx@4.23.1 scripts/smoke-model-extra-prompts.ts","test:provider-model-cost":"npx --yes tsx@4.23.1 scripts/smoke-provider-model-cost.ts","test:session-performance":"npx --yes tsx@4.23.1 scripts/smoke-session-performance.ts","test:desktop-observer-api":"npx --yes tsx@4.23.1 scripts/smoke-desktop-observer-api.ts","test:git-client-lifecycle":"npx --yes tsx@4.23.1 scripts/smoke-git-client-lifecycle.ts","test:git-read-performance":"npx --yes tsx@4.23.1 scripts/smoke-git-read-performance.ts","test:package-update-check":"npx --yes tsx@4.23.1 scripts/smoke-package-update-check.ts","generate:browser-extension":"tsx scripts/generate-browser-extension-shared.ts","test:desktop-quick-session":"npx --yes tsx@4.23.1 scripts/smoke-desktop-quick-session.ts","test:desktop-tauri-package":"node scripts/smoke-desktop-tauri-package.mjs","test:model-session-restore":"npx --yes tsx@4.23.1 scripts/smoke-session-model-restore.ts","test:oauth-accounts-export":"node --import tsx scripts/smoke-oauth-accounts-export.mjs","test:desktop-tauri-contract":"npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-contract.ts && npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-view-parity.ts && node scripts/smoke-desktop-tauri-package.mjs && cargo test --manifest-path desktop-tauri/src-tauri/Cargo.toml","test:subagent-observability":"npx --yes tsx@4.23.1 scripts/smoke-subagent-observability.ts && node --import tsx scripts/smoke-subagent-progress.mjs && npx --yes tsx@4.23.1 scripts/smoke-subagent-session-runs.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail-route.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-store.ts","test:model-primary-candidates":"npx --yes tsx@4.23.1 scripts/smoke-model-primary-candidates.ts","test:desktop-tauri-view-parity":"npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-view-parity.ts","test:bundled-extensions:production":"node scripts/e2e-bundled-pi-extensions-production.mjs"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"overrides":{"@earendil-works/pi-ai":"0.85.1","@earendil-works/pi-tui":"0.85.1","@earendil-works/pi-agent-core":"0.85.1"},"repository":{"url":"git+https://github.com/twofive1203/pi-agnet-web.git","type":"git"},"_npmVersion":"9.6.6","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.3","diff":"^8.0.4","next":"16.2.12","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","typebox":"1.3.7","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","cron-parser":"^4.9.0","pi-ask-user":"0.13.1","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","jsonc-parser":"^3.3.1","pi-subagents":"0.40.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","pi-antigravity":"0.7.2","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","pi-manage-todo-list":"0.4.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.85.1","pi-commandcode-provider":"0.6.4","react-syntax-highlighter":"^16.1.1","@juicesharp/rpiv-web-tools":"2.3.1","@earendil-works/pi-coding-agent":"0.85.1","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","eslint":"^9","esbuild":"^0.25.12","postcss":"^8","electron":"^43.4.0","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.12","@electron-forge/cli":"^7.11.2","@tailwindcss/postcss":"^4.2.2","@electron-forge/maker-squirrel":"^7.11.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.9.23_1789452041704_0.3169099136528486","host":"s3://npm-registry-packages-npm-production"}},"0.9.24":{"name":"@twofive/snail-pi-web","version":"0.9.24","keywords":["pi","coding-agent","webchat","agent","nextjs"],"license":"MIT","_id":"@twofive/snail-pi-web@0.9.24","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"homepage":"https://github.com/twofive1203/pi-agnet-web#readme","bugs":{"url":"https://github.com/twofive1203/pi-agnet-web/issues"},"bin":{"spi":"bin/pi-web.js"},"dist":{"shasum":"48cb8e711f4154c4ad3f43f5973ce8846b138422","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.9.24.tgz","fileCount":1274,"integrity":"sha512-2PnGZm9Oegg0fr5UTpw4LTULg4eow4xC+p9yHxCvEKkUn5Jgp8ocwGmlY1zWf1KXuovADnMR3l5tBPoHf4NI9w==","signatures":[{"sig":"MEUCIHPNxUd1+Z8c1g9wkKNJDDUXsiAzzWEGQYiSxmvEdE/lAiEAz2CkQ0CFse0Ic46u53zKnaaV8CZwoBhZTzjlfQWtLyk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC7VEnfRWJZqqiGNYWTKC1YpOB+GeREPlFjCPmIRpEvfAIgZvkKT2uIxzEn8Bdy0MBF43ooPVTNRnoBb9qu29iSFr4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37272984},"engines":{"node":">=22.19.0"},"gitHead":"39748f9dfa3bfd953bf1e7c4a03554c4c0d5c114","scripts":{"dev":"node bin/pi-web.js --dev","lint":"eslint .","build":"node scripts/build-next.js","start":"node bin/pi-web.js","release":"npm run release:patch","test:mcp":"npx --yes tsx@4.23.1 scripts/smoke-mcp-config.ts","test:i18n":"npx --yes tsx@4.23.1 scripts/check-i18n-keys.ts","test:usage":"npx --yes tsx@4.23.1 scripts/smoke-usage-timeline.ts && npx --yes tsx@4.23.1 scripts/smoke-usage-subagents.ts","desktop:dev":"node scripts/run-desktop-pet.mjs","postinstall":"node scripts/patch-pi-subagents-stale-ctx.mjs && node scripts/patch-pi-commandcode-cache-race.mjs","test:snflow":"npx --yes tsx@4.23.1 scripts/smoke-snflow-setup.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-store.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-session-link.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-snflow-spec-review.ts","test:vision":"npx --yes tsx@4.23.1 scripts/smoke-vision-resolver.ts","desktop:make":"node scripts/run-desktop-forge.mjs make","test:browser":"npx --yes tsx@4.23.1 scripts/generate-browser-extension-shared.ts && npx --yes tsx@4.23.1 scripts/smoke-browser-binding.ts && npx --yes tsx@4.23.1 scripts/smoke-chrome-extension-artifacts.ts","test:runtime":"npx --yes tsx@4.23.1 scripts/smoke-runtime-packaging.ts","desktop:build":"node scripts/build-desktop-pet.mjs","release:patch":"npm version patch && npm publish --access public","test:git-diff":"npx --yes tsx@4.23.1 scripts/smoke-git-diff.ts","test:ui-theme":"npx --yes tsx@4.23.1 scripts/smoke-ui-theme-contract.ts","prepublishOnly":"npm run lint && tsc --noEmit && npm run test:server-auth && npm run test:runtime && npm run build && npm run test:bundled-extensions:production && npm run test:npm-package && npm run test:server-auth:e2e","test:git-stash":"npx --yes tsx@4.23.1 scripts/smoke-git-stash.ts","desktop:package":"node scripts/run-desktop-forge.mjs package","desktop:preview":"node scripts/preview-desktop-pet-states.mjs","test:automation":"node scripts/run-automation-smokes.cjs","test:chat-draft":"npx --yes tsx@4.23.1 scripts/smoke-chat-draft.ts","test:cwd-browse":"npx --yes tsx@4.23.1 scripts/smoke-cwd-browse.ts","test:grok-usage":"node --import tsx scripts/smoke-grok-usage.mjs","test:chat-errors":"npx --yes tsx@4.23.1 scripts/smoke-chat-provider-errors.ts","test:file-search":"npx --yes tsx@4.23.1 scripts/smoke-workspace-file-search.ts","test:file-upload":"npx --yes tsx@4.23.1 scripts/smoke-file-upload.ts","test:npm-package":"node scripts/check-npm-package-size.mjs","test:open-folder":"npx --yes tsx@4.23.1 scripts/smoke-open-project-folder.ts","test:server-auth":"npx --yes tsx@4.23.1 scripts/smoke-server-access-auth.ts && npx --yes tsx@4.23.1 scripts/smoke-server-access-proxy.ts","desktop:tauri:dev":"npm --prefix desktop-tauri run dev","test:agent-stream":"node --import tsx scripts/smoke-agent-event-throttler.mjs && node --import tsx scripts/smoke-empty-completed-retry.mjs && npx --yes tsx@4.23.1 scripts/smoke-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-pi-session-lifecycle.ts","test:session-tabs":"npx --yes tsx@4.23.1 scripts/smoke-session-tab-coordination.ts","test:git-workbench":"npx --yes tsx@4.23.1 scripts/smoke-git-workbench.ts","test:model-default":"npx --yes tsx@4.23.1 scripts/smoke-model-default.ts","test:session-index":"npx --yes tsx@4.23.1 scripts/smoke-session-index.ts","test:session-stats":"npx --yes tsx@4.23.1 scripts/smoke-session-billing-stats.ts","test:task-observer":"npx --yes tsx@4.23.1 scripts/smoke-task-observer.ts","desktop:dev:rebuild":"node scripts/run-desktop-pet.mjs --rebuild","desktop:tauri:build":"npm --prefix desktop-tauri run build","test:api-protection":"npx --yes tsx@4.23.1 scripts/smoke-api-protection.ts","test:prompts-config":"npx --yes tsx@4.23.1 test/prompts-config.test.ts","test:quick-commands":"npx --yes tsx@4.23.1 scripts/smoke-quick-commands.ts","test:scale-baseline":"npx --yes tsx@4.23.1 scripts/smoke-scale-baseline.ts","test:session-search":"npx --yes tsx@4.23.1 scripts/smoke-session-search.ts","service-launcher:dev":"npm --prefix service-launcher run dev","test:desktop-package":"node scripts/smoke-desktop-package.mjs","test:model-overrides":"npx --yes tsx@4.23.1 scripts/smoke-model-overrides.ts","test:server-auth:e2e":"node scripts/e2e-server-access-auth.mjs","test:session-changes":"node --import tsx scripts/smoke-session-file-changes.mjs","test:desktop-contract":"npx --yes tsx@4.23.1 scripts/smoke-desktop-contract.ts","test:desktop-observer":"npm run test:task-observer && npm run test:desktop-observer-api && npm run test:desktop-deep-links && npm run test:desktop-connection && npm run test:desktop-contract && npm run test:desktop-package && npm run test:desktop-quick-session","test:git-repositories":"npx --yes tsx@4.23.1 scripts/smoke-git-repositories.ts","test:service-launcher":"npm run test:service-launcher-control && npm run test:service-launcher-contract && npm run test:service-launcher-logs && npm run test:service-launcher-ui && npm run service-launcher:build-ui && npm run test:service-launcher-package && cargo test --manifest-path service-launcher/src-tauri/Cargo.toml","test:web-tools-config":"npx --yes tsx@4.23.1 scripts/smoke-web-tools-config.ts","desktop:tauri:build-ui":"node scripts/build-desktop-tauri.mjs","service-launcher:build":"npm --prefix service-launcher run build","service-launcher:icons":"node scripts/generate-service-launcher-icons.mjs","test:antigravity-usage":"node --import tsx scripts/smoke-antigravity-usage.mjs","test:commandcode-usage":"npx --yes tsx@4.23.1 scripts/smoke-commandcode-usage.ts","test:file-editor-state":"npx --yes tsx@4.23.1 scripts/smoke-file-editor-state.ts","test:file-preview-diff":"npx --yes tsx@4.23.1 scripts/smoke-file-preview-diff.ts","test:project-knowledge":"npx --yes tsx@4.23.1 scripts/smoke-project-knowledge.ts","test:bundled-extensions":"npx --yes tsx@4.23.1 scripts/smoke-bundled-pi-extensions.ts","test:desktop-connection":"npx --yes tsx@4.23.1 scripts/smoke-desktop-connection.ts","test:desktop-deep-links":"npx --yes tsx@4.23.1 scripts/smoke-desktop-deep-links.ts","test:session-transcript":"npx --yes tsx@4.23.1 scripts/smoke-session-transcript.ts","test:auth-oauth-packages":"node --import tsx scripts/smoke-auth-oauth-packages.mjs","test:model-extra-prompts":"npx --yes tsx@4.23.1 scripts/smoke-model-extra-prompts.ts","test:provider-model-cost":"npx --yes tsx@4.23.1 scripts/smoke-provider-model-cost.ts","test:service-launcher-ui":"npx --yes tsx@4.23.1 scripts/smoke-service-launcher-ui.ts","test:session-performance":"npx --yes tsx@4.23.1 scripts/smoke-session-performance.ts","service-launcher:build-ui":"node scripts/build-service-launcher.mjs","test:desktop-observer-api":"npx --yes tsx@4.23.1 scripts/smoke-desktop-observer-api.ts","test:git-client-lifecycle":"npx --yes tsx@4.23.1 scripts/smoke-git-client-lifecycle.ts","test:git-read-performance":"npx --yes tsx@4.23.1 scripts/smoke-git-read-performance.ts","test:package-update-check":"npx --yes tsx@4.23.1 scripts/smoke-package-update-check.ts","generate:browser-extension":"tsx scripts/generate-browser-extension-shared.ts","test:desktop-quick-session":"npx --yes tsx@4.23.1 scripts/smoke-desktop-quick-session.ts","test:desktop-tauri-package":"node scripts/smoke-desktop-tauri-package.mjs","test:model-session-restore":"npx --yes tsx@4.23.1 scripts/smoke-session-model-restore.ts","test:oauth-accounts-export":"node --import tsx scripts/smoke-oauth-accounts-export.mjs","test:service-launcher-logs":"node scripts/smoke-service-launcher-logs.mjs","test:desktop-tauri-contract":"npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-contract.ts && npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-view-parity.ts && node scripts/smoke-desktop-tauri-package.mjs && cargo test --manifest-path desktop-tauri/src-tauri/Cargo.toml","test:subagent-observability":"npx --yes tsx@4.23.1 scripts/smoke-subagent-observability.ts && node --import tsx scripts/smoke-subagent-progress.mjs && npx --yes tsx@4.23.1 scripts/smoke-subagent-session-runs.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail-route.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-store.ts","test:model-primary-candidates":"npx --yes tsx@4.23.1 scripts/smoke-model-primary-candidates.ts","test:service-launcher-control":"node scripts/smoke-launcher-control.mjs","test:service-launcher-package":"node scripts/smoke-service-launcher-package.mjs","test:desktop-tauri-view-parity":"npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-view-parity.ts","test:service-launcher-contract":"npx --yes tsx@4.23.1 scripts/smoke-service-launcher-contract.ts","test:bundled-extensions:production":"node scripts/e2e-bundled-pi-extensions-production.mjs"},"_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"overrides":{"@earendil-works/pi-ai":"0.85.1","@earendil-works/pi-tui":"0.85.1","@earendil-works/pi-agent-core":"0.85.1"},"repository":{"url":"git+https://github.com/twofive1203/pi-agnet-web.git","type":"git"},"_npmVersion":"9.6.6","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.3","diff":"^8.0.4","next":"16.2.12","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","typebox":"1.3.7","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","cron-parser":"^4.9.0","pi-ask-user":"0.15.0","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","jsonc-parser":"^3.3.1","pi-subagents":"0.40.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","pi-antigravity":"0.7.3","pi-mcp-adapter":"2.34.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","pi-manage-todo-list":"0.4.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.85.1","pi-commandcode-provider":"0.7.0","react-syntax-highlighter":"^16.1.1","@juicesharp/rpiv-web-tools":"2.10.1","@earendil-works/pi-coding-agent":"0.85.1","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","eslint":"^9","esbuild":"^0.25.12","postcss":"^8","electron":"^43.4.0","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.12","@electron-forge/cli":"^7.11.2","@tailwindcss/postcss":"^4.2.2","@electron-forge/maker-squirrel":"^7.11.2"},"_npmOperationalInternal":{"tmp":"tmp/snail-pi-web_0.9.24_1789721525398_0.5379904618678744","host":"s3://npm-registry-packages-npm-production"}},"0.9.25":{"_id":"@twofive/snail-pi-web@0.9.25","bin":{"spi":"bin/pi-web.js"},"bugs":{"url":"https://github.com/twofive1203/pi-agnet-web/issues"},"dist":{"shasum":"3604cd4d2f09aed7e3908a1b42ee3d23b19cc80b","tarball":"https://registry.npmjs.org/@twofive/snail-pi-web/-/snail-pi-web-0.9.25.tgz","fileCount":1287,"integrity":"sha512-ttdROUeHgR3dGT7b2VGphL3DFRTfLLt2qECOHcE/7LE03tgDEFdoc4rPG+RTOJaBdU/72dTkUvLzYbXAsryntg==","signatures":[{"sig":"MEYCIQDA96V721ojeaMD0/ojx2W2nMoMFNOx5CMEvEbvhGvrQAIhAJ8wT3VDgq5qzExDmMiCmqMCu3ED+JKJn7zezCz/GEUZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIE2BiKxsHD3QKxW1xDWPKmhjmYZkO5WLqkv6fWLjeEN/AiAxXrba6fHdj4gVOysAjp0fkK6Eyvrlw2nymi8SS5qJDw=="}],"unpackedSize":37571626},"name":"@twofive/snail-pi-web","engines":{"node":">=22.19.0"},"gitHead":"cbdf910512599f6c00a1a6e9ab6a3000886152d7","license":"MIT","scripts":{"dev":"node bin/pi-web.js --dev","lint":"eslint .","build":"node scripts/build-next.js","start":"node bin/pi-web.js","release":"npm run release:patch","test:mcp":"npx --yes tsx@4.23.1 scripts/smoke-mcp-config.ts","test:i18n":"npx --yes tsx@4.23.1 scripts/check-i18n-keys.ts","test:usage":"npx --yes tsx@4.23.1 scripts/smoke-usage-timeline.ts && npx --yes tsx@4.23.1 scripts/smoke-usage-subagents.ts","desktop:dev":"node scripts/run-desktop-pet.mjs","postinstall":"node scripts/patch-pi-subagents-stale-ctx.mjs && node scripts/patch-pi-commandcode-cache-race.mjs","test:snflow":"npx --yes tsx@4.23.1 scripts/smoke-snflow-setup.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-store.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-session-link.ts && npx --yes tsx@4.23.1 scripts/smoke-workflow-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-snflow-spec-review.ts","test:vision":"npx --yes tsx@4.23.1 scripts/smoke-vision-resolver.ts","desktop:make":"node scripts/run-desktop-forge.mjs make","test:browser":"npx --yes tsx@4.23.1 scripts/generate-browser-extension-shared.ts && npx --yes tsx@4.23.1 scripts/smoke-browser-binding.ts && npx --yes tsx@4.23.1 scripts/smoke-chrome-extension-artifacts.ts","test:runtime":"npx --yes tsx@4.23.1 scripts/smoke-runtime-packaging.ts","desktop:build":"node scripts/build-desktop-pet.mjs","release:patch":"npm version patch && npm publish --access public","test:git-diff":"npx --yes tsx@4.23.1 scripts/smoke-git-diff.ts","test:ui-theme":"npx --yes tsx@4.23.1 scripts/smoke-ui-theme-contract.ts","prepublishOnly":"npm run lint && tsc --noEmit && npm run test:server-auth && npm run test:runtime && npm run build && npm run test:bundled-extensions:production && npm run test:npm-package && npm run test:server-auth:e2e","test:git-stash":"npx --yes tsx@4.23.1 scripts/smoke-git-stash.ts","desktop:package":"node scripts/run-desktop-forge.mjs package","desktop:preview":"node scripts/preview-desktop-pet-states.mjs","test:automation":"node scripts/run-automation-smokes.cjs","test:chat-draft":"npx --yes tsx@4.23.1 scripts/smoke-chat-draft.ts","test:cwd-browse":"npx --yes tsx@4.23.1 scripts/smoke-cwd-browse.ts","test:grok-image":"npx --yes tsx@4.23.1 scripts/smoke-grok-image.ts","test:grok-usage":"node --import tsx scripts/smoke-grok-usage.mjs","test:chat-errors":"npx --yes tsx@4.23.1 scripts/smoke-chat-provider-errors.ts","test:file-search":"npx --yes tsx@4.23.1 scripts/smoke-workspace-file-search.ts","test:file-upload":"npx --yes tsx@4.23.1 scripts/smoke-file-upload.ts","test:npm-package":"node scripts/check-npm-package-size.mjs","test:open-folder":"npx --yes tsx@4.23.1 scripts/smoke-open-project-folder.ts","test:server-auth":"npx --yes tsx@4.23.1 scripts/smoke-server-access-auth.ts && npx --yes tsx@4.23.1 scripts/smoke-server-access-proxy.ts","desktop:tauri:dev":"npm --prefix desktop-tauri run dev","test:agent-stream":"node --import tsx scripts/smoke-agent-event-throttler.mjs && node --import tsx scripts/smoke-empty-completed-retry.mjs && npx --yes tsx@4.23.1 scripts/smoke-chat-lifecycle.ts && npx --yes tsx@4.23.1 scripts/smoke-pi-session-lifecycle.ts","test:session-tabs":"npx --yes tsx@4.23.1 scripts/smoke-session-tab-coordination.ts","test:git-workbench":"npx --yes tsx@4.23.1 scripts/smoke-git-workbench.ts","test:model-default":"npx --yes tsx@4.23.1 scripts/smoke-model-default.ts","test:session-index":"npx --yes tsx@4.23.1 scripts/smoke-session-index.ts","test:session-stats":"npx --yes tsx@4.23.1 scripts/smoke-session-billing-stats.ts","test:task-observer":"npx --yes tsx@4.23.1 scripts/smoke-task-observer.ts","desktop:dev:rebuild":"node scripts/run-desktop-pet.mjs --rebuild","desktop:tauri:build":"npm --prefix desktop-tauri run build","test:api-protection":"npx --yes tsx@4.23.1 scripts/smoke-api-protection.ts","test:prompts-config":"npx --yes tsx@4.23.1 test/prompts-config.test.ts","test:quick-commands":"npx --yes tsx@4.23.1 scripts/smoke-quick-commands.ts","test:scale-baseline":"npx --yes tsx@4.23.1 scripts/smoke-scale-baseline.ts","test:session-search":"npx --yes tsx@4.23.1 scripts/smoke-session-search.ts","service-launcher:dev":"npm --prefix service-launcher run dev","test:desktop-package":"node scripts/smoke-desktop-package.mjs","test:model-overrides":"npx --yes tsx@4.23.1 scripts/smoke-model-overrides.ts","test:server-auth:e2e":"node scripts/e2e-server-access-auth.mjs","test:session-changes":"node --import tsx scripts/smoke-session-file-changes.mjs","test:desktop-contract":"npx --yes tsx@4.23.1 scripts/smoke-desktop-contract.ts","test:desktop-observer":"npm run test:task-observer && npm run test:desktop-observer-api && npm run test:desktop-deep-links && npm run test:desktop-connection && npm run test:desktop-contract && npm run test:desktop-package && npm run test:desktop-quick-session","test:git-repositories":"npx --yes tsx@4.23.1 scripts/smoke-git-repositories.ts","test:service-launcher":"npm run test:service-launcher-control && npm run test:service-launcher-contract && npm run test:service-launcher-logs && npm run test:service-launcher-ui && npm run test:service-launcher-runtime-stage && npm run service-launcher:build-ui && npm run test:service-launcher-package && cargo test --manifest-path service-launcher/src-tauri/Cargo.toml","test:web-tools-config":"npx --yes tsx@4.23.1 scripts/smoke-web-tools-config.ts","desktop:tauri:build-ui":"node scripts/build-desktop-tauri.mjs","service-launcher:build":"npm --prefix service-launcher run build","service-launcher:icons":"node scripts/generate-service-launcher-icons.mjs","test:antigravity-usage":"node --import tsx scripts/smoke-antigravity-usage.mjs","test:commandcode-usage":"npx --yes tsx@4.23.1 scripts/smoke-commandcode-usage.ts","test:file-editor-state":"npx --yes tsx@4.23.1 scripts/smoke-file-editor-state.ts","test:file-preview-diff":"npx --yes tsx@4.23.1 scripts/smoke-file-preview-diff.ts","test:pi-retry-settings":"npx --yes tsx@4.23.1 scripts/smoke-pi-retry-settings.ts","test:project-knowledge":"npx --yes tsx@4.23.1 scripts/smoke-project-knowledge.ts","test:bundled-extensions":"npx --yes tsx@4.23.1 scripts/smoke-bundled-pi-extensions.ts","test:desktop-connection":"npx --yes tsx@4.23.1 scripts/smoke-desktop-connection.ts","test:desktop-deep-links":"npx --yes tsx@4.23.1 scripts/smoke-desktop-deep-links.ts","test:session-transcript":"npx --yes tsx@4.23.1 scripts/smoke-session-transcript.ts","test:auth-oauth-packages":"node --import tsx scripts/smoke-auth-oauth-packages.mjs","test:model-extra-prompts":"npx --yes tsx@4.23.1 scripts/smoke-model-extra-prompts.ts","test:provider-model-cost":"npx --yes tsx@4.23.1 scripts/smoke-provider-model-cost.ts","test:service-launcher-ui":"npx --yes tsx@4.23.1 scripts/smoke-service-launcher-ui.ts","test:session-performance":"npx --yes tsx@4.23.1 scripts/smoke-session-performance.ts","service-launcher:build-ui":"node scripts/build-service-launcher.mjs","test:desktop-observer-api":"npx --yes tsx@4.23.1 scripts/smoke-desktop-observer-api.ts","test:git-client-lifecycle":"npx --yes tsx@4.23.1 scripts/smoke-git-client-lifecycle.ts","test:git-read-performance":"npx --yes tsx@4.23.1 scripts/smoke-git-read-performance.ts","test:package-update-check":"npx --yes tsx@4.23.1 scripts/smoke-package-update-check.ts","generate:browser-extension":"tsx scripts/generate-browser-extension-shared.ts","test:desktop-quick-session":"npx --yes tsx@4.23.1 scripts/smoke-desktop-quick-session.ts","test:desktop-tauri-package":"node scripts/smoke-desktop-tauri-package.mjs","test:model-session-restore":"npx --yes tsx@4.23.1 scripts/smoke-session-model-restore.ts","test:oauth-accounts-export":"node --import tsx scripts/smoke-oauth-accounts-export.mjs","test:service-launcher-logs":"node scripts/smoke-service-launcher-logs.mjs","service-launcher:build:full":"node scripts/build-service-launcher-full.mjs","test:desktop-tauri-contract":"npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-contract.ts && npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-view-parity.ts && node scripts/smoke-desktop-tauri-package.mjs && cargo test --manifest-path desktop-tauri/src-tauri/Cargo.toml","test:subagent-observability":"npx --yes tsx@4.23.1 scripts/smoke-subagent-observability.ts && node --import tsx scripts/smoke-subagent-progress.mjs && npx --yes tsx@4.23.1 scripts/smoke-subagent-session-runs.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-detail-route.ts && npx --yes tsx@4.23.1 scripts/smoke-subagent-store.ts","test:model-primary-candidates":"npx --yes tsx@4.23.1 scripts/smoke-model-primary-candidates.ts","test:service-launcher-control":"node scripts/smoke-launcher-control.mjs","test:service-launcher-package":"node scripts/smoke-service-launcher-package.mjs","service-launcher:stage-runtime":"node scripts/stage-launcher-runtime.mjs","test:desktop-tauri-view-parity":"npx --yes tsx@4.23.1 scripts/smoke-desktop-tauri-view-parity.ts","test:service-launcher-contract":"npx --yes tsx@4.23.1 scripts/smoke-service-launcher-contract.ts","test:bundled-extensions:production":"node scripts/e2e-bundled-pi-extensions-production.mjs","test:service-launcher-runtime-stage":"node scripts/smoke-launcher-runtime-stage.mjs"},"version":"0.9.25","_npmUser":{"name":"twofive","email":"lichong0012@163.com"},"homepage":"https://github.com/twofive1203/pi-agnet-web#readme","keywords":["pi","coding-agent","webchat","agent","nextjs"],"overrides":{"@earendil-works/pi-ai":"0.85.1","@earendil-works/pi-tui":"0.85.1","@earendil-works/pi-agent-core":"0.85.1"},"repository":{"url":"git+https://github.com/twofive1203/pi-agnet-web.git","type":"git"},"_npmVersion":"9.6.6","description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","directories":{},"maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"_nodeVersion":"24.18.0","dependencies":{"ws":"^8.18.3","diff":"^8.0.4","next":"16.2.12","katex":"^0.16.47","react":"^19.2.4","mammoth":"^1.12.0","mermaid":"^11.14.0","typebox":"1.3.7","react-dom":"^19.2.4","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","cron-parser":"^4.9.0","pi-ask-user":"0.15.0","remark-math":"^6.0.0","@xterm/xterm":"^6.0.0","jsonc-parser":"^3.3.1","pi-subagents":"0.40.0","rehype-katex":"^7.0.1","monaco-editor":"^0.55.1","@lobehub/icons":"^5.6.0","pi-antigravity":"0.8.0","pi-mcp-adapter":"2.34.0","react-markdown":"^10.1.0","rehype-sanitize":"^6.0.0","@lydell/node-pty":"^1.2.0-beta.12","@xterm/addon-fit":"^0.11.0","pi-manage-todo-list":"0.4.0","@monaco-editor/react":"^4.7.0","@earendil-works/pi-ai":"0.85.1","pi-commandcode-provider":"0.7.0","react-syntax-highlighter":"^16.1.1","@juicesharp/rpiv-web-tools":"2.10.1","@earendil-works/pi-coding-agent":"0.85.1","@types/react-syntax-highlighter":"^15.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.12","eslint":"^9","esbuild":"^0.25.12","postcss":"^8","electron":"^43.4.0","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^25","tailwindcss":"^4.2.2","@types/react":"^19","@types/react-dom":"^19","eslint-config-next":"16.2.12","@electron-forge/cli":"^7.11.2","@tailwindcss/postcss":"^4.2.2","@electron-forge/maker-squirrel":"^7.11.2"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/snail-pi-web_0.9.25_1790128884519_0.028783072168118373"}}},"time":{"created":"2026-07-16T11:08:38.670Z","modified":"2026-09-23T02:01:25.536Z","0.7.2":"2026-07-16T11:08:39.231Z","0.7.3":"2026-07-18T16:25:52.485Z","0.7.4":"2026-07-18T17:03:43.551Z","0.7.5":"2026-07-18T17:27:26.515Z","0.7.6":"2026-07-18T18:34:39.854Z","0.8.0":"2026-07-19T12:36:53.769Z","0.9.0":"2026-07-25T08:06:45.663Z","0.9.1":"2026-07-25T14:16:00.864Z","0.9.2":"2026-07-25T15:29:55.946Z","0.9.3":"2026-07-28T02:26:49.477Z","0.9.4":"2026-07-28T07:01:43.954Z","0.9.5":"2026-07-31T05:36:21.835Z","0.9.6":"2026-08-04T03:23:58.884Z","0.9.7":"2026-08-04T09:55:42.775Z","0.9.8":"2026-08-05T07:47:09.257Z","0.9.9":"2026-08-05T10:40:20.288Z","0.9.10":"2026-08-06T06:57:46.639Z","0.9.11":"2026-08-07T10:55:42.434Z","0.9.12":"2026-08-14T10:13:51.220Z","0.9.13":"2026-08-19T10:18:05.958Z","0.9.14":"2026-08-21T09:58:38.937Z","0.9.15":"2026-08-26T06:57:28.126Z","0.9.16":"2026-09-01T02:51:10.266Z","0.9.17":"2026-09-08T07:11:47.583Z","0.9.18":"2026-09-10T02:29:18.846Z","0.9.19":"2026-09-10T03:33:57.476Z","0.9.20":"2026-09-11T08:13:50.514Z","0.9.21":"2026-09-11T11:42:07.204Z","0.9.22":"2026-09-13T06:38:13.155Z","0.9.23":"2026-09-15T06:00:41.951Z","0.9.24":"2026-09-18T08:52:05.672Z","0.9.25":"2026-09-23T02:01:24.786Z"},"bugs":{"url":"https://github.com/twofive1203/pi-agnet-web/issues"},"license":"MIT","homepage":"https://github.com/twofive1203/pi-agnet-web#readme","keywords":["pi","coding-agent","webchat","agent","nextjs"],"repository":{"url":"git+https://github.com/twofive1203/pi-agnet-web.git","type":"git"},"description":"Snail Pi Web (蜗牛派) workspace for the pi coding agent","maintainers":[{"name":"twofive","email":"lichong0012@163.com"}],"readme":"# 蜗牛派（Snail Pi Web）\r\n\r\n蜗牛派（Snail Pi Web）是面向 `pi` 编程智能体的本地 Web 工作台。它会读取本机 pi agent 数据目录，在浏览器中提供会话管理、实时对话、模型与扩展配置、项目文件、Git/WorkTree、浏览器调试和可选 Web 终端。\r\n\r\n- npm 包：[`@twofive/snail-pi-web`](https://www.npmjs.com/package/@twofive/snail-pi-web)\r\n- GitHub：[`twofive1203/pi-agnet-web`](https://github.com/twofive1203/pi-agnet-web)\r\n- 命令行入口：`spi`\r\n\r\n## 环境依赖\r\n\r\n| 依赖 | 要求 | 说明 |\r\n| --- | --- | --- |\r\n| Node.js | Node.js >=22.19.0 | Next.js 16 / React 19 运行环境；低版本 Node 可能无法启动。 |\r\n| npm | 建议 npm 10+ | 用于 `npx`、全局安装和源码安装依赖。 |\r\n| pi agent 数据目录 | 默认 `~/.pi/agent/` | Web UI 会读取本机会话、模型和设置文件。 |\r\n| Git | 可选但建议安装 | Git 状态、分支、WorkTree 功能需要。 |\r\n| 本地 shell | 可选 | 开启 Web Terminal 时需要系统 shell。 |\r\n\r\n> Web Terminal 依赖 `@lydell/node-pty`。如果目标机器缺少原生依赖构建环境，可先关闭 Web Terminal 功能，不影响会话浏览和对话主流程。\r\n\r\n## 快速开始\r\n\r\n**无需安装，直接运行：**\r\n\r\n```bash\r\nnpx @twofive/snail-pi-web@latest\r\n```\r\n\r\n**或全局安装后使用：**\r\n\r\n```bash\r\nnpm install -g @twofive/snail-pi-web\r\nspi\r\n```\r\n\r\n默认仅监听回环地址 [http://127.0.0.1:62666](http://127.0.0.1:62666)，本机免认证。CLI 会在服务就绪后尝试自动打开浏览器。\r\n\r\n> **安全说明：** 官方入口不再默认继承 `0.0.0.0`。远程/局域网访问必须使用 `spi --server`（或等价环境变量）；非回环监听会强制启用全局访问密钥认证。服务器模式默认要求 HTTPS 才能输入访问密钥；仅当传输已由 Tailscale 等可信网络加密时，才应显式启用 HTTP 兼容模式。\r\n\r\n## 启动参数\r\n\r\n```bash\r\nspi                              # 本机回环，免认证\r\nspi --port 8080                  # 自定义端口\r\nspi --server                     # 服务器模式：0.0.0.0 + 认证（默认要求 HTTPS）\r\nspi --server -H 127.0.0.1        # 回环后端 + 认证（给 Nginx/Caddy HTTPS 反代）\r\nspi --server --rotate-access-key # 轮换访问密钥并失效全部会话\r\nspi --server --allow-insecure-http # 显式允许 HTTP 登录（仅限已有加密传输）\r\nspi -H 0.0.0.0                   # 非回环监听会自动启用认证\r\nPORT=8080 spi\r\nPI_WEB_HOSTNAME=10.0.0.5 spi     # 显式监听地址（勿用系统 HOSTNAME）\r\n# Tailscale 等可信客户端可免密钥：优先写配置文件 ~/.pi/agent/server-access-policy.json\r\n# { \"version\": 1, \"authBypassCidrs\": [\"100.64.0.0/10\"] }\r\n# 也可用环境变量覆盖；全网与回环地址规则均会被拒绝\r\nPI_WEB_AUTH_BYPASS_CIDRS=100.64.0.0/10 spi --server --no-open\r\nPI_WEB_ALLOW_INSECURE_HTTP=1 spi --server --no-open # 仅限已有加密传输\r\nspi --proxy http://127.0.0.1:7897\r\nspi --socks-proxy socks5://127.0.0.1:7897\r\n```\r\n\r\n`npx` 运行时也可以传参：\r\n\r\n```bash\r\nnpx @twofive/snail-pi-web@latest --port 8080\r\n```\r\n\r\n如果 shell 中已有 `HTTP_PROXY` / `HTTPS_PROXY` / `ALL_PROXY` / `NO_PROXY`，`spi` 会继承并自动为 Node 追加 `--use-env-proxy`。也可以用 `PROXY_URL` 和 `SOCKS_PROXY_URL`：\r\n\r\n```bash\r\nPROXY_URL=http://127.0.0.1:7897 SOCKS_PROXY_URL=socks5://127.0.0.1:7897 spi\r\n```\r\n\r\n## Windows 桌宠（可选，独立安装）\r\n\r\n桌宠是 attach-only 的 Windows 任务观察器，与 npm 包 `spi` **分开安装/发布**。它只连接已经运行的本地蜗牛派服务，**不会**启动、停止或托管 `spi`，卸载桌宠也不会删除 `~/.pi/agent`。\r\n\r\n### 源码里怎么跑\r\n\r\n```bash\r\n# 终端 A\r\nnpm run dev                 # 或 spi --no-open\r\n\r\n# 终端 B\r\nnpm run desktop:dev         # 编译（如需要）并启动 Electron 桌宠\r\nnpm run desktop:build       # 仅打包 main/preload JS\r\n```\r\n\r\n### 使用要点\r\n\r\n- 默认连接 `http://127.0.0.1:62666`（仅 `127.0.0.1` 本地模式）。\r\n- **拖动**宠物上方灰色条移动窗口；点宠物本体展开/收起 Activity tray。\r\n- 点 **×** = 隐藏到托盘（不是退出）；托盘「退出桌宠」才结束桌宠进程，且不影响 `spi`。\r\n- 端口无服务时提示「蜗牛派服务未启动」，可复制 `spi --no-open`，桌宠不会自动执行该命令。\r\n- 点任务/通知才用默认浏览器打开 WebUI。\r\n- 开发说明：[`desktop/README.md`](desktop/README.md)；验收矩阵：[`docs/operations/desktop-pet-validation.md`](docs/operations/desktop-pet-validation.md)；部署与发布：[`docs/deployment/README.md`](docs/deployment/README.md)。\r\n- 合约测试：`npm run test:desktop-observer` / `npm run test:desktop-package`。\r\n\r\n### 自定义宠物（目录扫描）\r\n\r\n内置宠物随包发布；用户自带宠物只从本机目录只读扫描，既不会被打进安装包，也不会被改写：\r\n\r\n```text\r\n~/.pi/agent/desktop-pets/<pet-id>/\r\n  manifest.json     # 蜗牛派原生格式（v2，renderMode \"spritesheet\"）\r\n  <sheet>.png       # 或 .webp，文件名取自 manifest 的 sheet.src\r\n```\r\n\r\n- 也支持 Codex 兼容包：`${CODEX_HOME:-~/.codex}/pets/<pet-id>/pet.json` + `spritesheet.webp`；同一目录放在上面的蜗牛派根目录下也能识别。\r\n- 根目录解析顺序：`SNAIL_PET_CUSTOM_PETS_DIR` → `PI_CODING_AGENT_DIR/desktop-pets` → `~/.pi/agent/desktop-pets`。\r\n- `<pet-id>` 必须与 `manifest.json#id` 一致，且不能与内置 id 冲突；尺寸、帧数或格式不合格的包会被跳过并提示，不会让桌宠崩溃，必要时回退内置蜗牛。\r\n- 桌宠「设置 → 角色」列出内置、蜗牛派和 Codex 角色；**打开目录** 打开自定义宠物根目录，**刷新列表** 重新扫描两个来源。\r\n- **ZIP 一键导入尚未提供**：需要先解压成目录再刷新。本机能加载不等于拥有再分发授权，第三方角色不要加进安装包或内置集合。\r\n- 精灵图生成与校验脚本（如 `node scripts/desktop-custom-pet.mjs check <petDir>`）及完整格式契约见 [`desktop/README.md`](desktop/README.md)。\r\n\r\n## 数据目录与配置\r\n\r\n默认读取：\r\n\r\n```text\r\n~/.pi/agent/\r\n```\r\n\r\n如需指定其他 pi agent 数据目录：\r\n\r\n```bash\r\nPI_CODING_AGENT_DIR=/path/to/pi-agent-data spi\r\n```\r\n\r\n| 文件/目录 | 用途 |\r\n| --- | --- |\r\n| `sessions/` | 会话 JSONL 文件，按工作目录归档。 |\r\n| `models.json` | 模型提供商和模型列表配置。 |\r\n| `settings.json` | pi agent 设置，包括默认模型。 |\r\n| `server-access.json` | 服务器模式访问密钥校验信息与会话哈希（无明文密钥）。 |\r\n| `server-access-policy.json` | 可选：免密钥客户端 IP/CIDR 白名单（如 Tailscale）；环境变量可覆盖。 |\r\n| `pi-web.json` | Web UI 设置，例如 WorkTree、Usage、Web Terminal、ChatGPT/Grok 面板、编辑器和 SnFlow 偏好。 |\r\n\r\n会话文件路径形如：\r\n\r\n```text\r\n~/.pi/agent/sessions/<编码后的工作目录>/<时间戳>_<uuid>.jsonl\r\n```\r\n\r\n## 功能介绍\r\n\r\n- **会话管理**：按工作目录浏览、搜索和归档本地会话，通过 SSE 实时接收回复，并查看上下文占用、花费和压缩结果。\r\n- **Fork 与分支导航**：从历史消息创建独立会话，或在同一会话文件内切换分支，方便并行探索不同方案。\r\n- **模型与 Pi 资源**：切换模型和 thinking level，管理登录/API key、自定义提供商、模型定价、工具预设、Skills、Extensions 和 Pi 原生子智能体配置。\r\n- **文件浏览与编辑**：查看和编辑源码，预览 Markdown、图片、音频、PDF、DOCX，并通过会话改动面板查看智能体产生的文件 Diff。\r\n- **Git 与 WorkTree**：查看 Git 状态、提交图和提交 Diff，切换分支、管理 stash，并为独立任务创建 WorkTree。\r\n- **Web Terminal**：在当前工作区打开可选的多标签、可分屏终端；可以在设置中选择 shell 和环境变量。\r\n- **浏览器标签页调试**：通过 `extensions/chrome-tab-debug/` 中随附的 Chrome MV3 扩展，将标签页临时绑定到当前会话，供智能体执行受限 DOM、控制台和网络调试。\r\n- **用量与结构化任务**：统计会话 token/成本，显示可选的 ChatGPT/Codex 与 Grok 配额，并通过 SnFlow 面板管理显式启用的任务。\r\n- **界面体验**：支持中英文、多套明暗主题、桌面/移动端布局，以及可调整大小的文件、任务和终端面板。\r\n\r\n## 使用注意\r\n\r\n- **文件访问范围**：文件浏览和预览面向当前选择的项目目录，以及会话中已出现过的工作目录。\r\n- **模型配置**：Models 面板读写 pi agent 数据目录下的 `models.json`，模型列表和默认模型由 pi 配置解析得到。\r\n- **Fork 与会话内分支不同**：Fork 会创建新的 `.jsonl` 文件；“Edit from here” 是同一会话文件里的分支。\r\n- **Web Terminal**：需要本机 shell 和 PTY 支持；可在 `pi-web.json` 或界面设置中关闭。\r\n- **浏览器调试**：浏览器桥接仅监听本机回环地址；标签页绑定是临时的，服务重启后不会恢复。\r\n- **SnFlow**：项目初始化只会安装所需资源；普通开发仍保持直接模式，只有显式请求 SnFlow 时才进入结构化任务流程。\r\n\r\n## 从源码运行\r\n\r\n```bash\r\ngit clone https://github.com/twofive1203/pi-agnet-web.git\r\ncd pi-agnet-web\r\nnpm install\r\nnpm run dev\r\n```\r\n\r\n本地开发端口为 [http://127.0.0.1:62666](http://127.0.0.1:62666)。\r\n\r\n> 请改用 `127.0.0.1` 而不是 `localhost`：桌宠的本地访问门禁要求请求 Host 是 IPv4 回环地址 `127.0.0.1`，用 `localhost` 访问可能被以 403（`Desktop companion requires Host 127.0.0.1`）拒绝。\r\n\r\n生产构建和启动：\r\n\r\n```bash\r\nnpm run build\r\nnpm run start\r\n```\r\n\r\n> 开发时不要直接运行 `next build`。发布或生产验证时使用 `npm run build`。\r\n\r\n常用检查：\r\n\r\n```bash\r\nnode_modules/.bin/tsc --noEmit\r\nnpm run lint\r\n```\r\n\r\n## 项目结构\r\n\r\n```text\r\napp/          # Next.js 页面和 API 路由\r\ncomponents/   # 浏览器端 UI 组件\r\nhooks/        # 会话状态、主题、拖拽、音频等 React hooks\r\nlib/          # 会话解析、RPC 生命周期、路径/配置/提供商等共享逻辑\r\nscripts/      # 构建和运维脚本\r\nbin/          # spi CLI 入口\r\npublic/       # 静态资源\r\nextensions/   # 随项目提供的扩展（如 Chrome 标签页调试）\r\ndocs/         # 架构、模块、部署和运维文档\r\n```\r\n\r\n更多架构、开发、部署和运行说明见 [`docs/`](docs/)；部署与发布细节见 [`docs/deployment/README.md`](docs/deployment/README.md)。\r\n\r\n## MCP 配置\r\n\r\nSettings → **MCP** 可安全编辑 `pi-mcp-adapter` 原生的用户级/项目级配置文件，敏感字段只返回脱敏状态，并提供 revision 冲突保护和明确的 `/reload` 生效提示。adapter 已随 WebUI 内置，默认关闭，需在 Settings → **扩展** 中打开。详见 [`docs/integrations/README.md`](docs/integrations/README.md#mcp-adapter-configuration-pi-mcp-adapter)，聚焦验证命令为 `npm run test:mcp`。\r\n\r\n## 自动化（Automation）\r\n\r\n右上角 **A** 抽屉可管理定时 Agent 任务。使用五段 cron 与 IANA 时区；仅在 Snail Pi Web 服务在线时调度；运行记录不进入普通项目会话列表。\r\n\r\n第一次试用请阅读 [`docs/automation-user-guide.zh-CN.md`](docs/automation-user-guide.zh-CN.md)，其中包含创建、授权、立即运行、结果查看、提升普通会话及故障排查步骤。架构决策见 [`docs/architecture/decisions/automation-scheduler.md`](docs/architecture/decisions/automation-scheduler.md)。验证命令：`npm run test:automation`。\r\n","readmeFilename":"README.zh-CN.md"}