{"_id":"@0xkobold/pi-whitelist","_rev":"11-e26b44e55f2f5f0fd3f009c19d5fb570","name":"@0xkobold/pi-whitelist","dist-tags":{"latest":"0.5.2"},"versions":{"0.1.0":{"name":"@0xkobold/pi-whitelist","version":"0.1.0","keywords":["permissions","whitelist","ai-agent","tool-gating"],"license":"MIT","_id":"@0xkobold/pi-whitelist@0.1.0","maintainers":[{"name":"moikapy","email":"warrenckhan@gmail.com"}],"homepage":"https://github.com/0xKobold/pi-whitelist#readme","bugs":{"url":"https://github.com/0xKobold/pi-whitelist/issues"},"dist":{"shasum":"afc0d72805e444a95b6d32c9deeacafd04f1300f","tarball":"https://registry.npmjs.org/@0xkobold/pi-whitelist/-/pi-whitelist-0.1.0.tgz","fileCount":91,"integrity":"sha512-scXGo5ZPxGGRkhhGpPxQD2bTU1EaixYdA3WaohbXfCTcl0mmfTNs8YkImOcog5JE/zlBhjgJoBoLwMMTCIv1eA==","signatures":[{"sig":"MEYCIQCf6PSVifGTdyrnChWMd3q/YJgEVxoy/SfWN6ZwiUjFAgIhAMySAykhT2dbfo4qqPvQ9YSegcUX663P330paj1CSk9j","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":98177},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./rules":{"types":"./dist/rules/index.d.ts","import":"./dist/rules/index.js"},"./types":{"types":"./dist/types/index.d.ts","import":"./dist/types/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js"},"./matchers":{"types":"./dist/matchers/index.d.ts","import":"./dist/matchers/index.js"}},"gitHead":"fef8393fcd6c5dd3f3e82dd56cbf7b183121e68a","scripts":{"test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"moikapy","email":"warrenckhan@gmail.com"},"repository":{"url":"git+https://github.com/0xKobold/pi-whitelist.git","type":"git"},"_npmVersion":"11.6.2","description":"Tri-state tool permission system (allow/deny/ask) for AI agent tool invocations","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^3.24.0","picomatch":"^4.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.1.0","typescript":"^5.7.0","@types/node":"^22.0.0","@types/picomatch":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-whitelist_0.1.0_1778640235258_0.6016821729989663","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@0xkobold/pi-whitelist","version":"0.2.0","keywords":["pi-package","permissions","whitelist","ai-agent","tool-gating"],"license":"MIT","_id":"@0xkobold/pi-whitelist@0.2.0","maintainers":[{"name":"moikapy","email":"warrenckhan@gmail.com"}],"homepage":"https://github.com/0xKobold/pi-whitelist#readme","bugs":{"url":"https://github.com/0xKobold/pi-whitelist/issues"},"pi":{"skills":["./SKILL.md"],"extensions":["./dist/extension.js"]},"dist":{"shasum":"f339fb379f860cc795fc2a1e4c8afbd7a70d458f","tarball":"https://registry.npmjs.org/@0xkobold/pi-whitelist/-/pi-whitelist-0.2.0.tgz","fileCount":95,"integrity":"sha512-NRwokWuqcMz2dtfsYltRPXzbpVLaSfOFZtj6i2NyrvxGKmE5PSqwYHOiA1XUUrW7v71+/KtXJVMDw1j+zryg6Q==","signatures":[{"sig":"MEQCIDJpfxXlVnhoNtZqcw1uXDMuhd36e79FkEaEwBB6X7hXAiATRSeFvChuiEIPjBunTWhB1jg+B8Iv9vxgVHcyCoES1w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":116443},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./rules":{"types":"./dist/rules/index.d.ts","import":"./dist/rules/index.js"},"./types":{"types":"./dist/types/index.d.ts","import":"./dist/types/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js"},"./matchers":{"types":"./dist/matchers/index.d.ts","import":"./dist/matchers/index.js"}},"gitHead":"fef8393fcd6c5dd3f3e82dd56cbf7b183121e68a","scripts":{"test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"moikapy","email":"warrenckhan@gmail.com"},"repository":{"url":"git+https://github.com/0xKobold/pi-whitelist.git","type":"git"},"_npmVersion":"11.6.2","description":"Tri-state tool permission system (allow/deny/ask) for AI agent tool invocations","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^3.24.0","picomatch":"^4.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.1.0","typescript":"^5.7.0","@types/node":"^22.0.0","@types/picomatch":"^4.0.0","@earendil-works/pi-coding-agent":"^0.74.0"},"peerDependencies":{"@earendil-works/pi-coding-agent":">=0.74.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-whitelist_0.2.0_1778641726691_0.7049613844157241","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@0xkobold/pi-whitelist","version":"0.2.1","keywords":["pi-package","permissions","whitelist","ai-agent","tool-gating"],"license":"MIT","_id":"@0xkobold/pi-whitelist@0.2.1","maintainers":[{"name":"moikapy","email":"warrenckhan@gmail.com"}],"homepage":"https://github.com/0xKobold/pi-whitelist#readme","bugs":{"url":"https://github.com/0xKobold/pi-whitelist/issues"},"pi":{"skills":["./SKILL.md"],"extensions":["./dist/extension.js"]},"dist":{"shasum":"87859ea317f16e0dcaefc346c01915ca7c8ed111","tarball":"https://registry.npmjs.org/@0xkobold/pi-whitelist/-/pi-whitelist-0.2.1.tgz","fileCount":95,"integrity":"sha512-SrBvZBq6X9swwcVvlNZqfmBJdlxvL+RMcxbN1yBhwF737gKLidYWekEkZtt/HSOfJP7y83jutTOPklMOz3di1Q==","signatures":[{"sig":"MEQCIGm1g9Ku4xgUBtMa8nStKMP2o9K4LqphNswRNYoXNWalAiBuR89Xfv5pxUa1n8yiwqdpMQbQlbJiZ8XLHKIYRlVkNg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":117251},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./rules":{"types":"./dist/rules/index.d.ts","import":"./dist/rules/index.js"},"./types":{"types":"./dist/types/index.d.ts","import":"./dist/types/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js"},"./matchers":{"types":"./dist/matchers/index.d.ts","import":"./dist/matchers/index.js"}},"gitHead":"401ddf975810d4631882fecee7396243ab3ffb00","scripts":{"test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"moikapy","email":"warrenckhan@gmail.com"},"repository":{"url":"git+https://github.com/0xKobold/pi-whitelist.git","type":"git"},"_npmVersion":"11.6.2","description":"Tri-state tool permission system (allow/deny/ask) for AI agent tool invocations","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^3.24.0","picomatch":"^4.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.1.0","typescript":"^5.7.0","@types/node":"^22.0.0","@types/picomatch":"^4.0.0","@earendil-works/pi-coding-agent":"^0.74.0"},"peerDependencies":{"@earendil-works/pi-coding-agent":">=0.74.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-whitelist_0.2.1_1778642276914_0.3826830577174041","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@0xkobold/pi-whitelist","version":"0.3.0","keywords":["pi-package","permissions","whitelist","ai-agent","tool-gating"],"license":"MIT","_id":"@0xkobold/pi-whitelist@0.3.0","maintainers":[{"name":"moikapy","email":"warrenckhan@gmail.com"}],"homepage":"https://github.com/0xKobold/pi-whitelist#readme","bugs":{"url":"https://github.com/0xKobold/pi-whitelist/issues"},"pi":{"skills":["./SKILL.md"],"extensions":["./dist/extension.js"]},"dist":{"shasum":"ff8bc4f3d4968eebe7c0910807a5bcf44c2535c6","tarball":"https://registry.npmjs.org/@0xkobold/pi-whitelist/-/pi-whitelist-0.3.0.tgz","fileCount":99,"integrity":"sha512-oxcFE5oJx+/1/ub7EBGU3u+hDZNOAbryW+U57FVrDKLtfepk2us4AkqruBhaWI1ZjsAOaan8akEaCiz5roRArA==","signatures":[{"sig":"MEUCIH5olMuLNKanXq9bMb6CxvbEWzM92J8bMSup1P+I2li6AiEArSB6qvFtOSvBN01NAT+R+DDtkdxi46u+z9viMfDKKHs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":123670},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./rules":{"types":"./dist/rules/index.d.ts","import":"./dist/rules/index.js"},"./types":{"types":"./dist/types/index.d.ts","import":"./dist/types/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js"},"./matchers":{"types":"./dist/matchers/index.d.ts","import":"./dist/matchers/index.js"}},"gitHead":"02a30a57cbc1bf34b468bf6b12d9001813b10e86","scripts":{"test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"moikapy","email":"warrenckhan@gmail.com"},"repository":{"url":"git+https://github.com/0xKobold/pi-whitelist.git","type":"git"},"_npmVersion":"11.6.2","description":"Tri-state tool permission system (allow/deny/ask) for AI agent tool invocations","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^3.24.0","picomatch":"^4.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.1.0","typescript":"^5.7.0","@types/node":"^22.0.0","@types/picomatch":"^4.0.0","@earendil-works/pi-coding-agent":"^0.74.0"},"peerDependencies":{"@earendil-works/pi-coding-agent":">=0.74.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-whitelist_0.3.0_1778687342655_0.3250750426502935","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@0xkobold/pi-whitelist","version":"0.3.1","keywords":["pi-package","permissions","whitelist","ai-agent","tool-gating"],"license":"MIT","_id":"@0xkobold/pi-whitelist@0.3.1","maintainers":[{"name":"moikapy","email":"warrenckhan@gmail.com"}],"homepage":"https://github.com/0xKobold/pi-whitelist#readme","bugs":{"url":"https://github.com/0xKobold/pi-whitelist/issues"},"pi":{"skills":["./SKILL.md"],"extensions":["./dist/extension.js"]},"dist":{"shasum":"25787ea78fa090059e4446be368958cd1ed692de","tarball":"https://registry.npmjs.org/@0xkobold/pi-whitelist/-/pi-whitelist-0.3.1.tgz","fileCount":99,"integrity":"sha512-LVAWmDAN/3+/Oh8v8ji04nz3pYS7pQvQQBdx3LCLhhANCoEXKqaAKF3zOavJv7asng/RSx0ibiJ9pFnE/3ntxQ==","signatures":[{"sig":"MEQCIFIbYVzYpwEPtN/iXpJhugpsNOdt3+dnjBU+dHaWmZt0AiAVdQCmuEyOubzIapFKtDRGgitMdZx+D0JnCO9HhcVTrQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":122885},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./rules":{"types":"./dist/rules/index.d.ts","import":"./dist/rules/index.js"},"./types":{"types":"./dist/types/index.d.ts","import":"./dist/types/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js"},"./matchers":{"types":"./dist/matchers/index.d.ts","import":"./dist/matchers/index.js"}},"gitHead":"a6d8bdc8d28472d76684c030f1a8ed6f95d23159","scripts":{"test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"moikapy","email":"warrenckhan@gmail.com"},"repository":{"url":"git+https://github.com/0xKobold/pi-whitelist.git","type":"git"},"_npmVersion":"11.6.2","description":"Tri-state tool permission system (allow/deny/ask) for AI agent tool invocations","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^3.24.0","picomatch":"^4.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.1.0","typescript":"^5.7.0","@types/node":"^22.0.0","@types/picomatch":"^4.0.0","@earendil-works/pi-coding-agent":"^0.74.0"},"peerDependencies":{"@earendil-works/pi-coding-agent":">=0.74.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-whitelist_0.3.1_1778687633659_0.5811911776530969","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@0xkobold/pi-whitelist","version":"0.4.0","keywords":["pi-package","permissions","whitelist","ai-agent","tool-gating"],"license":"MIT","_id":"@0xkobold/pi-whitelist@0.4.0","maintainers":[{"name":"moikapy","email":"warrenckhan@gmail.com"}],"homepage":"https://github.com/0xKobold/pi-whitelist#readme","bugs":{"url":"https://github.com/0xKobold/pi-whitelist/issues"},"pi":{"skills":["./SKILL.md"],"extensions":["./dist/extension.js"]},"dist":{"shasum":"f11c0ca6546545e48bd4028f34fd615ebd358fde","tarball":"https://registry.npmjs.org/@0xkobold/pi-whitelist/-/pi-whitelist-0.4.0.tgz","fileCount":111,"integrity":"sha512-EIlUeSjI13APHIZu+iUfx+GbfICT/s3aCFLvhxkbxu8ndCORsab32bamBpYu8T0TRLl+q9FwrQDleGzStZ4L9Q==","signatures":[{"sig":"MEYCIQCx2DndWAgbkTokQlBoCNTrS4yGtjfEKcxaqsAqKXEtQgIhAKEg3dQzTrmGVXlHs874lZEQAjTLQgFWkqtT8vGeTmkD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":156743},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./rules":{"types":"./dist/rules/index.d.ts","import":"./dist/rules/index.js"},"./types":{"types":"./dist/types/index.d.ts","import":"./dist/types/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js"},"./matchers":{"types":"./dist/matchers/index.d.ts","import":"./dist/matchers/index.js"}},"gitHead":"7cd9c9a2f3344c6cf191ee5778ecb7d6f7e638eb","scripts":{"test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"moikapy","email":"warrenckhan@gmail.com"},"repository":{"url":"git+https://github.com/0xKobold/pi-whitelist.git","type":"git"},"_npmVersion":"11.6.2","description":"Tri-state tool permission system (allow/deny/ask) for AI agent tool invocations","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^3.24.0","picomatch":"^4.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.1.0","typescript":"^5.7.0","@types/node":"^22.0.0","@types/picomatch":"^4.0.0","@earendil-works/pi-coding-agent":"^0.74.0"},"peerDependencies":{"@earendil-works/pi-coding-agent":">=0.74.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-whitelist_0.4.0_1778689398599_0.7907976394185561","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@0xkobold/pi-whitelist","version":"0.4.1","keywords":["pi-package","permissions","whitelist","ai-agent","tool-gating"],"license":"MIT","_id":"@0xkobold/pi-whitelist@0.4.1","maintainers":[{"name":"moikapy","email":"warrenckhan@gmail.com"}],"homepage":"https://github.com/0xKobold/pi-whitelist#readme","bugs":{"url":"https://github.com/0xKobold/pi-whitelist/issues"},"pi":{"skills":["./SKILL.md"],"extensions":["./dist/extension.js"]},"dist":{"shasum":"3d8a91dd2e152d70810bf95c43639581ada4ea0f","tarball":"https://registry.npmjs.org/@0xkobold/pi-whitelist/-/pi-whitelist-0.4.1.tgz","fileCount":111,"integrity":"sha512-E6q1ddscwbNg6Yp55iwpWnlD1ppm0OpKSz6wrnsCBKhX1r8bf7U4yyxPiJAd1bkrfStJpreoHrfGPZfdJ/USWw==","signatures":[{"sig":"MEYCIQCqlk0T7Fo9Z04dllKmGcECZY35jMAw92pLawm4pGqMOwIhAMofFTO+v3Syw5JjqRMnuxzJuxQ6GXd2EKNfyuAWWVF8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":159970},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./rules":{"types":"./dist/rules/index.d.ts","import":"./dist/rules/index.js"},"./types":{"types":"./dist/types/index.d.ts","import":"./dist/types/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js"},"./matchers":{"types":"./dist/matchers/index.d.ts","import":"./dist/matchers/index.js"}},"gitHead":"bf7c12c8a52ffd2979277fd8adf2cbb1a2920c4c","scripts":{"test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"moikapy","email":"warrenckhan@gmail.com"},"repository":{"url":"git+https://github.com/0xKobold/pi-whitelist.git","type":"git"},"_npmVersion":"11.6.2","description":"Tri-state tool permission system (allow/deny/ask) for AI agent tool invocations","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^3.24.0","picomatch":"^4.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.1.0","typescript":"^5.7.0","@types/node":"^22.0.0","@types/picomatch":"^4.0.0","@earendil-works/pi-coding-agent":"^0.74.0"},"peerDependencies":{"@earendil-works/pi-coding-agent":">=0.74.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-whitelist_0.4.1_1778690120486_0.996705032157402","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@0xkobold/pi-whitelist","version":"0.4.2","keywords":["pi-package","permissions","whitelist","ai-agent","tool-gating"],"license":"MIT","_id":"@0xkobold/pi-whitelist@0.4.2","maintainers":[{"name":"moikapy","email":"warrenckhan@gmail.com"}],"homepage":"https://github.com/0xKobold/pi-whitelist#readme","bugs":{"url":"https://github.com/0xKobold/pi-whitelist/issues"},"pi":{"skills":["./SKILL.md"],"extensions":["./dist/extension.js"]},"dist":{"shasum":"95bbd9eb65c5b37fddc5f0934d429f47d6b916e9","tarball":"https://registry.npmjs.org/@0xkobold/pi-whitelist/-/pi-whitelist-0.4.2.tgz","fileCount":111,"integrity":"sha512-CREPjYrZHSNILRJlJG/psXWCRFJn5i9HHeUS592W6XysPpEU4bD8zHDcx2/AtGDVNobMr/vHTQch7GRxPicX3g==","signatures":[{"sig":"MEUCIAsZnSv4iCq/zMhuSAcbUJ+ThRaEw4fpATN2up6coo6ZAiEAtUClpWsnba6d/y2Ao9e/vsoytuueaWQVwgY1PYK2lrQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":159621},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./rules":{"types":"./dist/rules/index.d.ts","import":"./dist/rules/index.js"},"./types":{"types":"./dist/types/index.d.ts","import":"./dist/types/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js"},"./matchers":{"types":"./dist/matchers/index.d.ts","import":"./dist/matchers/index.js"}},"gitHead":"29f9e4535dc090ef74ae131c65c0f86a31558528","scripts":{"test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"moikapy","email":"warrenckhan@gmail.com"},"repository":{"url":"git+https://github.com/0xKobold/pi-whitelist.git","type":"git"},"_npmVersion":"11.6.2","description":"Tri-state tool permission system (allow/deny/ask) for AI agent tool invocations","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^3.24.0","picomatch":"^4.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.1.0","typescript":"^5.7.0","@types/node":"^22.0.0","@types/picomatch":"^4.0.0","@earendil-works/pi-coding-agent":"^0.74.0"},"peerDependencies":{"@earendil-works/pi-coding-agent":">=0.74.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-whitelist_0.4.2_1778696647217_0.029182082856952674","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@0xkobold/pi-whitelist","version":"0.5.0","keywords":["pi-package","permissions","whitelist","ai-agent","tool-gating"],"license":"MIT","_id":"@0xkobold/pi-whitelist@0.5.0","maintainers":[{"name":"moikapy","email":"warrenckhan@gmail.com"}],"homepage":"https://github.com/0xKobold/pi-whitelist#readme","bugs":{"url":"https://github.com/0xKobold/pi-whitelist/issues"},"pi":{"skills":["./SKILL.md"],"extensions":["./dist/extension.js"]},"dist":{"shasum":"95aafcff3e64d8ba710d6a4b87e01b661647f8fb","tarball":"https://registry.npmjs.org/@0xkobold/pi-whitelist/-/pi-whitelist-0.5.0.tgz","fileCount":111,"integrity":"sha512-21TgPqUrBki8SS2E1JHQQ8YFi4AsmHna02a51xz/Z+Te70c38K4TPCnBQPk/gRDlHbIy4hhDHkID6Cl+MCqWkQ==","signatures":[{"sig":"MEQCICarbmSW+wZSRGcWSFXjY50w9Wk5ldHoiIvoP+vepY54AiBm6ljassuZYs9u3b7n4Y3tZCWLppAXXPJOZRP40DyuEw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":159463},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./rules":{"types":"./dist/rules/index.d.ts","import":"./dist/rules/index.js"},"./types":{"types":"./dist/types/index.d.ts","import":"./dist/types/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js"},"./matchers":{"types":"./dist/matchers/index.d.ts","import":"./dist/matchers/index.js"}},"gitHead":"cd01cbbc687d180e01363f55e409bd12d038d66e","scripts":{"test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"moikapy","email":"warrenckhan@gmail.com"},"repository":{"url":"git+https://github.com/0xKobold/pi-whitelist.git","type":"git"},"_npmVersion":"11.6.2","description":"Tri-state tool permission system (allow/deny/ask) for AI agent tool invocations","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^3.24.0","picomatch":"^4.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.1.0","typescript":"^5.7.0","@types/node":"^22.0.0","@types/picomatch":"^4.0.0","@earendil-works/pi-coding-agent":"^0.74.0"},"peerDependencies":{"@earendil-works/pi-coding-agent":">=0.74.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-whitelist_0.5.0_1778700010787_0.1876843246997031","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@0xkobold/pi-whitelist","version":"0.5.1","keywords":["pi-package","permissions","whitelist","ai-agent","tool-gating"],"license":"MIT","_id":"@0xkobold/pi-whitelist@0.5.1","maintainers":[{"name":"moikapy","email":"warrenckhan@gmail.com"}],"homepage":"https://github.com/0xKobold/pi-whitelist#readme","bugs":{"url":"https://github.com/0xKobold/pi-whitelist/issues"},"pi":{"skills":["./SKILL.md"],"extensions":["./dist/extension.js"]},"dist":{"shasum":"93a2181f4d9af28786f75731ec997f907a0d81da","tarball":"https://registry.npmjs.org/@0xkobold/pi-whitelist/-/pi-whitelist-0.5.1.tgz","fileCount":111,"integrity":"sha512-aI/KQQ/yjhfwIx9zlpkSX+p3thHuv8e3YHqzTxprt66EQDhPaLGqjnKV+/tfVH13MVi/QnjnB/nTOTWzMHjpbw==","signatures":[{"sig":"MEUCIQCC+NE4HuPtY+ZXI3iMdUCVQGI0fEHakgZeT12voHWyGgIgHtsfXMCdGJBjwlAJee9EegAQUj4ZZOpCwjolUOYaT0w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":161778},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./rules":{"types":"./dist/rules/index.d.ts","import":"./dist/rules/index.js"},"./types":{"types":"./dist/types/index.d.ts","import":"./dist/types/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js"},"./matchers":{"types":"./dist/matchers/index.d.ts","import":"./dist/matchers/index.js"}},"gitHead":"b249848edc4cf6003949a706841ea264e1575879","scripts":{"test":"vitest run","build":"tsc","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"moikapy","email":"warrenckhan@gmail.com"},"repository":{"url":"git+https://github.com/0xKobold/pi-whitelist.git","type":"git"},"_npmVersion":"11.6.2","description":"Tri-state tool permission system (allow/deny/ask) for AI agent tool invocations","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^3.24.0","picomatch":"^4.0.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.1.0","typescript":"^5.7.0","@types/node":"^22.0.0","@types/picomatch":"^4.0.0","@earendil-works/pi-coding-agent":"^0.74.0"},"peerDependencies":{"@earendil-works/pi-coding-agent":">=0.74.0"},"_npmOperationalInternal":{"tmp":"tmp/pi-whitelist_0.5.1_1778707416411_0.8895510918382141","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@0xkobold/pi-whitelist","version":"0.5.2","description":"Tri-state tool permission system (allow/deny/ask) for AI agent tool invocations","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./rules":{"types":"./dist/rules/index.d.ts","import":"./dist/rules/index.js"},"./matchers":{"types":"./dist/matchers/index.d.ts","import":"./dist/matchers/index.js"},"./storage":{"types":"./dist/storage/index.d.ts","import":"./dist/storage/index.js"},"./types":{"types":"./dist/types/index.d.ts","import":"./dist/types/index.js"}},"pi":{"extensions":["./dist/extension.js"],"skills":["./SKILL.md"]},"scripts":{"build":"tsc","test":"vitest run","test:watch":"vitest","prepublishOnly":"npm run build"},"keywords":["pi-package","permissions","whitelist","ai-agent","tool-gating"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/0xKobold/pi-whitelist.git"},"peerDependencies":{"@earendil-works/pi-coding-agent":">=0.74.0"},"devDependencies":{"@earendil-works/pi-coding-agent":"^0.74.0","@types/node":"^22.0.0","@types/picomatch":"^4.0.0","typescript":"^5.7.0","vitest":"^3.1.0"},"dependencies":{"picomatch":"^4.0.0","zod":"^3.24.0"},"gitHead":"822a184e9bf0d8f7da0a8fb54e54a68e1712dc8c","_id":"@0xkobold/pi-whitelist@0.5.2","bugs":{"url":"https://github.com/0xKobold/pi-whitelist/issues"},"homepage":"https://github.com/0xKobold/pi-whitelist#readme","_nodeVersion":"25.1.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-r5DleJw2CCW4My1uinIAmCq/6SwnWCCF2wPfCcD7rTLzpNpdXsKr3VFjiT7zmkxlF5TGfKA0yQhmJMl0c/Y5YA==","shasum":"2e27415afbec42e90b3871a6e400b8904c9fbd49","tarball":"https://registry.npmjs.org/@0xkobold/pi-whitelist/-/pi-whitelist-0.5.2.tgz","fileCount":111,"unpackedSize":162319,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDXwxTNkoF/Pw6pboJFUinMZOrMTca7o+h2oQyNQDWjbwIhAJDeq7AV8dGXaob+E6MRbCAPmFxf/uW6M9uRuTnKAvXz"}]},"_npmUser":{"name":"moikapy","email":"warrenckhan@gmail.com"},"directories":{},"maintainers":[{"name":"moikapy","email":"warrenckhan@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-whitelist_0.5.2_1778791696969_0.27479206164294956"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-13T02:43:55.152Z","modified":"2026-05-14T20:48:17.263Z","0.1.0":"2026-05-13T02:43:55.405Z","0.2.0":"2026-05-13T03:08:46.811Z","0.2.1":"2026-05-13T03:17:57.058Z","0.3.0":"2026-05-13T15:49:02.815Z","0.3.1":"2026-05-13T15:53:53.825Z","0.4.0":"2026-05-13T16:23:18.743Z","0.4.1":"2026-05-13T16:35:20.632Z","0.4.2":"2026-05-13T18:24:07.372Z","0.5.0":"2026-05-13T19:20:10.934Z","0.5.1":"2026-05-13T21:23:36.577Z","0.5.2":"2026-05-14T20:48:17.131Z"},"bugs":{"url":"https://github.com/0xKobold/pi-whitelist/issues"},"license":"MIT","homepage":"https://github.com/0xKobold/pi-whitelist#readme","keywords":["pi-package","permissions","whitelist","ai-agent","tool-gating"],"repository":{"type":"git","url":"git+https://github.com/0xKobold/pi-whitelist.git"},"description":"Tri-state tool permission system (allow/deny/ask) for AI agent tool invocations","maintainers":[{"name":"moikapy","email":"warrenckhan@gmail.com"}],"readme":"# pi-whitelist\n\n> Tri-state tool permission system (allow/deny/ask) for AI agent tool invocations\n\nA standalone, runtime-agnostic npm module for controlling AI agent tool invocations.\n\n## Why?\n\nEvery AI agent that executes tools needs permission gating. Without it, agents can run destructive commands without oversight. `pi-whitelist` gives you a simple, battle-tested model:\n\n| # | Action | Behavior |\n|---|---|---|\n| 1 | **Allow once** | Let it run this time, don't persist |\n| 2 | **Allow always** | Save a rule, auto-approve future matches |\n| 3 | **Deny** | Block the invocation |\n\nEvery check returns one of three decisions: `allow`, `deny`, or `ask`. No booleans, no ambiguity.\n\n## Install\n\n```bash\nnpm install @0xkobold/pi-whitelist\n```\n\n## Quick Start\n\n```typescript\nimport { PermissionManager } from '@0xkobold/pi-whitelist'\n\nconst manager = new PermissionManager()\n\n// Read-only tools are auto-allowed\nmanager.check({ toolName: 'Read' })\n// → { behavior: 'allow', decisionReason: { type: 'other', reason: 'read-only-tool' } }\n\n// Destructive tools require approval\nmanager.check({ toolName: 'Bash', ruleContent: 'docker build .' })\n// → { behavior: 'ask', message: 'Bash: docker build .', suggestions: [...] }\n\n// Add an \"allow always\" rule\nmanager.addRule({ toolName: 'Bash', ruleContent: 'git *' }, 'allow', 'session')\nmanager.check({ toolName: 'Bash', ruleContent: 'git status' })\n// → { behavior: 'allow', decisionReason: { type: 'rule', rule: ... } }\n\n// Add a deny rule — deny always wins over allow for the same pattern\nmanager.addRule({ toolName: 'Bash', ruleContent: 'rm -rf *' }, 'deny', 'session')\nmanager.check({ toolName: 'Bash', ruleContent: 'rm -rf /tmp' })\n// → { behavior: 'deny', message: 'Permission denied for Bash: rm -rf /tmp', ... }\n```\n\n## Three-State UI Integration\n\n```typescript\nconst decision = manager.check({ toolName: 'Bash', ruleContent: 'docker build -t myapp .' })\n\nif (decision.behavior === 'ask') {\n  // Show the prompt:\n  // ┌──────────────────────────────────────────────┐\n  // │  Bash: docker build -t myapp .                │\n  // │                                                │\n  // │  1. Allow          (allow this once)           │\n  // │  2. Allow always   (add rule to settings)      │\n  // │  3. Deny           (block this invocation)     │\n  // └──────────────────────────────────────────────┘\n  const userChoice = await showPermissionPrompt(decision)\n\n  if (userChoice === 1) {\n    // Allow once — no persistence\n    return { behavior: 'allow', decisionReason: { type: 'other', reason: 'user-allow-once' } }\n  }\n  if (userChoice === 2) {\n    // Allow always — persist the rule\n    manager.addRule(\n      { toolName: 'Bash', ruleContent: 'docker *' },\n      'allow',\n      'projectSettings', // persists to .pi/settings.json\n    )\n  }\n  if (userChoice === 3) {\n    // Deny\n    return { behavior: 'deny', message: decision.message, ... }\n  }\n}\n```\n\n## Rule Format\n\nRules use the format `ToolName` or `ToolName(content)` with glob patterns:\n\n| Rule | Matches |\n|---|---|\n| `Bash` | Any Bash invocation |\n| `Bash(git *)` | Any command starting with `git ` |\n| `Bash(npm test)` | Exactly `npm test` |\n| `FileEdit(/src/**)` | Any file edit under `/src/` |\n| `Read` | The Read tool (no content filter) |\n| `Bash(python -c \"print\\(1\\)\")` | Commands with escaped parentheses |\n\n## Permission Modes\n\n| Mode | Behavior |\n|---|---|\n| `default` | Prompt for destructive tools, auto-allow read-only tools |\n| `bypassPermissions` | Allow everything — dangerous, for CI/testing only |\n| `plan` | Ask for everything, even read-only tools |\n| `acceptEdits` | Auto-allow file edits, ask for everything else |\n| `dontAsk` | Allow everything not explicitly denied |\n\n```typescript\nconst ci = new PermissionManager({ mode: 'bypassPermissions' })\nci.check({ toolName: 'Bash', ruleContent: 'rm -rf /' })\n// → { behavior: 'allow', decisionReason: { type: 'mode', mode: 'bypassPermissions' } }\n```\n\n## Rule Sources & Priority\n\nRules come from multiple sources, merged by priority (lowest → highest):\n\n| Source | File | Priority |\n|---|---|---|\n| `userSettings` | `~/.pi/settings.json` | 0 (lowest) |\n| `projectSettings` | `.pi/settings.json` | 1 |\n| `localSettings` | `.pi/settings.local.json` | 2 |\n| `flagSettings` | CLI flags | 3 |\n| `policySettings` | Enterprise/org policy | 4 |\n| `cliArg` | `--allowedTools` | 5 |\n| `command` | `/command` in session | 6 |\n| `session` | In-memory only | 7 (highest) |\n\n**Deny always wins over allow** when both match the same tool+content.\n\n## Settings File\n\n`.pi/settings.json`:\n```json\n{\n  \"permissions\": {\n    \"defaultMode\": \"default\",\n    \"allow\": [\n      \"Bash(git *)\",\n      \"Bash(npm test)\",\n      \"FileEdit(/src/**)\",\n      \"Read\"\n    ],\n    \"deny\": [\n      \"Bash(rm -rf *)\",\n      \"Bash(sudo *)\"\n    ],\n    \"ask\": [\n      \"Bash(docker *)\"\n    ],\n    \"additionalDirectories\": []\n  }\n}\n```\n\n## API Reference\n\n### `PermissionManager`\n\nThe main class. Holds rules, resolves checks, persists changes.\n\n```typescript\nconst manager = new PermissionManager({\n  store?: SettingsStore,              // Storage backend (default: MemorySettingsStore)\n  mode?: PermissionMode,              // 'default' | 'bypassPermissions' | 'plan' | 'acceptEdits' | 'dontAsk'\n  additionalWorkingDirectories?: Map<string, WorkingDirectorySource>,\n  isBypassPermissionsModeAvailable?: boolean,\n  shouldAvoidPermissionPrompts?: boolean,\n})\n```\n\n| Method | Description |\n|---|---|\n| `check(input)` | Evaluate a tool invocation against all rules |\n| `addRule(rule, behavior, source)` | Add a rule and persist it |\n| `removeRule(rule, behavior, source)` | Remove a matching rule |\n| `setMode(mode)` | Switch permission mode |\n| `applyUpdates(updates)` | Batch-apply permission updates |\n| `isBashAllowed(command)` | Convenience: check if Bash command is allowed |\n| `isFileEditAllowed(path)` | Convenience: check if file path edit is allowed |\n| `getRulesForTool(toolName)` | Get all rules for a specific tool |\n| `getRulesFromSource(source)` | Get all rules from a specific source |\n| `getContext()` | Get the full permission context snapshot |\n| `invalidateCache()` | Clear the rule evaluation cache |\n\n### `checkPermission(input)`\n\nStandalone one-shot check with default settings:\n\n```typescript\nimport { checkPermission } from '@0xkobold/pi-whitelist'\n\nconst decision = checkPermission({ toolName: 'Read' })\n// → { behavior: 'allow', ... }\n```\n\n### Matchers\n\n| Matcher | For | Behavior |\n|---|---|---|\n| `GlobMatcher` | Default fallback | Uses `picomatch` for glob matching |\n| `CommandMatcher` | `Bash`, `PowerShell` | Splits on `&&`, `\\|\\|`, `;`, `\\|` and checks prefix |\n| `FileMatcher` | `FileEdit`, `FileWrite` | Normalizes paths to POSIX, uses `picomatch` |\n\n### Storage\n\n| Store | Use |\n|---|---|\n| `MemorySettingsStore` | Testing, ephemeral sessions |\n| `FileSettingsStore` | Persistent settings in `.pi/settings.json` |\n\n```typescript\nimport { MemorySettingsStore, FileSettingsStore, mergeSettings } from '@0xkobold/pi-whitelist'\n\nconst mem = new MemorySettingsStore({ permissions: { allow: ['Bash(git *)'], deny: [], ask: [], additionalDirectories: [] } })\nconst file = new FileSettingsStore('.pi/settings.json')\nawait file.load()\n```\n\n### Read-Only Tools\n\nThese tools auto-allow in `default` mode without prompting:\n\n`Read`, `FileRead`, `Glob`, `Grep`, `WebFetch`, `WebSearch`, `TaskGet`, `TaskList`, `TaskOutput`, `ListMcpResources`, `ReadMcpResource`, `ToolSearch`, `LSP`, `AskUser`\n\n### Error Classes\n\n| Error | Code | When |\n|---|---|---|\n| `PermissionError` | Various | Base error class |\n| `RuleParseError` | `RULE_PARSE_ERROR` | Malformed rule string |\n| `StorageError` | `STORAGE_ERROR` | File read/write failure |\n| `MatcherError` | `MATCHER_ERROR` | Glob/command matching failure |\n\n## Subpath Exports\n\n```typescript\nimport { parseRuleString, serializeRuleString } from '@0xkobold/pi-whitelist/rules'\nimport { GlobMatcher, CommandMatcher, FileMatcher } from '@0xkobold/pi-whitelist/matchers'\nimport { MemorySettingsStore, FileSettingsStore, mergeSettings } from '@0xkobold/pi-whitelist/storage'\nimport type { PermissionDecision, PermissionRule, PermissionMode } from '@0xkobold/pi-whitelist/types'\n```\n\n## Test\n\n```bash\nnpm test        # Run all tests\nnpm run build   # Compile TypeScript\n```\n\n97 tests across 9 suites covering parser, matchers, storage, merge, errors, readonly, constants, manager, and check.\n\n## License\n\nMIT","readmeFilename":"README.md"}