{"_id":"@d3ara1n/pi-model-roles","_rev":"16-43933119909b8c951a63a986257b2d7d","name":"@d3ara1n/pi-model-roles","dist-tags":{"latest":"2.0.0"},"versions":{"0.1.0":{"name":"@d3ara1n/pi-model-roles","version":"0.1.0","keywords":["pi-package","pi"],"license":"MIT","_id":"@d3ara1n/pi-model-roles@0.1.0","maintainers":[{"name":"d3ara1n","email":"d3ara1n@outlook.com"}],"homepage":"https://github.com/d3ara1n/pi-extensions#readme","bugs":{"url":"https://github.com/d3ara1n/pi-extensions/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"d6b42496b4eb066f5f579adf2a79f4150b64f25f","tarball":"https://registry.npmjs.org/@d3ara1n/pi-model-roles/-/pi-model-roles-0.1.0.tgz","fileCount":8,"integrity":"sha512-14XOlzl8Dvvkm3J6LOkJ6augu429AQ+F8vXBvEsj2YGG3HhAa8KXx6CPIX4jjax7SmmioRRVeZzex09v4N94eQ==","signatures":[{"sig":"MEUCIQD3S16rWIF9vuqfnRPki+sNaWR8eMSL4eVgOsezQD8s2AIgSQUqhwlsNpw+Z0NhsfbCmiJoTIquq2lYqG3l1DUkRGM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18393},"main":"src/index.ts","types":"src/types.ts","gitHead":"4aa47e92819ef668f14db45f6be2c67df8b1e1b7","_npmUser":{"name":"d3ara1n","email":"d3ara1n@outlook.com"},"repository":{"url":"git+https://github.com/d3ara1n/pi-extensions.git","type":"git","directory":"packages/pi-model-roles"},"_npmVersion":"11.16.0","description":"Model role configuration library for pi extensions — defines named model roles and resolves them to Model instances","directories":{},"_nodeVersion":"26.0.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-model-roles_0.1.0_1780646979909_0.8911052355636297","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@d3ara1n/pi-model-roles","version":"0.2.0","keywords":["pi-package","pi"],"license":"MIT","_id":"@d3ara1n/pi-model-roles@0.2.0","maintainers":[{"name":"d3ara1n","email":"d3ara1n@outlook.com"}],"homepage":"https://github.com/d3ara1n/pi-extensions#readme","bugs":{"url":"https://github.com/d3ara1n/pi-extensions/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"2e6b479c1ce67c4556c1859943154e14b28731c5","tarball":"https://registry.npmjs.org/@d3ara1n/pi-model-roles/-/pi-model-roles-0.2.0.tgz","fileCount":8,"integrity":"sha512-5bSna/PfkCruH5Ae3yROKSNE2Fta75SB1biJOYFYRG6emqU/bMsutL0YXfpZJSANN9L4UHRaNaFtdEiNtVelaA==","signatures":[{"sig":"MEYCIQCWu82BXLJN4azN66eYuY9YsfZh29w4aED+MZ0J9swfKwIhAL4SY98RSsM01pEabKO2A/3g3eywD3b6kcGsSlwjwBaX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@d3ara1n%2fpi-model-roles@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19568},"main":"src/index.ts","types":"src/types.ts","gitHead":"cc9c6c06394543704805fc6108058cbcfb30079e","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:32ea3b92-2eb1-4b5f-a525-23f8a83d14ca"}},"repository":{"url":"git+https://github.com/d3ara1n/pi-extensions.git","type":"git","directory":"packages/pi-model-roles"},"_npmVersion":"11.13.0","description":"Model role configuration library for pi extensions — defines named model roles and resolves them to Model instances","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-model-roles_0.2.0_1780744752013_0.07901954682084456","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@d3ara1n/pi-model-roles","version":"0.2.1","keywords":["pi-package","pi"],"license":"MIT","_id":"@d3ara1n/pi-model-roles@0.2.1","maintainers":[{"name":"d3ara1n","email":"d3ara1n@outlook.com"}],"homepage":"https://github.com/d3ara1n/pi-extensions#readme","bugs":{"url":"https://github.com/d3ara1n/pi-extensions/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"ff50a94eca9f1fb13eeeb6e672476da9fd7614fe","tarball":"https://registry.npmjs.org/@d3ara1n/pi-model-roles/-/pi-model-roles-0.2.1.tgz","fileCount":8,"integrity":"sha512-X8nyKj88ZyFXy9KhStGrdbM62agy3ylgEkgXzJGzZo+ek9iLhcQAejuJcMuZWLVtPew7HZL8zLC90jZO1ri/Ww==","signatures":[{"sig":"MEUCIHHbjPCCCnCXbJnoyVEEnKd4o9ioB7pT0zSESv5tsGB8AiEAk+yLA25Q9+2teb6IG+VwZtZsKeaFaSU4utCcTObYEZQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@d3ara1n%2fpi-model-roles@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19644},"main":"src/index.ts","type":"module","types":"src/types.ts","gitHead":"2d0eb4e4fe95fd85160f1801ec8e4c2b17fed363","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:32ea3b92-2eb1-4b5f-a525-23f8a83d14ca"}},"repository":{"url":"git+https://github.com/d3ara1n/pi-extensions.git","type":"git","directory":"packages/pi-model-roles"},"_npmVersion":"11.13.0","description":"Model role configuration library for pi extensions — defines named model roles and resolves them to Model instances","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-model-roles_0.2.1_1782271339900_0.2148478214713836","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@d3ara1n/pi-model-roles","version":"0.3.0","keywords":["pi-package","pi"],"license":"MIT","_id":"@d3ara1n/pi-model-roles@0.3.0","maintainers":[{"name":"d3ara1n","email":"d3ara1n@outlook.com"}],"homepage":"https://github.com/d3ara1n/pi-extensions#readme","bugs":{"url":"https://github.com/d3ara1n/pi-extensions/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"0c9ba4886e63e9e81e65c8713ad5667e0d229dfd","tarball":"https://registry.npmjs.org/@d3ara1n/pi-model-roles/-/pi-model-roles-0.3.0.tgz","fileCount":8,"integrity":"sha512-n0M4OXD4p0vD3GZeuquus9znfm8MYkoUn53yl4rr/XA3JLLwpHlDjP6MgCJWPuV8LTmmkdSlXDV8F8TPcF6ZXg==","signatures":[{"sig":"MEUCIQDL9/Mx5lFtAqFC5443hMxBHhr/GdHhcLCXpSYsLY9HwAIgHBWwQamRTXtkgO4Zo45DiAK9V3CfPRr8mOGQvLMNq78=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@d3ara1n%2fpi-model-roles@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":21805},"main":"src/index.ts","type":"module","types":"src/types.ts","gitHead":"2b578f3cf94135a097826ae0d47cc12f297a8abe","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:32ea3b92-2eb1-4b5f-a525-23f8a83d14ca"}},"repository":{"url":"git+https://github.com/d3ara1n/pi-extensions.git","type":"git","directory":"packages/pi-model-roles"},"_npmVersion":"11.13.0","description":"Model role configuration library for pi extensions — defines named model roles and resolves them to Model instances","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-model-roles_0.3.0_1782283422588_0.7354556246458479","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@d3ara1n/pi-model-roles","version":"0.3.1","keywords":["pi-package","pi"],"license":"MIT","_id":"@d3ara1n/pi-model-roles@0.3.1","maintainers":[{"name":"d3ara1n","email":"d3ara1n@outlook.com"}],"homepage":"https://github.com/d3ara1n/pi-extensions#readme","bugs":{"url":"https://github.com/d3ara1n/pi-extensions/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"f7c9d467e13aa7de3c3e7f71069c7f7957d7998c","tarball":"https://registry.npmjs.org/@d3ara1n/pi-model-roles/-/pi-model-roles-0.3.1.tgz","fileCount":8,"integrity":"sha512-sBLVRPVhdNKdIJ+X27ZjkEnYwl6/TENj9PHu++QTezO+C+ivU5Gq9sOvyGjywmV2dVAbi1eCXEAkyUC3GBfHnA==","signatures":[{"sig":"MEQCIBScXbGmOPCZMpMzd/aZpIOHolAwz7T8BKDUlnH6qmu9AiBm3BqU1s08S6ySulnuvHqecxC4NbhGaJngMp1YxkWDvg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@d3ara1n%2fpi-model-roles@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":21692},"main":"src/index.ts","type":"module","types":"src/types.ts","gitHead":"c734e7da1bc001985ae6d225053bd742cac0da1d","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:32ea3b92-2eb1-4b5f-a525-23f8a83d14ca"}},"repository":{"url":"git+https://github.com/d3ara1n/pi-extensions.git","type":"git","directory":"packages/pi-model-roles"},"_npmVersion":"11.13.0","description":"Model role configuration library for pi extensions — defines named model roles and resolves them to Model instances","directories":{},"_nodeVersion":"24.17.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-model-roles_0.3.1_1782449439122_0.17143271029452967","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@d3ara1n/pi-model-roles","version":"0.4.0","keywords":["pi-package","pi"],"license":"MIT","_id":"@d3ara1n/pi-model-roles@0.4.0","maintainers":[{"name":"d3ara1n","email":"d3ara1n@outlook.com"}],"homepage":"https://github.com/d3ara1n/pi-extensions#readme","bugs":{"url":"https://github.com/d3ara1n/pi-extensions/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"905ca48065fa066bc6178150e532e95f12dede7c","tarball":"https://registry.npmjs.org/@d3ara1n/pi-model-roles/-/pi-model-roles-0.4.0.tgz","fileCount":8,"integrity":"sha512-Vn4xy/ihGz114KVj1sGetAjh/qiugHXZ1Njq7DOGeXxl6Fo4FqlNJ2/MOi125SCBxftPWSRnU3KCnFXne68eBg==","signatures":[{"sig":"MEYCIQDQUi06R6r2NMwojQKC+z/iqzBFMBk9c4v98mqWJGesiQIhAMCVT2saC9SMOoGqISQQydlo/w87jL5gsbOCyPmNdy3Q","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@d3ara1n%2fpi-model-roles@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":23298},"main":"src/index.ts","type":"module","types":"src/types.ts","gitHead":"9624e5fbe6f7ca3bf5285408264e23550a536a8f","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:32ea3b92-2eb1-4b5f-a525-23f8a83d14ca"}},"repository":{"url":"git+https://github.com/d3ara1n/pi-extensions.git","type":"git","directory":"packages/pi-model-roles"},"_npmVersion":"11.16.0","description":"Model role configuration library for pi extensions — defines named model roles and resolves them to Model instances","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-model-roles_0.4.0_1783080812732_0.02587221873684209","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@d3ara1n/pi-model-roles","version":"0.5.0","keywords":["pi-package","pi"],"license":"MIT","_id":"@d3ara1n/pi-model-roles@0.5.0","maintainers":[{"name":"d3ara1n","email":"d3ara1n@outlook.com"}],"homepage":"https://github.com/d3ara1n/pi-extensions#readme","bugs":{"url":"https://github.com/d3ara1n/pi-extensions/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"4ab8e4eb170793f083ecc287d5e0d34c7b2e087a","tarball":"https://registry.npmjs.org/@d3ara1n/pi-model-roles/-/pi-model-roles-0.5.0.tgz","fileCount":8,"integrity":"sha512-7q9KFuEhCIk2jk7i5AoBQugfYDGhbT8LcxTU5cyLyL+L3vonC7gfu1bvud6vXeJIQWAJmbGmglwTYEGYoubsjw==","signatures":[{"sig":"MEQCIFSsbvW9yJVLM+TOaIRaSYFSfez3FLPOr/756xJeIrEbAiB6lVw6/mWeqwl+a1P7roOUttz7+T7Rt0at+M+/q9G23A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@d3ara1n%2fpi-model-roles@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":27811},"main":"src/index.ts","type":"module","types":"src/types.ts","gitHead":"ce6514ca327faf795e8db33a1dd1a707fbd1091a","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:32ea3b92-2eb1-4b5f-a525-23f8a83d14ca"}},"repository":{"url":"git+https://github.com/d3ara1n/pi-extensions.git","type":"git","directory":"packages/pi-model-roles"},"_npmVersion":"11.16.0","description":"Model role configuration library for pi extensions — defines named model roles and resolves them to Model instances","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-model-roles_0.5.0_1783143477985_0.4230897941744529","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@d3ara1n/pi-model-roles","version":"0.6.0","keywords":["pi-package","pi"],"license":"MIT","_id":"@d3ara1n/pi-model-roles@0.6.0","maintainers":[{"name":"d3ara1n","email":"d3ara1n@outlook.com"}],"homepage":"https://github.com/d3ara1n/pi-extensions#readme","bugs":{"url":"https://github.com/d3ara1n/pi-extensions/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"79476ea93573c8a3399aa5fb740964aa22cc6447","tarball":"https://registry.npmjs.org/@d3ara1n/pi-model-roles/-/pi-model-roles-0.6.0.tgz","fileCount":8,"integrity":"sha512-npLhbgMtVn7oMTUmkNJUBdu9kVnVQj/5hvTgKPISg+79mwXsdLGCBSS4KoFNeygSr6TWRnX4h3YO5gegGViyqA==","signatures":[{"sig":"MEYCIQDcJwUtlpyvfgwL6UY7k3gTDucBqcGd5Mgi/RqcPpYXKAIhAOnauJuRy6rYBFJRMo0rUijhuHCDUQsJelm492IYkFgC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@d3ara1n%2fpi-model-roles@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":28590},"main":"src/index.ts","type":"module","types":"src/types.ts","gitHead":"4804382339f9354cfc175df08882cbb1d23122e9","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:32ea3b92-2eb1-4b5f-a525-23f8a83d14ca"}},"repository":{"url":"git+https://github.com/d3ara1n/pi-extensions.git","type":"git","directory":"packages/pi-model-roles"},"_npmVersion":"11.16.0","description":"Model role configuration library for pi extensions — defines named model roles and resolves them to Model instances","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-model-roles_0.6.0_1783334346918_0.2930995612398528","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@d3ara1n/pi-model-roles","version":"0.6.1","keywords":["pi-package","pi"],"license":"MIT","_id":"@d3ara1n/pi-model-roles@0.6.1","maintainers":[{"name":"d3ara1n","email":"d3ara1n@outlook.com"}],"homepage":"https://github.com/d3ara1n/pi-extensions#readme","bugs":{"url":"https://github.com/d3ara1n/pi-extensions/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"d9eaf54b480406a8564e8147e1cd96b2ef60e12d","tarball":"https://registry.npmjs.org/@d3ara1n/pi-model-roles/-/pi-model-roles-0.6.1.tgz","fileCount":8,"integrity":"sha512-xJ+zePGim0e/Cp9l39Usv+yYhsobk653Ta38Sj43fati4wevuDOj8ax57WBgdxFjvl0VSNrlLUBOoT9kg+yPaA==","signatures":[{"sig":"MEQCIBbMuM0JxFgjgL60NvJapwH+asfxzaF2GukpkHom5BUuAiA+OuPjEtJWQ90CbOnO8PlV1CBauqlbT0EYeAkQIJpSRA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@d3ara1n%2fpi-model-roles@0.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":28590},"main":"src/index.ts","type":"module","types":"src/types.ts","gitHead":"b5afeac63306f3658e7976c0530b2456dcd589be","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:32ea3b92-2eb1-4b5f-a525-23f8a83d14ca"}},"repository":{"url":"git+https://github.com/d3ara1n/pi-extensions.git","type":"git","directory":"packages/pi-model-roles"},"_npmVersion":"11.16.0","description":"Model role configuration library for pi extensions — defines named model roles and resolves them to Model instances","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-model-roles_0.6.1_1783661945225_0.05595598993136597","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"@d3ara1n/pi-model-roles","version":"0.6.2","keywords":["pi-package","pi"],"license":"MIT","_id":"@d3ara1n/pi-model-roles@0.6.2","maintainers":[{"name":"d3ara1n","email":"d3ara1n@outlook.com"}],"homepage":"https://github.com/d3ara1n/pi-extensions#readme","bugs":{"url":"https://github.com/d3ara1n/pi-extensions/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"4b2d030d50a25c28733df808242a62b05b75ab0c","tarball":"https://registry.npmjs.org/@d3ara1n/pi-model-roles/-/pi-model-roles-0.6.2.tgz","fileCount":8,"integrity":"sha512-HuELezubtsVjOsn6U7+cfOViZwU9H5VJmD7pvmkSOTeinZUFXCtHrTsacHMeoRSDSz+va5cU6STTe3rPvhTzuA==","signatures":[{"sig":"MEYCIQDrXtzQ/yLL2Affs9GGjQNbmcTCNrtaveggDXbFBO4s+gIhALQmkynM8PxZGzs3VeoZmu9O6AHN4aG9ls2WCRNITAv3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@d3ara1n%2fpi-model-roles@0.6.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":28980},"main":"src/index.ts","type":"module","types":"src/types.ts","gitHead":"99c63ee5e7e42512be7048893f2cf5a51b8a277a","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:32ea3b92-2eb1-4b5f-a525-23f8a83d14ca"}},"repository":{"url":"git+https://github.com/d3ara1n/pi-extensions.git","type":"git","directory":"packages/pi-model-roles"},"_npmVersion":"11.16.0","description":"Model role configuration library for pi extensions — defines named model roles and resolves them to Model instances","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-model-roles_0.6.2_1783708284895_0.9595764799760569","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@d3ara1n/pi-model-roles","version":"0.7.0","keywords":["pi-package","pi","pi-extension"],"license":"MIT","_id":"@d3ara1n/pi-model-roles@0.7.0","maintainers":[{"name":"d3ara1n","email":"d3ara1n@outlook.com"}],"homepage":"https://github.com/d3ara1n/pi-extensions#readme","bugs":{"url":"https://github.com/d3ara1n/pi-extensions/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"43bcca7b9ab0ee9251d8db4022ccdea894436f11","tarball":"https://registry.npmjs.org/@d3ara1n/pi-model-roles/-/pi-model-roles-0.7.0.tgz","fileCount":8,"integrity":"sha512-zI2rcMaXBo8wtbENqL6qbZU/YvNjI8xyUNj4asYO7Irq0+mvjltBMlUrUQvXKq44bTqbAyjUjhSxHavEuYzWhw==","signatures":[{"sig":"MEYCIQDMNAHuzpLKYS5qo2AqzgSksKAZB/Mm9dxctdZ6BpSblgIhAIe/dKItFcNubFWxxWZApuO/moxTTOtjMnUIKmQl+QLo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@d3ara1n%2fpi-model-roles@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":29172},"main":"src/index.ts","type":"module","types":"src/types.ts","gitHead":"a94e31bb985bb69880e70bfb6926fc7a231d85b4","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:32ea3b92-2eb1-4b5f-a525-23f8a83d14ca"}},"repository":{"url":"git+https://github.com/d3ara1n/pi-extensions.git","type":"git","directory":"packages/pi-model-roles"},"_npmVersion":"11.16.0","description":"Model role configuration library for pi extensions — defines named model roles and resolves them to Model instances","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-model-roles_0.7.0_1783716911974_0.14648795226187739","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@d3ara1n/pi-model-roles","version":"0.7.1","keywords":["pi-package","pi","pi-extension"],"license":"MIT","_id":"@d3ara1n/pi-model-roles@0.7.1","maintainers":[{"name":"d3ara1n","email":"d3ara1n@outlook.com"}],"homepage":"https://github.com/d3ara1n/pi-extensions#readme","bugs":{"url":"https://github.com/d3ara1n/pi-extensions/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"e3965da2f6f6d3a071a5b2921295af286762240f","tarball":"https://registry.npmjs.org/@d3ara1n/pi-model-roles/-/pi-model-roles-0.7.1.tgz","fileCount":8,"integrity":"sha512-zNPfL/Rre7LkP0Lukaj82RS7Xxie1kPlire+h6ccU9Kd6VhFlVnf86Gg2M9muCaZ2YlrgeoVosRG/rXQjecddg==","signatures":[{"sig":"MEYCIQDAXqBtdxNJ0ITDtDq5nGzuVMoBVh1fUXygmR/VWLU0cQIhAIZ7djI5mH+DxqBSWsGMNSX27pXIO4t6agb81GPE2PYv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@d3ara1n%2fpi-model-roles@0.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":29995},"main":"src/index.ts","type":"module","types":"src/types.ts","gitHead":"2bec8518288bb4624905eab9b405b5b554e30965","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:32ea3b92-2eb1-4b5f-a525-23f8a83d14ca"}},"repository":{"url":"git+https://github.com/d3ara1n/pi-extensions.git","type":"git","directory":"packages/pi-model-roles"},"_npmVersion":"11.16.0","description":"Model role configuration library for pi extensions — defines named model roles and resolves them to Model instances","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-model-roles_0.7.1_1783769276659_0.010817951796973091","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@d3ara1n/pi-model-roles","version":"1.0.0","keywords":["pi-package","pi","pi-extension"],"license":"MIT","_id":"@d3ara1n/pi-model-roles@1.0.0","maintainers":[{"name":"d3ara1n","email":"d3ara1n@outlook.com"}],"homepage":"https://github.com/d3ara1n/pi-extensions#readme","bugs":{"url":"https://github.com/d3ara1n/pi-extensions/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"7e13e8c7742e1c728a48bfcd5343ccb1e07972f3","tarball":"https://registry.npmjs.org/@d3ara1n/pi-model-roles/-/pi-model-roles-1.0.0.tgz","fileCount":9,"integrity":"sha512-wgBjMvHHofcXuIWbW45K8z4lKI91UtK1vtsG2CRQ3H/EWTbh9Tw1xT2cEiGXy+l6dHMx7ciRluEt+L9eX74ynw==","signatures":[{"sig":"MEYCIQCPYYb3WJ4XmiSUz3PhBRKNBp4JcouRxvVuLoZkdZ72OgIhAKsXQ9AG9LB4/rctPcGdTJb4D6S/YuqGF9BoNkE2gUJj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@d3ara1n%2fpi-model-roles@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":33974},"main":"src/index.ts","type":"module","types":"src/types.ts","gitHead":"fec7067c07005c8178d2bae0f79538a3d3fd9b16","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:32ea3b92-2eb1-4b5f-a525-23f8a83d14ca"}},"repository":{"url":"git+https://github.com/d3ara1n/pi-extensions.git","type":"git","directory":"packages/pi-model-roles"},"_npmVersion":"11.16.0","description":"Model role configuration library for pi extensions — defines named model roles and resolves them to Model instances","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-model-roles_1.0.0_1783873605960_0.3534480235201052","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@d3ara1n/pi-model-roles","version":"1.1.0","keywords":["pi-package","pi","pi-extension"],"license":"MIT","_id":"@d3ara1n/pi-model-roles@1.1.0","maintainers":[{"name":"d3ara1n","email":"d3ara1n@outlook.com"}],"homepage":"https://github.com/d3ara1n/pi-extensions#readme","bugs":{"url":"https://github.com/d3ara1n/pi-extensions/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"cf2d7a06af136b309cccc96e689ba67ee353c01d","tarball":"https://registry.npmjs.org/@d3ara1n/pi-model-roles/-/pi-model-roles-1.1.0.tgz","fileCount":9,"integrity":"sha512-OopdqStn5867XX/ml4GIuxDDErpSxcOg15JSZ+NuK0zKDln9aeE2+tXB+FItmCl7xgL5f2DsV46WXO9T/Xivfw==","signatures":[{"sig":"MEQCICSVmUw2+gGrGZbSDEsfioZ3rJ7PAMCHMf1W+AnbrymIAiB1TdCpZAETqCZmWauHeflBimW3IfiGdqRW0rYQXfUi6g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@d3ara1n%2fpi-model-roles@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":35139},"main":"src/index.ts","type":"module","types":"src/types.ts","gitHead":"c2a26e2a999a59ce4ba9188d7b175b0fec86e707","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:32ea3b92-2eb1-4b5f-a525-23f8a83d14ca"}},"repository":{"url":"git+https://github.com/d3ara1n/pi-extensions.git","type":"git","directory":"packages/pi-model-roles"},"_npmVersion":"11.16.0","description":"Model role configuration library for pi extensions — defines named model roles and resolves them to Model instances","directories":{},"_nodeVersion":"24.18.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-model-roles_1.1.0_1784810159979_0.07422247450766695","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@d3ara1n/pi-model-roles","version":"1.1.1","keywords":["pi-package","pi","pi-extension"],"license":"MIT","_id":"@d3ara1n/pi-model-roles@1.1.1","maintainers":[{"name":"d3ara1n","email":"d3ara1n@outlook.com"}],"homepage":"https://github.com/d3ara1n/pi-extensions#readme","bugs":{"url":"https://github.com/d3ara1n/pi-extensions/issues"},"pi":{"extensions":["./src/index.ts"]},"dist":{"shasum":"9f3894af1a1794e6190518dd5381b7df060c531a","tarball":"https://registry.npmjs.org/@d3ara1n/pi-model-roles/-/pi-model-roles-1.1.1.tgz","fileCount":9,"integrity":"sha512-DgsvRC42rIlaDcEjbmJOJTZfBoDL20qybmrYZ79CWxXW7Xih8/gzLM7pDN/AlbLt8Q2HeZQvszArF1dRsCpN9w==","signatures":[{"sig":"MEUCIQDxX47fyVj87n5HEYRvyH9Nzz5rJKqfTvt4WaOHQmrR/QIgaOLdH6zPgEJgW6eYSvtVwfeNeNOg2u1QB7hQ+u6io0A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@d3ara1n%2fpi-model-roles@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":37310},"main":"src/index.ts","type":"module","types":"src/types.ts","gitHead":"a4effb6378e58894f304e82981af1ce18aeb853c","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:32ea3b92-2eb1-4b5f-a525-23f8a83d14ca"}},"repository":{"url":"git+https://github.com/d3ara1n/pi-extensions.git","type":"git","directory":"packages/pi-model-roles"},"_npmVersion":"11.17.0","description":"Model role configuration library for pi extensions — defines named model roles and resolves them to Model instances","directories":{},"_nodeVersion":"24.19.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-model-roles_1.1.1_1786705886139_0.49979412995983563","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"pi":{"extensions":["./src/index.ts"]},"_id":"@d3ara1n/pi-model-roles@2.0.0","bugs":{"url":"https://github.com/d3ara1n/pi-extensions/issues"},"dist":{"shasum":"4f07f3871a875b66f8c29fdc4894b5c7ff121c77","tarball":"https://registry.npmjs.org/@d3ara1n/pi-model-roles/-/pi-model-roles-2.0.0.tgz","fileCount":9,"integrity":"sha512-2TBKSuv9jdrIaXWlfCu9fs0Lw8sz2tEdrqpOY/fetcdBogPg5CCO7YAfJukVkj5pbZzLi4xO9yKoKiQkbGmlOg==","signatures":[{"sig":"MEUCIQDJu9TITS1VrsKeqJKT6Fsp7jsfukTg84OBN+MeuH3cIwIgYDfJpwXPbEv7JYZwoY7OYEj8gNV1ClR18D/vHvb0D3A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIA9QZJYnRf3dg6ddSY5ijkK0fMezvAUUi7y2NrlEY9EaAiEApeXUGMKn1BpkUYOLHLDt39K7X7rUr8Al9rJb1HFklsA="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@d3ara1n%2fpi-model-roles@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":38513},"main":"src/index.ts","name":"@d3ara1n/pi-model-roles","type":"module","types":"src/types.ts","gitHead":"86de6f44c0e89766c3b252995a898b72379d3e47","license":"MIT","version":"2.0.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:32ea3b92-2eb1-4b5f-a525-23f8a83d14ca"}},"homepage":"https://github.com/d3ara1n/pi-extensions/tree/main/packages/pi-model-roles#readme","keywords":["pi-package","pi","pi-extension"],"repository":{"url":"git+https://github.com/d3ara1n/pi-extensions.git","type":"git","directory":"packages/pi-model-roles"},"_npmVersion":"11.19.0","description":"Model role configuration library for pi extensions — defines named model roles and resolves them to Model instances","directories":{},"maintainers":[{"name":"d3ara1n","email":"d3ara1n@outlook.com"}],"_nodeVersion":"24.20.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-coding-agent":">=0.86.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-model-roles_2.0.0_1789871131624_0.2951121201191922"}}},"time":{"created":"2026-06-05T08:09:39.813Z","modified":"2026-09-20T02:25:32.013Z","0.1.0":"2026-06-05T08:09:40.266Z","0.2.0":"2026-06-06T11:19:12.144Z","0.2.1":"2026-06-24T03:22:20.037Z","0.3.0":"2026-06-24T06:43:42.741Z","0.3.1":"2026-06-26T04:50:39.274Z","0.4.0":"2026-07-03T12:13:32.887Z","0.5.0":"2026-07-04T05:37:58.109Z","0.6.0":"2026-07-06T10:39:07.044Z","0.6.1":"2026-07-10T05:39:05.372Z","0.6.2":"2026-07-10T18:31:25.037Z","0.7.0":"2026-07-10T20:55:12.126Z","0.7.1":"2026-07-11T11:27:56.810Z","1.0.0":"2026-07-12T16:26:46.111Z","1.1.0":"2026-07-23T12:36:00.135Z","1.1.1":"2026-08-14T11:11:26.291Z","2.0.0":"2026-09-20T02:25:31.705Z"},"bugs":{"url":"https://github.com/d3ara1n/pi-extensions/issues"},"license":"MIT","homepage":"https://github.com/d3ara1n/pi-extensions/tree/main/packages/pi-model-roles#readme","keywords":["pi-package","pi","pi-extension"],"repository":{"url":"git+https://github.com/d3ara1n/pi-extensions.git","type":"git","directory":"packages/pi-model-roles"},"description":"Model role configuration library for pi extensions — defines named model roles and resolves them to Model instances","maintainers":[{"name":"d3ara1n","email":"d3ara1n@outlook.com"}],"readme":"# @d3ara1n/pi-model-roles\n\n[![npm version](https://img.shields.io/npm/v/@d3ara1n/pi-model-roles)](https://www.npmjs.com/package/@d3ara1n/pi-model-roles) [![npm downloads](https://img.shields.io/npm/dm/@d3ara1n/pi-model-roles)](https://www.npmjs.com/package/@d3ara1n/pi-model-roles) [![license](https://img.shields.io/npm/l/@d3ara1n/pi-model-roles)](https://www.npmjs.com/package/@d3ara1n/pi-model-roles)\n\nGive pi's background sub-tasks — naming sessions, routing, side agents — their own model and thinking level, instead of running every throwaway job on your main (expensive) model.\n\nNamed **roles** (`heavy`, `fast`, `utility`, …) each map to a model + thinking level. Other pi extensions ask model-roles \"which model fits this job?\" and get the right one back, auth already resolved.\n\nRequires pi 0.86.0 or newer. Model calls use pi's configured provider registry, including providers registered by extensions.\n\n## Why roles\n\nWithout model-roles, every background task either hardcodes its own model (inflexible) or piggybacks on your active model (a throwaway \"title this session\" call burns your premium budget). Roles centralize the decision: declare once in settings, every consumer respects it. Cheap jobs route to cheap models; deep-thinking jobs get the strong model.\n\n## Who uses it\n\nYou'll usually meet model-roles through one of these extensions — none of them require you to touch the API yourself:\n\n- **pi-scout** — picks the side-agent's model from your visible roles\n- **pi-subagent** — assigns models to delegated sub-tasks\n- **pi-session-namer** — titles your chat sessions via the `utility` role (it reads the **entire** conversation)\n- **pi-peek** — runs lightweight cross-instance lookups\n\nIf you're not writing a pi extension, the sections down to **Configuration** are all you need.\n\n## Dependencies\n\nNone.\n\n## Installation\n\n```bash\npi install npm:@d3ara1n/pi-model-roles\n```\n\nOr add to `~/.pi/agent/settings.json`:\n\n```jsonc\n{\n  \"extensions\": [\n    \"/absolute/path/to/pi-extensions/packages/pi-model-roles\"\n  ]\n}\n```\n\nThis is an **extension dependency**, not a passive npm-only library. It must appear in pi's `extensions` array alongside every consumer so its `session_start` hook initializes the shared API — installing it as an npm dependency alone does not load it.\n\n## Default roles\n\nWorks out of the box — no configuration required.\nBuilt-in defaults use `model: null` (use pi's current model, don't switch):\n\n| Role | model | thinking | Description |\n|------|-------|----------|-------------|\n| `default` | null | medium | Regular dev tasks: new features, code edits, code review, adding tests, general debugging, single-file changes |\n| `heavy` | null | high | Deep-thinking tasks: cross-file refactoring, architecture design, complex bug debugging, performance optimization, security analysis, DB schema changes, multi-module migrations |\n| `fast` | null | low | Simple deterministic tasks: one-line edits, formatting, simple Q&A, doc lookups, git operations, confirmations |\n| `utility` | null | off | Lightweight utility tasks: routing, commit gen, title summarization |\n\n`model: null` means \"keep using whatever model pi currently has\".\nOnly `thinking` level differs between roles by default.\n\n## Model selection guide\n\nThe defaults all use `model: null`, so every role runs on your current model — fine to start, but you're paying premium prices for throwaway work. Assign models per role to cut cost and latency:\n\n| Role | Recommendation | Why |\n|------|----------------|-----|\n| `utility` | `deepseek/deepseek-v4-flash`, thinking `off` | Used for session naming and similar jobs that read the **whole conversation** at once — so it needs a large context window. It runs often and you never read its output, so it must be nearly free. And it runs in the background, so it must answer fast enough not to block the main flow. DeepSeek V4 Flash nails all three: huge context, dirt cheap, snappy. |\n| `fast` | a cheap, fast model, e.g. `google/gemini-2.5-flash`, thinking `low`/`off` | One-line edits, formatting, lookups — throughput and latency matter more than depth. |\n| `heavy` | your strongest reasoning model, e.g. `anthropic/claude-opus-4`, thinking `high` | Reserve for genuinely hard, cross-cutting work; running it on everything wastes budget. |\n| `default` | leave `null` | Keeps using your everyday model; `medium` thinking suits most work. |\n\nConcrete config:\n\n```jsonc\n{\n  \"modelRoles\": {\n    \"roles\": {\n      \"heavy\": { \"model\": \"anthropic/claude-opus-4\" },\n      \"fast\": { \"model\": \"google/gemini-2.5-flash\", \"thinking\": \"off\" },\n      \"utility\": { \"model\": \"deepseek/deepseek-v4-flash\", \"thinking\": \"off\" }\n    }\n  }\n}\n```\n\n## Configuration\n\nOverride specific roles in `~/.pi/agent/settings.json`:\n\n```jsonc\n{\n  \"modelRoles\": {\n    \"roles\": {\n      \"heavy\": {\n        \"model\": \"anthropic/claude-opus-4\"\n      },\n      \"fast\": {\n        \"model\": \"google/gemini-2.5-flash\",\n        \"thinking\": \"off\"\n      },\n      \"utility\": {\n        \"model\": \"deepseek/deepseek-v4-flash\",\n        \"thinking\": \"off\"\n      }\n    },\n    \"defaultRole\": \"default\"\n  }\n}\n```\n\nUser settings merge with built-in defaults: only override roles you want to change. You can also add entirely new roles — any name works.\n\n### Role fields\n\n| Field | Type | Default | Description |\n|-------|------|---------|-------------|\n| `model` | `string \\| null` | `null` | `\"provider/model-id\"` or `null` = use current model |\n| `thinking` | `string` | *(unset — passes through)* | `\"off\"` `\"minimal\"` `\"low\"` `\"medium\"` `\"high\"` `\"xhigh\"`; omit to leave reasoning untouched |\n| `description` | `string` | | Human-readable description |\n| `hidden` | `boolean` | `false` | Hide from user-facing listings |\n\n## Tools and commands\n\n- `list_models` — tool that lists available `provider/model-id` values from pi's model registry (handy for confirming an ID before referencing it)\n- `/roles` — shows configured roles and their resolved models\n\n---\n\n## For extension authors\n\nEverything below is for code that imports `getModelRolesAPI`. Role-only users can stop here.\n\n```typescript\nimport { getModelRolesAPI } from \"@d3ara1n/pi-model-roles\";\nimport type { ModelRolesAPI } from \"@d3ara1n/pi-model-roles\";\n\nconst roles: ModelRolesAPI = getModelRolesAPI();\n\n// Resolve a role — always returns a real model or undefined\nconst resolved = await roles.resolveRoleAsync(\"heavy\");\nif (resolved.model) {\n  // Use resolved.model, resolved.apiKey, resolved.headers\n  // model=null in config is transparently resolved to pi's current model\n} else {\n  // Model not available\n}\n\n// Reverse lookup\nroles.findRoleByModel(\"anthropic/claude-opus-4\"); // \"heavy\"\n\n// \"Which role is the currently-active model?\" — recognizes the default role\n// even when all roles are model=null (the common case), so callers (e.g.\n// pi-scout's router) have a real baseline instead of \"unknown\".\nroles.getCurrentRole(\"anthropic/claude-sonnet-4\");\n```\n\n### Hidden roles\n\nRoles with `hidden: true` are excluded from `getVisibleRoles()` — the list pi-scout's router picks the side-agent model from, so the side agent won't suggest switching to them. They can still be used directly by name (e.g. as `sideAgentRole` in scout config) and resolved via `resolveRole()` / `resolveRoleAsync()`. `utility` is hidden by default.\n\n### Unknown-role fallback\n\nA missing role requested through `resolveRole()`, `resolveRoleAsync()`, `completeWithRole()`, or `streamWithRole()` uses `defaultRole`'s configuration once; if that cannot resolve, the call falls back to the current model when applicable or reports no model. The returned `ResolvedRole.name` remains the unknown requested name, and `getRole()` continues to return only explicitly defined roles.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}