{"_id":"pi-freeflow","_rev":"55-95688820d10b0c08a167e9cb4c0c98a5","name":"pi-freeflow","dist-tags":{"latest":"1.9.6"},"versions":{"1.0.0":{"name":"pi-freeflow","version":"1.0.0","keywords":["pi-package","pi-extension","free-models"],"author":{"name":"trefeon / verokes"},"license":"MIT","_id":"pi-freeflow@1.0.0","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"7021625d106a234ebc38911d2fcc9a6648d6c40e","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.0.0.tgz","fileCount":3,"integrity":"sha512-//osTJc0MWF80CaP4FmQfevBg0I/LIpiYqw9t1Jd5OLQEw/f8cMhpkAhPvMYidSAHIk39SMM0KXbhFe/sjZMLA==","signatures":[{"sig":"MEUCIBWqAG1oC3LI0S1SLLGfKjCrFxb/avbmJYDjRQ7ORAzmAiEAq+YuZFCaTIy81dnIuZW603uUgsNnti4EAy/y9XWIWvc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55621},"gitHead":"a797dababb8a987a56f05abfa1e73519c80c41f0","_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Personal multi-cloud rolling fallback relay for OpenCode Zen and KiloCode models in OMP/Pi","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.0.0_1787599035870_0.8824907187754152","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"pi-freeflow","version":"1.0.1","keywords":["pi-package","pi-extension","free-models"],"author":{"name":"trefeon / verokes"},"license":"MIT","_id":"pi-freeflow@1.0.1","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"900c913fd59d10ce40bb33f072646bf6cce01aff","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.0.1.tgz","fileCount":3,"integrity":"sha512-vVUUPX9AHf8XgX+zdKLZdjaQdXt+lnjQ4EY69WGOQTyp7ZCxq7pJUzsvYCQ+ch44olDe0gD5Dwy8EENIOr776g==","signatures":[{"sig":"MEUCIQD7cve57U2yeSKyEondb+KnkLIf5xfI+gD40+Aw0me/MgIgYeCxzcgwnK7KA9c4abXDqPxQuT/bZqVZyeoQIDvityQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55418},"gitHead":"d98d139792d7aff66c7c03e661e2f771e1d1349c","_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Personal multi-cloud rolling fallback relay for OpenCode Zen and KiloCode models in OMP/Pi","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.0.1_1787600641264_0.9085095408240846","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"pi-freeflow","version":"1.0.2","keywords":["pi-package","pi-extension","free-models"],"author":{"name":"trefeon / verokes"},"license":"MIT","_id":"pi-freeflow@1.0.2","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"b0176d5f8ca46295a6168246a36ff7c5ed5a54f1","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.0.2.tgz","fileCount":3,"integrity":"sha512-8wWDrZz2ueQbVxRg4HCwEK5PHcddbXVh807UrybEFHC+GKu2AoEFSHMmK8VDs7/3EhKBjSf0Mq6c6RASSxP9pg==","signatures":[{"sig":"MEUCIHTo9+cpNM3xU1hb+Ei4EP+HYCy+PlfCZDbrLl9rn0JBAiEA14fm3s50qS8gGylFc3rHASQV/VOGrgxXpQh/u/BHMZg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55660},"gitHead":"39ff7d3ebe01eded331cf1ccb1baf655327b12ee","_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Personal multi-cloud rolling fallback relay for OpenCode Zen and KiloCode models in OMP/Pi","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.0.2_1787601896112_0.8177533005549822","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"pi-freeflow","version":"1.0.3","keywords":["pi-package","pi-extension","free-models"],"author":{"name":"trefeon / verokes"},"license":"MIT","_id":"pi-freeflow@1.0.3","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"41345e9f38870635499dba184e8d789462f5f47e","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.0.3.tgz","fileCount":3,"integrity":"sha512-1WmqFycxhNvBBmd8trnNr3U0g8gH5PU4XSCFwtYshG4Md6pZOOXVuPRqJrLGaAME3lb6J+i74Ql5zjywB1fpfw==","signatures":[{"sig":"MEUCIQCQdjfItlvVUK6VAcAFrRM0m1zOU1/rirRR05fGyMol2AIgQiZ7oU1fmi42Wchm+POPSUO20tLgV4g5teqfjcYUGc0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56040},"gitHead":"87f63d24d80d692ed237c3d435a51d8110545f10","_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Personal multi-cloud rolling fallback relay for OpenCode Zen and KiloCode models in OMP/Pi","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.0.3_1787605765953_0.7949495810271476","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"pi-freeflow","version":"1.0.4","keywords":["pi-package","pi-extension","free-models"],"author":{"name":"trefeon / verokes"},"license":"MIT","_id":"pi-freeflow@1.0.4","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"ba09f0ff91d25ddfe13116bd23efe78bbec94caf","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.0.4.tgz","fileCount":3,"integrity":"sha512-JAxCQYEgCeahqkPvET42ITlOeSxAJY9DMzLPdontQ5NZe6orrVfQ/1XIa986+kc7fbxUD0MqylQSQEy3yfgfwg==","signatures":[{"sig":"MEUCICylChBW3IkA6yH/6PhPd2G47Y2dRrGaTSl0ESI3ITFgAiEAuS92b6KAk6CmxVmmpooGsCq0pjzQb4R/m5AvJzhJxnE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57922},"gitHead":"3fb8788192bde5f1454292cee5f6333c61c502ca","_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Personal multi-cloud rolling fallback relay for OpenCode Zen and KiloCode models in OMP/Pi","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.0.4_1787605838501_0.3755296996275541","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"pi-freeflow","version":"1.0.5","keywords":["pi-package","pi-extension","free-models"],"author":{"name":"trefeon / verokes"},"license":"MIT","_id":"pi-freeflow@1.0.5","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"95a412e75744b70510899bcccaba10a26ada2100","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.0.5.tgz","fileCount":3,"integrity":"sha512-0rZajERL0KU7BqA2VCXHjaN/V78yhy+ZzmlkucU7CPPd8qBgqQxE2GcsN93MgVJOuy217amsqWz3axQaf3QqgA==","signatures":[{"sig":"MEUCIQCIZuFLC9o9GZtTfxWJbe9yG9x6koRfRCzI4zojs2ue2gIgNYawWFWKLSH3sf1vzL9jHJQ/Qp0vYJxU85n/ht1Qbac=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58143},"gitHead":"f7317ea360d7d98c95660251e5b6c39c3290084a","_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Personal multi-cloud rolling fallback relay for OpenCode Zen and KiloCode models in OMP/Pi","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.0.5_1787605909452_0.2839830307547575","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"pi-freeflow","version":"1.0.6","keywords":["pi-package","pi-extension","free-models"],"author":{"name":"trefeon / verokes"},"license":"MIT","_id":"pi-freeflow@1.0.6","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"ae26c1b879b77bf2f413334df7095d7a90b12454","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.0.6.tgz","fileCount":3,"integrity":"sha512-zFfirb/6GarOhMvObBuFz4DfxKlPzCcUsXgAHPC3nIn5iUkitADSC1QLSoybNAzEKcwAL9rfFZLIeuyOGp7QHg==","signatures":[{"sig":"MEUCIFS7mv9mS0HymgiQML2BDkM0HvFhGiHnic7VbxoEhj84AiEAgVeRL+Pn4/hRg1dYjW3+HXkxZ4by1GZuYm6odJTtjX4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58172},"gitHead":"bc00a999ca12e0b545ee19a33035bf26075c82fd","_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Personal multi-cloud rolling fallback relay for OpenCode Zen and KiloCode models in OMP/Pi","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.0.6_1787605951444_0.7090965082113303","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"pi-freeflow","version":"1.0.7","keywords":["pi-package","pi-extension","free-models"],"author":{"name":"trefeon / verokes"},"license":"MIT","_id":"pi-freeflow@1.0.7","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"f1c3e450abff16c5e7a28edaa2d3ede3596a0ee0","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.0.7.tgz","fileCount":3,"integrity":"sha512-tLoXxf2tXJUZa9ERK4J16C8WSRdOntl1FKbHPF1grHzAWCpad19a9aoQjc7/wPxf9p59SU689hJDbsHqlbqCBw==","signatures":[{"sig":"MEUCIQDuaXe+JpTbmopQ2BB5Z8R2HL3xMQd5VqMA3JCdFswjuQIgOpfBsC4UoIUuZGRIt8RUSAF/JZwh+YzsrcOvh73hjBk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58963},"gitHead":"a52bd432f3dbf18f443019c95e25ff12994e2a3a","_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Personal multi-cloud rolling fallback relay for OpenCode Zen and KiloCode models in OMP/Pi","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.0.7_1787606017448_0.449031584066123","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"pi-freeflow","version":"1.0.8","keywords":["pi-package","pi-extension","free-models"],"author":{"name":"trefeon / verokes"},"license":"MIT","_id":"pi-freeflow@1.0.8","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"749eff64a0f41de3b8df71f11a94e049b0325be6","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.0.8.tgz","fileCount":3,"integrity":"sha512-In5zKxEG/c4fsrhNZHAhfqk0TN0QD+bRMpT0NY7U1/kQj7+PXvhpbccqMukoWt3QkkfIl986RQ4jM1CWUKy6zA==","signatures":[{"sig":"MEYCIQCZOHZ1z1udSrSHRNJjEM7A9waw6dyBH6sl7Tu8PfrqQQIhAPuzZ4nssJWHqdwsqRartnwBDPRWLGXNECfl6T0Jy016","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60100},"type":"module","gitHead":"266d8cacd82fe0232d68c034be6ab31469f907fd","_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Personal multi-cloud rolling fallback relay for OpenCode Zen and KiloCode models in OMP/Pi","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.0.8_1787606358518_0.9217897927427707","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"pi-freeflow","version":"1.0.9","keywords":["pi-package","pi-extension","free-models"],"author":{"name":"trefeon / verokes"},"license":"MIT","_id":"pi-freeflow@1.0.9","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"b8f1bb2452fad1f330516147a7f53f2489b0758d","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.0.9.tgz","fileCount":3,"integrity":"sha512-TNb2ls6DJRR59yKTn1u+/rsgpLBmGSUsTS3ZDcZ5kAVCIJzU42j71joRz+Bm5fsHM6NrdCNLyP38z5OCnxPfeA==","signatures":[{"sig":"MEQCIFbsiSdYJfLTUPqIqFMjR5wtaetwH/VtEzMaTkQom3DDAiBBeDsuqEZbgwJw9fz6psbDMXLuS/1chpd4xI6T5wg2vA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60101},"type":"module","gitHead":"cba97860244c01f473b24540780028fd406a7ad4","_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Personal multi-cloud rolling fallback relay for OpenCode Zen and KiloCode models in OMP/Pi","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.0.9_1787606391329_0.15864557718428252","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"pi-freeflow","version":"1.1.0","keywords":["pi-package","pi-extension","free-models"],"author":{"name":"trefeon / verokes"},"license":"MIT","_id":"pi-freeflow@1.1.0","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"82f18ddb47e47ec522630ce1e317371f4bae064e","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.1.0.tgz","fileCount":3,"integrity":"sha512-egX4tf8IpQy/N/AR+L+VwXBvexA8BjYirfT33EEekrnfssyELxvxnD6inVNphNGGJUC3d0EkvNayXHaUe146Hg==","signatures":[{"sig":"MEUCIQCpMgLTPSGH4UhL2EgqBgzurMZxrfJjaFag1e+tXA6DqwIgM61tyQ2KHhvov6gobaiD4M4s2v8SK29xMYM9iXgKJLc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60127},"type":"module","gitHead":"b15e54dbf3d8d145424c73e3c017eb02458faf00","_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Personal multi-cloud rolling fallback relay for OpenCode Zen and KiloCode models in OMP/Pi","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.1.0_1787606604875_0.9395529766114297","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"pi-freeflow","version":"1.1.1","keywords":["pi-package","pi-extension","free-models"],"author":{"name":"trefeon / verokes"},"license":"MIT","_id":"pi-freeflow@1.1.1","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"6545c38d2c37fd5ac62d7660b6f387f8e906a0e7","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.1.1.tgz","fileCount":3,"integrity":"sha512-EPriIExwBff9J8g3h19ubIf8M+tZiMalcdZiksGh39Gx4nxshVyYr6ChFRjXM+RWnXPPkj7IsemQSdPMzY1C7A==","signatures":[{"sig":"MEUCIQDmHS/3s+N6zYJCpRR0VkVhzVt3nABgW24EnYfALAsN5gIgRqALfB6kCYnYPrTk2gHgWo8nAjqwHjKfq3FkhrrRvpI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61586},"type":"module","gitHead":"477ffad800d469c6cc0a938e23b1233f43d13a74","_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Personal multi-cloud rolling fallback relay for OpenCode Zen and KiloCode models in OMP/Pi","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.1.1_1787607122274_0.07959636703565476","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"pi-freeflow","version":"1.1.2","keywords":["pi-package","pi-extension","free-models"],"author":{"name":"trefeon / verokes"},"license":"MIT","_id":"pi-freeflow@1.1.2","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"651484d03ea76ac605301144640d651a66fd9f46","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.1.2.tgz","fileCount":3,"integrity":"sha512-C3YYAefXFrwx5lZTyaG5IP196/GyrWpzPMMgrPF1nby9ZVBs7FmOUTuTMlQ8dXFB9XSan/wwKTCiTOU+pZlG/Q==","signatures":[{"sig":"MEUCIDiaQn33BtaBdksYb5xd/PhRCVT5IJT7xbr0X8f9zcC/AiEAqpM9bwY7AARjSyl1pSlLQWD22D4u34L+SbC5OJftB0Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61842},"type":"module","gitHead":"4ca26b21680aae283834979f1285966290e3fd39","_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Personal multi-cloud rolling fallback relay for OpenCode Zen and KiloCode models in OMP/Pi","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.1.2_1787607590774_0.09674924674608532","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"pi-freeflow","version":"1.1.3","keywords":["pi-package","pi-extension","free-models"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.1.3","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"f112aaec68fbb282c2303cf90e5148077c493afc","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.1.3.tgz","fileCount":3,"integrity":"sha512-EA5ndHYbhAt1twdKHNNXlkkGs0c5RHPDk8uaDL7fWQnDwTYNJ+aHU0XUx9R66W+MPR+de4NMVf7aNIp1CPQCaQ==","signatures":[{"sig":"MEYCIQDqevlm7Z5LK+H3Y30+WWLmSBdFRcZRNLSaoECDxcb6KwIhAIHgE4RITkwAMe++DXUB4pUSoYcub5GgReMoNK7peptW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61822},"type":"module","gitHead":"c3e10d66b0a931c1f271fdd6ad5b4225bc524c4a","_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Personal multi-cloud rolling fallback relay for OpenCode Zen and KiloCode models in OMP/Pi","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.1.3_1787608246143_0.49310686587629626","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"pi-freeflow","version":"1.1.4","keywords":["pi-package","pi-extension","free-models"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.1.4","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"07e766fb3dad77d537fb2ee4026a11c803c6c897","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.1.4.tgz","fileCount":3,"integrity":"sha512-I2g8dSiKSY5RDN5JK4CXnsm+mPJMY5XN1IEe0sduXVRqtY10+r3Uelz9DJpNtzx8cFAZtNXlxuiu/7GIcekXsg==","signatures":[{"sig":"MEUCIQCskbGW7PFV2zy0WMT3nrxwPTw+EPOB48txtMQCvkjjqgIgch0QC3Ft8EFqN10c/kFZQ2z6zsfXM4NIrMOdl1ej+iE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63027},"type":"module","gitHead":"db3642e3221aedb70bf37441ccdc5f2906c18052","_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Personal multi-cloud rolling fallback relay for OpenCode Zen and KiloCode models in OMP/Pi","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.1.4_1787608363205_0.966327792614404","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"pi-freeflow","version":"1.1.5","keywords":["pi-package","pi-extension","free-models"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.1.5","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"ff7b5793cb4f67d89891aa3c7f13ab68fe7ee0f9","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.1.5.tgz","fileCount":3,"integrity":"sha512-r+D9WE/9slgdqlFsRXK9ctRwtFhm7qvKuMSwfrhXr6vfYlD3KhWZ9e4VJ3dqL/scqXRhy5scrfoTT/ol+1dvgA==","signatures":[{"sig":"MEUCIQCR8g4AZyvB99BafUXHjwXKgAmRNbCp/B9kvpmM0ELjkAIgfBgNrZZGulE8miguORnqLxUUHlP82oG2qsVp0zUzlC0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67783},"type":"module","gitHead":"4fca92bf1d2c3e5d3541a31d1dd3c6c38d4e5d9e","_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Personal multi-cloud rolling fallback relay for OpenCode Zen and KiloCode models in OMP/Pi","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.1.5_1787608514267_0.16401346239522585","host":"s3://npm-registry-packages-npm-production"}},"1.1.6":{"name":"pi-freeflow","version":"1.1.6","keywords":["pi-package","pi-extension","free-models"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.1.6","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"db1699461aed9e31c27138f0d677fbbec50f28ba","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.1.6.tgz","fileCount":3,"integrity":"sha512-5HmiHFR2teU5Qh1/4yCjIvh7rvIqf1nDnnKyYgih1ZNkvkcGNhC19qI4lXNcZH0FlljrfZWZfvEaAaXsg7qaOA==","signatures":[{"sig":"MEUCIQC6jaQP2/pu8VmbS7M0CokgLgj+ieaC+fnsNFRL+/Z40gIgLyTDfnVdxF+LFrymc3HjanDEi/Q0YqsLmfDlO/eZZmE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68837},"type":"module","gitHead":"cb832585d58abc00e8ceddf2e5cca8522ce5bc2e","_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Personal multi-cloud rolling fallback relay for OpenCode Zen and KiloCode models in OMP/Pi","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.1.6_1787608888869_0.726169310608519","host":"s3://npm-registry-packages-npm-production"}},"1.1.7":{"name":"pi-freeflow","version":"1.1.7","keywords":["pi-package","pi-extension","free-models"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.1.7","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"6b1620cf60ae332c8f71beec554e735067c68ab6","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.1.7.tgz","fileCount":3,"integrity":"sha512-cvROV6QB/w3CuR2MoTWHrMFKQFH97rrSe0snsebpIYtfNoMV9L2yOgwjn5NvnZqZkbHYcXiqJTiJmTt12XVy6g==","signatures":[{"sig":"MEQCID3j35umQfkEhwnFQkbdJjA1w320fEGfLAPvMrUWFPtRAiAw9R0NXIP63piQcHKKpye+2KgnTytHq82Jh8uMOreEHQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69452},"type":"module","gitHead":"6b8adbc4b898d21762ebdeb9366ed72c8223d0fb","_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Personal multi-cloud rolling fallback relay for OpenCode Zen and KiloCode models in OMP/Pi","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.1.7_1787608983212_0.6278341265406113","host":"s3://npm-registry-packages-npm-production"}},"1.1.8":{"name":"pi-freeflow","version":"1.1.8","keywords":["pi-package","pi-extension","free-models"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.1.8","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"eee2074fc19f9c7a95e07d4ed01545a3cbf7cb94","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.1.8.tgz","fileCount":3,"integrity":"sha512-PA8i/wQ8aCOeeaspsrxCgzuoKyQWlS83qgWCOq/0NcDWQrOquRoE82oViUF8gjEFIEzXQftQFN8vxG/r3OR3eQ==","signatures":[{"sig":"MEYCIQDzTjmXpKeA1beUvcjYBLAFchgnZanYLxvUh2Lwgl8/2wIhAKVY7WY1uSu2NrA/x5Mex4cCtsbNj2dFRPJ8gz0/coYT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81662},"type":"module","gitHead":"bd6201410daca5a1d0ceb5119f633c2f5cd2eb30","_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Personal multi-cloud rolling fallback relay for OpenCode Zen and KiloCode models in OMP/Pi","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.1.8_1787610309537_0.8841956027173932","host":"s3://npm-registry-packages-npm-production"}},"1.1.9":{"name":"pi-freeflow","version":"1.1.9","keywords":["pi-package","pi-extension","free-models"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.1.9","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"79ad3cd368ff79ce72acca0487c0abeb9d11a7a4","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.1.9.tgz","fileCount":3,"integrity":"sha512-6leiDRcTu1hLJEmKDGJS71cQTErJYlomf86pvki2lYpZPGnag8nYTotJzX8FWdxhvNto1U99o4iyajTh4qbXwA==","signatures":[{"sig":"MEUCIQDYBJ5IVEpZMD+Rg055pnC8vakqBaIA1Sj/T5+J/6r1swIgd1ks0X2xxmP7zd9SfAxgjsIJ9VpyRJY9S/nQTSlvlbA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82579},"type":"module","gitHead":"408517964f64d281feaaa3c7a2ee118711e45b94","_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Personal multi-cloud rolling fallback relay for OpenCode Zen and KiloCode models in OMP/Pi","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.1.9_1787610570015_0.4199048842689792","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"pi-freeflow","version":"1.2.0","keywords":["pi-package","pi-extension","free-models"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.2.0","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"79f181170535f33ea55e54af579c17dba2bd7483","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.2.0.tgz","fileCount":3,"integrity":"sha512-Rul4Aw7CyHLHj1eK6YgrIdLDrNQso5uppIl8igKa855ySX4I+lvtRFulW++vSCsjZ5wXfbuoQxyFBUdY4LMfew==","signatures":[{"sig":"MEQCIEDV2/aZT1QjEqDl9U2jAx1vxwirigrXZGYkog8dGC3bAiBEVn8u3JFZcG3zXxUjahLK9fvyQpYbqljnnQM8ff5odA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82430},"type":"module","gitHead":"8d1eb9a0222b356f345b6cffd173cfdc479287c6","_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Personal multi-cloud rolling fallback relay for OpenCode Zen and KiloCode models in OMP/Pi","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.2.0_1787612060955_0.34598168606950774","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"pi-freeflow","version":"1.2.1","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.2.1","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"dist":{"shasum":"4cc5833e5bf1c559734a96f218026e99a347a012","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.2.1.tgz","fileCount":18,"integrity":"sha512-KH9rNlTCA48fL+SgWBmEyi2oLLLZEVMtML3u6Qa9YshN1UKAv6yhIR+TpcMIis8dUKq/nuao5zxNdnKBBWqaBA==","signatures":[{"sig":"MEYCIQCpjXIHyb7jiN82hxIiIzg0BCLBLi8OveiCqPrry2lUWgIhAJ5rbJX1mcZxoF8FMWuIJ00oDZEiZwqlQ2ddcuTVc1mY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108677},"main":"extensions/index.ts","type":"module","types":"src/index.ts","gitHead":"134d830595b15c1d9e60a6f4b61821a186a65481","scripts":{"test":"node --experimental-strip-types --test test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Multi-cloud rolling fallback relay for OpenCode Zen and KiloCode free models in Oh My Pi (OMP) and Pi","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.2","@types/node":"^22.13.9","@earendil-works/pi-coding-agent":"^0.84.3"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.2.1_1787621000203_0.006441683146778399","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"pi-freeflow","version":"1.3.0","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.3.0","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"7e606e42dfbb9b5b015a0df4872c6888201c69f0","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.3.0.tgz","fileCount":17,"integrity":"sha512-yTP6smvCsQd1WFR8bfB0sLkGSyDIhb++zuQNcnEhNvSkuFftOoEbmf5Tfu7kjOcB23iuX1zddsP6qJrLMU5S5w==","signatures":[{"sig":"MEUCIQCjOVkU5dc0Zei0wv/HPnyNKKN/7BbWQRQd6OdDF2Sd1QIgAoTydZfEPlENfitspvNJb6VE2wDsudAqUxLAtvcfBco=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102505},"main":"extensions/index.ts","type":"module","types":"src/index.ts","gitHead":"5f9de97c78777a5334a6033290c22607c6f26f33","scripts":{"test":"node --experimental-strip-types --test test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Multi-cloud rolling fallback relay for OpenCode Zen and KiloCode free models in Oh My Pi (OMP) and Pi","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.2","@types/node":"^22.13.9","@earendil-works/pi-coding-agent":"^0.84.3"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.3.0_1787644148509_0.09587345434586392","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"pi-freeflow","version":"1.3.1","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.3.1","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"760d2636cfc0f9453d4b4a68e7548e04898cdad6","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.3.1.tgz","fileCount":17,"integrity":"sha512-5nwblXOyxUrWa+G3/L3fBFTU4Coj5O71q6okgHfwFicK96lrl7YENJo1TwYOYeY7DcVNNBDHwXLPZffgZZrlxA==","signatures":[{"sig":"MEYCIQCKMv9hjhw01BPDP5JCEciUK5TxeBUINXCm2E0mOlMcogIhAIk/GwYXaV9rbE/YV9zcFm/ECoGUqukLSpmtbiYup2h8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102655},"main":"extensions/index.ts","type":"module","types":"src/index.ts","gitHead":"a8f18990ffb8c8dc1afb502811102bc1939c0d16","scripts":{"test":"node --experimental-strip-types --test test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.2","@types/node":"^22.13.9","@earendil-works/pi-coding-agent":"^0.84.3"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.3.1_1787644366661_0.9651877896785142","host":"s3://npm-registry-packages-npm-production"}},"1.3.3":{"name":"pi-freeflow","version":"1.3.3","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.3.3","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"38f075611ff8bd91380a36e31f4e3e30c2df9c62","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.3.3.tgz","fileCount":17,"integrity":"sha512-4oeIs2DNAL2w6pyU8fWrNXXAgHtX0sFxsqR5UJmMFnUSUmDlGp+rZ2ZyiXPNq6YAoOZWNO3G0V62+EOyp0kgdA==","signatures":[{"sig":"MEUCIFZ/hMPODX/6oS1XrQr/OmNShT1MEzpJjRI8XNj4qP/pAiEApFtXQg/Ah8udlBp2p1v5dSxIxz3jHdM8Th5zCOy2lUU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":98071},"main":"extensions/index.ts","type":"module","types":"src/index.ts","gitHead":"774bba60c83b96a5e92cac561ff5a010c96daaf8","scripts":{"test":"node --experimental-strip-types --test test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.2","@types/node":"^22.13.9","@earendil-works/pi-coding-agent":"^0.84.3"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.3.3_1787649628820_0.7036457326384837","host":"s3://npm-registry-packages-npm-production"}},"1.3.6":{"name":"pi-freeflow","version":"1.3.6","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.3.6","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"08822a150436e746825e027cc6ead4c7940cbe3b","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.3.6.tgz","fileCount":17,"integrity":"sha512-Pp9BRr6CRnm0yr0mI4PJPu+U39vz2hzvUpaxX+x0rYLRjcNlUQaTCdBGsw9BluZ+Ok38lZxeCShK1psPLODJEA==","signatures":[{"sig":"MEUCICB8b0n9LcN+e6yz1UENgwlGg2tvmy1HyfQACLoCvny4AiEAyaRhClH3Er5wF7BZcTPd7zlwtMWJsYt9rsvcWgsD6bQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111883},"main":"extensions/index.ts","type":"module","types":"src/index.ts","gitHead":"a11f18fc8af063e449f0e44e9dbc9c0159ce85f5","scripts":{"test":"node --experimental-strip-types --test test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.2","@types/node":"^22.13.9","@earendil-works/pi-coding-agent":"^0.84.3"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.3.6_1787658172814_0.2684530890259229","host":"s3://npm-registry-packages-npm-production"}},"1.3.7":{"name":"pi-freeflow","version":"1.3.7","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.3.7","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"34b9c06bfd05848f3a4a96bc4a80d92659399e6f","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.3.7.tgz","fileCount":17,"integrity":"sha512-68ALsGdcaA8KRhAl3ZI+d9PnY4EZd93DU6ebDKxcE9NkHk/Aw43qViCHRtO6jzsGh9OUbdKew8csg7PMIBwWJQ==","signatures":[{"sig":"MEUCIBQkxvTCYWqEsFv0Fu5ufsq49N3swnZ1iO8YJA/E1RKmAiEAyicq3lPpmqaitW+7ngfJ4hnK5Z9d8vwLRt2U5ak02vA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":114660},"main":"extensions/index.ts","type":"module","types":"src/index.ts","gitHead":"63538d3c5548a0b523bb046fe90817e430c73447","scripts":{"test":"node --experimental-strip-types --test test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.2","@types/node":"^22.13.9","@earendil-works/pi-coding-agent":"^0.84.3"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.3.7_1787679064066_0.6898109371593903","host":"s3://npm-registry-packages-npm-production"}},"1.3.8":{"name":"pi-freeflow","version":"1.3.8","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.3.8","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"95afea381c7c7c42ec46d8da53db7e55e058267d","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.3.8.tgz","fileCount":17,"integrity":"sha512-yqbVW2+b5e3jQVr4ynpt1Z5pzLFwV4VssF8wOu/UJ4R9HWIX7aTf8jLE7zo+5ANI7VN7yBfcjZuoHInOTOFsiw==","signatures":[{"sig":"MEUCIBtnyFKNq1KbhJyXzGn2dfXbgY4gIAFj2d+/hs6KreG+AiEA+6rWr6hXks5cFz0p9+Oin8+lAckJ5AFtOE9R8OhrW2M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":116950},"main":"extensions/index.ts","type":"module","types":"src/index.ts","gitHead":"1af7597e1c3c74db00a09d079c2ff7942bdef5c3","scripts":{"test":"node --experimental-strip-types --test test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.2","@types/node":"^22.13.9","@earendil-works/pi-coding-agent":"^0.84.3"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.3.8_1787688044399_0.041382187141708604","host":"s3://npm-registry-packages-npm-production"}},"1.3.9":{"name":"pi-freeflow","version":"1.3.9","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.3.9","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"64f47ec27a6a26b5b2458a9afcf2e75c154b7559","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.3.9.tgz","fileCount":17,"integrity":"sha512-d5p57uhbIOyPel6op0JJ1WYMaavzvmQlB3e5WyRvG/N8mTB5bAtsvIsBSl377UzNODH0IffRDjSi9m1wUMstsg==","signatures":[{"sig":"MEYCIQCim4hNE4uK9LH+THbb80OjK2gwwHN1mqskEsoz3BPzDwIhAPfsXwtAWvn4uJvrcUWw0bO/AsA2HVyPMkQmwFSQxCOT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":118425},"main":"extensions/index.ts","type":"module","types":"src/index.ts","gitHead":"a25408f16d488ac2c527102ea9143e112b4687df","scripts":{"test":"node --experimental-strip-types --test test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.2","@types/node":"^22.13.9","@earendil-works/pi-coding-agent":"^0.84.3"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.3.9_1787689181490_0.026642702869709378","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"pi-freeflow","version":"1.4.0","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.4.0","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"c65981d81dafa502431d68ac78d70662456bb5ee","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.4.0.tgz","fileCount":17,"integrity":"sha512-5zL2vb721ynttyFTC8iQdCFWmFvPE7DdC+5mMqbI7S+LgvjL1wapv0IqpXA09JdCDWain1QIMJGtgbSPTNk/kg==","signatures":[{"sig":"MEQCIFr4xN5bwYCdi2gZSvyBjmWzP05Ul6W1ygO5vsyeQSBNAiALOs+yAGnuHf6Du8qqxC5pbaw1It5t6BIlaB5xkI8LNA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":120464},"main":"extensions/index.ts","type":"module","types":"src/index.ts","gitHead":"b8d94d6312ed3205605f13105fd4f0b036304448","scripts":{"test":"node --experimental-strip-types --test test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.2","@types/node":"^22.13.9","@earendil-works/pi-coding-agent":"^0.84.3"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.4.0_1787689391171_0.4064479926135005","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"pi-freeflow","version":"1.4.1","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.4.1","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"355c3e1592cb46e3979de88600eb8a0c9508f1d0","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.4.1.tgz","fileCount":17,"integrity":"sha512-0VoWpTC6xE9CelmMKz0hRPHqDP8cJxvJy6fyo/UXbcq4K7DyyWpVwRZ20GbmXoyvmWJsVT1EhK3hrS2dIwSSTA==","signatures":[{"sig":"MEYCIQDpL24h3/k1qvNp6m3OOrMPdOn015katHTWkvzxeeIPYQIhAN0V84ASHKsOV+eNcNYc+HrS6TrcnWZQXihBp9VH3VBv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":120079},"main":"extensions/index.ts","type":"module","types":"src/index.ts","gitHead":"d65053de9a6feac64d115b96cbf23c3cbc588e53","scripts":{"test":"node --experimental-strip-types --test test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.2","@types/node":"^22.13.9","@earendil-works/pi-coding-agent":"^0.84.3"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.4.1_1787728244204_0.16384335694281815","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"pi-freeflow","version":"1.4.2","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.4.2","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"16d1b40a95e50b76a743e723dea38dc0997094b7","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.4.2.tgz","fileCount":17,"integrity":"sha512-Ar0j/pa0+X2dg9VCc79vDQagn7ZHqQZhIqA4PKRHd07DtXYo7xft1lDnwxMO2fgCRp5vgRksuty4mz01gtKR3A==","signatures":[{"sig":"MEYCIQCIlQLiuTwyBt5Fk+gmX+g1ePl62e5pWyedKpNhKgx4VgIhAOtBdUbYRNYVq7HZUrEnUYOzxw36S3KgHZLTcJTH4jb7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":125355},"main":"extensions/index.ts","type":"module","types":"src/index.ts","engines":{"node":">=22.6.0"},"gitHead":"54a9f846b13fd971159c5cb202158e3b5ad557a2","scripts":{"test":"node --experimental-strip-types --test test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.2","@types/node":"^22.13.9","@earendil-works/pi-coding-agent":"^0.84.3"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.4.2_1787737221647_0.3642698525464161","host":"s3://npm-registry-packages-npm-production"}},"1.4.3":{"name":"pi-freeflow","version":"1.4.3","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.4.3","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"3b17f83f640d87d78beef53115e94b572127205a","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.4.3.tgz","fileCount":17,"integrity":"sha512-xEnp94zZcwsIfZEcpB/uPn/WKNONsw6TJ8B96iItpGqtV2vJqP5c/a2OCDH5UVMA9ECr/nScktkYO8NK0NNIOA==","signatures":[{"sig":"MEUCIDJL223hsQNAnwJxbS0894V5uqnkPaY/gjmIK6SgpnQuAiEAifSZQ/wgg6tC+YPmTLc3OV0fbOX8g7LIS9xtLYgHe0I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":149465},"main":"extensions/index.ts","type":"module","types":"src/index.ts","engines":{"node":">=22.6.0"},"gitHead":"3e8a0030f358e1832d76c61f9a13d6b129a646eb","scripts":{"test":"node --experimental-strip-types --test test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.2","@types/node":"^22.13.9","@earendil-works/pi-coding-agent":"^0.84.3"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.4.3_1787761585987_0.4999395392589645","host":"s3://npm-registry-packages-npm-production"}},"1.4.4":{"name":"pi-freeflow","version":"1.4.4","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.4.4","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"ac83a01c5d874b9649617868f49364f8d5912321","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.4.4.tgz","fileCount":17,"integrity":"sha512-VoO1jmxLMxwAAbkdwJG4mzHcECf4mMSNuoNWWO6s7E58IBuVLr0Mwd3CnBzGRyGcWlKMg6DvlRVrUCZrcXJQrw==","signatures":[{"sig":"MEYCIQDp7FZNxPzdD/u+lc795XVcPw63UPzbaJ0kH4E2RQ3xWgIhAN324Y0b9TRUPMUMTafjQUzPWC7t5q+PE3kyhXZJG49u","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":149133},"main":"extensions/index.ts","type":"module","types":"src/index.ts","engines":{"node":">=22.6.0"},"gitHead":"94b76c931b2b34be8b76a6810faeb6730f9b1a52","scripts":{"test":"node --experimental-strip-types --test test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.2","@types/node":"^22.13.9","@earendil-works/pi-coding-agent":"^0.84.3"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.4.4_1787811129238_0.44424199485685745","host":"s3://npm-registry-packages-npm-production"}},"1.4.5":{"name":"pi-freeflow","version":"1.4.5","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.4.5","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"26dbd2773b2a6fc94068ff21bbe50d8f2cc5f277","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.4.5.tgz","fileCount":17,"integrity":"sha512-/Hfu9JBdrq53VxTO650KgWrNej42kJ5G7p0HHJXjhcyY/Zx+G5TMVeXFI4XvHfG01vqe4zJ6dgPY7Ojxz/5JxA==","signatures":[{"sig":"MEYCIQDALnOaajRpdyLn+zE8IqsF6Be0tmVOAekc/+dAyccFYgIhALIcCnaY7bvV1kz0IuYgdc3tuwKdQhHxL+g/S/r/MX7C","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":149354},"main":"extensions/index.ts","type":"module","types":"src/index.ts","engines":{"node":">=22.6.0"},"gitHead":"bd8aae8233a8cb74e45ee4a0484e7664ba525240","scripts":{"test":"node --experimental-strip-types --test test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.2","@types/node":"^22.13.9","@earendil-works/pi-coding-agent":"^0.84.3"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.4.5_1787811770972_0.9227333604147356","host":"s3://npm-registry-packages-npm-production"}},"1.4.7":{"name":"pi-freeflow","version":"1.4.7","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.4.7","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"45581055cf3dbf116a39b3c0616c17b1b4b380b6","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.4.7.tgz","fileCount":17,"integrity":"sha512-ybjuMUFOjIpHV/VNVEOf2OCRMWXHM9zLHYJIMQi58ErqoqUADmIPXBEpLcdoGhrQsHDdjgDA0fGHbGW+9FaNeQ==","signatures":[{"sig":"MEUCIFhhBtvl2ZUV1m0CI46WCPUGr+nEhGWj2AHqy58xpfGDAiEA6X5xhovsUA29TnoMOBzKGBA44cviC0oKJGBa+ft6zuw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":149465},"main":"extensions/index.ts","type":"module","types":"src/index.ts","engines":{"node":">=22.6.0"},"gitHead":"b37d0e96a224bdc286dd523354782760e55923d6","scripts":{"test":"node --experimental-strip-types --test test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.2","@types/node":"^22.13.9","@earendil-works/pi-coding-agent":"^0.84.3"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.4.7_1787813068349_0.2573955012456881","host":"s3://npm-registry-packages-npm-production"}},"1.4.8":{"name":"pi-freeflow","version":"1.4.8","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.4.8","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"566aab03d45e5e91f02d892f8d61e665fa0c3929","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.4.8.tgz","fileCount":18,"integrity":"sha512-qcMFoFq/EFxpcAxIiTBQgq1q1F2C0HDlrIqJMTuGxC+2144RKXceCtA1+XQ6Yu+GMRHldzeaF4BpnwO8ICdHFA==","signatures":[{"sig":"MEUCIHvGOpaKkIi5XVBakHmYYVEdfUCC7F4LDpJnjoQHJ0CzAiEAhncStwaI27WiKszRPBxXEleWGyu4u6VbGKAGLHdhUOg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":158381},"main":"extensions/index.ts","type":"module","types":"src/index.ts","engines":{"node":">=22.6.0"},"gitHead":"e2986b4756f693c573a6ccf8f81a4507e09224d1","scripts":{"test":"node --experimental-strip-types --test test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.2","@types/node":"^22.13.9","@earendil-works/pi-coding-agent":"^0.84.3"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.4.8_1787815091743_0.9891673082651022","host":"s3://npm-registry-packages-npm-production"}},"1.4.9":{"name":"pi-freeflow","version":"1.4.9","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.4.9","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"c45fb7e1d41357c1aa918f11ce01d22b370cfc47","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.4.9.tgz","fileCount":18,"integrity":"sha512-bkCtjNBLedPRBhPFcYo6SiZ8MWSgnN/w14LkQt0qBTxpvv25lPqAhaQr/XOVW3u0NNPQ3dpbXdxUvoMvZlU9LA==","signatures":[{"sig":"MEYCIQCVmnBHz6FHXdbSChe9UbiLX2z3o5rrg4NtgKQKdcy4OwIhAIDaw5XmieeuOy9FC8+ZUIj9MT6PWdKISveNFZzsqi43","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167902},"main":"extensions/index.ts","type":"module","types":"src/index.ts","engines":{"node":">=22.6.0"},"gitHead":"efdb8d381d548b25c91a91fdcfb2f5a381c94ea2","scripts":{"test":"node --experimental-strip-types --test --test-concurrency=1 test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.2","@types/node":"^22.13.9","@earendil-works/pi-coding-agent":"^0.84.3"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.4.9_1787831489966_0.17789130333264414","host":"s3://npm-registry-packages-npm-production"}},"1.4.10":{"name":"pi-freeflow","version":"1.4.10","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.4.10","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"8a03e5aed9888663c1ecfa5b1ccf9c61690f360e","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.4.10.tgz","fileCount":18,"integrity":"sha512-HPCvJdIneVSP6+2PQjp6A1MEv/5sq6AJaOQX8YOLhh+JQnbzytbuRg5oKyTrGlzPy6SD7knSQU4665O2JU47PQ==","signatures":[{"sig":"MEUCIQCojijh/zXRiicGHEWARNRysN6Ui5Gr1vsrmybXJLlyYwIgDHGPWmu1porbJ96j6j/o5sofJUU7Le5fWFyXCnAmdTo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":169197},"main":"extensions/index.ts","type":"module","types":"src/index.ts","engines":{"node":">=22.6.0"},"gitHead":"9ecbbbbf1e585ea52409a5c3eaa5ca5994d7dc11","scripts":{"test":"node --experimental-strip-types --test --test-concurrency=1 test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.2","@types/node":"^22.13.9","@earendil-works/pi-coding-agent":"^0.84.3"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.4.10_1787834638293_0.2522622192250905","host":"s3://npm-registry-packages-npm-production"}},"1.4.11":{"name":"pi-freeflow","version":"1.4.11","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.4.11","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"9dfe20a1d17a7de0ef8dcf94a352799a572bc9ba","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.4.11.tgz","fileCount":18,"integrity":"sha512-VweqE2v/HvlV7ttSMjq6KgFB6Sl56/nZqX5x+8bLd8ULS1Q4GG5tDjjMPR9cWLHvDcJXExpdh/JMmzzC6iH5kg==","signatures":[{"sig":"MEUCIQCJHoUaIGiqyDZ7uGqM8geZArWXeiYnmIW2f9DJ7+jJUQIgPoUAQB5rOEtGLYagFKjSwO6XvBotvpIAo/+MUBeVW04=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":170192},"main":"extensions/index.ts","type":"module","types":"src/index.ts","engines":{"node":">=22.6.0"},"gitHead":"901094acf4e0c57cc56311285c82c8479f1ec204","scripts":{"test":"node --experimental-strip-types --test --test-concurrency=1 test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.2","@types/node":"^22.13.9","@earendil-works/pi-coding-agent":"^0.84.3"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.4.11_1787835707586_0.7166522597463261","host":"s3://npm-registry-packages-npm-production"}},"1.4.12":{"name":"pi-freeflow","version":"1.4.12","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.4.12","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"9d2bebcc7f6943e700581b96f1962a616c406f78","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.4.12.tgz","fileCount":18,"integrity":"sha512-Ek/CQXP3Zw5nhn6VLSmlTrgw4EObK3UWHyzn3+0a2jM2wHe8M7SwBbNKUbKJniBjYAb1FzMODJ6iwUTHlDVZyQ==","signatures":[{"sig":"MEUCIQCeadLNGNHNpQFJLotdvpc2d39riPZSUEh4A0Phx/iQYAIgfU5GvsTC8ua1doMdTG7J0t9MZl61W/SR5uENxeA8+lA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":170247},"main":"extensions/index.ts","type":"module","types":"src/index.ts","engines":{"node":">=22.6.0"},"gitHead":"8d0bec42575b8ff23796412c1fc8057c58c56d35","scripts":{"test":"node --experimental-strip-types --test --test-concurrency=1 test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","typecheck":"tsc --noEmit"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.2","@types/node":"^22.13.9","@earendil-works/pi-coding-agent":"^0.84.3"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.4.12_1787837100258_0.0366045226844951","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"pi-freeflow","version":"1.5.0","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.5.0","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"76e93f7deaa85b66b3f4b57dd1a862343291bda5","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.5.0.tgz","fileCount":19,"integrity":"sha512-raRKR5CNCQndSt28YD7hHpRfGwbAt6CBCErr8Z2zrR6bh/HcikpYD0eNX8VMnWMC3UBhLtMUlIEeAmRPCKxjog==","signatures":[{"sig":"MEYCIQCupX3LwvM/bYe5SaMWh9Qhz73hXeJY7Dcwl0SD8a9YKwIhALf8nooYFQtgaALnpageX51nG5gE6jwoK6+JQ9hZTZkz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":181734},"main":"extensions/index.ts","type":"module","types":"src/index.ts","engines":{"node":">=22.6.0"},"gitHead":"97a0221662e01df3a83142bc9233a7c60c38d1a9","scripts":{"test":"node --experimental-strip-types --test --test-concurrency=1 test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","docs:dev":"vitepress dev docs","changeset":"changeset","typecheck":"tsc --noEmit","docs:build":"vitepress build docs"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","dependencies":{"undici":"^8.10.0"},"_hasShrinkwrap":false,"devDependencies":{"vitepress":"^1.6.4","typescript":"^5.8.2","@types/node":"^22.13.9","@changesets/cli":"^2.27.0","@earendil-works/pi-coding-agent":"^0.84.3"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.5.0_1787853542503_0.19928003053615262","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"pi-freeflow","version":"1.6.0","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.6.0","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"927d670b7df62c4640c38bf1b5b5b978bb4a86be","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.6.0.tgz","fileCount":20,"integrity":"sha512-FXYEJd2CN+w5RCRgQQN//RfVGtDadBbk27hxEXuA3AUpoIv1shkasKGg1+X5I8SHTuTRwzRBlak0LDIaUBuyyw==","signatures":[{"sig":"MEUCIQDZzEfTrAnQOSdmro14l4ygF5B7bBHi0PgFpfsDL41DlQIgAKvJdbJExKjte/Ag15CMtikwtJcD5mVjb6MYr2K5knc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205182},"main":"extensions/index.ts","type":"module","types":"src/index.ts","engines":{"node":">=22.19.0"},"gitHead":"ba5feb3efd6c08a412d4c756900cfe2159d63c4c","scripts":{"test":"node --experimental-strip-types --test --test-concurrency=1 test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","docs:dev":"vitepress dev docs","changeset":"changeset","typecheck":"tsc --noEmit","docs:build":"vitepress build docs"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","dependencies":{"undici":"^8.10.0"},"_hasShrinkwrap":false,"devDependencies":{"vitepress":"^1.6.4","typescript":"^5.8.2","@types/node":"^22.13.9","@changesets/cli":"^2.27.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.6.0_1787982013515_0.31406213896394","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"pi-freeflow","version":"1.7.0","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.7.0","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"69cd27220c2abf4b65fa3324b2a819c9a24ca2be","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.7.0.tgz","fileCount":20,"integrity":"sha512-vgQD5YqZcKSiODyAlnHFCasTPlp3MDkQS0krRJrRwWa54Bfk2JttdP8sZIDHCqQ+3jQKF23H9x4oqYdrcPtJ7A==","signatures":[{"sig":"MEYCIQDQHLUFDQl07isyY/ZAdbubP89LkVleceMOKtfKN3tHBwIhAOXB7G0b2I9HtN9sc2FN7W1s+0/j/i9QRPtRIRQAyl06","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":208267},"main":"extensions/index.ts","type":"module","types":"src/index.ts","engines":{"node":">=22.19.0"},"gitHead":"06c04676261d246a7c32571951d0d925bcb8e967","scripts":{"test":"node --experimental-strip-types --test --test-concurrency=1 test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","docs:dev":"vitepress dev docs","changeset":"changeset","typecheck":"tsc --noEmit","docs:build":"vitepress build docs"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","dependencies":{"undici":"^8.10.0"},"_hasShrinkwrap":false,"devDependencies":{"vitepress":"^1.6.4","typescript":"^5.8.2","@types/node":"^22.13.9","@changesets/cli":"^2.27.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.7.0_1788032625153_0.24626586676069873","host":"s3://npm-registry-packages-npm-production"}},"1.7.1":{"name":"pi-freeflow","version":"1.7.1","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.7.1","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"0de62323b1fbc634acdc387659aac97d827606eb","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.7.1.tgz","fileCount":20,"integrity":"sha512-pXAPV2uWroV94MXE8hQdZi/7yGjAf9YXJSd8rtz0PIBbr60jDxitGGmMfsgUa//kHZxt44/0ZB1YdxIWxG3wTA==","signatures":[{"sig":"MEYCIQCwaoysS5wVnf8CxQk8GZfpWQuxBTvFUvO5r372MNpIogIhAK3IlXMZtG2b9XijO6WP6KOV7/rL/uIZU3ej5LJ++FjP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":210121},"main":"extensions/index.ts","type":"module","types":"src/index.ts","engines":{"node":">=22.19.0"},"gitHead":"e00de46a103e43a829c427c38889e99b5b01bf34","scripts":{"test":"node --experimental-strip-types --test --test-concurrency=1 test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","docs:dev":"vitepress dev docs","changeset":"changeset","typecheck":"tsc --noEmit","docs:build":"vitepress build docs"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","dependencies":{"undici":"^8.10.0"},"_hasShrinkwrap":false,"devDependencies":{"vitepress":"^1.6.4","typescript":"^5.8.2","@types/node":"^22.13.9","@changesets/cli":"^2.27.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.7.1_1788033480765_0.7135010524920824","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"pi-freeflow","version":"1.8.0","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.8.0","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"69d56214106b5bc53ce8edf65ce9093fc097c3d6","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.8.0.tgz","fileCount":20,"integrity":"sha512-kfBayOD3zROolUY275eBhgxpsQN3cXerqBqeyKrIHReZCf7QSez/wdUWlBNJxfn/kbPHn0jSwNPBeWPKUInoGQ==","signatures":[{"sig":"MEUCIChYj417Jdmi/IRsTLKgfyqyngQQqlOcmdSP8AwYHMVrAiEAh91qSIzBTuZqVBqapoTTyUHaCF/tOhoK7kQj2Ijdn6Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":211088},"main":"extensions/index.ts","type":"module","types":"src/index.ts","engines":{"node":">=22.19.0"},"gitHead":"0a7dff8ba53da9222a77afc1978e148a42c764b4","scripts":{"test":"node --experimental-strip-types --test --test-concurrency=1 test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","docs:dev":"vitepress dev docs","changeset":"changeset","typecheck":"tsc --noEmit","docs:build":"vitepress build docs"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"deprecated":"superseded by 1.8.1 (missing auto-heal)","repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","dependencies":{"undici":"^8.10.0"},"_hasShrinkwrap":false,"devDependencies":{"vitepress":"^1.6.4","typescript":"^5.8.2","@types/node":"^22.13.9","@changesets/cli":"^2.27.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.8.0_1788038687504_0.28732586682851635","host":"s3://npm-registry-packages-npm-production"}},"1.8.1":{"name":"pi-freeflow","version":"1.8.1","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.8.1","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"38911c144731d5ae2ff80dfd14a17287ae2821f6","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.8.1.tgz","fileCount":20,"integrity":"sha512-Kt7XI7+Ta0gpXQkuuDmMpTFcWMrKz8LqnZuFMxb7sFbBC6E6NEZnyXmUaJSWcSJuAFUM3QuUMkNe1SEKMEeLeQ==","signatures":[{"sig":"MEUCIQCtr1ZLZPi+ciNG+CwCdFK+sCqDNW3iTg9y0iLRJ3NjdAIgJANJBCoA2/KjmBoDPPeYMrC8SKMAnDfYu4J6gBmllhk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":218355},"main":"extensions/index.ts","type":"module","types":"src/index.ts","engines":{"node":">=22.19.0"},"gitHead":"2d3c7d8bb8c1eb6016c0f9af1c134010d2c0d0d1","scripts":{"test":"node --experimental-strip-types --test --test-concurrency=1 test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","docs:dev":"vitepress dev docs","changeset":"changeset","typecheck":"tsc --noEmit","docs:build":"vitepress build docs"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","dependencies":{"undici":"^8.10.0"},"_hasShrinkwrap":false,"devDependencies":{"vitepress":"^1.6.4","typescript":"^5.8.2","@types/node":"^22.13.9","@changesets/cli":"^2.27.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.8.1_1788040297286_0.13047547861892683","host":"s3://npm-registry-packages-npm-production"}},"1.8.2":{"name":"pi-freeflow","version":"1.8.2","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.8.2","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"b03afc3e094ef62cb260744ad445244320cadf74","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.8.2.tgz","fileCount":20,"integrity":"sha512-oV7AZPx9sBMFqVC9BSl4ZwQNLRhYHR4uUcThuFTaS87twpJdxay6rOlHhr7eMTS9vfKnu2Os9jg75ZCRLFdmNA==","signatures":[{"sig":"MEQCIBuVAPXqAc+PMjkQz4/D+gh5uRzwDwUzXlxX0RhTUTSGAiApC/EXop8HBCrQVQtpbY2MPYubBvoS0kVmG/M8/3XstA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":219856},"main":"extensions/index.ts","type":"module","types":"src/index.ts","engines":{"node":">=22.19.0"},"gitHead":"8c6b3086b5f94ca49e4f998a54451ca9d9bd073d","scripts":{"test":"node --experimental-strip-types --test --test-concurrency=1 test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","docs:dev":"vitepress dev docs","changeset":"changeset","typecheck":"tsc --noEmit","docs:build":"vitepress build docs"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","dependencies":{"undici":"^8.10.0"},"_hasShrinkwrap":false,"devDependencies":{"vitepress":"^1.6.4","typescript":"^5.8.2","@types/node":"^22.13.9","@changesets/cli":"^2.27.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.8.2_1788063359504_0.9240992119262308","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"pi-freeflow","version":"1.9.0","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.9.0","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"29af1179777e5301a083c274876f4ed4c582a7a7","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.9.0.tgz","fileCount":21,"integrity":"sha512-X3RhUl5FKeeiHXW48oBxSwULXNHnw5g9/OPog9ca+XoQx7hgU9Y8U7sUDgOZMrkkHPOQcyipVNZMBUddQyFqQg==","signatures":[{"sig":"MEUCIQCXOFasAIFf/xIy6+OdNNqOFwS613UfI5mdtLdAbCaq/QIgME+VlUvAgFHlWk44PJoLnkLxXA7Dgx+ssQ3f+Gh2rl4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":227405},"main":"extensions/index.ts","type":"module","types":"src/index.ts","engines":{"node":">=22.19.0"},"gitHead":"ad4403757f4860a92c2704ba3d89cbc275b80b76","scripts":{"test":"node --experimental-strip-types --import ./test/setup.mjs --test --test-concurrency=1 test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","docs:dev":"vitepress dev docs","changeset":"changeset","typecheck":"tsc --noEmit","docs:build":"vitepress build docs"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","dependencies":{"undici":"^8.10.0"},"_hasShrinkwrap":false,"devDependencies":{"vitepress":"^1.6.4","typescript":"^5.8.2","@types/node":"^22.13.9","@changesets/cli":"^2.27.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.9.0_1788112462854_0.3369035267709042","host":"s3://npm-registry-packages-npm-production"}},"1.9.1":{"name":"pi-freeflow","version":"1.9.1","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.9.1","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"1d33aea1f5be0f167a7fa558dd9b915453edc9bb","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.9.1.tgz","fileCount":21,"integrity":"sha512-56dU6U1K7Gwmywu/NYTbmdyJdqwq55t/zf0FSeN0r9l7WbyjyAc9JbIMSBSlD30I5y4ekkkpfn3GO2jCv8cHYA==","signatures":[{"sig":"MEQCIEBrUjzYgsPp0mBucmyf7+k2OlDJX/iPhBMsDWVq4TpqAiAvt1vWo1gPxUYlfhAURmAQH7roK6dqMsSdBRu807gGzg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":227489},"main":"extensions/index.ts","type":"module","types":"src/index.ts","engines":{"node":">=22.19.0"},"gitHead":"e5eca77773a53a19ef75e6f7ba38d2e29ac88adf","scripts":{"test":"node --experimental-strip-types --import ./test/setup.mjs --test --test-concurrency=1 test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","docs:dev":"vitepress dev docs","changeset":"changeset","typecheck":"tsc --noEmit","docs:build":"vitepress build docs"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","dependencies":{"undici":"^8.10.0"},"_hasShrinkwrap":false,"devDependencies":{"vitepress":"^1.6.4","typescript":"^5.8.2","@types/node":"^22.13.9","@changesets/cli":"^2.27.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.9.1_1788116839432_0.43578050701800475","host":"s3://npm-registry-packages-npm-production"}},"1.9.2":{"name":"pi-freeflow","version":"1.9.2","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.9.2","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"40e9fdba39d6d9ff6d0c825ceb4b5125f2aa58fa","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.9.2.tgz","fileCount":24,"integrity":"sha512-KM0eGeQMc6BjKrVhECDQVs1v0jYJfra6Yxz8BbZaubVnf6qChZEvncMIKLWr5SyTS42HlhnrBntPgrFBlKqFWg==","signatures":[{"sig":"MEUCIQDM+ogu2KlVyON+iphsCPy+Jx9PF602H100Pe4juYcHWwIgQwqE8jqm20OqR5D/U2kllpX5EXDD2gGsIRFRXx4lQsQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":242592},"main":"extensions/index.ts","type":"module","types":"src/index.ts","engines":{"node":">=22.19.0"},"gitHead":"c9d76483341c3776cee534842b727eb9a3ca8d63","scripts":{"test":"node --experimental-strip-types --import ./test/setup.mjs --test --test-concurrency=1 test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","docs:dev":"vitepress dev docs","changeset":"changeset","typecheck":"tsc --noEmit","docs:build":"vitepress build docs"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"26.5.1","dependencies":{"undici":"^8.10.0"},"_hasShrinkwrap":false,"devDependencies":{"vitepress":"^1.6.4","typescript":"^5.8.2","@types/node":"^22.13.9","@changesets/cli":"^2.27.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.9.2_1788127662258_0.4916823359136784","host":"s3://npm-registry-packages-npm-production"}},"1.9.4":{"name":"pi-freeflow","version":"1.9.4","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.9.4","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"645d810c5b1664a36fc67f7d7f8685aac2d85809","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.9.4.tgz","fileCount":24,"integrity":"sha512-V7EFxQE9nw9x/Qh7qG/1D7o9T6ShmZr+cwboOuWGCUjNPTuqBI28FFiQ9Ap7sMGjtqd/usopuMjIhdUsyU33yA==","signatures":[{"sig":"MEQCIAZeMT8+ax4dcclfhYchtXAK1zz3F5xYPL2qWTQ5qLepAiAT2Jqi2//nqlUhcbKb3PQJjhyj6rcicVjw1R4/a3QhgA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":244405},"main":"extensions/index.ts","type":"module","types":"src/index.ts","engines":{"node":">=22.19.0"},"gitHead":"1e37ea775e52dc2525e9b1639e6860c79dee8dcc","scripts":{"test":"node --experimental-strip-types --import ./test/setup.mjs --test --test-concurrency=1 test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","docs:dev":"vitepress dev docs","changeset":"changeset","typecheck":"tsc --noEmit","docs:build":"vitepress build docs"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"24.18.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"vitepress":"^1.6.4","typescript":"^5.8.2","@types/node":"^22.13.9","@changesets/cli":"^2.27.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.9.4_1788368345522_0.2993461641790578","host":"s3://npm-registry-packages-npm-production"}},"1.9.5":{"name":"pi-freeflow","version":"1.9.5","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","_id":"pi-freeflow@1.9.5","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"homepage":"https://github.com/trefeon/pi-freeflow#readme","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"pi":{"extensions":["./extensions"]},"omp":{"extensions":["./extensions"]},"dist":{"shasum":"8dc71039bd75419a7cc39a69d251275d86603253","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.9.5.tgz","fileCount":24,"integrity":"sha512-YKa1eCjNrbcGGXJXxQ9Xve2ZoA/aJrqI87BKNemrU0rwf3D93YXu7y46RNNvHwQf01hiqzcCgIfoovFpXdwx3A==","signatures":[{"sig":"MEUCICQseKGeCyFLItaqR5M0G6vVQwR5jwN5LU7J7/RwGZgwAiEAxfPn8olDbBAkObe99V3Ie73+r12r4LfR3zZxuIn5fJg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":245009},"main":"extensions/index.ts","type":"module","types":"src/index.ts","engines":{"node":">=22.19.0"},"gitHead":"d390b8288fba1b308085c1cdb12ec6200fcb3051","scripts":{"test":"node --experimental-strip-types --import ./test/setup.mjs --test --test-concurrency=1 test/**/*.test.ts","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","docs:dev":"vitepress dev docs","changeset":"changeset","typecheck":"tsc --noEmit","docs:build":"vitepress build docs"},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"repository":{"url":"git+https://github.com/trefeon/pi-freeflow.git","type":"git"},"_npmVersion":"12.0.2","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","directories":{},"_nodeVersion":"24.18.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"vitepress":"^1.6.4","typescript":"^5.8.2","@types/node":"^22.13.9","@changesets/cli":"^2.27.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-freeflow_1.9.5_1788420244036_0.6625964525007071","host":"s3://npm-registry-packages-npm-production"}},"1.9.6":{"name":"pi-freeflow","type":"module","version":"1.9.6","description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","main":"extensions/index.ts","types":"src/index.ts","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"author":{"name":"trefeon"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/trefeon/pi-freeflow.git"},"homepage":"https://github.com/trefeon/pi-freeflow#readme","engines":{"node":">=22.19.0"},"omp":{"extensions":["./extensions"]},"pi":{"extensions":["./extensions"]},"devDependencies":{"@changesets/cli":"^2.27.0","@types/node":"^22.13.9","typescript":"^5.8.2","vitepress":"^1.6.4"},"dependencies":{},"scripts":{"test":"node --experimental-strip-types --import ./test/setup.mjs --test --test-concurrency=1 test/**/*.test.ts","typecheck":"tsc --noEmit","smoke":"node --experimental-strip-types -e \"import('./extensions/index.ts').then(() => console.log('✓ Smoke test passed: extensions/index.ts loaded successfully')).catch(err => { console.error(err); process.exit(1); })\"","changeset":"changeset","docs:dev":"vitepress dev docs","docs:build":"vitepress build docs"},"_id":"pi-freeflow@1.9.6","bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"_integrity":"sha512-hq+fkW0qdsMO6Ez6bqeHiyCD+01I6yggLfri7fVq28RsAWSQE3Vn/f8msSnfZFpeifxtdIjNEEqsZKu+hsgIGw==","_resolved":"C:\\Users\\trefeon\\AppData\\Local\\Temp\\71325c2fb217808ee7a39635dbb65acc\\pi-freeflow-1.9.6.tgz","_from":"file:pi-freeflow-1.9.6.tgz","_nodeVersion":"24.18.1","_npmVersion":"12.0.2","dist":{"integrity":"sha512-hq+fkW0qdsMO6Ez6bqeHiyCD+01I6yggLfri7fVq28RsAWSQE3Vn/f8msSnfZFpeifxtdIjNEEqsZKu+hsgIGw==","shasum":"9440ee01f2b2e832c74db116d8df9e6fd3cfab1b","tarball":"https://registry.npmjs.org/pi-freeflow/-/pi-freeflow-1.9.6.tgz","fileCount":24,"unpackedSize":250190,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEskXF7itvJ17Ei2XDVnk/1ON3N4bYId+Xy6NQHJc7D9AiEA2KBvHOywXGk3sYR2MBCO3Rn9pkw6Cbs6XVmem1fjx1g="}]},"_npmUser":{"name":"trefeon","email":"trefeon@gmail.com"},"directories":{},"maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-freeflow_1.9.6_1788429294552_0.4260846822349025"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-24T19:17:15.673Z","modified":"2026-09-03T09:54:54.827Z","1.0.0":"2026-08-24T19:17:16.017Z","1.0.1":"2026-08-24T19:44:01.514Z","1.0.2":"2026-08-24T20:04:56.249Z","1.0.3":"2026-08-24T21:09:26.090Z","1.0.4":"2026-08-24T21:10:38.658Z","1.0.5":"2026-08-24T21:11:49.685Z","1.0.6":"2026-08-24T21:12:31.594Z","1.0.7":"2026-08-24T21:13:37.600Z","1.0.8":"2026-08-24T21:19:18.716Z","1.0.9":"2026-08-24T21:19:51.475Z","1.1.0":"2026-08-24T21:23:25.017Z","1.1.1":"2026-08-24T21:32:02.404Z","1.1.2":"2026-08-24T21:39:50.922Z","1.1.3":"2026-08-24T21:50:46.303Z","1.1.4":"2026-08-24T21:52:43.320Z","1.1.5":"2026-08-24T21:55:14.400Z","1.1.6":"2026-08-24T22:01:29.038Z","1.1.7":"2026-08-24T22:03:03.546Z","1.1.8":"2026-08-24T22:25:09.659Z","1.1.9":"2026-08-24T22:29:30.149Z","1.2.0":"2026-08-24T22:54:21.086Z","1.2.1":"2026-08-25T01:23:20.345Z","1.3.0":"2026-08-25T07:49:08.647Z","1.3.1":"2026-08-25T07:52:46.797Z","1.3.3":"2026-08-25T09:20:28.978Z","1.3.6":"2026-08-25T11:42:52.938Z","1.3.7":"2026-08-25T17:31:04.190Z","1.3.8":"2026-08-25T20:00:44.536Z","1.3.9":"2026-08-25T20:19:41.634Z","1.4.0":"2026-08-25T20:23:11.331Z","1.4.1":"2026-08-26T07:10:44.352Z","1.4.2":"2026-08-26T09:40:21.783Z","1.4.3":"2026-08-26T16:26:26.141Z","1.4.4":"2026-08-27T06:12:09.390Z","1.4.5":"2026-08-27T06:22:51.110Z","1.4.7":"2026-08-27T06:44:28.493Z","1.4.8":"2026-08-27T07:18:11.893Z","1.4.9":"2026-08-27T11:51:30.114Z","1.4.10":"2026-08-27T12:43:58.430Z","1.4.11":"2026-08-27T13:01:47.774Z","1.4.12":"2026-08-27T13:25:00.434Z","1.5.0":"2026-08-27T17:59:02.640Z","1.6.0":"2026-08-29T05:40:13.661Z","1.7.0":"2026-08-29T19:43:45.290Z","1.7.1":"2026-08-29T19:58:00.901Z","1.8.0":"2026-08-29T21:24:47.639Z","1.8.1":"2026-08-29T21:51:37.443Z","1.8.2":"2026-08-30T04:15:59.641Z","1.9.0":"2026-08-30T17:54:22.981Z","1.9.1":"2026-08-30T19:07:19.583Z","1.9.2":"2026-08-30T22:07:42.422Z","1.9.4":"2026-09-02T16:59:05.672Z","1.9.5":"2026-09-03T07:24:04.268Z","1.9.6":"2026-09-03T09:54:54.695Z"},"bugs":{"url":"https://github.com/trefeon/pi-freeflow/issues"},"author":{"name":"trefeon"},"license":"MIT","homepage":"https://github.com/trefeon/pi-freeflow#readme","keywords":["pi-package","pi-extension","oh-my-pi","omp","free-models","opencode","kilocode","ai-models","relay"],"repository":{"type":"git","url":"git+https://github.com/trefeon/pi-freeflow.git"},"description":"Thin provider for OMP/Pi — model list + dumb relay proxy + log; host pi-ai owns thinking/normalization","maintainers":[{"name":"trefeon","email":"trefeon@gmail.com"}],"readme":"# pi-freeflow 🌊\r\n\r\n> **26 free models. Up to 1M context. Zero API keys. Infinite scale via your own relay pool.**\r\n\r\nThin by design: model list + dumb relay + log. Host `pi-ai` owns thinking, normalization & provider magic. We just make it free, fast, and unbreakable.\r\n\r\n[![npm version](https://img.shields.io/npm/v/pi-freeflow?style=flat-square&color=00E5FF)](https://www.npmjs.com/package/pi-freeflow)\r\n[![npm downloads](https://img.shields.io/npm/dm/pi-freeflow?style=flat-square)](https://www.npmjs.com/package/pi-freeflow)\r\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](https://opensource.org/licenses/MIT)\r\n[![Pi](https://img.shields.io/badge/Powered%20by-Pi-7c3aed?style=flat-square)](https://github.com/badlogic/pi-ai)\r\n[![Oh My Pi](https://img.shields.io/badge/Compatible-OMP-black?style=flat-square)](https://github.com/coder/oh-my-pi)\r\n\r\nJoin devs bypassing rate limits with their own relay pools. BYO, add as many as you need.\r\n\r\n---\r\n\r\n### Features at a Glance\r\n\r\n| Feature | Description | Value | Cost |\r\n| :--- | :--- | :--- | :--- |\r\n| **26 Curated Free Models** | 8 OpenCode Zen + 18 KiloCode Gateway models, up to 1M context & 512K output | Ceiling Unlocked | **$0** |\r\n| **BYO Relay Pool** | Round-robin load balancing across your Cloudflare Workers & Vercel Edges | Zero Rate Limits | **$0** (your free tiers) |\r\n| **Adaptive Health & Error Detection** | Auto-cooldown on 429 rate limits, 504 timeouts, and socket drops | 0ms Wasted Latency | **$0** |\r\n| **Stream Truncation Resilience** | Stateful SSE terminal tracking (`response.failed` / `response.incomplete` injection) | Zero Host Crashes | **$0** |\r\n| **Smart Model Aliasing** | Clean slash-free & colon-free CLI model names compatible with thinking selectors | DX Optimized | **$0** |\r\n| **Auto-Enabled on Session** | Relay stays enabled in `auto` mode on session start and model switch | Zero Friction | **$0** |\r\n| **Interactive CLI Management** | 10+ `/freeflow` subcommands (`status`, `list`, `use`, `add`, `label`, `remove`, `deploy`, `logs`, `debug`) | Full Control | **$0** |\r\n| **Dumb Proxy That Never Breaks** | `127.0.0.1:28180`, host-normalized, pathname-guarded `/v1/models` | 100% Uptime | **$0** |\r\n| **Observable Real Logs** | `~/.pi/agent/pi-freeflow.log`, 10MB auto-rotation, real-time debug toggle | Observable | **$0** |\r\n\r\nPhilosophy: **Thin by design.** We only ship model list + relay proxy + log. Host owns thinking & normalization.\r\n\r\n---\r\n\r\n### 26 Curated Models, One Command\r\n\r\n```bash\r\n/model → freeflow → pick\r\n```\r\n\r\n#### OpenCode Zen (8 Models), Responses & Chat API\r\nOptimized for deep reasoning, long-horizon coding & autonomous agentic workflows.\r\n\r\n| Model ID | Creator / Lab | Context | Max Output | Thinking | Vision |\r\n| :--- | :--- | :--- | :--- | :--- | :--- |\r\n| `muse-spark-1.2-contributor-free` | Meta Superintelligence Labs | **1M** (1.048.576) | **131K** (131.072) | `minimal … xhigh` | ✅ |\r\n| `muse-spark-1.3-contributor-free` | Meta Superintelligence Labs | **1M** (1.048.576) | **131K** (131.072) | `minimal … xhigh` | ✅ |\r\n| `mimo-v2.5-free` | Xiaomi MiMo | **1M** (1.048.576) | **131K** (131.072) | `minimal … xhigh`\\* | ✅ |\r\n| `laguna-s-2.1-free` | Poolside | **262K** (262.144) | **32K** (32.768) | `minimal … xhigh` | ❌ |\r\n| `nemotron-3.5-lightning-free` | NVIDIA | **1M** (1.000.000) | **262K** (262.144) | `minimal … xhigh` | ❌ |\r\n| `nemotron-3-ultra-free` | NVIDIA | **1M** (1.000.000) | **128K** (128.000) | `minimal … xhigh` | ❌ |\r\n| `big-pickle` | Big Pickle | **200K** (200.000) | **32K** (32.000) | `high / max` | ❌ |\r\n| `ling-3.0-flash-fin-free` | Inclusion AI | **262K** (262.144) | **131K** (131.072) | `minimal … xhigh` | ❌ |\r\n\r\n#### KiloCode Gateway (18 Models), OpenRouter Compatible\r\nKeyless access with `Bearer kilo-free`. Clean slash-free and colon-free CLI aliases supported.\r\n\r\n| Model ID | Creator / Lab | Context | Max Output | Thinking | Vision |\r\n| :--- | :--- | :--- | :--- | :--- | :--- |\r\n| `dots-3-note-preview` (`dots-studio/...:free`) | Dots Studio | **512K** (512.000) | **512K** (512.000) | `minimal…xhigh`\\* | ✅ |\r\n| `step-3.7-flash` (`stepfun/...:free`) | StepFun | **262K** (262.144) | **262K** (262.144) | `minimal…xhigh`\\* | ✅ |\r\n| `nemotron-3-nano-omni` (`nvidia/...:free`) | NVIDIA | **256K** (256.000) | **131K** (131.072) | `minimal…xhigh`\\* | ✅ |\r\n| `nemotron-3-ultra-550b` (`nvidia/...:free`) | NVIDIA | **1M** (1.000.000) | **128K** (128.000) | `minimal…xhigh`\\* | ❌ |\r\n| `nvidia/nemotron-3.5-lightning:free` | NVIDIA | **1M** (1.000.000) | **262K** (262.144) | `minimal…xhigh`\\* | ❌ |\r\n| `nemotron-3-super` (`nvidia/...:free`) | NVIDIA | **262K** (262.144) | **262K** (262.144) | `minimal…xhigh`\\* | ❌ |\r\n| `north-mini-code` (`cohere/...:free`) | Cohere | **256K** (256.000) | **64K** (64.000) | `minimal…xhigh`\\* | ❌ |\r\n| `laguna-s-2.1:free` (`poolside/...:free`) | Poolside | **262K** (262.144) | **32K** (32.768) | `minimal…xhigh`\\* | ❌ |\r\n| `laguna-xs-2.1:free` (`poolside/...:free`) | Poolside | **262K** (262.144) | **32K** (32.768) | `minimal…xhigh`\\* | ❌ |\r\n| `lfm-2.5` (`liquid/lfm-2.5-2.6b:free`) | Liquid AI | **65K** (65.536) | **32K** (32.768) | `minimal…xhigh`\\* | ❌ |\r\n| `kilo-auto` (`kilo-auto/free`) | Kilo Gateway Auto | **256K** (256.000) | **10K** (10.000) | `minimal…xhigh`\\* | ❌ |\r\n| `openrouter` (`openrouter/free`) | OpenRouter Free | **200K** (200.000) | **65K** (65.536) | `minimal…xhigh`\\* | ✅ |\r\n| `content-safety` (`nvidia/...:free`) | NVIDIA | **128K** (128.000) | **8K** (8.192) | ❌ *(non-thinking)* | ✅ |\r\n| `minimax-m2.7` (`minimax/minimax-m2.7:free`) | MiniMax | **196K** (196.608) | **196K** (196.608) | `minimal…xhigh`\\* | ❌ |\r\n| `minimax-m3` (`minimax/minimax-m3:free`) | MiniMax | **1M** (1.048.576) | **512K** (524.288) | `minimal…xhigh`\\* | ❌ |\r\n| `ling-3.0-flash-fin` (`inclusionai/ling-3.0-flash-fin:free`) | Inclusion AI | **262K** (262.144) | **32K** (32.768) | `minimal…xhigh`\\* | ❌ |\r\n| `inkling` (`thinkingmachines/inkling:free`) | Thinking Machines | **1M** (1.048.576) | **262K** (262.144) | `minimal…xhigh`\\* | ✅ |\r\n| `inkling-small` (`thinkingmachines/inkling-small:free`) | Thinking Machines | **1M** (1.048.576) | **262K** (262.144) | `minimal…xhigh`\\* | ✅ |\r\n\r\n\\* Levels are forwarded as-is through the OpenRouter-style nested `reasoning` parameter; effort mapping is decided by each model. MiMo collapses `minimal→low` and `xhigh→high` upstream, so its selector shows 5 labels but only 3 distinct effort values.\r\n\r\n---\r\n\r\n### How It Works: BYO Relays, Zero Rate Limits\r\n\r\n```\r\nYou → 127.0.0.1:28180 (dumb proxy, host-normalized) → x-relay-target → N egress IPs (your pool) → opencode.ai / api.kilo.ai\r\n                                     ↑ host already normalized thinking → proxy just forwards\r\n```\r\n\r\n1. **Per-Request Round-Robin**: 10 parallel subagents hit N different egress IPs (your pool size). No thundering herd.\r\n2. **Adaptive Health & Error Cooldown**: Relays hitting 429, 504, or socket disconnects enter temporary cooldown (30-90s) and automatically move behind healthy candidates. Healthy relays handle traffic with 0ms wasted delay.\r\n3. **Seamless 429 Roll**: `429 / 408 / 502 / 503 / 504 / 520-530` → instant roll to next relay, never 429 to agent.\r\n4. **Stream Truncation Resilience**: Stateful SSE terminal tracking prevents fatal unhandled stream closed errors when connections drop.\r\n5. **Direct Fallback Safety Net**: If all relays in the pool are exhausted, transparent direct fetch to upstream.\r\n6. **Zero Subagent Connect Errors**: 24h `DISK_CACHE_ONLY` model catalog avoids subagents hammering remote catalogs.\r\n\r\nYou bring the relays (free tiers). We bring the rolling.\r\n\r\n---\r\n\r\n### Interactive Commands Reference (`/freeflow`)\r\n\r\nManage your relay pool directly from the OMP / Pi terminal:\r\n\r\n```bash\r\n/freeflow status                  # View active relay, pool status, and candidates\r\n/freeflow list                    # List all relays with real-time health badges (✓ / ⚠️ [cooling])\r\n/freeflow use <url|index|label>   # Switch active relay\r\n/freeflow url <url>               # Set the active relay URL directly\r\n/freeflow add <url> [label]       # Add new relay to the pool\r\n/freeflow label <index|url> <name># Assign a friendly label to a relay\r\n/freeflow remove <index|url|label># Remove a relay from the pool\r\n/freeflow test <index|url|label>  # Probe a relay for reachability (HTTP 200 + latency)\r\n/freeflow on | off | auto         # Toggle relay mode (auto = enabled for freeflow)\r\n/freeflow deploy <platform>       # Guided relay deploy: vercel|cloudflare|deno — token in-memory, auto-adds (Vercel 1M/mo recommended)\r\n/freeflow logs [lines]            # Inspect recent proxy logs\r\n/freeflow trace [req-id]          # Tail logs filtered by request correlation ID\r\n/freeflow refresh                 # Reload the model catalog from live upstreams\r\n/freeflow update                  # Check for and install a package update\r\n/freeflow debug on | off          # Toggle full HTTP lifecycle debug logging\r\n/freeflow kill                    # Stop the shared proxy daemon now (restarts on next use)\r\n```\r\n\r\n---\r\n\r\n### Quick Start in 30 Seconds\r\n\r\n**On Oh My Pi (OMP):**\r\n```bash\r\nomp plugin install pi-freeflow\r\n# or local dev (repo checkout)\r\nomp plugin link /path/to/pi-freeflow\r\n```\r\n\r\n**On Pi:**\r\n```bash\r\npi install npm:pi-freeflow\r\n```\r\n\r\n> Both commands fetch the **same npm package** from the registry — pi-freeflow\r\n> is an extension loaded by the host, not a standalone CLI. It works on **OMP\r\n> and Pi only** (they share the extension API).\r\n\r\n#### 2. Pick a Model\r\n\r\n**OMP — interactive:**\r\n```bash\r\nomp\r\n/model → freeflow → muse-spark-1.2-contributor-free (1M) → max\r\n```\r\n\r\n**OMP — one-shot CLI:**\r\n```bash\r\nomp -p --model freeflow/muse-spark-1.2-contributor-free \"build me a SaaS\"\r\nomp -p --model freeflow/step-3.7-flash:high \"solve this bug\"   # alias + thinking level\r\n```\r\n\r\n**Pi — interactive:**\r\n```bash\r\npi\r\n/model → freeflow → pick\r\n```\r\n\r\n**Pi — one-shot CLI:**\r\n```bash\r\npi -p --model freeflow/step-3.7-flash:high \"solve this bug\"\r\n```\r\n\r\n> Model IDs accept a full canonical ID, a short alias (see the tables above),\r\n> and an optional `:effort` suffix (`:minimal` … `:xhigh`, `:max` where\r\n> supported). The host resolves the rest — you only type `freeflow/<name>`.\r\n\r\n#### 3. Manage Your Relay Pool (OMP & Pi both)\r\n\r\n```bash\r\n/freeflow status     # active relay, pool status, candidates\r\n/freeflow list       # relays with health badges\r\n/freeflow add <url> [label]\r\n/freeflow deploy     # guided deploy: vercel|cloudflare|deno\r\n/freeflow logs [n]   # tail proxy logs\r\n```\r\n\r\nThese slash commands work **identically in OMP and Pi** — the extension\r\nregisters the same `/freeflow` command set in both hosts.\r\n#### 4. Add Your Free Relays (Scale Infinitely)\r\n\r\nDefault ships direct. Add relays via `/freeflow add <url> [label]`.\r\n\r\n**Zero setup?** Run `/freeflow deploy cloudflare` (or `deno`, `vercel`), paste your platform token once, and the relay is created and activated for you. Manual snippets below.\r\n\r\n**Option A: Cloudflare Workers (100k req/day, no 25s timeout) — Auto Deploy**\r\n```bash\r\n/freeflow deploy cloudflare  # prompts token in-memory, auto-adds to pool\r\n```\r\n*Manual fallback:* `dash.cloudflare.com` → Workers → Create → Deploy → Edit code → paste the canonical worker source (see \"Canonical worker source\" below) → Deploy → `/freeflow add https://your.workers.dev cf-worker-1`\r\n\r\n**Option B: Vercel Edge Relay (1M req/mo) — Auto Deploy**\r\n```bash\r\n/freeflow deploy vercel  # prompts token in-memory, auto-adds to pool\r\n# or shorthand: /freeflow deploy\r\n```\r\n*Manual fallback:* Push 2 files (`api/relay.js` + `vercel.json`) to GitHub $\\to$ Import on `vercel.com` $\\to$ `/freeflow add https://your.vercel.app vercel-relay-1`\r\n\r\nFor `api/relay.js`, use the canonical worker source (see below); `vercel.json` stays:\r\n\r\n```json\r\n{ \"rewrites\": [{ \"source\": \"/(.*)\", \"destination\": \"/api/relay\" }] }\r\n```\r\n\r\n**Option C: Deno Deploy (100k req/day) — Auto Deploy**\r\n```bash\r\n/freeflow deploy deno  # prompts token in-memory, auto-adds to pool\r\n```\r\n*Manual fallback:* `dash.deno.com` → New Project → Playground → paste the canonical worker source (see below) → Deploy → `/freeflow add https://your-project.deno.dev deno-relay-1`\r\n\r\n**Canonical worker source (all platforms)**\r\n\r\nThe relay worker template is generated per deployment by `/freeflow deploy` and lives in [`src/deploy.ts`](src/deploy.ts): one hardened core plus thin Vercel / Cloudflare / Deno wrappers. Every deployment embeds its own shared secret and enforces the target allowlist (`https://opencode.ai`, `https://api.kilo.ai`), SSRF/private-host guard, relay-path validation, and a header denylist — `x-relay-auth` is checked by the worker and never forwarded upstream.\r\n\r\n```js\r\n// Minimal Cloudflare illustration. Prefer /freeflow deploy: the generated\r\n// worker (src/deploy.ts) is the signed/hardened source for all three\r\n// platforms. This example omits the SSRF guard, path validation, and auth.\r\nconst ALLOWED_TARGETS = [\"https://opencode.ai\", \"https://api.kilo.ai\"];\r\nexport default {\r\n  async fetch(req) {\r\n    const target = req.headers.get(\"x-relay-target\");\r\n    const relayPath = req.headers.get(\"x-relay-path\") || \"/\";\r\n    if (!target || !ALLOWED_TARGETS.includes(target.replace(/\\/$/, \"\"))) {\r\n      return new Response(JSON.stringify({ error: \"Forbidden target\" }), { status: 403 });\r\n    }\r\n    const headers = new Headers(req.headers);\r\n    headers.delete(\"x-relay-target\"); headers.delete(\"x-relay-path\"); headers.delete(\"host\");\r\n    return fetch(target.replace(/\\/$/, \"\") + relayPath, { method: req.method, headers, body: req.method !== \"GET\" && req.method !== \"HEAD\" ? req.body : undefined });\r\n  },\r\n};\r\n```\r\n\r\n**Verify your pool:**\r\n```bash\r\n/freeflow status        # relay-A 1/N (ON) → candidates:N\r\n/freeflow list          # lists all relays with health status\r\n/freeflow logs          # tail -25\r\ncat ~/.pi/agent/pi-freeflow.log | tail -n 20\r\n```\r\n\r\n---\r\n\r\n### Logs & Debugging\r\n\r\n```bash\r\n/freeflow logs\r\ncat ~/.pi/agent/pi-freeflow.log | tail -n 50\r\n\r\n# debug toggle\r\n/freeflow debug on\r\n```\r\n\r\nLog rotation at 10MB. Clean, parseable, real-time HTTP lifecycle tracking.\r\n\r\n---\r\n\r\n### Design\r\n\r\nThis package stays thin. It ships three things: a model catalog, a relay proxy, and a log. There is no build step. Zero runtime dependencies — uses native Node.js global fetch. Thinking and prompt normalization stay with the host (`pi-ai`).\r\n\r\nCurrent size: about 11.3k lines including tests. The full suite (sandboxed, mocked network) and typecheck pass before every release — see CHANGELOG.md.\r\n\r\n---\r\n\r\n### FAQ\r\n\r\n**Do I need API keys?**\r\nNo. Kilo uses `Bearer kilo-free`, OpenCode free models are anonymous (no header needed).\r\n\r\n**What if all relays are 429?**\r\nProxy tries direct. If that is also 429, Pi shows the rate limit. That number is the global upstream cap; without relays you would hit the same wall.\r\n\r\n**Can I use without relays?**\r\nYes. `/freeflow off` → direct. Add relays later to scale.\r\n\r\n**What happens when I update to a new version?**\r\nThe local proxy daemon is shared across sessions on port 28180. On upgrade, the new extension\r\ndetects a stale daemon (mismatched internal version) and replaces it automatically — no manual\r\nkill, no restart of other sessions required. Replacement only happens when the running daemon is\r\nidle: sessions with in-flight requests are never interrupted (busy or newer daemons are reused\r\nwith a log note instead). If a daemon cannot be replaced (e.g. port held by an unrelated process),\r\nit falls back to reusing it with a warning. To disable replacement entirely, set the no-kill env\r\nto `1` before starting a session.\r\n\r\n**What happens when I close a session?**\r\nNothing visible to your other sessions. The proxy daemon is a separate background\r\nprocess shared by every OMP/Pi session on the machine. Closing one session just\r\nunregisters it; the daemon keeps serving the rest and retires itself automatically\r\nonce the last client disconnects and it has been idle for a short grace period.\r\nTo stop it manually, run `/freeflow kill` — the next freeflow use starts it again.\r\n\r\n**Where's the normalizer?**\r\nDeleted in 1.3.0. If zai/qwen/deepseek thinking broke before, it's fixed now because host handles it.\r\n\r\n**Why is context free?**\r\nWe use OpenCode Zen & Kilo free tiers. You pay only with your own Cloudflare/Vercel free tiers for egress.\r\n**Why is it installed via npm?**\r\nThe npm package is the **distribution channel** only — both hosts resolve it internally:\r\n`omp plugin install pi-freeflow` and `pi install npm:pi-freeflow` install the same\r\npackage from the npm registry. pi-freeflow is an **extension, not a standalone CLI** —\r\nthe host (OMP or Pi) loads and runs it. A plain `npm install` just downloads the\r\nfiles; it is not a supported way to run the extension.\r\n\r\n**Which hosts can use it?**\r\nOh My Pi (OMP) and Pi only. They share the same extension API\r\n(`extensions/index.ts` declares both `omp` and `pi` extension entries), so one\r\npackage serves both. Other AI agents (OpenCode, KiloCode, Cursor, ...) have their\r\nown plugin systems and do not load this extension.\r\n\r\n---\r\n\r\n### Contributing\r\n\r\nContributions welcome — bug fixes, new relay platforms, model additions, docs improvements.\r\n\r\n#### Prerequisites\r\n\r\n- **Node.js ≥ 22.19.0** (uses `--experimental-strip-types`, no build step)\r\n- **pnpm** (package manager)\r\n\r\n#### Setup & Verify\r\n\r\n```bash\r\ngit clone https://github.com/trefeon/pi-freeflow\r\ncd pi-freeflow\r\npnpm install\r\n\r\n# run all three before opening a PR\r\npnpm test        # full suite; sandboxed + network-mocked\r\npnpm typecheck   # tsc --noEmit, must pass clean\r\npnpm smoke       # verifies extensions/index.ts loads without crashing\r\n```\r\n\r\n#### Project Structure\r\n\r\n```\r\nsrc/\r\n├── index.ts          # extension entry, lifecycle hooks\r\n├── models.ts         # 26-model catalog definitions\r\n├── catalog.ts        # model catalog cache (24h disk)\r\n├── proxy.ts          # local proxy server (127.0.0.1:28180)\r\n├── relay.ts          # relay selection & round-robin\r\n├── relay-state.ts    # relay pool state, health tracking\r\n├── rate-limiter.ts   # in-memory sliding rate limiter (200/day, 200/hour)\r\n├── stream-pipe.ts    # SSE stream piping & truncation resilience\r\n├── commands.ts       # /freeflow CLI subcommands\r\n├── deploy.ts         # guided relay deploy (vercel/cloudflare/deno)\r\n├── config.ts         # constants, whitelists, paths, and runtime settings\r\n├── logger.ts         # file logger with 10MB rotation\r\n└── types.ts          # shared type definitions\r\nextensions/\r\n└── index.ts          # OMP/Pi extension manifest\r\ntest/\r\n└── *.test.ts         # mirrors src/, node:test runner\r\n```\r\n\r\n#### Guidelines\r\n\r\n- **Stay thin.** Zero runtime dependencies, no build step. If it belongs in the host (`pi-ai`), don't add it here.\r\n- **Test what you touch.** Every `src/*.ts` has a matching `test/*.test.ts`. Add or update tests for your change.\r\n- **Keep model IDs clean.** Slash-free, colon-free aliases for CLI compatibility. See existing patterns in `models.ts`.\r\n- **One concern per PR.** Bug fix? One PR. New relay platform? Separate PR. Easier to review, faster to merge.\r\n\r\n#### Reporting Issues\r\n\r\nFound a bug or want a feature? [Open an issue](https://github.com/trefeon/pi-freeflow/issues) with:\r\n- What happened vs what you expected\r\n- Your relay setup (`/freeflow status` output helps)\r\n- Relevant logs (`/freeflow logs` or `~/.pi/agent/pi-freeflow.log`)\r\n\r\n---\r\n\r\n### License\r\n\r\nMIT © trefeon\r\n\r\n","readmeFilename":"README.md"}