{"_id":"@gang-of-beads/pi-web","_rev":"41-34201752bbbe121a6ece8c11cff2e278","name":"@gang-of-beads/pi-web","dist-tags":{"latest":"2.202609.28"},"versions":{"1.202609.3":{"name":"@gang-of-beads/pi-web","version":"1.202609.3","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Federico Jaramillo Martinez"},"license":"MIT","_id":"@gang-of-beads/pi-web@1.202609.3","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"8b61a3b1966296e65bb2a4c318043ac3d64da1ac","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-1.202609.3.tgz","fileCount":408,"integrity":"sha512-m1QjfNwqIQGCq7LzKtRGXjlyNtCE2qgt0IPdpJWc2JGnvDcZNQj7IqOQj+dAsvtGuunY/w29upFKkJVRiZWzEw==","signatures":[{"sig":"MEUCIQC+IfSeQFxzwQcmhbSlPW7xMhK7ZarSfFTdjL4hKcrTrwIgBmd6EMeQbRKEmMP96tJdSuC06kudlknWAxd/y+WOtws=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6133694},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-1.202609.3.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs"},"_npmUser":{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-1.202609.3.tgz","_integrity":"sha512-m1QjfNwqIQGCq7LzKtRGXjlyNtCE2qgt0IPdpJWc2JGnvDcZNQj7IqOQj+dAsvtGuunY/w29upFKkJVRiZWzEw==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.17.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.10.0","typebox":"1.3.7","node-pty":"^1.1.0","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.1.4","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","@types/ws":"^8.18.1","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.84.4","@earendil-works/pi-agent-core":"^0.84.2","@earendil-works/pi-coding-agent":"^0.84.4"},"peerDependencies":{"@earendil-works/pi-ai":">=0.84.0","@earendil-works/pi-agent-core":">=0.84.0","@earendil-works/pi-coding-agent":">=0.84.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_1.202609.3_1788282484445_0.7864812307866034","host":"s3://npm-registry-packages-npm-production"}},"1.202609.4":{"name":"@gang-of-beads/pi-web","version":"1.202609.4","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Federico Jaramillo Martinez"},"license":"MIT","_id":"@gang-of-beads/pi-web@1.202609.4","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"0aa1d26974f712a4e85c16ee152827d017be4395","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-1.202609.4.tgz","fileCount":408,"integrity":"sha512-kDbxwnvoCoaCZ8GJxOXiBvhZ/LR0NtSV/WKpDqcNn/Mzkj5lzWZ1LRW6ILAUObjtzCFvnRpDw7id1kiyCTBwvw==","signatures":[{"sig":"MEUCIFGkEezfkAtCcXc8o05Ln+t6xn4ei+oUODMoCBQl/KYiAiEA+gY8vYEd3pCIb41q0xzgWV9kH48P1dMgSmsJL1hkfrs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@1.202609.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6134439},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-1.202609.4.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-1.202609.4.tgz","_integrity":"sha512-kDbxwnvoCoaCZ8GJxOXiBvhZ/LR0NtSV/WKpDqcNn/Mzkj5lzWZ1LRW6ILAUObjtzCFvnRpDw7id1kiyCTBwvw==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.17.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.10.0","typebox":"1.3.7","node-pty":"^1.1.0","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.1.4","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","@types/ws":"^8.18.1","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.84.4","@earendil-works/pi-agent-core":"^0.84.2","@earendil-works/pi-coding-agent":"^0.84.4"},"peerDependencies":{"@earendil-works/pi-ai":">=0.84.0","@earendil-works/pi-agent-core":">=0.84.0","@earendil-works/pi-coding-agent":">=0.84.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_1.202609.4_1788290263650_0.19008305659116886","host":"s3://npm-registry-packages-npm-production"}},"1.202609.5":{"name":"@gang-of-beads/pi-web","version":"1.202609.5","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Federico Jaramillo Martinez"},"license":"MIT","_id":"@gang-of-beads/pi-web@1.202609.5","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"dd15f2040bfd688f9c52a86c185c0468598eef60","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-1.202609.5.tgz","fileCount":410,"integrity":"sha512-GfRsxb6nZQceQ9DuwWYfPW34Z/xLI1KR30BxjAwJEdu/nYRpfFxaz9QPt0cZIZpqQypMpABlv2JwueXTSQf1Dw==","signatures":[{"sig":"MEYCIQCi8Qrpd4uTNP/mCUD9Jb1BsXkdN/TOxbvWia0fwa4HDwIhAKvPtUBS6bcj0gECaAp87kHSqsNlc6GdMNnvr9wu4SY7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@1.202609.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6145879},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-1.202609.5.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-1.202609.5.tgz","_integrity":"sha512-GfRsxb6nZQceQ9DuwWYfPW34Z/xLI1KR30BxjAwJEdu/nYRpfFxaz9QPt0cZIZpqQypMpABlv2JwueXTSQf1Dw==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.17.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.10.0","typebox":"1.3.7","node-pty":"^1.1.0","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.1.4","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","@types/ws":"^8.18.1","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.84.4","@earendil-works/pi-agent-core":"^0.84.2","@earendil-works/pi-coding-agent":"^0.84.4"},"peerDependencies":{"@earendil-works/pi-ai":">=0.84.0","@earendil-works/pi-agent-core":">=0.84.0","@earendil-works/pi-coding-agent":">=0.84.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_1.202609.5_1788331638298_0.551556531511245","host":"s3://npm-registry-packages-npm-production"}},"1.202609.6":{"name":"@gang-of-beads/pi-web","version":"1.202609.6","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@1.202609.6","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"32866342370091962414f3e7fb2fc752709ccab6","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-1.202609.6.tgz","fileCount":412,"integrity":"sha512-V/yz17gq20LYWyqhko3ES7G5PFli1W4r3d5OvMt+ms0MG7TR/bg1ypG8aNLYmOZCCp7AezfaA5G7aNi+l08oWA==","signatures":[{"sig":"MEYCIQC1H9p3ByxrH0FXr7mdpJ1VcVJ4Qfaukjr1BTK+mQskVQIhAPNlvdG5r9wKffaDo1AxE4hgmKV2Ye9a/sznimZPRGgI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@1.202609.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6204071},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-1.202609.6.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-1.202609.6.tgz","_integrity":"sha512-V/yz17gq20LYWyqhko3ES7G5PFli1W4r3d5OvMt+ms0MG7TR/bg1ypG8aNLYmOZCCp7AezfaA5G7aNi+l08oWA==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.17.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.10.0","typebox":"1.3.7","node-pty":"^1.1.0","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.1.4","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","@types/ws":"^8.18.1","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.84.4","@earendil-works/pi-agent-core":"^0.84.2","@earendil-works/pi-coding-agent":"^0.84.4"},"peerDependencies":{"@earendil-works/pi-ai":">=0.84.0","@earendil-works/pi-agent-core":">=0.84.0","@earendil-works/pi-coding-agent":">=0.84.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_1.202609.6_1788386461921_0.2998905391761164","host":"s3://npm-registry-packages-npm-production"}},"1.202609.7":{"name":"@gang-of-beads/pi-web","version":"1.202609.7","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@1.202609.7","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"8ab7797dd1bcfa4d8a47251a196fc0033fb23f70","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-1.202609.7.tgz","fileCount":412,"integrity":"sha512-MmEVV7lg/Iiowlf+VixLzv6f2udaHo2NlKKjduOxy75Fok+3OhIhIvUgqcaaERlxOhM2kFlb/1yh578F1uq3cQ==","signatures":[{"sig":"MEQCIAvUjugstNl++hguZJbS578JTB4aOKQtUWYjxrqYlsI4AiB0P5wGy7nBx0Sx+FwW5Q5umnq50XqVBRSCmRBkV0ekYg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@1.202609.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6205146},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-1.202609.7.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-1.202609.7.tgz","_integrity":"sha512-MmEVV7lg/Iiowlf+VixLzv6f2udaHo2NlKKjduOxy75Fok+3OhIhIvUgqcaaERlxOhM2kFlb/1yh578F1uq3cQ==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.17.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.10.0","typebox":"1.3.7","node-pty":"^1.1.0","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.1.4","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","@types/ws":"^8.18.1","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.84.4","@earendil-works/pi-agent-core":"^0.84.2","@earendil-works/pi-coding-agent":"^0.84.4"},"peerDependencies":{"@earendil-works/pi-ai":">=0.84.0","@earendil-works/pi-agent-core":">=0.84.0","@earendil-works/pi-coding-agent":">=0.84.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_1.202609.7_1788421084245_0.020829644838980865","host":"s3://npm-registry-packages-npm-production"}},"1.202609.8":{"name":"@gang-of-beads/pi-web","version":"1.202609.8","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@1.202609.8","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"1b65a5b7701b61c5819f39766b86201bd997ec98","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-1.202609.8.tgz","fileCount":414,"integrity":"sha512-ZzaIV5yliAGUFhkqHkOwC3UxDjxtl+Kwg/0+ZcQFZEJvux537ypGUaAkhaUJxdjadh1Tpo7oitzKqSgnA3mOjw==","signatures":[{"sig":"MEUCIQDrGQySQLhmDCCIIH3MXbUIIIlBfSzUPaw/x2uxVo5VCAIgX5/gdJLMo4H5ES9utLsXkm9RaJ9vPh6e+Eoaue4JvoE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@1.202609.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6222545},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-1.202609.8.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-1.202609.8.tgz","_integrity":"sha512-ZzaIV5yliAGUFhkqHkOwC3UxDjxtl+Kwg/0+ZcQFZEJvux537ypGUaAkhaUJxdjadh1Tpo7oitzKqSgnA3mOjw==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.17.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.10.0","typebox":"1.3.7","node-pty":"^1.1.0","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.1.4","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","@types/ws":"^8.18.1","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.84.4","@earendil-works/pi-agent-core":"^0.84.2","@earendil-works/pi-coding-agent":"^0.84.4"},"peerDependencies":{"@earendil-works/pi-ai":">=0.84.0","@earendil-works/pi-agent-core":">=0.84.0","@earendil-works/pi-coding-agent":">=0.84.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_1.202609.8_1788447678871_0.24995931920839842","host":"s3://npm-registry-packages-npm-production"}},"1.202609.9":{"name":"@gang-of-beads/pi-web","version":"1.202609.9","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@1.202609.9","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"3631192c790b2e0d384810f1b786b5c7763ee1d5","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-1.202609.9.tgz","fileCount":416,"integrity":"sha512-h980ugYIRgsYH6/52/0Us4OuN0DfTihPdCXT9I1uhKlOXkUVXrVkKjZW6IX8n6vcKPR6syCY6jmiJNUw2wazJg==","signatures":[{"sig":"MEUCIQDpVLxY8ufLSNYWIjRGQgMTvGNvlHTivMVgOF1NDbYTBAIgHilPKQ/SUlwIswAO7jAnmUFMSrWPm8nO7FQgSmrZXkM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@1.202609.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6232209},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-1.202609.9.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-1.202609.9.tgz","_integrity":"sha512-h980ugYIRgsYH6/52/0Us4OuN0DfTihPdCXT9I1uhKlOXkUVXrVkKjZW6IX8n6vcKPR6syCY6jmiJNUw2wazJg==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.17.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.10.0","typebox":"1.3.7","node-pty":"^1.1.0","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.1.4","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","@types/ws":"^8.18.1","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.84.4","@earendil-works/pi-agent-core":"^0.84.2","@earendil-works/pi-coding-agent":"^0.84.4"},"peerDependencies":{"@earendil-works/pi-ai":">=0.84.0","@earendil-works/pi-agent-core":">=0.84.0","@earendil-works/pi-coding-agent":">=0.84.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_1.202609.9_1788450148818_0.5738961765835615","host":"s3://npm-registry-packages-npm-production"}},"1.202609.10":{"name":"@gang-of-beads/pi-web","version":"1.202609.10","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@1.202609.10","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"e4646174ed4e3e1a3039ac352a8f1db214f4d816","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-1.202609.10.tgz","fileCount":416,"integrity":"sha512-CIXL/BJFy/rXg3SJGO3F2c4S1agNUwoALev0vJm8fYXG0Kgizf8sfQ1GkNF06dPEe7xKAc6gCBq7NZB1eWS6qw==","signatures":[{"sig":"MEUCIQDTRKKmA851r6H5RbQYzlgl2dzgWkU6rWXg+mdJ7Xo/XAIgWzXFwPlUzmqUcdcmCnRq2sxqnsPsqmDoPfg7bceL99k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@1.202609.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6233175},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-1.202609.10.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-1.202609.10.tgz","_integrity":"sha512-CIXL/BJFy/rXg3SJGO3F2c4S1agNUwoALev0vJm8fYXG0Kgizf8sfQ1GkNF06dPEe7xKAc6gCBq7NZB1eWS6qw==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.10.0","typebox":"1.3.7","node-pty":"^1.1.0","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.1.4","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","@types/ws":"^8.18.1","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.84.4","@earendil-works/pi-agent-core":"^0.84.2","@earendil-works/pi-coding-agent":"^0.84.4"},"peerDependencies":{"@earendil-works/pi-ai":">=0.84.0","@earendil-works/pi-agent-core":">=0.84.0","@earendil-works/pi-coding-agent":">=0.84.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_1.202609.10_1788456041812_0.3122144318900446","host":"s3://npm-registry-packages-npm-production"}},"1.202609.11":{"name":"@gang-of-beads/pi-web","version":"1.202609.11","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@1.202609.11","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"21be9297a0c834cb7f0e68817ce358882538550c","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-1.202609.11.tgz","fileCount":418,"integrity":"sha512-n5JaLYXAdO5x6i3r3V92aZIiURhKWUc5pzoxOC3ubv9gAL6Mjew+z4E8pzNY48f0ykrAZi4Hl0wshDkoJmjpZg==","signatures":[{"sig":"MEQCIGOmnPb3SNackEN3WNAqO2SFLm8Q5sRTRQvU3SJsXI7sAiBMCVsRha1SUPp4vebpElAwI/3+6If8czx91nltqZaMGw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@1.202609.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6239685},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-1.202609.11.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-1.202609.11.tgz","_integrity":"sha512-n5JaLYXAdO5x6i3r3V92aZIiURhKWUc5pzoxOC3ubv9gAL6Mjew+z4E8pzNY48f0ykrAZi4Hl0wshDkoJmjpZg==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.10.0","typebox":"1.3.7","node-pty":"^1.1.0","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.1.4","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","@types/ws":"^8.18.1","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.84.4","@earendil-works/pi-agent-core":"^0.84.2","@earendil-works/pi-coding-agent":"^0.84.4"},"peerDependencies":{"@earendil-works/pi-ai":">=0.84.0","@earendil-works/pi-agent-core":">=0.84.0","@earendil-works/pi-coding-agent":">=0.84.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_1.202609.11_1788463162147_0.8212408134089044","host":"s3://npm-registry-packages-npm-production"}},"1.202609.12":{"name":"@gang-of-beads/pi-web","version":"1.202609.12","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@1.202609.12","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"b4432bf08a2fd46fd8e2ad85080a3a952e083d41","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-1.202609.12.tgz","fileCount":418,"integrity":"sha512-YL/12syIR4Et0TRsdEN1uRmhnnQJAwB+JkWKLJ9B9K8Lpqn18CbBJTlRVbRfOu0YXTd82rUu1oZBlndBNoo2aQ==","signatures":[{"sig":"MEQCIGAyMsM78XtxtJ3ALqp3Q5ZwUJGy7s89E52+ykYE0RPUAiBmOdT13yJheweGBHmYapgneO+EpGLa2U/k0t5HqH6QDg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@1.202609.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6281799},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-1.202609.12.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-1.202609.12.tgz","_integrity":"sha512-YL/12syIR4Et0TRsdEN1uRmhnnQJAwB+JkWKLJ9B9K8Lpqn18CbBJTlRVbRfOu0YXTd82rUu1oZBlndBNoo2aQ==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.10.0","typebox":"1.3.7","node-pty":"^1.1.0","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.1.4","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","@types/ws":"^8.18.1","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.84.4","@earendil-works/pi-agent-core":"^0.84.2","@earendil-works/pi-coding-agent":"^0.84.4"},"peerDependencies":{"@earendil-works/pi-ai":">=0.84.0","@earendil-works/pi-agent-core":">=0.84.0","@earendil-works/pi-coding-agent":">=0.84.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_1.202609.12_1788465169640_0.22643919928882728","host":"s3://npm-registry-packages-npm-production"}},"1.202609.14":{"name":"@gang-of-beads/pi-web","version":"1.202609.14","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@1.202609.14","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"88ae443db93db8cf613c7983903bbe5be3b0f526","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-1.202609.14.tgz","fileCount":418,"integrity":"sha512-VltPYy5ZQ9vBVoaVHjKTH4VVKUXM865lT3gQqR2RopbvRAiQMmuwgVLkvgMiiESH1JMDoeNaHjlWO1k6RhkzRQ==","signatures":[{"sig":"MEQCIDZKPqlDsWHLu610iupEjUuDyxBcZe8ZgM3SMacnShVEAiAx3w9zPSBYKEfUiHBeq0dolAiYknnFvu8OuXCCXKNbug==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@1.202609.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6286475},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-1.202609.14.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-1.202609.14.tgz","_integrity":"sha512-VltPYy5ZQ9vBVoaVHjKTH4VVKUXM865lT3gQqR2RopbvRAiQMmuwgVLkvgMiiESH1JMDoeNaHjlWO1k6RhkzRQ==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.10.0","typebox":"1.3.7","node-pty":"^1.1.0","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.1.4","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","@types/ws":"^8.18.1","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.84.4","@earendil-works/pi-agent-core":"^0.84.2","@earendil-works/pi-coding-agent":"^0.84.4"},"peerDependencies":{"@earendil-works/pi-ai":">=0.84.0","@earendil-works/pi-agent-core":">=0.84.0","@earendil-works/pi-coding-agent":">=0.84.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_1.202609.14_1788468101724_0.9500584567829202","host":"s3://npm-registry-packages-npm-production"}},"1.202609.15":{"name":"@gang-of-beads/pi-web","version":"1.202609.15","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@1.202609.15","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"512bf43de6a4b472a646f61263866750189d031b","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-1.202609.15.tgz","fileCount":418,"integrity":"sha512-v7dgjtTHdFsCpN67hyPzc0rKYfVexEer1jFlKQdfHFUTOfnb9u34uQ3JtjePh+tRaTaO/ZXGm8M75y//qfPrFw==","signatures":[{"sig":"MEYCIQDWT1v0423y1zo1P0f2ohKWBdr9LxaJ0Lp4iqCwsItSfAIhAKfEaRQjk29kwEjXJ/mA/FXNtZ04V9i9CI1XhTvtL3Wl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@1.202609.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6308197},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-1.202609.15.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-1.202609.15.tgz","_integrity":"sha512-v7dgjtTHdFsCpN67hyPzc0rKYfVexEer1jFlKQdfHFUTOfnb9u34uQ3JtjePh+tRaTaO/ZXGm8M75y//qfPrFw==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.17.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.10.0","typebox":"1.3.7","node-pty":"^1.1.0","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.1.4","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","@types/ws":"^8.18.1","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.84.4","@earendil-works/pi-agent-core":"^0.84.2","@earendil-works/pi-coding-agent":"^0.84.4"},"peerDependencies":{"@earendil-works/pi-ai":">=0.84.0","@earendil-works/pi-agent-core":">=0.84.0","@earendil-works/pi-coding-agent":">=0.84.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_1.202609.15_1788475988438_0.9514638601759167","host":"s3://npm-registry-packages-npm-production"}},"1.202609.16":{"name":"@gang-of-beads/pi-web","version":"1.202609.16","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@1.202609.16","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"37236865638ccc98f4df0535f387b6a7aa65e0f2","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-1.202609.16.tgz","fileCount":420,"integrity":"sha512-4o+KhVNq+HUAILO/64IgG8up959038xx75hdriPf4UhStAxhSgMDacvZYL0DHY2w39Bs60c3bu+n/1Mri6gAmg==","signatures":[{"sig":"MEYCIQC1iljhuJGeagjkpNs8dTJbh996eUUYUjzjBHfikCGn3gIhANcbwp5AnmRiWcFN4gGpjhALGDI+d954kn3WYmO0Ah0V","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@1.202609.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6338835},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-1.202609.16.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-1.202609.16.tgz","_integrity":"sha512-4o+KhVNq+HUAILO/64IgG8up959038xx75hdriPf4UhStAxhSgMDacvZYL0DHY2w39Bs60c3bu+n/1Mri6gAmg==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.10.0","typebox":"1.3.7","node-pty":"^1.1.0","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.1.4","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","@types/ws":"^8.18.1","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.84.4","@earendil-works/pi-agent-core":"^0.84.2","@earendil-works/pi-coding-agent":"^0.84.4"},"peerDependencies":{"@earendil-works/pi-ai":">=0.84.0","@earendil-works/pi-agent-core":">=0.84.0","@earendil-works/pi-coding-agent":">=0.84.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_1.202609.16_1788514999299_0.7083701581326753","host":"s3://npm-registry-packages-npm-production"}},"1.202609.17":{"name":"@gang-of-beads/pi-web","version":"1.202609.17","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@1.202609.17","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"47e29d4faad0021e9efce29269b53d743e9cb70c","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-1.202609.17.tgz","fileCount":420,"integrity":"sha512-gxXl9ig/ACW/UOukOH1ZVqH+7ShW/O6s3vOcalxHWilarO1m92/WLmaalXf7IF4DRzmYTgrIvbq74s+ikjuPtg==","signatures":[{"sig":"MEUCIES9+2g4CtZgARyqEVUapOsW8vk5Qm0oS8TD0Wpn6ZOOAiEAszXB2cMy4Y7oylurevMfxVwK+1rT8q76byx3zglYdns=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@1.202609.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6334930},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-1.202609.17.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-1.202609.17.tgz","_integrity":"sha512-gxXl9ig/ACW/UOukOH1ZVqH+7ShW/O6s3vOcalxHWilarO1m92/WLmaalXf7IF4DRzmYTgrIvbq74s+ikjuPtg==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","typebox":"1.3.7","node-pty":"^1.1.0","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","@types/ws":"^8.18.1","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.84.4","@earendil-works/pi-agent-core":"^0.84.2","@earendil-works/pi-coding-agent":"^0.84.4"},"peerDependencies":{"@earendil-works/pi-ai":">=0.84.0","@earendil-works/pi-agent-core":">=0.84.0","@earendil-works/pi-coding-agent":">=0.84.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_1.202609.17_1788522794111_0.776298672686434","host":"s3://npm-registry-packages-npm-production"}},"1.202609.18":{"name":"@gang-of-beads/pi-web","version":"1.202609.18","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@1.202609.18","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"df7fc1e5263751492e5914431d6da3141c1d9322","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-1.202609.18.tgz","fileCount":420,"integrity":"sha512-PjVrvileXCQ2U+kJz0mIK2yF1Rx/+gf9IvLkZnSS5e2GmhCMLThXkNN2hkLSvmvDbV0YciMR1QPkAazWSDZk2A==","signatures":[{"sig":"MEUCIQCFq+AYFNwJUqM8IQCJtByC7IZZ4ea6Nrj8iEg0x4Rc+AIgRWwHhDX0tzBz0D/F8dX8uN/eVaPXVgsjHhTGgC+Hk0g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@1.202609.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6334974},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-1.202609.18.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-1.202609.18.tgz","_integrity":"sha512-PjVrvileXCQ2U+kJz0mIK2yF1Rx/+gf9IvLkZnSS5e2GmhCMLThXkNN2hkLSvmvDbV0YciMR1QPkAazWSDZk2A==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","typebox":"1.3.7","node-pty":"^1.1.0","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.85.0","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","@types/ws":"^8.18.1","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.85.0","@earendil-works/pi-agent-core":"^0.85.0","@earendil-works/pi-coding-agent":"^0.85.0"},"peerDependencies":{"@earendil-works/pi-ai":">=0.84.0","@earendil-works/pi-agent-core":">=0.84.0","@earendil-works/pi-coding-agent":">=0.84.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_1.202609.18_1788530987005_0.9118970927759344","host":"s3://npm-registry-packages-npm-production"}},"2.202609.0":{"name":"@gang-of-beads/pi-web","version":"2.202609.0","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@2.202609.0","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"754fd3d74eb455e1458e610d9d4bc6f1cde6b9d6","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-2.202609.0.tgz","fileCount":651,"integrity":"sha512-1OOUwZdiCNNiu+hA9Ic8VO2PNNH9rpU6v1bnUZLzashX61Jp17AbWTDETAq48GPDs6U9f0BRb763Z9ahok7bow==","signatures":[{"sig":"MEYCIQCrVw8A3pFQIhn3v/3AzKkPl40TzycKZRyq3LF8IxOp+QIhALBKnZZXVLUJfB835tZ8UpvOEjsIkwKQW2oXvoRXzBUy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD7+e42jjQ1ET/k1dIKM3XQJVq/aFR+X9KdA/XIWn8dlgIgDGtoGcMSKrfn6RMK20+MUx2CO0Kk6rBwDys9y9tL68c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@2.202609.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13524296},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-2.202609.0.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts","import":"./dist/server-plugin-api.js"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"npm run build:plugin-api && tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs","build:plugin-api-package":"tsc -p tsconfig.plugin-api.json --outDir packages/pi-web-plugin-api/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-2.202609.0.tgz","_integrity":"sha512-1OOUwZdiCNNiu+hA9Ic8VO2PNNH9rpU6v1bnUZLzashX61Jp17AbWTDETAq48GPDs6U9f0BRb763Z9ahok7bow==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","mermaid":"^12.0.0","typebox":"1.3.7","node-pty":"^1.1.0","@types/ws":"^8.18.1","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.85.0","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.85.0","@earendil-works/pi-agent-core":"^0.85.0","@earendil-works/pi-coding-agent":"^0.85.0"},"peerDependencies":{"@earendil-works/pi-ai":">=0.85.0","@earendil-works/pi-agent-core":">=0.85.0","@earendil-works/pi-coding-agent":">=0.85.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_2.202609.0_1789711252387_0.6280278118950879","host":"s3://npm-registry-packages-npm-production"}},"2.202609.1":{"name":"@gang-of-beads/pi-web","version":"2.202609.1","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@2.202609.1","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"cd60d761438839d42580cf3c122211c3d7df99f7","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-2.202609.1.tgz","fileCount":651,"integrity":"sha512-2XPJB4mhOT5sJGPJ56CIrNXANWBkN1rQ+IWpkKrl69ctgidaFjxV3R8a/ieAo4rVCbdz0f36a70djUgHwrhiNw==","signatures":[{"sig":"MEQCIBJLs2Otni65qtEvyfzqYaSjTba3PNuFwILdo4pktgDoAiBnqSmxiTQkRWbTNUA0T1wFb3XpiXuE1KVrRlvA0iXebA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEwDI+f+Hzlc28FmBt5oEcssneqohgNRqqvgnBjVZaRZAiEArmZ+K8DY9uCiP1I65nrPC2X2SJteimw8hDS9ep5+QzA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@2.202609.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13535844},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-2.202609.1.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts","import":"./dist/plugin-api.js","default":"./dist/plugin-api.js"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts","import":"./dist/server-plugin-api.js"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"npm run build:plugin-api && tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs","build:plugin-api-package":"tsc -p tsconfig.plugin-api.json --outDir packages/pi-web-plugin-api/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-2.202609.1.tgz","_integrity":"sha512-2XPJB4mhOT5sJGPJ56CIrNXANWBkN1rQ+IWpkKrl69ctgidaFjxV3R8a/ieAo4rVCbdz0f36a70djUgHwrhiNw==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","mermaid":"^12.0.0","typebox":"1.3.7","node-pty":"^1.1.0","@types/ws":"^8.18.1","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.85.0","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.85.0","@earendil-works/pi-agent-core":"^0.85.0","@earendil-works/pi-coding-agent":"^0.85.0"},"peerDependencies":{"@earendil-works/pi-ai":">=0.85.0","@earendil-works/pi-agent-core":">=0.85.0","@earendil-works/pi-coding-agent":">=0.85.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_2.202609.1_1789737823910_0.3295113925608286","host":"s3://npm-registry-packages-npm-production"}},"2.202609.2":{"name":"@gang-of-beads/pi-web","version":"2.202609.2","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@2.202609.2","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"1d2fc9c2e2fe6ae9cb41c51576465474ddcfc28d","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-2.202609.2.tgz","fileCount":655,"integrity":"sha512-fGp5kMMR7AJTYHl2KEVGsLX0cUNpJgIT3k44NcC82abUT+XPm+f5qyJDLX5mx7ePQwsKtT17VriAq9roAOy3cw==","signatures":[{"sig":"MEUCIQD88VYyfjyvt+AdNAttlw8Cv5dzgfIbbc+x1MEuTHJDtwIgE8Q2IPjkFyaUSONjA4tA8aRGvLCQ7sQYjs3RgKA8ZD8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDoY/ged+h86edcPEYo2KkqvxLAcgH07N6SQlCLguS1kwIgFnH3hmKrPtZAGWkdVGWygnHagCxaZzFuUf8bg92bRC8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@2.202609.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13460579},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-2.202609.2.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts","import":"./dist/plugin-api.js","default":"./dist/plugin-api.js"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts","import":"./dist/server-plugin-api.js"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"npm run build:plugin-api && tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs","build:plugin-api-package":"tsc -p tsconfig.plugin-api.json --outDir packages/pi-web-plugin-api/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-2.202609.2.tgz","_integrity":"sha512-fGp5kMMR7AJTYHl2KEVGsLX0cUNpJgIT3k44NcC82abUT+XPm+f5qyJDLX5mx7ePQwsKtT17VriAq9roAOy3cw==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","mermaid":"^12.0.0","typebox":"1.3.7","node-pty":"^1.1.0","@types/ws":"^8.18.1","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.85.0","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.85.0","@earendil-works/pi-agent-core":"^0.85.0","@earendil-works/pi-coding-agent":"^0.85.0"},"peerDependencies":{"@earendil-works/pi-ai":">=0.85.0","@earendil-works/pi-agent-core":">=0.85.0","@earendil-works/pi-coding-agent":">=0.85.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_2.202609.2_1789745140126_0.2422127615818488","host":"s3://npm-registry-packages-npm-production"}},"2.202609.3":{"name":"@gang-of-beads/pi-web","version":"2.202609.3","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@2.202609.3","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"f7e8289a959e2cb5e266599bfcaf3f2dad17581c","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-2.202609.3.tgz","fileCount":664,"integrity":"sha512-KqEQnrN8Pf/f5xh8CZAtB8NtsLWGeitRdmrGKnOD87FwjuX2o0U1DJIZNwDZVA+xu12E7xMfR0Y1B/4u0unbmA==","signatures":[{"sig":"MEQCIC9ey72tXuLqFm+XZbyQ21H+4/JuJIs7TwvEK6SDiuVwAiAArVDZ9Rio0q0HEw7AWsUW1g3EF755F2hrva1HenvSuw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICeRBioqdMApckFN/847OMSTeLdBtW1qYBUZhLLCfwcUAiEA+gAOAlZvHk1fldR3sqqCRUSapLYa2LSgSooxaJDWmrA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@2.202609.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13509821},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-2.202609.3.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts","import":"./dist/plugin-api.js","default":"./dist/plugin-api.js"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts","import":"./dist/server-plugin-api.js"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"npm run build:plugin-api && tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs","build:plugin-api-package":"tsc -p tsconfig.plugin-api.json --outDir packages/pi-web-plugin-api/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-2.202609.3.tgz","_integrity":"sha512-KqEQnrN8Pf/f5xh8CZAtB8NtsLWGeitRdmrGKnOD87FwjuX2o0U1DJIZNwDZVA+xu12E7xMfR0Y1B/4u0unbmA==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","mermaid":"^12.0.0","typebox":"1.3.7","node-pty":"^1.1.0","@types/ws":"^8.18.1","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.85.0","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.85.0","@earendil-works/pi-agent-core":"^0.85.0","@earendil-works/pi-coding-agent":"^0.85.0"},"peerDependencies":{"@earendil-works/pi-ai":">=0.85.0","@earendil-works/pi-agent-core":">=0.85.0","@earendil-works/pi-coding-agent":">=0.85.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_2.202609.3_1789814152785_0.3651974473257147","host":"s3://npm-registry-packages-npm-production"}},"2.202609.4":{"name":"@gang-of-beads/pi-web","version":"2.202609.4","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@2.202609.4","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"9c531035926b6adc4689af10d030f64d2e39ec7e","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-2.202609.4.tgz","fileCount":665,"integrity":"sha512-KwBebQ7zbjZtQb0WN3bSLPzNahXWRQ5gS70NhUFEcomEcTE4U+ZUhlVEBTmWtXqSa5Z+xfXtAfP6P7+HPGz3Hw==","signatures":[{"sig":"MEQCIA9wNDbvqxfn9O43Qftrmg/KK1efOXcXblzV7vjzxl68AiAVK4YA4dLQYXUzT8EIgCTbTKIZo78qPgvniGKl5LFQjA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGa8Riex+5eBLeutwsu62yOXQZXSjbbALVVDcuDhg9lSAiBuy/lhJf5bngqYmBiQfmJkacUUNi8tKni7ufynkmpy2A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@2.202609.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13521602},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-2.202609.4.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts","import":"./dist/plugin-api.js","default":"./dist/plugin-api.js"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts","import":"./dist/server-plugin-api.js"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"npm run build:plugin-api && tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs","build:plugin-api-package":"tsc -p tsconfig.plugin-api.json --outDir packages/pi-web-plugin-api/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-2.202609.4.tgz","_integrity":"sha512-KwBebQ7zbjZtQb0WN3bSLPzNahXWRQ5gS70NhUFEcomEcTE4U+ZUhlVEBTmWtXqSa5Z+xfXtAfP6P7+HPGz3Hw==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","mermaid":"^12.0.0","typebox":"1.3.7","node-pty":"^1.1.0","@types/ws":"^8.18.1","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.85.0","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.85.0","@earendil-works/pi-agent-core":"^0.85.0","@earendil-works/pi-coding-agent":"^0.85.0"},"peerDependencies":{"@earendil-works/pi-ai":">=0.85.0","@earendil-works/pi-agent-core":">=0.85.0","@earendil-works/pi-coding-agent":">=0.85.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_2.202609.4_1789833743028_0.8489134070336168","host":"s3://npm-registry-packages-npm-production"}},"2.202609.5":{"name":"@gang-of-beads/pi-web","version":"2.202609.5","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@2.202609.5","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"0d85473b4462d427c03d35fed4d6347872970b41","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-2.202609.5.tgz","fileCount":665,"integrity":"sha512-OV2V4BA/5B4Gh4N8CGGLb6DE7YG+6gH/mxsn6Cam+XeQFg8xd0m7bDU0n6ODFTa0QKQOGgkXiPgNmBpCmoynFw==","signatures":[{"sig":"MEUCIQCtDJrO4lF3QeDU4giNsMgmTSvxIs59kWHMSRrLpFMDoAIgVkg4aX8OuIdWjQjjx4BLPRcTiPtNIrxhZIkHRJdihcs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIGzAMrsq/kCXr/b1oz99d+q3mN+8h2knNQNhDFywcTEtAiEA3psE7WSZiiaTtEK9lZBpdiN8mCbJHbNTrtUGHAxTEhE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@2.202609.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13528946},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-2.202609.5.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts","import":"./dist/plugin-api.js","default":"./dist/plugin-api.js"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts","import":"./dist/server-plugin-api.js"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"npm run build:plugin-api && tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs","build:plugin-api-package":"tsc -p tsconfig.plugin-api.json --outDir packages/pi-web-plugin-api/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-2.202609.5.tgz","_integrity":"sha512-OV2V4BA/5B4Gh4N8CGGLb6DE7YG+6gH/mxsn6Cam+XeQFg8xd0m7bDU0n6ODFTa0QKQOGgkXiPgNmBpCmoynFw==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","mermaid":"^12.0.0","typebox":"1.3.7","node-pty":"^1.1.0","@types/ws":"^8.18.1","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.85.0","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.85.0","@earendil-works/pi-agent-core":"^0.85.0","@earendil-works/pi-coding-agent":"^0.85.0"},"peerDependencies":{"@earendil-works/pi-ai":">=0.85.0","@earendil-works/pi-agent-core":">=0.85.0","@earendil-works/pi-coding-agent":">=0.85.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_2.202609.5_1789905578452_0.3191161157314537","host":"s3://npm-registry-packages-npm-production"}},"2.202609.6":{"name":"@gang-of-beads/pi-web","version":"2.202609.6","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@2.202609.6","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"74d3c4aa652b7f021d8bbaf68d39f61b4ebb4ee9","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-2.202609.6.tgz","fileCount":665,"integrity":"sha512-KgQ90sn/8YhuTQxHv04qk4pexBNy0R+RMqZGYtoDFMIYKtgH4/EF80cNReQSEMaBu0UxO+28ZtXFVwysKbdnbA==","signatures":[{"sig":"MEQCIHtChDJ8mZ7k7n12/ciLToxMAmyAMrQtHARu6VhCBznRAiBlVjZRUl9rGyP1nRHGiGDZ9CeAV3ShG3Wj+mqQ99sjBQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDQvDppwsIL6mYDvjvUy7jw1QQi1vRAThhZAzWy327zfAIgMvj7otI2QqZvleXCcT/eTT/W9b0R/7ECGNyu+AXmnEM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@2.202609.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13529231},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-2.202609.6.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts","import":"./dist/plugin-api.js","default":"./dist/plugin-api.js"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts","import":"./dist/server-plugin-api.js"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"npm run build:plugin-api && tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs","build:plugin-api-package":"tsc -p tsconfig.plugin-api.json --outDir packages/pi-web-plugin-api/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-2.202609.6.tgz","_integrity":"sha512-KgQ90sn/8YhuTQxHv04qk4pexBNy0R+RMqZGYtoDFMIYKtgH4/EF80cNReQSEMaBu0UxO+28ZtXFVwysKbdnbA==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","mermaid":"^12.0.0","typebox":"1.3.7","node-pty":"^1.1.0","@types/ws":"^8.18.1","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.85.0","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.85.0","@earendil-works/pi-agent-core":"^0.85.0","@earendil-works/pi-coding-agent":"^0.85.0"},"peerDependencies":{"@earendil-works/pi-ai":">=0.85.0","@earendil-works/pi-agent-core":">=0.85.0","@earendil-works/pi-coding-agent":">=0.85.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_2.202609.6_1789923966364_0.4961077905478535","host":"s3://npm-registry-packages-npm-production"}},"2.202609.7":{"name":"@gang-of-beads/pi-web","version":"2.202609.7","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@2.202609.7","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"1a4621899f6dac154116423164d4e0534411e296","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-2.202609.7.tgz","fileCount":675,"integrity":"sha512-PKsY6DhLRHjBQIUsGYv1+qBQhuSk6ZjJLS4cJe/H6tsfLw+Zl4H5mS7aJqVYvO6/1tKLdVhWywdGKufpZ3QCYA==","signatures":[{"sig":"MEUCIQDCwk2z3i2El//dyv3jg/kAYCtBZA7/02F9kW27y0insAIgTI6vx862K3CIGsIl/6zOMsl72ps0U5oyvn5S8U1Gj6I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIE9uXwkHli5PkLBCw3F9LgozLQApqDmfsfSFth789VNTAiEA0AlpNS/U76qnfeChWsV5P4I//8bXChZQjt9x4rpdiwI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@2.202609.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13606881},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-2.202609.7.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts","import":"./dist/plugin-api.js","default":"./dist/plugin-api.js"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts","import":"./dist/server-plugin-api.js"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"npm run build:plugin-api && tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs","build:plugin-api-package":"tsc -p tsconfig.plugin-api.json --outDir packages/pi-web-plugin-api/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-2.202609.7.tgz","_integrity":"sha512-PKsY6DhLRHjBQIUsGYv1+qBQhuSk6ZjJLS4cJe/H6tsfLw+Zl4H5mS7aJqVYvO6/1tKLdVhWywdGKufpZ3QCYA==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","mermaid":"^12.0.0","typebox":"1.3.7","node-pty":"^1.1.0","@types/ws":"^8.18.1","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.86.1","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.86.1","@earendil-works/pi-agent-core":"^0.86.1","@earendil-works/pi-coding-agent":"^0.86.1"},"peerDependencies":{"@earendil-works/pi-ai":">=0.86.1","@earendil-works/pi-agent-core":">=0.86.1","@earendil-works/pi-coding-agent":">=0.86.1"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_2.202609.7_1790018319386_0.5466975245478283","host":"s3://npm-registry-packages-npm-production"}},"2.202609.8":{"name":"@gang-of-beads/pi-web","version":"2.202609.8","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@2.202609.8","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"513033ff8cb05f11a9bfddf2983bfd188409372f","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-2.202609.8.tgz","fileCount":676,"integrity":"sha512-s5T+DQ+PCmYuaCv4RNaLI6BAj33whPPq743o/fJBBn/ZfRtc1e6v96pvNR/avl3uyaCvjrEGMCvKfx3m1eDHdw==","signatures":[{"sig":"MEUCIQCo4zZ7U5ccNZakaXNc1Z5yeJzYNJUCtRm8I77DtTUW3QIgWHMt7DcRlAcpgTQTc3OhtcPX6RMsWC0mMFAYvjUQfUU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIAunzLvYgu/sVKXjgCIJJk0krLhcUt7mqQcIgZKmOWA2AiB79vuSSz2tyk89CWtPKN5bmPDvvKWpXZCA6B5r78gZzw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@2.202609.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13643777},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-2.202609.8.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts","import":"./dist/plugin-api.js","default":"./dist/plugin-api.js"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts","import":"./dist/server-plugin-api.js"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"npm run build:plugin-api && tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs","build:plugin-api-package":"tsc -p tsconfig.plugin-api.json --outDir packages/pi-web-plugin-api/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-2.202609.8.tgz","_integrity":"sha512-s5T+DQ+PCmYuaCv4RNaLI6BAj33whPPq743o/fJBBn/ZfRtc1e6v96pvNR/avl3uyaCvjrEGMCvKfx3m1eDHdw==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","mermaid":"^12.0.0","typebox":"1.3.7","node-pty":"^1.1.0","@types/ws":"^8.18.1","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.86.1","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.86.1","@earendil-works/pi-agent-core":"^0.86.1","@earendil-works/pi-coding-agent":"^0.86.1"},"peerDependencies":{"@earendil-works/pi-ai":">=0.86.1","@earendil-works/pi-agent-core":">=0.86.1","@earendil-works/pi-coding-agent":">=0.86.1"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_2.202609.8_1790026496165_0.1501793022030995","host":"s3://npm-registry-packages-npm-production"}},"2.202609.9":{"name":"@gang-of-beads/pi-web","version":"2.202609.9","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@2.202609.9","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"5354ecf5f7ac252990434b253fb8cc9f12bc87e7","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-2.202609.9.tgz","fileCount":676,"integrity":"sha512-F7s7XKlzpC37SaEq8H+aweAd2Mql8Ey8D1//lrsScABLWt2wnn6rZ2n8Y3IuP7ugHtfDvJ13G47fw2HsSu1/pQ==","signatures":[{"sig":"MEUCIBJm1TaLpJSPVrind086D/1CDk6dapx5GiiVBMne2alHAiEA7JU0+X1RNNHjBdxbazf2UlInvCpXmN/9SzyAz24K1ls=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIA/5SNVZeAtC2oqJjTuNMUFk3f5DLU85Yt+cHb4KgKjgAiBLpQ8nvTjtu/85Sj0Tj+ueCjLpu1OrSB1jOzyvHLLNqA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@2.202609.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13646717},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-2.202609.9.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts","import":"./dist/plugin-api.js","default":"./dist/plugin-api.js"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts","import":"./dist/server-plugin-api.js"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"npm run build:plugin-api && tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs","fill-lockfile-integrity":"node scripts/fill-lockfile-integrity.mjs","build:plugin-api-package":"tsc -p tsconfig.plugin-api.json --outDir packages/pi-web-plugin-api/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-2.202609.9.tgz","_integrity":"sha512-F7s7XKlzpC37SaEq8H+aweAd2Mql8Ey8D1//lrsScABLWt2wnn6rZ2n8Y3IuP7ugHtfDvJ13G47fw2HsSu1/pQ==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","mermaid":"^12.0.0","typebox":"1.3.7","node-pty":"^1.1.0","@types/ws":"^8.18.1","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.87.0","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.87.0","@earendil-works/pi-agent-core":"^0.87.0","@earendil-works/pi-coding-agent":"^0.87.0"},"peerDependencies":{"@earendil-works/pi-ai":">=0.87.0","@earendil-works/pi-agent-core":">=0.87.0","@earendil-works/pi-coding-agent":">=0.87.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_2.202609.9_1790068454099_0.25680144274598327","host":"s3://npm-registry-packages-npm-production"}},"2.202609.10":{"name":"@gang-of-beads/pi-web","version":"2.202609.10","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@2.202609.10","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"cd8891513c73207e3a827dd20fe23ab380e24e72","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-2.202609.10.tgz","fileCount":678,"integrity":"sha512-TLqX/xRPsbQwI6MjZZ3IZpv09bF3r/7Rqx2tO6u9KHCiltR/mRk1Xu+qtZBt510XbG0Q1YFCvfn/geiH50uejg==","signatures":[{"sig":"MEUCIBSt1FUQRjkz5QjQSVwLCrCkNBCIsJe6N5PEukIEAezRAiEAljAeE5MrnZYlngQPP4nAqdQ2RcE69eOCWurJ0/IfzoU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIF4kVR/lUOQSD7Lig1VyaBlTCSABtU8RRt2W/+fltdY+AiBp5p9DuKHCPNETN7cc/6OZ5slOMSvdD5PVXZ+BPc+d5Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@2.202609.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13653581},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-2.202609.10.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts","import":"./dist/plugin-api.js","default":"./dist/plugin-api.js"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts","import":"./dist/server-plugin-api.js"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"npm run build:plugin-api && tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs","fill-lockfile-integrity":"node scripts/fill-lockfile-integrity.mjs","build:plugin-api-package":"tsc -p tsconfig.plugin-api.json --outDir packages/pi-web-plugin-api/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-2.202609.10.tgz","_integrity":"sha512-TLqX/xRPsbQwI6MjZZ3IZpv09bF3r/7Rqx2tO6u9KHCiltR/mRk1Xu+qtZBt510XbG0Q1YFCvfn/geiH50uejg==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","mermaid":"^12.0.0","typebox":"1.3.7","node-pty":"^1.1.0","@types/ws":"^8.18.1","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.87.0","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.87.0","@earendil-works/pi-agent-core":"^0.87.0","@earendil-works/pi-coding-agent":"^0.87.0"},"peerDependencies":{"@earendil-works/pi-ai":">=0.87.0","@earendil-works/pi-agent-core":">=0.87.0","@earendil-works/pi-coding-agent":">=0.87.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_2.202609.10_1790082736832_0.4296263669888527","host":"s3://npm-registry-packages-npm-production"}},"2.202609.11":{"name":"@gang-of-beads/pi-web","version":"2.202609.11","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@2.202609.11","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"616282b85358aab7af8941e51f6434e5e0900e5c","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-2.202609.11.tgz","fileCount":678,"integrity":"sha512-i+36cOd8yLRD36xCPOySmcRuGx34I0bidD3zLm2pcN2WLt7HjL5y2HhwPsyndSALoln7vnRmVnBo9aX4jmUiQA==","signatures":[{"sig":"MEQCIBPDCInkcQMqJlRfHLxZv4jn8LXSl5tUiq0Eh/7ONt/3AiA1RGSbUQMOWHgtOZhNE0EylItWMMBpmPfRSinbGSGYNw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICCqXDwOCVvn2Dt/CFIvtOj2FmMPqK1QISSZfS9vE7FvAiEAz1iuh7hN85DBq4rOsXjA9/0mdA7yl5jBZpoMK5WJbSA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@2.202609.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13651978},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-2.202609.11.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts","import":"./dist/plugin-api.js","default":"./dist/plugin-api.js"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts","import":"./dist/server-plugin-api.js"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"npm run build:plugin-api && tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs","fill-lockfile-integrity":"node scripts/fill-lockfile-integrity.mjs","build:plugin-api-package":"tsc -p tsconfig.plugin-api.json --outDir packages/pi-web-plugin-api/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-2.202609.11.tgz","_integrity":"sha512-i+36cOd8yLRD36xCPOySmcRuGx34I0bidD3zLm2pcN2WLt7HjL5y2HhwPsyndSALoln7vnRmVnBo9aX4jmUiQA==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","mermaid":"^12.0.0","typebox":"1.3.7","node-pty":"^1.1.0","@types/ws":"^8.18.1","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.87.0","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.87.0","@earendil-works/pi-agent-core":"^0.87.0","@earendil-works/pi-coding-agent":"^0.87.0"},"peerDependencies":{"@earendil-works/pi-ai":">=0.87.0","@earendil-works/pi-agent-core":">=0.87.0","@earendil-works/pi-coding-agent":">=0.87.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_2.202609.11_1790199559105_0.2636808534517432","host":"s3://npm-registry-packages-npm-production"}},"2.202609.12":{"name":"@gang-of-beads/pi-web","version":"2.202609.12","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@2.202609.12","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"ef84c23c7abbfae1fae300f9aed50cc9e9ee936c","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-2.202609.12.tgz","fileCount":678,"integrity":"sha512-mOy0TlGo9u5dW/6FtTUXv2lUD9oVxl8974tik9GoyPkrCFLBPiy2nsQXUuWpVCzsrnSPV+6wU/5Hc5Jk/X306w==","signatures":[{"sig":"MEYCIQCyK9ak8CHlKgFQeAckesE6phI2xNnJByIdXbacApFWKgIhALr2TbBuZijhUl2LiDdPY9976iai3Y72c+xgDdjz1LIy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDIniP8m7ilHopNX4KCctesSI0cxQYw+s19nddUqLjbiAIhAOHiP6nkGB6QBwXTLiidYmeuedQTACF1isUSKeh6YM7/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@2.202609.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13657732},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-2.202609.12.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts","import":"./dist/plugin-api.js","default":"./dist/plugin-api.js"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts","import":"./dist/server-plugin-api.js"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"npm run build:plugin-api && tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs","fill-lockfile-integrity":"node scripts/fill-lockfile-integrity.mjs","build:plugin-api-package":"tsc -p tsconfig.plugin-api.json --outDir packages/pi-web-plugin-api/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-2.202609.12.tgz","_integrity":"sha512-mOy0TlGo9u5dW/6FtTUXv2lUD9oVxl8974tik9GoyPkrCFLBPiy2nsQXUuWpVCzsrnSPV+6wU/5Hc5Jk/X306w==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","mermaid":"^12.0.0","typebox":"1.3.7","node-pty":"^1.1.0","@types/ws":"^8.18.1","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.87.1","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.87.1","@earendil-works/pi-agent-core":"^0.87.1","@earendil-works/pi-coding-agent":"^0.87.1"},"peerDependencies":{"@earendil-works/pi-ai":">=0.87.0","@earendil-works/pi-agent-core":">=0.87.0","@earendil-works/pi-coding-agent":">=0.87.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_2.202609.12_1790322007857_0.8350704199904262","host":"s3://npm-registry-packages-npm-production"}},"2.202609.13":{"name":"@gang-of-beads/pi-web","version":"2.202609.13","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@2.202609.13","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"6249195a365017a8f711f784130b0943e14294be","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-2.202609.13.tgz","fileCount":678,"integrity":"sha512-G7vrEocCbAuibUmf6e/wJTuBatAc58kkBXpwW5kN6ZUWSQFr7S0MlBXxAodmzUh+7IrN//HLFt+nSJMUBL+54w==","signatures":[{"sig":"MEUCIQDOyaNuysXuNsKqDqlEE+s6YyHfH5m7U/Aum+6GsLW8sgIgUNjpbYKqwdta55EeX4E1G81o7WwyVyJYedu4hvX27iw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFmXs0UnRcyEoxLsjHRwRdmy8yYUWvFLPOPSm4YDCNYmAiAMDYFELjwO2Yl6DziyBIzjAkyUjpiaMa8EsyLUEwWwZw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@2.202609.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13660684},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-2.202609.13.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts","import":"./dist/plugin-api.js","default":"./dist/plugin-api.js"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts","import":"./dist/server-plugin-api.js"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"npm run build:plugin-api && tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs","fill-lockfile-integrity":"node scripts/fill-lockfile-integrity.mjs","build:plugin-api-package":"tsc -p tsconfig.plugin-api.json --outDir packages/pi-web-plugin-api/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-2.202609.13.tgz","_integrity":"sha512-G7vrEocCbAuibUmf6e/wJTuBatAc58kkBXpwW5kN6ZUWSQFr7S0MlBXxAodmzUh+7IrN//HLFt+nSJMUBL+54w==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","mermaid":"^12.0.0","typebox":"1.3.7","node-pty":"^1.1.0","@types/ws":"^8.18.1","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.87.1","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.87.1","@earendil-works/pi-agent-core":"^0.87.1","@earendil-works/pi-coding-agent":"^0.87.1"},"peerDependencies":{"@earendil-works/pi-ai":">=0.87.0","@earendil-works/pi-agent-core":">=0.87.0","@earendil-works/pi-coding-agent":">=0.87.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_2.202609.13_1790356126416_0.5504953511007764","host":"s3://npm-registry-packages-npm-production"}},"2.202609.14":{"name":"@gang-of-beads/pi-web","version":"2.202609.14","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@2.202609.14","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"4e6697e9226cb508cffeb3570a6f8d3a02602116","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-2.202609.14.tgz","fileCount":678,"integrity":"sha512-XBevZG2UzrQfj3jFFhbkqjqZ3Wqw7E/kqXVMI9EwiLUgjst41oPI6xgxCD+cUIK7sWlhLJZ6fQ9Wt7BSqBI55Q==","signatures":[{"sig":"MEUCIQCgn815SzqnEz+ovfS7xVpqyiRQZ55nffhFj7hU3Dv6WQIgJ3BSCx0nkGq6kPNPY96wazmsMXn5M5VByisbk+N17Go=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIE/GbmuRbgyFl63r7dMOb7k58SNjz7Xdfo/qa6rlhEFwAiEAxRyqu0XL+7Cech8gSXA7rTEk9NyiJ0VX03qP2pqw7fE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@2.202609.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13661327},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-2.202609.14.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts","import":"./dist/plugin-api.js","default":"./dist/plugin-api.js"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts","import":"./dist/server-plugin-api.js"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"npm run build:plugin-api && tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs","fill-lockfile-integrity":"node scripts/fill-lockfile-integrity.mjs","build:plugin-api-package":"tsc -p tsconfig.plugin-api.json --outDir packages/pi-web-plugin-api/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-2.202609.14.tgz","_integrity":"sha512-XBevZG2UzrQfj3jFFhbkqjqZ3Wqw7E/kqXVMI9EwiLUgjst41oPI6xgxCD+cUIK7sWlhLJZ6fQ9Wt7BSqBI55Q==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","mermaid":"^12.0.0","typebox":"1.3.7","node-pty":"^1.1.0","@types/ws":"^8.18.1","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.87.1","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.87.1","@earendil-works/pi-agent-core":"^0.87.1","@earendil-works/pi-coding-agent":"^0.87.1"},"peerDependencies":{"@earendil-works/pi-ai":">=0.87.0","@earendil-works/pi-agent-core":">=0.87.0","@earendil-works/pi-coding-agent":">=0.87.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_2.202609.14_1790373649710_0.04921160135224789","host":"s3://npm-registry-packages-npm-production"}},"2.202609.15":{"name":"@gang-of-beads/pi-web","version":"2.202609.15","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@2.202609.15","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"8fafea4221f4d04dbafb500155cdda1e4ae893a4","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-2.202609.15.tgz","fileCount":680,"integrity":"sha512-/D9UMWzJnL228tAdT2po3luP0hdFWI6huw9Wy8Fot/k7yv5ZOPG1DERbsPhkTRTW8ynDFYwHlq0+afDEyIEwXg==","signatures":[{"sig":"MEUCIEjnsdhEG2ALgi3PY+LUuODjySZYzTVoXmR+EpfI1xBeAiEA6VmcTlfJMT1GxQVRydXiyduOTgqgjQWlxxe+PaO9O/Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIE+MR9CwlwAXFn93+Ds8akgG7fiBVFISnP1YLBbozmkJAiEA6eSvPTcZ9swn3/EhwRQG0LCJq4uAMB3wvbv1FNdsxpo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@2.202609.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13684890},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-2.202609.15.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts","import":"./dist/plugin-api.js","default":"./dist/plugin-api.js"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts","import":"./dist/server-plugin-api.js"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"npm run build:plugin-api && tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs","fill-lockfile-integrity":"node scripts/fill-lockfile-integrity.mjs","build:plugin-api-package":"tsc -p tsconfig.plugin-api.json --outDir packages/pi-web-plugin-api/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-2.202609.15.tgz","_integrity":"sha512-/D9UMWzJnL228tAdT2po3luP0hdFWI6huw9Wy8Fot/k7yv5ZOPG1DERbsPhkTRTW8ynDFYwHlq0+afDEyIEwXg==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","mermaid":"^12.0.0","typebox":"1.3.7","node-pty":"^1.1.0","@types/ws":"^8.18.1","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.87.1","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.87.1","@earendil-works/pi-agent-core":"^0.87.1","@earendil-works/pi-coding-agent":"^0.87.1"},"peerDependencies":{"@earendil-works/pi-ai":">=0.87.0","@earendil-works/pi-agent-core":">=0.87.0","@earendil-works/pi-coding-agent":">=0.87.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_2.202609.15_1790420648375_0.9627341405642602","host":"s3://npm-registry-packages-npm-production"}},"2.202609.16":{"name":"@gang-of-beads/pi-web","version":"2.202609.16","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@2.202609.16","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"4eecbdb4eb3510fba0d98c78a36409a4c36d36bf","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-2.202609.16.tgz","fileCount":680,"integrity":"sha512-5450089VNhAOpJ3XpJlt3Ox/k6oINN5Vah5+xBSS4AedVP/ZRF1A4O2WGShXqkDJhko2RJ3EPSNiXN8rbAu2nA==","signatures":[{"sig":"MEUCIQDqiIH8mhXr2zRAvp/ypqB+azZwRy1b1p92TOEhgkCU6gIgf/2MEScuqvMChyqB2NOq7W397zaOaLpBgFzK6/eEGAM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCHoGqBeoaDQFdo/szwEcevVTHf8B1Y1p7YhJp8nUz4awIhALl/2Pu3jbbhcLmRr+2r1JOfGLlhgOeC5WzdHDB1mSFd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@2.202609.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13688600},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-2.202609.16.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts","import":"./dist/plugin-api.js","default":"./dist/plugin-api.js"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts","import":"./dist/server-plugin-api.js"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"npm run build:plugin-api && tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs","fill-lockfile-integrity":"node scripts/fill-lockfile-integrity.mjs","build:plugin-api-package":"tsc -p tsconfig.plugin-api.json --outDir packages/pi-web-plugin-api/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-2.202609.16.tgz","_integrity":"sha512-5450089VNhAOpJ3XpJlt3Ox/k6oINN5Vah5+xBSS4AedVP/ZRF1A4O2WGShXqkDJhko2RJ3EPSNiXN8rbAu2nA==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","mermaid":"^12.0.0","typebox":"1.3.7","node-pty":"^1.1.0","@types/ws":"^8.18.1","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.87.1","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.87.1","@earendil-works/pi-agent-core":"^0.87.1","@earendil-works/pi-coding-agent":"^0.87.1"},"peerDependencies":{"@earendil-works/pi-ai":">=0.87.0","@earendil-works/pi-agent-core":">=0.87.0","@earendil-works/pi-coding-agent":">=0.87.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_2.202609.16_1790460084723_0.762491241533586","host":"s3://npm-registry-packages-npm-production"}},"2.202609.17":{"name":"@gang-of-beads/pi-web","version":"2.202609.17","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@2.202609.17","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"f8915c6b46c75c38da20eb51800e774d9d0ff5ba","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-2.202609.17.tgz","fileCount":680,"integrity":"sha512-eXm2Je8or2ZPn6vVTPuIUJJuDR30JGK6UNprraRuCou1wYj7OkcwHlVXg7paf+0oEFRE1sckqTmVNJolyxzIVg==","signatures":[{"sig":"MEYCIQCyYYhoegYT0AYtQX91H8Va8DqpZkSIAep8n1U/fjr4pAIhAOk75yCcvap+NYl1PpgY3XFDoqTCSKRF91Nq9LVVmVEf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDXQHl2EERjkmn8JuKyhCn2gFgefJRXjDjyAQMltmR3rgIgUG0yioVpsPVWHrh4iu1lLTXW6pkWooC9mE/KZb0hmeQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@2.202609.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13690408},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-2.202609.17.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts","import":"./dist/plugin-api.js","default":"./dist/plugin-api.js"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts","import":"./dist/server-plugin-api.js"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"npm run build:plugin-api && tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs","fill-lockfile-integrity":"node scripts/fill-lockfile-integrity.mjs","build:plugin-api-package":"tsc -p tsconfig.plugin-api.json --outDir packages/pi-web-plugin-api/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-2.202609.17.tgz","_integrity":"sha512-eXm2Je8or2ZPn6vVTPuIUJJuDR30JGK6UNprraRuCou1wYj7OkcwHlVXg7paf+0oEFRE1sckqTmVNJolyxzIVg==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","mermaid":"^12.0.0","typebox":"1.3.7","node-pty":"^1.1.0","@types/ws":"^8.18.1","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.87.1","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.87.1","@earendil-works/pi-agent-core":"^0.87.1","@earendil-works/pi-coding-agent":"^0.87.1"},"peerDependencies":{"@earendil-works/pi-ai":">=0.87.0","@earendil-works/pi-agent-core":">=0.87.0","@earendil-works/pi-coding-agent":">=0.87.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_2.202609.17_1790497125310_0.25478403185363807","host":"s3://npm-registry-packages-npm-production"}},"2.202609.19":{"name":"@gang-of-beads/pi-web","version":"2.202609.19","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@2.202609.19","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"ce58fef1faa9e1ee5f41f2975e648a7e0c970d33","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-2.202609.19.tgz","fileCount":680,"integrity":"sha512-0jmqUojzUwDFsUN1eMXgib5yh8aU+tn9GiJRvT8j94BwMt4aRPhDklEVS2cbYB+0K94t7x91zyn9Qzyv0Rjslw==","signatures":[{"sig":"MEUCIQD9dBJK6sCXnMH+kvUv6o4epJZCsTaUpTMEgGsXczKzogIgZP7ka6ES+k3goO0qC4UIoE3O9tJ03c1wlu50VSqUq54=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCTMzYrnw6PL0s7LkNVAavSm6HfWaAW78M63bpdvjiQtgIhANeulPydtdmH05kUmOuzqUZTP0UlwoJgJHiNdF7911Re","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@2.202609.19","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13701132},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-2.202609.19.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts","import":"./dist/plugin-api.js","default":"./dist/plugin-api.js"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts","import":"./dist/server-plugin-api.js"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"npm run build:plugin-api && tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs","fill-lockfile-integrity":"node scripts/fill-lockfile-integrity.mjs","build:plugin-api-package":"tsc -p tsconfig.plugin-api.json --outDir packages/pi-web-plugin-api/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-2.202609.19.tgz","_integrity":"sha512-0jmqUojzUwDFsUN1eMXgib5yh8aU+tn9GiJRvT8j94BwMt4aRPhDklEVS2cbYB+0K94t7x91zyn9Qzyv0Rjslw==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","mermaid":"^12.0.0","typebox":"1.3.7","node-pty":"^1.1.0","@types/ws":"^8.18.1","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.87.1","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.87.1","@earendil-works/pi-agent-core":"^0.87.1","@earendil-works/pi-coding-agent":"^0.87.1"},"peerDependencies":{"@earendil-works/pi-ai":">=0.87.0","@earendil-works/pi-agent-core":">=0.87.0","@earendil-works/pi-coding-agent":">=0.87.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_2.202609.19_1790577826136_0.41662181748933147","host":"s3://npm-registry-packages-npm-production"}},"2.202609.18":{"name":"@gang-of-beads/pi-web","version":"2.202609.18","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@2.202609.18","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"b86c76251eeacf18c8fa171bc32b4d59d666f3ba","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-2.202609.18.tgz","fileCount":680,"integrity":"sha512-LkfJVRoc0zKcapoDJKe0vCexIFv73lSRGzB7gHIEEXBFouErKqrqbPtEDgFwdKqt6xHcMrxzGYXO4TDFqeF1fg==","signatures":[{"sig":"MEUCIQDVr6H04VYdRedoBtmHt/7hn6AWntwR5Agj9drSxsMH6wIgIDHcNI1NyqMel4+FISayIqgFA0IdPpT0daFOmtVdthE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIG79og/NAVlgXRPpGV85kO6JrxXf9HGuG+DRfYp6tSlsAiEAh7xCgZQmX8dqj1PFHg/p+ESh1beWUjREIUYYtJYbQOc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@2.202609.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13700799},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-2.202609.18.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts","import":"./dist/plugin-api.js","default":"./dist/plugin-api.js"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts","import":"./dist/server-plugin-api.js"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"npm run build:plugin-api && tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs","fill-lockfile-integrity":"node scripts/fill-lockfile-integrity.mjs","build:plugin-api-package":"tsc -p tsconfig.plugin-api.json --outDir packages/pi-web-plugin-api/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-2.202609.18.tgz","_integrity":"sha512-LkfJVRoc0zKcapoDJKe0vCexIFv73lSRGzB7gHIEEXBFouErKqrqbPtEDgFwdKqt6xHcMrxzGYXO4TDFqeF1fg==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","mermaid":"^12.0.0","typebox":"1.3.7","node-pty":"^1.1.0","@types/ws":"^8.18.1","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.87.1","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","readmeFilename":"README.md","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.87.1","@earendil-works/pi-agent-core":"^0.87.1","@earendil-works/pi-coding-agent":"^0.87.1"},"peerDependencies":{"@earendil-works/pi-ai":">=0.87.0","@earendil-works/pi-agent-core":">=0.87.0","@earendil-works/pi-coding-agent":">=0.87.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_2.202609.18_1790577836427_0.9017667697127154","host":"s3://npm-registry-packages-npm-production"}},"2.202609.20":{"name":"@gang-of-beads/pi-web","version":"2.202609.20","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@2.202609.20","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"e8d9c9f92059c13d19d9f73a4234c6d0740cea50","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-2.202609.20.tgz","fileCount":680,"integrity":"sha512-xG5uzxMvZeeJl1ye0yugDcUUZXN4NPR5OwyMKIYeKM9u9zzF7vUHMqUL7bUZWFARab1vY6ecEFpSGrBN6K/dJQ==","signatures":[{"sig":"MEUCIHdOtm3C2qBrsxToUBOSCW6oDa3xPkuW5UjaPrf0CptIAiEAl4Z9AcE7W/X1i2Mus3F7LXVVLlRUDgAV8BsHfYZu8Ps=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDJp7kkgyDa3F/UpuLRjmiRWjckwjxsgS9BrjyX722PHQIhALtd5JbGo4SNB9F/umEn+TYxVanvV50UxlM89VqawDVO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@2.202609.20","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13701787},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-2.202609.20.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts","import":"./dist/plugin-api.js","default":"./dist/plugin-api.js"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts","import":"./dist/server-plugin-api.js"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"npm run build:plugin-api && tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs","fill-lockfile-integrity":"node scripts/fill-lockfile-integrity.mjs","build:plugin-api-package":"tsc -p tsconfig.plugin-api.json --outDir packages/pi-web-plugin-api/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-2.202609.20.tgz","_integrity":"sha512-xG5uzxMvZeeJl1ye0yugDcUUZXN4NPR5OwyMKIYeKM9u9zzF7vUHMqUL7bUZWFARab1vY6ecEFpSGrBN6K/dJQ==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","mermaid":"^12.0.0","typebox":"1.3.7","node-pty":"^1.1.0","@types/ws":"^8.18.1","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.87.1","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.87.1","@earendil-works/pi-agent-core":"^0.87.1","@earendil-works/pi-coding-agent":"^0.87.1"},"peerDependencies":{"@earendil-works/pi-ai":">=0.87.0","@earendil-works/pi-agent-core":">=0.87.0","@earendil-works/pi-coding-agent":">=0.87.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_2.202609.20_1790579234688_0.43755435402365483","host":"s3://npm-registry-packages-npm-production"}},"2.202609.21":{"name":"@gang-of-beads/pi-web","version":"2.202609.21","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@2.202609.21","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"7915539ef25e1eb8c9922913d7d4b9dd6044f1b6","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-2.202609.21.tgz","fileCount":680,"integrity":"sha512-wa4h2iL+kI8vP+dyh8qV4ikuYj8X4f9wjGaVUXlHW+Z3H8/ypToXnmvUkQngvCsTttdqPjc+FmZ+6BXuEV4WdQ==","signatures":[{"sig":"MEUCIFYCEgR0N+J7O9+5fDB/06oMLVneb/AjGU9sN2eHRJX1AiEA96rJ7y+3d8bNDSF29OVY317EhSkPd7D9An4s8vQkuLQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDqphFpMQqnx6ZILuPT0m2b/8PZ3UJCw74C+XAWSFcNrAIgSYSzmcdxPdEUhjNVJ6ixjxNxiw/C4GGz9SiK5Z+BMtE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@2.202609.21","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13703634},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-2.202609.21.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts","import":"./dist/plugin-api.js","default":"./dist/plugin-api.js"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts","import":"./dist/server-plugin-api.js"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"npm run build:plugin-api && tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs","fill-lockfile-integrity":"node scripts/fill-lockfile-integrity.mjs","build:plugin-api-package":"tsc -p tsconfig.plugin-api.json --outDir packages/pi-web-plugin-api/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-2.202609.21.tgz","_integrity":"sha512-wa4h2iL+kI8vP+dyh8qV4ikuYj8X4f9wjGaVUXlHW+Z3H8/ypToXnmvUkQngvCsTttdqPjc+FmZ+6BXuEV4WdQ==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","mermaid":"^12.0.0","typebox":"1.3.7","node-pty":"^1.1.0","@types/ws":"^8.18.1","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.87.1","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.87.1","@earendil-works/pi-agent-core":"^0.87.1","@earendil-works/pi-coding-agent":"^0.87.1"},"peerDependencies":{"@earendil-works/pi-ai":">=0.87.0","@earendil-works/pi-agent-core":">=0.87.0","@earendil-works/pi-coding-agent":">=0.87.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_2.202609.21_1790584572927_0.5562378291148942","host":"s3://npm-registry-packages-npm-production"}},"2.202609.22":{"name":"@gang-of-beads/pi-web","version":"2.202609.22","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@2.202609.22","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"e9f3595b6357a6ebacae88f91d674f77b0fe6a4d","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-2.202609.22.tgz","fileCount":680,"integrity":"sha512-nEYQIRG0FqcriIbAuafy8XPJ6Wym4le7bQX5nOolTK203TJn9qyeZMeT482AQrN0IpcKwBUl8YRUUMe1NQ/QGQ==","signatures":[{"sig":"MEYCIQCxyRI7vmi+5LvdYGM4XDYmRK6MBsYTonYQN8Ln5jIlXwIhANn6gskH+atFZQW8OOBCsFy4hFSj9hFDImCQTEDL+lkT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDxsh65bW/PAA2/oQLYhSadYA4SmmDrjf9QqUBx/DkIvgIgcfQW54ydC4p8C4NziAeqeV5AyK6s0FBpHZ7Wrks4MBk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@2.202609.22","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13709503},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-2.202609.22.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts","import":"./dist/plugin-api.js","default":"./dist/plugin-api.js"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts","import":"./dist/server-plugin-api.js"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"npm run build:plugin-api && tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs","fill-lockfile-integrity":"node scripts/fill-lockfile-integrity.mjs","build:plugin-api-package":"tsc -p tsconfig.plugin-api.json --outDir packages/pi-web-plugin-api/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-2.202609.22.tgz","_integrity":"sha512-nEYQIRG0FqcriIbAuafy8XPJ6Wym4le7bQX5nOolTK203TJn9qyeZMeT482AQrN0IpcKwBUl8YRUUMe1NQ/QGQ==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","mermaid":"^12.0.0","typebox":"1.3.7","node-pty":"^1.1.0","@types/ws":"^8.18.1","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.87.1","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.87.1","@earendil-works/pi-agent-core":"^0.87.1","@earendil-works/pi-coding-agent":"^0.87.1"},"peerDependencies":{"@earendil-works/pi-ai":">=0.87.0","@earendil-works/pi-agent-core":">=0.87.0","@earendil-works/pi-coding-agent":">=0.87.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_2.202609.22_1790592812912_0.9924912194011279","host":"s3://npm-registry-packages-npm-production"}},"2.202609.26":{"name":"@gang-of-beads/pi-web","version":"2.202609.26","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@2.202609.26","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"ba7d234040688481d4d24d9b9e1e6b0a51fa6439","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-2.202609.26.tgz","fileCount":680,"integrity":"sha512-GDQ9qSven/6HWX8cD131mRp6OobWd2SXs+tIWgPlu26ICHnY9t4OINERgLCZCfWhR5swykOte/SRR7C0kDIO5w==","signatures":[{"sig":"MEUCIGSO1e9669dnfY5G6e0oXRzTr0HkC5W6A+Y3ZPDYsHeDAiEA/BClUH6kGgSM1bhfxYBAG+9S5sU/sGHAWm02pRyhmNI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDe05ngQzZVjJzRnQA5mHt7Txcin5aaqqeKyUR1cPbVygIgEBjSDfnuxpEn5wWFKUcVOKe+AfE2x5n5LpZXSStGmfA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@2.202609.26","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13717496},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-2.202609.26.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts","import":"./dist/plugin-api.js","default":"./dist/plugin-api.js"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts","import":"./dist/server-plugin-api.js"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"npm run build:plugin-api && tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs","fill-lockfile-integrity":"node scripts/fill-lockfile-integrity.mjs","build:plugin-api-package":"tsc -p tsconfig.plugin-api.json --outDir packages/pi-web-plugin-api/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-2.202609.26.tgz","_integrity":"sha512-GDQ9qSven/6HWX8cD131mRp6OobWd2SXs+tIWgPlu26ICHnY9t4OINERgLCZCfWhR5swykOte/SRR7C0kDIO5w==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","mermaid":"^12.0.0","typebox":"1.3.7","node-pty":"^1.1.0","@types/ws":"^8.18.1","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.87.1","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.87.1","@earendil-works/pi-agent-core":"^0.87.1","@earendil-works/pi-coding-agent":"^0.87.1"},"peerDependencies":{"@earendil-works/pi-ai":">=0.87.0","@earendil-works/pi-agent-core":">=0.87.0","@earendil-works/pi-coding-agent":">=0.87.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_2.202609.26_1790601635004_0.9268660214730449","host":"s3://npm-registry-packages-npm-production"}},"2.202609.27":{"name":"@gang-of-beads/pi-web","version":"2.202609.27","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"author":{"name":"Gang of Beads"},"license":"MIT","_id":"@gang-of-beads/pi-web@2.202609.27","maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"contributors":[{"name":"Federico Jaramillo Martinez"}],"homepage":"https://github.com/Gang-of-Beads/pi-web","bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"dist":{"shasum":"0715b07a8e74ff08bda728e9c0ee177a01f166c1","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-2.202609.27.tgz","fileCount":682,"integrity":"sha512-JLUW3Aop56/4dZXdhzExn3kR5CofZdWPfoCMeM4xTm+pXy3QqDrB1vru6TdNEQMUjCvhxWN32U36VvMLPbeF3A==","signatures":[{"sig":"MEUCIQDCm0rKuVnVu7ot/SuDX89L0qgiJAl5Cv/oOombBB7z8wIgQTnp0cifXiGdQMEQZEsMNg7Qdby44e6teGp6dwQmDmc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDlMMyqinL8zmalYV/C1FE7t2LaB8nF/zBfABYt55O1egIhAP+4YSkzXCbh4quvZj8ybCYP37t9h+oOttaKnRzMt9tF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@2.202609.27","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13756672},"type":"module","_from":"file:pack-out/gang-of-beads-pi-web-2.202609.27.tgz","engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts","import":"./dist/plugin-api.js","default":"./dist/plugin-api.js"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts","import":"./dist/server-plugin-api.js"}},"scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"npm run build:plugin-api && tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs","fill-lockfile-integrity":"node scripts/fill-lockfile-integrity.mjs","build:plugin-api-package":"tsc -p tsconfig.plugin-api.json --outDir packages/pi-web-plugin-api/dist"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-2.202609.27.tgz","_integrity":"sha512-JLUW3Aop56/4dZXdhzExn3kR5CofZdWPfoCMeM4xTm+pXy3QqDrB1vru6TdNEQMUjCvhxWN32U36VvMLPbeF3A==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","mermaid":"^12.0.0","typebox":"1.3.7","node-pty":"^1.1.0","@types/ws":"^8.18.1","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.87.1","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.87.1","@earendil-works/pi-agent-core":"^0.87.1","@earendil-works/pi-coding-agent":"^0.87.1"},"peerDependencies":{"@earendil-works/pi-ai":">=0.87.0","@earendil-works/pi-agent-core":">=0.87.0","@earendil-works/pi-coding-agent":">=0.87.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-web_2.202609.27_1790621131814_0.9192786779840947","host":"s3://npm-registry-packages-npm-production"}},"2.202609.28":{"pi":{"image":"https://raw.githubusercontent.com/Gang-of-Beads/pi-web/main/docs/assets/pi-web-banner.png","extensions":["./extensions"]},"_id":"@gang-of-beads/pi-web@2.202609.28","bin":{"pi-web":"dist/cli.js","pi-web-server":"dist/server/index.js","pi-web-sessiond":"dist/server/sessiond.js"},"bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"dist":{"shasum":"c13d4c0fa6e36d577146312dc4eabea8db7b98e3","tarball":"https://registry.npmjs.org/@gang-of-beads/pi-web/-/pi-web-2.202609.28.tgz","fileCount":687,"integrity":"sha512-0iFfVnIH911TEj3bL96D6ebVQF5FnTntjYcnYLPpPxbrTzZnQI7vW4dUasIFHcPfbPOqzo1p1UgCIFwmV4Y1UA==","signatures":[{"sig":"MEUCIA4NjLlnRISW8g3b679fblgMynQQ/EPHhbLQi6TX3x/TAiEAvseLGZZLVfzCoR3qcIGbeZ0x8IVgON0j/xRiw8xSkAA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBpOQsgxgKblTSq1PmEhyaz7GJlSck5PVy+EXA7gwrezAiAbl/qkOBEXW27UubFd0R+ZHeuc/28cMBbfRfDrip2vUA=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@gang-of-beads%2fpi-web@2.202609.28","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":13855370},"name":"@gang-of-beads/pi-web","type":"module","_from":"file:pack-out/gang-of-beads-pi-web-2.202609.28.tgz","author":{"name":"Gang of Beads"},"engines":{"node":">=22.19.0"},"exports":{"./plugin-api":{"types":"./dist/plugin-api.d.ts","import":"./dist/plugin-api.js","default":"./dist/plugin-api.js"},"./server-plugin-api":{"types":"./dist/server-plugin-api.d.ts","import":"./dist/server-plugin-api.js"}},"license":"MIT","scripts":{"dev":"bash -c 'trap \"kill 0\" EXIT; npm run dev:sessiond & npm run dev:web & npm run dev:client & wait'","e2e":"playwright test","knip":"knip","lint":"eslint \"src/**/*.ts\" \"extensions/**/*.ts\" \"pi-web-plugins/**/*.ts\" vite.config.ts vitest.config.ts","test":"vitest run --config vitest.config.ts","build":"npm run clean && tsc -p tsconfig.build.json && npm run build:plugin-api && npm run build:plugins && vite build","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","start":"tsx src/server/index.ts","verify":"npm run typecheck && npm run lint && npm run knip && npm test","dev:web":"bash -c 'set -e; npm run build:plugins; trap \"kill 0\" EXIT; npm run dev:plugins & tsx watch src/server/index.ts & wait'","prepack":"npm run build","prepare":"node scripts/install-git-hooks.mjs","pack:dry":"npm pack --dry-run","changeset":"changeset","typecheck":"tsc --noEmit","dev:client":"vite --host 0.0.0.0","dev:server":"npm run dev:web","e2e:mobile":"playwright test --project=mobile","dev:plugins":"node scripts/build-plugins.mjs --watch","publish:npm":"npm publish --access public","dev:sessiond":"npm run build:plugins && tsx watch src/server/sessiond.ts","build:plugins":"npm run build:plugin-api && tsc -p tsconfig.plugins.json && node scripts/build-plugins.mjs","redeploy:host":"./scripts/redeploy-host.sh","verify:staged":"node scripts/verify-staged.mjs","prepublishOnly":"npm run verify","start:sessiond":"npm run build:plugins && tsx src/server/sessiond.ts","release:version":"changeset version","build:plugin-api":"tsc -p tsconfig.plugin-api.json","changelog:status":"changeset status","typecheck:cached":"tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/pi-web/typecheck.tsbuildinfo","docker:verify:stop":"./docker/pi-web-docker --dev stop","capture:screenshots":"node scripts/capture-screenshots.mjs","docker:verify:start":"./docker/pi-web-docker --dev start","docker:verify:status":"./docker/pi-web-docker --dev status","smoke:package-install":"node scripts/smoke-package-install.mjs","fill-lockfile-integrity":"node scripts/fill-lockfile-integrity.mjs","build:plugin-api-package":"tsc -p tsconfig.plugin-api.json --outDir packages/pi-web-plugin-api/dist"},"version":"2.202609.28","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"5aa387c4-2bc3-413d-9d92-32962e1f3a3e"}},"homepage":"https://github.com/Gang-of-Beads/pi-web","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"_resolved":"/home/runner/work/pi-web/pi-web/pack-out/gang-of-beads-pi-web-2.202609.28.tgz","_integrity":"sha512-0iFfVnIH911TEj3bL96D6ebVQF5FnTntjYcnYLPpPxbrTzZnQI7vW4dUasIFHcPfbPOqzo1p1UgCIFwmV4Y1UA==","repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"_npmVersion":"11.19.0","description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","directories":{},"maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"_nodeVersion":"24.21.0","contributors":[{"name":"Federico Jaramillo Martinez"}],"dependencies":{"ws":"^8.21.0","lit":"^3.3.3","diff":"^9.0.0","marked":"^18.0.6","undici":"^8.5.0","fastify":"^5.12.3","mermaid":"^12.0.0","typebox":"1.3.7","node-pty":"^1.1.0","@types/ws":"^8.18.1","@xterm/xterm":"^6.0.0","@fastify/static":"^10.1.2","@codemirror/view":"^6.43.6","@xterm/addon-fit":"^0.11.0","@codemirror/state":"^6.7.1","@fastify/compress":"^9.0.0","@fastify/websocket":"^11.3.0","@codemirror/lang-go":"^6.0.1","@codemirror/commands":"^6.10.4","@codemirror/lang-css":"^6.3.1","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/lang-rust":"^6.0.2","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.0","@earendil-works/pi-server":"^0.87.1","@codemirror/lang-javascript":"^6.2.5"},"publishConfig":{"access":"public"},"typesVersions":{"*":{"plugin-api":["dist/plugin-api.d.ts"],"server-plugin-api":["dist/server-plugin-api.d.ts"]}},"_hasShrinkwrap":false,"packageManager":"npm@11.11.0","devDependencies":{"tsx":"^4.23.0","knip":"^6.25.0","vite":"^8.2.2","eslint":"^10.6.0","vitest":"^4.1.10","globals":"^17.7.0","happy-dom":"^20.11.1","@eslint/js":"^10.0.1","typescript":"^6.0.3","@types/node":"^24.13.3","@changesets/cli":"^2.31.0","@playwright/test":"^1.62.1","typescript-eslint":"^8.63.0","@earendil-works/pi-ai":"^0.87.1","@earendil-works/pi-agent-core":"^0.87.1","@earendil-works/pi-coding-agent":"^0.87.1"},"peerDependencies":{"@earendil-works/pi-ai":">=0.87.0","@earendil-works/pi-agent-core":">=0.87.0","@earendil-works/pi-coding-agent":">=0.87.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-web_2.202609.28_1790692273840_0.4880048246324964"}}},"time":{"created":"2026-09-01T17:08:04.234Z","modified":"2026-09-29T14:31:14.592Z","1.202609.3":"2026-09-01T17:08:04.651Z","1.202609.4":"2026-09-01T19:17:43.858Z","1.202609.5":"2026-09-02T06:47:18.488Z","1.202609.6":"2026-09-02T22:01:02.125Z","1.202609.7":"2026-09-03T07:38:04.431Z","1.202609.8":"2026-09-03T15:01:19.081Z","1.202609.9":"2026-09-03T15:42:29.016Z","1.202609.10":"2026-09-03T17:20:42.035Z","1.202609.11":"2026-09-03T19:19:22.334Z","1.202609.12":"2026-09-03T19:52:49.881Z","1.202609.14":"2026-09-03T20:41:41.935Z","1.202609.15":"2026-09-03T22:53:08.649Z","1.202609.16":"2026-09-04T09:43:19.526Z","1.202609.17":"2026-09-04T11:53:14.301Z","1.202609.18":"2026-09-04T14:09:47.226Z","2.202609.0":"2026-09-18T06:00:52.583Z","2.202609.1":"2026-09-18T13:23:44.135Z","2.202609.2":"2026-09-18T15:25:40.304Z","2.202609.3":"2026-09-19T10:35:52.965Z","2.202609.4":"2026-09-19T16:02:23.266Z","2.202609.5":"2026-09-20T11:59:38.674Z","2.202609.6":"2026-09-20T17:06:06.522Z","2.202609.7":"2026-09-21T19:18:39.568Z","2.202609.8":"2026-09-21T21:34:56.352Z","2.202609.9":"2026-09-22T09:14:14.370Z","2.202609.10":"2026-09-22T13:12:17.067Z","2.202609.11":"2026-09-23T21:39:19.285Z","2.202609.12":"2026-09-25T07:40:08.095Z","2.202609.13":"2026-09-25T17:08:46.616Z","2.202609.14":"2026-09-25T22:00:49.978Z","2.202609.15":"2026-09-26T11:04:08.552Z","2.202609.16":"2026-09-26T22:01:24.927Z","2.202609.17":"2026-09-27T08:18:45.555Z","2.202609.19":"2026-09-28T06:43:46.347Z","2.202609.18":"2026-09-28T06:43:56.613Z","2.202609.20":"2026-09-28T07:07:14.875Z","2.202609.21":"2026-09-28T08:36:13.088Z","2.202609.22":"2026-09-28T10:53:33.134Z","2.202609.26":"2026-09-28T13:20:35.189Z","2.202609.27":"2026-09-28T18:45:32.036Z","2.202609.28":"2026-09-29T14:31:14.008Z"},"bugs":{"url":"https://github.com/Gang-of-Beads/pi-web/issues"},"author":{"name":"Gang of Beads"},"license":"MIT","homepage":"https://github.com/Gang-of-Beads/pi-web","keywords":["pi-package","pi","pi-web","pi-web-ui","pi-webui","pi-coding-agent","pi-coding-agent-web-ui","coding-agent","ai-coding-agent","agentic-development","developer-tools","web-ui","webui","browser-ui","remote-development","persistent-sessions"],"repository":{"url":"git+https://github.com/Gang-of-Beads/pi-web.git","type":"git"},"description":"Web UI for persistent Pi Coding Agent sessions in real workspaces.","contributors":[{"name":"Federico Jaramillo Martinez"}],"maintainers":[{"name":"hanxiaodu","email":"vincent.hanxiao.du@gmail.com"}],"readme":"# PI WEB\n\n[![CI](https://github.com/Gang-of-Beads/pi-web/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/Gang-of-Beads/pi-web/actions/workflows/ci.yml)\n[![npm version](https://img.shields.io/npm/v/@gang-of-beads/pi-web)](https://www.npmjs.com/package/@gang-of-beads/pi-web)\n[![Node.js](https://img.shields.io/node/v/@gang-of-beads/pi-web)](package.json)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n\n**PI WEB is a web UI for [Pi Coding Agent](https://github.com/earendil-works/pi/tree/main/packages/coding-agent) that keeps agent sessions running in real workspaces on your machine or server.**\n\nRun agents where your code, tools, credentials, and build caches live. Supervise them from any browser.\n\nSource and docs: <https://github.com/Gang-of-Beads/pi-web>\n\n![PI WEB](docs/assets/pi-web-banner.png)\n\n![PI WEB desktop screenshot](docs/assets/pi-web-desktop.png)\n\n| On a phone | Going somewhere else |\n| --- | --- |\n| ![The navigation board on a phone](docs/assets/pi-web-mobile.png) | ![The Go to sheet on a phone](docs/assets/pi-web-mobile-goto.png) |\n\n## Why PI WEB?\n\nAgentic development works better when the work environment is persistent.\n\nPI WEB lets you:\n\n- keep Pi Coding Agent sessions alive after browser disconnects;\n- run agents inside real repositories and git worktrees;\n- supervise multiple sessions in parallel;\n- switch between laptop, phone, tablet, and desktop;\n- use a server, workstation, or remote dev box as your agent runtime;\n- manage projects, workspaces, files, terminals, sessions, and remote machines from one web UI.\n\nYour browser is the control surface. The work stays where it can keep running.\n\n## Quick start\n\nRequirements:\n\n- Node.js 22.19.0 or newer\n- npm\n- Pi Coding Agent `>=0.84.0`, configured for your user\n- git and the development tools your agents need\n\nInstall and start PI WEB as per-user services:\n\n```bash\nnpm install -g @gang-of-beads/pi-web --allow-scripts=node-pty\npi-web install\npi-web doctor\n```\n\nOn npm 12, the scoped flag lets `node-pty` prepare its required native module without enabling install scripts for other dependencies.\n\nThen open:\n\n```text\nhttp://127.0.0.1:8504\n```\n\nUseful commands:\n\n```bash\npi-web status\npi-web logs\npi-web restart\npi-web doctor\npi-web version\npi-web uninstall\n```\n\n<!-- Keep README guidance concise. Put install variants, troubleshooting,\nconfiguration, and operational details in docs/, then link from here. -->\n\nFor more install options, including one-line install, Pi package install, WSL/manual usage, and remote access, see the [installation guide](https://github.com/Gang-of-Beads/pi-web/blob/main/docs/install.html).\n\n## Install with Nix\n\nEvery release is built for `x86_64-linux`, `aarch64-linux` and Apple Silicon macOS and pushed to the public binary cache [gang-of-beads.cachix.org](https://app.cachix.org/cache/gang-of-beads). A Nix install of a release downloads PI WEB instead of compiling it. Pin a release tag, replacing `<version>` with one from the [releases page](https://github.com/Gang-of-Beads/pi-web/releases). Any other commit builds locally.\n\n```bash\nnix profile install github:Gang-of-Beads/pi-web/v<version> --accept-flake-config\n```\n\nThe flake declares the cache, and Nix honours that declaration only for trusted users. If Nix warns that it ignored the substituter, add the cache once, system-wide, with `cachix use gang-of-beads` or these `nix.conf` lines, then restart the Nix daemon:\n\n```text\nextra-substituters = https://gang-of-beads.cachix.org\nextra-trusted-public-keys = gang-of-beads.cachix.org-1:oeKLfGX21CJJ8AUAhGoesrIy2i8vlXCEn6yT4x1hqX0=\n```\n\nWith Home Manager, use the flake's own package. The module's default package, and `inputs.pi-web.inputs.nixpkgs.follows`, both build PI WEB against your nixpkgs, which is a different build from the one in the cache.\n\n```nix\ninputs.pi-web.url = \"github:Gang-of-Beads/pi-web/v<version>\";\n\n# In your Home Manager modules, with inputs.pi-web.homeManagerModules.default imported:\nprograms.pi-web = {\n  enable = true;\n  package = inputs.pi-web.packages.${pkgs.stdenv.hostPlatform.system}.pi-web;\n};\n```\n\nService management and settings are in the installation guide's [NixOS and nix-darwin section](https://github.com/Gang-of-Beads/pi-web/blob/main/docs/install.html#nix).\n\n## Core model\n\nPI WEB organizes work like this:\n\n```text\nMachine     a local or remote PI WEB runtime endpoint\nProject     a folder on that machine\nWorkspace   a provider-owned working folder; bundled Git discovers worktrees, otherwise the project folder\nSession     a Pi Coding Agent chat running inside a workspace\n```\n\nA typical flow:\n\n1. Add a project.\n2. Choose a workspace or git worktree.\n3. Start a session.\n4. Let the agent work.\n5. Come back later from any browser.\n\n## Remote-first development\n\nPI WEB is designed for remote AI-driven development.\n\nInstead of tying agent work to your laptop session, run PI WEB on a machine that stays available: a server, desktop, cloud VM, home lab machine, or remote dev box.\n\nUse a private network, SSH tunnel, trusted reverse proxy, or federated PI WEB machine setup when accessing it remotely.\n\nRead more: [Remote-first development](https://github.com/Gang-of-Beads/pi-web/blob/main/docs/remote-first.html)\n\n## Machines and fleets\n\nPI WEB can register other PI WEB runtimes as remote machines. One browser-facing PI WEB instance can proxy projects, files, git state, sessions, terminals, activity, Pi package management, and selected-machine settings from trusted remote machines.\n\nWhen a remote machine is selected, Settings tabs label their target. Pi packages, PI WEB plugin enablement, session daemon toggles, external file access, and upload defaults target the selected machine. Gateway/server settings such as host, port, allowed hosts, registered machines/tokens, and keyboard shortcuts stay local to the gateway/browser.\n\nRead more: [Fleet and machines guide](https://github.com/Gang-of-Beads/pi-web/blob/main/docs/machines.html)\n\n## PI WEB plugins\n\nPI WEB supports trusted browser plugins plus optional sessiond-backed workspace providers. Bundled Git uses the same public provider and backend contracts available to installed plugins. Use **Settings → PI WEB plugins** to manage desired state on the selected machine.\n\nPi packages are a separate Pi package-manager concept. A Pi package may include a PI WEB plugin, but installing a package and enabling it are different operations. Server-backed changes require a session-daemon restart; see the plugin guide for lifecycle and recovery details. The session daemon's ownership, restart order, and second-instance requirements are documented in the [installation guide](https://github.com/Gang-of-Beads/pi-web/blob/main/docs/install.html#session-daemon).\n\nRead more: [PI WEB plugin guide and API](https://github.com/Gang-of-Beads/pi-web/blob/main/docs/plugins.md)\n\n## Configuration\n\nGlobal config lives at:\n\n```text\n$PI_WEB_CONFIG\n~/.config/pi-web/config.json\n```\n\nProject-local PI WEB config lives at:\n\n```text\n<project>/.pi-web/config.json\n```\n\nCommon configuration includes host/port, path access, uploads, PI WEB plugin enablement, shortcuts, and session daemon options. In Settings, machine-affecting config targets the selected machine; gateway host/port/allowed-hosts, remote machine registration, tokens, and keyboard shortcuts stay local.\n\nRead more: [Configuration reference](https://github.com/Gang-of-Beads/pi-web/blob/main/docs/config.md)\n\n## Development\n\nClone the repository and run:\n\n```bash\nnpm install\nnpm run dev\n```\n\nOpen the Vite URL, usually:\n\n```text\nhttp://localhost:8505\n```\n\nFor the split development setup:\n\n```bash\nnpm run dev:sessiond\nnpm run dev:web\nnpm run dev:client\n```\n\nValidate changes with:\n\n```bash\nnpm run verify\n```\n\n## Security model\n\nPI WEB assumes trusted users, trusted repositories, and trusted server paths.\n\nIt is not a sandbox, permission system, or multi-tenant platform. Do not expose it directly to the public internet without a trusted network, firewall, VPN, SSH tunnel, or authenticated reverse proxy.\n\n## Documentation\n\n- [Repository](https://github.com/Gang-of-Beads/pi-web)\n- [Install](https://github.com/Gang-of-Beads/pi-web/blob/main/docs/install.html)\n- [Remote-first development](https://github.com/Gang-of-Beads/pi-web/blob/main/docs/remote-first.html)\n- [Machines / fleet](https://github.com/Gang-of-Beads/pi-web/blob/main/docs/machines.html)\n- [Configuration](https://github.com/Gang-of-Beads/pi-web/blob/main/docs/config.md)\n- [Plugins](https://github.com/Gang-of-Beads/pi-web/blob/main/docs/plugins.md)\n- [FAQ](https://github.com/Gang-of-Beads/pi-web/blob/main/docs/faq.html)\n\n## License\n\nMIT © 2026 Federico Jaramillo Martinez and the Gang of Beads contributors. See [LICENSE](LICENSE).\n","readmeFilename":"README.md"}