{"_id":"@monotykamary/pi-vcc","_rev":"29-690493fefbeeb67eeb2a4d9383be45c6","name":"@monotykamary/pi-vcc","dist-tags":{"latest":"0.8.12"},"versions":{"0.3.16":{"name":"@monotykamary/pi-vcc","version":"0.3.16","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.3.16","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"homepage":"https://github.com/monotykamary/pi-vcc#readme","bugs":{"url":"https://github.com/monotykamary/pi-vcc/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"5681cc30ab8600ac08d83df4cc93b11c09e55337","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.3.16.tgz","fileCount":76,"integrity":"sha512-w9lS1BFZlliv8zMKyoW8XtycoDeRh+Bvj1s0YsbxnUHPxL9z8UcqVEcc9vhJbg1qZKOx1kSOSKA+eNNglTLWyw==","signatures":[{"sig":"MEYCIQDiHYUuhO9MRvj0Zy6LPf4F2ysfFnU8l4493tCvfH9QhwIhAO0V5rpRXPPvKDJQJSydC3l96gWUYzXkEF6BrHSlPAnV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16964936},"main":"index.ts","gitHead":"af5394329e0971d3f8902f419a6cc1122c93bd73","scripts":{"lint:dead":"knip","typecheck":"tsc --noEmit"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"_npmVersion":"11.12.1","description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":true,"devDependencies":{"knip":"6.14.1","typescript":"6.0.3"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":">=0.74.0 <1.0.0","@earendil-works/pi-agent-core":">=0.74.0 <1.0.0","@earendil-works/pi-coding-agent":">=0.74.0 <1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.3.16_1781064823461_0.3039213874664872","host":"s3://npm-registry-packages-npm-production"}},"0.3.17":{"name":"@monotykamary/pi-vcc","version":"0.3.17","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.3.17","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"homepage":"https://github.com/monotykamary/pi-vcc#readme","bugs":{"url":"https://github.com/monotykamary/pi-vcc/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"0f0f21a9421fb5be1ae23cb22e8b3ab2887d516d","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.3.17.tgz","fileCount":76,"integrity":"sha512-Pi2/Pb0oWRwAbZweMIN4MBOCcH2l6AnVxlcAGhiROvXofSWu5JAj2eFVkQ+gORjA4jkFWRu2+2SZDQO4GCjhmQ==","signatures":[{"sig":"MEUCIFDhD9ztb5BLdjz0L3e+JhCmBPqL1fgGioGrOLzROMmmAiEA52Ewe1uxMSAVYUk0kblnfhz5hKN+W+RbHSGbCpQ8s94=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16961268},"main":"index.ts","gitHead":"ad5200ea3a27cbf9d3bd559995081727cf0bf8dc","scripts":{"lint:dead":"knip","typecheck":"tsc --noEmit"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"_npmVersion":"11.12.1","description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":true,"devDependencies":{"knip":"6.14.1","typescript":"6.0.3"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":">=0.74.0 <1.0.0","@earendil-works/pi-agent-core":">=0.74.0 <1.0.0","@earendil-works/pi-coding-agent":">=0.74.0 <1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.3.17_1781124246370_0.6012117307411833","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@monotykamary/pi-vcc","version":"0.4.0","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.4.0","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"homepage":"https://github.com/monotykamary/pi-vcc#readme","bugs":{"url":"https://github.com/monotykamary/pi-vcc/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"47258c8768b4003b67c35b951246c0aa7b7d4ee3","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.4.0.tgz","fileCount":80,"integrity":"sha512-Ct96T/phU0+64cyWbuHXXsoHcAtgP5QepNczoi8vGVQJZ4of7gwulhBwVnKIbT9Ws/fssKtBl2/v0dXOruO4ew==","signatures":[{"sig":"MEQCIG4UaVmrdyBT/GKSeffNvD+atU5NZdZydsUgdtwK9XFjAiBU5SMzjLONfjwq9hrbOdwaPPrlZDB5DqmKrh0TOJ/38g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17006005},"main":"index.ts","gitHead":"6073df8d8b42fd804935823d005999dbf7702e06","scripts":{"lint:dead":"knip","typecheck":"tsc --noEmit"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"_npmVersion":"11.12.1","description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":true,"devDependencies":{"knip":"6.14.1","typescript":"6.0.3"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":">=0.74.0 <1.0.0","@earendil-works/pi-agent-core":">=0.74.0 <1.0.0","@earendil-works/pi-coding-agent":">=0.74.0 <1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.4.0_1781156640775_0.43667197564255966","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@monotykamary/pi-vcc","version":"0.4.1","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.4.1","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"homepage":"https://github.com/monotykamary/pi-vcc#readme","bugs":{"url":"https://github.com/monotykamary/pi-vcc/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"f71a09d81c1c2fe95c80441296a77796660952bb","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.4.1.tgz","fileCount":36,"integrity":"sha512-7V7YlKuT/e5QwubOj2EY10ptJclSwq42YND52xC1XJouwGNu6WiCoaagqQvBtS/JH3rXcHfJw3hfrrl5lyPquQ==","signatures":[{"sig":"MEUCIQCCrh3YT+lZu9zjg7QEqkWIyRiTvmiF2SwB9e3BM6dFRgIgNM/u1eDRzhdNY5rd8bO5tkIbQ/XfeOoHZYnEbh/QK5g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":313829},"main":"index.ts","gitHead":"976ac9c4b1e33ab9f186eda6f6918dc632e148d8","scripts":{"lint:dead":"knip","typecheck":"tsc --noEmit"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"_npmVersion":"11.12.1","description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":true,"devDependencies":{"knip":"6.14.1","typescript":"6.0.3"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":">=0.74.0 <1.0.0","@earendil-works/pi-agent-core":">=0.74.0 <1.0.0","@earendil-works/pi-coding-agent":">=0.74.0 <1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.4.1_1781156757604_0.7251274013675291","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@monotykamary/pi-vcc","version":"0.5.0","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.5.0","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"homepage":"https://github.com/monotykamary/pi-vcc#readme","bugs":{"url":"https://github.com/monotykamary/pi-vcc/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"cbab3d6c24abee4895fa4150a40e1664d87448b3","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.5.0.tgz","fileCount":37,"integrity":"sha512-K2ipSGLx2Bh7c20hF0GmsAuAFEow/JYP0QhRM8A53ohwXHCFVwNlqgkQ7duFdF9ioiENI3FEgkIBbCmnp8eIXQ==","signatures":[{"sig":"MEUCIHISiJ6/ug3OxOIPc3FROi5shpGeaxqMWT7HFRSyHevfAiEA7Spwk7tjTS43ZmnIelYYLjZ3YYJ4qRRvKxE9/SaF+Po=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":326044},"main":"index.ts","gitHead":"5844d755967232ac0621316eb9a33fb15fee4e06","scripts":{"lint:dead":"knip","typecheck":"tsc --noEmit"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"_npmVersion":"11.12.1","description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":true,"devDependencies":{"knip":"6.14.1","typescript":"6.0.3"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":">=0.74.0 <1.0.0","@earendil-works/pi-agent-core":">=0.74.0 <1.0.0","@earendil-works/pi-coding-agent":">=0.74.0 <1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.5.0_1781230787233_0.8244024761333713","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@monotykamary/pi-vcc","version":"0.6.0","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.6.0","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"homepage":"https://github.com/monotykamary/pi-vcc#readme","bugs":{"url":"https://github.com/monotykamary/pi-vcc/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"6c43bbe99ae497c5494633f0ce44409e476cd3ad","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.6.0.tgz","fileCount":38,"integrity":"sha512-QGBZwqHdD1bXjbZcac6kJPCrzsxhxNVJZA/CK6+xYcI+Wx+NaPyyZs6I0zpIKWUvcOdgOef2N4htzp7Nq2c3Ww==","signatures":[{"sig":"MEUCIDl9BJRFGIdfrmP8hwBr1ZmwsbWwj9f2zKmVfHG7+IGrAiEAgvQFgme1dntml/h/4cNTBu3Rh79aYeoICiGwICG90s0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":351843},"main":"index.ts","gitHead":"594768f2c5fa243cc57944e29fb19a8122b82974","scripts":{"lint:dead":"knip","typecheck":"tsc --noEmit"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"_npmVersion":"11.17.0","description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":true,"devDependencies":{"knip":"6.14.1","typescript":"6.0.3"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":">=0.74.0 <1.0.0","@earendil-works/pi-agent-core":">=0.74.0 <1.0.0","@earendil-works/pi-coding-agent":">=0.74.0 <1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.6.0_1781661694099_0.6171605236200142","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@monotykamary/pi-vcc","version":"0.6.1","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.6.1","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"homepage":"https://github.com/monotykamary/pi-vcc#readme","bugs":{"url":"https://github.com/monotykamary/pi-vcc/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"5ab927ada2742561e907af726e74bf1d8f966669","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.6.1.tgz","fileCount":38,"integrity":"sha512-82qrKdTcl8CW3tthF4eAodVKPiOuVi5DR3x01Eh7k+r1+c0n75ui8BEuPaUavcf0fXzYC0pap3iu3//u6e++aA==","signatures":[{"sig":"MEUCIQC83n31zXw5nDqOcCd/XLJ6KKMrmLnyzJ5qq3YnU78sHAIgHlhrg0M0nbKBvG916vGFC5hqSj60HWhCUee9eT71+pY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":405225},"main":"index.ts","gitHead":"3e8879109cf19fd814b64717ad84cae3d42801ce","scripts":{"lint:dead":"knip","typecheck":"tsc --noEmit"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"_npmVersion":"11.17.0","description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":true,"devDependencies":{"knip":"6.14.1","typescript":"6.0.3"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":"^0.79.8","@earendil-works/pi-agent-core":"^0.79.8","@earendil-works/pi-coding-agent":"^0.79.8"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.6.1_1781881312433_0.42884067664691083","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"@monotykamary/pi-vcc","version":"0.6.2","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.6.2","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"6db75d75262d248c4072e3baca0c305fbdfaf460","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.6.2.tgz","fileCount":40,"integrity":"sha512-x7N31n40JqK+eosxabVDWj/LbKQG7s1dxnwZjsmdrX0B+o1Eu0nbjmdYBZr0dVByrgpMtmOQIQ4/hJqEyP/P2A==","signatures":[{"sig":"MEUCIHN2ghIVwtpdSRpDNoBJ28gQQMct3womijZUY3DImxRlAiEAhod0bK+p2jT1ZChBwOqO9JOxJ76aaMlROifeucnBsnk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":407958},"main":"index.ts","scripts":{"lint:dead":"knip","typecheck":"tsc --noEmit"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":true,"devDependencies":{"knip":"6.14.1","typescript":"6.0.3","@types/node":"^26.0.0"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":"^0.79.8","@earendil-works/pi-agent-core":"^0.79.8","@earendil-works/pi-coding-agent":"^0.79.8"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.6.2_1782292175972_0.18169353007010947","host":"s3://npm-registry-packages-npm-production"}},"0.6.3":{"name":"@monotykamary/pi-vcc","version":"0.6.3","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.6.3","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"5e7691e598c5208f86830aacac379b63bc55f187","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.6.3.tgz","fileCount":40,"integrity":"sha512-nAcen2qfCgt7hLIIz1E/NufLSJMCTEEo0I0yxoyArMsPbUlDuRgZc2THWJsqpACvMxbw9tVDIfMZoNqKbZAAbQ==","signatures":[{"sig":"MEUCIHvYYrxUCmgwSsr+YV85WTME9IL7uEFy4lHPbz9pGDZRAiEAi2CfF2hmlDsCFzfVCosKIlQLMOUOJI97d9anqSv2oeY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":407718},"main":"index.ts","scripts":{"lint:dead":"knip","typecheck":"tsc --noEmit"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":true,"devDependencies":{"knip":"6.14.1","typescript":"6.0.3","@types/node":"^26.0.0"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":"^0.79.8","@earendil-works/pi-agent-core":"^0.79.8","@earendil-works/pi-coding-agent":"^0.79.8"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.6.3_1782399853752_0.24551204637313107","host":"s3://npm-registry-packages-npm-production"}},"0.6.4":{"name":"@monotykamary/pi-vcc","version":"0.6.4","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.6.4","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"c183d25c23ad1bebb483e32f13bf6315a927eba8","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.6.4.tgz","fileCount":40,"integrity":"sha512-H3vh2v5zTjIW+PuQ7LlY0Th+ZXnxnVJYZHLi7gxtmwAuZJ7STumUYRJsfmM47nzkLE94upxBlpcZ4UrFOdgUpw==","signatures":[{"sig":"MEUCICRU/Bt89ygn3kZvbDzv3f0AF72V2fQa3KPNGbe9L5pSAiEA45yPalNviblj9CXJ/EglCj8cDS9ycFmaQWOsX3Work0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":407721},"main":"index.ts","scripts":{"lint:dead":"knip","typecheck":"tsc --noEmit"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":true,"devDependencies":{"knip":"6.14.1","typescript":"6.0.3","@types/node":"^26.0.0"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":"^0.79.8","@earendil-works/pi-agent-core":"^0.79.8","@earendil-works/pi-coding-agent":"^0.79.8"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.6.4_1782499238477_0.6108062345958953","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@monotykamary/pi-vcc","version":"0.7.0","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.7.0","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"327c9442063c00e8d39ded5afc39d79973dcfb14","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.7.0.tgz","fileCount":40,"integrity":"sha512-AwndkNwFptFpxQU3l1T/EEKhyXWCuHAKYmUD7dJ3FaxeFVaJBZ7BdVF5gdu3p652GgiWw7SA+YxXGbFfXt4ldg==","signatures":[{"sig":"MEUCIAlID3zgONHIgHc9ZUOfaBs1BXod5a4JxQhP2zzBxPaIAiEAlGQG3NoOyWHyn2rFXy0MXretll28xol4GisdwFc9POs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":409251},"main":"index.ts","scripts":{"lint:dead":"knip","typecheck":"tsc --noEmit"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":true,"devDependencies":{"knip":"6.14.1","typescript":"6.0.3","@types/node":"^26.0.0"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":"^0.79.8","@earendil-works/pi-agent-core":"^0.79.8","@earendil-works/pi-coding-agent":"^0.79.8"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.7.0_1783096064208_0.3195964802674933","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@monotykamary/pi-vcc","version":"0.7.1","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.7.1","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"a480f5077eebf0b6df186dce8a5f2f35cab42f53","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.7.1.tgz","fileCount":40,"integrity":"sha512-HCbPmw1R7u6yDlk6HotgXpwm2Kz99+EGj3aMWYlsGO9RwgLxht3bueEP1/vZQbMUTg7Ti53Sp5HxAT56a0sA0w==","signatures":[{"sig":"MEUCIB8XDbmMknykn+JIBU9bBAH2v2rW7cDY4YRqXiUuWhpeAiEA/Xgc9FbO7EN45ZFOsYH20UUHaHrRfX1zYtWHkvc7zxc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":414717},"main":"index.ts","scripts":{"lint:dead":"knip","typecheck":"tsc --noEmit"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":true,"devDependencies":{"knip":"6.14.1","typescript":"6.0.3","@types/node":"^26.0.0"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":"^0.79.8","@earendil-works/pi-agent-core":"^0.79.8","@earendil-works/pi-coding-agent":"^0.79.8"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.7.1_1783133397418_0.5561908068796309","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"@monotykamary/pi-vcc","version":"0.7.2","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.7.2","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"25c22180f3ab11ceee69e3464be4f77797af37ae","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.7.2.tgz","fileCount":41,"integrity":"sha512-dr6/Buw2ATla86jQxU4RzuhCX3Iu5qvtt9cY7qN6h0QDTTseAaAWCpf49AZBY8g+iVLeRIhFRO48kglSPVBHOg==","signatures":[{"sig":"MEUCICcbR/HABZNkdw4GK3FZKpe3Nyv1WTa3icIwSL+qLUQ/AiEAwhheKbld37qnEyHFIhE0yJYE3OrwebEw06ZEUMCjAFw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":417447},"main":"index.ts","scripts":{"lint:dead":"knip","typecheck":"tsc --noEmit"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":true,"devDependencies":{"knip":"6.14.1","typescript":"6.0.3","@types/node":"^26.0.0"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":"^0.79.8","@earendil-works/pi-agent-core":"^0.79.8","@earendil-works/pi-coding-agent":"^0.79.8"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.7.2_1783865745461_0.6772887867318609","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"name":"@monotykamary/pi-vcc","version":"0.7.3","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.7.3","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"220f100dc5aeec2e141668de5243190942617547","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.7.3.tgz","fileCount":41,"integrity":"sha512-bIdFE4s833HDrG0dYoscTfUgbw4Fh7vNfLW+FRlfAC4XGOQzr81TdWduAOUTcqyj8dliTftINHbX+C8Iq31FeQ==","signatures":[{"sig":"MEYCIQCgMAhzwy4W9Wa6cizc0r04talL7/r5jmuvNsBfJzKmpQIhAPeAK4uJzqYJGuL/J/1go8kTpdYf5hrVWh9gZrw1GM0P","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":421191},"main":"index.ts","scripts":{"lint:dead":"knip","typecheck":"tsc --noEmit"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":true,"devDependencies":{"knip":"6.14.1","typescript":"6.0.3","@types/node":"^26.0.0"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":"^0.79.8","@earendil-works/pi-agent-core":"^0.79.8","@earendil-works/pi-coding-agent":"^0.79.8"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.7.3_1783870082672_0.8574340008672168","host":"s3://npm-registry-packages-npm-production"}},"0.7.4":{"name":"@monotykamary/pi-vcc","version":"0.7.4","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.7.4","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"35892595df767aaf50fba1e55430600e9094aad0","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.7.4.tgz","fileCount":41,"integrity":"sha512-Vc6l7muFHphty7+I6gJaNUiUvtGgZ9tLzZytEfolVC/aCHiDlfCgyYDMO3JtTxxKnCAzkEu585Wi+Oheuu//tg==","signatures":[{"sig":"MEUCIBkVc2TBHhrzZML0CCe6KalgkkdNy+r41Az9dqVCRhYSAiEAzd2RHi35gbMpXvx8Ugaix4KcDFEUloza+xZeL5NB9zA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":422860},"main":"index.ts","scripts":{"lint:dead":"knip","typecheck":"tsc --noEmit"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":true,"devDependencies":{"knip":"6.14.1","typescript":"6.0.3","@types/node":"^26.0.0"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":"^0.79.8","@earendil-works/pi-agent-core":"^0.79.8","@earendil-works/pi-coding-agent":"^0.79.8"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.7.4_1783894199282_0.46666117391057904","host":"s3://npm-registry-packages-npm-production"}},"0.7.5":{"name":"@monotykamary/pi-vcc","version":"0.7.5","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.7.5","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"91b07304f4404c8fc0be37bbe1c4f85137273583","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.7.5.tgz","fileCount":41,"integrity":"sha512-EJg8BmSO7yZmeau8TFG41edYaakPQMkZc7ebJhvCvKmx5jsq9olOXniVtDZ0lfEoBJRwBqDdSX+oyzjydPHttw==","signatures":[{"sig":"MEQCICpXI1VZytWubp/fsq1Dq9bdmOy9ebNd5nVI8vFat47ZAiBgLcSC6ID2/84op2LwEllZ7DnK+HmvZUFUflrv+dIYgw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":418787},"main":"index.ts","scripts":{"lint:dead":"knip","typecheck":"tsc --noEmit"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":true,"devDependencies":{"knip":"6.14.1","typescript":"6.0.3","@types/node":"^26.0.0"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":"^0.79.8","@earendil-works/pi-agent-core":"^0.79.8","@earendil-works/pi-coding-agent":"^0.79.8"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.7.5_1784277866231_0.2101925906678659","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@monotykamary/pi-vcc","version":"0.8.0","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.8.0","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"0d1d8b71a035b0788b5729ea9ab77c9dbc8ff16f","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.8.0.tgz","fileCount":41,"integrity":"sha512-Mz0IyyE1+Pf5FO/FKAOYdAm3QBPempDvzzAP4phbnKNLcNgG+Q1Zvv1sEI/Yfwcy3Hvz5pHjb8rz9g5JEU+hFg==","signatures":[{"sig":"MEQCIGi03wPt7W1YAalKmTi9JXgScAavgb7Stj4U51BaznrtAiBcHG+GOIxtDKclLt59j1vQP8B+X01gd1eDPbj2N0dUiQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":421226},"main":"index.ts","scripts":{"lint:dead":"knip","typecheck":"tsc --noEmit"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":true,"devDependencies":{"knip":"6.14.1","typescript":"6.0.3","@types/node":"^26.0.0"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":"^0.79.8","@earendil-works/pi-agent-core":"^0.79.8","@earendil-works/pi-coding-agent":"^0.79.8"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.8.0_1784306988359_0.05158306881901642","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"@monotykamary/pi-vcc","version":"0.8.1","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.8.1","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"f79d4d97781acef8194e51e25d7210c63b2ade26","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.8.1.tgz","fileCount":41,"integrity":"sha512-l+zC48A0Pr9h8VGfYFFTm8ssXUojAUd1zkmEl4LSr2EZGLaNLg3+ut2obk/g3OubY1+XkwwLjgf7zQvGAdBaNg==","signatures":[{"sig":"MEQCIAdy3ZJ0wlIN0DQLiLh7065EITE4Hmxy3sS9SGohLmX5AiA0KR6n6M34Ie4Af1jDeGWD6dtbAE/Srp28pXW5qrw+pA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":422272},"main":"index.ts","scripts":{"lint:dead":"knip","typecheck":"tsc --noEmit"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":true,"devDependencies":{"knip":"6.14.1","typescript":"6.0.3","@types/node":"^26.0.0"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":"^0.79.8","@earendil-works/pi-agent-core":"^0.79.8","@earendil-works/pi-coding-agent":"^0.79.8"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.8.1_1784512427834_0.26900851153334093","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"@monotykamary/pi-vcc","version":"0.8.2","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.8.2","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"81784651c72dd71d06665668b01a1c9a390b839d","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.8.2.tgz","fileCount":42,"integrity":"sha512-kD6lqR9tToDYgM5DqXv1KObsle9d0YxTurjhORs0v85fIbI6OhW/X4cE0EcSsn3JMnqToWASCm1JlYBQtXISTQ==","signatures":[{"sig":"MEYCIQDDZmLpyS/xyPj/7ukjlVRQPK/F0+gjIFGuzsWMRmQBcQIhAO51J61hNhelLMIA+l51qUg5P12UVCDsPbqgZpD+11Z0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":428382},"main":"index.ts","scripts":{"lint:dead":"knip","typecheck":"tsc --noEmit"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":true,"devDependencies":{"knip":"6.14.1","typescript":"6.0.3","@types/node":"^26.0.0"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":"^0.79.8","@earendil-works/pi-agent-core":"^0.79.8","@earendil-works/pi-coding-agent":"^0.79.8"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.8.2_1784868399197_0.627312006358361","host":"s3://npm-registry-packages-npm-production"}},"0.8.3":{"name":"@monotykamary/pi-vcc","version":"0.8.3","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.8.3","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"452384305931dcf50fbe158c88be951c0c7e0972","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.8.3.tgz","fileCount":42,"integrity":"sha512-IKCaTIMPM1Eq21YWEdIH84tr1QgnwHgFLzGxeI6k7xQH9SbcFdm4hiHxfAksr3abYc6p6bbvsyatBA6aE51F+g==","signatures":[{"sig":"MEQCIBQOuO+2vmabI/+DEs9BZt/jhI2k14ecDACBBWOw1mPCAiAvapgn8YULC70sBaD5dCjEtKX540YiPHEoBi+2zi1wkA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":428567},"main":"index.ts","scripts":{"lint:dead":"knip","typecheck":"tsc --noEmit"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"26.5.0","_hasShrinkwrap":true,"devDependencies":{"knip":"6.14.1","typescript":"6.0.3","@types/node":"^26.0.0"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":"^0.83.0","@earendil-works/pi-agent-core":"^0.83.0","@earendil-works/pi-coding-agent":"^0.83.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.8.3_1785370451723_0.6426124230626655","host":"s3://npm-registry-packages-npm-production"}},"0.8.4":{"name":"@monotykamary/pi-vcc","version":"0.8.4","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.8.4","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"76a759ddc1ac3821519737f68c2078aac7f16545","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.8.4.tgz","fileCount":42,"integrity":"sha512-6OLIv/hE+e1L7g8epeW2IcIxf49cmFC0mRN9vy62wjgVtDJccKjA8i43MSRXUiyfBo6VlQsnKa/coF7aHltPMQ==","signatures":[{"sig":"MEQCIA20nLMfoO1Abq3zIdPq9lL/DQ4lQro2nEg3ACliC9HhAiAgT2+2bPqfDNbqMVtP0EnnwvoaMnMzGhGbPzBT//X4Ag==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":428689},"main":"index.ts","scripts":{"lint:dead":"knip","typecheck":"tsc --noEmit"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"26.5.0","_hasShrinkwrap":true,"devDependencies":{"knip":"6.14.1","typescript":"6.0.3","@types/node":"^26.0.0"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":"^0.84.0","@earendil-works/pi-agent-core":"^0.84.0","@earendil-works/pi-coding-agent":"^0.84.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.8.4_1786020270133_0.8082238029434206","host":"s3://npm-registry-packages-npm-production"}},"0.8.5":{"name":"@monotykamary/pi-vcc","version":"0.8.5","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.8.5","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"fe158a482d3b1cb5d2c8f5582432916a85c57216","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.8.5.tgz","fileCount":42,"integrity":"sha512-cLYNdLoagqou5hZ7Fq3qse/uEgR6FLWOD/dLOm7JTCn7fMaUqTbWlaCqQfFtAzHuR3LXgCJGj7kaoLcrsibMhg==","signatures":[{"sig":"MEYCIQDazKPKihQMaHz3Rk5z/3ThKI9nTEWtrriHBuWNS7mK1QIhAJF6dCTKMZ0BcI3YBBuT52WB66Yxd82ogvF/eRuCaPFH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":428759},"main":"index.ts","scripts":{"lint:dead":"knip","typecheck":"tsc --noEmit"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"26.5.0","_hasShrinkwrap":true,"devDependencies":{"knip":"6.14.1","typescript":"6.0.3","@types/node":"^26.0.0"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":"^0.84.3","@earendil-works/pi-agent-core":"^0.84.3","@earendil-works/pi-coding-agent":"^0.84.3"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.8.5_1787586083688_0.5713782090978563","host":"s3://npm-registry-packages-npm-production"}},"0.8.6":{"name":"@monotykamary/pi-vcc","version":"0.8.6","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.8.6","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"fb8339f99c661e363c34457f13e3e1d3f1a7c8ab","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.8.6.tgz","fileCount":42,"integrity":"sha512-AnRA9DRmjcCB3XmvP4hBpJsQUGP1RMMNf5S5bwJo46m5RRHNYvRZSdNVtNdVyDBSvgZhivk+Q2JnoDnH2sUnVA==","signatures":[{"sig":"MEQCIC+p04eRAWW5TVq0BpJgeyyAJdtyN2EOolpVO43z5eWqAiAT8dPsrsM54aRdyWpbBaEqUPea81dj/U/KOaA374oViQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFZ9Y77ypUIJx3Qz2wnfcxM+j6TTWeWCUgfA5jkBOBaQAiBjw336ZNYpWjU6jLesDCBDa2kC3hEDWrO2+xZS0aXU4A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":428829},"main":"index.ts","scripts":{"lint:dead":"knip","typecheck":"tsc --noEmit"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"26.5.0","_hasShrinkwrap":true,"devDependencies":{"knip":"6.14.1","typescript":"6.0.3","@types/node":"^26.0.0"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":"^0.84.4","@earendil-works/pi-agent-core":"^0.84.4","@earendil-works/pi-coding-agent":"^0.84.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.8.6_1788006138696_0.026941273924352638","host":"s3://npm-registry-packages-npm-production"}},"0.8.7":{"name":"@monotykamary/pi-vcc","version":"0.8.7","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.8.7","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"6c78b89e208e7649f00af363a0b33fa876eecf8d","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.8.7.tgz","fileCount":40,"integrity":"sha512-o3XYFRAbUVysxOkDrwOm8KN4BS6uUtPCdpMzGyex6qy6YOiPAFQQCh4cpZ1CwJ1cjEo0ZLhmrst/ubTYMNMhmQ==","signatures":[{"sig":"MEQCIDUahVHo81x3aeMe79NDnEdC16gUoRJD+3ruC6F/uylzAiBgiB6BupGWwMSOvf4RNZuMoqqmPItmFOkxnQeJMosmqA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIQDLKwHui71liELY/Q6sEV9zI4oWghVlBV1MFlGIspaZegIfXNZZRIDlimS61GnTkU364X6WVLZcJtCzwnqpRhijkA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":265890},"main":"index.ts","shasum":"6c78b89e208e7649f00af363a0b33fa876eecf8d","scripts":{"lint:dead":"knip","typecheck":"tsc --noEmit"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"_integrity":"sha512-o3XYFRAbUVysxOkDrwOm8KN4BS6uUtPCdpMzGyex6qy6YOiPAFQQCh4cpZ1CwJ1cjEo0ZLhmrst/ubTYMNMhmQ==","repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"_npmVersion":"10.8.3","description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"26.3.0","_hasShrinkwrap":false,"devDependencies":{"knip":"6.14.1","typescript":"6.0.3","@types/node":"^26.0.0","@earendil-works/pi-server":"0.85.0"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":"^0.85.0","@earendil-works/pi-agent-core":"^0.85.0","@earendil-works/pi-coding-agent":"^0.85.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.8.7_1788530244935_0.8912373459631171","host":"s3://npm-registry-packages-npm-production"}},"0.8.8":{"name":"@monotykamary/pi-vcc","version":"0.8.8","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.8.8","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"ba2d28b632750cd516e662ef11018f207c1e1347","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.8.8.tgz","fileCount":40,"integrity":"sha512-WuRtG4YYwSpByTR5g7zbOQgipj5rIWANo4lhrFdcvyJTxb+rPDhbwfK8d2+XeFnFB9OzdeeEcLSEGtCYLH+4vw==","signatures":[{"sig":"MEUCIBqeQ4K5Od1gq6+8sCCXxDMqzHZGUWBj5zjsoRpfBPOMAiEA82t8KrAjslhUU4aLl/jKK1k+oQE/xh1YU3r9g8A3gYg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBrmeESXlAJ5uU6l5+nNq+OdxCVkLNuFvBVADtQQmNCUAiBdH0VwQFukH+LYz8tCSUFXj0w3QkyiY8v8atLqwcXBsQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":266083},"main":"index.ts","shasum":"ba2d28b632750cd516e662ef11018f207c1e1347","scripts":{"test":"PI_FABRIC_COMPACTION_ENGINE= bun test ./tests --path-ignore-patterns '**/real-sessions.test.ts' && bun run test:regression","lint:dead":"knip","typecheck":"tsc --noEmit","test:regression":"vitest run __tests__"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"_integrity":"sha512-WuRtG4YYwSpByTR5g7zbOQgipj5rIWANo4lhrFdcvyJTxb+rPDhbwfK8d2+XeFnFB9OzdeeEcLSEGtCYLH+4vw==","repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"_npmVersion":"10.8.3","description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"26.3.0","_hasShrinkwrap":false,"devDependencies":{"knip":"6.14.1","vitest":"4.1.7","typescript":"6.0.3","@types/node":"^26.0.0","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":"^0.85.0","@earendil-works/pi-agent-core":"^0.85.0","@earendil-works/pi-coding-agent":"^0.85.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.8.8_1788647945668_0.6038597941653037","host":"s3://npm-registry-packages-npm-production"}},"0.8.9":{"name":"@monotykamary/pi-vcc","version":"0.8.9","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.8.9","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"940cff65f0bcc239b409d1a31576b4c42dde382d","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.8.9.tgz","fileCount":40,"integrity":"sha512-ezMW0ItMHbGGMWrdO9jOfRXCrD2XmZ3XdUupAt0TmaaTgpeQx51LuMuIhTFyC+s4FQ4KfsE3ZXbWM+sS6HTg7g==","signatures":[{"sig":"MEUCIQDv+tBzqjliMQDcBLGVzGA8uN93UBvwtg22DlQ8LNmDIgIgaQp36kXMSwa4Yd91hmDyZbZsKcbncGkt5t6kuDKxTN4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCCrFD+x0r8RWAuhAGLWWTPye6LGMxpAU0F927TcxOKxAIhAOBYqTZjcAU89y4foZA0a0kNDThpmFlMR1cx6SDnQ5SJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":266083},"main":"index.ts","shasum":"940cff65f0bcc239b409d1a31576b4c42dde382d","scripts":{"test":"PI_FABRIC_COMPACTION_ENGINE= bun test ./tests --path-ignore-patterns '**/real-sessions.test.ts' && bun run test:regression","lint:dead":"knip","typecheck":"tsc --noEmit","test:regression":"vitest run __tests__"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"_integrity":"sha512-ezMW0ItMHbGGMWrdO9jOfRXCrD2XmZ3XdUupAt0TmaaTgpeQx51LuMuIhTFyC+s4FQ4KfsE3ZXbWM+sS6HTg7g==","repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"_npmVersion":"10.8.3","description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"26.3.0","_hasShrinkwrap":false,"devDependencies":{"knip":"6.14.1","vitest":"4.1.7","typescript":"6.0.3","@types/node":"^26.0.0","@earendil-works/pi-coding-agent":"0.86.0"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":"^0.86.0","@earendil-works/pi-agent-core":"^0.86.0","@earendil-works/pi-coding-agent":"^0.86.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.8.9_1789893509299_0.4427753902517959","host":"s3://npm-registry-packages-npm-production"}},"0.8.10":{"name":"@monotykamary/pi-vcc","version":"0.8.10","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.8.10","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"1effe1d562c8b862ab6de0623700a67a9febc363","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.8.10.tgz","fileCount":40,"integrity":"sha512-3feRDKouohP9CreWy+/HHAtoPQxq5IM3+uzXSwinvBT6L3yZAHqFiM1Nj++K3WGc728F9yy+NRmYSUAks8KcCA==","signatures":[{"sig":"MEUCIQCyrCnaGEbxAeYqRPEIPlERXTYRPbqKcalHNltYltSj6QIgSl0oWkTjm2xPSl8zDUh/zxR8PPU9cR6eHSIayUxRh9s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICGHJ0INwzxUMWzh7y0uI/IE3hakVxDwwfZ96EmrlC6jAiA9N8vzQGGNukrQjYsMOKPpWjv88Pr+bI1uTU6WwDkWKg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":266084},"main":"index.ts","shasum":"1effe1d562c8b862ab6de0623700a67a9febc363","scripts":{"test":"PI_FABRIC_COMPACTION_ENGINE= bun test ./tests --path-ignore-patterns '**/real-sessions.test.ts' && bun run test:regression","lint:dead":"knip","typecheck":"tsc --noEmit","test:regression":"vitest run __tests__"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"_integrity":"sha512-3feRDKouohP9CreWy+/HHAtoPQxq5IM3+uzXSwinvBT6L3yZAHqFiM1Nj++K3WGc728F9yy+NRmYSUAks8KcCA==","repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"_npmVersion":"10.8.3","description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"26.3.0","_hasShrinkwrap":false,"devDependencies":{"knip":"6.14.1","vitest":"4.1.7","typescript":"6.0.3","@types/node":"^26.0.0","@earendil-works/pi-coding-agent":"0.87.0"},"peerDependencies":{"typebox":">=1.1.24 <2.0.0","@earendil-works/pi-ai":"^0.87.0","@earendil-works/pi-agent-core":"^0.87.0","@earendil-works/pi-coding-agent":"^0.87.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.8.10_1790029474316_0.08240498706591914","host":"s3://npm-registry-packages-npm-production"}},"0.8.11":{"name":"@monotykamary/pi-vcc","version":"0.8.11","keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_id":"@monotykamary/pi-vcc@0.8.11","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"0592566caa9580f813a10a844c259660e95953fc","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.8.11.tgz","fileCount":40,"integrity":"sha512-NBoXuXWx4CfzwTksP1ADkCX/fPDqHbSuRmHl0uH1idHoL/oSOBw0QUblaGWau2GDOOYSXC96pQjhJek7LTEkEQ==","signatures":[{"sig":"MEQCIAO7JzLdpR8eSo+Kdvzowu83O7CcPh4Q0/tvspGf8UreAiAtu/PTH4CE70/hWoP2x5I1SmjJ2fk6seNApdACXzMTNg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFr0Srgrn3pSXgAkh2yD81cF1v1EhX8LlC9l+sF0+a52AiEA5YWKH969+ryTJq0sKPqNMJ5LWjVhZgjBxgBz99eIWNc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":266910},"main":"index.ts","shasum":"0592566caa9580f813a10a844c259660e95953fc","scripts":{"test":"PI_FABRIC_COMPACTION_ENGINE= bun test ./tests --path-ignore-patterns '**/real-sessions.test.ts' && bun run test:regression","lint:dead":"knip","test:host":"node scripts/pi99-host.mjs","typecheck":"tsc --noEmit","test:regression":"vitest run __tests__"},"_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"_integrity":"sha512-NBoXuXWx4CfzwTksP1ADkCX/fPDqHbSuRmHl0uH1idHoL/oSOBw0QUblaGWau2GDOOYSXC96pQjhJek7LTEkEQ==","repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"_npmVersion":"10.8.3","description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"_nodeVersion":"26.3.0","_hasShrinkwrap":false,"devDependencies":{"knip":"6.14.1","vitest":"4.1.7","typebox":"1.3.27","typescript":"6.0.3","@types/node":"^26.0.0","@earendil-works/pi-ai":"0.99.0","@earendil-works/pi-agent-core":"0.99.0","@earendil-works/pi-coding-agent":"0.99.0"},"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-agent-core":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-vcc_0.8.11_1790708142846_0.44431405429567405","host":"s3://npm-registry-packages-npm-production"}},"0.8.12":{"pi":{"extensions":["./index.ts"]},"_id":"@monotykamary/pi-vcc@0.8.12","dist":{"shasum":"8cdcd9c2cb38eaa9f00cd500e0c9fe14814f34b2","tarball":"https://registry.npmjs.org/@monotykamary/pi-vcc/-/pi-vcc-0.8.12.tgz","fileCount":40,"integrity":"sha512-6LEXlAGi27KT4RG+3QAuceDJIC84pYk0Zu/Jgm3sdQOtLV8SIMxGbomvGlFK4/G/2eGTknGEalW588u4bJxtbw==","signatures":[{"sig":"MEUCIFLD2hwbNViikrrrhfkFtQ7RjC4QeWaHNr2yU0DTVLfDAiEAsOVWoPQ5dTLmm1ZgDuETKOEn9lNwj0n3bjOFKfSXR1s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCL/wld8zcsq4O/4/2GXIvTYSf6a7tEjR9q+GPxH9AJvAIhAOC1B/35rQ5YbP85sqCiruzFqktZvrXZUr/TlYEmtxlP"}],"unpackedSize":266901},"main":"index.ts","name":"@monotykamary/pi-vcc","shasum":"8cdcd9c2cb38eaa9f00cd500e0c9fe14814f34b2","scripts":{"test":"PI_FABRIC_COMPACTION_ENGINE= bun test ./tests --path-ignore-patterns '**/real-sessions.test.ts' && bun run test:regression","lint:dead":"knip","test:host":"node scripts/pi1-host.mjs","typecheck":"tsc --noEmit","test:regression":"vitest run __tests__"},"version":"0.8.12","_npmUser":{"name":"monotykamary","email":"tom81094@gmail.com"},"keywords":["pi-package","pi-extension","vcc","compact","compaction"],"_integrity":"sha512-6LEXlAGi27KT4RG+3QAuceDJIC84pYk0Zu/Jgm3sdQOtLV8SIMxGbomvGlFK4/G/2eGTknGEalW588u4bJxtbw==","repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"_npmVersion":"10.8.3","description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","directories":{},"maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"_nodeVersion":"26.3.0","_hasShrinkwrap":false,"devDependencies":{"knip":"6.14.1","vitest":"4.1.7","typebox":"1.3.27","typescript":"6.0.3","@types/node":"^26.0.0","@earendil-works/pi-ai":"1.0.0","@earendil-works/pi-agent-core":"1.0.0","@earendil-works/pi-coding-agent":"1.0.0"},"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-agent-core":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-vcc_0.8.12_1790884622687_0.18791872046089897"}}},"time":{"created":"2026-06-10T04:13:43.342Z","modified":"2026-10-01T19:57:02.930Z","0.3.16":"2026-06-10T04:13:43.919Z","0.3.17":"2026-06-10T20:44:06.723Z","0.4.0":"2026-06-11T05:44:01.587Z","0.4.1":"2026-06-11T05:45:57.736Z","0.5.0":"2026-06-12T02:19:47.396Z","0.6.0":"2026-06-17T02:01:34.277Z","0.6.1":"2026-06-19T15:01:52.568Z","0.6.2":"2026-06-24T09:09:36.112Z","0.6.3":"2026-06-25T15:04:13.891Z","0.6.4":"2026-06-26T18:40:38.609Z","0.7.0":"2026-07-03T16:27:44.416Z","0.7.1":"2026-07-04T02:49:57.549Z","0.7.2":"2026-07-12T14:15:45.623Z","0.7.3":"2026-07-12T15:28:02.807Z","0.7.4":"2026-07-12T22:09:59.426Z","0.7.5":"2026-07-17T08:44:26.368Z","0.8.0":"2026-07-17T16:49:48.518Z","0.8.1":"2026-07-20T01:53:48.010Z","0.8.2":"2026-07-24T04:46:39.383Z","0.8.3":"2026-07-30T00:14:11.899Z","0.8.4":"2026-08-06T12:44:30.250Z","0.8.5":"2026-08-24T15:41:23.839Z","0.8.6":"2026-08-29T12:22:18.816Z","0.8.7":"2026-09-04T13:57:25.090Z","0.8.8":"2026-09-05T22:39:05.797Z","0.8.9":"2026-09-20T08:38:29.397Z","0.8.10":"2026-09-21T22:24:34.405Z","0.8.11":"2026-09-29T18:55:42.981Z","0.8.12":"2026-10-01T19:57:02.797Z"},"keywords":["pi-package","pi-extension","vcc","compact","compaction"],"repository":{"url":"git+https://github.com/monotykamary/pi-vcc.git","type":"git"},"description":"Algorithmic conversation compactor for pi - transcript-preserving structured summaries, no LLM calls","maintainers":[{"name":"monotykamary","email":"tom81094@gmail.com"}],"readme":"<div align=\"center\">\n\n# 🗜️ pi-vcc\n\n**Algorithmic conversation compactor for [pi](https://github.com/earendil-works/pi-coding-agent)**\n\n_No LLM calls — 35-99% token reduction via extraction and formatting. Same input = same output, always._\n\n[![pi extension](https://img.shields.io/badge/pi-extension-blueviolet)](https://github.com/earendil-works/pi-coding-agent)\n[![license](https://img.shields.io/badge/license-MIT-blue)](./LICENSE)\n\n</div>\n\n---\n\nInspired by [VCC](https://github.com/lllyasviel/VCC) **(View-oriented Conversation Compiler)**.\n\n## Pi 1.0 compatibility (0.8.12)\n\nTested with Pi **1.0.0**. Host-provided Pi packages and TypeBox are peers (`*`), not bundled runtime dependencies; development uses exact Pi 1.0.0 pins and host-compatible TypeBox where needed.\n\nVerified native algorithmic compaction, Pi-owned system/tool checkpoints, post-compaction continuation and codemode/nested-tool interoperability without summarizer model calls.\n\nRun `bun run test:host` for the offline real-host load, native codemode/nested-call, module-identity and reload checks. Set `PI1_HOST_PACKAGE` to an installed Pi package directory to test that host explicitly; add `PI1_HOST_ENTRY=bundle` to check the bundled CLI runtime's constructors.\n\n## Demo\n\n![pi-vcc demo](./demo.gif)\n\n## Why pi-vcc\n\n|  | Pi default | pi-vcc |\n|---|---|---|\n| **Method** | LLM-generated summary | Algorithmic extraction, no LLM |\n| **Determinism** | Non-deterministic, can hallucinate | Same input = same output, always |\n| **Token reduction** | Varies | 35-99% on real sessions (higher on longer sessions) |\n| **Compaction latency** | Waits for LLM call | 30-470ms, no API calls |\n| **History after compaction** | Gone — agent only sees summary | Active lineage searchable via `vcc_recall` (`scope:\"all\"` available) |\n| **Repeated compactions** | Each rewrite risks losing more | Sections merge and accumulate |\n| **Cost** | Burns tokens on summarization call | Zero — no API calls |\n| **Structure** | Free-form prose | Brief transcript + 7 semantic sections + priority tags + metadata footer |\n| **Code awareness** | None (summarizes text only) | Symbol-annotated files, type catalog, deep error extraction |\n\n### Real session metrics\n\nMeasured on real session JSONLs under `~/.pi/agent/sessions` (chars = rendered message text).\n\n| Session | Messages | Before | After | Reduction | Time |\n|---|---|---|---|---|---|\n| Session A | 2,943 | 997,162 | 7,959 | 99.2% | 64ms |\n| Session B | 1,703 | 428,334 | 7,762 | 98.2% | 29ms |\n| Session C | 1,657 | 424,183 | 9,577 | 97.7% | 54ms |\n| Session D | 1,004 | 2,258,477 | 4,439 | 99.8% | 30ms |\n| Session E | 486 | 295,006 | 11,163 | 96.2% | 30ms |\n| Session F | 46 | 5,234 | 3,364 | 35.7% | 5ms |\n| Session G | 27 | 8,595 | 2,489 | 71.0% | 2ms |\n\n## Compaction Deep Dive\n\npi-vcc is one of four compaction approaches in the AI coding-agent ecosystem. Here is how they compare.\n\n### Pi Default Harness\n\n*Based in `@earendil-works/pi-coding-agent/dist/core/compaction/compaction.js`*\n\n**Architecture**: LLM-based structured summarization via a summarization model.\n\n**Flow**:\n1. `shouldCompact()` — checks if `contextTokens > contextWindow - reserveTokens (16k)`\n2. `prepareCompaction()` — walks branch entries, finds previous compaction boundary, calculates cut point by walking newest→oldest accumulating estimated message sizes until hitting `keepRecentTokens` (20k default)\n3. `compact()` → `generateSummary()` — serializes conversation to plain text (not LLM messages, to prevent the model from continuing it), calls LLM with structured summarization prompt\n4. Two prompt variants: initial `SUMMARIZATION_PROMPT` (first time) or `UPDATE_SUMMARIZATION_PROMPT` (merges into existing summary)\n5. Output format: `## Goal / ## Constraints & Preferences / ## Progress / ## Key Decisions / ## Next Steps / ## Critical Context`\n6. Detects mid-turn splits — when the cut falls mid-turn, generates a separate turn prefix summary in parallel and merges both\n7. Tracks file operations (read/write/edit from tool calls) and appends `<read-files>` / `<modified-files>` XML tags to each summary\n\n**Key characteristics**:\n- Pure LLM — every compaction costs a model call\n- Token-budget backwalk keeps a configurable tail (20k recent tokens)\n- Turn-aware: `isSplitTurn` preserves incomplete assistant turns\n- Previous-summary merging via update prompt (incremental)\n- Non-deterministic — different runs produce different summaries\n\n---\n\n### Claude Code\n\n*Based in `claude-code/src/services/compact/`*\n\n**Architecture**: Three-tier compaction — proactive/manual (LLM), session memory (LLM-free), and micro-compaction (cache-editing).\n\n**Flow (Main Compaction — `compactConversation()`)** :\n1. `shouldAutoCompact()` → `getAutoCompactThreshold()` = context window minus reserved output minus buffer (13k)\n2. PreCompact hooks execute (SDK extensions can inject custom instructions)\n3. `getCompactPrompt()` builds a prompt with a `NO_TOOLS_PREAMBLE`, a detailed 9-section template, and a trailer rejecting tool calls\n4. `streamCompactSummary()` first tries a **cache-sharing fork path** (piggybacks on the main thread's prompt-cache prefix with a forked agent), then falls back to a direct streaming path with only `FileReadTool` + `ToolSearchTool`\n5. Strips images/documents from messages before sending to the compact API (replaces with `[image]` / `[document]` markers)\n6. PTL (Prompt Too Long) retry: `truncateHeadForPTLRetry()` drops oldest API-round groups and retries (up to 3)\n7. After summary generation: creates post-compact file attachments (re-reads recently accessed files), plan attachments, skill attachments, delta tool announcements\n8. Executes SessionStart hooks and PostCompact hooks\n9. Returns `CompactionResult { boundaryMarker, summaryMessages, attachments, hookResults, messagesToKeep }`\n\n**Flow (Session Memory Compact — `trySessionMemoryCompaction()`)** :\n1. Feature-gated: `tengu_session_memory` + `tengu_sm_compact` flags\n2. Waits for in-progress session memory extraction to finish\n3. `calculateMessagesToKeepIndex()` starts from `lastSummarizedMessageId`, expands backwards to meet `minTokens` (10k) and `minTextBlockMessages` (5), capped at `maxTokens` (40k)\n4. `adjustIndexToPreserveAPIInvariants()` ensures tool_use/tool_result pairs are not split (handles streaming message fragmentation)\n5. No LLM call — uses already-extracted session memory content as the summary\n6. Truncates oversized sections via `truncateSessionMemoryForCompact()`\n7. Falls back to legacy compact if session memory is empty or boundary can't be found\n\n**Flow (Micro Compact — `microcompactMessages()`)** :\n1. **Time-based trigger**: if the gap since the last main-loop assistant message exceeds the threshold (cold server cache), content-clear old tool results to shrink what gets rewritten\n2. **Cached microcompact** (experimental, `CACHED_MICROCOMPACT` feature): tracks tool results per message, queues `cache_edits` blocks for the API layer — removes tool results from the server-side cached prompt without mutating local messages and without invalidating the cached prefix\n3. Legacy microcompact (content-clear) fully replaced by the cache-editing approach\n\n**Key characteristics**:\n- Three compaction tiers: full LLM / session memory (LLM-free) / micro (cache-edit only)\n- Cache-aware: cache-sharing fork path, cache-editing microcompact, PTL retry\n- Heavy hook system: 3 hook sets (PreCompact → SessionStart → PostCompact)\n- File restoration: re-attaches recently read files post-compact\n- Circuit breaker: 3 consecutive failures stops retrying\n- Partial compact: supports `up_to` (summarize before, keep prefix) / `from` (summarize after, keep suffix) directions\n- Analytics: `tengu_compact` events with full token breakdowns, `analyzeContext()` walks every content block\n\n---\n\n### Codex (OpenAI)\n\n*Based in `codex/codex-rs/core/src/compact.rs`, `compact_remote.rs`, `compact_remote_v2.rs`*\n\n**Architecture**: Rust-based, three concurrent compaction paths — inline (local LLM), remote (server-side), and remote v2 (streaming).\n\n**Flow**:\n1. Decision: `should_use_remote_compact_task()` checks whether the provider supports remote compaction\n2. Three parallel implementations:\n\n**Inline (local) Path** (`compact.rs`):\n1. Pre-hooks → LLM call with a compact prompt → Post-hooks\n2. Uses `ContextCompactionItem` — a first-class protocol item embedded in conversation history (not a hack)\n3. `COMPACT_USER_MESSAGE_MAX_TOKENS` = 20k token cap\n4. `InitialContextInjection` controls when system context is re-injected:\n   - `DoNotInject` — for pre-turn/manual compaction (next regular turn handles reinjection)\n   - `BeforeLastUserMessage` — for mid-turn compaction (injects above the last real user message)\n5. Summarization prompt (from `templates/compact/prompt.md`):\n   - \"Context checkpoint compaction\" handoff summary\n   - Key sections: progress, decisions, constraints, remaining work\n6. Summary prefix (`templates/compact/summary_prefix.md`): `\"Another language model started to solve this problem...\"`\n7. `trim_function_call_history_to_fit_context_window()` — truncates oversized call histories before compact\n8. Event-driven: emits TurnStarted, stream events, TurnCompleted\n9. Backoff retry via `codex_util::backoff`\n\n**Remote Path** (`compact_remote.rs`):\n1. Delegates compaction to the codex-backend server via the Responses API Compact endpoint\n2. Server-side compaction uses OpenAI's own compact infrastructure\n3. Client sends history, server returns a `CompactedItem`\n4. `process_compacted_history()` replaces conversation items with the compacted version\n5. Same hook system (PreCompact → PostCompact) and analytics tracking\n6. Logs request/response data via `build_compact_request_log_data()`\n\n**Remote v2 Path** (`compact_remote_v2.rs`):\n1. Uses Responses API streaming compact — same endpoint as v1 but leverages the existing `ModelClientSession` for streaming\n2. Feature-gated: `Feature::RemoteCompactionV2` (under development, disabled by default)\n3. Reuses `process_compacted_history()` and `trim_function_call_history_to_fit_context_window()`\n4. Rollout-trace aware: `CompactionCheckpointTracePayload` for end-to-end observability\n\n**Key characteristics**:\n- Three parallel compaction implementations: inline / remote / remote-v2\n- Server-side compaction can delegate to OpenAI's backend (token savings on the client)\n- Rust async with cancellation tokens throughout\n- `ContextCompactionItem` is a first-class protocol type, not a synthetic message\n- Fine-grained `InitialContextInjection` control over system context reinjection\n- Event-driven architecture: full turn lifecycle for compaction (start → stream → complete → error)\n- `CompactionAnalyticsAttempt` tracks every phase, status, and implementation\n\n---\n\n### Comparison Summary\n\n| Aspect | Pi Default | pi-vcc | Claude Code | Codex |\n|--------|-----------|--------|-------------|-------|\n| **Language** | TypeScript (compiled) | TypeScript (extension) | TypeScript (source) | Rust |\n| **LLM dependency** | Always required | None | Optional (session memory bypass) | Always (inline) / server-offloaded |\n| **Cut strategy** | Token-budget backwalk (20k recent) | Keep last user message | Min tokens (10k) + min text messages (5) | Context window trim |\n| **Summary format** | Markdown structured sections `## Goal` etc. | Bracket-tagged sections `[Session Goal]` + `[Anchors]` + `[Earlier Turns]` | `<analysis>` scratchpad + 9-section `<summary>` | Markdown handoff |\n| **Merge with prev** | Update prompt (LLM merges) | Header-by-header deterministic dedup | Via session memory (LLM-free) or prompt | Replaces (no merge) |\n| **File tracking** | `<read-files>` / `<modified-files>` XML tags | `[Files And Changes]` with symbol annotations | Post-compact file re-attachment (re-reads recent files) | Via server (server-managed) |\n| **Turn splitting** | Yes (`isSplitTurn` with parallel prefix summary) | Task-boundary-aware (pushes back on mid-flight turns) | Via `preservedSegment` metadata | Via `InitialContextInjection` |\n| **Cache awareness** | None | Section ordering (stable first for prompt cache) | Cache-sharing fork path, cache-editing microcompact, PTL retry | Server-side cache (remote path) |\n| **Hook system** | 2 hooks (`session_before_compact`, `session_compact`) | 5 hooks (`session_before_compact`, `session_compact`, `agent_end`, `model_select`, `session_start`) | 3 hooks (PreCompact, SessionStart, PostCompact) | 2 hooks (PreCompact, PostCompact) |\n| **Micro compaction** | None | None | Yes (cache-editing + time-based content clear) | None |\n| **Partial compact** | None | None | Yes (`up_to` / `from` directions) | None |\n| **Error handling** | Basic | Orphan recovery, resolution detection (`[RESOLVED]` tag) | PTL retry (3x), circuit breaker (3 failures) | Backoff retry |\n| **Token estimation** | chars/4 heuristic | chars/4 heuristic | `roughTokenCountEstimation` + 4/3 padding | `approx_token_count` |\n| **Determinism** | Non-deterministic (LLM) | Deterministic (no LLM) | Non-deterministic (LLM) / deterministic (SM) | Non-deterministic (LLM) / deterministic (server) |\n| **Latency** | LLM call time | 2–64ms | LLM call time (or instant with SM/micro) | LLM call time (or server-offloaded) |\n| **Cost** | Per-compact LLM tokens | Zero | Per-compact LLM tokens or zero (SM/micro) | Per-compact LLM tokens or server-side |\n| **Debugging** | Basic | `/tmp/pi-vcc-debug.json` snapshots | `logForDebugging`, analytics events | Rollout trace, compaction analytics |\n\n## Features\n\n- **No LLM** — purely algorithmic, zero extra API cost\n- **Brief transcript** — chronological conversation flow, each tool call collapsed to a one-liner with `(#N)` refs, text truncated to keep it compact\n- **8 semantic sections** — session goal, files & changes, type catalog, commits, outstanding context, earlier turns, anchors, user preferences\n- **Bounded merge** — rolling sections re-capped after merge instead of growing unbounded\n- **Lossless recall** — `vcc_recall` reads raw session JSONL, so active-lineage history stays searchable across compactions\n- **Scoped recall** — default search is active lineage; use `scope:\"all\"` for all lineages, or `scope:\"compaction:N\"` / `scope:\"compaction:latest\"` to search within a specific compaction segment's original messages\n- **Priority error tags** — outstanding context items tagged `[ERROR]`, `[WARN]`, `[INFO]`, `[RESOLVED]` for urgency at a glance\n- **Metadata footer** — each compaction summary ends with timestamp, compression ratio, and message range\n- **Compaction counter** — the post-compaction notification reports the ordinal of the just-completed compaction (e.g. `\"3rd compaction\"`), counted from pi-vcc compaction entries in the session file so it lines up with `scope:\"compaction:N\"`\n- **Cache-friendly ordering** — stable sections (goal, preferences, files, commits, anchors) come first; volatile sections (outstanding context, earlier turns, current status) come last, maximizing prompt-cacheable prefix across compactions\n- **Adaptive recall view** — search results grouped by conversation segments (turns) with match indicators (`>`) and context preservation, so the agent sees the conversational structure around each match\n- **Regex search** — `vcc_recall` supports regex patterns (`hook|inject`, `fail.*build`) and OR-ranked multi-word queries\n- **Result ranking** — search results ranked by BM25 term relevance, rare terms weighted higher than common ones\n- **`/pi-vcc-recall`** — slash command to search history directly, results shown as collapsible message and auto-fed to agent as context\n- **Fallback cut** — still works when Pi core returns nothing to summarize\n- **`/pi-vcc`** — manual compaction on demand\n- **Multi-resolution transcript** — three-zone brief: `[Earlier Turns]` (one-liner per conversational turn, heaviest compression), brief transcript (tool calls collapsed, medium compression), and the kept tail (uncompressed). Eliminates the information cliff where older turns vanish entirely.\n- **Error resolution detection** — tsc errors in `[Outstanding Context]` are tagged `[RESOLVED]` when the file they reference was subsequently edited, letting the model skip stale errors.\n- **Task-boundary-aware cut** — compaction splits at complete conversational turns, not mid-tool-call. If the assistant's response is in-flight (unmatched tool calls), the cut pushes back to keep the whole turn in the tail.\n- **Structured anchors** — `[Anchors]` section lists commit hashes, error IDs, and key file paths for zero-tool-call recall. The model can find references at a glance instead of calling `vcc_recall`.\n- **Per-model and global compaction thresholds** — configure different `reserveTokens`, `compactAtTokens`, or `compactPercent` per model and globally, so models with different context windows compact at the right time. Proactive triggering on `agent_end` and `model_select` events compacts earlier for small-context models. Applies to both pi-vcc and pi-core compaction.\n\n## Install\n\n```bash\npi install npm:@monotykamary/pi-vcc\n```\n\nOr install from GitHub:\n\n```bash\npi install https://github.com/monotykamary/pi-vcc@tom\n```\n\nOr try without installing:\n\n```bash\npi -e https://github.com/monotykamary/pi-vcc@tom\n```\n\n## Usage\n\nOnce installed, pi-vcc registers a `session_before_compact` hook.\n\n- Run `/pi-vcc` to trigger pi-vcc compaction manually.\n- By default, pi-vcc handles all compaction paths (`/compact`, auto-threshold, `/pi-vcc`). Set `overrideDefaultCompaction: false` in the config to fall back to pi core's LLM-based compaction for `/compact` and auto-threshold. When pi-fabric's compaction engine is active, pi-vcc retains its threshold and recovery triggers but delegates non-`/pi-vcc` summary compilation to pi-fabric.\n- To search older active-lineage history after compaction, use `vcc_recall`.\n- To intentionally search across all lineages, pass `scope:\"all\"` to `vcc_recall` or run `/pi-vcc-recall <query> scope:all`.\n- To search and feed results to agent yourself, run `/pi-vcc-recall <query> [page:N]`.\n  - Tip: type `/recall` and Pi will autocomplete to `/pi-vcc-recall`.\n\n### pi-fabric interop\n\nWhen `PI_FABRIC_COMPACTION_ENGINE=fabric`, pi-vcc defers non-explicit summary compilation to pi-fabric while preserving its proactive-threshold and Codex recovery trigger behavior. pi-fabric marks an event it has already claimed with `_fabricCompaction === true`, which prevents pi-vcc from replacing that result. An explicit `/pi-vcc` uses the `__pi_vcc__` instruction sentinel and always runs pi-vcc's deterministic compiler.\n\nThe precedence is: explicit `/pi-vcc` sentinel > pi-fabric engine > pi-vcc default override.\n\nFor explicit `/pi-vcc` compactions, pi-vcc also expands the durable execution trace stored on each `fabric_exec` result. Nested `pi.*`, MCP, extension, agent, and other Fabric provider calls participate in file tracking, error extraction, the brief transcript, and `vcc_recall` search just like top-level tool calls. Current trace details and legacy Fabric audit details are both supported.\n\n### How compaction works\n\nPi splits the conversation at the **last user message**. Everything after — the **kept tail** — stays intact and untouched. pi-vcc only summarizes the older portion before that cut point.\n\n### Compacted message structure\n\n```\n[Session Goal]\n- Fix the authentication bug in login flow\n- [Scope change]\n- Also update the session token refresh logic\n\n[Files And Changes]\n- Modified: src/auth/session.ts (refreshToken, verifyToken, Session)\n- Read: src/types.ts (User, AuthPayload)\n- Created: tests/auth-refresh.test.ts\n\n[Type Catalog]\n- src/auth/session.ts [modified]:\n  export function refreshToken(token: string): Promise<Session>\n  export function verifyToken(token: string): Promise<User>\n  export interface Session {\n- src/types.ts [read]:\n  export interface User {\n  export type AuthPayload = {\n\n[Commits]\n- a1b2c3d: fix(auth): refresh token after password reset\n\n[Anchors]\n- commits: a1b2c3d\n- errors: TS2304\n- files: src/auth/session.ts, src/types.ts, tests/auth-refresh.test.ts\n\n[Outstanding Context]\n- [RESOLVED] [tsc] src/session.ts(5,18): error TS2304: Cannot find name 'authenticateUser'\n- [ERROR] [bash:exit 1] bun test tests/auth.test.ts → 3 tests failed\n- [WARN]  [tests] FAIL auth.test.ts > refresh token should work\n- [INFO]  [no matches] grep \"verifyCredentials\"\n\n[Earlier Turns]\n- Set up the project structure → read package.json, tsconfig.json\n- Install auth dependencies → ran bun add, edited package.json\n- Configure the test runner → edited bunfig.toml, ran bun test\n\n[Current Status]\n- Working on: fix the auth bug, users can't log in after password reset\n- Last action: Edit \"src/auth/session.ts\"\n- Next: need to add the refreshToken function signature\n\n---\n\n[user]\nFix the auth bug, users can't log in after password reset\n\n[assistant]\nRoot cause is a missing token refresh after password reset...\n* Read \"src/auth/session.ts\" (#3)\n* Read \"src/types.ts\" (#5)\n* Edit \"src/auth/session.ts\" (#7)\n* bash \"bun test tests/auth.test.ts\" (#9)\n...(28 earlier lines omitted)\n\n---\n\n---\nCompaction at 2026-05-18T14:32:00Z — 47 msgs → 23k tok (12x) | tail: 3 msgs ~5.2k tok (range: [#0, #43])\n\nUse `vcc_recall` to search for prior work, decisions, and context from before this summary.\nDo not redo work already completed.\n```\n\nSections appear only when relevant — a session with no git commits won't have `[Commits]`.\n\n**Sections:**\n\n| Section | Description |\n|---|---|\n| `[Session Goal]` | Initial goal + scope changes (regex-based extraction) |\n| `[Files And Changes]` | Modified/created/read files from tool calls, annotated with exported symbol names (capped, paths trimmed to common root) |\n| `[Type Catalog]` | Exported signature lines from modified and read files — the public API surface the model needs for continuation |\n| `[Commits]` | Git commits made during the session (last 8, hash + first line) |\n| `[Anchors]` | Structured reference points — commit hashes, error IDs, key file paths — for zero-tool-call recall |\n| `[Outstanding Context]` | Unresolved items — error exit codes, test failures, tsc errors, empty search results, pending questions — tagged `[ERROR]`/`[WARN]`/`[INFO]`/`[RESOLVED]` by severity |\n| `[Earlier Turns]` | Per-turn one-liner summaries for every conversational turn — heaviest compression layer covering turns that would otherwise fall off the brief transcript |\n| `[Current Status]` | Current focus, last file-modifying action, and next steps — extracted from the conversation tail |\n| `[User Preferences]` | Regex-extracted from user messages (`always`, `never`, `prefer`...) |\n| Brief transcript | Chronological conversation flow — rolling window of ~120 recent lines, tool calls collapsed to one-liners with `(#N)` refs |\n\n**Merge policy:**\n- `Session Goal`, `User Preferences`: concise sticky sections\n- `Session Goal`, `User Preferences`, `Earlier Turns`: sticky sections that accumulate across compactions (capped)\n- `Outstanding Context`, `Type Catalog`, `Current Status`, `Anchors`: volatile (replaced each compaction)\n- `Files And Changes`, `Commits`: unique union across compactions\n- Brief transcript: rolling window, older lines drop off\n\n### Deep error extraction\n\n`[Outstanding Context]` goes beyond keyword matching. It captures:\n\n| Signal | Format | Example |\n|---|---|---|\n| Bash non-zero exit code | `[bash:exit N]` | `[bash:exit 1] npm test → 3 tests failed` |\n| TypeScript compiler error | `[tsc]` | `[tsc] src/auth.ts(12,5): error TS2322: Type 'string' is not...` |\n| Test failure | `[tests]` | `[tests] FAIL auth.test.ts > login should work` |\n| Empty grep/glob | `[no matches]` | `[no matches] Grep \"verifyCredentials\"` |\n| Tool error result | `[tool]` | `[bash] Command not found` |\n| Blocker text | `[user]` or plain | `[user] The build is still failing with...` |\n\nItems tagged `[RESOLVED]` when the file they reference was subsequently edited — the model can skip them:\n\n```\n- [RESOLVED] [tsc] src/auth.ts(5,18): error TS2304: Cannot find name 'authenticateUser'\n- [ERROR] [bash:exit 1] bun test tests/api.test.ts → 2 tests failed\n```\n\nAll items are deduplicated — the same error won't appear twice.\n\n### Symbol-level file annotations\n\n`[Files And Changes]` annotates file paths with exported symbol names extracted from tool call arguments and results:\n\n```\n- Modified: src/auth.ts (login, verifyToken, Session)\n- Read: src/types.ts (User, AuthPayload)\n```\n\nSupported languages: TypeScript/JavaScript (`export function/class/type/interface`), Python (`def`/`class`), Go (`func`, exported only), Rust (`pub fn/struct/enum/trait`).\n\n### Type catalog\n\n`[Type Catalog]` captures the exact exported signature lines from modified and read files. This gives the compacted model the type signatures it needs to continue coding — without re-reading files.\n\nModified files appear first, read files second. Entries are capped at 8 signatures per file and 12 files total.\n\n## Recall (Lossless History)\n\nPi's default compaction discards old messages permanently. After compaction, the agent only sees the summary.\n\n`vcc_recall` bypasses this by reading the raw session JSONL file directly. By default it searches only the active conversation lineage, regardless of how many compactions have happened. Use `scope:\"all\"` only when you intentionally want to include off-lineage branches.\n\n### Adaptive View (Structure-Preserving Search Results)\n\nSearch results are grouped by **conversation segments** (turns) instead of showing flat ranked entries. Each segment starts at a user or bash message and includes all subsequent assistant responses, tool calls, and tool results.\n\nMatched entries are marked with `>`, non-matched entries within the same segment are shown for context:\n\n```\nvcc_recall({ query: \"auth bug\" })\n```\n\nReturns:\n```\nFound 4 matches for \"auth bug\" — 2 matches across 1 segment\n\n--- #12-#17 (2/6 entries match) ---\n> #12 [user] I found an auth bug in the login flow\n  #13 [assistant] Let me check the auth module...\n  #14 [tool_call] Read src/auth.ts\n  #15 [tool_result] export function login...\n> #16 [assistant] The bug is in refreshToken\n  #17 [tool_result] Edit src/auth.ts (success)\n```\n\nWhen matches span multiple segments, adjacent non-matching turns are shown with a `(context)` tag:\n\n```\nFound 3 matches for \"cache\" — 2 matches across 2 segments\n\n--- #5-#8 (1/4 entries match) ---\n  #5 [user] add caching to the API layer\n  #6 [assistant] I'll set up Redis...\n  #7 [tool_call] Edit src/cache.ts\n> #8 [tool_result] Redis connected successfully\n\n--- #20-#23 (1/4 entries match) ---\n> #20 [user] the cache eviction policy is wrong\n  #21 [assistant] Let me check the TTL config...\n  #22 [tool_call] Read src/cache.ts\n  #23 [tool_result] export const TTL = 3600\n\n--- #9-#19 (context) ---\n  #9 [user] also fix the error handling\n  #10 [assistant] Added try/catch around cache calls\n```\n\nThis format preserves the conversational structure around matches, so the agent can understand *where* in the conversation flow each match occurred and what context surrounds it.\n\n### Search\n\nQueries support **regex** and **multi-word OR logic** ranked by relevance:\n\n```\nvcc_recall({ query: \"auth token\" })                                    // active-lineage OR search, ranked\nvcc_recall({ query: \"auth token\", page: 2 })                           // paginated (5 results/page)\nvcc_recall({ query: \"hook|inject\" })                                    // regex pattern\nvcc_recall({ query: \"fail.*build\" })                                    // regex pattern\nvcc_recall({ query: \"auth token\", scope: \"all\" })                      // search all lineages\nvcc_recall({ query: \"race condition\", scope: \"compaction:2\" })         // search within compaction #2's segment\nvcc_recall({ query: \"design rationale\", scope: \"compaction:latest\" })  // search most recent compaction segment\n```\n\nCompaction-scoped search targets only the original messages that were summarized by that compaction cycle. This lets you drill into specific conversation segments without sifting through unrelated chat.\n\nManual slash command:\n\n```\n/pi-vcc-recall auth token scope:all\n/pi-vcc-recall race condition scope:compaction:latest\n```\n\n### Browse\n\nWithout a query, returns the last 25 entries as brief summaries:\n\n```\nvcc_recall()\nvcc_recall({ scope: \"all\" })  // browse recent entries across all lineages\n```\n\n### Expand\n\nReturns full untruncated content for specific indices found via search:\n\n```\nvcc_recall({ expand: [41, 42] })                 // active-lineage expand\nvcc_recall({ expand: [41, 42], scope: \"all\" })   // expand across all lineages\n```\n\nTypical workflow: **search → find relevant entry indices → expand those indices for full content**.\n\n> Some tool results are truncated by Pi core at save time. `expand` returns everything in the JSONL but can't recover what Pi already cut.\n\n## Performance\n\npi-vcc processes 3.7 MB sessions (2,600 messages, 3,000 blocks) in **~31 ms** — no LLM calls, no I/O waits beyond reading the session JSONL. Below are the optimizations that got us there.\n\n### Pipeline profile (3.7 MB session)\n\n| Stage | Time | % of total |\n|---|---|---|\n| `normalize` | 4 ms | 13% |\n| `filterNoise` | <1 ms | <1% |\n| `buildToolResultIndex` | <1 ms | <1% |\n| **`extractFileAndSymbolData`** | **23 ms** | **74%** |\n| Other extractors | <1 ms | <1% |\n| `buildBriefSections` | 1 ms | 4% |\n| `formatSummary` + merge | ~2 ms | 7% |\n| **Total** | **~31 ms** | |\n\n### Optimizations\n\n#### Catastrophic backtracking fix (`C_FUNC_RE`)\n\nThe C/C++ function-declaration regex used a repeated group `(?:\\w+(?:\\s*[*&]+\\s*)?)+` that triggered exponential backtracking on long non-matching identifiers (e.g. `createAssistantMessageEventStream`). A single pathological line took **1.2 s**; a session with many such lines could stall compaction for seconds.\n\nReplaced with a lazy-quantifier pattern `\\w[\\w:*&\\s]*?` and a negative lookahead to skip Go `func` lines. The same line now takes **<0.1 ms** — a **>1000×** speedup. This was the root cause of the original \"slow compaction\" report on 170k-token sessions.\n\n#### Unified symbol extraction (`extractFileAndSymbolData`)\n\nPreviously, three independent extractors (`extractFiles`, `extractSymbolChanges`, `extractTypeCatalog`) each scanned the same tool results with overlapping regex patterns — a **triple-redundant parse**. The unified `extractFileAndSymbolData()` in `shared-symbols.ts` does it once and feeds all three consumers from a single pass.\n\nAlso added `ToolResultIndex` and `buildToolResultIndex()` to pre-compute the tool_call → tool_result look-ahead map once, shared across all extractors instead of each scanning forward independently.\n\n#### `DECL_SCREEN_RE` pre-filter\n\nEach line was tested against a 15-regex cascade to find declaration names. ~60% of lines in a real session are body code, comments, or blank — none can match, yet every line ran all 15 tests.\n\n`DECL_SCREEN_RE` is a single anchored regex that rejects non-declaration lines in one test. Matching lines then fall through to the full cascade. Measured at **2.6× faster** for the `parseDeclName` stage.\n\n#### `eachLine()` generator replaces `split().slice()`\n\n`extractSymbolsFromText` used `text.split(\"\\n\").slice(0, N)` to read the first N lines — allocating a full temporary string array every call. Over 600+ tool results in a large session, this added up to ~18 ms of allocation overhead.\n\nReplaced with an `eachLine()` generator using `indexOf(\"\\n\")` + `slice()` — zero intermediate array allocation. Produces identical iteration behavior.\n\n#### `Set`-based dedup replaces `Array.includes()`\n\nSymbol dedup used `Array.includes()` on value arrays that grew to 200+ entries per file — O(n) per check. A parallel `Map<string, Set<string>>` makes dedup O(1). Measured at **5.7× faster** for dedup operations.\n\n#### `Intl.Segmenter` → regex word split\n\n`brief.ts` used `Intl.Segmenter` for token-aware truncation, which allocated granular objects per word. Replaced with `\\p{L}[\\p{L}\\p{N}]*|\\p{N}+` regex — identical output, ~2× faster, zero object allocation.\n\n#### `convertToLlm()` elimination\n\nThe `before-compact` hook called `convertToLlm()` to transform messages into an LLM message format before processing. Since pi-vcc processes messages algorithmically via `normalize()` (which already handles `user`, `assistant`, `toolResult`, and `bashExecution` directly), this conversion was both lossy (flattened bash `command`/`output`/`exitCode` into plain text) and wasteful. Removed entirely.\n\n#### Missing `read` in `FILE_READ_TOOLS`\n\npi's built-in file-read tool uses the lowercase `read` tool name, but `FILE_READ_TOOLS` only contained `Read`. All read operations were invisible to file-activity and symbol extraction — a correctness fix, not strictly a performance fix, but it meant the symbol extractor was silently skipping data it should have processed.\n\n### Summary\n\n| Optimization | Impact |\n|---|---|\n| `C_FUNC_RE` backtracking fix | 1.2 s → <0.1 ms per line (>1000×) |\n| Unified symbol extraction | 3× fewer redundant scans |\n| `DECL_SCREEN_RE` pre-filter | 2.6× faster `parseDeclName` |\n| `eachLine()` generator | ~18 ms saved on large sessions |\n| `Set`-based dedup | 5.7× faster symbol dedup |\n| Regex word split | 2× faster token truncation |\n| `convertToLlm()` removal | Eliminated redundant message conversion |\n\n## Pipeline\n\n1. **Normalize** — raw Pi messages → uniform blocks (user, assistant, tool_call, tool_result, thinking, bash)\n2. **Filter noise** — strip system messages, empty blocks, noise tools (TodoWrite, etc.)\n3. **Build sections** — extract goal, file paths + symbols, type catalog, blockers (exit codes, tsc, tests, empty grep), preferences\n4. **Brief transcript** — chronological conversation flow, tool calls collapsed to one-liners, text truncated\n5. **Format** — render into bracketed sections + transcript, with cache-friendly ordering (stable sections first, volatile last)\n6. **Merge** — if previous summary exists: sticky sections merge, volatile sections replace, transcript rolls\n7. **Footer** — append timestamp, compression ratio, message range, and recall note\n\n## Config\n\nConfig lives at `~/.pi/agent/pi-vcc-config.json` (auto-scaffolded on first load with safe defaults):\n\n```json\n{\n  \"overrideDefaultCompaction\": true,\n  \"debug\": false,\n  \"modelThresholds\": {\n    \"neuralwatt/zai-org/GLM-5.1-FP8\": { \"reserveTokens\": 32768 },\n    \"neuralwatt/moonshotai/Kimi-K2.6\": { \"compactPercent\": 65 },\n    \"neuralwatt/glm-5.1-long\": { \"compactAtTokens\": 150000 }\n  },\n  \"globalThreshold\": { \"compactAtTokens\": 150000 }\n}\n```\n\n- **`overrideDefaultCompaction`** *(default `true`)*: when `true` (default), pi-vcc handles all compaction paths (`/compact`, auto-threshold, `/pi-vcc`) unless the active pi-fabric engine owns summary compilation. Set `false` to let pi core handle `/compact` and auto-threshold compactions via its default LLM-based compaction. Explicit `/pi-vcc` always uses pi-vcc.\n- **`debug`** *(default `false`)*: when `true`, each compaction writes detailed info to `/tmp/pi-vcc-debug.json` — message counts, cut boundary, summary preview, sections.\n- **`modelThresholds`** *(default: none)*: per-model compaction thresholds. Keys match against `\"provider/modelId\"` (e.g., `\"neuralwatt/zai-org/GLM-5.1-FP8\"`) or just `\"modelId\"` (e.g., `\"GLM-5.1\"` — matched only when `provider/modelId` doesn't). Each value has:\n  - **`reserveTokens`**: tokens to reserve for the LLM response. Overrides pi-core's global `compaction.reserveTokens` for matching models. Controls *when* compaction triggers: `contextTokens > contextWindow − reserveTokens`. A higher value compacts earlier (more conservative); a lower value lets context grow larger. Takes precedence over `compactAtTokens` and `compactPercent` when multiple are set.\n  - **`compactAtTokens`**: absolute context token count where compaction triggers: `contextTokens > compactAtTokens`. Useful when you want the same trigger point across models with different context windows, such as `{ \"compactAtTokens\": 150000 }`. Takes precedence over `compactPercent` when both are set.\n  - **`compactPercent`**: compaction trigger as a percentage of context window (1–99). Compaction fires when `contextTokens > contextWindow × compactPercent / 100`. E.g. `65` means \"compact when context is 65% full\". Ignored when `reserveTokens` or `compactAtTokens` is also set.\n  - **`keepRecentTokens`** *(optional)*: advisory token budget for pi-core's default compaction. Pi-vcc's own `buildOwnCut` uses task-boundary heuristics, so this only affects pi-core's cut when `overrideDefaultCompaction` is `false`.\n- **`globalThreshold`** *(default: none)*: global threshold applied to all models not matched by `modelThresholds`. Uses `reserveTokens`, `compactAtTokens`, or `compactPercent`. If omitted, pi-core's global `compaction.reserveTokens` applies (no override).\n- **`defaultThreshold`** *(default: none, deprecated)*: use `globalThreshold` instead. Backward compatible — still works.\n\n### How compaction thresholds work\n\nPi-core's auto-compaction triggers when `contextTokens > contextWindow − reserveTokens`. The global `reserveTokens` (default 16384) is one-size-fits-all — but different models have very different context windows and cost profiles. Pi-vcc also supports `compactAtTokens` when you want an absolute trigger point independent of a model's context window.\n\nPi-vcc's thresholds provide proactive compaction at both the per-model and global level:\n\n| Direction | How it works |\n|---|---|\n| **Compact earlier** (model needs compaction sooner) | `agent_end` and `model_select` proactively trigger compaction when context exceeds the model's threshold but hasn't hit the global threshold yet. The `globalThreshold` also proactively triggers for unmatched models. |\n\nPreviously, a \"compact later\" direction was implemented by cancelling compaction in `session_before_compact` when context was below the per-model threshold. This guard was removed because `session_before_compact` carries no reason field — manual `/compact` and auto-compaction are indistinguishable (both have `customInstructions: undefined`), so the guard was blocking explicit user compaction requests.\n\nThe proactive trigger handles the \"compact earlier\" direction. If pi-core's global threshold fires before the per-model threshold is crossed, the compaction proceeds — slightly premature from the per-model threshold's perspective, but preferable to blocking an explicit user action.\n\nKey matching order: exact `\"provider/modelId\"` → `\"modelId\"` → `globalThreshold` → pi-core's global setting.\n\nExplicit `/pi-vcc` commands bypass threshold checks — if you ask for compaction, you get it.\n\n## Related Work\n\n- [VCC](https://github.com/lllyasviel/VCC) — the original transcript-preserving conversation compiler\n- [Pi](https://github.com/badlogic/pi-mono) — the AI coding agent this extension is built for\n- [DeepSeek-V4](https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro/blob/main/DeepSeek_V4.pdf) — hybrid attention architecture that directly inspired pi-vcc's multi-resolution transcript, resolution detection, task-boundary cut, and anchors\n- [Mastra](https://mastra.ai) — Observational Memory patterns that inspired Current Status, priority error tags, cache-friendly ordering, and compaction-scoped recall\n- [Claude Code](https://github.com/anthropics/claude-code) — three-tier compaction architecture (LLM / session memory / micro-compact) that influenced cache-friendly ordering and compaction-scoped recall design\n- [Codex (OpenAI)](https://github.com/openai/codex) — Rust-based three-path compaction that inspired the handoff preamble and first-class structured compaction output\n- [VCC Paper](https://arxiv.org/abs/2603.29678) — adaptive view concept that inspired structure-preserving search results and thinking content surfacing in recall\n\n### Inspirations & Attribution\n\nThis fork builds on the upstream `sting8k/pi-vcc` with novel features inspired by five external projects. Below is a comprehensive mapping of each inspiration source to the features it produced.\n\n#### DeepSeek-V4 — Hybrid Attention Architecture\n\nInspired by DeepSeek-V4's CSA/HCA/SWA attention architecture, Lightning Indexer, Attention Sink, Quick Instruction, and contextual parallelism.\n\n| DeepSeek-V4 Technique | pi-vcc Equivalent | Shared Principle |\n|---|---|---|\n| **CSA** (light compression, m=4) | `[Files And Changes]`, `[Type Catalog]` | Medium-fidelity: keeps structure but drops full content |\n| **HCA** (heavy compression, m'=128) | `[Earlier Turns]` | Heaviest compression: one-liner per conversational turn |\n| **Sliding Window Attention** (n_win=128) | Brief transcript rolling window + `[Current Status]` | Uncompressed recent context for local fidelity |\n| **Lightning Indexer** (top-k sparse selection) | `vcc_recall` (BM25 + regex) | Selective, not exhaustive, access to compressed memory |\n| **Attention Sink** (near-zero on stale entries) | `[RESOLVED]` tag on fixed errors | Let the consumer gracefully ignore stale compressed context |\n| **On-disk KV cache** (prefix reuse) | Raw JSONL recall via `vcc_recall` | Lossless cold store alongside compressed hot context |\n| **Quick Instruction** (cache reuse for aux tasks) | `[Anchors]` (zero-tool-call recall) | Self-serve lookups from already-present context |\n| **Contextual Parallelism** (boundary alignment) | Task-boundary-aware cut | Compression segments align to meaningful units, not arbitrary positions |\n| **Hybrid precision** (BF16+FP8, cache-aligned) | Cache-friendly section ordering | Stable prefix survives across compactions for prompt caching |\n| **Interleaved thinking preservation** | Brief transcript preservation | Discarding intermediate reasoning forces reconstruction from scratch |\n\n**Features delivered:**\n1. **Multi-resolution transcript** — three-zone brief: `[Earlier Turns]` (one-liner/turn), brief transcript (medium compression), kept tail (uncompressed)\n2. **Error resolution detection** — tsc errors tagged `[RESOLVED]` when the file they reference was subsequently edited\n3. **Task-boundary-aware cut** — cut point detects mid-flight turns and pushes back to keep the whole turn in the tail\n4. **Structured anchors** — `[Anchors]` section with commit hashes, error IDs, key file paths for zero-tool-call recall\n\n#### Mastra — Observational Memory\n\nInspired by Mastra's OM patterns — treating compaction output as a structured observation layer rather than free-form prose.\n\n| Mastra OM Pattern | pi-vcc Equivalent |\n|---|---|\n| Observational memory summary | `[Current Status]` section — auto-extracted focus, last action, next steps |\n| Priority-tagged observations | `[ERROR]`/`[WARN]`/`[INFO]`/`[RESOLVED]` tags on Outstanding Context |\n| Stable-first observation ordering | Cache-friendly section ordering (stable sections first, volatile last) |\n| Per-observation metadata | Timestamp + compression-ratio metadata footer |\n| Scoped observation retrieval | Compaction-scoped `vcc_recall` (`scope:'compaction:N'`) |\n\n#### Claude Code — Three-Tier Compaction\n\nClaude Code's three-tier architecture (full LLM, session memory = LLM-free, micro-compact = cache-editing) influenced pragmatic design choices:\n\n| Claude Code Technique | pi-vcc Influence |\n|---|---|\n| Cache-sharing fork path | Cache-friendly section ordering — stable prefix survives across compactions for prompt cache hits |\n| `lastSummarizedMessageId` boundary tracking | Compaction-scoped recall — `scope:'compaction:N'` drills into specific segments |\n| Session memory (deterministic, LLM-free) | Validates the zero-LLM approach; pi-vcc achieves similar determinism via extraction instead of a separate memory pipeline |\n\n#### Codex (OpenAI) — Three-Path Compaction\n\nCodex's Rust-based compaction (inline/remote/remote-v2) inspired higher-level design decisions:\n\n| Codex Technique | pi-vcc Influence |\n|---|---|\n| `summary_prefix.md` continuation directive | Handoff preamble — continuation directive prepended to every compaction summary |\n| `ContextCompactionItem` as first-class protocol type | Structured bracket-tagged sections act as a first-class compaction artifact, not free-form prose |\n| `InitialContextInjection` control over system context | Task-boundary-aware cut ensures meaningful boundaries, not arbitrary splits |\n\n#### VCC Paper — Adaptive View\n\nThe original VCC paper (arxiv.org/abs/2603.29678) introduced the adaptive view concept — preserving conversation structure and role tags in search projections.\n\n| VCC Paper Concept | pi-vcc Equivalent |\n|---|---|\n| Adaptive view (structure-preserving projection) | Structure-preserving search results — grouped by conversation segments (turns) with `>` match indicators |\n| Role tag preservation | Thinking content surfacing — `thinkingOf()` extracts model reasoning for recall display and search indexing |\n\n#### Original Novel Work\n\nFeatures with no external inspiration — original engineering contributions unique to this fork:\n\n1. **Deep error extraction** — captures bash exit codes `[bash:exit N]`, tsc errors `[tsc]`, test failures `[tests]`, empty grep/glob `[no matches]` with structured tags and dedup\n2. **Symbol-annotated files** — file paths annotated with exported symbol names extracted from tool call arguments and results\n3. **Type catalog** — `[Type Catalog]` section with exact exported signature lines from modified/read files\n4. **Multi-language symbol extraction** — Rust, Java, C/C++, Zig, Ruby, Elixir symbol detection with language-specific regex patterns\n5. **Performance optimization suite** — catastrophic backtracking fix (>1000×), unified extraction (3×), DECL_SCREEN_RE pre-filter (2.6×), eachLine() generator, Set-based dedup (5.7×), Intl.Segmenter replacement (2×), convertToLlm() elimination\n6. **Entry-ID-based message range** — stores entry IDs instead of branch-relative indices for correct cross-branch resolution\n7. **Neuralwatt-MCR interop** — signals compaction override so MCR models don't discard pi-vcc's summary\n8. **Supply-chain hardening** — pinned deps, npm-shrinkwrap, audit fixes\n\n## License\n\nMIT\n","readmeFilename":"README.md"}