{"_id":"pxpipe-proxy","_rev":"31-9fa9a5346a5720354190d3eb82b14242","name":"pxpipe-proxy","dist-tags":{"latest":"0.13.2"},"versions":{"0.2.0":{"name":"pxpipe-proxy","version":"0.2.0","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.2.0","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"67f38398d2d731ab94b30ddce05476e86195fa00","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.2.0.tgz","fileCount":50,"integrity":"sha512-OMCnBSoReGhZDvGc4HYPHUq6NL8T/EB4hcIJv7DKwurQY7x25BPb4Rd+CaGcgrDPov/BjJCq5or1ySPHX9NSsg==","signatures":[{"sig":"MEYCIQC9z8cn86A0Qzpo/ZuAIOMl/kmH63YwJwQ3oSXzPqBJBgIhAMzleLyT8M6Suz9MGbkypCCdZaKY+H5OcfXBThrJLrHe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10930236},"pnpm":{"overrides":{"ws@>=8.0.0 <8.20.1":"^8.20.1"}},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"47d6097ecd8b50902a877a60d8014db62a0db5c0","scripts":{"test":"vitest run","build":"node scripts/build.mjs","restart":"bash scripts/restart.sh","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","test:restart":"bash tests/restart.test.sh","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"teamch","email":"teamchong@outlook.com"},"deprecated":"Deprecated — token-savings were overstated (baseline-accounting bug)","repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"11.12.1","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@napi-rs/canvas":"^0.1.53"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.10.0","vite":"8.0.13","vitest":"^4.1.6","esbuild":"^0.28.0","wrangler":"^4.92.0","typescript":"^5.4.0","@types/node":"^20.12.0","@cloudflare/workers-types":"^4.20240512.0"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.2.0_1781089822987_0.45018323958953443","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"pxpipe-proxy","version":"0.2.1","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.2.1","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"9031864ace6f1d6941685e5668b98d5d811008ae","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.2.1.tgz","fileCount":50,"integrity":"sha512-FHvgkJue8e8llsreK4WFFG1qy+Yg6wDDmj2I+2VFDTghwvDWM/RoucrceaQkf+7Vw73tnyWF2ufSpGWiFdzR0Q==","signatures":[{"sig":"MEQCIBVGzYGkMlf89PCaV4PHaWv+g+U7gByFEmA7moFFwhXRAiB2B+CvRR8EoPoMQVvWGIVhro0509p+iF1cdA7h30g6eg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pxpipe-proxy@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":10934934},"pnpm":{"overrides":{"ws@>=8.0.0 <8.20.1":"^8.20.1"}},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"b9e0e06cdbd5b888a8c6b8ab41d50df58db2badf","scripts":{"test":"vitest run","build":"node scripts/build.mjs","restart":"bash scripts/restart.sh","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","test:restart":"bash tests/restart.test.sh","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:93bec180-eeb4-428b-a500-4c7499cf21ef"}},"deprecated":"Deprecated — token-savings were overstated (baseline-accounting bug)","repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"11.17.0","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"@napi-rs/canvas":"^0.1.53"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.10.0","vite":"8.0.13","vitest":"^4.1.6","esbuild":"^0.28.0","wrangler":"^4.92.0","typescript":"^5.4.0","@types/node":"^20.12.0","@cloudflare/workers-types":"^4.20240512.0"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.2.1_1781258172302_0.3926503161624313","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"pxpipe-proxy","version":"0.3.0","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.3.0","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"accb576e22d99f036b79db10de59d0a3751ec0de","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.3.0.tgz","fileCount":50,"integrity":"sha512-W/AaUcSlS4EFN61MH9pI0ddOGT6c8nYzCyjpGsTaBrouk1gTbVAAvQdkodonqZ/Xocyz747MQI8zVQxfoBLw+w==","signatures":[{"sig":"MEUCID+j2l1dossODlsAEqN8nE9/oCf7JCriCCeM1+K02Y2MAiEA1pYYgEj/uM9N+MALM3C4ivaZVLQrrYkPj7y03IQqH3k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10982645},"pnpm":{"overrides":{"ws@>=8.0.0 <8.20.1":"^8.20.1"}},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"a9ff92d3e18b6099083b07250690f6f1fd23df2f","scripts":{"test":"vitest run","build":"node scripts/build.mjs","restart":"bash scripts/restart.sh","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","test:restart":"bash tests/restart.test.sh","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"teamch","email":"teamchong@outlook.com"},"repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"11.12.1","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@napi-rs/canvas":"^0.1.53"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.10.0","vite":"8.0.13","vitest":"^4.1.6","esbuild":"^0.28.0","wrangler":"^4.92.0","typescript":"^5.4.0","@types/node":"^20.12.0","@cloudflare/workers-types":"^4.20240512.0"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.3.0_1781716662249_0.3056268127004538","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"pxpipe-proxy","version":"0.3.1","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.3.1","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"e6f6517fabeaf017906f8b998b6fa7ecd2029022","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.3.1.tgz","fileCount":50,"integrity":"sha512-To3NQbju1JibqfXcNd+u+wDoHviwjpE+kUw4IELBfuYXWaQ2BL6eoNinrDghtqCzeCwt0O3M7SxQgwoOXp6jAw==","signatures":[{"sig":"MEUCIAIGlS1GhGxlt+q36woBKzLM5Bw6mWlhqVMqSyc2b5T7AiEAiOQpBlIUHJxD33ve0yqWsCvNb4rcZnIgwBjFSyyetwk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10982677},"pnpm":{"overrides":{"ws@>=8.0.0 <8.20.1":"^8.20.1"}},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"af1e838f0f040dca33317c31cbf9c1a77ddf8348","scripts":{"test":"vitest run","build":"node scripts/build.mjs","restart":"bash scripts/restart.sh","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","test:restart":"bash tests/restart.test.sh","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"teamch","email":"teamchong@outlook.com"},"repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"11.12.1","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@napi-rs/canvas":"^0.1.53"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.10.0","vite":"8.0.13","vitest":"^4.1.6","esbuild":"^0.28.0","wrangler":"^4.92.0","typescript":"^5.4.0","@types/node":"^20.12.0","@cloudflare/workers-types":"^4.20240512.0"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.3.1_1781725672678_0.22936336748531572","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"pxpipe-proxy","version":"0.4.0","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.4.0","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"72c4de3a9693e11945a2c09240b87e22d10efa9d","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.4.0.tgz","fileCount":50,"integrity":"sha512-l+leXuTZ3Dr7TAeYomFeQNwlCmpSNt3TwQltZi+ddX7YEr98cMiLp4685blQECz1EqMQz3/Z3XFq5iVOM5WO/A==","signatures":[{"sig":"MEUCIQC1ry+7PIE26WHh7lNUTMZ66I55WHFHKdRFhYAMQGBFZAIgIOFFAAVf/hVZZTaqwCwa1ik3IsqbbZ9Iw9sv2Zz92pE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pxpipe-proxy@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":10906432},"pnpm":{"overrides":{"ws@>=8.0.0 <8.20.1":"^8.20.1","vite@>=8.0.0 <8.0.16":"^8.0.16","undici@>=7.0.0 <7.28.0":"^7.28.0","esbuild@>=0.27.3 <0.28.1":"^0.28.1"}},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"c44cdf4258a2ce48ba95b2c1a7c423ded231e8be","scripts":{"test":"vitest run","build":"node scripts/build.mjs","restart":"bash scripts/restart.sh","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","test:restart":"bash tests/restart.test.sh","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:93bec180-eeb4-428b-a500-4c7499cf21ef"}},"repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"11.17.0","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"22.22.3","dependencies":{},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.10.0","vite":"^8.0.16","vitest":"^4.1.6","esbuild":"^0.28.1","wrangler":"^4.92.0","typescript":"^5.4.0","@types/node":"^20.12.0","@napi-rs/canvas":"^0.1.53","@cloudflare/workers-types":"^4.20240512.0"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.4.0_1781902442057_0.5673342623674356","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"pxpipe-proxy","version":"0.5.0","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.5.0","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"83d2493fd66e7584e57c6353441a10340650bc73","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.5.0.tgz","fileCount":56,"integrity":"sha512-eEytyQ8qXsrHUanT+Cm6ZZm98wLEqDOxs4vhMPWjtIoTbzK5qjdfq7IuR5/9lxUmVzfXWFfK/tlGjryArNxTFA==","signatures":[{"sig":"MEUCIHz1r2XWh8AfvKC1I7D4GGHUryPiPTcDLNQL8r1RPWzhAiEAob3tczo+D9J9TLVtCcasZIoC4XiW5Qc43SziCkMxETc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pxpipe-proxy@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14000546},"pnpm":{"overrides":{"ws@>=8.0.0 <8.20.1":"^8.20.1","vite@>=8.0.0 <8.0.16":"^8.0.16","undici@>=7.0.0 <7.28.0":"^7.28.0","esbuild@>=0.27.3 <0.28.1":"^0.28.1"}},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"dbc6d895f249f78af765ced037d2bb344b38ea37","scripts":{"test":"vitest run","build":"node scripts/build.mjs","restart":"bash scripts/restart.sh","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","test:restart":"bash tests/restart.test.sh","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:93bec180-eeb4-428b-a500-4c7499cf21ef"}},"repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"11.17.0","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"gpt-tokenizer":"^3.4.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.10.0","vite":"^8.0.16","vitest":"^4.1.6","esbuild":"^0.28.1","wrangler":"^4.92.0","typescript":"^5.4.0","@types/node":"^20.12.0","@napi-rs/canvas":"^0.1.53","@cloudflare/workers-types":"^4.20240512.0"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.5.0_1782004665418_0.15147397191968714","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"pxpipe-proxy","version":"0.6.0","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.6.0","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"374b0da81f1fafb9475e6ce87bc65195d4245dcf","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.6.0.tgz","fileCount":58,"integrity":"sha512-dFqP2tIyYBcpnhA2olohUGnKg94/ZzWLrdK3YZJ4RklfNgT0f6HUbR3Uvw521lJRJYNTUbEsaluFeD4nwv5sng==","signatures":[{"sig":"MEQCIGMkxOoBhAgzshZCgQh0zamyWsHLVHR49sI/6381opfOAiAz6HndEkBM9qvMPXILNO+JVs1xMLtd1zdcbe0qRPTsxA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pxpipe-proxy@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14036364},"pnpm":{"overrides":{"ws@>=8.0.0 <8.20.1":"^8.20.1","vite@>=8.0.0 <8.0.16":"^8.0.16","undici@>=7.0.0 <7.28.0":"^7.28.0","esbuild@>=0.27.3 <0.28.1":"^0.28.1"}},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"62b9c872ac92cfe5d86cc811b431ceb5f26b0962","scripts":{"test":"vitest run","build":"node scripts/build.mjs","restart":"bash scripts/restart.sh","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","test:restart":"bash tests/restart.test.sh","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:93bec180-eeb4-428b-a500-4c7499cf21ef"}},"repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"11.17.0","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"gpt-tokenizer":"^3.4.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.10.0","vite":"^8.0.16","vitest":"^4.1.6","esbuild":"^0.28.1","wrangler":"^4.92.0","typescript":"^5.4.0","@types/node":"^20.12.0","@napi-rs/canvas":"^0.1.53","@cloudflare/workers-types":"^4.20240512.0"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.6.0_1782076760354_0.5918602326158531","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"pxpipe-proxy","version":"0.6.1","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.6.1","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"5a9b9617be8c2707847e0668424e6eb40bc913de","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.6.1.tgz","fileCount":58,"integrity":"sha512-PEuVNhK2xm7YZzBKhUDhewtRUHN7dL7m5RvPtwaw4x49p5Myct6/usgHMEfpUSY9Iepu09TkwI98h4ESwLxeDw==","signatures":[{"sig":"MEQCIHNtcdTXmB+ddVRDxS5oq2wdtS1WMvIjj0klDtfBTh77AiAaE4GBKXX3lC6unLNDUGxVMhpjFxHQYr3y56JVq9/lmw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pxpipe-proxy@0.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14036267},"pnpm":{"overrides":{"ws@>=8.0.0 <8.20.1":"^8.20.1","vite@>=8.0.0 <8.0.16":"^8.0.16","undici@>=7.0.0 <7.28.0":"^7.28.0","esbuild@>=0.27.3 <0.28.1":"^0.28.1"}},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"023669dec41c6c555626ef17891a83b7eb2698d8","scripts":{"test":"vitest run","build":"node scripts/build.mjs","restart":"bash scripts/restart.sh","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","test:restart":"bash tests/restart.test.sh","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:93bec180-eeb4-428b-a500-4c7499cf21ef"}},"repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"11.17.0","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"gpt-tokenizer":"^3.4.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.10.0","vite":"^8.0.16","vitest":"^4.1.6","esbuild":"^0.28.1","wrangler":"^4.92.0","typescript":"^5.4.0","@types/node":"^20.12.0","@napi-rs/canvas":"^0.1.53","@cloudflare/workers-types":"^4.20240512.0"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.6.1_1782078234228_0.8868057399856528","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"pxpipe-proxy","version":"0.6.2","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.6.2","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"319bb1ab0004bdf3a8dea54b00359b57ed120e00","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.6.2.tgz","fileCount":58,"integrity":"sha512-qEb9qVRYspNqMQt1GFgX6mK+EwEFTXmnmWohy/yPF2nFeqTzgOGo+ntm9xZzsdhOXcT5FFSXA3qRg5W04bjXAQ==","signatures":[{"sig":"MEUCIQC5J/Wc5yJCPtaYZrgrlsiPy/Xc8DOPFTfaiQKYwNxwlwIgRt2JO1wUP+uKG57+Q95m/wOzoO3Tb0YihK2+Ger40c0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pxpipe-proxy@0.6.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14040752},"pnpm":{"overrides":{"ws@>=8.0.0 <8.20.1":"^8.20.1","vite@>=8.0.0 <8.0.16":"^8.0.16","undici@>=7.0.0 <7.28.0":"^7.28.0","esbuild@>=0.27.3 <0.28.1":"^0.28.1"}},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"681f40fd5b4a1cf72ad640e2e15c5768c157ded6","scripts":{"test":"vitest run","build":"node scripts/build.mjs","restart":"bash scripts/restart.sh","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","test:restart":"bash tests/restart.test.sh","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:93bec180-eeb4-428b-a500-4c7499cf21ef"}},"repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"11.17.0","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"gpt-tokenizer":"^3.4.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.10.0","vite":"^8.0.16","vitest":"^4.1.6","esbuild":"^0.28.1","wrangler":"^4.92.0","typescript":"^5.4.0","@types/node":"^20.12.0","@napi-rs/canvas":"^0.1.53","@cloudflare/workers-types":"^4.20240512.0"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.6.2_1782140902700_0.7416264305940059","host":"s3://npm-registry-packages-npm-production"}},"0.6.3":{"name":"pxpipe-proxy","version":"0.6.3","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.6.3","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"f207ec49e6d075c6c088f5f5f944bbb308a66d1a","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.6.3.tgz","fileCount":58,"integrity":"sha512-vvkhrPn/fpify79sK8i0V90uSsul6gYwAF2gEd1H/JWoatirZmmtDqovAnVuOaqGhGNK5BSy/0kA+aB76WBuog==","signatures":[{"sig":"MEUCIQCT5gJN6AnVTwyVrBPIvhcUoT7DmuQENLMq6TBSIf2YNwIgYy99VarYmkT62ACjBSlfZ2ORGzjRY2S1Dh5afyvqgHA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pxpipe-proxy@0.6.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14052818},"pnpm":{"overrides":{"ws@>=8.0.0 <8.20.1":"^8.20.1","vite@>=8.0.0 <8.0.16":"^8.0.16","undici@>=7.0.0 <7.28.0":"^7.28.0","esbuild@>=0.27.3 <0.28.1":"^0.28.1"}},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"85f8536b67aa8d7972e6d525ce95508dd141ea20","scripts":{"test":"vitest run","build":"node scripts/build.mjs","restart":"bash scripts/restart.sh","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","test:restart":"bash tests/restart.test.sh","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:93bec180-eeb4-428b-a500-4c7499cf21ef"}},"repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"11.17.0","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"gpt-tokenizer":"^3.4.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.10.0","vite":"^8.0.16","vitest":"^4.1.6","esbuild":"^0.28.1","wrangler":"^4.92.0","typescript":"^5.4.0","@types/node":"^20.12.0","@napi-rs/canvas":"^0.1.53","@cloudflare/workers-types":"^4.20240512.0"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.6.3_1782159965103_0.4371070117462106","host":"s3://npm-registry-packages-npm-production"}},"0.6.4":{"name":"pxpipe-proxy","version":"0.6.4","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.6.4","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"73c3cf54a6e2e7009952f3a4d13c4d669b833795","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.6.4.tgz","fileCount":58,"integrity":"sha512-EfcEYdljLpYDKiZV0um0sdKApxElGbZD5KGh30pYTHA7zhBuz0SEaUAPOok+TMowbySJnBHk+SMpvUPXKhjPxA==","signatures":[{"sig":"MEUCICOOO+sB5tExQ7/U2iGdk0K17ur1zQkQ10MEQUHYf2XsAiEA/EDQzvh/rLWdQjUAly6NpimKfss4D5cgxsMqfe2/1o8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pxpipe-proxy@0.6.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14056382},"pnpm":{"overrides":{"ws@>=8.0.0 <8.20.1":"^8.20.1","vite@>=8.0.0 <8.0.16":"^8.0.16","undici@>=7.0.0 <7.28.0":"^7.28.0","esbuild@>=0.27.3 <0.28.1":"^0.28.1"}},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"c75179b50f2c8e08d5e56e0fbd1195bf66a7b0b0","scripts":{"test":"vitest run","build":"node scripts/build.mjs","restart":"bash scripts/restart.sh","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","test:restart":"bash tests/restart.test.sh","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:93bec180-eeb4-428b-a500-4c7499cf21ef"}},"repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"11.17.0","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"gpt-tokenizer":"^3.4.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.10.0","vite":"^8.0.16","vitest":"^4.1.6","esbuild":"^0.28.1","wrangler":"^4.92.0","typescript":"^5.4.0","@types/node":"^20.12.0","@napi-rs/canvas":"^0.1.53","@cloudflare/workers-types":"^4.20240512.0"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.6.4_1782211594345_0.8645307054143128","host":"s3://npm-registry-packages-npm-production"}},"0.6.5":{"name":"pxpipe-proxy","version":"0.6.5","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.6.5","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"115ce622b25dc5716ac1c4377a9ac622bf572614","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.6.5.tgz","fileCount":60,"integrity":"sha512-cEKs7CDrO2GlvsXhiNs8E+b2QlZ1C9CgIIXVi5UT83gjI08iLj98uQZKUebYQthKDeGNeZrhNddoMTBCRh5D4A==","signatures":[{"sig":"MEQCIFxooxUzSNLm+HSxgm5mkgXwg7D7fRqnKP1oft+WfCGQAiAvpJ5Jfo30+TUsWBlJtBIwPLpqvczykgRstivMnm1Ppg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pxpipe-proxy@0.6.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14068270},"pnpm":{"overrides":{"ws@>=8.0.0 <8.20.1":"^8.20.1","vite@>=8.0.0 <8.0.16":"^8.0.16","undici@>=7.0.0 <7.28.0":"^7.28.0","esbuild@>=0.27.3 <0.28.1":"^0.28.1"}},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"f1cc22b8b6f38d5d1b34b4b762cac4e3626deefc","scripts":{"test":"vitest run","build":"node scripts/build.mjs","restart":"bash scripts/restart.sh","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","test:restart":"bash tests/restart.test.sh","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:93bec180-eeb4-428b-a500-4c7499cf21ef"}},"repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"11.17.0","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"22.23.0","dependencies":{"gpt-tokenizer":"^3.4.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.10.0","vite":"^8.0.16","vitest":"^4.1.6","esbuild":"^0.28.1","wrangler":"^4.92.0","typescript":"^5.4.0","@types/node":"^20.12.0","@napi-rs/canvas":"^0.1.53","@cloudflare/workers-types":"^4.20240512.0"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.6.5_1782422703160_0.5970823828805523","host":"s3://npm-registry-packages-npm-production"}},"0.6.6":{"name":"pxpipe-proxy","version":"0.6.6","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.6.6","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"92541f15c4bced3101599e14851d85668b74ae50","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.6.6.tgz","fileCount":60,"integrity":"sha512-SRjWOuwhSqNKcTlTotl1pUeDn1Q0iDNVXgiVx6YhUWyxxpzp37Ov4kmIOnKFixfDh+EU5bvPMpl8DpUHctradA==","signatures":[{"sig":"MEQCICsTXIZQGL3ongRhvbSBDGrpxvQGBfAOEP+vBcOsMS56AiBzfUE85fTTa4zUYXfGmBuO7SpdzHqhQLKFwFngYe9yNQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pxpipe-proxy@0.6.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14079158},"pnpm":{"overrides":{"ws@>=8.0.0 <8.20.1":"^8.20.1","vite@>=8.0.0 <8.0.16":"^8.0.16","undici@>=7.0.0 <7.28.0":"^7.28.0","esbuild@>=0.27.3 <0.28.1":"^0.28.1"}},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"7d15271587f0fbf21baa816c999b532e3d39e13d","scripts":{"test":"vitest run","build":"node scripts/build.mjs","restart":"bash scripts/restart.sh","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","test:restart":"bash tests/restart.test.sh","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:93bec180-eeb4-428b-a500-4c7499cf21ef"}},"repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"11.17.0","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"22.23.0","dependencies":{"gpt-tokenizer":"^3.4.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.10.0","vite":"^8.0.16","vitest":"^4.1.6","esbuild":"^0.28.1","wrangler":"^4.92.0","typescript":"^5.4.0","@types/node":"^20.12.0","@napi-rs/canvas":"^0.1.53","@cloudflare/workers-types":"^4.20240512.0"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.6.6_1782432058861_0.30793548802957127","host":"s3://npm-registry-packages-npm-production"}},"0.6.7":{"name":"pxpipe-proxy","version":"0.6.7","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.6.7","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"e753829c4e3aa83406c572c4b909c7706e34ed62","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.6.7.tgz","fileCount":60,"integrity":"sha512-vBPMsJjWT+naQvrfbqaDhOw23j8i+L/s4/BfnYHTJulrODVMzZduHvuupOHy4BlCmdu48JsZoPOiz3GwZ6u6Sw==","signatures":[{"sig":"MEQCIHOZ7VnGBvHdTEzM9F+q2uFNkEaibmlDXyg/tO4RS7brAiApdA1QgHJCYZ8myeG16SpXmPBwgWaAL/K8Sl6mCwHL1w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pxpipe-proxy@0.6.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14084848},"pnpm":{"overrides":{"ws@>=8.0.0 <8.20.1":"^8.20.1","vite@>=8.0.0 <8.0.16":"^8.0.16","undici@>=7.0.0 <7.28.0":"^7.28.0","esbuild@>=0.27.3 <0.28.1":"^0.28.1"}},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"6ca72260e83d10e8cc574c68f01699856a3dbf99","scripts":{"test":"vitest run","build":"node scripts/build.mjs","restart":"bash scripts/restart.sh","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","test:restart":"bash tests/restart.test.sh","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:93bec180-eeb4-428b-a500-4c7499cf21ef"}},"repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"11.17.0","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"22.23.0","dependencies":{"gpt-tokenizer":"^3.4.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.10.0","vite":"^8.0.16","vitest":"^4.1.6","esbuild":"^0.28.1","wrangler":"^4.92.0","typescript":"^5.4.0","@types/node":"^20.12.0","@napi-rs/canvas":"^0.1.53","@cloudflare/workers-types":"^4.20240512.0"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.6.7_1782440173893_0.279955229759808","host":"s3://npm-registry-packages-npm-production"}},"0.6.8":{"name":"pxpipe-proxy","version":"0.6.8","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.6.8","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"78a040191d9a604942971bb67ca0acec587433f8","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.6.8.tgz","fileCount":60,"integrity":"sha512-ZdQr1U6kjRzMgRa2SjnVSUJx7G28df/puLCvT9du509Z3/wAsWDWS1O8xX4Wy3V8at4MyQ+8zCRRiVAXLbb9nw==","signatures":[{"sig":"MEQCIGIhGnuXgbvGuDXvrTTH15MtP40NUOdVqbWzvxiuGySwAiBze+QgpbZK/k4eYcSiiVUR0A1HyNPQvUbhjGSh2PaN7Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pxpipe-proxy@0.6.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14092069},"pnpm":{"overrides":{"ws@>=8.0.0 <8.20.1":"^8.20.1","vite@>=8.0.0 <8.0.16":"^8.0.16","undici@>=7.0.0 <7.28.0":"^7.28.0","esbuild@>=0.27.3 <0.28.1":"^0.28.1"}},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"873cbaf94f71d16bc91c29cb1db80e1609e163b6","scripts":{"test":"vitest run","build":"node scripts/build.mjs","restart":"bash scripts/restart.sh","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","test:restart":"bash tests/restart.test.sh","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:93bec180-eeb4-428b-a500-4c7499cf21ef"}},"repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"11.17.0","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"22.23.0","dependencies":{"gpt-tokenizer":"^3.4.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.10.0","vite":"^8.0.16","vitest":"^4.1.6","esbuild":"^0.28.1","wrangler":"^4.92.0","typescript":"^5.4.0","@types/node":"^20.12.0","@napi-rs/canvas":"^0.1.53","@cloudflare/workers-types":"^4.20240512.0"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.6.8_1782447507284_0.4295622265745811","host":"s3://npm-registry-packages-npm-production"}},"0.6.9":{"name":"pxpipe-proxy","version":"0.6.9","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.6.9","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"95db666573d65f5081b7ffab46a82edcfdb93c98","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.6.9.tgz","fileCount":62,"integrity":"sha512-F9s4e2XTk5lEaBEas4e9OXqQC41sQawmBVro8R2ipOvWa5MY5KLvr/xCuiIiUwATlSDLoOZVkLNB4CUhwC/0oQ==","signatures":[{"sig":"MEQCIB3wMn17/QzsVPixnNcd7SPkIi2WU9t5S1dWD7P36SUeAiATEAOTSGVeoCLd0g5rCuJpxd+3ZAdrYxx9YHJSuxafDw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pxpipe-proxy@0.6.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14161831},"pnpm":{"overrides":{"ws@>=8.0.0 <8.20.1":"^8.20.1","vite@>=8.0.0 <8.0.16":"^8.0.16","undici@>=7.0.0 <7.28.0":"^7.28.0","esbuild@>=0.27.3 <0.28.1":"^0.28.1"}},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"ec43bf5370263e1e608d2b1cd42de0e61ae5f250","scripts":{"test":"vitest run","build":"node scripts/build.mjs","restart":"bash scripts/restart.sh","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","test:restart":"bash tests/restart.test.sh","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:93bec180-eeb4-428b-a500-4c7499cf21ef"}},"repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"11.17.0","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"22.23.0","dependencies":{"gpt-tokenizer":"^3.4.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.10.0","vite":"^8.0.16","vitest":"^4.1.6","esbuild":"^0.28.1","wrangler":"^4.92.0","typescript":"^5.4.0","@types/node":"^20.12.0","@napi-rs/canvas":"^0.1.53","@cloudflare/workers-types":"^4.20240512.0"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.6.9_1782618186436_0.8745317683789879","host":"s3://npm-registry-packages-npm-production"}},"0.6.10":{"name":"pxpipe-proxy","version":"0.6.10","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.6.10","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"c36471ae6f6debf86e4b4d0faf8fd7df24138072","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.6.10.tgz","fileCount":62,"integrity":"sha512-wrVI7uftY3AMeotkh1KJCxpqAv7TYpZ8PZ8p4To1+Di5DoSusDsculXp+yQKDOj1mRbJoEx5xH/iuwfagjbRBA==","signatures":[{"sig":"MEUCIQDmCIHS4T1mIb2XsywyXZWUqd2LtJHglKzP5Iduux7L/AIgPla1qD/ZHmA+qlIQwsB2p7jEiX2qktdnz1du49VXZUs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pxpipe-proxy@0.6.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14160129},"pnpm":{"overrides":{"ws@>=8.0.0 <8.20.1":"^8.20.1","vite@>=8.0.0 <8.0.16":"^8.0.16","undici@>=7.0.0 <7.28.0":"^7.28.0","esbuild@>=0.27.3 <0.28.1":"^0.28.1"}},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"f472566cc1ff9f1ad86d23423a29f2ea6620914d","scripts":{"test":"vitest run","build":"node scripts/build.mjs","restart":"bash scripts/restart.sh","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","test:restart":"bash tests/restart.test.sh","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:93bec180-eeb4-428b-a500-4c7499cf21ef"}},"repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"11.18.0","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"22.23.0","dependencies":{"gpt-tokenizer":"^3.4.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.10.0","vite":"^8.0.16","vitest":"^4.1.6","esbuild":"^0.28.1","wrangler":"^4.92.0","typescript":"^5.4.0","@types/node":"^20.12.0","@napi-rs/canvas":"^0.1.53","@cloudflare/workers-types":"^4.20240512.0"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.6.10_1782838001419_0.9193709313751806","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"pxpipe-proxy","version":"0.7.0","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.7.0","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"2fa3cd2db0d41e1f92f190ea82cbb62f44e0fdeb","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.7.0.tgz","fileCount":62,"integrity":"sha512-5x1IU/mwBOrldNEW+TZT/fRnsQ3nfIMN6Ognf9zIlSF1H3+X31Yx4Epcp9BnAq2i3X8bpK+5BirQZ/drqHpb9A==","signatures":[{"sig":"MEQCIAqaW3hQRNesln1vfjqSUhTXI++SuYNM5DMu17wj4wIvAiBYUHvaXBK6iQpovxB2B+irJXf9L77fjHGvPyN8r1H4Jw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pxpipe-proxy@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14186477},"pnpm":{"overrides":{"ws@>=8.0.0 <8.20.1":"^8.20.1","vite@>=8.0.0 <8.0.16":"^8.0.16","undici@>=7.0.0 <7.28.0":"^7.28.0","esbuild@>=0.27.3 <0.28.1":"^0.28.1"}},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"bb7aaa9fec380f389eb2666a73e174c142517df2","scripts":{"test":"vitest run","build":"node scripts/build.mjs","restart":"bash scripts/restart.sh","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","test:restart":"bash tests/restart.test.sh","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:93bec180-eeb4-428b-a500-4c7499cf21ef"}},"repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"11.18.0","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"gpt-tokenizer":"^3.4.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.10.0","vite":"^8.0.16","vitest":"^4.1.6","esbuild":"^0.28.1","wrangler":"^4.92.0","typescript":"^5.4.0","@types/node":"^20.12.0","@napi-rs/canvas":"^0.1.53","@cloudflare/workers-types":"^4.20240512.0"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.7.0_1783053716812_0.29655336833889767","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"pxpipe-proxy","version":"0.7.1","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.7.1","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"1fa63cfad3198357f1e5ceaf0b5b5eb4829aa449","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.7.1.tgz","fileCount":62,"integrity":"sha512-7weuVAyJdSqo1geYzKA22orGZy3tR27dwx3PqQpj66COJcmENSNU3hBm8jgJ7vk8mIcweYNCjjQPY+AvXnUMJw==","signatures":[{"sig":"MEQCIHf3sgUqYn2uzEnjmTiJW0jkPy3MiaOs/UBUYp6uDCatAiBYFa2CbBzb4OjpnLm5a3fCIFFk208lVev/Wf5ZFG1uQQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pxpipe-proxy@0.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14187692},"pnpm":{"overrides":{"ws@>=8.0.0 <8.20.1":"^8.20.1","vite@>=8.0.0 <8.0.16":"^8.0.16","undici@>=7.0.0 <7.28.0":"^7.28.0","esbuild@>=0.27.3 <0.28.1":"^0.28.1"}},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"0dce007d4c072268eb63e0b0c07e758914f1b731","scripts":{"test":"vitest run","build":"node scripts/build.mjs","restart":"bash scripts/restart.sh","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","test:restart":"bash tests/restart.test.sh","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:93bec180-eeb4-428b-a500-4c7499cf21ef"}},"repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"11.18.0","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"gpt-tokenizer":"^3.4.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.10.0","vite":"^8.0.16","vitest":"^4.1.6","esbuild":"^0.28.1","wrangler":"^4.92.0","typescript":"^5.4.0","@types/node":"^20.12.0","@napi-rs/canvas":"^0.1.53","@cloudflare/workers-types":"^4.20240512.0"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.7.1_1783057887479_0.34234904484927653","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"pxpipe-proxy","version":"0.7.2","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.7.2","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"12acfc689c611eddcc4b58f099c6be0e7649542a","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.7.2.tgz","fileCount":62,"integrity":"sha512-VaqoeDLiiZQHJMRotdK3iDFtmUWZm+p2SLA3kBQPpBeiK8I9vQMpICPzh2ehUVKrvFAjdkIFloSkIQcJo3TUdA==","signatures":[{"sig":"MEUCICJLWycwzMa/LTrxueGfjdnMoMFtb0tPwhCia37lgcM5AiEAktv5dhTitybn0z8DOuzerAlcbpO/v8ey1CHNuE8e4gA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pxpipe-proxy@0.7.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14191770},"pnpm":{"overrides":{"ws@>=8.0.0 <8.20.1":"^8.20.1","vite@>=8.0.0 <8.0.16":"^8.0.16","undici@>=7.0.0 <7.28.0":"^7.28.0","esbuild@>=0.27.3 <0.28.1":"^0.28.1"}},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"2070c9697e206f646ef248f1bb961733012aab58","scripts":{"test":"vitest run","build":"node scripts/build.mjs","restart":"bash scripts/restart.sh","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","test:restart":"bash tests/restart.test.sh","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:93bec180-eeb4-428b-a500-4c7499cf21ef"}},"repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"11.18.0","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"gpt-tokenizer":"^3.4.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.10.0","vite":"^8.0.16","vitest":"^4.1.6","esbuild":"^0.28.1","wrangler":"^4.92.0","typescript":"^5.4.0","@types/node":"^20.12.0","@napi-rs/canvas":"^0.1.53","@cloudflare/workers-types":"^4.20240512.0"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.7.2_1783083783955_0.06357866967004955","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"pxpipe-proxy","version":"0.8.0","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.8.0","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"1f5353dc0b8829d62737a1d454dfe8adc9d08b59","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.8.0.tgz","fileCount":62,"integrity":"sha512-zmh319/seaTOGG46TYq+kGk/RcXSuBcfHENNsIriuqqKiJWd6709DNQfqzf6J+lL+Nc1QtOg5F/TNIOe7YeTBQ==","signatures":[{"sig":"MEUCIQDQePcS0BO8QxyKKPD4aIV1O4jK/QkQzlZwkE5vocPhVQIgLgeKm0iow5Pr02/YMkm40wUHNG50/XKZGwzdKJFd5e0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pxpipe-proxy@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14197065},"pnpm":{"overrides":{"ws@>=8.0.0 <8.20.1":"^8.20.1","vite@>=8.0.0 <8.0.16":"^8.0.16","undici@>=7.0.0 <7.28.0":"^7.28.0","esbuild@>=0.27.3 <0.28.1":"^0.28.1"}},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"7dd54d395d119f5f822da5c1944ba5afbb02fa88","scripts":{"test":"vitest run","build":"node scripts/build.mjs","restart":"bash scripts/restart.sh","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","test:restart":"bash tests/restart.test.sh","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:93bec180-eeb4-428b-a500-4c7499cf21ef"}},"repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"11.18.0","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"gpt-tokenizer":"^3.4.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.10.0","vite":"^8.0.16","vitest":"^4.1.6","esbuild":"^0.28.1","wrangler":"^4.92.0","typescript":"^5.4.0","@types/node":"^20.12.0","@napi-rs/canvas":"^0.1.53","@cloudflare/workers-types":"^4.20240512.0"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.8.0_1783133377203_0.2852470869572896","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"pxpipe-proxy","version":"0.9.0","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.9.0","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"af19ce720ec89caf816ab0c53238edaaa1671fba","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.9.0.tgz","fileCount":71,"integrity":"sha512-5KjypB0WqFjNXT/z1hy5CeV5QFT409EhHi8JzKKbMpqUXugNx0jolzPSZcBT4wgFCKDISib64HToiPSKkPuS3A==","signatures":[{"sig":"MEYCIQCeEQkPgRevUndgl5vIqmdQ1GGEcGpt60SHIATaeFnRGwIhAN+rEFV7RuRRt0g7Uoqjm/ni7x9MZ1VL85DrAOEMXp/b","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pxpipe-proxy@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14518826},"pnpm":{"overrides":{"ws@>=8.0.0 <8.20.1":"^8.20.1","vite@>=8.0.0 <8.0.16":"^8.0.16","undici@>=7.0.0 <7.28.0":"^7.28.0","esbuild@>=0.27.3 <0.28.1":"^0.28.1"}},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"af41ce6e41740d0e4a026e81a0f9d3b3d88b2b00","scripts":{"test":"vitest run","build":"node scripts/build.mjs","restart":"bash scripts/restart.sh","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","test:restart":"bash tests/restart.test.sh","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:93bec180-eeb4-428b-a500-4c7499cf21ef"}},"repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"12.0.1","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"gpt-tokenizer":"^3.4.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.10.0","vite":"^8.0.16","vitest":"^4.1.6","esbuild":"^0.28.1","wrangler":"^4.92.0","typescript":"^5.4.0","@types/node":"^20.12.0","@napi-rs/canvas":"^0.1.53","@cloudflare/workers-types":"^4.20240512.0"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.9.0_1784036206493_0.9900933864393131","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"pxpipe-proxy","version":"0.10.0","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.10.0","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"6e7e403095a782b53c47871dabdb337c555ada9f","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.10.0.tgz","fileCount":81,"integrity":"sha512-lcaP7JOq51wdx+7DXd3lcZGTS2R2AZjBs65+Y7ADGjzVZm19BJmnGn2vYv8BB9xk/sqWML8S8UdQy+aXf4THnQ==","signatures":[{"sig":"MEUCIH67yxiRK+NLogrK+6LU8F+d6AofRpossND3wK+dWG/jAiEAldPPdMsynu9Dt4ehK9dw1GegQlBChOT7pBJYKn3SdVo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pxpipe-proxy@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":14796647},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"ac992b3b6cab307cb1ea8c53d5237b5673ed14e2","scripts":{"test":"vitest run","build":"node scripts/build.mjs","restart":"bash scripts/restart.sh","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","test:restart":"bash tests/restart.test.sh","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:93bec180-eeb4-428b-a500-4c7499cf21ef"}},"repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"12.0.1","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"gpt-tokenizer":"^3.4.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.10.0","vite":"^8.0.16","vitest":"^4.1.6","esbuild":"^0.28.1","wrangler":"^4.92.0","typescript":"^5.4.0","@types/node":"^20.12.0","@napi-rs/canvas":"^0.1.53","@cloudflare/workers-types":"^4.20240512.0"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.10.0_1784734561252_0.8657771886000352","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"pxpipe-proxy","version":"0.11.0","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.11.0","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"d83f824a401f63e78ddf64d0e90ce82c67ec6766","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.11.0.tgz","fileCount":95,"integrity":"sha512-+jVnp0eihZY+xLxYNeJWTh1WTCczM9nP6hM4BG7AtnnszlM9BqfLX8lPFSkYnTHb6UIVyA0ThjTgcm5eSI4/mg==","signatures":[{"sig":"MEQCIGzWMHHQ7DXv/dUDdVsj27WmUd3Cp+lZHWsPsXcP4a0/AiB30rEzmmhDgBCpCm19aIIhK60RoZNlqtP3WXwrf7nsMg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pxpipe-proxy@0.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":15479384},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"7a09db6d9fb80caa47bba99a505ede5128cb02bd","scripts":{"test":"vitest run","build":"node scripts/build.mjs","restart":"bash scripts/restart.sh","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","test:restart":"bash tests/restart.test.sh","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:93bec180-eeb4-428b-a500-4c7499cf21ef"}},"repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"12.0.1","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"gpt-tokenizer":"^3.4.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.10.0","vite":"^8.0.16","vitest":"^4.1.6","esbuild":"^0.28.1","wrangler":"^4.92.0","typescript":"^5.4.0","@types/node":"^20.12.0","@napi-rs/canvas":"^0.1.53","@cloudflare/workers-types":"^4.20240512.0"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.11.0_1785030804783_0.2770676002062924","host":"s3://npm-registry-packages-npm-production"}},"0.11.1":{"name":"pxpipe-proxy","version":"0.11.1","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.11.1","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"8c8f863f5f47de215c4964ed92a2235cb46ef141","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.11.1.tgz","fileCount":95,"integrity":"sha512-UJlGGM4QzAOBJu+a6ES5IW0yzkZ5OQP7SY4AOIr2Zbu1E4un715bzrY/RmWHedkHCus+Tuqe976K0mQA0M2yHg==","signatures":[{"sig":"MEYCIQDzsD1XE6+dfkHGL5tz1laKRkvIk5JLeZ8clzIXUptBYgIhAMOEkEaNOq/WZo8IiooEb3WPn7Jc9nIOqyaRsBUe90ds","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pxpipe-proxy@0.11.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":15490213},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"24461918175b6c8aff973bb00aae76eb7c250114","scripts":{"test":"vitest run","build":"node scripts/build.mjs","restart":"bash scripts/restart.sh","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","test:restart":"bash tests/restart.test.sh","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:93bec180-eeb4-428b-a500-4c7499cf21ef"}},"repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"12.0.1","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"gpt-tokenizer":"^3.4.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.10.0","vite":"^8.0.16","vitest":"^4.1.6","esbuild":"^0.28.1","wrangler":"^4.92.0","typescript":"^5.4.0","@types/node":"^20.12.0","@napi-rs/canvas":"^0.1.53","@cloudflare/workers-types":"^4.20240512.0"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.11.1_1785093634007_0.3422818641246177","host":"s3://npm-registry-packages-npm-production"}},"0.12.1":{"name":"pxpipe-proxy","version":"0.12.1","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.12.1","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"1eb101c0c9b73b9154b8d9223ff5c44f96491a52","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.12.1.tgz","fileCount":111,"integrity":"sha512-zas4ETnrk7tDvMaRU7U7sMNrPc/4go5si8eoNwza0BxAPyn6nMicJDHqojJMN+MFJI8QTYId6TuHbLj3hiV0UQ==","signatures":[{"sig":"MEQCIB/NBrqRB86FSYdLKEaUebmNp0HYJ8uicpygXA51HqpsAiByd8d9Rxd7iWCabTgTVIlE3YYh1xwKVK7LHZYWbcl+PQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pxpipe-proxy@0.12.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":15787671},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"25d1e7c48d89c880603091b55dda035d09f749c9","scripts":{"test":"vitest run","audit":"pnpm audit --prod --audit-level high","build":"node scripts/build.mjs","restart":"bash scripts/restart.sh","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","test:restart":"bash tests/restart.test.sh","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:93bec180-eeb4-428b-a500-4c7499cf21ef"}},"repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"12.0.2","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"gpt-tokenizer":"^3.4.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.10.0","vite":"^8.0.16","vitest":"^4.1.6","esbuild":"^0.28.1","wrangler":"^4.92.0","typescript":"^5.4.0","@types/node":"^20.12.0","@napi-rs/canvas":"^0.1.53","@cloudflare/workers-types":"^4.20240512.0"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.12.1_1786235583023_0.6107766008588518","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"pxpipe-proxy","version":"0.13.0","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.13.0","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"b3e60835467ac3a74a3980bf7bdd565bf32fdd72","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.13.0.tgz","fileCount":113,"integrity":"sha512-uMI8vV1aj1dp5rznKv/IkeTah58Q9RUg1QSKLg3ZTYWplWfiF4HjRTYKyDI8/i9uvjXxpb+FZQ4lexwbGZdvYg==","signatures":[{"sig":"MEQCIH6gI0A676sYbkfWJa7HOk06suyQc53yudfIISrGm85BAiAhpnqqTi+mA3HI/6D38pCnQuMmlD/VrFGVWOVU4gUs7A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pxpipe-proxy@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":15846694},"pnpm":{"overrides":{"undici":"7.29.0"}},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"bd46b66d2253a37a9ee310fc1e34d29a84205fc0","scripts":{"test":"vitest run","audit":"pnpm audit --prod --audit-level high","build":"node scripts/build.mjs","restart":"node scripts/restart.mjs","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:93bec180-eeb4-428b-a500-4c7499cf21ef"}},"repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"12.0.2","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"gpt-tokenizer":"^3.4.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.23.5","vite":"^8.2.0","vitest":"^4.1.10","esbuild":"^0.28.1","wrangler":"^4.93.0","typescript":"^7.0.2","@types/node":"^26.1.2","@napi-rs/canvas":"^1.0.3","@cloudflare/workers-types":"^5.20260804.1"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.13.0_1786251162066_0.36526491664166394","host":"s3://npm-registry-packages-npm-production"}},"0.13.1":{"name":"pxpipe-proxy","version":"0.13.1","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"license":"MIT","_id":"pxpipe-proxy@0.13.1","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"bin":{"pxpipe":"bin/cli.js"},"dist":{"shasum":"49540028c7c3df73df6a8a2b01e33df1372b2bcb","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.13.1.tgz","fileCount":113,"integrity":"sha512-DPIlMqp4g5VaIMMYpPal7W3QYzjlsVLpTV7/0Lxr9Zt0+GtgtmJOaRm0x9CP5OgFRrYEJG/rmsKrgG64PRqC7Q==","signatures":[{"sig":"MEYCIQD8s248bIDzbwlE72yHIYTwXHIIN9wT5s1fkKO9O+5kQgIhAIQkRCYshQc3qW6e+3qTRbT//aKHr6HYF05hC8Yf3ced","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pxpipe-proxy@0.13.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":15846923},"pnpm":{"overrides":{"undici":"7.29.0"}},"type":"module","engines":{"node":">=20.19"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"}},"gitHead":"ffbb0d8df4b0b11f9191605a2f81e054fc072b02","scripts":{"test":"vitest run","audit":"pnpm audit --prod --audit-level high","build":"node scripts/build.mjs","restart":"node scripts/restart.mjs","dev:node":"tsx watch src/node.ts","typecheck":"tsc --noEmit","vendor:ui":"node scripts/vendor-ui.mjs","dev:worker":"wrangler dev","test:watch":"vitest","build:atlas":"tsx scripts/gen-atlas.ts","deploy:worker":"wrangler deploy","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:93bec180-eeb4-428b-a500-4c7499cf21ef"}},"repository":{"url":"git+https://github.com/teamchong/pxpipe.git","type":"git"},"_npmVersion":"12.0.2","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"gpt-tokenizer":"^3.4.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.21.0","devDependencies":{"tsx":"^4.23.5","vite":"^8.2.0","vitest":"^4.1.10","esbuild":"^0.28.1","wrangler":"^4.93.0","typescript":"^7.0.2","@types/node":"^26.1.2","@napi-rs/canvas":"^1.0.3","@cloudflare/workers-types":"^5.20260804.1"},"_npmOperationalInternal":{"tmp":"tmp/pxpipe-proxy_0.13.1_1786484680278_0.2233974788540649","host":"s3://npm-registry-packages-npm-production"}},"0.13.2":{"name":"pxpipe-proxy","version":"0.13.2","description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","type":"module","bin":{"pxpipe":"bin/cli.js"},"exports":{".":{"types":"./dist/core/index.d.ts","import":"./dist/core/index.js"},"./transform":{"types":"./dist/core/library.d.ts","import":"./dist/core/library.js"},"./measurement":{"types":"./dist/core/measurement.d.ts","import":"./dist/core/measurement.js"},"./applicability":{"types":"./dist/core/applicability.d.ts","import":"./dist/core/applicability.js"},"./proxy":{"types":"./dist/core/proxy.d.ts","import":"./dist/core/proxy.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"}},"scripts":{"audit":"pnpm audit --prod --audit-level high","build":"node scripts/build.mjs","build:atlas":"tsx scripts/gen-atlas.ts","dev:node":"tsx watch src/node.ts","dev:worker":"wrangler dev","deploy:worker":"wrangler deploy","restart":"node scripts/restart.mjs","typecheck":"tsc --noEmit","test":"vitest run","test:watch":"vitest","prepublishOnly":"pnpm run typecheck && pnpm test && pnpm run build","vendor:ui":"node scripts/vendor-ui.mjs"},"keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"engines":{"node":">=20.19"},"packageManager":"pnpm@10.21.0","pnpm":{"overrides":{"undici":"7.29.0"}},"license":"MIT","devDependencies":{"@cloudflare/workers-types":"^5.20260804.1","@napi-rs/canvas":"^1.0.3","@types/node":"^26.1.2","esbuild":"^0.28.1","tsx":"^4.23.5","typescript":"^7.0.2","vite":"^8.2.0","vitest":"^4.1.10","wrangler":"^4.93.0"},"dependencies":{"gpt-tokenizer":"^3.4.0"},"repository":{"type":"git","url":"git+https://github.com/teamchong/pxpipe.git"},"homepage":"https://github.com/teamchong/pxpipe#readme","bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"gitHead":"3425cc83b676f9df540c0adebaaaf96a11abee76","_id":"pxpipe-proxy@0.13.2","_nodeVersion":"24.15.0","_npmVersion":"12.0.2","dist":{"integrity":"sha512-utMkpkWAjgQyldB62ebWrTFKhTmMKTiwXIktqbHxLixrtgw/g+r9/0nzG2Vz1prKSvH2Q7x9JNrG4LwEmlHQ+g==","shasum":"3abb7c4124e75c2d329e176c76ee57d01324d5ff","tarball":"https://registry.npmjs.org/pxpipe-proxy/-/pxpipe-proxy-0.13.2.tgz","fileCount":115,"unpackedSize":15905307,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pxpipe-proxy@0.13.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDxYqOtRBzXTO41HKUd37DtXjTm5Lvthd6DBvBWBa9blgIhALzIK18tJs/OnpeiJ+eGWOD/p2wQ1vCKQH/2sAZAOMvf"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:93bec180-eeb4-428b-a500-4c7499cf21ef"}},"directories":{},"maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pxpipe-proxy_0.13.2_1787278496304_0.36590946346515696"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-10T11:10:22.692Z","modified":"2026-08-21T02:14:56.943Z","0.2.0":"2026-06-10T11:10:23.215Z","0.2.1":"2026-06-12T09:56:12.774Z","0.3.0":"2026-06-17T17:17:42.487Z","0.3.1":"2026-06-17T19:47:52.876Z","0.4.0":"2026-06-19T20:54:02.302Z","0.5.0":"2026-06-21T01:17:45.657Z","0.6.0":"2026-06-21T21:19:20.596Z","0.6.1":"2026-06-21T21:43:54.494Z","0.6.2":"2026-06-22T15:08:22.973Z","0.6.3":"2026-06-22T20:26:05.358Z","0.6.4":"2026-06-23T10:46:34.570Z","0.6.5":"2026-06-25T21:25:03.556Z","0.6.6":"2026-06-26T00:00:59.148Z","0.6.7":"2026-06-26T02:16:14.190Z","0.6.8":"2026-06-26T04:18:27.603Z","0.6.9":"2026-06-28T03:43:06.668Z","0.6.10":"2026-06-30T16:46:41.671Z","0.7.0":"2026-07-03T04:41:57.099Z","0.7.1":"2026-07-03T05:51:27.751Z","0.7.2":"2026-07-03T13:03:04.205Z","0.8.0":"2026-07-04T02:49:37.456Z","0.9.0":"2026-07-14T13:36:46.735Z","0.10.0":"2026-07-22T15:36:01.541Z","0.11.0":"2026-07-26T01:53:24.990Z","0.11.1":"2026-07-26T19:20:34.351Z","0.12.1":"2026-08-09T00:33:03.228Z","0.13.0":"2026-08-09T04:52:42.327Z","0.13.1":"2026-08-11T21:44:40.564Z","0.13.2":"2026-08-21T02:14:56.596Z"},"bugs":{"url":"https://github.com/teamchong/pxpipe/issues"},"license":"MIT","homepage":"https://github.com/teamchong/pxpipe#readme","keywords":["claude","claude-code","anthropic","fable-5","proxy","token-optimization","prompt-cache","vision-tokens","cloudflare-workers"],"repository":{"type":"git","url":"git+https://github.com/teamchong/pxpipe.git"},"description":"Token-saving proxy for Claude Code: renders bulky context (system prompt, tool docs, old history) as dense PNGs to cut input tokens. Runs on Node and Cloudflare Workers.","maintainers":[{"name":"teamch","email":"teamchong@outlook.com"}],"readme":"# pxpipe\n\n**Cut Claude Code's input tokens by rendering bulky context as images — the same system prompt, tool docs, and history, in a fraction of the tokens.**\n\nAn image's token cost is fixed by its pixel dimensions, not by how much text\nis inside it. Dense content (code, JSON, tool output) packs ~3.1 chars per\nimage-token vs ~1 char per text-token on real Claude Code traffic. The\nreader is the same vision channel that Anthropic's computer use already\nrelies on for screenshots. pxpipe is a local proxy that uses that channel\nfor context: it rewrites the bulky parts of each request into compact PNGs\nbefore it leaves your machine. At current Fable\nlist prices that lands as a **~59–70% lower end-to-end bill** — but prices\nmove and workloads differ, so the durable number is the token cut itself,\nmeasured per-request against a free `count_tokens` counterfactual in\n`~/.pxpipe/events.jsonl`.\n\nThis is what the model sees instead of text:\n\n![example: a real `transformRequest` output: system prompt + tool docs reflowed into one dense page, instruction banner on top, ↵ marking original newlines](https://raw.githubusercontent.com/teamchong/pxpipe/main/docs/assets/example-render.png)\n\n*~48k chars of system prompt + tool docs: ≈25k tokens as text, ≈2.7k image\ntokens as this page. Real pipeline output; the model reads renders like this\nat 100/100 (see benchmarks).*\n\n![chart: characters a frontier context window holds, 2018–2026 — vendor text series including Grok 4.5; orange measured overlays are Fable 5 [1m] + pxpipe ~19.0M (4.8×) and Gemini 3.6 Flash + pxpipe ~21.3M (5.3×)](docs/assets/context-window-chars.png)\n\n*Eight years of context growth, in characters. Every text line tops out near\n~4M chars (a 1M-token window at ~4 chars/token); **Grok 4.5** is shown as a\ntext-window point only (500K). The orange overlays are the **same 1M\nwindows** read through pxpipe images — ~19.0M chars for Fable 5 (**4.8×**) and ~21.3M chars for Gemini 3.6 Flash (**5.3×** text capacity). Density is measured from a live render at\ngeneration time, not hand-typed: regenerate with\n`npx tsx scripts/gen-context-chart.ts`\n([source](scripts/gen-context-chart.ts)).*\n\n## Demo\n\n**Fable 5 (the default, 100/100 reader) — plain left, pxpipe right:**\n\nhttps://github.com/user-attachments/assets/1c8ee63a-fcd7-4958-917b-da788d718349\n\npxpipe counts an exact token **10/10** across 39 imaged filler files\n(matches `grep` line-for-line), gets the multi-step ledger arithmetic right,\nand ends the session at **$6.06** with context to spare (73.5k/1M) vs\n**$42.21** at 96% full. One caveat visible in the clip: the pxpipe arm\nneeded a nudge to match the requested one-line output format.\n\n## Try it (30 seconds)\n\n```bash\nnpx pxpipe-proxy                                  # proxy on 127.0.0.1:47821\nANTHROPIC_BASE_URL=http://127.0.0.1:47821 claude  # point Claude Code at it\n```\n\nDashboard at <http://127.0.0.1:47821/>: tokens saved, every text→image\nconversion side by side, kill switch, live model chips. Responses stream\nnormally — pxpipe compresses the *request* only, never the model's output.\nRecent turns stay text; the system prompt, tool docs, and older bulk history\nare imaged.\n\n### `pxpipe warp`\n\n```bash\npxpipe warp -- claude          # also: cursor-agent, codex, or a shell alias\n```\n\nSame thing without `ANTHROPIC_BASE_URL`, so `/remote-control`, claude.ai\nconnectors, and first-party gates keep working. Full instructions in the\ndashboard.\n\n`api.anthropic.com/v1/messages` is routed by default. Agents that reach their\nprovider over some other base URL need a rule for it, and a rule that names a\nport matches only that port:\n\n```bash\npxpipe warp --route '127.0.0.1:9090/v1/*=http://127.0.0.1:47821' -- codex\n```\n\n## Offline export (no proxy)\n\nYou can render text, files, or diffs to PNG pages without running the proxy or\nconnecting Claude Code:\n\n```bash\nnpx pxpipe-proxy export src/\ncat prompt.txt | npx pxpipe-proxy export --stdin\nnpx pxpipe-proxy export --git\n```\n\nIf the package is installed, use `pxpipe export` instead of\n`npx pxpipe-proxy export`.\n\nEach run writes a fresh `pxpipe-export-XXXXXX/` output folder (the exact path\nis printed when the command finishes) containing `page-*.png`, `factsheet.txt`,\n`manifest.json`, and `prompt.txt`. Upload the PNG pages and paste the prompt\ninto image-upload clients such as Cursor when you want dense visual context\nwithout running the proxy.\n\n## The honest part\n\n- **It is lossy.** Exact 12-char hex strings in dense imaged content:\n  **13/15** on Fable 5 and **0/15** on Sol — misses are *silent\n  confabulations*, not errors. Byte-exact values (IDs, hashes, secrets)\n  must stay text; recent turns do. The factsheet selectively preserves up to\n  96 recognized precision-critical tokens, not every identifier. A dedicated\n  verbatim-risk guard is not built yet.\n- **Escape hatch:** subagents on non-allowlisted models pass through as\n  text — route byte-exact work there\n  (`CLAUDE_CODE_SUBAGENT_MODEL=claude-sonnet-4-6`, or `model: sonnet` in\n  agent frontmatter).\n- **Real work:** SWE-bench Lite pilot **10/10 both arms** at −65% request\n  size; SWE-bench Pro **14/19 ON vs 15/19 OFF** at −60%, verdicts agree\n  18/19, and the single split re-resolved 3/3 on replication — run-to-run\n  variance, not compression. Small n; receipts in `eval/`.\n- **Workload-dependent.** Wins on token-dense content (~1 char/token),\n  loses money on sparse prose (~3.5 chars/token); a profitability gate\n  (calibrated on N=391 production rows) images only where the math wins.\n- **Client-dependent.** Savings track uncached bulk the client still\n  re-sends as text. Claude Code re-sends system + tools + history on\n  `/anthropic/messages` and typically lands ~60–70%. Details and measured\n  splits: [docs/CACHING_AND_SAVINGS.md](docs/CACHING_AND_SAVINGS.md).\n\n<details>\n<summary><strong>Model support and rendering details</strong></summary>\n\n- **`claude-opus-5`:** weaker recall than Fable 5 (verbatim **2/15 vs 13/15**), good\n  enough otherwise (100/100 arithmetic, 0/16 never-stated), **~4.7×** context before\n  `/compact`. Suggested effort: **medium**. Details: [FINDINGS.md](FINDINGS.md).\n- **Model scope:** default `PXPIPE_MODELS=claude-fable-5,gemini-3.6-flash,gemini-3.7-flash`. Opus 5, Sol, GPT 5.5,\n  and **Grok** are opt-in only (dashboard chips or\n  `PXPIPE_MODELS`). The exact Sol id still matters. Sibling variants such as\n  `gpt-5.6-terra` do not\n  inherit Sol's allowlist or render profile. `PXPIPE_MODELS=off` disables\n  imaging. Everything else passes through byte-identical. On the GPT path,\n  tool definitions stay native JSON and no Anthropic `cache_control`\n  markers are used. Responses history compression recognizes completed\n  `function_call`/`function_call_output` pairs, including OpenCode's parallel\n  calls-then-outputs rounds: only old closed rounds are imaged atomically;\n  every open call and malformed/orphan state remains native. The base profile\n  keeps the newest six completed pairs and allows 32 images; Sol keeps one pair\n  and allows 64 images, while Grok allows 24 images. Opt-in long-session\n  coverage can be changed (defensive cap 100) with\n  `PXPIPE_GPT_HISTORY_MAX_IMAGES=48` after validating the provider's request cap.\n- **Per-model rendering:** opt-in `gpt-5.6-sol` and Grok use native 14px\n  JetBrains Mono glyphs in a 9×16 cell, 84 columns, and a 764px full-width\n  strip; Claude keeps its 312-column, 1568×728 5×8 Spleen profile. These\n  are selected by exact model id, including history pages and profitability\n  math. Recognized IDs can ride in the bounded factsheet, and\n  recent/open tool state stays native.\n  [Sol receipts](eval/sol-profile/QUALITY_RESULTS.md) and\n  [profile evidence](docs/MODEL_RENDER_PROFILES.md).\n- **Grok 4.5 (opt-in):** native 14px / 84 cols / maxH 512 (100/100 arith, 97/98 gist).\n  Off by default (dense hex still 0/15).\n  Enable with\n  `PXPIPE_MODELS=claude-fable-5,grok-4.5` or the dashboard chip.\n  [eval/grok-density/QUALITY_RESULTS.md](eval/grok-density/QUALITY_RESULTS.md).\n\n</details>\n\n## Benchmark results and receipts\n\n### Model quality\n\nThis matrix shows coverage as well as scores. `—` means the model was not run\non that test; it does not mean zero. Arithmetic uses novel random-number\nproblems. Gist, state, and never-stated probes share one corpus. Never-stated\nis confabulations, so lower is better.\n\n| model | arithmetic (N=100) | gist (N=98) | state (N=18) | never-stated (N=16) | dense hex (N=15) | profile provenance and receipts |\n| --- | ---: | ---: | ---: | ---: | ---: | --- |\n| `claude-fable-5` | **100/100** | **98/98** | **18/18** | **0/16** | 13/15 | June 2026 production profiles: [arithmetic + hex](FINDINGS.md), [gist/state/guards](eval/gist-recall/) |\n| `google/gemini-3.6-flash`, `3.7-flash` | **100/100** | **98/98** | **18/18** | **0/16** | **14/15** | current shipped profile: [quality results](eval/gemini-profile/QUALITY_RESULTS.md) |\n| `claude-opus-5` | **100/100** | 94/98 | 17/18 | **0/16** | 2/15 | current profile: [arithmetic](eval/gsm8k/), [gist/state/guards](eval/gist-recall/), [dense hex](eval/verbatim-15/) |\n| `gpt-5.6-sol` | 98/100 | 83/98 | 17/18 | 4/16 | 0/15 | prior 5×8 broad suite; native 14px pilot: 7/8 exact, 0 inventions, gist/guard pass: [pilot](eval/sol-profile/README.md) |\n| `claude-opus-4-8` | 93/100 | 77/98 | **18/18** | **0/16** | 0/15 | historical profile: [arithmetic](eval/gsm8k/), [gist/state/guards](eval/gist-recall/), [dense hex](eval/needle-haystack/) |\n| `grok-4.5` | **100/100** | **97/98** | 17/18 | **0/16** | 0/15 | native 14px/84 quality suite (live profile); [quality](eval/grok-density/QUALITY_RESULTS.md), [native-sweep](eval/grok-density/native-sweep/RESULTS.md) |\n| `grok-4.6` high | **100/100** | **97/98** | 17/18 | **0/16** | 0/15 | native 14px/84, reasoning high; [quality](eval/grok-profile/QUALITY_RESULTS.md) |\n| `moonshotai/kimi-k3` | 79/100 | 84/98 | 15/18 | 1/16 | 0/15 | generic GPT profile: [quality results](eval/sol-profile/KIMI_K3_QUALITY_RESULTS.md) |\n| `qwen-3.8` (`@cf/qwen/qwen3.8-27b`) | 98/100 | 72/98 | 11/18 | **0/16** | 0/15 | prior 5×8 broad suite (0/15 hex); native 14px pilot: 8/8 exact, 0 inventions, 11/15 hex: [pilot & quality](eval/qwen-profile/QUALITY_RESULTS.md) |\n\n### Native-profile cost check\n\nOffline export of the same deterministic 454,045-character dense record corpus\nthrough each complete profile produced:\n\n| model profile | pages | text estimate | image tokens | savings |\n|---|---:|---:|---:|---:|\n| Claude, Spleen 5×8 | 17 | 122,715 | 23,856 | 80.6% |\n| Sol, JetBrains Mono 14px | 45 | 122,715 | 65,424 | 46.7% |\n\nThe text estimate uses 3.7 characters/token; image tokens use each model's\nprovider formula and actual rendered page dimensions. These figures establish\nprofile cost on this corpus, not a universal workload savings rate. Sol's paid\nfixtures estimated 42% while reading 7/8 exact with no unsupported inventions.\n\nThe runs use different transports and profile generations, not one identical\nimage geometry. Fable and Opus use Claude; Gemini uses Google AI Studio; Sol\nand Grok use Codex Responses; Kimi K3 uses Cloudflare's OpenAI-compatible\ntransport. Current production profiles include the adjacent bounded factsheet;\nhistorical or pure-image exceptions are identified in the linked evaluation.\n\n### Model-specific evaluations\n\nThese are not cross-model comparisons. Every unlisted model is **not run**.\n\n| test | model | result | evaluation and receipts |\n| --- | --- | --- | --- |\n| SWE-bench Lite | `claude-fable-5` | pxpipe 10/10; text 10/10; −65% request size | [paired pilot](eval/swe-bench/) |\n| SWE-bench Pro | `claude-fable-5` | pxpipe 14/19; text 15/19; −60% request size | [paired pilot](eval/swe-bench-pro/) |\n| production-history row localization | `google/gemini-3.6-flash` | text 17/30; pxpipe 18/30 | [positional retrieval](eval/gemini-profile/QUALITY_RESULTS.md#production-history-positional-retrieval) |\n| production-history exact row | `google/gemini-3.6-flash` | text 3/30; pxpipe 3/30 | [positional retrieval](eval/gemini-profile/QUALITY_RESULTS.md#production-history-positional-retrieval) |\n\nThe SWE-bench runner is Claude Code/Fable-specific; no other model has an ON/OFF\nrun. Gemini's positional-retrieval sweep is directional evidence, not a general\nLost-in-the-Middle result.\n\n### Capacity / density (how many chars per vision-token?)\n\nMeasured by rendering this repo’s dense fixture through the real pipeline and\npricing pixels at each family’s vision rate. Multiplier = measured\nchars/vision-token ÷ 4 (prose text baseline). Not a model-quality score.\n\n| family | window | as text (@4 c/tok) | as pxpipe images | density | multiplier |\n|---|---:|---:|---:|---:|---:|\n| **`claude-fable-5[1m]`** (default) | 1M | ~4.0M | **~18.9M** | ~18.9 c/vt (exact 28px patches) | **~4.7×** |\n| **`google/gemini-3.6-flash`** | 1M | ~4.0M | **~20.1M** | ~20.1 c/vt (1,078 tok/page) | **~5.0×** |\n| **`claude-opus-5`** | 1M | ~4.0M | **~18.9M** | ~18.9 c/vt (resolves to Fable 5’s geometry) | **~4.7×** |\n\nRegenerate: `npx tsx scripts/gen-context-chart.ts` · chart PNG\n[`docs/assets/context-window-chars.png`](docs/assets/context-window-chars.png).\n\nThe older GSM8K result is omitted because its training-data contamination can\nhide image misreads; the linked arithmetic evaluations use novel numbers.\n\n## How it works\n\n```\nmodel id ──► render profile ──► wrap/reflow bulk context ──► PNG[] + bounded factsheet\n```\n\nThe proxy handles Anthropic Messages, OpenAI Responses and Chat Completions,\nand Google `generateContent` requests. It rewrites eligible bulk into image\nblocks and forwards the provider-native request, or bridges Anthropic Messages\nto a configured OpenAI-compatible provider. On Anthropic, the static prefix and\nprompt-cache boundary are preserved. Model-specific profiles control geometry,\nfactsheets, history retention, and profitability, so sparse prose stays text.\nEvents log to `~/.pxpipe/events.jsonl`.\n\n## Library use (no proxy)\n\n```ts\nimport { renderTextToImages, transformAnthropicMessages } from \"pxpipe-proxy\";\n\nconst { pages } = await renderTextToImages(toolResultText);     // pages[i].png: Uint8Array\nconst { body, applied, info } = await transformAnthropicMessages({\n  body: requestBytes,\n  model: \"claude-fable-5\",\n});\n```\n\n`options.keepSharp(block)` pins blocks as text; `options.emitRecoverable`\nreturns the originals of imaged blocks. Pure-JS runtime (Node and\nedge/Workers); `@napi-rs/canvas` is build-time only. Full API:\n`src/core/index.ts`.\n\n<details>\n<summary><strong>Offline stats (no proxy): <code>pxpipe stats</code></strong></summary>\n\nThe live dashboard shows savings while the proxy is running. To read the same\nevent log **after the fact** — with no server up — summarize it straight from\ndisk:\n\n```bash\npxpipe stats                   # human report from ~/.pxpipe/events.jsonl\npxpipe stats --json            # same aggregate as machine-readable JSON\npxpipe stats --file /path/to/events.jsonl\n```\n\nAlongside request counts, compression ratios, latency percentiles, and\ncache-hit rates, the report prints a **measured savings** headline —\n`count_tokens` of the original body versus real usage, over probe-measured rows\nonly (unmeasured requests are excluded, never counted as zero). This is a\n**raw-token** figure (cache reads at face value, not cost-weighted), so it is\ndeliberately a different quantity from the dashboard's cost-weighted saved %.\nPoint it at a non-default log with `--file`, or set `PXPIPE_LOG`.\n\nExit codes: `0` report printed, `1` events file not found, `2` file present but\nno valid events. `pxpipe stats --help` prints usage.\n\n</details>\n\n## Development\n\n```bash\npnpm install && pnpm test\npnpm run build                # regenerates dist/\n```\n\nWindows is community-supported: primary development targets macOS/Linux, and Windows-specific fixes rely on contributor PRs (thanks @makoribrian).\n\n## FAQ\n\n<details>\n<summary><strong>Is the headline end-to-end, or only on the requests you touched?</strong></summary>\n\nEnd-to-end, the whole bill. Most compression tools report savings only on\nthe input slice they touched, which flatters the number. The end-to-end\ndenominator is *every* production request: the small ones pxpipe correctly\nleft untouched, all cache writes and reads, and all output tokens (which the\nproxy never compresses). On a 13,709-request snapshot that was 59% ($100 →\n~$41); a later 8,904-compressed-request trace measured ~70%. Compressed-only\nruns higher (~72–74%) and is quoted separately, never as the headline. The\nexact figure is workload-dependent — reproduce it on your own log.\n\n</details>\n\n<details>\n<summary><strong>How is the math measured?</strong></summary>\n\nBoth sides of the same request, at the same moment. For every `/v1/messages`\nPOST the proxy fires a free `count_tokens` probe on the original uncompressed\nbody (the counterfactual) in parallel with the real forward, and reads\nAnthropic's actually-billed usage block off the response. Both land in the\nsame row of `~/.pxpipe/events.jsonl`, so there is no turn-count or\nrun-to-run confound. Dollar conversion uses Fable 5 list ratios: input ×1.0,\ncache write ×1.25, cache read ×0.1, output ×5. Cache pricing is applied\nidentically to both sides, so the caching discount cancels and cannot be\ndouble-counted as \"savings\". Re-derive it yourself from the events log: the\nformula and field names are documented in `src/core/baseline.ts`.\n\n</details>\n\n<details>\n<summary><strong>What does it actually compress?</strong></summary>\n\nThree kinds of *input* blocks, each behind a profitability gate:\n\n1. large `tool_result` bodies (file reads, command output, logs) above\n   ~6k chars of token-dense content\n2. older collapsed history: turns behind the live tail get re-rendered as\n   image pages, recent turns always stay text\n3. the static cacheable system prompt + tool docs slab; appended non-cacheable\n   system blocks stay live text so host custom instructions keep system-level\n   salience\n\nEverything else passes through byte-identical: your messages, recent turns,\nthe model's output (it is the response, the proxy never touches it), sparse\nprose, and anything too small to win. Model defaults and detailed results are\nlisted under [model support](#the-honest-part) and\n[benchmarks](#benchmark-results-and-receipts).\n\n</details>\n\n<details>\n<summary><strong>Has it ever failed for real, outside the benchmarks?</strong></summary>\n\nYes, once in weeks of daily use: the model recalled a person's name from\nimaged chat history and got it confidently wrong. No error, just a\nplausible wrong name. That is the documented failure mode: exact strings\nin imaged content are not byte-safe. Coding sessions tolerate this because\nthe agent re-reads files before editing; pure chat recall has no such check.\nThis failure mode is measured, not anecdotal:\n[the legibility audit](docs/LEGIBILITY-AUDIT-2026-07-01.md) quantifies\nexact-string recall off rendered pages (blind reads top out at 63% on dense\nidentifiers, with every miss predicted by a glyph-confusability matrix) and\ndocuments the shipped mitigations — page geometry clamped to the API's\nresample cap so billed pixels actually reach the vision encoder, and selected\nidentifiers (SHAs, numbers) riding alongside as text.\n\n</details>\n\n<details>\n<summary><strong>Why are misses silent confabulations instead of read errors?</strong></summary>\n\nBecause model vision is not OCR: the image becomes patch embeddings, never\ndiscrete characters, so there is no per-glyph confidence to fail loudly\non. When pixels underdetermine a glyph, the language prior fills the gap\nwith something plausible. Mechanism and receipts:\n[docs/NOT-OCR.md](docs/NOT-OCR.md).\n\n</details>\n\n<details>\n<summary><strong>Didn't DeepSeek-OCR show this doesn't hold up in practice?</strong></summary>\n\nNo: it proved the channel works, using an encoder/decoder pair trained for\nthe job. The skepticism dates from October 2025, when no stock production\nmodel could read dense renders; that changed with Fable 5 (0/15 verbatim\nhex on the prior Opus generation vs 13/15 on Fable 5, same pages). Timeline and per-model\nnumbers: [docs/NOT-OCR.md](docs/NOT-OCR.md).\n\n</details>\n\n<details>\n<summary><strong>Why does the README read like an AI wrote it?</strong></summary>\n\nBecause one did. Most of this repo's commits — the code and the docs — were\nauthored by Opus/Fable agent sessions running behind pxpipe itself, reading\ntheir own collapsed history as image pages while they worked.\n\n</details>\n\n## Additional limitations\n\n- PNG encoding adds latency to large requests before they leave.\n- ASCII/Latin-1 well tested; CJK works but conservatively.\n\n## Research status\n\nCurrent as of 2026-07-22. The broad conclusion from the 2026-07-05 pass still\nholds: exact recall is limited by pixels per glyph, so rendering changes do not\neliminate errors at profitable density. A later glyph-style A/B did find a\nuseful local improvement: repainting `K` reduced Fable's H/K error from 47.2%\nto 18.7% without changing geometry or token cost. It shipped, but exact control\nIDs did not improve. See [FINDINGS.md](FINDINGS.md), 2026-07-19 entry.\n\nRuntime canary + text re-fetch and surrogate-reader pre-flight remain untested.\nThe release tripwire remains a resolution sweep for each new model; a model\nthat reads production cells near 100% would permit higher density.\n\nEffective-context benefits remain unproven. The production-history results\nabove are directional evidence, not a general context-window or long-task\naccuracy claim.\n\n## Community projects\n\nThird-party projects listed here are not maintained or supported by pxpipe.\n\n- [pxpipe-windows](https://github.com/DivyeshPatro/pxpipe-windows) — Windows support for `pxpipe mitm` (node-forge CA in place of openssl, Task Scheduler autostart).\n- [OmniGlyph](https://github.com/diegosouzapw/OmniGlyph) — A community-maintained project derived from pxpipe and used by [OmniRoute](https://github.com/diegosouzapw/OmniRoute).\n- [pxpipe-go](https://github.com/evan-choi/pxpipe-go) — A Go port of pxpipe's core with a CLI wrapper, standalone proxy, and embeddable library for Anthropic Messages and OpenAI Chat/Responses.\n\n## License\n\nMIT.\n","readmeFilename":"README.md"}