{"_id":"pi-provider-litellm","_rev":"30-3356f1283b8305798158c540ec8fd330","name":"pi-provider-litellm","dist-tags":{"latest":"3.2.0"},"versions":{"0.1.1":{"name":"pi-provider-litellm","version":"0.1.1","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@0.1.1","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"extensions":["./dist/index.js"]},"dist":{"shasum":"ab4a33b42b6b7a581b1268d53a004c3464e336ff","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-0.1.1.tgz","fileCount":20,"integrity":"sha512-e+Ch8x/mqC3QoK+DYx2YbD1TfmnR/GEtSS2lg9PXU1FEOQRg8SECTH/m/6SiolNSSf9xT+MJGQvf3tqzNT+RGQ==","signatures":[{"sig":"MEQCIBqx+vlzczBzwkkirl3uLeE+vWolrcSlOS+fi5kDYklkAiAKERC5sh7H/aPgOlua1QR7Xshj3EwgipNoOeuhhaGSJQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39573},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"1a602c0979af29905ec02e5654fedbb0619d83c4","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test","clean":"shx rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","prepublishOnly":"npm run check && npm run clean && npm run build"},"_npmUser":{"name":"balcsida","email":"balcsida@gmail.com"},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.13.0","description":"LiteLLM proxy provider extension for pi-mono.","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","tsx":"^4.21.0","vitest":"^3.2.4","typescript":"^5.7.3","@types/node":"^24.3.0","@biomejs/biome":"^1.9.4","@mariozechner/pi-ai":"^0.70.0","@typescript/native-preview":"7.0.0-dev.20260120.1","@mariozechner/pi-coding-agent":"^0.70.0"},"peerDependencies":{"@mariozechner/pi-ai":"^0.70.0","@mariozechner/pi-coding-agent":"^0.70.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_0.1.1_1777367380430_0.30732226700155585","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"pi-provider-litellm","version":"0.1.2","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@0.1.2","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/main/assets/pi_litellm_gallery.png","extensions":["./dist/index.js"]},"dist":{"shasum":"6267941d03cdb0031fe9ba268cabaa2b8aa074fe","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-0.1.2.tgz","fileCount":19,"integrity":"sha512-sPTAkMmoWBB3Hu37j3FNnv3b0QMFMSOqCp+X11WlaAwlqWXJUwxQrBpAQ8u6bxFWaqjmApcbyALB4AKS7SXfXA==","signatures":[{"sig":"MEUCIQCh80KzUbCr+uQyA68mKqLuo5Zpb0kCQRsElgYQgOkUEwIgWI9DtO1rrD3+LSjG+xUjGuQfX9sVP1ts0bbubVs5Qjc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":38959},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"d0b72d7fc2ced3d9114fd3b1defbc587845b79ca","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test","clean":"shx rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","prepublishOnly":"npm run check && npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.11.0","description":"LiteLLM proxy provider extension for pi-mono.","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","tsx":"^4.21.0","vitest":"^3.2.4","typescript":"^5.7.3","@types/node":"^24.3.0","@biomejs/biome":"^1.9.4","@mariozechner/pi-ai":"^0.70.0","@typescript/native-preview":"7.0.0-dev.20260120.1","@mariozechner/pi-coding-agent":"^0.70.0"},"peerDependencies":{"@mariozechner/pi-ai":"^0.70.0","@mariozechner/pi-coding-agent":"^0.70.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_0.1.2_1778494019123_0.5488225282730241","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"pi-provider-litellm","version":"0.1.3","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@0.1.3","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/main/assets/pi_litellm_gallery.png","extensions":["./dist/index.js"]},"dist":{"shasum":"f1f410e59a235022fdf97d1db70ee34797f57bdd","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-0.1.3.tgz","fileCount":19,"integrity":"sha512-7vu8HV3WPOn6Wecal+HIqYx3PYlCxGJyciPfYr0TW5m4CFUHwFO8z9eqNM0FDlR3EUuAu2U4Q6vYwnHJ2MAZtA==","signatures":[{"sig":"MEUCIQDrnSiNTYRUubtlb/ldTfJrIsPetpLTJYXOftOP5QewuQIgdczlGsFYLKio1B8TgWB6FyXuOG7e447fSeVXr2YlWtE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":38836},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"4ba8d8fe74ff7a8461b0a296a51b2710cb329b5a","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test","clean":"shx rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","prepublishOnly":"npm run check && npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.11.0","description":"LiteLLM proxy provider extension for pi-mono.","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","tsx":"^4.21.0","vitest":"^3.2.4","typescript":"^5.7.3","@types/node":"^24.3.0","@biomejs/biome":"^1.9.4","@mariozechner/pi-ai":"^0.70.0","@typescript/native-preview":"7.0.0-dev.20260120.1","@mariozechner/pi-coding-agent":"^0.70.0"},"peerDependencies":{"@mariozechner/pi-ai":"^0.70.0","@mariozechner/pi-coding-agent":"^0.70.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_0.1.3_1778495725902_0.9309100939281159","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"pi-provider-litellm","version":"0.1.4","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@0.1.4","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./dist/index.js"]},"dist":{"shasum":"e5496f4382124abbdf25a5ba0b810621afddee06","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-0.1.4.tgz","fileCount":19,"integrity":"sha512-pKsBtUM9g5M97hAymgbVHmiGlqdAdDSrWqg7kZupl3DObmOFfZ8E5ME1VuCYzUGCkRNx4gItQjX7Mq2p00wK/g==","signatures":[{"sig":"MEQCIEf8V5qcqs4eBvYMf/n+OQaMM80JBBp8rHO3hPJqewy7AiAjBhAcSh5WAXU6f8jLugaGvSDUQ8AQeUnTw7Ry83oAjw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":38847},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"18c8022a1a422b5d12d26ef24a23f6c8bce5b66a","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test","clean":"shx rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","prepublishOnly":"npm run check && npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.11.0","description":"LiteLLM proxy provider extension for pi-mono.","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","tsx":"^4.21.0","vitest":"^3.2.4","typescript":"^5.7.3","@types/node":"^24.3.0","@biomejs/biome":"^1.9.4","@mariozechner/pi-ai":"^0.70.0","@typescript/native-preview":"7.0.0-dev.20260120.1","@mariozechner/pi-coding-agent":"^0.70.0"},"peerDependencies":{"@mariozechner/pi-ai":"^0.70.0","@mariozechner/pi-coding-agent":"^0.70.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_0.1.4_1778496080812_0.7565860149848651","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"pi-provider-litellm","version":"1.2.0","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@1.2.0","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./dist/index.js"]},"dist":{"shasum":"dd6ab879cc61c9d5f19f7d5e3cf9557cc6f7f74a","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-1.2.0.tgz","fileCount":15,"integrity":"sha512-cJN0KzCI2RgTYgExKxj8ppftF42TWvPY7XVvEGJYIvjQKdxl+++Z3RdF689/XH6up6+zUMCeu+3gxWghGk1c0Q==","signatures":[{"sig":"MEUCIFXfN9FrLYxNbu9n4ahU7wnqikYfA2tuQK3cO6YcAODhAiEA+PvxHuB5vSQYQNfidnqgyZ+Pwu8+f1N2roIRx5OFhSE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":32188},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"a4319898ac5cc579a1d7331a8862058f4fad04ce","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test","clean":"shx rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","prepublishOnly":"npm run check && npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.11.0","description":"LiteLLM proxy provider extension for pi-mono.","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","tsx":"^4.21.0","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.12.3","@biomejs/biome":"^1.9.4","@earendil-works/pi-ai":"^0.74.0","@typescript/native-preview":"7.0.0-dev.20260120.1","@earendil-works/pi-coding-agent":"^0.74.0"},"peerDependencies":{"@earendil-works/pi-ai":"^0.74.0","@earendil-works/pi-coding-agent":"^0.74.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_1.2.0_1778513495748_0.5246554222134596","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"pi-provider-litellm","version":"1.2.1","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@1.2.1","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./dist/index.js"]},"dist":{"shasum":"ae999dd26fa90ceb14dab473c6bc2648e7384b50","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-1.2.1.tgz","fileCount":15,"integrity":"sha512-hK5O5wJcbq4AZLi/IgEF75QwmR965wE1cRasd3zohOkv2ZQtqwXOxcsiy1UgYwiDI8HMBWUP/gy9YNzfWeu2tw==","signatures":[{"sig":"MEQCIAZchkRTR7ffjTc6wKrKMWXfEZ/vK4brhq1/bLU63j2rAiBDd/xAoFUmGYHx1QF1f6/iKE7AGV3dpLeFJjVkrthR5g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@1.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":32575},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"9bd44fbc2e5f7836cb249abacea8ccba9483415b","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test","clean":"shx rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","prepublishOnly":"npm run check && npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"overrides":{"basic-ftp":"6.0.1","protobufjs":"8.2.1","fast-xml-builder":"1.2.0"},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.11.0","description":"LiteLLM proxy provider extension for Pi","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","tsx":"^4.21.0","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.12.3","@biomejs/biome":"^1.9.4","@earendil-works/pi-ai":"^0.74.0","@typescript/native-preview":"7.0.0-dev.20260120.1","@earendil-works/pi-coding-agent":"^0.74.0"},"peerDependencies":{"@earendil-works/pi-ai":"^0.74.0","@earendil-works/pi-coding-agent":"^0.74.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_1.2.1_1778673936224_0.377834310318202","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"pi-provider-litellm","version":"1.2.2","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@1.2.2","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./dist/index.js"]},"dist":{"shasum":"3b9225c49235cbbaf2b16b8ea1b815ad4fa146df","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-1.2.2.tgz","fileCount":15,"integrity":"sha512-U5lBscWBUT6ie/SFhAvxEySctLt9iP6G861HcSxnmJOEtgP15fmAVkiv2GbxFcH21abTalD6j28nrNYaqlnzyA==","signatures":[{"sig":"MEUCIHJjRp6KvC6G9o3MjtZ2erUvjRyLrsf/o4o0vyJ45vG2AiEAhE1GexnXqS3U+5bmygZSXqbICk7hF5im3jdOMBLRmLA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@1.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":36091},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"e4cfeab964f60ce832cef8919bd05bbe9db25d27","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test","clean":"shx rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","prepublishOnly":"npm run check && npm run clean && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"overrides":{"basic-ftp":"6.0.1","protobufjs":"8.2.1","fast-xml-builder":"1.2.0"},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.12.1","description":"LiteLLM proxy provider extension for Pi","directories":{},"_nodeVersion":"24.15.0","_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","tsx":"^4.21.0","vitest":"^3.2.4","typescript":"^5.9.3","@types/node":"^24.12.3","@biomejs/biome":"^1.9.4","@earendil-works/pi-ai":"^0.74.0","@typescript/native-preview":"7.0.0-dev.20260120.1","@earendil-works/pi-coding-agent":"^0.74.0"},"peerDependencies":{"@earendil-works/pi-ai":"^0.74.0","@earendil-works/pi-coding-agent":"^0.74.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_1.2.2_1779203746352_0.9551744522986325","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"pi-provider-litellm","version":"1.2.3","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@1.2.3","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./dist/index.js"]},"dist":{"shasum":"7abdb8952c175fb47aef4d01d02685e1367c3cb2","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-1.2.3.tgz","fileCount":15,"integrity":"sha512-96CYPqD/XFQi0Kn44FBm++g/wCFjGTibNByh3a+ueB7uyI5t7cpmtVhmXPKuqbDVUXlXe1kUeJlVpoOShjTalA==","signatures":[{"sig":"MEQCIFdYTzzhgagbj0FTwuFpnyNKH7/7DcMwN2kK1GAaN29/AiB8DVqul/Ptho7wxd0YzTju9RxdCyuWEVQeTurwRpp51A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@1.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":41797},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"bbfcbc77457da9fba192970b2052d9eb6975f91b","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test","clean":"shx rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","prepublishOnly":"npm run check && npm run clean && npm run build && npm run supply-chain:guard","supply-chain:guard":"tsx scripts/supply-chain-guard.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"overrides":{"basic-ftp":"6.0.1","protobufjs":"8.2.1","fast-xml-builder":"1.2.0"},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.13.0","description":"LiteLLM proxy provider extension for Pi","directories":{},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","tsx":"^4.21.0","vitest":"^4.1.7","typescript":"^6.0.3","@types/node":"^25.9.1","@biomejs/biome":"^2.4.15","@earendil-works/pi-ai":"^0.75.4","@typescript/native-preview":"7.0.0-dev.20260519.1","@earendil-works/pi-coding-agent":"^0.75.4"},"peerDependencies":{"@earendil-works/pi-ai":"^0.75.4","@earendil-works/pi-coding-agent":"^0.75.4"},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_1.2.3_1779833147719_0.6845544232206382","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"name":"pi-provider-litellm","version":"1.2.4","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@1.2.4","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./dist/index.js"]},"dist":{"shasum":"7a23993f31d97bee390147b911c1be6c2c6dac79","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-1.2.4.tgz","fileCount":15,"integrity":"sha512-u6/EBGL7GO5VcVZbCUzffeSSqpThR5NFGSzeAEe2Qg9/MVYhRVjmGWo7dgEFoehUanMbdXFCM2e0eQS+s2hAmA==","signatures":[{"sig":"MEYCIQCj7poBrbcfiGNjss12flVMhLAVIZR+vWG33eLZTDa0mAIhAIcsBV7EFd54tbiVUTAFQ6ffsC6G7E8c+iOSaIMwnJk8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@1.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":46065},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"e57db4a6161aba452e2455419931b007b7f8a0ea","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test","clean":"shx rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","prepublishOnly":"npm run check && npm run clean && npm run build && npm run supply-chain:guard","supply-chain:guard":"tsx scripts/supply-chain-guard.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"overrides":{"basic-ftp":"6.0.1","protobufjs":"8.2.1","fast-xml-builder":"1.2.0"},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.13.0","description":"LiteLLM proxy provider extension for Pi","directories":{},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","tsx":"^4.21.0","vitest":"^4.1.7","typescript":"^6.0.3","@types/node":"^25.9.1","@biomejs/biome":"^2.4.15","@earendil-works/pi-ai":"^0.78.1","@typescript/native-preview":"7.0.0-dev.20260607.1","@earendil-works/pi-coding-agent":"^0.78.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_1.2.4_1780855281375_0.8953061890906857","host":"s3://npm-registry-packages-npm-production"}},"1.2.5":{"name":"pi-provider-litellm","version":"1.2.5","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@1.2.5","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./dist/index.js"]},"dist":{"shasum":"f1941a5fcb53cf416447cfa040e0ae0b0d08c827","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-1.2.5.tgz","fileCount":15,"integrity":"sha512-ap2hp2dZ0DLpTvTlf2qmSlpJ6O+KoTTFfh5idpCsZEBD6COolHK5ffmAuhkFeHJWuQ/+X8sNorK9fAhfB1SzkA==","signatures":[{"sig":"MEYCIQD6A9o7Doy5Q4Js74pX1yXK+XsxiuzPp0InRWGeRP3VlwIhAJFv04XVy0jy0lwNXrvmiEpfO1YgDGhkP4xue/QaUZ3z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@1.2.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":46193},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"8855ed7987ce29fcee6faa280f1a783da78dbe13","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test","clean":"shx rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","prepublishOnly":"npm run check && npm run clean && npm run build && npm run supply-chain:guard","supply-chain:guard":"tsx scripts/supply-chain-guard.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"overrides":{"basic-ftp":"6.0.1","protobufjs":"8.2.1","fast-xml-builder":"1.2.0"},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.13.0","description":"LiteLLM proxy provider extension for Pi","directories":{},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","tsx":"^4.21.0","vitest":"^4.1.7","typescript":"^6.0.3","@types/node":"^25.9.1","@biomejs/biome":"^2.4.15","@earendil-works/pi-ai":"^0.78.1","@typescript/native-preview":"7.0.0-dev.20260607.1","@earendil-works/pi-coding-agent":"^0.78.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_1.2.5_1781019744850_0.8317846784236413","host":"s3://npm-registry-packages-npm-production"}},"1.2.6":{"name":"pi-provider-litellm","version":"1.2.6","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@1.2.6","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./dist/index.js"]},"dist":{"shasum":"7677bf453c3a3146546d0e747201a3ef4168ae15","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-1.2.6.tgz","fileCount":15,"integrity":"sha512-HFdgg6igH4chI4XdZZYE6v/GfRDIZP12NRItr/oSng1PaBTeM+m3LXP/8T/WKrtfJwlUoORBtj1S3gI/GZih7A==","signatures":[{"sig":"MEUCIQCU5iL7D1ij6BpMMZ091RO1ZTUsN0I+AQZ3HVNLmJ8hcgIgbPXzV1Z02J7Hrp/W6MPC3VBxw3bDKF6e9l/F6P+dkck=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@1.2.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":44767},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"8fde03d9098986f8793efbc14c645c1fb4bcffdf","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test","clean":"shx rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","prepublishOnly":"npm run check && npm run clean && npm run build && npm run supply-chain:guard","supply-chain:guard":"tsx scripts/supply-chain-guard.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"overrides":{"basic-ftp":"6.0.1","protobufjs":"8.2.1","fast-xml-builder":"1.2.0"},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.13.0","description":"LiteLLM proxy provider extension for Pi","directories":{},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","tsx":"^4.21.0","vitest":"^4.1.7","typescript":"^6.0.3","@types/node":"^25.9.1","@biomejs/biome":"^2.4.15","@earendil-works/pi-ai":"^0.78.1","@typescript/native-preview":"7.0.0-dev.20260607.1","@earendil-works/pi-coding-agent":"^0.78.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_1.2.6_1781081336376_0.0517916971516883","host":"s3://npm-registry-packages-npm-production"}},"1.2.7":{"name":"pi-provider-litellm","version":"1.2.7","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@1.2.7","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./dist/index.js"]},"dist":{"shasum":"6fbf6aaeaf9e483e0b8a2a6eeeb850b2b11c29dd","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-1.2.7.tgz","fileCount":23,"integrity":"sha512-rijAmSrHPL3yLUijxOSwkRxJLcjO7wWhQBl3zLFM2NRR5So6ecD4n6n+GEfGDD7A3LNzTc/aqt1wBI8/7WzTyQ==","signatures":[{"sig":"MEYCIQCF2OJCPZJCaR9Ivn71wun2b6KB/qd+6vJ7nJ2U5I6URgIhAPKkvqrSpkCOqB5o7iExIDIw9LIdL497B3BLKXM1w/cf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@1.2.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":75187},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"f765e78b8c4aa4a6a27b193624ef985f4dd5857b","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test","clean":"shx rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","prepublishOnly":"npm run check && npm run clean && npm run build && npm run supply-chain:guard","supply-chain:guard":"tsx scripts/supply-chain-guard.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"overrides":{"basic-ftp":"6.0.1","protobufjs":"8.2.1","fast-xml-builder":"1.2.0"},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.13.0","description":"LiteLLM proxy provider extension for Pi","directories":{},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"shx":"^0.4.0","tsx":"^4.21.0","vitest":"^4.1.7","typescript":"^6.0.3","@types/node":"^25.9.1","@biomejs/biome":"^2.4.15","@earendil-works/pi-ai":"^0.79.1","@typescript/native-preview":"7.0.0-dev.20260610.1","@earendil-works/pi-coding-agent":"^0.79.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_1.2.7_1781132657831_0.9389442032139561","host":"s3://npm-registry-packages-npm-production"}},"1.2.8":{"name":"pi-provider-litellm","version":"1.2.8","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@1.2.8","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./dist/index.js"]},"dist":{"shasum":"381049096538881e929801504828e1061a2415ca","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-1.2.8.tgz","fileCount":23,"integrity":"sha512-wTLV0GyM1mBcjC4lstT6kmpQ8mZ2kYrm4iI4sphiny44Uk0x5hckYN7rrRkBRLBzO3CpCtfktNcO26iAxTU9oA==","signatures":[{"sig":"MEUCID70i9123Rg70BS9nIOPIUwX9OmQWtpysH1RmNbz036aAiEAqeDsTBz24yVQg+QV9C0PJ7yOvQ+7l8z73j0iNg6Rj0o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@1.2.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":78902},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"5d0cad6c32081ee780ec27cc1467db9aba762bd2","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test","clean":"rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","prepublishOnly":"npm run check && npm run clean && npm run build && npm run supply-chain:guard","supply-chain:guard":"tsx scripts/supply-chain-guard.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"overrides":{"basic-ftp":"6.0.1","protobufjs":"8.2.1","fast-xml-builder":"1.2.0"},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.13.0","description":"LiteLLM proxy provider extension for Pi","directories":{},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.1.7","@types/node":"^25.9.1","@biomejs/biome":"^2.4.15","@earendil-works/pi-ai":"^0.79.1","@typescript/native-preview":"7.0.0-dev.20260617.2","@earendil-works/pi-coding-agent":"^0.79.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_1.2.8_1781767477250_0.7866140651304829","host":"s3://npm-registry-packages-npm-production"}},"1.2.9":{"name":"pi-provider-litellm","version":"1.2.9","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@1.2.9","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./dist/index.js"]},"dist":{"shasum":"8866cdb84440dab4e126f678c278b02a958bb7a4","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-1.2.9.tgz","fileCount":23,"integrity":"sha512-WElyqdkN8/OcxlmeegOU+Ul8HM/TPDFe+gmyxE0FtYqDNIVHKaneWXX/ZlK0tgMRnoFhLNpEAPG8YF6io8RQLg==","signatures":[{"sig":"MEUCIQContvb+WshCWfCB8qdFeW/1DnV5gnY5sRGA7WH2QR9qwIgRmTF0dvvFQMGqAHfR7L167+2+KunPOQ9n/Cb7KY4Jz8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@1.2.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":113009},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"ab97b7cc1a0bf84e556ccb8bc8ce7b47baead8b8","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test","clean":"rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","prepublishOnly":"npm run check && npm run clean && npm run build && npm run supply-chain:guard","supply-chain:guard":"tsx scripts/supply-chain-guard.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"overrides":{"basic-ftp":"6.0.1","protobufjs":"8.2.1","fast-xml-builder":"1.2.0"},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.13.0","description":"LiteLLM proxy provider extension for Pi","directories":{},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.1.7","@types/node":"^26.0.0","@biomejs/biome":"^2.4.15","@earendil-works/pi-ai":"^0.80.2","@typescript/native-preview":"7.0.0-dev.20260707.2","@earendil-works/pi-coding-agent":"^0.80.2"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_1.2.9_1783949837265_0.9912260209369179","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"pi-provider-litellm","version":"1.3.0","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@1.3.0","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./dist/index.js"]},"dist":{"shasum":"49fc244746638b55d8796e7330d50b67c8f01323","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-1.3.0.tgz","fileCount":23,"integrity":"sha512-5ciNqER0kSa5nlBqtF9pXeyaAde5QKnyNf4riC3DNzMp/WQuZzYT8ICgOybMGvlVBX92lQrp1HuibM75g+WFBw==","signatures":[{"sig":"MEYCIQCUk+sgkhjURN29eXJP6twUHbcbm/0KO+ZHY2FIEscwGwIhAIIcUvjmCsxA9DScc9X8H9n4LITXOldfiUQleLNNt9aW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":116126},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"a0891ac7c1dfa925a28ef240e39e1008867f7375","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test","clean":"rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","prepublishOnly":"npm run check && npm run clean && npm run build && npm run supply-chain:guard","supply-chain:guard":"tsx scripts/supply-chain-guard.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"overrides":{"basic-ftp":"6.0.1","protobufjs":"8.2.1","fast-xml-builder":"1.2.0"},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.17.0","description":"LiteLLM proxy provider extension for Pi","directories":{},"_nodeVersion":"26.5.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.1.7","@types/node":"^26.0.0","@biomejs/biome":"^2.4.15","@earendil-works/pi-ai":"^0.80.2","@typescript/native-preview":"7.0.0-dev.20260707.2","@kitlangton/terminal-control":"0.3.1","@earendil-works/pi-coding-agent":"^0.80.2"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_1.3.0_1784316715154_0.5850150348493375","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"pi-provider-litellm","version":"2.0.0","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@2.0.0","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./dist/index.js"]},"dist":{"shasum":"3418a1fb2a9a5f28250f201e9ae018f4b6522fd1","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-2.0.0.tgz","fileCount":25,"integrity":"sha512-5EhdCg+klvloilFVnB8kN6AXpkRSkOAg6Epi2wT1O/7m0HYFSx22IqKgHQ3F8yqrK/rKHbRPQKuJBXVVNSF3Vg==","signatures":[{"sig":"MEUCIAtbHfodyNG9u4x+lde7zEvT6yXT+YxzuwecQb2nf2CTAiEAgVuhJATwlpn6LvvCVdYD9XNDz/qVlGdKn0xDD3Pj2zw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":108027},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"b52b464fb309cff581ce1501ed8d458276dd240f","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test","clean":"rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","prepublishOnly":"npm run check && npm run clean && npm run build && npm run supply-chain:guard","supply-chain:guard":"tsx scripts/supply-chain-guard.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"overrides":{"basic-ftp":"6.0.1","protobufjs":"8.7.1","fast-xml-builder":"1.2.0"},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.17.0","description":"LiteLLM proxy provider extension for Pi","directories":{},"_nodeVersion":"26.5.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.1.7","@types/node":"^26.0.0","@biomejs/biome":"^2.4.15","@earendil-works/pi-ai":"^0.81.1","@typescript/native-preview":"7.0.0-dev.20260707.2","@kitlangton/terminal-control":"0.6.0","@earendil-works/pi-coding-agent":"^0.81.1"},"peerDependencies":{"@earendil-works/pi-ai":">=0.81.0","@earendil-works/pi-coding-agent":">=0.81.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_2.0.0_1784828186461_0.40160193626119","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"pi-provider-litellm","version":"2.0.1","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@2.0.1","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./dist/index.js"]},"dist":{"shasum":"5834a815445dfe3a4970948e73464585ddfd4db0","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-2.0.1.tgz","fileCount":25,"integrity":"sha512-Kle6iLDTReTScYP9knYa2aRCTqEXMw5HDYejE7EZKC8lc/PsgwHOVhq9CLpSSE6aWq4lj3UZDUpwsKxsMbNraA==","signatures":[{"sig":"MEUCIQD04qE590BVSj7xhNEasqO8OwX6woQdBGgTSkdtPsuytgIgLr4+hNwUJv2buXPtUu7IS9nmLGsYmt/HPMkVDDrsv9c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":107940},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"c66369c57879f5688974bc978c26eae11c0fe2a7","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test","clean":"rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","prepublishOnly":"npm run check && npm run clean && npm run build && npm run supply-chain:guard","supply-chain:guard":"tsx scripts/supply-chain-guard.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"overrides":{"basic-ftp":"6.0.1","protobufjs":"8.7.1","fast-xml-builder":"1.2.0"},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.17.0","description":"LiteLLM proxy provider extension for Pi","directories":{},"_nodeVersion":"26.5.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.1.7","@types/node":"^26.0.0","@biomejs/biome":"^2.4.15","@earendil-works/pi-ai":"^0.81.1","@typescript/native-preview":"7.0.0-dev.20260707.2","@kitlangton/terminal-control":"0.6.0","@earendil-works/pi-coding-agent":"^0.81.1"},"peerDependencies":{"@earendil-works/pi-ai":">=0.81.0","@earendil-works/pi-coding-agent":">=0.81.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_2.0.1_1784927037922_0.32720517844026054","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"pi-provider-litellm","version":"2.0.2","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@2.0.2","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./dist/index.js"]},"dist":{"shasum":"500407804cb9f30769718afcc6723452116edfcd","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-2.0.2.tgz","fileCount":25,"integrity":"sha512-aGgP9zr32zuBgmHl8HAGkvKSLhE/XvNT3WySNj7V1PkBI3ofVXGUltuy/eI6Kq+C8bXDOmf2zJ7+iH7KddUK3A==","signatures":[{"sig":"MEUCIQCDjSlGjvyvROAl5xJw6MahVSGaUe0ZTZZiqfV3XGEV2gIgVSYHChY6sJdROUWsEJP9DDfAIKndUPRYoMrrXtzG7ys=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@2.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":109673},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"bc4f0e7e0222d33be9374c2e59148d03d0f3fa94","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test","clean":"rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","prepublishOnly":"npm run check && npm run clean && npm run build && npm run supply-chain:guard","supply-chain:guard":"tsx scripts/supply-chain-guard.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"overrides":{"basic-ftp":"6.0.1","protobufjs":"8.7.1","fast-xml-builder":"1.2.0"},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.17.0","description":"LiteLLM proxy provider extension for Pi","directories":{},"_nodeVersion":"26.5.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.1.7","@types/node":"^26.0.0","@biomejs/biome":"^2.4.15","@earendil-works/pi-ai":"^0.82.1","@typescript/native-preview":"7.0.0-dev.20260707.2","@kitlangton/terminal-control":"0.6.0","@earendil-works/pi-coding-agent":"^0.82.1"},"peerDependencies":{"@earendil-works/pi-ai":">=0.81.0","@earendil-works/pi-coding-agent":">=0.81.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_2.0.2_1785242466360_0.8706645664307793","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"pi-provider-litellm","version":"2.0.3","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@2.0.3","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./dist/index.js"]},"dist":{"shasum":"027c5b3818dc7d6eeec95c99bdce23505a487014","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-2.0.3.tgz","fileCount":25,"integrity":"sha512-sZnbk6fVzZArN17mqo9gKMFoNdM/9A7v5SObKzjzC1xFJEjwiy9S98ZK8lSyvsDLTa5UyjndCaVSoYgCskatEQ==","signatures":[{"sig":"MEQCIBKmnCO4yu6uMrmlnk8+aMoGUwZ00ouVDD9nPKIZJDwmAiBtPNrGA5jfhqvr9kiiHYC1rEqZspoqJvHiD4yyQVdY6w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@2.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":113045},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"3f40dd55771a6c9e15c98a9c6d9a54196fc84a20","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test","clean":"rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","prepublishOnly":"npm run check && npm run clean && npm run build && npm run supply-chain:guard","supply-chain:guard":"tsx scripts/supply-chain-guard.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"overrides":{"basic-ftp":"6.0.1","protobufjs":"8.7.1","fast-xml-builder":"1.2.0"},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.17.0","description":"LiteLLM proxy provider extension for Pi","directories":{},"_nodeVersion":"26.5.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.1.7","@types/node":"^26.0.0","@biomejs/biome":"^2.4.15","@earendil-works/pi-ai":"^0.82.1","@typescript/native-preview":"7.0.0-dev.20260707.2","@kitlangton/terminal-control":"0.6.0","@earendil-works/pi-coding-agent":"^0.82.1"},"peerDependencies":{"@earendil-works/pi-ai":">=0.81.0","@earendil-works/pi-coding-agent":">=0.81.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_2.0.3_1785757098277_0.3655024204384396","host":"s3://npm-registry-packages-npm-production"}},"2.0.4":{"name":"pi-provider-litellm","version":"2.0.4","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@2.0.4","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./dist/index.js"]},"dist":{"shasum":"352329606b5fe70f441ded3571020e47793d23a0","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-2.0.4.tgz","fileCount":25,"integrity":"sha512-w6MftW7nYpILaHJHfcvhMYc2NrqhjVtUvwYbC/NL3NTIcQOE7vtdUZjtV8XwQeAQ+IybMqXDOpXL8agFonz5lw==","signatures":[{"sig":"MEUCIQCPhatj3ETOg6r0GYECP0TqHuV1Tw2CZQ/BQiuI3TrzYAIgJsfZ4N5FXgtJCHX6BULfm8LCjTrsCsW9uXtNNzd3phA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@2.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":113086},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"f0516d0ea1c302981cfd50e2c49bb3ab03ad6533","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test","clean":"rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","prepublishOnly":"npm run check && npm run clean && npm run build && npm run supply-chain:guard","supply-chain:guard":"tsx scripts/supply-chain-guard.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"overrides":{"basic-ftp":"6.0.1","protobufjs":"8.7.1","fast-xml-builder":"1.2.0"},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.17.0","description":"LiteLLM proxy provider extension for Pi","directories":{},"_nodeVersion":"26.5.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.1.7","@types/node":"^26.0.0","@biomejs/biome":"^2.4.15","@earendil-works/pi-ai":"^0.83.0","@typescript/native-preview":"7.0.0-dev.20260707.2","@kitlangton/terminal-control":"0.6.0","@earendil-works/pi-coding-agent":"^0.83.0"},"peerDependencies":{"@earendil-works/pi-ai":">=0.81.0","@earendil-works/pi-coding-agent":">=0.81.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_2.0.4_1785764546149_0.7073117277183447","host":"s3://npm-registry-packages-npm-production"}},"2.0.5":{"name":"pi-provider-litellm","version":"2.0.5","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@2.0.5","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./dist/index.js"]},"dist":{"shasum":"b8e556c45a0573e6ca6b24551ea0f439566e43ec","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-2.0.5.tgz","fileCount":25,"integrity":"sha512-dfaQd0JYUcjR6bV/LjPVu8XxyaiFw7ZquzMpteJNxMpsMp+ZVCDA6AtCHKcA4bULwwkbzyxHwdtwPNwK8u9Erg==","signatures":[{"sig":"MEYCIQCMeejTFSKLESCedXxb2DcrQSZ8/GRhcns11q6tjyYe6gIhALMxHG/IpzBY8FPVvxhFsYfDdiDmDlOsgRzXR3nZPIcM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@2.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":115144},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"54365fd46a95e430e111f040ee23383362d29ff3","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test","clean":"rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","prepublishOnly":"npm run check && npm run clean && npm run build && npm run supply-chain:guard","supply-chain:guard":"tsx scripts/supply-chain-guard.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"overrides":{"undici":"8.9.0","basic-ftp":"6.0.1","protobufjs":"8.7.1"},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.17.0","description":"LiteLLM proxy provider extension for Pi","directories":{},"_nodeVersion":"26.5.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.1.7","@types/node":"^26.0.0","@biomejs/biome":"^2.4.15","@earendil-works/pi-ai":"^0.83.0","@typescript/native-preview":"7.0.0-dev.20260707.2","@kitlangton/terminal-control":"0.6.0","@earendil-works/pi-coding-agent":"^0.83.0"},"peerDependencies":{"@earendil-works/pi-ai":">=0.81.0","@earendil-works/pi-coding-agent":">=0.81.0"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_2.0.5_1785918606263_0.3570657660696388","host":"s3://npm-registry-packages-npm-production"}},"2.0.6":{"name":"pi-provider-litellm","version":"2.0.6","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@2.0.6","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./dist/index.js"]},"dist":{"shasum":"ed380e82053dec564a5adf0b515aeaa48a45cbf7","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-2.0.6.tgz","fileCount":25,"integrity":"sha512-uN0bplMigq8qtm8Mo9wXb2OGCXgBPckqYoSv22cIHpRkk1/i3qE718DTwMKQfF7OVlTuRZgYj+CUjm3SC3lb9g==","signatures":[{"sig":"MEQCIB6jKIc7mtNZYb6sYTVVGzdn0vbXlIOf4xfGrLgEVQJbAiBgGl4qW2m6EmXvHGGQ/IBDyrnsxRDHIssdfJMudu95Vg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@2.0.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":116831},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"cbad79aed008215518552d60979a614859d48367","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test","clean":"rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","prepublishOnly":"npm run check && npm run clean && npm run build && npm run supply-chain:guard","supply-chain:guard":"tsx scripts/supply-chain-guard.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"overrides":{"nanoid":"3.3.18","undici":"8.9.0","basic-ftp":"6.0.1","protobufjs":"8.7.1"},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.17.0","description":"LiteLLM proxy provider extension for Pi","directories":{},"_nodeVersion":"26.5.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.1.7","@types/node":"^26.0.0","@biomejs/biome":"^2.4.15","@earendil-works/pi-ai":"^0.84.2","@typescript/native-preview":"7.0.0-dev.20260707.2","@kitlangton/terminal-control":"0.6.0","@earendil-works/pi-coding-agent":"^0.84.2"},"peerDependencies":{"@earendil-works/pi-ai":">=0.81.0","@earendil-works/pi-coding-agent":">=0.81.0"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_2.0.6_1786741126947_0.8560951472290836","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"pi-provider-litellm","version":"2.1.0","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@2.1.0","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./dist/index.js"]},"dist":{"shasum":"40d264d2cc0027e817400e84f7365935bb5bde2c","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-2.1.0.tgz","fileCount":25,"integrity":"sha512-BRsXajpPkpHgTVE6+5rMV5Cg+tntsJ7HuPN66YaCzwmIFCrcKgnhefjZyGga9Fg8f7rUxb387H1Hy1A6wYiCHw==","signatures":[{"sig":"MEQCIF+OV5qEzLmiaVmSbhCSrY5oNV6jJ+HsACo2D1CFia/cAiA1SMwhmPCBAOPGqcp31byKVVg++Qhnmj3/JzQd2KULhg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@2.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":123108},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"78e632fd0ca2e5ee4eb974adb4ed942de1d099a5","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test","clean":"rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","prepublishOnly":"npm run check && npm run clean && npm run build && npm run supply-chain:guard","supply-chain:guard":"tsx scripts/supply-chain-guard.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"overrides":{"nanoid":"3.3.18","undici":"8.9.0","basic-ftp":"6.0.1","protobufjs":"8.7.1"},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.17.0","description":"LiteLLM proxy provider extension for Pi","directories":{},"_nodeVersion":"26.5.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.1.7","@types/node":"^26.0.0","@biomejs/biome":"^2.4.15","@earendil-works/pi-ai":"^0.84.2","@typescript/native-preview":"7.0.0-dev.20260707.2","@kitlangton/terminal-control":"0.6.0","@earendil-works/pi-coding-agent":"^0.84.2"},"peerDependencies":{"@earendil-works/pi-ai":">=0.81.0","@earendil-works/pi-coding-agent":">=0.81.0"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_2.1.0_1787058647773_0.002449656216597873","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"pi-provider-litellm","version":"2.2.0","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@2.2.0","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./dist/index.js"]},"dist":{"shasum":"50f3e32ce58181ea3ce33b534c48ba22705913ae","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-2.2.0.tgz","fileCount":23,"integrity":"sha512-XMuAZgpE0DSrV6HKy2bFGVerVvjqRNDxyGiLRcVYR3v3mW8s/gbSC60H4PIiXyG/DSRPQQVwTLbBNizOh2528A==","signatures":[{"sig":"MEUCIGCkbwyuv2YRGhiDEEr/vdDHI6NtJCpupHlo30UcqtJ9AiEArj9SNP6vfsNpMZlF34tauiCTuKR96hvYqstC+NWx+zI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@2.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":115818},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"133965934b506f6a816ae25eded0c13916262355","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test","clean":"rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","prepublishOnly":"npm run check && npm run clean && npm run build && npm run supply-chain:guard","supply-chain:guard":"tsx scripts/supply-chain-guard.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"overrides":{"nanoid":"3.3.18","undici":"8.9.0","basic-ftp":"6.0.1","protobufjs":"8.7.1"},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.17.0","description":"LiteLLM proxy provider extension for Pi","directories":{},"_nodeVersion":"26.5.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.1.7","@types/node":"^26.0.0","@biomejs/biome":"^2.4.15","@earendil-works/pi-ai":"^0.84.2","@typescript/native-preview":"7.0.0-dev.20260707.2","@kitlangton/terminal-control":"0.6.0","@earendil-works/pi-coding-agent":"^0.84.2"},"peerDependencies":{"@earendil-works/pi-ai":">=0.81.0","@earendil-works/pi-coding-agent":">=0.81.0"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_2.2.0_1787243145881_0.9535990165804038","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"pi-provider-litellm","version":"2.2.1","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@2.2.1","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./dist/index.js"]},"dist":{"shasum":"766e4a6415f0993170eb6d18eb437b6024661bcf","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-2.2.1.tgz","fileCount":23,"integrity":"sha512-gDTnbB1GZN/bioxzS+PNMj2xu/37uO1livtb7G87Ug7rRLlJlz6flHqjnVxugyEBsnU7AWF8O9bkepp3jtn49g==","signatures":[{"sig":"MEYCIQCe6DVZS78NfeNuxeOCbSMDi7b08m1O7NbGUlKprpMnpwIhAKC3wW9DmfpS62ClTvBk4qI9J46t1GRsDZTceFyk+I3z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@2.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":117775},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"8aa86de30ec3b177a604d355c35abee919c82a2a","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test","clean":"rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","prepublishOnly":"npm run check && npm run clean && npm run build && npm run supply-chain:guard","supply-chain:guard":"tsx scripts/supply-chain-guard.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"overrides":{"nanoid":"3.3.18","undici":"8.9.0","basic-ftp":"6.0.1","protobufjs":"8.7.1"},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.17.0","description":"LiteLLM proxy provider extension for Pi","directories":{},"_nodeVersion":"26.5.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.1.7","@types/node":"^26.0.0","@biomejs/biome":"^2.4.15","@earendil-works/pi-ai":"^0.84.2","@typescript/native-preview":"7.0.0-dev.20260707.2","@kitlangton/terminal-control":"0.6.0","@earendil-works/pi-coding-agent":"^0.84.2"},"peerDependencies":{"@earendil-works/pi-ai":">=0.81.0","@earendil-works/pi-coding-agent":">=0.81.0"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_2.2.1_1787314205889_0.6586185971091003","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"pi-provider-litellm","version":"2.3.0","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@2.3.0","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./dist/index.js"]},"dist":{"shasum":"fd4d8a99f1f71fb008ff9516c7d382bdd50cd8d9","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-2.3.0.tgz","fileCount":23,"integrity":"sha512-SGE3XxIUXvnu14ElSSPEvyyTnPi+uwd6zaAb7Z+unmlV0Gu8WTo4w+qq7SSg1ho7tpCs/nDheujGjxWJ16AK2g==","signatures":[{"sig":"MEUCIQDDPEqdcWVbnTftP1j4duAJlyDIrMmuqWY4FIWa/pac+gIgdeeMzes5/bHd0xAhBMbLeDTvMb7WyP12nHl4paEEMG8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@2.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":123091},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"4266e2a13e81027220b744d6602d56b93def8942","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run --dir tests","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test","clean":"rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","prepublishOnly":"npm run check && npm run clean && npm run build && npm run supply-chain:guard","supply-chain:guard":"tsx scripts/supply-chain-guard.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"overrides":{"nanoid":"3.3.18","undici":"8.9.0","basic-ftp":"6.0.1","protobufjs":"8.7.1"},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.17.0","description":"LiteLLM proxy provider extension for Pi","directories":{},"_nodeVersion":"26.5.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.1.7","@types/node":"^26.0.0","@biomejs/biome":"^2.4.15","@earendil-works/pi-ai":"^0.84.2","@typescript/native-preview":"7.0.0-dev.20260707.2","@kitlangton/terminal-control":"0.6.0","@earendil-works/pi-coding-agent":"^0.84.2"},"peerDependencies":{"@earendil-works/pi-ai":">=0.81.0","@earendil-works/pi-coding-agent":">=0.81.0"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_2.3.0_1787739207434_0.7828041781637827","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"pi-provider-litellm","version":"3.0.0","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@3.0.0","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./src/index.ts"]},"dist":{"shasum":"c793b78acf9bdb1482e40616632a6f2567d4dfac","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-3.0.0.tgz","fileCount":16,"integrity":"sha512-LHg/tVPgJZjJr8BSfFSnTaq6LYIxL2L31kn5WK9S2Zahp0TlRfWGKAJn+c/zcy2Wv8Z6kvt+OnUxRzPgIbo8LA==","signatures":[{"sig":"MEQCIFb/guB1qnNAFL/rlh55YWuPijZ8UwFeFKKzHRoK90nFAiBsAfiZL/cdK+hiWl4BoMb1IPl9ZYcqLV29yRIrl9MzAw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIF33j9K05Sc9TNnbTPq6gvc8xwBAppkMhsbohBV/rxFkAiEA/e9XNLgEPEmsUV+rT8zdcxI4k0NnOAQtwH1PoT4A1B0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@3.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":335578},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"7ead21bad04e9c936d0f9392ed331566edd2e5e1","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run --dir tests","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run supply-chain:guard","clean":"rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","probe:proxy":"tsx scripts/probe-proxy.ts","prepublishOnly":"npm run check && npm run clean && npm run build && npm run supply-chain:guard","supply-chain:guard":"tsx scripts/supply-chain-guard.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"overrides":{"nanoid":"3.3.18","undici":"8.9.0","basic-ftp":"6.0.1","protobufjs":"8.7.1"},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.17.0","description":"LiteLLM proxy provider extension for Pi","directories":{},"_nodeVersion":"26.5.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^5.0.0","typebox":"1.3.30","@types/node":"^26.0.0","@biomejs/biome":"^2.4.15","es-module-lexer":"^3.0.2","@earendil-works/pi-ai":"^0.85.1","@typescript/native-preview":"7.0.0-dev.20260707.2","@kitlangton/terminal-control":"1.2.1","@earendil-works/pi-coding-agent":"^0.85.1"},"peerDependencies":{"@earendil-works/pi-ai":">=0.83.0","@earendil-works/pi-coding-agent":">=0.83.0"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_3.0.0_1789470328584_0.797820921331613","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"pi-provider-litellm","version":"3.0.1","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@3.0.1","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./src/index.ts"]},"dist":{"shasum":"9d34367a7d913b5bfa035e91e3060ca4e74d9c55","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-3.0.1.tgz","fileCount":16,"integrity":"sha512-ht+0Gc+9H/y9I/RC4witA4uxPHswhJBWUOYT3q5V21E3zq7NoxspVjPsSgBrpmnRejYFilC4SMkAYVs8ed/nMA==","signatures":[{"sig":"MEQCIE5yz0D5Uv97VAdzxRup2Y41emXs+sA9+Rte0uAXQNnwAiBYNXD+k5KnQat0ufngpNlOpDbsPRnhpVpLw63cekjqPA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGl6UIMTNk4JBz/hBTqLqD/OBdyMFo+vykYJb/5hlz4TAiAaQz9TywE+CT5h6cXE7HVYvbZgzBnIYLiutTNmWGmlbA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@3.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":338244},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"b7f0df4e7ca5ae3e97037c14a5b1cb976cf83cbb","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run --dir tests","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run supply-chain:guard","clean":"rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","probe:proxy":"tsx scripts/probe-proxy.ts","prepublishOnly":"npm run check && npm run clean && npm run build && npm run supply-chain:guard","supply-chain:guard":"tsx scripts/supply-chain-guard.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"overrides":{"nanoid":"3.3.18","undici":"8.9.0","basic-ftp":"6.0.1","protobufjs":"8.7.1"},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.17.0","description":"LiteLLM proxy provider extension for Pi","directories":{},"_nodeVersion":"26.5.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^5.0.0","typebox":"1.3.30","@types/node":"^26.0.0","@biomejs/biome":"^2.4.15","es-module-lexer":"^3.0.2","@earendil-works/pi-ai":"^0.85.1","@typescript/native-preview":"7.0.0-dev.20260707.2","@kitlangton/terminal-control":"1.2.1","@earendil-works/pi-coding-agent":"^0.85.1"},"peerDependencies":{"@earendil-works/pi-ai":">=0.83.0","@earendil-works/pi-coding-agent":">=0.83.0"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_3.0.1_1789519875919_0.721800490898312","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"pi-provider-litellm","version":"3.1.0","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","_id":"pi-provider-litellm@3.1.0","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"homepage":"https://github.com/balcsida/pi-provider-litellm","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./src/index.ts"]},"dist":{"shasum":"ec54393dafadb811bf3719648dc3916aff405694","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-3.1.0.tgz","fileCount":16,"integrity":"sha512-yGWXjWuoTrpXwcbgX5UrMQFgRzRPRLbw47aAwQzHDccRk2yJRj9VjcHG7sz+hts17gGdJ0rg3Gn9VSPYmGNryw==","signatures":[{"sig":"MEUCIQDzCETnppzm7Q2Q6IFuza+IraMc6rO3lD3unsZib1SLEAIgGxTEfOUfNuapGxUqm6409sPARdGezUqPnEtmNoiafb0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQC5MNfIlmDrToa08yIQG4UXi8uwYy3ScGP7JCj/Z9SaygIhAOgwwzF0OmBbf0jF6a3QHWD9RzqAhDQFVOs0HecD/mwF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@3.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":342189},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"c856e0f779f5c84dc8a4172c094df2b018618310","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run --dir tests","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run supply-chain:guard","clean":"rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","probe:proxy":"tsx scripts/probe-proxy.ts","prepublishOnly":"npm run check && npm run clean && npm run build && npm run supply-chain:guard","supply-chain:guard":"tsx scripts/supply-chain-guard.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"overrides":{"nanoid":"3.3.18","undici":"8.9.0","basic-ftp":"6.0.1","protobufjs":"8.7.1"},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.17.0","description":"LiteLLM proxy provider extension for Pi","directories":{},"_nodeVersion":"26.5.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^5.0.0","typebox":"1.3.30","@types/node":"^26.0.0","@biomejs/biome":"^2.4.15","es-module-lexer":"^3.0.2","@earendil-works/pi-ai":"^0.85.1","@typescript/native-preview":"7.0.0-dev.20260707.2","@kitlangton/terminal-control":"1.2.1","@earendil-works/pi-coding-agent":"^0.85.1"},"peerDependencies":{"@earendil-works/pi-ai":">=0.83.0","@earendil-works/pi-coding-agent":">=0.83.0"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-provider-litellm_3.1.0_1789663464887_0.06999673105038284","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"pi":{"image":"https://raw.githubusercontent.com/balcsida/pi-provider-litellm/refs/heads/main/assets/pi_litellm_gallery.png","extensions":["./src/index.ts"]},"_id":"pi-provider-litellm@3.2.0","bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"dist":{"shasum":"3b0a7ecd972aaa91d72bb373c7e319b481651cd7","tarball":"https://registry.npmjs.org/pi-provider-litellm/-/pi-provider-litellm-3.2.0.tgz","fileCount":16,"integrity":"sha512-wnNS8Qf34ew00ksfu9KCLCY30TbSf0jocYi5arm3aavXl4Ylg4TgdaNpgE+SdZKUqcNJSmOffOrjB71Qf43n4A==","signatures":[{"sig":"MEUCIQCC9tk2VcvOO2NT0NiNsSQ8j3OA+2gIBpzQbG4Uw16NFQIgA75jp0YTJ/659pVg5PTFs0c1K92xJSofbp1gdEgSKDU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIC0L/J+xzLWKlGFD09qkvjPcDC9hoRm9eXFyZ43yyWYHAiEAyizyT5BoYKFKviwJVMZyzs0BvRecnIsnRa3Ip7qYgFY="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/pi-provider-litellm@3.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":358812},"name":"pi-provider-litellm","type":"module","author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"engines":{"node":">=22.19.0"},"gitHead":"fe4afd6fed0376b65ce3a5ad8ae91d633948a369","license":"MIT","scripts":{"dev":"tsgo -p tsconfig.build.json --watch --preserveWatchOutput","lint":"biome check --error-on-warnings .","test":"vitest --run --dir tests","build":"tsgo -p tsconfig.build.json","check":"npm run lint && npm run typecheck && npm test && npm run supply-chain:guard","clean":"rm -rf dist","format":"biome check --write .","typecheck":"tsgo --noEmit","probe:proxy":"tsx scripts/probe-proxy.ts","prepublishOnly":"npm run check && npm run clean && npm run build && npm run supply-chain:guard","supply-chain:guard":"tsx scripts/supply-chain-guard.ts"},"version":"3.2.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:48b61435-3273-4e55-a7d4-00ca92bc9b38"}},"homepage":"https://github.com/balcsida/pi-provider-litellm","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"overrides":{"nanoid":"3.3.18","undici":"8.9.0","basic-ftp":"6.0.1","protobufjs":"8.7.1"},"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"_npmVersion":"11.17.0","description":"LiteLLM proxy provider extension for Pi","directories":{},"maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"_nodeVersion":"26.5.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^5.0.0","typebox":"1.3.30","@types/node":"^26.0.0","@biomejs/biome":"^2.4.15","es-module-lexer":"^3.0.2","@earendil-works/pi-ai":"^0.85.1","@typescript/native-preview":"7.0.0-dev.20260707.2","@kitlangton/terminal-control":"1.2.1","@earendil-works/pi-coding-agent":"^0.85.1"},"peerDependencies":{"@earendil-works/pi-ai":">=0.83.0","@earendil-works/pi-coding-agent":">=0.83.0"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-provider-litellm_3.2.0_1790180704904_0.46753463657177896"}}},"time":{"created":"2026-04-28T09:09:40.429Z","modified":"2026-09-23T16:25:05.460Z","0.1.1":"2026-04-28T09:09:40.568Z","0.1.2":"2026-05-11T10:06:59.258Z","0.1.3":"2026-05-11T10:35:26.084Z","0.1.4":"2026-05-11T10:41:20.963Z","1.2.0":"2026-05-11T15:31:35.928Z","1.2.1":"2026-05-13T12:05:36.392Z","1.2.2":"2026-05-19T15:15:46.522Z","1.2.3":"2026-05-26T22:05:47.868Z","1.2.4":"2026-06-07T18:01:21.511Z","1.2.5":"2026-06-09T15:42:24.980Z","1.2.6":"2026-06-10T08:48:56.512Z","1.2.7":"2026-06-10T23:04:17.975Z","1.2.8":"2026-06-18T07:24:37.393Z","1.2.9":"2026-07-13T13:37:17.430Z","1.3.0":"2026-07-17T19:31:55.303Z","2.0.0":"2026-07-23T17:36:26.646Z","2.0.1":"2026-07-24T21:03:58.062Z","2.0.2":"2026-07-28T12:41:06.494Z","2.0.3":"2026-08-03T11:38:18.417Z","2.0.4":"2026-08-03T13:42:26.297Z","2.0.5":"2026-08-05T08:30:06.461Z","2.0.6":"2026-08-14T20:58:47.095Z","2.1.0":"2026-08-18T13:10:47.902Z","2.2.0":"2026-08-20T16:25:46.025Z","2.2.1":"2026-08-21T12:10:06.046Z","2.3.0":"2026-08-26T10:13:27.573Z","3.0.0":"2026-09-15T11:05:28.675Z","3.0.1":"2026-09-16T00:51:16.011Z","3.1.0":"2026-09-17T16:44:24.989Z","3.2.0":"2026-09-23T16:25:05.006Z"},"bugs":{"url":"https://github.com/balcsida/pi-provider-litellm/issues"},"author":{"name":"Dávid Balatoni","email":"balcsida@gmail.com"},"license":"MIT","homepage":"https://github.com/balcsida/pi-provider-litellm","keywords":["pi-mono","pi-package","litellm","llm","extension","provider","proxy"],"repository":{"url":"git+https://github.com/balcsida/pi-provider-litellm.git","type":"git"},"description":"LiteLLM proxy provider extension for Pi","maintainers":[{"name":"balcsida","email":"balcsida@gmail.com"}],"readme":"# pi-provider-litellm\n\nLiteLLM proxy native Provider extension for [Pi](https://pi.dev). Pi 0.83.0+ is required.\n\nDiscovers models from self-hosted LiteLLM proxies and registers them under Pi providers. The default provider is `litellm`; optional aliases can register additional LiteLLM providers with separate credentials. Supports `/login litellm`, LiteLLM MCP tools, LiteLLM Skills Gateway prompt injection, and Google ADC token auth. Tries `/model/info` first (admin endpoint with rich metadata), falls back to `/v1/models` (OpenAI-compatible) on 401/403/404, then tries `/health` plus per-endpoint `/model/info` for older LiteLLM proxies.\n\n## Install\n\n```bash\npi install npm:pi-provider-litellm\n```\n\nPi fetches the package from npm and registers it. Add `-l` to install into project settings (`.pi/settings.json`) instead of global.\n\nTo try it without installing (one-off, current run only):\n\n```bash\npi -e npm:pi-provider-litellm\n```\n\n<details>\n<summary>Alternative: install from source</summary>\n\n```bash\ngit clone https://github.com/balcsida/pi-provider-litellm.git ~/.pi/agent/extensions/pi-provider-litellm\n```\n\nPi loads the TypeScript source entrypoint declared in `package.json` `pi.extensions`, so a source install needs no\nbuild step and no `node_modules`. Install dependencies only to run the test suite or the local checks.\n\nThe previously published 2.2.0 package was also importable as `pi-provider-litellm` from JavaScript or TypeScript. The source-only package no longer exposes that library import; it is supported only as a Pi extension.\n\n</details>\n\n## Configure\n\n### Option A — interactive login\n\nInside pi:\n\n```\n/login litellm\n```\n\nTo configure an API key, run `/login`, choose `Sign in with an API key`, then choose `LiteLLM API key`. With `/login litellm`, choose `Sign in with an API key` directly.\n\nYou'll be prompted for the base URL and API key. Credentials are persisted to `~/.pi/agent/auth.json`.\n\nIf a proxy URL is already known — from `providers.<name>.baseUrl`, `LITELLM_BASE_URL`, or a previous login — pi offers it as the first option instead of asking you to retype it. Pick `Enter a different URL…` to point at another proxy.\n\n#### Enterprise SSO login\n\nIf your LiteLLM proxy supports SSO/OAuth authentication, Pi selects its supported browser login flow automatically:\n\n1. Run `/login litellm` inside pi and select `Sign in with LiteLLM SSO`\n2. Confirm the offered proxy URL, or enter one if this is the first login\n3. Complete sign-in in the browser Pi opens, then return to Pi\n\nPi first checks `/.well-known/litellm-cli-auth`. A proxy exposing the supported CLI-auth contract uses authorization code + PKCE (`S256`) with a temporary `127.0.0.1` callback; the browser must run on the same machine as Pi. Advertised endpoints must stay on the proxy's origin, and discovery, registration, and token requests do not follow HTTP redirects. Invalid discovery stops login.\n\nPi stores PKCE access and refresh tokens in `~/.pi/agent/auth.json` with file mode `0600`, refreshes automatically, and saves each rotated token pair. Temporary network failures or HTTP 429/5xx responses allow reuse of the existing access token only until its exact expiry. Rejected or revoked refresh credentials require `/login litellm` again.\n\nIf discovery returns 404, Pi uses `/sso/cli/start`: confirm the verification code in the browser, then select a team in Pi if prompted. Pi polls for the short-lived CLI token and uses its advertised lifetime, falling back to `LITELLM_CLI_JWT_EXPIRATION_HOURS` or LiteLLM's 24-hour default on older proxies. Only LiteLLM versions that gate this older CLI SSO flow need `EXPERIMENTAL_UI_LOGIN=True` on the proxy.\n\nIf `/sso/cli/start` returns 404 or 405, copy the token from the LiteLLM UI and paste it into Pi, with an optional virtual-key exchange. Pi reads JWT expiry claims and prompts for login when re-authentication is required.\n\nTokens are stored in Pi's local file, not an OS keychain. `/logout litellm` deletes the local credential only; logging out or signing in again does not revoke the previous session on the proxy because Pi has no provider revocation hook.\n\n### Option B — environment variables\n\n```bash\nexport LITELLM_BASE_URL=\"https://litellm.your-domain.com\"\nexport LITELLM_API_KEY=\"sk-...\"\n```\n\nStored pi credentials for `litellm` take precedence over `LITELLM_API_KEY`; the environment key is used when no saved credential exists. `LITELLM_BASE_URL` is used when no saved login base URL exists. Chat Completions and Responses models use the proxy root plus `/v1`; native Messages uses the proxy root directly.\n\n### Multiple LiteLLM provider aliases\n\nAdd alias providers in `~/.pi/agent/settings.json` under `litellm.providers`. Each alias is registered as a separate Pi provider name, so models appear as `litellm/model-id` and `litellm-anthropic/model-id`.\n\n```json\n{\n  \"litellm\": {\n    \"providers\": {\n      \"litellm-anthropic\": {\n        \"baseUrl\": \"https://litellm.your-domain.com\",\n        \"apiKey\": \"$LITELLM_CLAUDE_KEY\",\n        \"headers\": \"$LITELLM_HEADERS\"\n      }\n    }\n  }\n}\n```\n\nYou can also override the default provider through the same shape:\n\n```json\n{\n  \"litellm\": {\n    \"providers\": {\n      \"litellm\": {\n        \"baseUrl\": \"https://litellm.your-domain.com\",\n        \"apiKey\": \"$LITELLM_API_KEY\",\n        \"headers\": \"$LITELLM_HEADERS\"\n      },\n      \"litellm-anthropic\": {\n        \"baseUrl\": \"https://litellm.your-domain.com\",\n        \"apiKey\": \"$LITELLM_CLAUDE_KEY\",\n        \"headers\": \"$LITELLM_HEADERS\"\n      }\n    }\n  }\n}\n```\n\nProvider fields:\n\n| Field | Default | Effect |\n|---|---|---|\n| `baseUrl` | `LITELLM_BASE_URL` for `litellm`; required for aliases | LiteLLM proxy URL, with or without `/v1`. Must be a full `http`/`https` URL; a provider with no resolvable base URL exposes no models (see [Model host enforcement](#model-host-enforcement)) |\n| `apiKey` | `LITELLM_API_KEY_HELPER`/`LITELLM_API_KEY` for `litellm`; required for aliases | Pi config value for this provider's key. Use `$ENV_VAR`, `${ENV_VAR}`, `!command`, or a literal key. Escape a literal `$` as `$$`. |\n| `headers` | `$LITELLM_HEADERS` for `litellm`; unset for aliases | JSON string env reference or inline object of request headers |\n| `displayName` | provider name | Label shown in Pi UI |\n| `enabled` | `true` | Set `false` to skip an alias |\n| `allowInsecureHttp` | `false` | Set `true` to permit plaintext HTTP for this provider, for example `http://host.docker.internal`. Credentials and request data will not be encrypted. Loopback HTTP works without this setting. |\n\n`/login litellm` and Google ADC token auth remain scoped to the default `litellm` provider. Aliases use their configured `apiKey` or manually stored auth entries matching the alias name.\n\n### Optional LiteLLM features\n\nLiteLLM Skills and MCP integration are enabled by default. Disable either feature globally in `~/.pi/agent/settings.json`:\n\n```json\n{\n  \"litellm\": {\n    \"skills\": {\n      \"enabled\": false\n    },\n    \"mcp\": {\n      \"enabled\": false\n    }\n  }\n}\n```\n\nSetting `skills.enabled` to `false` disables the Skills Gateway management tools, skill fetching, and system-prompt injection. Setting `mcp.enabled` to `false` disables LiteLLM MCP discovery and tool registration. Restart Pi after changing these settings so previously registered tools are removed.\n\nTreat the configured LiteLLM proxy as trusted: Skills can add instructions to the system prompt, and MCP can expose tools the agent may call. Disable these integrations when the proxy, its administrators, or its configured content are not fully trusted.\n\n## Use\n\n```\n/model\n```\n\nTo refresh catalogs on demand, run `/litellm-refresh` for every configured LiteLLM provider, or `/litellm-refresh <provider>` for one alias. It works with `PI_OFFLINE` set, which stops Pi's own `/model` refresh from contacting the network. It contacts only the configured proxies: `LITELLM_OFFLINE=1` and `LITELLM_DISCOVERY_TIMEOUT_MS=0` still disable it, and models.dev enrichment stays off under `PI_OFFLINE`. Each provider reports its model count, the failure, or missing credentials. With LiteLLM MCP enabled, the refresh also re-checks that provider's MCP tools.\n\nEvery request routed through a configured LiteLLM provider includes Pi's canonical session ID in the\n`x-litellm-session-id` header. This groups Chat Completions, Responses, and native Messages requests in LiteLLM without\nadding transport-specific fields to request bodies.\n\n## Model transport\n\nA `/model/info` route group uses native Anthropic `/v1/messages` only when every deployment explicitly reports Chat mode, identifies a Claude backend through an Anthropic-, Bedrock-, or Vertex-capable adapter, and every declared backend identity resolves the same Anthropic compatibility policy. A `claude-<name>-<major>-<minor>` backend id resolves through its `claude-<name>-<major>` entry when the exact id is absent; an unknown generation stays on Chat Completions. When `supported_endpoints` is present, it must include `/v1/messages`; an explicit endpoint list without it keeps the group on Chat Completions. An unresolved routing or base-model identity denies native Messages rather than being discarded from the unanimity check. Mixed-generation Claude groups can use Messages when their serializer policies match, with reasoning levels restricted to their common supported set. Groups with incompatible policies, mixed families, or unknown backend evidence remain on Chat Completions; unanimous explicit Responses mode takes precedence. Routes discovered through `/health` never select native Messages: Messages candidates are downgraded to Chat Completions with reasoning controls closed, while correlated Responses detail remains on Responses. Evidence-free `/v1/models` and wholly health-only `/health` groups take transport and presentation metadata from the bounded Pi catalog lookup: `openai-responses` when the catalog says so, otherwise Chat Completions. They expose no speculative reasoning selector and never select native Messages. Catalog identity such as Amazon Bedrock remains separate from the selected wire protocol.\n\nNative Messages authenticates with `x-api-key`; every transport carries the `x-litellm-session-id` header described above.\n\n## Optional environment variables\n\n| Variable | Default | Effect |\n|---|---|---|\n| `LITELLM_API_KEY_HELPER` | unset | Command that prints a fresh LiteLLM bearer token. Takes precedence over `LITELLM_API_KEY`. The extension runs it while resolving request auth, and Pi's per-request auth path is uncached, so rotating/short-lived tokens stay fresh. |\n| `LITELLM_HEADERS` | unset | JSON object of extra headers sent to LiteLLM provider, discovery, MCP, and Skills Gateway requests. Provider aliases can use it with `\"headers\": \"$LITELLM_HEADERS\"`. |\n| `LITELLM_GCLOUD_TOKEN_AUTH` | unset | If set to a non-empty value other than `0`, use Google Application Default Credentials as the LiteLLM bearer token source. This takes precedence over `LITELLM_API_KEY_HELPER` and `LITELLM_API_KEY` when no stored `/login litellm` credential exists. |\n| `GOOGLE_APPLICATION_CREDENTIALS` | Google default ADC path | Optional path to an ADC JSON file used by `LITELLM_GCLOUD_TOKEN_AUTH`. If unset, the extension checks the default gcloud ADC locations. |\n| `LITELLM_OFFLINE` | unset | If `1`, disable all model and MCP discovery, including post-login discovery; use cached models only when their stored canonical proxy root exactly matches the active credential root, including any path prefix. URL-standard host casing and default ports are canonicalized, but paths remain case-sensitive. |\n| `PI_OFFLINE` | unset | Pi documents it as disabling automatic network activity, including model catalog refreshes. Through Pi 0.87.1, any set value (including `0` or an empty string) disables startup model discovery and `/model` network refreshes. Run `/litellm-refresh`, or unset it, to discover; cached models can still be used offline. |\n| `LITELLM_DISCOVERY_TIMEOUT_MS` | `5000` | Background and explicit discovery fetch timeout in ms; `0` disables automatic discovery |\n| `LITELLM_CLI_JWT_EXPIRATION_HOURS` | `24` | CLI SSO token lifetime fallback for older proxies whose poll response omits `expires_in`; mirror a non-default proxy setting locally |\n| `LITELLM_VERBOSE_DISCOVERY` | unset | If `1`, enable progress messages during model and MCP discovery (login, refresh, startup), including startup skip reasons, defaulted `/model/info` context windows, and MCP prepared/registered/dropped counts. Progress messages are off by default; MCP safety diagnostics (see below) are always reported regardless of this setting |\n| `LITELLM_DEFAULT_CONTEXT_WINDOW` | `128000` | Context window assumed when neither LiteLLM's `/model/info` nor the catalog reports `max_input_tokens`. Set a positive integer for proxies whose custom aliases carry no metadata; an unset or unusable value keeps 128K |\n| `LITELLM_MODELS_DEV` | unset | If `1`, enrich discovered metadata (limits, prices, effort lists) from models.dev, cached for 28 days in `litellm-models-dev.json`. Off by default because LiteLLM's `/model/info` is authoritative; use it when LiteLLM's model map lacks a model's metadata |\n\nOnly use a trusted `LITELLM_API_KEY_HELPER` or `!command`. Prefer an absolute executable path, keep secrets out of command arguments, and print only the token to stdout without logging it to stderr.\n\nWith `LITELLM_VERBOSE_DISCOVERY=1`, `/model/info` discovery reports published routes whose context window uses the fallback assumption (including wildcard expansions) on one line with the selected value, a count, and a sample of escaped route names. Each route is reported once per process. Explicit or authoritative catalog limits do not trigger it, even when numerically equal to the default. Set `model_info.max_input_tokens` on every deployment in the route to provide real limits; this diagnostic does not change discovery limits or routing.\n\n`LITELLM_DISCOVERY_TIMEOUT_MS=0` disables automatic and explicit refresh model discovery. It does not replace the base URL or API key settings required to send requests when you are not using `/login litellm`.\n\n### Google ADC token auth\n\nWhen your LiteLLM proxy accepts Google OAuth access tokens, you can let the extension refresh tokens from Application Default Credentials:\n\n```bash\ngcloud auth application-default login\nexport LITELLM_BASE_URL=\"https://litellm.your-domain.com\"\nexport LITELLM_GCLOUD_TOKEN_AUTH=1\n```\n\nOnly `authorized_user` ADC files are supported. Service account JSON files are rejected with a warning. An `authorized_user` file with a missing, empty, or whitespace-only `client_id`, `client_secret`, or `refresh_token` is rejected before any token exchange. Tokens are refreshed in-process when Pi resolves request auth and cached in memory for 50 minutes.\n\n## LiteLLM MCP tools\n\nIf your LiteLLM proxy exposes MCP REST endpoints, this extension discovers tools from:\n\n- `GET /mcp-rest/tools/list`\n- `POST /mcp-rest/tools/call`\n\nAn MCP access denial pauses discovery until a successful `/login litellm` (SSO or API key); an alias provider, which has no login, stays paused until its credentials, base URL, or headers change. The pause survives restarts in `~/.pi/agent/litellm-mcp-pauses/`, scoped to the proxy, login, and headers with salted credential fingerprints. A new API key or header configuration has its own scope. Each explicit login creates a fresh opaque `litellmMcpSession` identifier in Pi's stored credential, even when the key is unchanged; automatic OAuth refresh preserves that identifier and its pause. Older Pi processes cannot pause the new login. Pause files contain no credentials or proxy error text. Model discovery and chat continue normally. Grant MCP access on the proxy before signing in again. An explicit `litellm.mcp.enabled: false` setting remains disabled after login.\n\nEach discovered tool is registered as a native Pi tool named `mcp_<server>_<tool>_<hash>`, at most 64 characters, using only `[a-z0-9_]`. The trailing 10-character hash is derived from the tool's identity (`server_id`, `server_name`, `name`) and is always present, so a name depends only on that tool and never on which other tools happen to be in the same catalog — adding or removing a sibling never renames a survivor. When the readable prefix would overflow 64 characters it is truncated from the right, so a long server name can leave little or none of the tool name visible; the hash is what distinguishes such tools. Tools from different servers therefore never overwrite each other, and exact duplicate identities are registered once. Each alias provider discovers its own catalog: its tools are named `mcp_<alias>_<server>_<tool>_<hash>`, with the alias name also folded into the hash, and are called with that alias's credentials, so two providers exposing the same server never replace each other's tools. The default `litellm` provider keeps unprefixed names, and diagnostics for an alias read `LiteLLM MCP (\"<alias>\"):`.\n\nMCP discovery runs once for every configured provider before the first agent turn (so `-p` and other non-interactive modes get MCP tools), after Pi refreshes LiteLLM models, and after `/login litellm`; extension activation never waits for it. Discovery accepts at most a 5 MiB response and registers at most 512 tools. The response must be a JSON array of tools or an object with a `tools` array; an `unexpected_error` or unknown non-null `error` in the object envelope, an object without `tools`, and every other shape are reported as discovery failures rather than as empty catalogs. Failure reports use extension-owned text and never include LiteLLM's proxy-supplied tag or `message`. A `partial_failure` envelope keeps and registers the returned tools while reporting one bounded generated diagnostic. Each tool is isolated during normalization, so one bad tool never hides valid siblings. A tool is accepted only when its schema has a root of exactly `\"type\": \"object\"` (a bare `properties` object with no `type`, or a type union such as `[\"object\",\"null\"]`, is refused), plain-object `properties`, at most 16 levels of JSON nesting (about eight nested schema objects when each level uses `properties`), and a serialized size of at most 64 KiB. Descriptions are limited to 4 KiB, and tool labels and result metadata to 256 bytes, each with a truncation marker.\n\n### Which schema a tool ends up with\n\nA tool registers with one of two parameter shapes.\n\n- **The extension-owned `args` envelope** — a single object-valued `args` property, required at execution. Used when the proxy supplied no schema at all (absent or `{}`), and used as a safe substitute when the supplied schema could not be proven safe (below). Nothing in this shape originates from the proxy.\n- **The supplied schema, passed through unchanged.** Pi validates arguments against it before the call and may first coerce supported primitive values: omitting a property listed in `required` is rejected, while a value of the wrong type is rejected only when it cannot be coerced to the declared type. Unknown extra properties are accepted by default, but an `additionalProperties` schema can validate and coerce them, and constraints such as `additionalProperties: false` or `unevaluatedProperties: false` can reject them. Passing through is not the same as skipping validation. A schema of exactly `{\"type\": \"object\"}` with no `properties` therefore accepts any arguments at the top level rather than nesting them under `args`. Real schema properties named `args`, `properties`, or `required` remain intact.\n\nAn `inputSchema` that is present but is not a JSON object (a string, number, or array) is a malformed tool and is dropped as `invalid-schema`. It is not treated as schemaless, so a proxy emitting junk cannot obtain the permissive envelope.\n\n### Regexes and references in supplied schemas\n\n`pattern`, and the keys of `patternProperties`, are compiled into a backtracking regular expression and executed with no time limit, so a proxy-supplied expression can block Pi for minutes on a single tool call. A `$ref` resolves an arbitrary JSON pointer, which means an expression can be parked under any key at all, including data-only positions such as `default` or `examples`. Enumerating \"positions where a subschema may appear\" is therefore not a sound defence.\n\nInstead, the whole supplied document is walked — every key and every value — and the tool keeps its schema only if that walk completes and finds nothing dangerous. A walk stops short, and the tool is degraded, when it finds a `pattern` or `patternProperties` keyword at all — whatever its value type, since refusing to vouch for it does not depend on an upstream type guard staying as it is — a `$dynamicRef` or `$recursiveRef`, a `$ref` pointing outside the document, or a graph too deep or too large to inspect within budget. A local `#/...` pointer is accepted only when the walk covers its target *and* that target resolves to something usable as a subschema, with the reference chain proven acyclic — covering the document proves no expression hides behind a pointer, but not that the pointer names a schema at all. A pointer to a non-schema (`#/description`), a pointer with no target (`#/$defs/missing`), an `$anchor` reference (`#name`), and a mutual `$defs` cycle are each degraded rather than forwarded, because the validator would otherwise throw, exhaust the stack, or produce a tool that can never accept any argument. A key that is an argument *name* rather than a keyword — a property literally called `pattern` or `patternProperties` — is left alone.\n\n**Degrading replaces the schema, not the tool.** Because regexes are common in real MCP schemas, a tool in this position still registers, with the `args` envelope in place of its schema, and is reported under the `schema-envelope` class. The compatibility cost is real and worth knowing: such a tool loses validation against the proxy-supplied schema but retains Pi's validation of the extension-owned envelope, so its arguments must be passed as an object under `args` and the model sees a less specific contract than the server documents. The server still validates authoritatively, so an argument that violates the proxy-specific contract becomes a server-side tool error rather than a local one.\n\n### What you see when a tool is missing or degraded\n\nEvery raw entry the proxy returns is accounted for exactly once, and the counts reconcile: `raw = prepared + dropped + beyond-the-cap`, where *prepared* is what will be registered. If a registration pass is refused partway, the shortfall between prepared and registered is reported separately by that pass's own diagnostic. A tool is **dropped** for one of four reasons — `invalid-tool` (no usable name or server identity), `duplicate-identity`, `invalid-schema`, or `name-collision` — or discarded for being beyond the 512-tool limit (`tool-cap`). A tool is **degraded** rather than dropped under `schema-envelope`. Each class is reported with a count and a bounded sample of names through Pi notifications when a UI is active, or stderr in non-interactive mode. MCP messages emitted before the TUI context is ready are buffered until session start. For example:\n\n```text\nLiteLLM MCP: kept 2 MCP tools but replaced their schema with a safe args envelope, because of a schema that could not be proven free of proxy-supplied regexes or references: mcp_srv_lookup_1c97861c1f, mcp_srv_matcher_3ee4c31a5a.\nLiteLLM MCP: dropped 1 MCP tool with a missing name or server identity: entry_3.\n```\n\nA class is re-reported whenever its membership changes, including a change beyond the names shown in the sample, and stays quiet while unchanged — so a stable proxy does not repeat itself across refreshes, while a changing one is always surfaced. A class that stops occurring is cleared, so its recurrence is reported rather than suppressed. These lines never contain the proxy's schema, its response body, its descriptions, or your API key; only generated names, positional placeholders, and counts. They are reported regardless of `LITELLM_VERBOSE_DISCOVERY`; set that variable to also see per-refresh raw, prepared, enveloped, and registered counts. The enveloped count covers every tool carrying the envelope, whether because the proxy supplied no schema or because its schema was degraded, so it is the number of tools with no proxy-specific argument contract.\n\n### Registration lifecycle\n\nPi registers a tool synchronously, replacing any existing tool of the same name, and exposes no way to unregister. It has no notion of rejecting one tool while accepting another: the only failure is a staleness check that fires once the extension instance has been superseded, and that check is never reset. A refused registration therefore ends the whole pass rather than skipping one tool.\n\nSo a pass that is refused partway leaves the tools registered up to that point, reports one bounded diagnostic, and makes no further attempt from that extension instance — retrying would re-run discovery on every refresh and could never succeed. A reload creates a fresh instance, which starts clean on its own. Because names are stable and registration replaces by name, any retry that does happen is idempotent.\n\nNetwork discovery is separate and remains retryable: a catalog that yields no registrable tool is not recorded as settled, so a later refresh tries again, and the empty result is reported rather than passing in silence. A tool that disappears from the proxy's catalog stays registered until Pi restarts.\n\nMCP tools run in Pi's parallel tool mode. Each side-effecting `POST /mcp-rest/tools/call` is attempted exactly once: timeouts, connection failures, HTTP errors, and malformed responses are returned to Pi as tool errors rather than retried. Pi cancellation aborts an in-flight call and preserves its original cancellation reason. Tool-call response bodies are limited to 5 MiB before JSON parsing, and returned result or error text to 64 KiB with a truncation marker.\n\nA passed-through schema's `format` keyword is evaluated, using the validator's own built-in expressions rather than anything the proxy supplies.\n\nTools discovered this way are only as trustworthy as the MCP servers behind your proxy: their descriptions and results are text the model reads.\n\n## LiteLLM Skill Hub\n\nIf your LiteLLM proxy exposes `/claude-code/marketplace.json`, enabled skills are fetched before each agent turn and appended to the system prompt as a `litellm_skills` section. The extension falls back to the legacy `/v1/skills` Skills Gateway path when Skill Hub is unavailable. It also registers Pi tools for basic skill management:\n\n- `litellm_skill_list`\n- `litellm_skill_create`\n- `litellm_skill_delete`\n\n`litellm_skill_create` needs Skill Hub `sourceJson` metadata and a proxy that exposes `/claude-code/plugins`. It does not create skills from code: LiteLLM's `POST /v1/skills` is Anthropic's multipart Skills API.\n\n## Mocked LiteLLM smoke workflow\n\nThe `LiteLLM Smoke` GitHub Actions workflow starts VidaiMock and a real LiteLLM proxy on the runner. LiteLLM exposes route-distinct Chat, Responses, native Messages, and mixed-deployment models whose upstreams are served by VidaiMock. The smoke runner discovers those models through LiteLLM, asserts each model's expected API, exercises `/v1/chat/completions`, `/v1/responses`, and `/v1/messages`, verifies the expected `x-litellm-response-cost` behavior, and proves endpoint coverage from captured LiteLLM request logs rather than response text.\n\nThis keeps the LiteLLM integration path under test but does not call real LLM APIs. No provider API keys or GitHub Models permission are required. The smoke runner also asserts that discovery came from `/model/info` (`LITELLM_SMOKE_EXPECT_SOURCE`) so a silent fallback to `/v1/models` fails the run. The workflow also runs auth checks plus optional Postgres-backed auth checks when `LITELLM_LICENSE` is configured for virtual-key and admin-route behavior, then runs a non-interactive Pi CLI smoke with `--list-models` and `-p` against both the OpenAI-compatible and Anthropic-backed routes, so extension loading, model discovery, and real completion paths are covered without opening the TUI. It also runs an interactive Pi TUI smoke covering `/login litellm` and Pi's native `/model` refresh. VidaiMock returns fixed responses, so the real-proxy smoke does not exercise a model-originated tool call or thinking block; the native Messages compatibility suite covers thinking, tool use, tool results, and replay across turns.\n\n## Development\n\nThis package requires Node.js `>=22.19.0`. CI currently uses Node `26.5.0`.\n\n```bash\nnpm ci\nnpm run check\nnpm run clean && npm run build\n```\n\n`npm run check` runs Biome, type checking, the Vitest suite, and the supply-chain package-content guard. Pi installs and local smoke checks load the shipped `src/index.ts` entrypoint directly; `dist/` is verification output only.\n\nBefore changing package contents or dependency policy, also run:\n\n```bash\nnpm run supply-chain:guard\nnpm pack --dry-run\n```\n\nThe published npm package contains only `src`, `README.md`, `LICENSE`, and the `package.json` npm always includes. Pi loads the TypeScript source entrypoint for both npm and Git installs. The package does not expose a JavaScript or TypeScript library import; load it through Pi.\n\n## Release\n\nReleases are driven by semver tags named `v*.*.*`. The GitHub release workflow installs from the lockfile, then `npm publish` runs `prepublishOnly` to check the source, build `dist` for verification, verify the package contents, and publish to npm with provenance before the workflow creates a GitHub release.\n\nBefore tagging a release, keep `package.json` and `package-lock.json` versions in sync and verify the dry-run package contents.\n\n## Model catalog\n\nDynamic catalogs are persisted by Pi in `~/.pi/agent/models-store.json`. Credentials remain in `~/.pi/agent/auth.json`. Legacy `litellm-models.json` model caches are ignored and never deleted. `litellm-models-dev.json` is the models.dev cache and is refreshed in place.\n\nLiteLLM's `/model/info` is the metadata authority, so models.dev enrichment is an opt-in escape hatch. With `LITELLM_MODELS_DEV=1`, for every genuine `/model/info` row, including deployment details fetched through `/health`, the extension requests `https://models.dev/api.json` for enrichment and caches the result for 28 days in `~/.pi/agent/litellm-models-dev.json`. Without it, discovery neither requests models.dev nor reads that cache; Pi's own catalog still applies. Health-only entries without deployment details use the bounded Pi catalog lookup without models.dev enrichment. `PI_OFFLINE` suppresses activation-time discovery and the models.dev request. `LITELLM_OFFLINE=1` also disables LiteLLM discovery; direct discovery callers use only an existing models.dev cache and do not refresh it.\n\nOpening `/model` refreshes configured provider catalogs in the background using Pi's native model lifecycle when network discovery is enabled.\n\nPi documents `PI_OFFLINE` and `--offline` as disabling automatic network activity, including model catalog refreshes. Pi 0.87.1 adopted that wording to resolve [earendil-works/pi#8684](https://github.com/earendil-works/pi/issues/8684), without changing the behavior. Pi still checks only whether the variable is set, so `PI_OFFLINE=0` and an empty value also disable model refreshes. With `LITELLM_VERBOSE_DISCOVERY=1`, disabled startup discovery reports its reason, for example `startup discovery skipped (PI_OFFLINE)`. To discover models while keeping `PI_OFFLINE`, run `/litellm-refresh`. To allow all discovery for one invocation, use `env -u PI_OFFLINE pi` and do not pass `--offline`. If you only want to disable Pi's version check, use `PI_SKIP_VERSION_CHECK=1` instead; it does not apply offline mode's other network restrictions. See [#155](https://github.com/balcsida/pi-provider-litellm/issues/155).\n\n### Model host enforcement\n\nModels this provider dispatches are sent to the root resolved from the active credential. The extension hides a model from `/model` when its stored root, including any path prefix, does not match that credential, and its dispatch-time guard rejects stale, malformed, placeholder, and unsupported models before a request. For accepted models, the request URL is re-derived from the credential's proxy root instead of trusting a configured model URL. Explicit `allowInsecureHttp` settings continue to apply to this validation. Path prefixes are part of the root and remain case-sensitive.\n\nCatalog filtering and dispatch are separate. Choosing a model by ID or restoring it from a session can skip filtering. Pi 0.84 routes such a model to the provider only when the provider's current catalog already contains the same `api`. The native `Provider` contract has no separate protocol-capability declaration. If the catalog contains no model for that API, Pi uses its global API implementation instead, bypassing this extension's dispatch-time host guard. The extension deliberately returns an ordinary model array rather than falsifying its contents through an overridden Array method.\n\nTo keep that fallback safe, resolved auth carries `baseUrl` set to the credential's proxy root. Pi applies it to every request path — the provider guard and the global fallback alike — so a stale, placeholder, or attacker-supplied model `baseUrl` is replaced with the credential root before the request leaves the process. The credential can only ever reach the host it was issued for. A model whose `api` is absent from the catalog may still fail to complete on the fallback path (the global implementation builds a slightly different URL), but it cannot exfiltrate the credential. When no usable root resolves, auth carries no `baseUrl` and the provider guard rejects the request outright.\n\nOpening `/model` against the active proxy repopulates the protocols discovery actually selects, which is the supported way to use a model whose `api` is currently absent from the catalog.\n\nA model is hidden when:\n\n- no base URL resolves from settings or credentials\n- the base URL is invalid or remains the `https://litellm.example.com` placeholder\n- its stored root differs from the active credential root, such as after switching proxies or path-scoped tenants\n- it declares an API this extension does not implement\n\nEach distinct availability diagnostic is written once per session on stderr. `LITELLM_OFFLINE=1` does not recover a root mismatch: refresh online against the active proxy first, then return to offline use.\n\n### Protocols and prompt caching\n\nDiscovery selects native Messages for proven Claude groups under the [Model transport](#model-transport) rules, Responses for OpenAI-family backends, and Chat Completions for other OpenAI-compatible backends. Azure and Azure AI deployments stay on Chat Completions unless an explicit Responses mode or a `supported_endpoints` list containing `/v1/responses` authorizes Responses; `api_version` alone does not prove support. Azure is detected from the adapter field, an `azure/` or `azure_ai/` model prefix, or the reported provider; other adapters follow the backend family because LiteLLM bridges `/v1/responses` to Chat Completions when the provider has no native Responses config (`litellm/responses/main.py`, `_bridges_to_chat_completions`). A route whose model prefix and `custom_llm_provider` name different providers is treated as unidentified and stays on Chat Completions, so it also does not get the local 128-tool preflight. When `/model/info` supplies `supported_endpoints`, that list takes precedence, and `mode: \"responses\"` remains an explicit Responses signal. An evidence-free fallback entry—a bare `/v1/models` id or a `/health` entry with no detail row—takes its protocol from the Pi catalog entry for its id; both evidence-free fallback paths also inherit presentation metadata from the bounded catalog lookup. An unknown id stays on Chat Completions. The route name alone authorizes nothing. A concrete id expanded from wildcard `/model/info` routes inherits the deployment evidence of the wildcard route LiteLLM would select for it, with the requested id substituted into the row's `model` the way LiteLLM serves it; the id is omitted when that selected route is not a published chat-style route. Chat Completions and Responses use `<root>/v1`; native Messages uses the proxy root directly. All three protocols pass through the provider's host guard. When an evidence-free cached `(no metadata)` entry can be enriched from the Pi catalog, it is restored on Responses only for a catalog Responses model and otherwise on Chat Completions, never Anthropic Messages. A model supplied only through `models.json` whose `api` this provider does not implement takes Pi's global API fallback rather than this provider's host guard; the credential-root pin (see [Model host enforcement](#model-host-enforcement)) still keeps the credential on the active proxy.\n\n`cacheControlFormat: \"anthropic\"` applies only to Chat Completions, where Pi adds Anthropic `cache_control` markers. The Responses transport has a different compatibility type and uses native `prompt_cache_key` (plus supported retention fields), so Responses models must not receive `cacheControlFormat`. Freshly discovered OpenAI-family models forced onto Chat Completions are rejected locally when a request contains more than 128 tools; route them through Responses or reduce enabled extensions. Moonshot request-side reasoning suppression follows LiteLLM's routing provider, not `model_info.base_model`; response-side `<think>` normalization follows discovered Kimi-family evidence. Opaque aliases retain display normalization without sending Moonshot-only parameters to Azure- or Bedrock-hosted Kimi models. Strict tool-message repair requires every deployment to identify Kimi; Gemini effort normalization likewise requires consistent backend-family evidence.\n\nDiscovery policy is versioned in Pi's persisted model catalog. After upgrading, an online refresh replaces legacy entries. Offline legacy entries remain usable without a diagnostic; the extension reports the discovery-version mismatch once only when an attempted online refresh fails. To force rediscovery or roll back across this policy change, delete the `litellm` entry from `~/.pi/agent/models-store.json` (or delete the file) and refresh once online.\n\n### Deployment groups and metadata authority\n\nLiteLLM may load-balance one public `model_name` across deployments with different backends or model versions. The extension reduces `/model/info` rows conservatively before publishing one Pi model. A route group that mixes a chat-style deployment with an explicitly incompatible mode such as embedding is withheld entirely and reported with a bounded diagnostic.\n\n- Responses is selected only when every deployment supports it under the protocol rules above; a deployment that requires Chat keeps the group on Chat.\n- Vision and reasoning are advertised only when every routable deployment resolves them as supported. An explicit `supports_reasoning: false` suppresses all thinking controls, even when catalog or router effort metadata exists. Catalog thinking controls are intersected per level: a level is exposed only when every deployment maps it to the same value, while disagreement or absence becomes an explicit denial. Catalog maps are not complete effort lists, so absence has one exception: an omitted `minimal`, `low`, `medium` or `high` counts as Pi's default spelling of that level. An omitted `off`, `xhigh` or `max` still differs from an explicit mapping. Reasoning selectors additionally require an accepted wire carrier on every deployment. Public effort lists are intersected, explicit LiteLLM denials win, and `xhigh`/`max` need unanimous explicit support. Null or absent standard-effort flags have no opinion. A deployment that declares `model_info.reasoning_effort_levels` answers every level from that list, ahead of its per-level flags, as LiteLLM itself reads it.\n- Context and output limits use the minimum resolved value across deployments. Pi catalogue lookup prefers the deployment's provider-specific entry before falling back to the generic vendor entry; Azure and Azure AI therefore retain Azure-specific limits rather than being capped by a different OpenAI catalogue entry. When models.dev supplies a sparse vendor record, missing fields still use the provider-specific Pi catalogue.\n- Each displayed base-price field uses the maximum only when every deployment resolves that field; unresolved fields remain zero and the model name is suffixed with ` (incomplete metadata)`.\n- When complete base pricing comes from the catalog under unanimous catalog authority, tiered pricing is the conservative worst-case envelope. Its usable finite non-negative thresholds are the sorted union of every deployment's thresholds, and each price field at each interval is the maximum applicable rate across all deployments, floored by each deployment's base rate. Differing tier breakpoints are therefore preserved rather than treated as incompatible. An explicit `/model/info` base-price field replaces catalog pricing for that field at every threshold; catalog tiers remain for unaffected fields and are omitted only when every base-price field is explicit.\n- Reduced route groups omit tier ladders when complete base-pricing or catalog authority is unavailable. Wildcard expansion retains every known tier from matching groups even when another match has incomplete metadata: suppressing a complete sibling's higher tier could understate the known worst-case rate. The ` (incomplete metadata)` marker remains because the resulting envelope is only as complete as the available ladders.\n- Wildcard routes expand through `/v1/models`; dropped exact or wildcard groups suppress matching expanded ids.\n- Expanded ids inherit conservative metadata bounds from every matching wildcard group, including the same union-threshold, maximum-applicable-rate tier envelope. Protocol and backend-family evidence follow the most-specific route LiteLLM selects, with every deployment of that selected route voting together.\n- Catalog metadata is accepted only from unanimous deployment identities resolved from `model_info.base_model` first and `litellm_params.model` second; the public `model_name` route is never backend authority. `litellm_params.custom_llm_provider` is provider evidence for the selected backend model: a non-generic provider that conflicts with the model prefix withholds identity, while generic transport adapters are ignored. Recognized provider prefixes remain identity evidence even when the named model is absent from that provider's catalog. Different concrete catalog models conflict even within one provider; an unresolved Azure deployment name may still use its resolved `base_model`. Conflicts across a group trigger the bounded ambiguous-authority diagnostic; ambiguous groups are not matched across all Pi provider catalogs. Cross-host Claude routes spanning providers such as Vertex and Bedrock may intentionally trigger this withholding: explicit router metadata remains usable, but the route does not borrow either host's catalog metadata.\n- `/v1/models` and `/health` do not provide deployment-level backend identity. For `/v1/models`, an unqualified ID is resolved only within an explicitly recognized `owned_by` provider or through the bounded alias rules documented here (currently Anthropic aliases), and is never searched across every Pi provider catalog. Both `/v1/models` fallback entries and `/health` entries without deployment detail take their protocol from the matching Pi catalog model: `openai-responses` selects Responses, and every other or missing catalog API selects Chat. Wholly health-only groups also inherit presentation metadata from that bounded Pi catalog lookup; a bare row mixed with deployment details grants no catalog authority to the group. A route name substituted for an unreadable deployment `model_name` also denies router-reported thinking levels. Unresolved evidence-free entries retain the ` (no metadata)` marker; groups containing deployment details remain permanently incomplete when their evidence is insufficient.\n\nThe ` (no metadata)` suffix is reserved for unresolved, evidence-free entries mapped by the full `/v1/models` fallback or wholly health-only `/health` groups. During wildcard expansion after a successful `/model/info` response, IDs that match no surviving wildcard route are discarded. A matched wildcard expansion inherits its matching groups' authority and is either unmarked or marked ` (incomplete metadata)`, never ` (no metadata)`. A recognized `owned_by` provider that conflicts with a provider-qualified model ID instead receives ` (incomplete metadata)`, permanently withholding cache enrichment rather than falling through to the ID prefix. Only an unchanged evidence-free sentinel shape is eligible for bounded catalog enrichment on a later cache read, when it also refreshes provider compatibility metadata from the model ID, adopts Responses only for a catalog `openai-responses` model, and otherwise uses Chat.\n\nThe ` (incomplete metadata)` suffix marks reduced `/model/info` groups, incomplete matched wildcard expansions, or `/health` groups with deployment details and permanently prevents route-name cache enrichment. It means at least one metadata field is unknown, including cache pricing that the proxy omitted; known input/output prices may still be shown alongside the suffix.\n\n### Reasoning controls\n\nReasoning levels require deployment evidence for the parameter Pi sends: `reasoning_effort` for effort levels or `thinking` for a native thinking switch. Public route names never authorize these controls.\n\nLiteLLM omits `supported_openai_params` for a deployment its model map does not describe. Such a deployment keeps the `reasoning_effort` carrier when its `model_info` explicitly sets `supports_reasoning: true`, which is the operator's opt-in. A `supported_openai_params` list that omits `reasoning_effort` still denies effort levels unless `litellm_params.allowed_openai_params` adds it. Kimi and DeepSeek generations are excluded because their contracts name their own carriers. Evidence-free fallback models retain catalog presentation metadata but expose no speculative selector.\n\nKimi K2.5/K2.6 use an on/off thinking switch; K2.7 Code/Highspeed is always thinking. Kimi K3 and DeepSeek V4 use public effort evidence with LiteLLM overrides. Responses levels are translated to valid `reasoning.effort` values; Chat-only compatibility fields never reach Responses models. Legacy cached level maps remain usable while discovery refreshes, and stored Moonshot compatibility can restore safe display normalization.\n\nThe development probe runs against minimized snapshots with `npm run probe:proxy -- --snapshot tests/fixtures/proxy/prod-model-info-2026-09-04.json`. A bounded live matrix is available with `--live --base-url <proxy-url> --max-requests 100`; its request bodies use the discovered carrier and request policy.\n\n## Troubleshooting\n\n| Symptom | Likely cause |\n|---|---|\n| \"no credentials\" warning at startup | Env vars not set and no OAuth credential — run `/login litellm` |\n| No models, or no new routes, while `PI_OFFLINE` is set | Pi skips every model network refresh, including the one `/model` starts. Run `/litellm-refresh`, or unset `PI_OFFLINE` (`PI_OFFLINE=0` is not enough) |\n| `No models available` at startup, gone after a restart | A Pi startup race, not discovery — see [`No models available` at startup](#no-models-available-at-startup) |\n| \"discovered no models\" | Proxy returned an empty list — check pi's startup log and verify `/model/info`, `/v1/models`, or `/health` responds |\n| `/model/info` returning 401/403/404 | Expected behavior with virtual keys — extension falls back to `/v1/models` |\n| Discovery times out | Increase `LITELLM_DISCOVERY_TIMEOUT_MS` or set `LITELLM_OFFLINE=1` to fall back on cached models. Offline mode does not recover a root mismatch, including a different path prefix — see [Model host enforcement](#model-host-enforcement) |\n| A provider shows no models | The base URL is missing, invalid, still the placeholder, or its full root, including any path prefix, differs from the root in the cached catalog. Check stderr and see [Model host enforcement](#model-host-enforcement) |\n| A configured or restored model fails to complete but never leaks the credential | Its `api` is absent from the current provider catalog, so Pi used global API fallback with the credential root pinned. Open `/model` against the active proxy to repopulate the protocol — see [Model host enforcement](#model-host-enforcement) |\n| `LiteLLM discovery: ... route group(s) have missing or conflicting deployment provider evidence` | One or more deployments lack resolvable backend authority or resolve to different providers or concrete catalog models. Add consistent `litellm_params.model`, `model_info.base_model`, or adapter metadata; catalog-derived limits, pricing, and reasoning metadata are withheld meanwhile. This may be intentional for cross-host routes such as Vertex/Bedrock Claude. |\n| `LiteLLM discovery: ... route group(s) mix chat-style and explicitly incompatible deployment modes` | A public route can select both a chat-style deployment and an incompatible deployment such as an embedding model. Give the embedding deployment its own `model_name`. |\n| `LiteLLM (...): a fallback served \"<route>\"` | A successful HTTP response reports a LiteLLM router fallback (`x-litellm-attempted-fallbacks`). `/model/info` does not expose fallbacks, so protocol and model handling follow the requested route's own deployments. If the primary and fallback groups support Chat Completions, set `model_info.supported_endpoints: [\"/v1/chat/completions\"]` on the primary to avoid Responses-to-Chat bridging. This warning does not change routing or fix upstream bridging defects. Warned once per provider and route until the extension reloads; shown in the UI, or stderr without a UI. |\n| A model is marked ` (incomplete metadata)` | `/model/info` or `/health` did not provide enough authoritative metadata. Explicit fields remain usable, but unknown cost fields are shown as zero and route-name cache enrichment stays disabled. |\n| `401 Token expired` | Set `LITELLM_API_KEY_HELPER`. |\n| No models with gcloud auth | Verify `gcloud auth application-default login` has been run or set `GOOGLE_APPLICATION_CREDENTIALS` to an `authorized_user` ADC file |\n| Enterprise SSO waits for token insertion | The proxy returned 404/405 for `/sso/cli/start`, so Pi used the legacy flow — upgrade LiteLLM or paste the UI token |\n| Enterprise CLI SSO start/poll fails | Check the proxy logs and verify `/sso/cli/start` and `/sso/cli/poll/{login_id}` are reachable; only 404/405 falls back to legacy login |\n| Enterprise SSO login shows \"virtual key generation failed\" | The LiteLLM instance may lack a database (`/key/generate` requires one), your user account may lack key-generation permission, or the request timed out; the JWT is used directly as a fallback |\n| Enterprise SSO token prompt fails with \"SSO token is required\" | The token field was left empty — paste the token copied from the LiteLLM UI |\n| MCP tools not showing | Verify the proxy exposes `/mcp-rest/tools/list` and open `/model` after fixing the proxy |\n| Some MCP tools missing or unvalidated | Check Pi notifications (stderr in non-interactive mode) for `LiteLLM MCP:` messages. Dropped tools are reported under `invalid-tool`, `duplicate-identity`, `invalid-schema`, `name-collision`, or `tool-cap`, each with a count and a bounded sample of generated names. A tool reported under `schema-envelope` is still present but uses the `args` envelope instead of its own schema. A refused registration pass is reported once. Set `LITELLM_VERBOSE_DISCOVERY=1` for per-refresh raw/prepared/enveloped/registered counts |\n| Skills not affecting prompts | Verify the proxy exposes `/claude-code/marketplace.json` or `/v1/skills` and returns enabled skills |\n\n### `No models available` at startup\n\nPi 0.84.0 and later can finish startup before the provider availability snapshot is written, so the\ninitial model pick sees nothing even though discovery succeeded. The warning is intermittent and a\nrestart usually clears it. Nothing is wrong with the catalog: `/model` in the same session still\nlists every discovered model, and picking one there fixes that session.\n\nScoping models keeps selection off that path, because Pi resolves the scope with its own awaited\navailability pass before it picks a model. In `~/.pi/agent/settings.json`:\n\n```json\n{\n  \"enabledModels\": [\"litellm/*\"]\n}\n```\n\nYour `defaultProvider` and `defaultModel` still win as long as they match a pattern. `/model` then\nopens on the scoped list, with a toggle inside the picker for the full catalog.\n\nThe extension cannot set this for you — Pi reads `enabledModels` before extensions activate.\n\n## License\n\nMIT — see [LICENSE](./LICENSE).\n","readmeFilename":"README.md"}