{"_id":"@tenchi4u/pi-bifrost","_rev":"39-98173d71d338cc188ec5fe2c27780264","name":"@tenchi4u/pi-bifrost","dist-tags":{"latest":"4.14.1"},"versions":{"0.1.11":{"name":"@tenchi4u/pi-bifrost","version":"0.1.11","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/mooreceipts","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@0.1.11","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://mooreceipts.github.io/pi-bifrost/","bugs":{"url":"https://github.com/mooreceipts/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"4cdf305b4e1f91395b3e36d74f737eb816933c53","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-0.1.11.tgz","fileCount":47,"integrity":"sha512-HqJc5sJuFG3V9FvMoLZUbN0+wfBdjIBhma+pw/ILo6rrq5Oau7X4BllHHiC7swu0jWNYGNXPWg2ukEupY4v6jw==","signatures":[{"sig":"MEQCIDYmCGj4yadPBYh+5UMnqhYZ6/CLCRAfguU35hi5i20LAiBjiIjofSSP8UtUQrf9fz8qIhuleuRDIbzH+0h4w0Zd6w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":242359},"type":"module","gitHead":"d411caedd6bfd9577cc2b50d5f4c7aaf2e0dbe8e","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/mooreceipts/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_0.1.11_1786409606070_0.3895928274637037","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@tenchi4u/pi-bifrost","version":"0.1.12","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/mooreceipts","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@0.1.12","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://mooreceipts.github.io/pi-bifrost/","bugs":{"url":"https://github.com/mooreceipts/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"4324f0b65d229f8e9f6fca4a0bfeec5ba71a9286","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-0.1.12.tgz","fileCount":47,"integrity":"sha512-i+A0uTfJavCD1dpmo2HywFpQHoq8W+WTxgQAEc+tmb6mbVa1fuxzM5OwABrKEGJsoZobKuKQw2SnJuUUyxhp6g==","signatures":[{"sig":"MEUCIE+8S6ZwGvzg6ibPm/r77ShBZc3lGlYYvVR7gi4HhA6gAiEA+7AqLeRh72/4yXPVTjeTpAKR+qFnUu7PcQ0K1J0qTTs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":243413},"type":"module","gitHead":"8151e2c04402a5dfba359110ab2d1f34a6980ccf","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/mooreceipts/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_0.1.12_1786410100874_0.3040610946853195","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"@tenchi4u/pi-bifrost","version":"0.1.13","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/mooreceipts","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@0.1.13","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://mooreceipts.github.io/pi-bifrost/","bugs":{"url":"https://github.com/mooreceipts/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"7880e1f11f4c34c3ace51eebfd56dace8f5f4796","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-0.1.13.tgz","fileCount":47,"integrity":"sha512-sBnS8SFdXIrqYcQz0YtJyml4W+vs2hVuKnt/HMmS5l5sowqlCJkRCqlP+B4G6V9Tbbn5z4UvYgTchmpE1M2ovQ==","signatures":[{"sig":"MEUCIC9Ln0ZbWDmeSnhl+EWELoCWlIBRkszZOpWRubcPLHGFAiEAzzjBTKYW4/0vrILXrNYW1pd0it0GxlpgycKFjAjs9FA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":245091},"type":"module","gitHead":"28701a98989099bfc974f90bb0d6a31aee46573d","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/mooreceipts/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_0.1.13_1786410615134_0.4378849751794134","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"@tenchi4u/pi-bifrost","version":"0.1.14","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/mooreceipts","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@0.1.14","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://mooreceipts.github.io/pi-bifrost/","bugs":{"url":"https://github.com/mooreceipts/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"cfa408c00bdd51d9dc68ce667c16ff121c4d0f51","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-0.1.14.tgz","fileCount":48,"integrity":"sha512-tYopnB3JCsK1NhyC2Lkq0JiDVFJh55ITKmIqeHvWHCJgbAoDJcusD6raV1ccPA2EDlnx+OpttIvoZXzs5wBe8w==","signatures":[{"sig":"MEUCIC6V22eK6ijJ/BiBYW5LAuw2ZVcMb9cH/NsA2R5aVZ1TAiEAtph9kuhicfoXNScntTIpgM6xmiuKh+Yr/ns63+Talbc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":254186},"type":"module","gitHead":"25a7280f88f1bebdc7e98fb2f18b048fd48a1333","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/mooreceipts/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_0.1.14_1786416694457_0.570059953866078","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@tenchi4u/pi-bifrost","version":"0.2.0","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/mooreceipts","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@0.2.0","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://mooreceipts.github.io/pi-bifrost/","bugs":{"url":"https://github.com/mooreceipts/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"feb9ee6c6a625ada24ba30262c1fdc1aaa8c1122","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-0.2.0.tgz","fileCount":48,"integrity":"sha512-QuGmCOriCFyzSDwg73rQ1uoT5eC/beS5iti/hCEKNId7kUWHwm2II3n6J+pomo2jYs1x3DDZookykgKpcSYujA==","signatures":[{"sig":"MEUCIB8oY0IlctHp01mNmV3Y+PoHuHtceDqX5Q/9pNsWpbzqAiEA8xNh9U7henyTl7a35RuIS7M33dm2b35ufshu/tIBUeM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":257853},"type":"module","gitHead":"29218494beb32895faa6ee4219c348e55686891f","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/mooreceipts/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_0.2.0_1786484587366_0.924742735820971","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@tenchi4u/pi-bifrost","version":"0.3.0","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/mooreceipts","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@0.3.0","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://mooreceipts.github.io/pi-bifrost/","bugs":{"url":"https://github.com/mooreceipts/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"b90ff515599a2ba79c754af362cf10864d95c447","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-0.3.0.tgz","fileCount":51,"integrity":"sha512-gEb5Ge/m4DALc7WUNi1Fvba/MeNeicc5M2+it+JpIgreNsd84JNNzcRaKULIjxnKGoKPvlYEqO8pPIg2T2ml7Q==","signatures":[{"sig":"MEYCIQCkd4ouELzak/zxfgb/eG87MdgjCg1TJgXrxHyuLa+b1gIhAPdUrXNycJFrbDWg3x5HICUbj3t0RnAtmNYHvUjpfyCX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":278047},"type":"module","gitHead":"7a836e22410a06d802207de03bb0015ca8e28cba","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/mooreceipts/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_0.3.0_1786490766513_0.20895319194378148","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@tenchi4u/pi-bifrost","version":"0.3.2","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/mooreceipts","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@0.3.2","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://mooreceipts.github.io/pi-bifrost/","bugs":{"url":"https://github.com/mooreceipts/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"d5b34fa9aef147faaf878bcdce209b582abbf90f","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-0.3.2.tgz","fileCount":51,"integrity":"sha512-Re+0yLxE8rujtuqgkIjBpIDuDSo7zA5taSrI0PVdIFZaGbg9ZTq3EQ9cYesFZjwfIdoclaYWpR9uzorA8XTWtg==","signatures":[{"sig":"MEQCIEVMTs1wfpj0bCITx6zzaKBp2npYVKHyCTCCkOuaf+zRAiBnofLdgt4wMcLeSsU0UD/cGSaOvhkqYmBooLqsj2Y3TQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":278472},"type":"module","gitHead":"bdb7c0b4c2b55d0aa2ded059ec7df02da1419ed0","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/mooreceipts/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_0.3.2_1786494816157_0.7160176545556212","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@tenchi4u/pi-bifrost","version":"0.3.3","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/mooreceipts","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@0.3.3","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://mooreceipts.github.io/pi-bifrost/","bugs":{"url":"https://github.com/mooreceipts/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"6341cdd0502f3d769ed79c98bb33145413db9fc2","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-0.3.3.tgz","fileCount":51,"integrity":"sha512-T5WimvMmvPv74aCnTHrhmZNvWMUStOCYnxNZCcFT2jKBWTFjN1rr7Sla2YBqb/YA6vUYyfoMraEbLkWBNo5WUQ==","signatures":[{"sig":"MEYCIQCRYX02W7pjEkX+IVl1eQQ6BjWjZHuTfAAATDbmFj/8SAIhALKi5f5ctOjm3v1GH8cjGqzUFhsf8CzQ8jsqkrLRBEDs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":278821},"type":"module","gitHead":"9151a4d334d414c09f20bdfc684a913ca9735df7","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/mooreceipts/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_0.3.3_1786496402259_0.6276407304726201","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"@tenchi4u/pi-bifrost","version":"4.0.0","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/mooreceipts","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@4.0.0","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://mooreceipts.github.io/pi-bifrost/","bugs":{"url":"https://github.com/mooreceipts/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"efa66d76baa42f7c5079daeb6fa5de76477c04b9","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-4.0.0.tgz","fileCount":52,"integrity":"sha512-AQJaYg51eAU6YDwAz3hCiBdJU+nqhfYlQ+akqhut8qNYbgqsRKz1zvFvClKDWMj9Uqzs1xT1xFu21oGj6Gah/Q==","signatures":[{"sig":"MEQCIGPZ19OOw18wo/bVP15ztFw+/lzbM6IOPBR1TUKCeC1gAiBJpftu5Ca5zz7hngU5HOjmf70EAkAG4GWM0KH70d6ojw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":294893},"type":"module","gitHead":"515187e6ba4807d1ebd89f9af0b7b8490b3ce65e","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/mooreceipts/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_4.0.0_1786587444044_0.9012640818008237","host":"s3://npm-registry-packages-npm-production"}},"4.0.1":{"name":"@tenchi4u/pi-bifrost","version":"4.0.1","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/mooreceipts","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@4.0.1","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://mooreceipts.github.io/pi-bifrost/","bugs":{"url":"https://github.com/mooreceipts/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"18e026ead9c3325192fd0fc3b7a46434ff9151fe","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-4.0.1.tgz","fileCount":52,"integrity":"sha512-qqcgxzbOhJV6B3yAlcfYVT867aNle20eAkgs7IvhWPbb5B2yfwHptpBLc5rQr2/cAYlZQQKRG5tkHKwzi8Lx8Q==","signatures":[{"sig":"MEYCIQDeS4CbXBVLuJLyTsTQomeB8KuYTcmuZFc89AwkdqOT9QIhAKTYPVLELZR9Jz9gkhBK8V5nS6vS1pskCItwMWZxEjM2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":295235},"type":"module","gitHead":"2e24ac621e2b04c4927fb7cb0f8b0a29eb0bcb1b","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/mooreceipts/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_4.0.1_1786588129669_0.7958729857348865","host":"s3://npm-registry-packages-npm-production"}},"4.0.3":{"name":"@tenchi4u/pi-bifrost","version":"4.0.3","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/mooreceipts","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@4.0.3","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://mooreceipts.github.io/pi-bifrost/","bugs":{"url":"https://github.com/mooreceipts/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"4352abcc9d2bd1ed9448fca041a37daede8e789a","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-4.0.3.tgz","fileCount":53,"integrity":"sha512-DOIEu7WhR4jCiO3wIrUtON1GwH3r1CBxNnF8DmuSv/26RLzPw+QxcyhjwSYaMERVnWiWLDUOiWx21REngj/68Q==","signatures":[{"sig":"MEYCIQDcySxiqwyNSCXbFw52S1/htIEczZ9H5IOQbb73VJukUwIhANRRowmghf8WxH09bha106JogzC+QeJI6iZDzU5PbMTI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":296726},"type":"module","gitHead":"1b5c41b5abba05ecf46787b4a895804670b8adec","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/mooreceipts/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_4.0.3_1786589975868_0.5231046548250753","host":"s3://npm-registry-packages-npm-production"}},"4.0.4":{"name":"@tenchi4u/pi-bifrost","version":"4.0.4","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/mooreceipts","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@4.0.4","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://mooreceipts.github.io/pi-bifrost/","bugs":{"url":"https://github.com/mooreceipts/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"340908def29a610587eaa4709b3133ec3e7e42d2","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-4.0.4.tgz","fileCount":53,"integrity":"sha512-WrJOFHccVzAMiEhhsbVyXgDsPf+xYL1sHaXUhpXTpOEaDeHZNnclbSeKhKwVq6OirqE0LTsDKZDjUG5kyDfd9w==","signatures":[{"sig":"MEUCIQC72Z9caHDDuRVn3CBPtoSB8DWAnpbHMRuOO/bbI0IqXwIgVvgX65kXXTSL9J+JxYDj0J9ObLaRSbrofqgHi+JnRbY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":296800},"type":"module","gitHead":"2c3033648f468bd633e19510bdea6a4c9596e123","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/mooreceipts/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_4.0.4_1786591760937_0.9643131488348937","host":"s3://npm-registry-packages-npm-production"}},"4.0.5":{"name":"@tenchi4u/pi-bifrost","version":"4.0.5","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/mooreceipts","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@4.0.5","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://mooreceipts.github.io/pi-bifrost/","bugs":{"url":"https://github.com/mooreceipts/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"efc1f8ff481f4a77b10ee69d8d39d9d65a527917","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-4.0.5.tgz","fileCount":53,"integrity":"sha512-sWWUONnzaegXjVXzQsqQZXB+kfGFLXUWYUlbA0PRrEh6vuGLTYUiyuCF5peFG12rUQqlkRymYSib89sNlbn0tg==","signatures":[{"sig":"MEQCIHuAMcH+M9EjCQsQ+782YpEUaLSrb49sx0Bz6RPoeeCcAiB4+ZfhXYsvkl9kd65d+sjXzKCVN1U1g5u5LrDtq9DFNQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299274},"type":"module","gitHead":"31fea0d87f903976b3e5dce314af999e201b5554","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/mooreceipts/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_4.0.5_1786592963829_0.14761196734642978","host":"s3://npm-registry-packages-npm-production"}},"4.0.6":{"name":"@tenchi4u/pi-bifrost","version":"4.0.6","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/mooreceipts","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@4.0.6","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://mooreceipts.github.io/pi-bifrost/","bugs":{"url":"https://github.com/mooreceipts/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"2052db517da6c05e90092a892f7ddc736f051f3c","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-4.0.6.tgz","fileCount":53,"integrity":"sha512-uw//Xqt0aOPgmBhWvxBdrVnv3MxjB6CVBFPylCeVklZZ/xnHipqCCo/70ClrTvDSXQu7oIUT/uIawRx2qM1fjA==","signatures":[{"sig":"MEYCIQDmgsvoUdxbDYEeHlk9wn4E1CB77np44q205ebFLWm4vQIhANpjTUlh32JoU/hRuWdJ/gTqyNLHinwXyNGVCzVU5WzG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299954},"type":"module","gitHead":"31fea0d87f903976b3e5dce314af999e201b5554","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/mooreceipts/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_4.0.6_1786674574791_0.7526563324323086","host":"s3://npm-registry-packages-npm-production"}},"4.0.7":{"name":"@tenchi4u/pi-bifrost","version":"4.0.7","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/mooreceipts","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@4.0.7","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://mooreceipts.github.io/pi-bifrost/","bugs":{"url":"https://github.com/mooreceipts/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"2bab546faacd1638f5fc827d1ee67592770c7da2","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-4.0.7.tgz","fileCount":53,"integrity":"sha512-J0GYq3gtOGu40WPcyto9KrNaSK6GfPNEJLZG8UblUOJSXcwX/o9d5Ij88aR4psA9fm+S9V3i+MwicmvW3LhqDA==","signatures":[{"sig":"MEQCIA9x63QfWs+4lpbL/ItcvfWtNdSLBi4IwuNnwfNna0sXAiBgNZQetOjSP5qhMZzyfCB6OK2wWmf3k18xbvtMqUYL/Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":304477},"type":"module","gitHead":"09ec082397b88156047d1a4f1cb45ef145cafa5a","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/mooreceipts/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_4.0.7_1786754870521_0.26456391321740624","host":"s3://npm-registry-packages-npm-production"}},"4.0.9":{"name":"@tenchi4u/pi-bifrost","version":"4.0.9","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/mooreceipts","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@4.0.9","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://mooreceipts.github.io/pi-bifrost/","bugs":{"url":"https://github.com/mooreceipts/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"e4040a8b7bf92e6dc45c56b260154eb108bb3829","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-4.0.9.tgz","fileCount":53,"integrity":"sha512-tRglE7kgZf73g3oMFGt1owdMFvCKtUE+HgWld6O39Vo5pztcdsl9kJQ6ldN0/xB6pw6i5RGdeZRftBinEdrMrQ==","signatures":[{"sig":"MEUCIQCsbMtdOh6uAxuqqHvKSQgqSPi7EUoGwAcX5aVfijzuRgIgKehNXO0XzmEyUTtrtucAzoO4FYQTCNE7p0WbT1ABzYE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":312868},"type":"module","gitHead":"bae862ab755296e8e30eb3033a6b5c7006b020b1","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/mooreceipts/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_4.0.9_1786758480890_0.4040972040508042","host":"s3://npm-registry-packages-npm-production"}},"4.0.11":{"name":"@tenchi4u/pi-bifrost","version":"4.0.11","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/mooreceipts","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@4.0.11","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://mooreceipts.github.io/pi-bifrost/","bugs":{"url":"https://github.com/mooreceipts/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"585c6aaf87722bb97cfe6138490287d8110cf21e","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-4.0.11.tgz","fileCount":53,"integrity":"sha512-LAlLemL3Mp/g/8GA5A/UBqQNU7EBZ5cyTRfdwnFeKoKVyteF3SreS3VPdwog1OZtFkup5Gz56bgVJjB3lZUhUQ==","signatures":[{"sig":"MEYCIQDvir2HGU5YAazu9pCx44hT7esB/kN9FUXUaJEF9ETdeQIhAP2C77HsTfb5FXaupZ26srMJg9q845cIhQ08nRmY41Aa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":305346},"type":"module","gitHead":"5ee7d6416d06e18962e7ad4c08c30d01f61d3158","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/mooreceipts/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_4.0.11_1786766867233_0.9406195662203869","host":"s3://npm-registry-packages-npm-production"}},"4.0.12":{"name":"@tenchi4u/pi-bifrost","version":"4.0.12","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/mooreceipts","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@4.0.12","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://mooreceipts.github.io/pi-bifrost/","bugs":{"url":"https://github.com/mooreceipts/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"4fe2bff35790449aca78beb14b8d39a90686c3e3","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-4.0.12.tgz","fileCount":53,"integrity":"sha512-o5qm8W+L0j72CeGEtifONmOBlDOfDZl8iikIA7OoBqd1wSWUtfxdMCJi63jGlgm6tT8g21MdV1NHlByVURPtDw==","signatures":[{"sig":"MEUCIQCsfyaAU2DRVUpk0OlDbnbGe/KnTY7+C6+N/oOzLP3clwIgYAoQ4FSQr6b8ksZnLEA22Kixuo8mGkp+DSrB72/5Uiw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":305276},"type":"module","gitHead":"ff327712b0a411915a4f75c73fe084abd4ea2fe8","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/mooreceipts/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_4.0.12_1786769490741_0.4057375263451444","host":"s3://npm-registry-packages-npm-production"}},"4.1.1":{"name":"@tenchi4u/pi-bifrost","version":"4.1.1","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/the-matt-moo","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@4.1.1","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://the-matt-moo.github.io/pi-bifrost/","bugs":{"url":"https://github.com/the-matt-moo/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"ad13cb9932c79aedba4f7d5c5562f11113aa118a","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-4.1.1.tgz","fileCount":53,"integrity":"sha512-hSPGr1Iyk+j4KPafB56wHfh2Dzvz3S7OgXDO4G/hew43lDPgXsbzt9M2US9tnoyNx4joco7CzxT2Q5nHlVS7xA==","signatures":[{"sig":"MEQCIGAbzDgUA5FCAtcJynGeqeiNzOUp8UglWGgaZu5zO20sAiBVC/4eJZO+2FFgthr6HhZdydsKC4dx6uhZF+iZ4ivIRg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":310316},"type":"module","gitHead":"dd9054c75855293149601c49c94230750acb5a7e","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/the-matt-moo/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_4.1.1_1786847304819_0.4512180148905389","host":"s3://npm-registry-packages-npm-production"}},"4.1.2":{"name":"@tenchi4u/pi-bifrost","version":"4.1.2","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/the-matt-moo","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@4.1.2","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://the-matt-moo.github.io/pi-bifrost/","bugs":{"url":"https://github.com/the-matt-moo/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"7dc7ef073165b6c8c320aec9ba38cab4567c352f","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-4.1.2.tgz","fileCount":116,"integrity":"sha512-0Fz4iW1pzqbJNi7GSW5SfCDrmyvEECeZKlTAmcR1UsmLFCmcImhFoLm/J/dKB7u6VvLN2A3fVjCczPnFB65gyw==","signatures":[{"sig":"MEQCIDFhlUrpS7CGKblCLgN53AgVb9wumiWAiqEcoqFcXWaUAiB/g0kw2DeA539mX193GnRftO6KMkkFrC6TiWfnIAr+pw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2642995},"type":"module","gitHead":"50def2c1a798e687e3a9695e8da9e3115edccf19","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/the-matt-moo/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_4.1.2_1786919619848_0.43837612102641743","host":"s3://npm-registry-packages-npm-production"}},"4.1.6":{"name":"@tenchi4u/pi-bifrost","version":"4.1.6","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/the-matt-moo","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@4.1.6","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://the-matt-moo.github.io/pi-bifrost/","bugs":{"url":"https://github.com/the-matt-moo/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"c4fa6732bee56c56d118efcae6459bef62f746ee","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-4.1.6.tgz","fileCount":116,"integrity":"sha512-NA1xyD5QvhCrr98YFaU7p4hv8YgXHBeXa79xWJhsh44G3Vcp1uGmskJc4eTmyyQ1uNcPdPT+kEZ3VkhDurdDHA==","signatures":[{"sig":"MEUCIQC8qUUVxBdKjKmTOd0gNa+w+qOQuCADN/ANauhRV8qQ/wIgUa3pD9AxkyB+ERz8tQGQk/AvtAmtT5SE9JA9de7OgEM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2648138},"type":"module","gitHead":"230e23b7a5190a9ecb4b1b32113cb7f354501017","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/the-matt-moo/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_4.1.6_1787022731380_0.49303748858610796","host":"s3://npm-registry-packages-npm-production"}},"4.1.7":{"name":"@tenchi4u/pi-bifrost","version":"4.1.7","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/the-matt-moo","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@4.1.7","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://the-matt-moo.github.io/pi-bifrost/","bugs":{"url":"https://github.com/the-matt-moo/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"01544a7575608acd962342b8adfe0527718e2c92","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-4.1.7.tgz","fileCount":116,"integrity":"sha512-5itx8eZBhd8rOmOKRvu3QRRE5/vlaWOBtKJyAfoxPjh6QcpbD4jYO70soKVuoL7BrMnYaAaBscpgmOD8pKHHlw==","signatures":[{"sig":"MEYCIQCuI0m+fUAl0EvS3EVPgaxf2vs8x4iX+LQLtuyFH5W5IQIhAI8OzSKWPffWtOPjsnqsJpuRZFkNVDWyKAzHasglSywt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2649336},"type":"module","gitHead":"7b918456612aa5f7bc2346b6c8693977d394c04a","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/the-matt-moo/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_4.1.7_1787025245610_0.4000318739197972","host":"s3://npm-registry-packages-npm-production"}},"4.1.8":{"name":"@tenchi4u/pi-bifrost","version":"4.1.8","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/the-matt-moo","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@4.1.8","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://the-matt-moo.github.io/pi-bifrost/","bugs":{"url":"https://github.com/the-matt-moo/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"2269adb53c1b4bd3e19608af19afdbe7a7cc73ba","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-4.1.8.tgz","fileCount":116,"integrity":"sha512-zTqxJYd5kE3C0b/Yf96Zq73ngHCMHcdYJARnGLzpvmtj2Osug1pbSNkQjq2xdqIKOZY1gQBjyMUvbbLwuBv39w==","signatures":[{"sig":"MEUCIQDh3TNhY9ckGb3NH18sjQyDOZgGKL4G9nnrROapPbj8QQIgVKnlvURYGvBBak1uTtIrXL15M8F7xVZzbKQFTKrJUzQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2649798},"type":"module","gitHead":"46d95cb5d7712c1e1316f0cc9f6c27f2fa720de8","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/the-matt-moo/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_4.1.8_1787105610138_0.06556364492498257","host":"s3://npm-registry-packages-npm-production"}},"4.2.0":{"name":"@tenchi4u/pi-bifrost","version":"4.2.0","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/the-matt-moo","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@4.2.0","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://the-matt-moo.github.io/pi-bifrost/","bugs":{"url":"https://github.com/the-matt-moo/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"7f9a6fd5e82835f13a799895c7d3ec483fa29ecc","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-4.2.0.tgz","fileCount":116,"integrity":"sha512-cq1PhL0dr8XNnXx+Wv8hwuYxZhEGdBGNWL3BCyeqxfYi1HMbo6nih5i562mwgD3PZaJGMW0UPX7mDb2sW72JOg==","signatures":[{"sig":"MEUCIBigxZg494medBOKAhUkSkztSsgohqZcg+JYlFtAyouvAiEA5+25uvwCfbqEN5ozaFlLD2s3wrl8B1DGJxqiwDoQb6U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2656369},"type":"module","gitHead":"9b5e31cdf45b3669608efa19dfa9960781de94b8","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/the-matt-moo/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_4.2.0_1787408218584_0.6722537965928281","host":"s3://npm-registry-packages-npm-production"}},"4.2.1":{"name":"@tenchi4u/pi-bifrost","version":"4.2.1","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/the-matt-moo","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@4.2.1","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://the-matt-moo.github.io/pi-bifrost/","bugs":{"url":"https://github.com/the-matt-moo/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"f18e688f6f8176d4e90a0d359d88d6d2e744328c","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-4.2.1.tgz","fileCount":116,"integrity":"sha512-XNKxX3D1yvVyBvazLMulbsxtvQbgs8KpnNf1E/ql+9431DhuzhLsJEUdG8JJMLRVv2Wyayug+Eq0EQliwLexVA==","signatures":[{"sig":"MEYCIQDffPH8AEr60F2eKVE7x/GqZ6EnHxemfF4xBduztEZY5AIhAL4i4zHnfhb/Yz5Ebjgcng/uBXc57dp61S4oOhISeK/t","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2660726},"type":"module","gitHead":"2147d4fe3fac5cc2c567774bffeaa5b9b17b8799","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/the-matt-moo/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_4.2.1_1787456739446_0.09519244571705765","host":"s3://npm-registry-packages-npm-production"}},"4.2.2":{"name":"@tenchi4u/pi-bifrost","version":"4.2.2","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/the-matt-moo","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@4.2.2","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://the-matt-moo.github.io/pi-bifrost/","bugs":{"url":"https://github.com/the-matt-moo/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"30207f8f103bf8ecbc14e4b4b4410a514ce484bf","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-4.2.2.tgz","fileCount":116,"integrity":"sha512-2O0Aan91z4FEEyQQb67h5JmHeAg6/+elr4RpX/P0Cscy3ugYGMToka/6jvdZeIH+cdzhD9VpzJG456QtzEcMmw==","signatures":[{"sig":"MEQCIAQjCcCftuqEYKZ6OzhBr2HphHgjqThMNCTUMT5Cf2OdAiAVOqVLvU+ICtYiK598eK2UgH9EDVy5J6R2HzXwySHaXQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2659634},"type":"module","gitHead":"e63a14ac3ea0646729058a9b0d4c58def130a14f","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/the-matt-moo/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_4.2.2_1787514516328_0.9673171581363538","host":"s3://npm-registry-packages-npm-production"}},"4.2.3":{"name":"@tenchi4u/pi-bifrost","version":"4.2.3","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/the-matt-moo","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@4.2.3","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://the-matt-moo.github.io/pi-bifrost/","bugs":{"url":"https://github.com/the-matt-moo/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"abfbc5c67aca29649cdb5d6cbb059c898b00a7ee","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-4.2.3.tgz","fileCount":116,"integrity":"sha512-jBURSUz3dq/CcOp4ecclCwtopW2s+Ybm9lnzW3Bp3z5PHR7b/cfGnAiems348JIyypk1q3os8jtJ7wu5VU/jTw==","signatures":[{"sig":"MEUCIEaCYSwEdcaiAZqgZzrK8ZZ3XyjCs5DnBiFHHfbChubzAiEAtzyBnCvTOhGEcgXKyA4Q1zYJuq690kcUS1oxPXTDS50=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2660410},"type":"module","gitHead":"6a345436bc890ff352084b9dd7d90492f966a9e6","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/the-matt-moo/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_4.2.3_1787516682914_0.7600286614416796","host":"s3://npm-registry-packages-npm-production"}},"4.3.0":{"name":"@tenchi4u/pi-bifrost","version":"4.3.0","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/the-matt-moo","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@4.3.0","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://the-matt-moo.github.io/pi-bifrost/","bugs":{"url":"https://github.com/the-matt-moo/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"e7db56c490d88f63dc7c19877899952dc51d844d","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-4.3.0.tgz","fileCount":116,"integrity":"sha512-dcSGV6Ov4HC9iTyU4g1ZRA70GzoX6R5E1xK/F+O8HicHGf64b/7AEgYjumqybqYsVgsl5OD3MPTQRF36fZdGyA==","signatures":[{"sig":"MEUCIQC7ovD8Ox0V9ea32H1E+/64+eLVR8+Fs9y+MAnZcXAzZQIgS9yTXyVHACMaj/gZK2uDJBwO/YUwwcUzjb3N63cIjAQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2662133},"type":"module","gitHead":"3a32b5017c737bb76db4b7a1f63ced8811d5c8d7","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/the-matt-moo/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_4.3.0_1787535294475_0.8972921167667822","host":"s3://npm-registry-packages-npm-production"}},"4.3.2":{"name":"@tenchi4u/pi-bifrost","version":"4.3.2","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/the-matt-moo","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@4.3.2","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://the-matt-moo.github.io/pi-bifrost/","bugs":{"url":"https://github.com/the-matt-moo/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"02c4c99a69c73e6fd5cec94b0cdbc72bd6f4ec69","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-4.3.2.tgz","fileCount":116,"integrity":"sha512-8HaLQTXrmiRB+OhLzo7q5Z/rV7f4bgpUMaB2bRrjHPLJh71uKN62OqMYDeRE1BTWoL0+N7t4DAmfr0j0hftstQ==","signatures":[{"sig":"MEUCIEnNl7uSJEipR+PArul5vayKfTtLcDIIuAI2wjyiUPXWAiEAit0TZzeQaKj/cIOxETy1+G8p/5AsYViOXHg9Iq7vSic=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2663167},"type":"module","gitHead":"91ca7132593d860d3df51d2888b35befb5c8130a","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/the-matt-moo/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_4.3.2_1787796534518_0.6865261400302578","host":"s3://npm-registry-packages-npm-production"}},"4.4.0":{"name":"@tenchi4u/pi-bifrost","version":"4.4.0","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/the-matt-moo","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@4.4.0","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://the-matt-moo.github.io/pi-bifrost/","bugs":{"url":"https://github.com/the-matt-moo/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"aeb15b521463b5d63556681cdfe2ea572fa74bd0","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-4.4.0.tgz","fileCount":116,"integrity":"sha512-Q0nQrYnx9kNqO/tcaC5IwXtEg6cFQP9EgHTDgbPDmF40gsgQOPfz9XWvmIuMC8E6oIsa8g8q3/mNBeUzeglGvw==","signatures":[{"sig":"MEUCIQCknUryqhoMTCwZjz7T47WjWpdCs7rSUTAkk3wUdqbkXwIgKHNlp0O2YKal1X8KCA1KvVuIWObuTcfzQv27OYhyOeI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2683218},"type":"module","gitHead":"6fa0620bfc1e9dd914bf9fd4cf817d0c19c58da8","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/the-matt-moo/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_4.4.0_1787951204304_0.29139342241289246","host":"s3://npm-registry-packages-npm-production"}},"4.4.1":{"name":"@tenchi4u/pi-bifrost","version":"4.4.1","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/the-matt-moo","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@4.4.1","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://the-matt-moo.github.io/pi-bifrost/","bugs":{"url":"https://github.com/the-matt-moo/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"5e26c177f369f017960dd53b94962528bf0896f5","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-4.4.1.tgz","fileCount":113,"integrity":"sha512-U/ORiapRgKPShwXOdBIPrbchPin0EB72hzRn4R1qC3naokwL7lXO2vB/wwhBlqCAE/xz85RJZ3WpL08TRe/Wow==","signatures":[{"sig":"MEYCIQCHwa5kuiPoxVVzNUVHyJGr2R0o/fWNI+fjiRqvMmRfJgIhAKFfauNGoNJpCC3JCxx25/+A58w/k+SBb76USOX3/i/S","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2679297},"type":"module","gitHead":"d74c1f9768dffbbe63220de7939de762dfd908da","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/the-matt-moo/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_4.4.1_1787951726725_0.11875729946957225","host":"s3://npm-registry-packages-npm-production"}},"4.5.21":{"name":"@tenchi4u/pi-bifrost","version":"4.5.21","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/the-matt-moo","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@4.5.21","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://the-matt-moo.github.io/pi-bifrost/","bugs":{"url":"https://github.com/the-matt-moo/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.80.8"},"dist":{"shasum":"9d76a4a6300a73a434c5dba1d1ed009c6a53c7fe","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-4.5.21.tgz","fileCount":116,"integrity":"sha512-2v3/MiOk7ARSm8qQmMxya+JtXMysaVMNJ8Fpa9Tr5JIu4OfkBoYcJN5UsD2svTLgQoLUuNMI1MxdQXOStvVttg==","signatures":[{"sig":"MEQCIBpSxL1OOx7O9vGUkWndwsNsY96gAJ2K5YZk4+uvemdVAiBYkOm3BJ8AJNmAuNTdIRxJwAIR0Uy8sKOr14Ophm+Vrg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2860585},"type":"module","gitHead":"2fc6132e4115ef888c22e39977c1e30e55fc2c97","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/the-matt-moo/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_4.5.21_1788622204778_0.014807990190007558","host":"s3://npm-registry-packages-npm-production"}},"4.14.0":{"name":"@tenchi4u/pi-bifrost","version":"4.14.0","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"author":{"url":"https://github.com/the-matt-moo","name":"Matt"},"license":"MIT","_id":"@tenchi4u/pi-bifrost@4.14.0","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"homepage":"https://the-matt-moo.github.io/pi-bifrost/","bugs":{"url":"https://github.com/the-matt-moo/pi-bifrost/issues"},"pi":{"extensions":["./index.ts"],"minPiVersion":"0.86.0"},"dist":{"shasum":"a9cc4de4621ea71d9620c6c9f6bfc70f3c233131","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-4.14.0.tgz","fileCount":54,"integrity":"sha512-u9j/4jcFygY3ruuYPuCs05xU5ajU5xbiu5pORHldT4aDf9IuceKrVaQTbYGifXZF1bkUCK2YbjowGbeHO1GGZg==","signatures":[{"sig":"MEUCIAnUT2NFTwd0JAa2/R5vxCIEwmPJK+BHouac+LW1C0KwAiEA87ak7iIkpyvy1LZ4gKtFL8Zl8rB7059ibsvZcs7Van8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFwdBpxJjt5kUaPeergWhkMJ96fatt0s38MOW9GTeF0fAiAPWc4ztIDXrPDMgSXJZZ8lWzI3ZiKo9H+ym3NDxF50RA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":471493},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"d6beb29ae2adbc456ed5a95263c0f2e8703b7efe","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"repository":{"url":"git+https://github.com/the-matt-moo/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1","@earendil-works/pi-ai":"0.87.0","@earendil-works/pi-coding-agent":"0.87.0"},"peerDependencies":{"@earendil-works/pi-ai":">=0.86.0","@earendil-works/pi-coding-agent":">=0.86.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-bifrost_4.14.0_1790816034083_0.3202079885387208","host":"s3://npm-registry-packages-npm-production"}},"4.14.1":{"pi":{"extensions":["./index.ts"],"minPiVersion":"1.0.0"},"_id":"@tenchi4u/pi-bifrost@4.14.1","bugs":{"url":"https://github.com/the-matt-moo/pi-bifrost/issues"},"dist":{"shasum":"d3d64bfa148993219c21c9ee3d98364671cb874d","tarball":"https://registry.npmjs.org/@tenchi4u/pi-bifrost/-/pi-bifrost-4.14.1.tgz","fileCount":54,"integrity":"sha512-gJmg9ZYBORQm40dBXB6qZ0nB53QftS5nEusvRiVjMVlFukUxuvFk+jdNbDTI+GXBBURLK03zAk3zO9bZHbxWQA==","signatures":[{"sig":"MEUCIQCmSb/wwJOl8JI6b3mFCs0LqwS1ShCdwtnzomcMtemu4gIgW38k60Xi1hEc8bMUEutfv/6ZMWf8wcNScrXfwpsQ9F8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIG6qpmeSYeLe/1H01czIz4SBcM3UiCfJPFRaAzMYPd4lAiEAofUDcpYILW6cEREUdTfk63pGlnQ0f1li/6s4tUwhMX0="}],"unpackedSize":471621},"name":"@tenchi4u/pi-bifrost","type":"module","author":{"url":"https://github.com/the-matt-moo","name":"Matt"},"engines":{"node":">=22.19.0"},"gitHead":"e01ec897d89042ee4c14425d5fc33140f7b0d63a","license":"MIT","scripts":{"lint":"tsc --noEmit","test":"node --test --experimental-strip-types \"tests/*.test.ts\" \"tests/*.test.mjs\"","release":"node --experimental-strip-types scripts/release.mjs","test:ui":"python3 scripts/ui-smoke.py","typecheck":"tsc --noEmit","test:integration":"node --test --experimental-strip-types tests/integration/integration.test.mjs","test:ui:agent-tui":"bash scripts/ui-smoke-agent-tui.sh","test:ui:reliability":"bash scripts/ui-reliability-fake-provider.sh"},"version":"4.14.1","_npmUser":{"name":"tenchi4u","email":"mooreceipts@gmail.com"},"homepage":"https://the-matt-moo.github.io/pi-bifrost/","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"repository":{"url":"git+https://github.com/the-matt-moo/pi-bifrost.git","type":"git"},"_npmVersion":"11.16.0","description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","directories":{},"maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.7.0","agent-tui":"^1.1.0","typescript":"^5.9.3","@types/node":"^26.1.1","@earendil-works/pi-ai":"1.0.0","@earendil-works/pi-coding-agent":"1.0.0"},"peerDependencies":{"@earendil-works/pi-ai":"^1.0.0","@earendil-works/pi-coding-agent":"^1.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-bifrost_4.14.1_1790896566027_0.626706173619767"}}},"time":{"created":"2026-08-11T00:53:25.941Z","modified":"2026-10-01T23:16:06.296Z","0.3.13":"2026-08-10T03:15:26.821Z","0.1.1":"2026-08-10T03:16:41.366Z","0.3.14":"2026-08-10T03:51:52.996Z","0.3.15":"2026-08-10T03:56:25.347Z","0.1.11":"2026-08-11T00:53:26.230Z","0.1.12":"2026-08-11T01:01:41.044Z","0.1.13":"2026-08-11T01:10:15.318Z","0.1.14":"2026-08-11T02:51:34.611Z","0.2.0":"2026-08-11T21:43:07.515Z","0.3.0":"2026-08-11T23:26:06.660Z","0.3.2":"2026-08-12T00:33:36.304Z","0.3.3":"2026-08-12T01:00:02.436Z","4.0.0":"2026-08-13T02:17:24.201Z","4.0.1":"2026-08-13T02:28:49.810Z","4.0.3":"2026-08-13T02:59:36.024Z","4.0.4":"2026-08-13T03:29:21.102Z","4.0.5":"2026-08-13T03:49:23.986Z","4.0.6":"2026-08-14T02:29:34.945Z","4.0.7":"2026-08-15T00:47:50.667Z","4.0.9":"2026-08-15T01:48:01.045Z","4.0.11":"2026-08-15T04:07:47.387Z","4.0.12":"2026-08-15T04:51:30.876Z","4.1.1":"2026-08-16T02:28:24.980Z","4.1.2":"2026-08-16T22:33:40.001Z","4.1.6":"2026-08-18T03:12:11.531Z","4.1.7":"2026-08-18T03:54:05.774Z","4.1.8":"2026-08-19T02:13:30.285Z","4.2.0":"2026-08-22T14:16:58.717Z","4.2.1":"2026-08-23T03:45:39.586Z","4.2.2":"2026-08-23T19:48:36.473Z","4.2.3":"2026-08-23T20:24:43.067Z","4.3.0":"2026-08-24T01:34:54.642Z","4.3.2":"2026-08-27T02:08:54.751Z","4.4.0":"2026-08-28T21:06:44.519Z","4.4.1":"2026-08-28T21:15:26.866Z","4.5.21":"2026-09-05T15:30:04.982Z","4.14.0":"2026-10-01T00:53:54.166Z","4.14.1":"2026-10-01T23:16:06.162Z"},"bugs":{"url":"https://github.com/the-matt-moo/pi-bifrost/issues"},"author":{"url":"https://github.com/the-matt-moo","name":"Matt"},"license":"MIT","homepage":"https://the-matt-moo.github.io/pi-bifrost/","keywords":["pi-package","pi-extension","model-router","model-routing","developer-tools","llm","ai","coding-agent"],"repository":{"url":"git+https://github.com/the-matt-moo/pi-bifrost.git","type":"git"},"description":"Query-aware model routing extension for Pi. Select models by task complexity, cost, context, speed, or configured order.","maintainers":[{"name":"tenchi4u","email":"mooreceipts@gmail.com"}],"readme":"# Pi-Bifrost\r\n\r\n![Pi-Bifrost social card](docs/social-card.png)\r\n\r\nNative model routing for [Pi](https://pi.dev). Before generation starts, Bifrost switches Pi's active model based on prompt complexity, routing rules, or LLM classification.\r\n\r\n```text\r\n\"summarize this file\"                  → quick model\r\n\"implement the login endpoint\"         → coding model\r\n\"design the auth system architecture\"  → frontier model\r\n```\r\n\r\n## Disclaimer\r\n\r\nThis repository exists for **learning and personal use**. It is shared publicly for posterity and community benefit. There are **no guarantees or warranties**, express or implied, regarding fitness for any particular purpose, reliability, or correctness. **Caveat emptor** — use at your own risk.\r\n\r\nThis is not an official product. It may break, drift from upstream, or stop working without notice.\r\n\r\n## Attribution\r\n\r\nPi-Bifrost is a fork and continuation of [Pi-Bifrost](https://github.com/iamaamir/pi-bifrost), originally created by [Aamir (`@iamaamir`)](https://github.com/iamaamir). Core architecture, routing foundation, reliability/circuit-breaker design, command interface, tests, documentation, and project identity remain credited to that project and author.\r\n\r\nSee [NOTICE.md](NOTICE.md) and [CHANGELOG.md](CHANGELOG.md) for full attribution and change history.\r\n\r\n## What This Fork Adds\r\n\r\n| Area | Original | This fork |\r\n|------|----------|-----------|\r\n| Model selection strategy | `first`, `cheapest`, `random`, `largest_context` | Adds `subscription_balance` (10% tolerance) and `subscription_preferred` (subscription > free > unknown > paid-credit); opted-in categories balance weekly allowances within 10% of each other |\r\n| Credit spend policy | All candidates equally eligible | Both `subscription_balance` and `subscription_preferred` partition candidates by billing class: subscription models with usable weekly quota are always tried first via weighted random; paid-credit (OpenRouter) models are only reached when every subscription candidate is drained below `reservePercent` or absent |\r\n| Model discovery | Probes all Pi models | Adds `--scoped` (Pi enabled-models only, always included when requested regardless of discovery errors) and `--free` (top 5 OpenRouter free models by collection ranking, or top 5 fastest if ranking fetch fails) flags for `init` and `update`; `update --free` enforces the same cap |\r\n| Candidate scoping | Full registry | Classifier model lookup and tier inference filter candidates to Pi's scoped-model selection when active, gracefully falling back to all registry models in unscoped and subagent sessions |\r\n| Image prompts | Routed like text-only prompts | Prefers vision-capable models; if the selected tier cannot take images, Bifrost falls back to higher tiers with image support |\r\n| Pin quota safety | Manual pin remains until explicitly removed | A pinned model that returns a 429 or rate-limit error is auto-unpinned immediately so the next prompt routes to a healthy model; quota-exhausted models are also unpinned proactively before the request; classified switches auto-pin to prevent context-loss churn |\r\n| Reliability | Threshold-based circuit breaker | Any final runtime provider error immediately opens that model's circuit (including `ResourceExhausted`, `MALFORMED_FUNCTION_CALL`, 502/503/504, and overload errors); parses explicit wait times into exact cooldowns, tracks account-level limits across providers, and auto-retries across alternative tier providers |\r\n| Stale-registry warnings | Warning shown on stale host registry | A strict-tier \"no healthy model\" warning is re-checked after a single registry refresh before being shown; the warning appears only when the tier is genuinely unavailable due to circuits or quota exhaustion |\r\n| Config reconciliation | `init` only | Adds `/bifrost update --scoped/--free` to preview and merge discovery results while preserving manual entries |\r\n| Silent mode | Not available | `/bifrost silence` / `unsilence` suppresses console and UI output without disabling routing |\r\n| Error diagnostics | Raw stderr dumps | Structured error messages with corrective actions; `/bifrost doctor` validates config against live registry |\r\n| Classification pipeline | 4-stage waterfall (cache→LLM→regex→default) | 7-stage adaptive pipeline: regex pre-check → cache → session momentum → complexity heuristic → parallel LLM+regex → default |\r\n| Classifier accuracy | Tier names only in LLM prompt | Auto-generated tier descriptions from regex rules injected into classifier prompt |\r\n| Multi-turn routing | Each prompt classified independently | Session momentum: 2+ same-tier classifications carry forward; topic-change detection resets momentum |\r\n| Routing latency | Sequential: cache miss → LLM → regex | Stale-while-revalidate registry updates, bounded classifier attempts, failure cooldowns, indexed cache lookup, and complexity short-circuits keep prompt routing off slow maintenance paths |\r\n| Classifier confidence | Tier-only LLM output | `classifier.confidenceThreshold` requires an explicit score and rejects missing/low-confidence picks so routing falls through to regex/default without retrying another classifier |\r\n| Classifier auth | Manual provider auth resolution | Classifier and probe streams run through `ctx.modelRegistry.streamSimple()`, so provider credentials resolve through the host registry (OAuth, env, stored keys) instead of a bespoke auth lookup |\r\n| Self-correction | Static cache, no feedback | Demotion tracking on manual overrides; cache entries auto-escalate tier after 3 demotions |\r\n| Cold start | Empty cache → every prompt hits LLM | Cache warm-start seeds entries from regex rules on first use |\r\n| Category taxonomy | `quick`/`general`/`frontier` | Adds a dedicated `coding` category (implementation, debugging, refactoring, tests, code review, codebase investigation, typing/error handling, API integration); `general` is now a non-specialized catch-all with no development regex rules of its own |\r\n| Category strictness | All categories fall back to `default` when unhealthy/unavailable | `strictCategories` (default `[\"coding\"]`) exposes the unavailable/unhealthy result instead of silently switching to an unapproved cross-category model; eligibility comes only from explicit `models.coding` patterns, never `guessTier`/cost/context discovery |\r\n| Routing intent conflicts | Stale cache/session tier and complexity heuristics could override a same-turn regex match | A configured-category regex match in the current turn beats a conflicting stale cache/session tier and skips the complexity shortcut entirely |\r\n| Subscription guard | Not available | Redirects OpenRouter model IDs by prefix (e.g. `{\"openai/\": \"openai-codex\"}`) to subscription providers when available and within quota |\r\n\r\n### Subagent Integration\r\n\r\nBifrost exposes an in-process `bifrost:rpc:v1` classification channel for subagent bridges. The `classifyTask` method returns the selected model and thinking level without changing the active Pi session model. This supports Claude Code-style subagent extensions such as `@tintinweb/pi-subagents` and `@gotgenes/pi-subagents`. Child subagent sessions are automatically detected and silenced so background/headless routing logs do not emit raw `stderr` into the terminal or corrupt the parent's fullscreen prompt window.\r\n\r\n### How the Improved Routing Pipeline Works\r\n\r\nThe original Bifrost pipeline was a 4-stage waterfall: try the cache, then ask an LLM classifier, then fall back to regex rules, then use the default tier. Each prompt was classified independently with no memory of recent context, no awareness of prompt complexity, and no feedback from routing outcomes.\r\n\r\nThe improved pipeline addresses each of these gaps:\r\n\r\n1. **Session momentum** prevents tier thrashing in multi-turn conversations. If you're debugging across several prompts, ambiguous follow-ups like \"yes, try that\" stay on the frontier tier instead of dropping to general.\r\n\r\n2. **Complexity heuristics** skip the LLM classifier entirely for clear-cut cases — a 3-word formatting request goes straight to quick tier, a 500-line multi-file paste goes straight to frontier. This reduces classifier calls by 15-25%.\r\n\r\n3. **Tier descriptions** tell the classifier LLM what each tier actually handles (auto-generated from your regex rules), instead of just sending bare tier names. This improves accuracy for ambiguous prompts.\r\n\r\n4. **Bounded classification** limits classifier attempts to a shared wall-clock budget and classifier input to 8,000 characters. Failed transports enter a short cooldown; valid rejections immediately fall through without another classifier call. `confidenceThreshold` rejects missing or weak scores, and `auto` mode does not resend completed direct responses through a subprocess.\r\n\r\n5. **Self-correction** tracks when you manually override a routing decision. After 3 such signals on the same prompt pattern, the cache entry's tier auto-escalates.\r\n\r\n6. **Image capability fallback** checks image attachments after routing; if the chosen model cannot accept images, Bifrost walks higher tiers until it finds one that can.\r\n\r\n7. **Warm start and indexed lookup** pre-seed common patterns and keep exact/fuzzy cache lookup allocation low. Cache writes are deferred and coalesced so disk I/O does not block prompt routing.\r\n\r\n## Statusline\r\n\r\nWhen Bifrost is the active statusline source, the routing line reads:\r\n\r\n```text\r\nBifrost: <tier> → <model> (<source>; N skipped)\r\n```\r\n\r\n- `Bifrost` renders in a rainbow gradient.\r\n- `<tier>` is colored by tier: quick (green), general (cyan), writing (blue), coding (magenta), frontier (orange).\r\n- `→` is white.\r\n- `<model>` (provider/name, e.g. `openrouter/tencent/hy3`) is violet.\r\n- the trailing `(source; N skipped)` note is grey.\r\n- when pinned, the category slot shows `pinned` in hot pink: `Bifrost: pinned → <model>`.\r\n- when thinking is pinned, the mode status shows `think:pinned` in orange. This reflects a thinking-only pin and is independent of whether the model is pinned.\r\n- `statusline.json` exposes the category actually selected by routing; dashboards such as Pi Atelier should not infer it from model cost or context size.\r\n\r\n### Routing Suffix\r\n\r\nThe parenthetical suffix after the model shows how the tier was determined:\r\n\r\n```typescript\r\ntype ClassificationSource = \"cache\" | \"classifier\" | \"regex\" | \"complexity\" | \"inline\"\r\n```\r\n\r\n**Suffix patterns:**\r\n\r\n1. **Model already active** (no switch):\r\n   ```\r\n   (already active, <source>[, <reason>])\r\n   ```\r\n   - `source`: one of the 5 classification sources above.\r\n   - `reason`: optional fallback reason if the requested tier fell back.\r\n\r\n2. **Model switched** (classified):\r\n   ```\r\n   (<source>[; <detail>])\r\n   ```\r\n   - `source`: one of the 5 classification sources above.\r\n   - `detail`: optional, may include:\r\n     - `selected tier <name>` — actual tier differs from classified tier.\r\n     - `<N> skipped` — N models were unreachable/unavailable.\r\n     - a fallback reason (e.g. quota exhausted).\r\n\r\n3. **Model switched** (fallback):\r\n   ```\r\n   (fallback[; <detail>])\r\n   ```\r\n   - Used when no classification succeeded and the default tier is used.\r\n   - `detail`: same options as pattern 2.\r\n\r\n**All possible values:**\r\n\r\n| Value | Meaning |\r\n|-------|--------|\r\n| `cache` | Matched a cached prompt/tier pair |\r\n| `classifier` | LLM classifier determined the tier |\r\n| `regex` | Regex routing rule matched |\r\n| `complexity` | Complexity heuristic (quick win for obvious requests) |\r\n| `inline` | Manual override via `/<tier> <prompt>` or `<tier> <prompt>` |\r\n| `already active` | Model unchanged (already Pi’s active model) |\r\n| `fallback` | No classification succeeded; using fallback tier |\r\n| `N skipped` | N models unavailable due to circuit break/quota/error |\r\n| `selected tier <name>` | Routing chose a different tier than classification suggested (quota/reliability) |\r\n\r\n## Install\r\n\r\n> **Requires Pi 1.x** (tested with Pi 1.0.0).\r\n\r\nFrom npm (scoped):\r\n\r\n```bash\r\npi install npm:@tenchi4u/pi-bifrost\r\n```\r\n\r\nFrom source:\r\n\r\n```bash\r\npi install git:github.com/the-matt-moo/pi-bifrost\r\n```\r\n\r\nFor local development, configure Pi to load your cloned package directory in your machine-local `settings.json`. Do not commit machine-specific package paths.\r\n\r\n## Setup\r\n\r\nRun once after install:\r\n\r\n```\r\n/bifrost init\r\n```\r\n\r\nThis probes every model you have access to, finds which ones respond, and writes a config. Successful probe results are reused for one hour; pass `--force` to retest immediately. Bifrost routes prompts from that point forward. If a selected model ends with a provider error, Bifrost opens its circuit immediately; replay-safe rate-limit, overload, and transient 502/503/504 failures can automatically retry on the next healthy model.\r\n\r\nIf `/bifrost init` has not been run, Bifrost auto-derives tier candidates at runtime from the live registry using `guessTier`. This works but skips probe-based ordering and quota preferences. Run `/bifrost init` for stable, reproducible routing.\r\n\r\nNarrow discovery scope when needed:\r\n\r\n```text\r\n/bifrost init --scoped          # Pi scoped-models selection only\r\n/bifrost init --free            # OpenRouter free tier only\r\n/bifrost init --scoped --free   # union of both\r\n/bifrost refresh               # add new scoped models, remove stale ones (keeps tiers, auto-reloads)\r\n```\r\n\r\n## Usage\r\n\r\n| Command | What it does |\r\n|---------|-------------|\r\n| `/bifrost` | Dashboard with mode, model, and quick actions |\r\n| `/bifrost init [--force]` | Probe models and generate config; fresh successful probes are reused for one hour unless forced |\r\n| `/bifrost on` / `off` | Enable or disable routing |\r\n| `/bifrost pin` / `unpin` | Lock the main-session model; automatic routes (including regex and fallback) auto-pin, while manual overrides, clearly unrelated topics, or unavailable models can switch it (subagents remain independent; see `keys` config for shortcuts) |\r\n| `/bifrost silence` / `unsilence` | Suppress or restore console output |\r\n| `/bifrost preview <prompt>` | See model routing, thinking level, and concise reasons without sending |\r\n| `/bifrost reload` | Reload config after manual edits |\r\n| `/bifrost refresh [--free] [--force]` | Reconcile scoped models without recategorizing tiers; force bypasses fresh probe results |\r\n| `/bifrost probe [--scoped] [--free] [--force]` | Check model availability; reuse fresh successes unless forced |\r\n| `/bifrost doctor` | Validate config against available models |\r\n| `/bifrost classifier on` / `off` | Toggle LLM classifier |\r\n| `/bifrost add-model [<model-key>]` | Probe the model first, then add it to settings.json enabledModels, mark it as scoped in config, prompt for category placement, and refresh registry |\r\n| `/bifrost remove-model <model-key>` | Remove model from settings.json enabledModels, all bifrost.json tiers, and discovery metadata; refresh registry |\r\n| `/bifrost thinking [off\\|advisory\\|apply\\|status]` | Inspect or set prompt-derived thinking mode |\r\n\r\nActive advisory/apply mode appears immediately in Bifrost status as `think:advisory` or `think:apply`.\r\n\r\nForce a tier for one message with its slash command or by prefixing the tier name:\r\n\r\n```\r\n/frontier debug this race condition\r\n/coding add retry logic to fetchUser\r\nquick summarize this\r\n```\r\n\r\nBifrost registers one `/<tier>` command for each key in `bifrost.json` `models`. Changes to `models` take effect after `/reload`. The command is stripped before the prompt reaches the model. Running `/<tier>` with no prompt shows a usage warning.\r\n\r\n## Architecture & Routing Strategy\r\n\r\nBifrost automates model selection via a robust heuristic pipeline during initialization and dynamic evaluation at runtime.\r\n\r\n### 1. Initialization: Categorization & Ordering\r\nWhen you run `/bifrost init`, models are probed, fetched, and categorized automatically:\r\n- **Text Models (`guessTier`)**: Models are categorized by explicit overrides, parameter counts, architecture patterns, cost, and context:\r\n  - `modelTiers` in `tierHeuristics` explicitly pins a model to a tier.\r\n  - Parameter size: $\\le 14\\text{B}$ → `quick`, $\\ge 70\\text{B}$ → `frontier`.\r\n  - Architecture patterns: lightweight indicators (`haiku`, `flash`, `mini`, `nano`, `lite`) → `quick`; frontier indicators (`opus`, `sonnet`, `pro`, `max`, `r1`, `o1/o3`) → `frontier`.\r\n  - Cost: > $5/1M tokens → `frontier`, < $1/1M tokens → `quick`, everything else → `general`.\r\n  - *Subscription models* (Anthropic, Codex, Antigravity) use context-window heuristics instead of cost: ≥200k tokens = `frontier`, ≥64k = `general`, otherwise `quick`.\r\n  - All thresholds and patterns are configurable under `tierHeuristics` in `bifrost.json`.\r\n  - `writing` is a routing-only tier (explain/docs/summarize tasks). It has no `guessTier` cost class; when unconfigured it uses `general`-tier candidates at runtime.\r\n  - `coding` is also routing-only — `guessTier` never assigns it. `/bifrost init` never auto-populates `coding`; add `models.coding` patterns yourself with models you've approved for implementation/debugging/review work. `coding` is strict by default (`strictCategories`): if its candidates are missing or unhealthy, routing surfaces that instead of silently falling back to `general`/`default`.\r\n- **Intra-Tier Ordering (`sortTierModels`)**: Non-free models are sorted ascending by their **probe latency** (fastest first). Free models are sorted by their **OpenRouter collection rank**.\r\n\r\n### 2. Runtime Model Selection Strategies\r\nOnce models are categorized, the configured `strategy` determines which model is chosen from the selected tier:\r\n- `first` / `fastest` — picks the top model in the list (which `/bifrost init` naturally orders by lowest latency).\r\n- `cheapest` / `cheapest_input` / `cheapest_output` — strictly optimizes for token cost.\r\n- `largest_context` — favors models with the largest token window for massive context tasks.\r\n- `random` — randomly picks a candidate to load-balance or vary responses.\r\n- `subscription_preferred` / `subscription_balance` — both partition candidates by billing class. Subscription models (Anthropic, Codex, Antigravity) with usable weekly quota are tried first via weighted random (gamma-curved by remaining allowance). When providers differ by more than 10 percentage points, the higher-allowance provider is favored; within 10 points, weighted selection balances across all viable subscription models. Paid-credit (OpenRouter) models are only reached when every subscription candidate is drained below `reservePercent` or absent. Free and unknown models serve as intermediate fallback.\r\n\r\n### 3. Dynamic Pipeline: Prompt Routing\r\nFor every prompt, Bifrost executes a staged evaluation:\r\n1. **Inline Overrides**: E.g., `frontier debug this`.\r\n2. **Direct-model Regex Rules**: Explicit provider/model rules bypass tier classification.\r\n3. **Cache & Session Momentum**: Indexed fuzzy matching reuses successful classifications; related follow-ups retain the dominant recent tier.\r\n4. **Complexity Heuristic**: Obvious short requests route to `quick`; large or multi-file requests route to `frontier` without an LLM call.\r\n5. **Bounded LLM Classifier**: Tries the classifier model and its ordered fallbacks within a 10-second total budget by default. Failed models cool down for 60 seconds.\r\n6. **Tier Regex Rules**: The already-computed regex result is used when classification does not return a valid tier.\r\n7. **Ask the User**: If the classifier rejected the prompt (for example, confidence below `confidenceThreshold`) and no tier rule matched, Bifrost asks you to pick a category in the Pi UI. Classifier failures (timeouts, HTTP errors) do not trigger this prompt. It is also skipped in subagent sessions and when Pi has no UI.\r\n8. **Default Tier**: If all else fails, or you cancel the prompt, Bifrost uses the configured default.\r\n\r\nWhen Jev accepts a category, its `effort` score (sent in the same request) steers the tier: `coding` always stays on the coding model, and any other category with effort `>= 1.5` moves to `frontier` when that tier is configured.\r\n\r\nWhile a `frontier` model is active, Bifrost appends a short system-prompt directive that restricts it to planning, analysis, task breakdown, and delegation prompts. It does not write full implementation code.\r\n\r\nA regex rule that matches a configured category in the current turn takes priority over a conflicting cached/session-momentum tier from an earlier turn, and skips the complexity heuristic entirely — so a short `coding`-rule match doesn't drop to `quick`, and a long one doesn't escalate to `frontier`, just because those signals would otherwise apply.\r\n\r\nRegistry refreshes use stale-while-revalidate: existing models route the current prompt immediately while refresh runs in the background. An empty registry or explicit recovery still waits for fresh data. Quota telemetry also backs off after empty results and degrades to neutral routing.\r\n\r\n### 4. Model Autopinning\r\nTo prevent context-loss from per-prompt model churn, Bifrost **auto-pins** the selected model whenever it routes to a different model via the LLM classifier or regex rules (classification source). This keeps thinking-level state, cache continuity, and quota tracking stable across a multi-model session. Manual inline overrides (e.g. `frontier debug this`) switch without pinning — only classified switches lock in. `Ctrl+Delete` unpins at any time. Autopinning is session-local and never persisted.\r\n\r\n### 5. Thinking Mode Steering\r\nIf `\"thinking\": { \"mode\": \"apply\" }` is set in config, Bifrost assesses prompt complexity to dynamically steer the selected model's **thinking level/effort**.\r\n- When Jev classified the prompt, its `effort` score sets the base level; failure, correction, and task-depth signals still add on top.\r\n- Ambiguous logic puzzles, architectural queries, or math proofs elevate the thinking budget.\r\n- Simple formatting or translation requests lower the thinking budget.\r\n- Free models think at `thinking.maxLevel` (default `high`), bounded by any `byTier` cap; manual thinking pins still take precedence.\r\n- `advisory` mode logs what Bifrost *would* do without modifying Pi's active state.\r\n- When *you* manually change the thinking level, Bifrost logs `Thinking level manually changed to <level>; Bifrost thinking pinned.` and pins for the session. Bifrost's own automatic applies are silent — that line means a manual change, not a Bifrost default.\r\n- Only a thinking change under the *same* model pins thinking. Switching models re-clamps the thinking level as a side effect; that never pins. `Ctrl+P` toggles the pin; `Ctrl+Delete` unpins model and thinking.\r\n\r\n## Config\r\n\r\nConfig merges from two paths (agent dir wins):\r\n\r\n1. Extension default (`<extensionDir>/bifrost.json`)\r\n2. Global (`~/.pi/agent/bifrost.json`)\r\n\r\nThere is no per-project config layer: routing is global, so behavior is\r\nidentical in every cwd. `/bifrost init`, `refresh`, `update`, `add-model`, and\r\n`remove-model` all write to `~/.pi/agent/bifrost.json`. Shared runtime\r\nartifacts (cache, probe results, reliability, debug log) live under\r\n`~/.pi/agent/`, while session toggles (enabled/classifier/thinking/silent)\r\nare stored per Pi session.\r\n\r\nInline results (e.g. `/bifrost reconcile` config diff) render in a scrollable\r\nviewer that splits multi-line content and expands tabs; the visible height\r\ntracks the terminal on resize. `esc` closes, `↑↓`/`jk` scroll.\r\n\r\nMinimal config after `init`:\r\n\r\n```json\r\n{\r\n  \"enabled\": true,\r\n  \"default\": \"general\",\r\n  \"strategy\": \"first\",\r\n  \"models\": {\r\n    \"quick\": [\"opencode/deepseek-v4-flash-free\"],\r\n    \"general\": [\"opencode-go/deepseek-v4-pro\"],\r\n    \"frontier\": [\"openai-codex/gpt-5.6-sol\"]\r\n  }\r\n}\r\n```\r\n\r\nShortcuts are machine-local and unbound by default — Pi's extension API takes literal keys, not remappable action ids, so keyboard layouts stay a per-machine concern:\r\n\r\n```json\r\n{ \"keys\": { \"unpin\": \"ctrl+delete\", \"toggle\": \"ctrl+p\" } }\r\n```\r\n\r\nManual model selection already pins Bifrost, so a separate `pin` key is usually unnecessary. `toggle` combines pin and unpin into one key. Pick keys the host does not reserve (`shift+tab`, `ctrl+c/d/l/o/t`, and the model-cycle keys are reserved). Reserved keys are skipped with a startup diagnostic.\r\n\r\nClassifier latency controls are optional and backward-compatible. Jev uses its native Choice API, with direct TypeSafe first and OpenRouter as the transport fallback:\r\n\r\n```json\r\n{\r\n  \"classifier\": {\r\n    \"model\": \"typesafe/jev-latest\",\r\n    \"fallbackModels\": [\"openrouter/~typesafe/jev-latest\"],\r\n    \"jevCredentialTarget\": \"pi-bifrost/jev-api-key\",\r\n    \"method\": \"direct\",\r\n    \"timeoutMs\": 10000,\r\n    \"maxAttempts\": 2,\r\n    \"cooldownSeconds\": 60,\r\n    \"confidenceThreshold\": 0.4,\r\n    \"fallbackToRegex\": true,\r\n    \"categoryDescriptions\": {\r\n      \"coding\": \"implementation, debugging, refactoring, tests, code review\"\r\n    }\r\n  }\r\n}\r\n```\r\n\r\nStore the TypeSafe API key as a **Generic Credential** in Windows Credential Manager under `pi-bifrost/jev-api-key` (or the configured target). Bifrost reads it through `CredRead`; it is not stored in JSON or logged. The OpenRouter fallback reuses Pi's existing `openrouter` provider credential.\r\n\r\n`classifier.categoryDescriptions` overrides the built-in per-category description sent to the classifier. Jev receives those descriptions as native Choice criteria; text classifiers receive them in the prompt. Known categories (`quick`, `general`, `writing`, `coding`, `frontier`) already have built-in descriptions; custom categories fall back to descriptions generated from their regex rules.\r\n\r\n`strictCategories` (default `[\"coding\"]` once `coding` is configured) marks categories whose model resolution must not silently fall back to another category:\r\n\r\n```json\r\n{ \"strictCategories\": [\"coding\"] }\r\n```\r\n\r\nRedirect OpenRouter models to subscription providers to avoid paying credit fees for models covered by an active subscription:\r\n\r\n```json\r\n{\r\n  \"subscriptionGuard\": {\r\n    \"openai/\": \"openai-codex\"\r\n  }\r\n}\r\n```\r\n\r\nIf the target subscription provider is exhausted (session or weekly quota), the redirect is skipped and OpenRouter selection stands.\r\n\r\n`fallbackToRegex: false` skips tier regex fallback after classifier failure or rejection; direct model-reference rules still short-circuit before classification.\r\n\r\nPrompt-derived thinking is disabled by default. Set `\"thinking\": { \"mode\": \"advisory\" }` to log recommendations without changing Pi's level, or use `\"mode\": \"apply\"` to opt into automatic level changes. Manual thinking-level changes pin the feature for the session. See the [full config reference](docs/) and [examples/](examples/) for advanced options including routing rules, classifier setup, reliability tuning, and quota-aware routing.\r\n\r\n## Testing\r\n\r\n```bash\r\nnpm test                       # unit tests\r\nnpm run test:integration       # integration tests\r\nnpm run test:ui                # Pi TUI smoke tests\r\nnpm run test:ui:reliability    # reliability E2E with fake provider\r\n```\r\n\r\n## Related\r\n\r\n[Bifrost Patterns](https://github.com/iamaamir/bifrost-pattern) — prompt workflows built on top of Bifrost routing (scouts, reviewers, model comparisons). Optional, not required.\r\n\r\n## License\r\n\r\nMIT. See [NOTICE.md](NOTICE.md) for attribution details.\r\n","readmeFilename":"README.md"}