{"_id":"pi-web-access","_rev":"55-f36aa77e3ed5f33255ecb7750eff6a54","name":"pi-web-access","dist-tags":{"latest":"0.44.0"},"versions":{"0.4.2":{"name":"pi-web-access","version":"0.4.2","keywords":["pi-package"],"_id":"pi-web-access@0.4.2","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"aa8912c2f60fb0447828d273ed223c0ef4a6735e","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.4.2.tgz","fileCount":11,"integrity":"sha512-xgQJeREUUUDpqoTqHv7GwC6h3InIt2/XZWw3RAeOw+mQBtnb6zbiYEC4+B9ICqyT/8uA1fVRLLIGZFg4Mp5npA==","signatures":[{"sig":"MEUCIQD6a5ZgylMnrV/Ab0oKhBQs1sXzBfXAeQj/gvrBYy15agIgFImt3U4/s4zDi7VK4yF4w/T9I1AFJvmmxnC1xqFDcG4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1344129},"type":"module","gitHead":"88b7bef8bff13f1f48325828e06f45d1bc90c792","_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"_npmVersion":"11.6.2","description":"<p>   <img src=\"banner.png\" alt=\"pi-web-access\" width=\"1100\"> </p>","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.4.0","p-limit":"^6.1.0","linkedom":"^0.16.0","turndown":"^7.2.0","@mozilla/readability":"^0.5.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.4.2_1769539510902_0.027850833153359122","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"pi-web-access","version":"0.4.3","keywords":["pi-package"],"_id":"pi-web-access@0.4.3","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"53721089229ece5ce593f84347a0ef03647b587f","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.4.3.tgz","fileCount":11,"integrity":"sha512-zXVE7I4nyouU2KnXOpk9oorGVi9425OAE6wIYJOxBkcoQUN2hwURyU5a6qB7SqyzbSU8E0tb3jBJANUITG6ehw==","signatures":[{"sig":"MEUCIQCQ1K455BkTvKpZVldEjpXwYTfkbiFThbmjsZGPb3wfMQIgUiUNM5EAepjl76zZTONgoEtxCPJAXJRO1LEwPMFScrY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1344126},"type":"module","gitHead":"90f1eaec4d695f6e2945b693b323486a0601d8c2","_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"_npmVersion":"11.6.2","description":"<p>   <img src=\"banner.png\" alt=\"pi-web-access\" width=\"1100\"> </p>","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.4.0","p-limit":"^6.1.0","linkedom":"^0.16.0","turndown":"^7.2.0","@mozilla/readability":"^0.5.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.4.3_1769583205852_0.8665804327391868","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"pi-web-access","version":"0.4.4","keywords":["pi-package"],"_id":"pi-web-access@0.4.4","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"e86345a5a97b119fbe83493cc8aec0c0d078c12f","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.4.4.tgz","fileCount":11,"integrity":"sha512-ZIEglj4DUwTaWkp54rwXEDfgKR2i/VxwGEa5RirPHGLJF1OYjQq3Dhy02d8RA2cGlodVioVw/DX/XIADOWswgA==","signatures":[{"sig":"MEQCIDBUafL2MLOEzbtVz0hMSIp0Fi78HDiSeUbnG1qqF1fGAiBx1vOdrgIVPaMu3dVQNa31/ytdh2vog7ftp0ZQeT7EHw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1344268},"type":"module","gitHead":"6fde1fec3f3fe16610c150ab8989247b9454df28","_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"_npmVersion":"11.6.2","description":"<p>   <img src=\"banner.png\" alt=\"pi-web-access\" width=\"1100\"> </p>","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.4.0","p-limit":"^6.1.0","linkedom":"^0.16.0","turndown":"^7.2.0","@mozilla/readability":"^0.5.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.4.4_1769992794697_0.41551307824622885","host":"s3://npm-registry-packages-npm-production"}},"0.4.5":{"name":"pi-web-access","version":"0.4.5","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","perplexity","fetch","scraping"],"_id":"pi-web-access@0.4.5","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"a9566859b7a039034008a326ca2f7ab07ce18075","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.4.5.tgz","fileCount":11,"integrity":"sha512-A3JNDrbYKhELPekDN0P7s7KDzxPa17ifLcT77YVNQYJfIZaYJJxFUfnIMvV5nt900gnwUj/iLvPPMD1sFWsl7A==","signatures":[{"sig":"MEUCIQDnmNdupyxHnxZjcIK3wwvEirx7i2knasNiNUB0xem2AwIgORJALeNV2UfBT9LXMrJ+Gi9lNSzCyKkgVBz8r+gct3Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1344442},"type":"module","gitHead":"03bd6b3207c49557d243f516387312a4993f40d9","_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"_npmVersion":"11.6.2","description":"<p>   <img src=\"banner.png\" alt=\"pi-web-access\" width=\"1100\"> </p>","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.4.0","p-limit":"^6.1.0","linkedom":"^0.16.0","turndown":"^7.2.0","@mozilla/readability":"^0.5.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.4.5_1769992967338_0.9286045141468429","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"pi-web-access","version":"0.5.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","perplexity","fetch","scraping"],"_id":"pi-web-access@0.5.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"b9d3224c8a14b3084ea49a07a80a1c459e280e9d","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.5.0.tgz","fileCount":13,"integrity":"sha512-EZ6oc47PzWHMRkU3Q439bt6I/SJm5xf4OSKkHgDEFVN7/plJkI49czK0hkJP7f1TT1/5x4kbJ661FkreRGTYpg==","signatures":[{"sig":"MEUCIQCv+JCJd0b4mGHqb280w/B8HgwQw4RjcoKNjg7yn0xkvQIgBMG/77xhUVo0q8uWAXHRRO4gLyCkSZ3e6DqdRzSaid0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1368044},"type":"module","gitHead":"5f5f90ea4ffa11b26a42bc252be85cf2502acc18","_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"_npmVersion":"11.6.2","description":"<p>   <img src=\"banner.png\" alt=\"pi-web-access\" width=\"1100\"> </p>","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.4.0","p-limit":"^6.1.0","linkedom":"^0.16.0","turndown":"^7.2.0","@mozilla/readability":"^0.5.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.5.0_1769997706405_0.2153250744942976","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"pi-web-access","version":"0.5.1","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","perplexity","fetch","scraping"],"_id":"pi-web-access@0.5.1","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"pi":{"skills":["./skills"],"extensions":["./index.ts"]},"dist":{"shasum":"342912fd3e07be11c9cb6736dcb3785155f3cff8","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.5.1.tgz","fileCount":14,"integrity":"sha512-lhnuPld2bX5g+efm2aZyTXaofJUHDz7VL9UO677GFTMyBl5mh933uqCS/rIbIcjxBOvIcHqTmwCsRPkSmINg2Q==","signatures":[{"sig":"MEUCIQCZfRkotUswl2suVQlWGWNx41U2DtTled05IwWipjknwgIgdJY+2wj+TIe2fyyMN8dEDvwPvlB5Mc281ppw1bedzFk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1375843},"type":"module","gitHead":"db08867a19fc9af95b5702f7024c882a2507fe4e","_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"_npmVersion":"11.6.2","description":"<p>   <img src=\"banner.png\" alt=\"pi-web-access\" width=\"1100\"> </p>","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.4.0","p-limit":"^6.1.0","linkedom":"^0.16.0","turndown":"^7.2.0","@mozilla/readability":"^0.5.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.5.1_1770052779300_0.5931671521225914","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"pi-web-access","version":"0.7.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","perplexity","fetch","scraping"],"_id":"pi-web-access@0.7.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","skills":["./skills"],"extensions":["./index.ts"]},"dist":{"shasum":"0c31f8f789dd607a3a645b4a9f5ec40161b2edf4","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.7.0.tgz","fileCount":23,"integrity":"sha512-a47M5paLGcoR99VJGf9veSrxXGv9Qi3WI/syq4dTuZM/T3NU2bIbUyY43gNOlztZc2PAj9IgGP/E2ss5G6Qz+w==","signatures":[{"sig":"MEQCIE2SiZY2b4bQlkCNLtfes2NdgWWg02x48aaSIRbBt78LAiB8q2bTX4apn2CO9izKeu6aDKoHfHD3WuK1b0AOee5vTQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6584699},"type":"module","gitHead":"1b04ef0e8d9b5c7cf1f499942ec0460efefef345","_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"_npmVersion":"11.6.2","description":"<p>   <img src=\"banner.png\" alt=\"pi-web-access\" width=\"1100\"> </p>","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.4.0","p-limit":"^6.1.0","linkedom":"^0.16.0","turndown":"^7.2.0","@mozilla/readability":"^0.5.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.7.0_1770148424839_0.6629880851738534","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"pi-web-access","version":"0.7.1","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.7.1","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","skills":["./skills"],"extensions":["./index.ts"]},"dist":{"shasum":"a0d3f43c173361a9bebde0d3a43b339b6e197263","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.7.1.tgz","fileCount":23,"integrity":"sha512-eKoUrkvcbadkaLqzhocLrnxCWz7ieplPtPUZad/xM6FEp3WR0cFUa8aCiclGKUbhvm42y/9CAuChN42q4SRxBg==","signatures":[{"sig":"MEUCICMXM6ajc1dgX/Qc+mI1YHyaK6NvZWFRPBHKJ3/jCVF/AiEAgDSaNV3iemMH9ytHpbzdI5UIXYJ9fdnxDpIi3PiBEWA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6585489},"type":"module","gitHead":"b26866bfaeb06e121acf022eefe5bac044213281","_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.4.0","p-limit":"^6.1.0","linkedom":"^0.16.0","turndown":"^7.2.0","@mozilla/readability":"^0.5.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.7.1_1770149812430_0.9803764405148927","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"pi-web-access","version":"0.7.2","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.7.2","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","skills":["./skills"],"extensions":["./index.ts"]},"dist":{"shasum":"2655392581a54a249550d6048747239b89c62e2a","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.7.2.tgz","fileCount":24,"integrity":"sha512-DJMDT/Ud6QvUXk60jcFu7oC9aOkM69/K9HcYFkyIpvJxCmpvIpavJCQz/605y1ZW0Qz5CiA5TueNJS3wepAZsQ==","signatures":[{"sig":"MEQCIFRZDLRtQsJ2AQcW93YCbNWWJHS+XPov748bsokDy7UmAiB+Oh0EXsj+Wnp7sLTe8yLuzRkNkGcITat2ZYGpF8UEZw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6583777},"type":"module","gitHead":"8a5bb9d1a061b99486adf9bb144a75d7b4fe6095","_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.4.0","p-limit":"^6.1.0","linkedom":"^0.16.0","turndown":"^7.2.0","@mozilla/readability":"^0.5.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.7.2_1770152545241_0.7621346658719266","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"name":"pi-web-access","version":"0.7.3","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.7.3","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","skills":["./skills"],"extensions":["./index.ts"]},"dist":{"shasum":"46712f4c67c9396f0e67163acdb73f63ad59a6c8","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.7.3.tgz","fileCount":24,"integrity":"sha512-kpDjoz09/0e5FFCDszIn7FBkSgFKMMw8tFz1Vxa6iqsilrqGR7PgEjCefyVSyuDPlaYiYBMZxSwrGt4/oh7jqg==","signatures":[{"sig":"MEYCIQCXiyo0Y6ztTXMt2mprZWy1q7a6AMECJQ1aJj8+39esFAIhAJER1vu0fc5tje8JlOBl5YDGYJQqkXEqu9DmHYeGCWeb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6588816},"type":"module","gitHead":"b702b4a397147d71294ba70eacd68374c77e0105","_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.4.0","p-limit":"^6.1.0","linkedom":"^0.16.0","turndown":"^7.2.0","@mozilla/readability":"^0.5.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.7.3_1770360511700_0.828877423843787","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"pi-web-access","version":"0.10.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.10.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","skills":["./skills"],"extensions":["./index.ts"]},"dist":{"shasum":"85f9f268d91e8605d19284cf7016fe8e2d345b27","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.10.0.tgz","fileCount":27,"integrity":"sha512-kNhjCoJFhOABCzeDS45FCxXH7UriIoWvwNuYZ6VcufJmkm5zSeYuhVP5EgDaRvWXah1VgvKKXbl6V0gRR1039g==","signatures":[{"sig":"MEQCIBMP45R4Xq9HSx9w3DiDrkzTfOcJ5NuRGQW46++OYAToAiBNbPVhZ4nwLT3vBKD+UxAGwBDf1hkyzoFLXCHexHbX8g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6679445},"type":"module","gitHead":"b0791cca8ccb59472422233847f2689acfbdea9e","_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.4.0","p-limit":"^6.1.0","linkedom":"^0.16.0","turndown":"^7.2.0","@mozilla/readability":"^0.5.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.10.0_1771424923803_0.4531903502672887","host":"s3://npm-registry-packages-npm-production"}},"0.10.2":{"name":"pi-web-access","version":"0.10.2","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.10.2","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","skills":["./skills"],"extensions":["./index.ts"]},"dist":{"shasum":"5273a69700d2feaa4bcc45bcb56fcb92fb0dae7f","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.10.2.tgz","fileCount":27,"integrity":"sha512-K3OeL1drOsoF22yvoRD+wpAQcWUDfgDG2R6/4uB63/GjovXBlV6t0FV66N1g2csqcBYLdMILf894F7MFXYJgtA==","signatures":[{"sig":"MEYCIQDmdaduwSg02BPVP6GSxvzTnhuz8ZajaHAvsvGEWctn4gIhAKXnXAHBKggh8SMC98TIDYiNPwoLS7E4hTsxbFeL03w0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6680649},"type":"module","gitHead":"4461c2bcb2d871bd8b7b54ee5ecadee20bf3a1f8","_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.4.0","p-limit":"^6.1.0","linkedom":"^0.16.0","turndown":"^7.2.0","@mozilla/readability":"^0.5.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.10.2_1771432032852_0.5353356394695812","host":"s3://npm-registry-packages-npm-production"}},"0.10.3":{"name":"pi-web-access","version":"0.10.3","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.10.3","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","skills":["./skills"],"extensions":["./index.ts"]},"dist":{"shasum":"1b4bc2cb26c8118212bbf2f03121764785b7436a","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.10.3.tgz","fileCount":27,"integrity":"sha512-NF2m+WatSnSW2gAC8gGBD+Yt3iGqMqYxVUtUN599Epf+h3rJDjs4iM4PmfdGRuz8+MpdBTyz5lsXvfXDEOBNSg==","signatures":[{"sig":"MEQCIFACT0JQfh8R8gbS4JlpGKTc+KyU0eSnuXC2hfrJUeyJAiB3gh3gDTlkaLF3bGIk66jKo33nfh4k71ID2Wtus6ZU7g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6689488},"type":"module","gitHead":"374c144ded173f0a7535657fc5d0791bbe09d88c","_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.4.0","p-limit":"^6.1.0","linkedom":"^0.16.0","turndown":"^7.2.0","@mozilla/readability":"^0.5.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.10.3_1773293278517_0.7722591502157565","host":"s3://npm-registry-packages-npm-production"}},"0.10.4":{"name":"pi-web-access","version":"0.10.4","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.10.4","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","skills":["./skills"],"extensions":["./index.ts"]},"dist":{"shasum":"d2c5ab02d81d6a96329bab9968e2e2686a79e9b8","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.10.4.tgz","fileCount":29,"integrity":"sha512-6zK/Qi8mLrcpswGwAlbBVxOIdfN1iQ6HMbFRx3VH61jg8BvopTWUv8i1lKC+ELIn8R/iKLxrT40CJRD9FxA4zg==","signatures":[{"sig":"MEQCIEY80d8P9HiqJ1ImziFqi1YINQtMkIS6XTjnd1vCSKslAiBQSs6FzSHz6ocoavnwj8V2VhtD5WqTCLamGLrPK0JagA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6841080},"type":"module","gitHead":"37d70019eebb4f3479f58d6ed8c107660f60bc6d","_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.4.0","p-limit":"^6.1.0","linkedom":"^0.16.0","turndown":"^7.2.0","@mozilla/readability":"^0.5.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.10.4_1774652467526_0.07823634289509629","host":"s3://npm-registry-packages-npm-production"}},"0.10.5":{"name":"pi-web-access","version":"0.10.5","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.10.5","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","skills":["./skills"],"extensions":["./index.ts"]},"dist":{"shasum":"8272a8bda37977cb0c0c10bf788b1e5abe39c075","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.10.5.tgz","fileCount":29,"integrity":"sha512-BATOZBoJPjOhGm2L4r5hGUpdquXNpFCV97XiFejsp9kck9gjh768X6PDOjySc5dI1UxhrYx+ec3b/3QyiaHw2Q==","signatures":[{"sig":"MEQCIBRsh/zD/9oSxUTAExtQXAFNKTe5hntw52MX0lW5G+mUAiBR0MLT5Gy+tfx5B/Z+1kWd91uy7HZteIqY8Seg4/1cqA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6841647},"type":"module","gitHead":"521b29651911c9146ff85a04ae193026df4776f7","_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.4.0","p-limit":"^6.1.0","linkedom":"^0.16.0","turndown":"^7.2.0","@mozilla/readability":"^0.5.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.10.5_1775266127549_0.7940676635500776","host":"s3://npm-registry-packages-npm-production"}},"0.10.6":{"name":"pi-web-access","version":"0.10.6","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.10.6","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","skills":["./skills"],"extensions":["./index.ts"]},"dist":{"shasum":"97befb2a45c57737657eb7327823fc8eb2ece18a","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.10.6.tgz","fileCount":29,"integrity":"sha512-GXLxcDcKYV5Lu5vZvhZmwABJ2sl/aSd/VoPgITt/5bAyF88B0/TdAfQx2vDOqpKhkCugngnXcZPyNf+zrMqrHw==","signatures":[{"sig":"MEYCIQDoHZL+cjB0ePAhtKqqAcSBY+ZryEv/JM8lSDa2oK0+3AIhAJrX8L8XkSpDUi9UFK5Qhs5ta76ncdtGvJy3PpC2e9Ex","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6842507},"type":"module","gitHead":"b378e5d80d424806058e819b262f72e5f6b58b7d","_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.4.0","p-limit":"^6.1.0","linkedom":"^0.16.0","turndown":"^7.2.0","@mozilla/readability":"^0.5.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.10.6_1775268899666_0.17797573015361134","host":"s3://npm-registry-packages-npm-production"}},"0.10.7":{"name":"pi-web-access","version":"0.10.7","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.10.7","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","skills":["./skills"],"extensions":["./index.ts"]},"dist":{"shasum":"92ad5ce96d22fcf4655e707b040186455c8fefff","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.10.7.tgz","fileCount":32,"integrity":"sha512-HbRN2dMGpgvtUrpTI4EEWKXDs/miZ+9s9ZOQl4uj9tb4NhRYTuXNrztrUAD1PPNP5XkFi0vosUwz7GbGGchZSw==","signatures":[{"sig":"MEUCIQDuhGdrp57imnr369vUXO4ud2J9Ml06Ub0cEfCkgeZftQIgWp8We00dS7NoZXlqj78uGvB2aos7phg7ut8V3JNWnv8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6852655},"type":"module","gitHead":"076bf0db5e739b200286ca37486e4edd8d19123c","scripts":{"test":"node --test"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","p-limit":"^6.1.0","linkedom":"^0.16.0","turndown":"^7.2.0","@mozilla/readability":"^0.5.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.10.7_1777757587424_0.3660182671917418","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"pi-web-access","version":"0.12.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.12.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","skills":["./skills"],"extensions":["./index.ts"]},"dist":{"shasum":"95d26f3bf100d944a2721ff9bf4cf3c075027503","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.12.0.tgz","fileCount":52,"integrity":"sha512-qyX3oaAxUvwjMN7Uix4joMMX93vYRqaoR9++KtgPi53a6Xnqyp87V8lueDazKTsiSMzbdrr0PZbckRU7/ztu1g==","signatures":[{"sig":"MEQCIEPw0qu5uJtzjV1qV6caQn3LuXYl+wtUEA3YFRXkjVU8AiAVeIMsUyf8lyLePJjS33H/a+0fNh04WqerJHqFGMIQEQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6986805},"type":"module","gitHead":"2a7cb5d4c974f03bb489c6d3a851b283448b2408","scripts":{"test":"node --test"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"10.9.8","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, Tavily, Exa, Perplexity, and Gemini.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"unpdf":"^1.6.2","p-limit":"^6.1.0","linkedom":"^0.16.0","turndown":"^7.2.0","@mozilla/readability":"^0.6.0"},"_hasShrinkwrap":false,"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.12.0_1782284635670_0.32653169882902855","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"pi-web-access","version":"0.13.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.13.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","skills":["./skills"],"extensions":["./index.ts"]},"dist":{"shasum":"e85808ebfa6969f247b424aeae9172dbaf2bb997","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.13.0.tgz","fileCount":53,"integrity":"sha512-ny0bHisMWdobmu1hcMp/jqjaRh6pYrH7dctBK2CVyRF4ia7bP47RnOPYdG1yiks9ohtcanWir5Hl9EFap8h0zQ==","signatures":[{"sig":"MEUCIQCFa3P0ffZaD3hjddJepXWaCiVYDjLZfCkYe+ib4EqhFQIgKDKzAyLwJc7K7PS4NIgHmpzsclNlJA8352eDDMXfsKQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7004031},"type":"module","gitHead":"7bdc30a65cf77273eb9c0034647b373bda4060d7","scripts":{"test":"node --test"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"10.9.8","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, Tavily, Exa, Perplexity, and Gemini.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"unpdf":"^1.6.2","p-limit":"^6.1.0","linkedom":"^0.16.0","turndown":"^7.2.0","@mozilla/readability":"^0.6.0"},"_hasShrinkwrap":false,"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.13.0_1782373298533_0.7914739716198258","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"pi-web-access","version":"0.14.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.14.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./index.ts"]},"dist":{"shasum":"6b9c4ce48500993400eace08501f4d1f87474c91","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.14.0.tgz","fileCount":44,"integrity":"sha512-7RDVCfYkcGSgWMtroDCq47davp6W36Nc4ETLd8dhyPjox/rA89nxUwvvjba+ln39G28uiebnTh5G83UYFjkjWw==","signatures":[{"sig":"MEUCIQDO/myoArC8haO8tbPoP0Ec26TsDdURAFUmI7mt4/OzDwIgEXTzpWHfk5NK6OC0nI79IFzRB4ex/0tB0ung0Yyft2Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7059659},"type":"module","gitHead":"58ce1566b5959552cf9e8b9f227b158b199a4975","scripts":{"test":"node --test","typecheck":"tsc","audit:runtime":"npm audit --omit=dev --omit=peer"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.16.0","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, Tavily, SERPdive, AnySearch, SearXNG, Firecrawl extraction, Exa, Perplexity, and Ge","directories":{},"_nodeVersion":"24.18.0","dependencies":{"unpdf":"^1.6.2","p-limit":"^6.1.0","typebox":"^1.1.38","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/turndown":"^5.0.6"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.14.0_1785009579552_0.9540440784267767","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"pi-web-access","version":"0.15.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.15.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./index.ts"]},"dist":{"shasum":"33d8864020704e74f4ef5fec933075c7e2529119","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.15.0.tgz","fileCount":45,"integrity":"sha512-62ir9Z5K8oCPZVFJRCYeV0uzsTHNEi01p84nn/5NkTYFhVQzxLVooA2DU83hTeWt2DlwaiijYyoPx6yxHrC4LA==","signatures":[{"sig":"MEUCIQDjrXtO2q1cajr0SbA33uW3ldSf4whBGAogEWgXR1l66gIgGkFXiJzI53OBTRef5l3tNx4ycKf82Qrhv9zdzro9yfw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7088606},"type":"module","gitHead":"b537183632d555d1b2e61cb8f6bdf585766f2380","scripts":{"test":"node --test","typecheck":"tsc","audit:runtime":"npm audit --omit=dev --omit=peer"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Tavily, SERPdive, AnySearch, SearXNG, Firecrawl extraction, Exa, Perplexi","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","p-limit":"^6.1.0","typebox":"^1.1.38","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/turndown":"^5.0.6"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.15.0_1785220803483_0.5936450183467139","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"pi-web-access","version":"0.16.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.16.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./index.ts"]},"dist":{"shasum":"2160c6ea05b7ebed4ccfb47d19b5e9b272065ed4","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.16.0.tgz","fileCount":47,"integrity":"sha512-PhtT3vVR0hH1xWSxMO65zwoW4gW7kphA1U/a5zAVa3QqdYXnmRgH/i82P5hVv7EpYBoFy/jV8nQhX3AF4OTaPg==","signatures":[{"sig":"MEUCIGSmTHOsUq/jHtGT5EdPbEBPc0HQyHRsubc9mNyycnzIAiEAm+svIxNkPihppm3dJoIvfHiTk3JZ08hA1TbdFhnwdp4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7120963},"type":"module","gitHead":"59a79f9b843c0ee5896da0ecc05e2395226f0064","scripts":{"test":"node --test","typecheck":"tsc","audit:runtime":"npm audit --omit=dev --omit=peer"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Tavily, SERPdive, AnySearch, SearXNG, Firecrawl extraction, E","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","p-limit":"^6.1.0","typebox":"^1.1.38","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/turndown":"^5.0.6"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.16.0_1785426752641_0.6284345209482072","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"pi-web-access","version":"0.17.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.17.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./index.ts"]},"dist":{"shasum":"f3ef97b037ffd3d720a9bbab885dc00a064f9676","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.17.0.tgz","fileCount":50,"integrity":"sha512-rDAhkIzYtBmCCNgstTJ/zFnw91V64TQqhqLOeGXFxmnJaxE45nj+L4BkUPMYSUb3WFexDDYdGlONyBLLKE4eVw==","signatures":[{"sig":"MEUCICOI17iR2ZzjWC11HbuQELmGu/eBHcx2UFv0uACTH8q9AiEA+23zLgXjLcfcoR0dmdPVRQRmz7cG/Mp30Vqa8pNQxXA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7167672},"type":"module","gitHead":"c702b3be11bfbc832489eb7cfe31d9bbbbb2cc27","scripts":{"test":"node --test","typecheck":"tsc","audit:runtime":"npm audit --omit=dev --omit=peer"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, SERPdive, AnySearch, SearXNG,","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","p-limit":"^6.1.0","typebox":"^1.1.38","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/turndown":"^5.0.6"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.17.0_1785453278097_0.6358587176728627","host":"s3://npm-registry-packages-npm-production"}},"0.17.1":{"name":"pi-web-access","version":"0.17.1","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.17.1","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./index.ts"]},"dist":{"shasum":"184ef78d2da858e85e50f08cbd9e8998198e49c8","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.17.1.tgz","fileCount":50,"integrity":"sha512-AZaDlr6HE4Mn3P7/bokbukGcTqlqGqy/Am+vurxfk9g6L2iZMERLIEAMcZI7aFamrNBBcJ+js1B70ZSgye2xEQ==","signatures":[{"sig":"MEYCIQCCAvJlGqa7YppLwfDFP4GEbO6eEJw5AI9KrT2eNUMIggIhAJdpSutV+rL3ed3E1mgELs7sqKqwhXeih+pEV2k5XmD8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7167887},"type":"module","gitHead":"2a186dbebab7be605d8c615ae33dd3f2e649666b","scripts":{"test":"node --test","typecheck":"tsc","audit:runtime":"npm audit --omit=dev --omit=peer"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, SERPdive, AnySearch, SearXNG,","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","p-limit":"^6.1.0","typebox":"^1.1.38","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/turndown":"^5.0.6"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.17.1_1785520929995_0.009184218383673448","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"pi-web-access","version":"0.18.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.18.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./index.ts"]},"dist":{"shasum":"ee2d325b247b0239eab0d20b6b27eea698a42df4","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.18.0.tgz","fileCount":58,"integrity":"sha512-UVLWaNBHrbbe2jnpYq+uVJdPgoExz8HevkI7r3VSboZ6AT/S7oxsxpJY/a72mUt9jAy41512ndVxfxh/CIuYqg==","signatures":[{"sig":"MEQCIFjyGRHz5H/V4oSw/N8Ab15c21pssH/K1wK+kEZwbvEXAiACR7uFoPMSR+N7fVcRIy45HpnA88pUazuJ1xnyiRu5zg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7302388},"type":"module","gitHead":"d2aab00dcf0547572276d9de4bc4a2a49d640e13","scripts":{"test":"node --test","typecheck":"tsc","audit:runtime":"npm audit --omit=dev --omit=peer"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, SERPdive, Kagi, Ollama, AnySe","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","p-limit":"^6.1.0","typebox":"^1.1.38","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/turndown":"^5.0.6"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.18.0_1785727243336_0.46120552275653526","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"pi-web-access","version":"0.19.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.19.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./index.ts"]},"dist":{"shasum":"a58f9994301c8c2e6b3b54066a7b8b78d51f8890","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.19.0.tgz","fileCount":59,"integrity":"sha512-F3NCRlIg0zc4/IvCXwBXhxfcoIPmEFTBucjCYIeJ7RhzR22Fb0yDy8QucAVkN91oBEOGwYEy6+j6C6S8/1ZtZw==","signatures":[{"sig":"MEQCIFlFCYT3SPTINcR2wnAVyxruHfgWDXcj2BBvpun5nk/wAiATnqB+eOblt5sIgVCkzId40P7fHGLbX3gBUylLgjKeJA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7327182},"type":"module","gitHead":"7bf05f9acc4a61d9ff50927fa8be7ad3f87d77b6","scripts":{"test":"node --test","typecheck":"tsc","audit:runtime":"npm audit --omit=dev --omit=peer"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Jina, SERPdive, Kagi, Ollama,","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","p-limit":"^6.1.0","typebox":"^1.1.38","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/turndown":"^5.0.6"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.19.0_1786176049287_0.12484623863820432","host":"s3://npm-registry-packages-npm-production"}},"0.20.0":{"name":"pi-web-access","version":"0.20.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.20.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./index.ts"]},"dist":{"shasum":"cbc93c524cf6bfe1374647ed060421662b29b151","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.20.0.tgz","fileCount":61,"integrity":"sha512-jMHiNe6hGQYmblSJsYBA2HdGuEe2sOM1GSVvVRMESwJoPvdfClaln6NlRD0/SOfBo1PiLCD1OUQhSrW4gMF3vQ==","signatures":[{"sig":"MEQCIBFrK9pJD8cb1lrBe9X4H7eBg28Y532wbcO3BSHGiq6kAiBtlEqOtFBzY5VFg5t+xsYb2WYnI0H2hXaOioyjKaGr+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7359334},"type":"module","gitHead":"00b2271d0f1603ac780df3f324aed0fc92f3e849","scripts":{"test":"node --test","typecheck":"tsc","audit:runtime":"npm audit --omit=dev --omit=peer"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Jina, SERPdive, Kagi, Ollama,","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.9.0","p-limit":"^6.1.0","typebox":"^1.1.38","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/turndown":"^5.0.6"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.20.0_1786342526614_0.6176605182615149","host":"s3://npm-registry-packages-npm-production"}},"0.21.0":{"name":"pi-web-access","version":"0.21.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.21.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./index.ts"]},"dist":{"shasum":"8940456bd19021eab71fda5045d30e1bc52f4d97","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.21.0.tgz","fileCount":62,"integrity":"sha512-Qoit6EHJL3ab4S4e3tb0U7tZx8OsnBwMPRjQSp8dLk4HtBzACxu5BTqXr5t0GlApTf/S/wk5nFyruP1Y9UkMSQ==","signatures":[{"sig":"MEUCIBE6TV/D5g3aXGc+2DoTOKpstJA2w8Vc/idcyJoWjFu+AiEA8QBVLdecEYAWsyDwZgZeaGoDQX3Vddn+Y1NzsNXYknk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7374200},"type":"module","gitHead":"2de5e7f343fa76bbb567e2e1c3bc11d06e44d42e","scripts":{"test":"node --test","typecheck":"tsc","audit:runtime":"npm audit --omit=dev --omit=peer"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Jina, SERPdive, Kagi, Ollama,","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.9.0","p-limit":"^6.1.0","typebox":"^1.1.38","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/turndown":"^5.0.6"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.21.0_1786405313026_0.40686014891200184","host":"s3://npm-registry-packages-npm-production"}},"0.22.0":{"name":"pi-web-access","version":"0.22.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.22.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./index.ts"]},"dist":{"shasum":"189e04a0d0b0957145e4fefcd6ac627f12591c05","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.22.0.tgz","fileCount":63,"integrity":"sha512-xzeU0q9OCYJv3yufK3vqIoelvPT/1/aoV5Pj7NbsQiW2QnB0FOlMxhP29TBTWkPJdleRnch6/MH8P2ebhwUTBQ==","signatures":[{"sig":"MEUCIErvpvvU7r/5WvBL3/h16iUtViP6IsDwuFdhKd9P43nUAiEA0Uq4H8UtxazyGON307zPOyhtOMK1wAuXLbNEqeL0qO0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7393329},"type":"module","gitHead":"7e488620f32de239992d45eac83235d03c9c6bbd","scripts":{"test":"node --test","typecheck":"tsc","audit:runtime":"npm audit --omit=dev --omit=peer"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Jina, SERPdive, Kagi, Ollama,","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.9.0","p-limit":"^6.1.0","typebox":"^1.1.38","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/turndown":"^5.0.6"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.22.0_1786482369643_0.8422535429926219","host":"s3://npm-registry-packages-npm-production"}},"0.23.0":{"name":"pi-web-access","version":"0.23.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.23.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./index.ts"]},"dist":{"shasum":"342020d636c49c956044a2ea2713d677c67c923f","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.23.0.tgz","fileCount":64,"integrity":"sha512-RrMaR/1iI1E7LNBkthUzD8yaPmMhAYY/EzBm+bAN9QA1I8g5YBpLVrD97+d6ezsGN6qdOX0E++psBj12i74kRw==","signatures":[{"sig":"MEQCIAmZJQYHoLka0ahjnWItuxw0XRjh1Hn5KvOngR4SIb2mAiBXGOaaA2Y9Ik9KtUECOYi+jgCm3qnHJW+5Nd5GiCNnoQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7423491},"type":"module","gitHead":"c77b28221d527f298d409d7e61ade661e548f50c","scripts":{"test":"node --test","typecheck":"tsc","audit:runtime":"npm audit --omit=dev --omit=peer"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Jina, SERPdive, Ka","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.9.0","p-limit":"^6.1.0","typebox":"^1.1.38","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/turndown":"^5.0.6"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.23.0_1786755168628_0.7339769708162014","host":"s3://npm-registry-packages-npm-production"}},"0.24.0":{"name":"pi-web-access","version":"0.24.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.24.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./index.ts"]},"dist":{"shasum":"ddef685aa273ecfb8459193d3fbfad9490ad59a9","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.24.0.tgz","fileCount":68,"integrity":"sha512-BVosva1tGDhHveaGpFnc++YS5+pzmWVzJ/5B+1xBavkRjAgyDvMpA1EfVL+GYIviAxXKck9JyRGVzo4ASV7snA==","signatures":[{"sig":"MEQCID2cBLKGpokkArGxq6oiIiMHp7Z/BrGfiT+o2vPr1k2WAiB010Rp4h56Eep9/uIdnbPN1xsEvq8TatP3W1oPvNM7cw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7465072},"type":"module","gitHead":"3b875f574840eebae39e5fede0d99a5f7c71f482","scripts":{"test":"node --test","typecheck":"tsc","audit:runtime":"npm audit --omit=dev --omit=peer"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Jina, SERPdive, Ka","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.9.0","p-limit":"^6.1.0","typebox":"^1.1.38","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/turndown":"^5.0.6"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.24.0_1787074666343_0.15887014828063517","host":"s3://npm-registry-packages-npm-production"}},"0.24.1":{"name":"pi-web-access","version":"0.24.1","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.24.1","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./index.ts"]},"dist":{"shasum":"78449966e7f682f707bb9964c3e62d5f04318d8c","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.24.1.tgz","fileCount":69,"integrity":"sha512-kNYVqPT2wbWbDKD2mfMsrCie1DyVsE/KYNVgpp7yqq072sG2PciKAB28PG4h0+klSO3MtCFRoPWAyA+l0CS7/A==","signatures":[{"sig":"MEUCIHWixbVKRPsZLBFWjRfbfPRKPnLRkcbEA7UkmVqAZbnCAiEA91yipBcy6FjijcXJlagqZrN+fi9mrJo7YXr45y20Zb8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7489653},"type":"module","gitHead":"fbbd0cb3b3eb918c8833906aa0b41e257fffe979","scripts":{"test":"node --test","typecheck":"tsc","audit:runtime":"npm audit --omit=dev --omit=peer"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Jina, SERPdive, Ka","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.9.0","p-limit":"^6.1.0","typebox":"^1.1.38","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/turndown":"^5.0.6"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.24.1_1787346269228_0.2843112699297765","host":"s3://npm-registry-packages-npm-production"}},"0.24.2":{"name":"pi-web-access","version":"0.24.2","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.24.2","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./index.ts"]},"dist":{"shasum":"a03f40ee3bfa239da692540d0a44279e8982cd88","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.24.2.tgz","fileCount":69,"integrity":"sha512-wpw1XJLITrLY5epZCjiGxdF75HlKgZTrK1UM3TG/AVRzRrFqvNoc4bLYaCFFjYUG8QNEo6dIpYbCJyAUkLz/QA==","signatures":[{"sig":"MEUCIBblT94YRIRF0wSqI5zT0+ELR2kyDT22/l4n/RhUNC6/AiEAicJuOhS4Gx+YX0cmtQXsmL2o+WxDsP5ux5Z74QXiucE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7492130},"type":"module","gitHead":"846949c645efadd6314f25eef60b390b0669704a","scripts":{"test":"node --test","typecheck":"tsc","audit:runtime":"npm audit --omit=dev --omit=peer"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Jina, SERPdive, Ka","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.9.0","p-limit":"^6.1.0","typebox":"^1.1.38","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/turndown":"^5.0.6"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.24.2_1787441476342_0.9163783964603163","host":"s3://npm-registry-packages-npm-production"}},"0.25.0":{"name":"pi-web-access","version":"0.25.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.25.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./index.ts"]},"dist":{"shasum":"8b6cab44e86f6d134a25f8a3e31d241d4b92c1ec","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.25.0.tgz","fileCount":72,"integrity":"sha512-DYOEIMEPwpC6pHElexBy3XuaYPnfMxH0ZBaGrILFsLNQzhhHJ3kJLrCQU4fnKXYXV6OEwxsLt2pBP76koK4hHg==","signatures":[{"sig":"MEYCIQDbJ4NWO5TXYEyKGsmzMI6qANAugpz/XKoJpumffur1uAIhAMyywc+9z9awutskJ2FOF5Fj7C382InK9D79kuSiefYI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7592590},"type":"module","gitHead":"08e347f4fe6bea807882c2363527118cce6eb539","scripts":{"test":"node --test","typecheck":"tsc","audit:runtime":"npm audit --omit=dev --omit=peer"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Jina, SERPdive, Ka","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.9.0","p-limit":"^6.1.0","typebox":"^1.1.38","defuddle":"0.19.3","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/turndown":"^5.0.6"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.25.0_1787701193819_0.1963890179718759","host":"s3://npm-registry-packages-npm-production"}},"0.26.0":{"name":"pi-web-access","version":"0.26.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.26.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./index.ts"]},"dist":{"shasum":"a8f4e11e89500893ca63e9e3cd46f891f305c0a9","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.26.0.tgz","fileCount":73,"integrity":"sha512-ob24VPqSx6/WjK4k2IQzwBtI+m9TiL2lSFKEdTTJdCeW6D7Sd1z/RlwFUD+nPD45yo6mURTiJQ8GUN6Lhi8YJw==","signatures":[{"sig":"MEUCIQClZdi2YtXB+qLlBoegwKoqP3yDG2Lht9wMidJTzl3rXwIgZDj28bgkMHCvOwhi8/NJDAiqjPRIBdOrLXQFBFcqsdc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7605750},"type":"module","gitHead":"479e282e01490d498abed8bdf33b98cb5625f796","scripts":{"test":"node --test","typecheck":"tsc","audit:runtime":"npm audit --omit=dev --omit=peer"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Jina, SERPdive, Ka","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.9.0","p-limit":"^6.1.0","typebox":"^1.1.38","defuddle":"0.19.3","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/turndown":"^5.0.6"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.26.0_1787899625044_0.7909818866295217","host":"s3://npm-registry-packages-npm-production"}},"0.27.0":{"name":"pi-web-access","version":"0.27.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.27.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./index.ts"]},"dist":{"shasum":"f97ea9371f81d44c9bb34e43e1868db32e2c21ae","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.27.0.tgz","fileCount":73,"integrity":"sha512-D/z7ILwbnJeDjzFPC1j3G1OvO+j2vl2H13ByYcH5FLbrJ1yBdbBwTBcl96Bbt2NEqH5vdmoZ/EpbDG8BTF9W7Q==","signatures":[{"sig":"MEYCIQCIOQgsPvGQbWI27CVU0d5EMHEPdMuC7ZuuV2b9ZZk7HAIhAPvh2gR0I6LHpQCUSqwBqZ+IFqK3NpjmAApknIgF4zXS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7614755},"type":"module","gitHead":"8f11a0a94988093b0ea5d725d18e8dcabacd2373","scripts":{"test":"node --test","typecheck":"tsc","audit:runtime":"npm audit --omit=dev --omit=peer"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Jina, SERPdive, Ka","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.9.0","p-limit":"^6.1.0","typebox":"^1.1.38","defuddle":"0.19.3","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/turndown":"^5.0.6"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.27.0_1787946241995_0.5330948396564945","host":"s3://npm-registry-packages-npm-production"}},"0.28.0":{"name":"pi-web-access","version":"0.28.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.28.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./index.ts"]},"dist":{"shasum":"fa14439d050527f994003c981a1bde7fdde146b0","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.28.0.tgz","fileCount":74,"integrity":"sha512-NMiRWiRXt46oNOoef+9WUN9IKzwADXuM9Wu6fPgMBScIVO8wQK3+dUV0CkmkvTHWADv8PBCqxcDSufVwqF++9Q==","signatures":[{"sig":"MEQCIDI3xAKiYLUDCkJnkpUcXR3Mv9wi0LBXD6lMdkAwiUYUAiBXXk0XMDd2jrgdUQuHsqJu/P3bI5JUziwwCN+IN7bxlA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7646614},"type":"module","gitHead":"e55f78a6cf28e2ba5013e14c3dd7bb5eef2ac7c5","scripts":{"test":"node --test","typecheck":"tsc","audit:runtime":"npm audit --omit=dev --omit=peer"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Jina, SERPdive, Ka","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.9.0","p-limit":"^6.1.0","typebox":"^1.1.38","defuddle":"0.19.3","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/turndown":"^5.0.6"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.28.0_1788578322752_0.6968842186073805","host":"s3://npm-registry-packages-npm-production"}},"0.29.0":{"name":"pi-web-access","version":"0.29.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.29.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./index.ts"]},"dist":{"shasum":"3b1bf8c63920221f9b34856f1eca65db4b97d3b1","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.29.0.tgz","fileCount":78,"integrity":"sha512-1l4sAWYkFhiBynJf/mXuxmCHxjhiAyWJ4rfQVFu8UPa0JQhCS9oXAmNXcL0Q1SfrO00plmb6L4IkypJ3n1Q4Kg==","signatures":[{"sig":"MEUCIH0B0wEsaI4z/nsBFI8Js/W+5z8IWdKR0GbI/ETUXlGrAiEAyQngCfu1CvPomUaKk4a2Z7rlhglOORtk86V9IaJOQGs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7678177},"type":"module","gitHead":"192ac1875e3b8f88c78953dbc314949ec9fcaa27","scripts":{"test":"node --test","typecheck":"tsc","audit:runtime":"npm audit --omit=dev --omit=peer"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Jina, SERPdive, Ka","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.9.0","p-limit":"^6.1.0","typebox":"^1.1.38","defuddle":"0.19.3","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/turndown":"^5.0.6"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.29.0_1789060630873_0.16853168599872625","host":"s3://npm-registry-packages-npm-production"}},"0.30.0":{"name":"pi-web-access","version":"0.30.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.30.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./dist"]},"dist":{"shasum":"24c38ce06a5ae4a7fd6d863c422e96d4994ec9a0","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.30.0.tgz","fileCount":84,"integrity":"sha512-BvqLP36JXfH9OBrmLiJ6IXeeCi9LVqJdLxpexeODM+LoVdCBV13vYiVEG8SQ3J+p+egbGmfPxdDQJ6V631LLUg==","signatures":[{"sig":"MEUCIQC8cB43CJ2GUL55+uo64vSKunOzsmrVYYPL3lpfVmyzZwIgaRi+v0+NMsYCVBTyXcPlpB8X1O0dE+/hTqzyJPXrT1w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDfIF8ejOz0VdLLJpHQkLKpacHyHce0f8sXe6sSEHZUfAIgfDfaWQyMHAdPptGzl+zunADgWV0ZGUwEY4hEUoFvHCw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8678093},"type":"module","gitHead":"6c5afa1d0d43eef8552284ad73f4bd9f0612a378","scripts":{"test":"node --test","build":"node scripts/build.js","release":"node scripts/publish.js","typecheck":"tsc","postpublish":"node scripts/pi-extensions-dist.js index.ts","audit:runtime":"npm audit --omit=dev --omit=peer","prepublishOnly":"npm run build && node scripts/pi-extensions-dist.js dist"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Crawl4AI, Jina, SE","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.9.0","p-limit":"^6.1.0","typebox":"^1.1.38","defuddle":"0.19.3","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1","typescript":"^7.0.2","@types/turndown":"^5.0.6"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.30.0_1789827930535_0.7118928329197947","host":"s3://npm-registry-packages-npm-production"}},"0.31.0":{"name":"pi-web-access","version":"0.31.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.31.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./dist"]},"dist":{"shasum":"8c1208ca5798295dba189f3e6a060895074eef91","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.31.0.tgz","fileCount":86,"integrity":"sha512-Vq4P/d0fFrI2s39ozhgej6VGCrUu1GsVhLFraiDkStcgrgmF0ybDJ4JzDkYr8KUoJwckJGypfkzpuSSWwMMvZA==","signatures":[{"sig":"MEUCIBCWCQrmt8yd+PlfOgBGHwhCDOL/eSxPIhPboVHZ14V4AiEAqp0tnReOqZNyTPBSNq7SloxdWwfURJHpj9aiPc3KY4Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCmXz7Giwg2HnxU5xZP7VwAbSZjQh4bCMB6qe5fugBM9gIhAL/vZATrGGYnIHAId06SUhq1JE+wiN4IR+UaH1fZEWTt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8718766},"type":"module","gitHead":"610a52033f1e9705c0023ff9e0fac399319310a3","scripts":{"test":"node --test","build":"node scripts/build.js","release":"node scripts/publish.js","typecheck":"tsc","postpublish":"node scripts/pi-extensions-dist.js index.ts","audit:runtime":"npm audit --omit=dev --omit=peer","prepublishOnly":"npm run build && node scripts/pi-extensions-dist.js dist"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Crawl4AI, Jina, SE","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.9.0","p-limit":"^6.1.0","typebox":"^1.1.38","defuddle":"0.19.3","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1","typescript":"^7.0.2","@types/turndown":"^5.0.6","@earendil-works/pi-ai":"0.86.1","@earendil-works/pi-tui":"0.86.1","@earendil-works/pi-coding-agent":"0.86.1"},"peerDependencies":{"@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.31.0_1790146701048_0.4828667175471244","host":"s3://npm-registry-packages-npm-production"}},"0.32.0":{"name":"pi-web-access","version":"0.32.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.32.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./dist"]},"dist":{"shasum":"6c70a93422b72738495247c37c670ac18128e2e0","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.32.0.tgz","fileCount":86,"integrity":"sha512-NSSlT8Rf6V/tt63YHgyya5hmffeZ59Cv4FVcfpclEqHjXENWJ/mM6SbQzY1DTXIWdsHncP3cpt4AV2s6+panLQ==","signatures":[{"sig":"MEYCIQDXu/1OqaI7h30LK+UXKGMnm5jaDqpPBT/MIgvBMy+OKwIhANdgfVSNJBGPoPVPZzlYo42ip8/9J1XOYU4qiJaumwrg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICH87Qa+A8KKSYzRYbyqgN0uzqJ6QSfHFW5QxzlvvWdIAiA5Nw0K2kvdg/jTKvbqih1YVWX+wa/JeZUDlI4Fvl/QPA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8732450},"type":"module","gitHead":"c3e72cc3a98b7d2a6520c91002c72047ab583e24","scripts":{"test":"node --test","build":"node scripts/build.js","release":"node scripts/publish.js","typecheck":"tsc","postpublish":"node scripts/pi-extensions-dist.js index.ts","audit:runtime":"npm audit --omit=dev --omit=peer","prepublishOnly":"npm run build && node scripts/pi-extensions-dist.js dist"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Crawl4AI, Jina, SE","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.9.0","p-limit":"^6.1.0","defuddle":"0.19.3","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1","typebox":"1.3.27","typescript":"^7.0.2","@types/turndown":"^5.0.6","@earendil-works/pi-ai":"0.86.1","@earendil-works/pi-tui":"0.86.1","@earendil-works/pi-coding-agent":"0.86.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.32.0_1790480859036_0.06449201726625886","host":"s3://npm-registry-packages-npm-production"}},"0.33.0":{"name":"pi-web-access","version":"0.33.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.33.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./dist"]},"dist":{"shasum":"ff5d13e87092cfb5202bca02b39a87654920ed4a","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.33.0.tgz","fileCount":87,"integrity":"sha512-PEwlDRb8k+V51VpHD36HrQ6TpmaoJgRUqb+aFMZVUbmhN/qYVMAlpUTs+B9QAD+67BFrazHJbcWX6/XdsXBYBQ==","signatures":[{"sig":"MEUCIDjtzqYhphpevL6TTu6NTW1ZUrGV08R9aOfvVBnIhbdrAiEAuszSv73JRHlw4u/k1wQsTZdg6xJcYHpBpNbInWbcghY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDBWST8k77npnJXeUu3UVibi5HDbBYOvMuAkUBwNDaoXQIhAL9J6Du78oCG8lK32hM+mycLXNiZxZXlQbuYrT/HsYOr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8743545},"type":"module","gitHead":"049587ea3f6dc4d1b0519f17e854ed7e5f57e4b2","scripts":{"test":"node --import ./test/isolate-env.mjs --test","build":"node scripts/build.js","release":"node scripts/publish.js","typecheck":"tsc","postpublish":"node scripts/pi-extensions-dist.js index.ts","audit:runtime":"npm audit --omit=dev --omit=peer","prepublishOnly":"npm run build && node scripts/pi-extensions-dist.js dist"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Crawl4AI, Jina, SE","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.9.0","p-limit":"^6.1.0","defuddle":"0.19.3","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1","typebox":"1.3.27","typescript":"^7.0.2","@types/turndown":"^5.0.6","@earendil-works/pi-ai":"0.86.1","@earendil-works/pi-tui":"0.86.1","@earendil-works/pi-coding-agent":"0.86.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.33.0_1790569352541_0.4661426108708624","host":"s3://npm-registry-packages-npm-production"}},"0.34.0":{"name":"pi-web-access","version":"0.34.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.34.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./dist"]},"dist":{"shasum":"337d4960866a2e3b52c167f9d157a09357ec250b","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.34.0.tgz","fileCount":88,"integrity":"sha512-vZnJHKf88XhhTZxIjLEN+7cZr77RDcuuuhQiLgVCjfL5dG97fOrqeD5OBIOC8aa9rbtsj7labIxYvc2wYYQWzA==","signatures":[{"sig":"MEUCIE/st+Q4CdUuCT+8k0fsS2jwo3APv/tW0Iz8r02b03u9AiEAq7xxwxYQFmcjy8DHk2PBM5GjhnXBRMSblPLeUzkODTk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAOGvKAhVLAk5MAbxBURAMHFqGcR5nqFUln/w5Rm4nQMAiEA/szHZPhqcL1aHXeTSecNWm5JOPyrwykkqHOlpEy9vR8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8774321},"type":"module","gitHead":"7bd4509ee4e417a9e0141235bbe276ff77aa81e3","scripts":{"test":"node --import ./test/isolate-env.mjs --test","build":"node scripts/build.js","release":"node scripts/publish.js","typecheck":"tsc","postpublish":"node scripts/pi-extensions-dist.js index.ts","audit:runtime":"npm audit --omit=dev --omit=peer","prepublishOnly":"npm run build && node scripts/pi-extensions-dist.js dist"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Crawl4AI, Jina, SE","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.11.2","p-limit":"^6.1.0","defuddle":"0.19.3","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1","typebox":"1.3.27","typescript":"^7.0.2","@types/turndown":"^5.0.6","@earendil-works/pi-ai":"0.86.1","@earendil-works/pi-tui":"0.86.1","@earendil-works/pi-coding-agent":"0.86.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.34.0_1790753495260_0.6437690339173121","host":"s3://npm-registry-packages-npm-production"}},"0.35.0":{"name":"pi-web-access","version":"0.35.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.35.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./dist"]},"dist":{"shasum":"a807f0d5c6dfa6893f24e00320774a55425f864b","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.35.0.tgz","fileCount":89,"integrity":"sha512-D1GMJMNDG2omAkL1ztmO6ZEwEyW7LoFpTcckKh2yXjLyAgDFuhpTQrs2jQPAlVtGb3rjAeIXRZrkhFcwSWdGSg==","signatures":[{"sig":"MEQCIAqQh9Uz6A7gfuIIYUjgdhw4DDdzTpwLmUkVdSwHTpzbAiB16c9cH4L49M5XajXJbowNTGB8NmEll9bXCMG9ObhMIg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQC2EVdR4bDzGSP4cUjKckfSpAtButsV36OnnL0ij/gdbAIhAMKVRAZoEwuM9ssydXtGMh0oSwljBfPNubFxlygmEYrd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8792516},"type":"module","gitHead":"72c6e67787d67d8a7d01bf0abf30c072a6112de6","scripts":{"test":"node --import ./test/isolate-env.mjs --test","build":"node scripts/build.js","release":"node scripts/publish.js","typecheck":"tsc","postpublish":"node scripts/pi-extensions-dist.js index.ts","audit:runtime":"npm audit --omit=dev --omit=peer","prepublishOnly":"npm run build && node scripts/pi-extensions-dist.js dist"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Crawl4AI, Jina, SE","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.11.2","p-limit":"^6.1.0","defuddle":"0.19.3","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1","typebox":"1.3.27","typescript":"^7.0.2","@types/turndown":"^5.0.6","@earendil-works/pi-ai":"0.86.1","@earendil-works/pi-tui":"0.86.1","@earendil-works/pi-coding-agent":"0.86.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.35.0_1790802323517_0.6095567787856875","host":"s3://npm-registry-packages-npm-production"}},"0.36.0":{"name":"pi-web-access","version":"0.36.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.36.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./dist"]},"bin":{"pi-web-access-mcp":"dist/mcp-cli.js"},"dist":{"shasum":"7ae25456aa0cf37549bb81bb10002273849bb73a","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.36.0.tgz","fileCount":97,"integrity":"sha512-7o863phmEIi85GQ2xig8Gn9MJWBG/cVfCGsa3T+5xjTagq3fqaPxjTQ4GgsT2ENQmIleveDaBbFL0dOTd2Ay7g==","signatures":[{"sig":"MEUCIQCCrfVjQ7YbJGcWF4xLkroTH7us22l6CyfGS+L4UfRdbwIgEEN34vPVCKyCLY5Owy5A6XrKl/9aNvEC6ZK7T6O2HJY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCOWB90fTevVCVhAucC/EyzfSw5T89OXcf2iy6woQ+EEQIhALvO7t8nNkcSJMc6nzv/SsgIqSYxgWtoMyDw2kQiFo+u","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10019706},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"d9624588de4a92af1e73be731a462c9bdcfeb96d","scripts":{"test":"node --import ./test/isolate-env.mjs --test","build":"node scripts/build.js","release":"node scripts/publish.js","typecheck":"tsc","postpublish":"node scripts/pi-extensions-dist.js index.ts","audit:runtime":"npm audit --omit=dev --omit=peer","prepublishOnly":"npm run build && node scripts/pi-extensions-dist.js dist"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Crawl4AI, Jina, SE","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.11.2","p-limit":"^6.1.0","defuddle":"0.19.3","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1","typebox":"1.3.27","typescript":"^7.0.2","@types/turndown":"^5.0.6","@earendil-works/pi-ai":"0.86.1","@earendil-works/pi-tui":"0.86.1","@earendil-works/pi-coding-agent":"0.86.1"},"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-tui":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.36.0_1791177751043_0.1965942430554355","host":"s3://npm-registry-packages-npm-production"}},"0.37.0":{"name":"pi-web-access","version":"0.37.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","degoog","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.37.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./dist"]},"bin":{"pi-web-access-mcp":"dist/mcp-cli.js"},"dist":{"shasum":"88952d232601733f42abfbdd776e00ed4bea0ee3","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.37.0.tgz","fileCount":98,"integrity":"sha512-Je7D5ghQi9dpN0KhpFMuHYwKy0oBvpNrNR7zuTzSyCRsIJDC5in8yGz/3yItxvWYHF1W+q2Sq190nyaLkoWhgg==","signatures":[{"sig":"MEUCIQDELpODR32NvL9sQLl+3/NISZrT3OCJTdRzZfgRjTeSEAIgbuAd3nelB6j9julFmmVQy+nPfVhMnPiJSptblwwfi/8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD9+w6F1TAx1G3K/zXGL8lhShLS+ING4N6BJLZRGtSANAIgDJUmxbcY5zX+KYoSubfVu7c/hRplu2Qop3SSa2uKyCw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10068073},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"f0c0a96a8f19198e767cbec2e447f38779ccca50","scripts":{"test":"node --import ./test/isolate-env.mjs --test","build":"node scripts/build.js","release":"node scripts/publish.js","typecheck":"tsc","postpublish":"node scripts/pi-extensions-dist.js index.ts","audit:runtime":"npm audit --omit=dev --omit=peer","prepublishOnly":"npm run build && node scripts/pi-extensions-dist.js dist"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Crawl4AI, Jina, SE","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.11.2","p-limit":"^6.1.0","defuddle":"0.19.3","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1","typebox":"1.3.27","typescript":"^7.0.2","@types/turndown":"^5.0.6","@earendil-works/pi-ai":"1.0.4","@earendil-works/pi-tui":"1.0.4","@earendil-works/pi-coding-agent":"1.0.4"},"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-tui":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.37.0_1791257017470_0.45988747397072616","host":"s3://npm-registry-packages-npm-production"}},"0.38.0":{"name":"pi-web-access","version":"0.38.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","degoog","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.38.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./dist"]},"bin":{"pi-web-access-mcp":"dist/mcp-cli.js"},"dist":{"shasum":"268383105cd627464660038508594e2aadff007c","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.38.0.tgz","fileCount":98,"integrity":"sha512-8AHja5tlOoGlrtmOsB+zy/MpMeE/fdXQd4UDDs7yg6viaElmNOyNJjNUj+LrgMgMA78ct8xLEKlAI7l9rC8DIw==","signatures":[{"sig":"MEUCIQCBwMjr+l2xHZOuEuf3PnF/ysQAbVvgMvbBg0WQIxSZYwIgBR2RV2+U7scEcHTzZdJtHP7wS6dY1l9FOQe6EFl/KCU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC7bpiwJYhuGR0W5stoz6qPhd+jFC/mIU6L4sTt5puHxwIgMYfxQ5YRZMyIrPqIUpngk0Vj5H7Q70otncPD6yaqXqc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10107008},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"7e6e2386dc9a31d5e2a448172060dd1339c604f7","scripts":{"test":"node --import ./test/isolate-env.mjs --test","build":"node scripts/build.js","release":"node scripts/publish.js","typecheck":"tsc","postpublish":"node scripts/pi-extensions-dist.js index.ts","audit:runtime":"npm audit --omit=dev --omit=peer","prepublishOnly":"npm run build && node scripts/pi-extensions-dist.js dist"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Crawl4AI, Jina, SE","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.11.2","p-limit":"^6.1.0","defuddle":"0.19.3","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"1.32.1"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1","typebox":"1.3.27","typescript":"^7.0.2","@types/turndown":"^5.0.6","@earendil-works/pi-ai":"1.0.4","@earendil-works/pi-tui":"1.0.4","@earendil-works/pi-coding-agent":"1.0.4"},"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-tui":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.38.0_1791570313627_0.03566710939434525","host":"s3://npm-registry-packages-npm-production"}},"0.39.0":{"name":"pi-web-access","version":"0.39.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","degoog","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.39.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./dist"]},"bin":{"pi-web-access-mcp":"dist/mcp-cli.js"},"dist":{"shasum":"695c8f74d8959d92025633771373bb02fb2571fb","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.39.0.tgz","fileCount":99,"integrity":"sha512-LfVbaOLXDZuVw0WC3mnBtG8RILH4joBs0WrKrXYWj2HGuX3SpozxcGZvUDlwvio4lIFYjEONvgcTTqQYD0Dv4Q==","signatures":[{"sig":"MEYCIQCiiAIpf+jLBvUJ8VMw2HBpVqcJVEqt6tkTLQ92j3nPowIhAMmlwq0Sx7Dhv8Vgr/P4159OfAfNyidt1snZNOco/LsV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBw4Pb+izJDLFMeg0PfcyhynRsOXhCIa7ww3dfyLtyy8AiAJO4wPlH5uijD6zoaN0z0skBTPSF4KqCib4yY1z2iE+Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10143846},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"8e812826269624406458531f9231b679547f5a3a","scripts":{"test":"node --import ./test/isolate-env.mjs --test","build":"node scripts/build.js","release":"node scripts/publish.js","typecheck":"tsc","postpublish":"node scripts/pi-extensions-dist.js index.ts","audit:runtime":"npm audit --omit=dev --omit=peer","prepublishOnly":"npm run build && node scripts/pi-extensions-dist.js dist"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Crawl4AI, Jina, SE","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.11.2","p-limit":"^6.1.0","defuddle":"0.19.3","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"1.32.1"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1","typebox":"1.3.27","typescript":"^7.0.2","@types/turndown":"^5.0.6","@earendil-works/pi-ai":"1.0.4","@earendil-works/pi-tui":"1.0.4","@earendil-works/pi-coding-agent":"1.0.4"},"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-tui":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.39.0_1791781697078_0.6677002322360297","host":"s3://npm-registry-packages-npm-production"}},"0.40.0":{"name":"pi-web-access","version":"0.40.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","degoog","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.40.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./dist"]},"bin":{"pi-web-access-mcp":"dist/mcp-cli.js"},"dist":{"shasum":"ad0dba86a2ed7410639eb912f575240e7b449a05","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.40.0.tgz","fileCount":99,"integrity":"sha512-eybqc4Agn1QZIFggtW0YMIma9K/Jqa6WFPnBQ854yi7GrISs9Lt2kRQmv402CYWaAdSPS8MbMB3kX2d3lZ7KAQ==","signatures":[{"sig":"MEUCIQD7tuGXuPicLgRhc762zlnFLyygKAuAM7m4NgT9It2WawIgJRe3Nh+oFcHQrKN4n4JKRu/8wrAm3X4zVJqiJ/ukv3Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFZOpXDK92ldy1wHhQuaB8483Lxca6o/ysZAZ0TzRvvRAiB8bFSb5LcOlGfl34RueyFFgMeqXln4rqrpZ2NIJTHaBg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10159662},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"9861ad72a11c9af419b39f9b00860708407f7025","scripts":{"test":"node --import ./test/isolate-env.mjs --test","build":"node scripts/build.js","release":"node scripts/publish.js","typecheck":"tsc","postpublish":"node scripts/pi-extensions-dist.js index.ts","audit:runtime":"npm audit --omit=dev --omit=peer","prepublishOnly":"npm run build && node scripts/pi-extensions-dist.js dist"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Crawl4AI, Jina, SE","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.11.2","p-limit":"^6.1.0","defuddle":"0.19.3","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"1.32.1"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1","typebox":"1.3.27","typescript":"^7.0.2","@types/turndown":"^5.0.6","@earendil-works/pi-ai":"1.0.4","@earendil-works/pi-tui":"1.0.4","@earendil-works/pi-coding-agent":"1.0.4"},"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-tui":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.40.0_1791876305980_0.8296987821777353","host":"s3://npm-registry-packages-npm-production"}},"0.41.0":{"name":"pi-web-access","version":"0.41.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","degoog","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.41.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./dist"]},"bin":{"pi-web-access-mcp":"dist/mcp-cli.js"},"dist":{"shasum":"ee8167f963d6c81a474b2d4db7be3bf6c681402a","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.41.0.tgz","fileCount":99,"integrity":"sha512-8+UoNENGHKlYBxrtwh7Hwoh2twVfs+tcdR1Ciq7sRUtTur0mOXP8N/o7/y72JbdYij3NuSyCNjShbWBPPJ8JPA==","signatures":[{"sig":"MEQCIH+j+x63mF+y1KuK/oz3l96b2r4i9n/fgWIsQzrVfyXaAiAJqIvtJ6v43GFVcI7OL7DSLbv5Zcsc3gTJW5EIS4b53Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDyGojpwRyq88P3qs7Ao0i253hvLRFT35QYIXdfA0nNtAIgQu/qYNMc8ZF4ZsgAm/K+y9JovH1b5Jf3viFx1EjjYZM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10163972},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"d47dc040552505e3b135d0136a0b15eaf4bdba52","scripts":{"test":"node --import ./test/isolate-env.mjs --test","build":"node scripts/build.js","release":"node scripts/publish.js","typecheck":"tsc","postpublish":"node scripts/pi-extensions-dist.js index.ts","audit:runtime":"npm audit --omit=dev --omit=peer","prepublishOnly":"npm run build && node scripts/pi-extensions-dist.js dist"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Crawl4AI, Jina, SE","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.11.2","p-limit":"^6.1.0","defuddle":"0.19.3","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"1.32.1"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1","typebox":"1.3.27","typescript":"^7.0.2","@types/turndown":"^5.0.6","@earendil-works/pi-ai":"1.0.4","@earendil-works/pi-tui":"1.0.4","@earendil-works/pi-coding-agent":"1.0.4"},"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-tui":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.41.0_1792043392087_0.32989559643502475","host":"s3://npm-registry-packages-npm-production"}},"0.42.0":{"name":"pi-web-access","version":"0.42.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","degoog","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.42.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./dist"]},"bin":{"pi-web-access-mcp":"dist/mcp-cli.js"},"dist":{"shasum":"4df2585b6c19c78f64b0c387822ba8516541dfcf","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.42.0.tgz","fileCount":100,"integrity":"sha512-AUtkNFw1wltHSzxEQGF9yjUjijQE75opicgXrOLCX7iRWWXaKoj0fOlPAWUHVMqRRHeUwN6S/sYFrm3+2QOtMQ==","signatures":[{"sig":"MEYCIQCceAXkS+S+h3+InHMilRUuEqwv0xzOIpdcLolJk4COUQIhAM5nZQKTyrDuR/mp/MdNZuTx+Ew3Pi6K2egxfmWm8L45","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDcIGXZXBmTjV8KGqNi7UpkL4sUPoU600ZSW8uLuIt8egIhAKpK4U0AQuWUTxJphL0yJXSyfZVRjbByFIkLI+j7MRCp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10206966},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"18e36f9e0fc2de3c9895a7fda8d39a62ce60f49e","scripts":{"test":"node --import ./test/isolate-env.mjs --test","build":"node scripts/build.js","release":"node scripts/publish.js","typecheck":"tsc","postpublish":"node scripts/pi-extensions-dist.js index.ts","audit:runtime":"npm audit --omit=dev --omit=peer","prepublishOnly":"npm run build && node scripts/pi-extensions-dist.js dist"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Crawl4AI, Jina, SE","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.11.2","p-limit":"^6.1.0","defuddle":"0.19.3","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"1.32.1"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1","typebox":"1.3.27","typescript":"^7.0.2","@types/turndown":"^5.0.6","@earendil-works/pi-ai":"1.0.4","@earendil-works/pi-tui":"1.0.4","@earendil-works/pi-coding-agent":"1.0.4"},"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-tui":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.42.0_1792220355580_0.04514749566047982","host":"s3://npm-registry-packages-npm-production"}},"0.43.0":{"name":"pi-web-access","version":"0.43.0","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","degoog","perplexity","fetch","scraping"],"author":{"name":"Nico Bailon"},"license":"MIT","_id":"pi-web-access@0.43.0","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"homepage":"https://github.com/nicobailon/pi-web-access#readme","bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./dist"]},"bin":{"pi-web-access-mcp":"dist/mcp-cli.js"},"dist":{"shasum":"014d1737f5531e5363623d62463ab8aed3700571","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.43.0.tgz","fileCount":101,"integrity":"sha512-O3cyBI3JnZuNM7tjUbpmq/X5uxZsbFyoqv+KKc4LDx1SDNV4BuVD/OaB/NTLZgfOQMgptNF0CnOP2nigQJ9bSQ==","signatures":[{"sig":"MEUCIEJVWfLi4BYL313o1isRIPjcgEwWeLLewB+oxuwZI4vbAiEAoxSRaVLZIenYi2FdljEaTDc9qH/jbnmYnBMafc0Vx6g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDcySsiBq8mz8VDCpfmRvlg9QhQOGuWeT6s+4Sv98zBBAIhAOsNug6j6Vjz+g4vl5cCPJXKOV57wFXIr4yMfohb8AMk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10271443},"type":"module","engines":{"node":">=22.19.0"},"gitHead":"7fcb1531fbc4b86cef12e8851f66b42e6385e0ce","scripts":{"test":"node --import ./test/isolate-env.mjs --test","build":"node scripts/build.js","release":"node scripts/publish.js","typecheck":"tsc","postpublish":"node scripts/pi-extensions-dist.js index.ts","audit:runtime":"npm audit --omit=dev --omit=peer","prepublishOnly":"npm run build && node scripts/pi-extensions-dist.js dist"},"_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Crawl4AI, Jina, SE","directories":{},"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.11.2","p-limit":"^6.1.0","defuddle":"0.19.3","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"1.32.1"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1","typebox":"1.3.27","typescript":"^7.0.2","@types/turndown":"^5.0.6","@earendil-works/pi-ai":"1.0.4","@earendil-works/pi-tui":"1.0.4","@earendil-works/pi-coding-agent":"1.0.4"},"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-tui":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pi-web-access_0.43.0_1792478877131_0.7903087270888616","host":"s3://npm-registry-packages-npm-production"}},"0.44.0":{"pi":{"video":"https://github.com/nicobailon/pi-web-access/raw/refs/heads/main/pi-web-fetch-demo.mp4","extensions":["./dist"]},"_id":"pi-web-access@0.44.0","bin":{"pi-web-access-mcp":"dist/mcp-cli.js"},"bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"dist":{"shasum":"6cdb7aa75f8b41bbce55f1114f017403e0ed827e","tarball":"https://registry.npmjs.org/pi-web-access/-/pi-web-access-0.44.0.tgz","fileCount":101,"integrity":"sha512-8YK2Nb0P7ezRL0FS7P1cPYu7gDUOuhXWA3FOBev0bKsuPtG2QrDVm2GriKBgZI1Sq7SC8QRsfVFYYP8huUEo8w==","signatures":[{"sig":"MEUCIQCPlKU3AN1axVcbz/HboSxYhcnpH6A4lEb2gwuqEUhtHwIgR0pcFxEqrc7tuF+dgWJOJjdvrvTKCgIhFbDtSO4Oixc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCL+Lr1RV2nUlFQyRdpA9GUPw8Phz79vf4HJLGEXHBC1QIgLjgl95f7cewjW5c4PFvCiMIG/DqgBmpb5uww4M7M2P8="}],"unpackedSize":10290882},"name":"pi-web-access","type":"module","author":{"name":"Nico Bailon"},"engines":{"node":">=22.19.0"},"gitHead":"d0e323ac935e8753d11e1853b81c057e39dee4dc","license":"MIT","scripts":{"test":"node --import ./test/isolate-env.mjs --test","build":"node scripts/build.js","release":"node scripts/publish.js","typecheck":"tsc","postpublish":"node scripts/pi-extensions-dist.js index.ts","audit:runtime":"npm audit --omit=dev --omit=peer","prepublishOnly":"npm run build && node scripts/pi-extensions-dist.js dist"},"version":"0.44.0","_npmUser":{"name":"nicopreme","email":"nico.bailon@gmail.com"},"homepage":"https://github.com/nicobailon/pi-web-access#readme","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","degoog","perplexity","fetch","scraping"],"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"_npmVersion":"11.6.2","description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Crawl4AI, Jina, SE","directories":{},"maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"_nodeVersion":"25.2.1","dependencies":{"unpdf":"^1.6.2","undici":"^8.11.2","p-limit":"^6.1.0","defuddle":"0.19.3","linkedom":"^0.16.0","turndown":"^7.2.0","promise.try":"^2.0.1","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"1.32.1"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1","typebox":"1.3.27","typescript":"^7.0.2","@types/turndown":"^5.0.6","@earendil-works/pi-ai":"1.0.4","@earendil-works/pi-tui":"1.0.4","@earendil-works/pi-coding-agent":"1.0.4"},"peerDependencies":{"typebox":"*","@earendil-works/pi-ai":"*","@earendil-works/pi-tui":"*","@earendil-works/pi-coding-agent":"*"},"peerDependenciesMeta":{"@earendil-works/pi-ai":{"optional":true},"@earendil-works/pi-tui":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-web-access_0.44.0_1792560899645_0.8741632218511968"}}},"time":{"created":"2026-01-27T18:45:10.901Z","modified":"2026-10-21T05:35:00.099Z","0.4.2":"2026-01-27T18:45:11.122Z","0.4.3":"2026-01-28T06:53:26.096Z","0.4.4":"2026-02-02T00:39:54.916Z","0.4.5":"2026-02-02T00:42:47.609Z","0.5.0":"2026-02-02T02:01:46.641Z","0.5.1":"2026-02-02T17:19:39.577Z","0.7.0":"2026-02-03T19:53:45.224Z","0.7.1":"2026-02-03T20:16:52.814Z","0.7.2":"2026-02-03T21:02:25.635Z","0.7.3":"2026-02-06T06:48:32.035Z","0.10.0":"2026-02-18T14:28:44.154Z","0.10.1":"2026-02-18T16:23:15.304Z","0.10.2":"2026-02-18T16:27:13.266Z","0.10.3":"2026-03-12T05:27:58.888Z","0.10.4":"2026-03-27T23:01:07.847Z","0.10.5":"2026-04-04T01:28:47.912Z","0.10.6":"2026-04-04T02:14:59.997Z","0.10.7":"2026-05-02T21:33:07.794Z","0.12.0":"2026-06-24T07:03:55.908Z","0.13.0":"2026-06-25T07:41:38.785Z","0.14.0":"2026-07-25T19:59:39.779Z","0.15.0":"2026-07-28T06:40:03.831Z","0.16.0":"2026-07-30T15:52:32.913Z","0.17.0":"2026-07-30T23:14:38.341Z","0.17.1":"2026-07-31T18:02:10.275Z","0.18.0":"2026-08-03T03:20:43.607Z","0.19.0":"2026-08-08T08:00:49.578Z","0.20.0":"2026-08-10T06:15:26.887Z","0.21.0":"2026-08-10T23:41:53.385Z","0.22.0":"2026-08-11T21:06:09.927Z","0.23.0":"2026-08-15T00:52:48.863Z","0.24.0":"2026-08-18T17:37:46.628Z","0.24.1":"2026-08-21T21:04:29.519Z","0.24.2":"2026-08-22T23:31:16.616Z","0.25.0":"2026-08-25T23:39:54.141Z","0.26.0":"2026-08-28T06:47:05.299Z","0.27.0":"2026-08-28T19:44:02.262Z","0.28.0":"2026-09-05T03:18:42.996Z","0.29.0":"2026-09-10T17:17:11.132Z","0.30.0":"2026-09-19T14:25:30.716Z","0.31.0":"2026-09-23T06:58:21.213Z","0.32.0":"2026-09-27T03:47:39.219Z","0.33.0":"2026-09-28T04:22:32.715Z","0.34.0":"2026-09-30T07:31:35.495Z","0.35.0":"2026-09-30T21:05:23.733Z","0.36.0":"2026-10-05T05:22:31.246Z","0.37.0":"2026-10-06T03:23:37.720Z","0.38.0":"2026-10-09T18:25:13.862Z","0.39.0":"2026-10-12T05:08:17.282Z","0.40.0":"2026-10-13T07:25:06.214Z","0.41.0":"2026-10-15T05:49:52.276Z","0.42.0":"2026-10-17T06:59:15.823Z","0.43.0":"2026-10-20T06:47:57.423Z","0.44.0":"2026-10-21T05:34:59.898Z"},"bugs":{"url":"https://github.com/nicobailon/pi-web-access/issues"},"author":{"name":"Nico Bailon"},"license":"MIT","homepage":"https://github.com/nicobailon/pi-web-access#readme","keywords":["pi-package","pi","pi-coding-agent","extension","web-search","tinyfish","search1api","searchinfinity","querit","degoog","perplexity","fetch","scraping"],"repository":{"url":"git+https://github.com/nicobailon/pi-web-access.git","type":"git"},"description":"Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Crawl4AI, Jina, SE","maintainers":[{"name":"nicopreme","email":"nico.bailon@gmail.com"}],"readme":"<p>\n  <img src=\"banner.png\" alt=\"pi-web-access\" width=\"1100\">\n</p>\n\n# Pi Web Access\n\n**Web search, content extraction, and video understanding for Pi agent. OpenAI/Codex search, zero-config Exa search, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Jina, SERPdive, Kagi, Bocha, Ollama, AnySearch, XCrawl, Valyu, xAI/Grok, Mistral, Bright Data SERP, SerpBase, SerpApi, Linkup, Serper, explicit-only Serply, self-hosted SearXNG, degoog metasearch, self-hosted Crawl4AI extraction, keyless DuckDuckGo, keyless Keenable, optional browser-cookie Gemini Web, Kimi Code Plan search, or bring your own API keys.**\n\n[![npm version](https://img.shields.io/npm/v/pi-web-access?style=for-the-badge)](https://www.npmjs.com/package/pi-web-access)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge)](https://opensource.org/licenses/MIT)\n[![Platform](https://img.shields.io/badge/Platform-macOS%20%7C%20Linux%20%7C%20Windows*-blue?style=for-the-badge)]()\n\n<https://github.com/user-attachments/assets/cac6a17a-1eeb-4dde-9818-cdf85d8ea98f>\n\n## Why Pi Web Access\n\n**Zero Config** — Works out of the box with Exa MCP (no API key needed). If you're signed into Pi with a Codex subscription, OpenAI web search can reuse that auth. An active Kimi Code Plan signed in through `/login kimi-coding` enables explicit Kimi search without a separate Open Platform key. Add API keys or endpoints for OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Jina, SERPdive, Kagi, Bocha, Ollama, Valyu, SerpBase, SerpApi, Serper, explicit-only Serply, Exa, Perplexity, Gemini API, or Mistral for more control; configure a self-hosted SearXNG endpoint or a degoog metasearch instance (public `https://degoog.org` by default) for private search; or opt into browser-cookie access for Gemini Web.\n\n**Video Understanding** — Point it at a YouTube video or local screen recording and ask questions about what's on screen. Full transcripts, visual descriptions, and frame extraction at exact timestamps.\n\n**Smart Fallbacks** — Every capability has a fallback chain. Search tries configured SearXNG first for local/private search. When the active Pi model uses a ChatGPT subscription (`openai-codex`, or `openai` with Sign in with ChatGPT), it then tries subscription-backed OpenAI search. Otherwise it tries Exa before OpenAI, then Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Jina, SERPdive, Kagi, Bocha, Ollama, Perplexity, Gemini API, and Gemini Web when browser cookies are enabled. YouTube tries Gemini Web when enabled, then API, then Perplexity. Blocked pages try configured self-hosted Firecrawl or Crawl4AI first. Third-party hosted page fetchers require explicit `fetchRouting.allowRemoteHostedProviders` opt-in for remote HTTP(S) targets.\n\n**GitHub Cloning** — GitHub URLs are cloned locally instead of scraped. The agent gets real file contents and a local path to explore, not rendered HTML.\n\n**Other Agents** — The search and fetch tools also run as a local MCP server for Claude Code, Codex, Cursor, and other MCP clients. See [Use from other agents (MCP)](#use-from-other-agents-mcp).\n\n## Install\n\n```bash\npi install npm:pi-web-access\n```\n\nWorks immediately with no API keys — Exa MCP provides zero-config search. If Pi has Codex auth from `/login`, OpenAI search can also work without a separate key. For more providers or direct API access, add keys to `~/.pi/agent/web-search.json`:\n\n```json\n{\n  \"openaiApiKey\": \"sk-...\",\n  \"braveApiKey\": \"BSA_...\",\n  \"exaApiKey\": \"exa-...\",\n  \"tinyfishApiKey\": \"sk-tinyfish-...\",\n  \"search1apiApiKey\": \"...\",\n  \"searchinfinityApiKey\": \"...\",\n  \"queritApiKey\": \"...\",\n  \"jinaApiKey\": \"jina_...\",\n  \"bochaApiKey\": \"sk-...\",\n  \"perplexityApiKey\": \"pplx-...\",\n  \"geminiApiKey\": \"AIza...\",\n  \"mistralApiKey\": \"...\"\n}\n```\n\nIn `auto` mode (default), `web_search` tries a configured SearXNG endpoint first for local/private search. When the active Pi model uses a ChatGPT subscription (`openai-codex`, or `openai` with Sign in with ChatGPT), it then tries subscription-backed OpenAI search. Otherwise it tries Exa (direct API if keyed, MCP if not) before OpenAI, then Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Jina, SERPdive, Perplexity, Gemini API, and Gemini Web when browser-cookie access is enabled. Exa handles search; curator summary drafts are generated separately by the configured Pi summary model, defaulting to Claude Haiku, Codex Luna, Codex Terra, Gemini 3.6 Flash, GPT-5 mini, then DeepSeek V4 Flash when available. Slow summary drafts fall back to a deterministic result summary after a bounded deadline.\n\nFor a third-party Responses-compatible gateway, set `openaiResponsesUrl` to its full Responses endpoint, or opt into reusing the selected Pi provider's base URL as described below. Without either opt-in, Pi credentials with a custom `baseUrl` are refused before sending a request, and availability checks mark OpenAI unavailable without blocking other providers. The auth-resolved base URL takes precedence over the model's; gateway Responses/`web_search` support is not inferred. An explicit endpoint overrides this guard, including an explicit official endpoint. Existing Codex subscription endpoint selection is preserved when provider URL reuse is not active.\n\n### Reuse the selected Pi provider URL\n\nSet `openaiUseProviderBaseUrl: true` to derive the search endpoint from the Pi provider whose credentials were selected. This avoids maintaining the same gateway address in both `models.json` and `web-search.json`. The default is `false`.\n\n```json\n{\n  \"openaiSearchProviders\": [\"my-openai-provider\"],\n  \"openaiUseProviderBaseUrl\": true\n}\n```\n\nIf `openaiResponsesUrl` is supplied, this switch is ignored and the existing explicit-endpoint/auth rules apply. Remove that field to use the provider address. Otherwise the switch must be a boolean. The selected provider's auth-resolved `baseUrl` takes precedence over its model's `baseUrl`; credentials and URL are resolved together for each search. Candidates with missing or invalid resolved base URLs are skipped in configured order, keeping each candidate's credentials bound to its own URL. Reload Pi after changing its provider configuration.\n\nOnly absolute HTTP(S) URLs are accepted. Preserve the origin, port, prefix, and query parameters, and complete the Responses path as follows:\n\n| Provider base URL | Derived Responses endpoint |\n| --- | --- |\n| `https://gateway.example.com` | `https://gateway.example.com/v1/responses` |\n| `https://gateway.example.com/v1` | `https://gateway.example.com/v1/responses` |\n| `https://gateway.example.com/team/v1/` | `https://gateway.example.com/team/v1/responses` |\n| `https://gateway.example.com/v1/responses` | `https://gateway.example.com/v1/responses` |\n\nCodex auth with the official `https://chatgpt.com/backend-api` base uses `/backend-api/codex/responses`. When reusing a custom provider URL with Codex credentials, retain its destination and required account headers rather than redirecting to the official host. If `openaiUseAlphaSearch` is also true, replace the derived `/responses` suffix with `/alpha/search`.\n\nIf no candidate has usable Pi credentials and a valid provider base URL, this mode fails closed and marks OpenAI unavailable; it does not fall back to the official endpoint or a standalone API key. API-key-only configurations can use `openaiResponsesUrl` instead. This switch applies to independent OpenAI provider selection; `searchRouting.useCurrentModel` retains its existing official-endpoint selection and eligibility rules.\n\n### Optional OpenAI standalone search\n\nSet `openaiUseAlphaSearch: true` to use the independent Codex `alpha/search` protocol instead of Responses-hosted `web_search`. The default is `false`; omitting the flag keeps existing Responses behavior. Non-boolean values are rejected.\n\n```json\n{\n  \"openaiUseAlphaSearch\": true,\n  \"openaiResponsesUrl\": \"https://gateway.example.com/v1/responses\",\n  \"openaiSearchProviders\": [\"my-openai-provider\"]\n}\n```\n\nThe selected Responses endpoint must end in `/responses` (an optional trailing slash is accepted). Its path suffix becomes `/alpha/search`, preserving the host, port, prefix, and query parameters. For example, `/v1/responses` becomes `/v1/alpha/search`. By default, Codex subscription auth selects `https://chatgpt.com/backend-api/codex/alpha/search`; with provider URL reuse enabled, it follows the resolved provider endpoint instead. Existing credential selection, search-model overrides, custom-base-URL safeguards when URL reuse is disabled, and official current-model eligibility rules still apply. This flag does not make an arbitrary gateway support standalone search.\n\nStandalone requests use `id`, `model`, and `commands.search_query`, not a Responses tool call. Plaintext `output` and structured `text_result` sources are returned without another model-generated summary. Encrypted-only responses are rejected. `numResults` defaults to 5 and caps the deduplicated source list at up to 20; recency maps to 1/7/30/365 days, and positive domain filters map to `domains`. Excluded domains (`-example.com`) are explicitly unsupported in this mode rather than silently ignored.\n\nMissing endpoint responses (HTTP 404/405/501) and excluded-domain requests follow the existing `unsupported` fallback policy. Other HTTP errors, cancellation, proxy transport, and the 60-second request deadline retain their existing behavior. There is no automatic retry through Responses. To permit another provider, configure `searchRouting.fallbackOn` accordingly; explicit `provider: \"openai\"` remains strict. Reload Pi after changing configuration.\n\nTo route automatic searches through the active Pi model, configure an ordered route without a top-level `provider`:\n\n```json\n{\n  \"searchRouting\": {\n    \"providers\": [\"openai\", \"tavily\"],\n    \"useCurrentModel\": true,\n    \"fallbackOn\": [\"unsupported\", \"transient\", \"quota\", \"network\", \"invalid-response\"]\n  }\n}\n```\n\nWith `useCurrentModel: true`, the automatic `openai` step uses Hosted `web_search` (or standalone search when `openaiUseAlphaSearch` is enabled) when the active model is a GPT model backed by an official OpenAI Responses endpoint: `openai`/`openai-responses` on HTTPS `api.openai.com`, or `openai-codex`/`openai-codex-responses` on the official ChatGPT Codex endpoint. Third-party gateways, Azure, and other models continue to the next route entry. A tool-level `provider` or top-level `provider` remains an explicit override; `provider: \"openai\"` keeps the existing independent OpenAI/Codex search-model behavior.\n\nFor sandboxed or corporate networks where only the proxy can resolve hostnames, set `ssrf.trustEnvProxy` to `true` to skip local DNS preflight for proxied hostnames:\n\n```json\n{\n  \"ssrf\": {\n    \"trustEnvProxy\": true\n  }\n}\n```\n\nThis is an opt-in DNS-preflight adjustment, not proxy transport configuration. It applies to requests sent through the `proxy` set in `web-search.json` (HTTP(S), `socks5h`, or `socks4a`, including a per-call `proxy` with the same value). When no `proxy` is configured, it applies to hostnames covered by `HTTP_PROXY`, `HTTPS_PROXY`, or `ALL_PROXY`, for sandboxes that route outbound traffic through those variables themselves; the extension does not route requests through environment proxies. A per-call `proxy` that differs from the configured one still gets local DNS validation. `NO_PROXY` hosts still undergo DNS validation, and localhost or literal private IP targets remain blocked.\n\nOptional dependencies for video frame extraction:\n\n```bash\nbrew install ffmpeg   # frame extraction, video thumbnails, local video duration\nbrew install yt-dlp   # YouTube stream URLs for frame extraction\n```\n\nWithout these, video content analysis (transcripts, visual descriptions via Gemini) still works. The binaries are only needed for extracting individual frames as images.\n\nSystem dependency for curator browser launch on Linux:\n\n| Package | Purpose | Install |\n|---------|---------|---------|\n| `xdg-utils` | Opens the curator UI in your default browser | Debian/Ubuntu: `sudo apt install -y xdg-utils` · Fedora/RHEL: `sudo dnf install -y xdg-utils` · Arch: `sudo pacman -S xdg-utils` |\n\nWithout `xdg-utils`, the curator URL is printed to the tool output so you can copy it into a browser.\n\nRequires Pi v0.37.3+.\n\n## Quick Start\n\n```typescript\n// Search the web\nweb_search({ query: \"TypeScript best practices 2025\" })\n\n// Fetch a page\nfetch_content({ url: \"https://docs.example.com/guide\" })\n\n// Clone a GitHub repo\nfetch_content({ url: \"https://github.com/owner/repo\" })\n\n// Understand a YouTube video\nfetch_content({ url: \"https://youtube.com/watch?v=abc\", prompt: \"What libraries are shown?\" })\n\n// Analyze a screen recording\nfetch_content({ url: \"/path/to/recording.mp4\", prompt: \"What error appears on screen?\" })\n```\n\n## Tools\n\n### web_search\n\nSearch the web via OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Jina, SERPdive, Kagi, Bocha, Ollama, AnySearch, XCrawl, Valyu, xAI, Mistral, Bright Data SERP, SerpBase, SerpApi, Serper, Serply, You.com, keyless Keenable, Ceramic, DeepSeek, Linkup, self-hosted SearXNG, explicit-only degoog, keyless DuckDuckGo, Exa, Perplexity AI, Gemini, or Kimi. The default `none` workflow makes no summary-generation model call and opens no curator/browser: it returns bounded raw results, identifies the provider used for each query, and stores the full results for retrieval by responseId. The selected search provider may itself be model-backed.\n\n```typescript\nweb_search({ query: \"rust async programming\" })\nweb_search({ queries: [\"query 1\", \"query 2\"] })\nweb_search({ query: \"latest news\", numResults: 10, recencyFilter: \"week\" })\nweb_search({ query: \"...\", domainFilter: [\"github.com\"] })\nweb_search({ query: \"...\", provider: \"openai\" })\nweb_search({ query: \"...\", provider: \"kimi\" })\nweb_search({ query: \"...\", provider: \"mistral\" })\nweb_search({ query: \"...\", provider: \"all\" })\nweb_search({ query: \"...\", includeContent: true })\nweb_search({ queries: [\"query 1\", \"query 2\"], workflow: \"none\" })\nweb_search({ queries: [\"query 1\", \"query 2\"], workflow: \"summary-review\" })\nweb_search({ queries: [\"query 1\", \"query 2\"], workflow: \"auto-summary\" })\n```\n\n| Parameter | Description |\n| ----------- | ------------- |\n| `query` / `queries` | Single query or batch of queries |\n| `numResults` | Results per query (default: 5, max: 20) |\n| `recencyFilter` | `day`, `week`, `month`, or `year` |\n| `domainFilter` | Limit to domains (prefix with `-` to exclude) |\n| `category` | Exa only: restrict results to a category such as `news` or `research paper`; other providers ignore it. Without an API key, if Exa's filtered search is unavailable, the category is added to the query instead |\n| `provider` | Configured provider when omitted or set to `auto`; `all` searches every eligible provider except Parallel MCP, degoog, DuckDuckGo, Kimi, AnySearch, XCrawl, Valyu, xAI, Mistral, Bright Data, SerpBase, SerpApi, Serper, Serply, You.com, Baizhi, Z.ai, Keenable, Ceramic, DeepSeek, and Linkup simultaneously; otherwise `openai`, `brave`, `parallel`, `parallel-mcp`, `tinyfish`, `search1api`, `searchinfinity`, `querit`, `tavily`, `you`, `firecrawl`, `jina`, `serpdive`, `kagi`, `bocha`, `ollama`, `anysearch`, `xcrawl`, `valyu`, `xai`, `mistral`, `brightdata`, `serpbase`, `serpapi`, `serper`, `serply`, `baizhi`, `zai`, `keenable`, `ceramic`, `deepseek`, `linkup`, `searxng`, `degoog`, `duckduckgo`, `exa`, `perplexity`, `gemini`, or `kimi` (auto-selects when no provider or routing is configured; Parallel MCP, degoog, DuckDuckGo, Kimi, AnySearch, XCrawl, Valyu, xAI, Mistral, Bright Data, SerpBase, SerpApi, Serper, Serply, You.com, Baizhi, Z.ai, Keenable, Ceramic, DeepSeek, and Linkup are explicit-only) |\n| `includeContent` | Fetch full page content from sources in background |\n| `workflow` | `none` (skip curator; fresh-install default), `summary-review` (open curator and auto-generate a summary draft), or `auto-summary` (generate a summary without opening the curator) |\n\nBatch searches run up to three queries concurrently. Provider routing and fallback within each query remain sequential. Brave requests share an in-process queue and honor the rate-limit buckets returned in `X-RateLimit-*`; exhausted short windows delay the next request with a small safety margin, while long quota resets fail fast and keep the advertised cooldown active for later queued calls. HTTP 429 responses are retried once after the advertised `Retry-After` or rate-limit reset. Brave's 30-second search deadline covers queueing, cooldown waits, and both request attempts. The queue coordinates one Pi process; separate Pi processes still rely on Brave's 429 response.\n\n### fetch_content\n\nFetch URL(s) as readable markdown, exact textual HTTP bodies, direct images, or page-grounded answers. Automatically detects and handles GitHub repos, GitHub PRs and issues, YouTube videos, PDFs, local video files, images, and regular web pages.\n\n```typescript\nfetch_content({ url: \"https://example.com/article\" })\nfetch_content({ urls: [\"url1\", \"url2\", \"url3\"] })\nfetch_content({ url: \"https://github.com/owner/repo\" })\nfetch_content({ url: \"https://github.com/owner/repo/pull/123#discussion_r456\" })\nfetch_content({ url: \"https://youtube.com/watch?v=abc\", prompt: \"What libraries are shown?\" })\nfetch_content({ url: \"/path/to/recording.mp4\", prompt: \"What error appears on screen?\" })\nfetch_content({ url: \"https://youtube.com/watch?v=abc\", timestamp: \"23:41-25:00\", frames: 4 })\nfetch_content({ url: \"https://example.com/api\", mode: \"raw\" })\nfetch_content({ url: \"https://example.com/guide\", mode: \"answer\", prompt: \"What are the installation steps?\" })\nfetch_content({ url: \"https://example.com/account\", auth: \"work\", mode: \"raw\" })\nfetch_content({ url: \"https://example.com/diagram.png\" })\n```\n\n| Parameter | Description |\n| ----------- | ------------- |\n| `url` / `urls` | Single URL/path or multiple URLs |\n| `prompt` | Question for video analysis, or the page-local question required by `mode: \"answer\"` |\n| `mode` | `readable` (default), `raw` for exact textual HTTP bodies, or `answer` for a grounded answer from fetched content |\n| `answerModel` | Optional `provider/model-id` override for answer mode; defaults to the configured `fetch.answerProvider` + `fetch.answerModel` pair, or the current enabled Pi model when no pair is configured |\n| `timestamp` | Extract frame(s) — single (`\"23:41\"`), range (`\"23:41-25:00\"`), or seconds (`\"85\"`) |\n| `frames` | Number of frames to extract (max 12) |\n| `forceClone` | Clone GitHub repos that exceed the 350MB size threshold |\n\nFor a standing answer-mode model, set both `fetch.answerProvider` and `fetch.answerModel` in `web-search.json`; a per-call `answerModel` takes precedence. Configured answer defaults are opt-in and can send fetched page text to a different provider/model, which may change privacy and cost behavior.\n\nThanks to [@linuxtextadventurer](https://github.com/linuxtextadventurer) for PR #328.\n\n### get_search_content\n\nRetrieve stored content from previous searches or fetches. Search provider answers and every result remain available in full and can be paged with `offset` and `limit` or searched with `findText`. Fetched URL content is stored in full in a private `web-search-cache` directory under the Pi config directory, not in the session JSONL. This includes `fetch_content` answer mode, which stores the original page content. The cache has a one-hour lifetime and fixed limits of 128 entries and 128 MiB; when either limit is reached, the oldest entries are removed first. Concurrent Pi processes share this cache and its limits. To give a process its own cache without moving `web-search.json`, set `PI_WEB_ACCESS_CACHE_ROOT` to a directory; the cache then lives in `web-search-cache` inside it, and a session resumed without the same value cannot read content cached there. On macOS and Linux the cache directory and files are kept at permissions `0700` and `0600`, respectively. Use `findText` to locate bounded matching passages without paging through a large page, or use `offset` and `limit` to retrieve slices intentionally.\n\n```typescript\nget_search_content({ responseId: \"abc123\", urlIndex: 0 })\nget_search_content({ responseId: \"abc123\", url: \"https://...\", offset: 30000 })\nget_search_content({ responseId: \"abc123\", query: \"original query\" })\nget_search_content({ responseId: \"abc123\", queryIndex: 0, offset: 30000 })\nget_search_content({ responseId: \"abc123\", urlIndex: 0, findText: \"installation\" })\nget_search_content({ responseId: \"abc123\", urlIndex: 0, findText: [\"timeout\", \"retry\"], findMode: \"fuzzy\" })\n```\n\n`findMode` supports `exact`, `case-insensitive` (default), and `fuzzy`. Finder output is capped at 20,000 characters with match counts and nearby context. Fitting responses retain their existing format and document order. Overflow responses identify queries as `Q1`, `Q2`, and so on, list each full query once, and reserve a representative excerpt for each query whose discovered match span fits the output budget. Queries with oversized spans are listed as having no representative excerpt. `findText` cannot be combined with `offset` or `limit`. The default `limit` and maximum permitted `limit` use `maxInlineContentChars`; search-page continuation guidance shares that overall output budget and may reduce the returned stored-content characters.\n\n### source_check\n\nGather evidence for a claim and return a machine-readable artifact with exact passage citations for manual semantic review. Search results are deduplicated and capped at 20 sources; `fetchContent` fetches at most 5 pages, while stored and retrieved content remains subject to the configured `maxInlineContentChars` `offset`/`limit` bounds.\n\n```typescript\nsource_check({ claim: \"The API supports streaming responses\" })\nsource_check({\n  claim: \"The API supports streaming responses\",\n  queries: [\"API streaming responses documentation\", \"API streaming limitations\"],\n  fetchContent: true,\n  domainFilter: [\"docs.example.com\", \"-old.example.com\"]\n})\n```\n\nThe artifact preserves the `supported`, `contradicted`, `unclear`, or `missing-evidence` claim status schema, source quality hints, SHA-256 content hashes, and passage IDs with exact source offsets. It does not infer semantic support or contradiction automatically: retrieved passages produce `unclear` for manual review, while no passages produce `missing-evidence`. Search and fetch errors remain in the artifact instead of being silently discarded. Artifacts are stored with the session and retrieved through `get_search_content` using the returned `responseId`; paged artifact responses are JSON slices, so request the next `offset` when needed.\n\n### In codemode scripts\n\nScripts run by Pi's `codemode` tool (Pi 1.0 or later) get data instead of the text the model sees. `await tools.web_search(...)` resolves to `{ responseId, fetchId, queries }`, where each query has its `answer`, `error`, provider, and `results` (`title`, `url`, `snippet`). `await tools.fetch_content(...)` resolves to `{ responseId, urls }`, where each URL has its full `content`, not limited by `maxInlineContentChars`, and its `error`. Failed searches and fetches still resolve to this data, with the reason in `error`; invalid arguments reject. A script's `web_search` uses `workflow: \"none\"` unless it passes a workflow, so a configured curator does not open, and with `includeContent` it waits for the pages, readable through `fetchId`, instead of fetching them in the background. A script that passes `workflow: \"summary-review\"` gets the curator and the background fetch, as the model does.\n\n## Use from other agents (MCP)\n\nOther agents, such as Claude Code, Codex, Cursor, or Executor, can use `web_search`, `fetch_content`, `get_search_content`, and `source_check` through a local stdio MCP server. It needs Node.js 22.19 or later and no Pi install:\n\n```bash\nnpx -y pi-web-access\n```\n\nAdd it to an `mcpServers` config (Claude Code, Cursor, and similar clients; Codex takes the same command, args, and env in its `config.toml`):\n\n```json\n{\n  \"mcpServers\": {\n    \"pi-web-access\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"pi-web-access\"],\n      \"env\": { \"BRAVE_API_KEY\": \"BSA_...\" }\n    }\n  }\n}\n```\n\n- The server reads the same `web-search.json` and provider environment variables as the extension. It lists only the tools enabled there, under their default names; `toolNames` renames do not apply.\n- Pi-only features are not available: the curator and summaries (a configured `workflow` is ignored), Kimi search, OpenAI search through ChatGPT sign-in or the current Pi model, `fetch_content` answer mode and video prompts or frames, and direct image fetches. Explicit requests for them return a tool error rather than a fallback, and automatic provider selection only uses providers that work outside Pi.\n- `includeContent` waits for the page fetch before `web_search` returns.\n- The server keeps the 50 most recent results in memory for `get_search_content`; they are gone when it exits. Restart the server to pick up config changes.\n- Install with npm's default settings or `--legacy-peer-deps`. `--omit=peer` leaves out `zod`, which the MCP SDK needs.\n\n## Capabilities\n\n### GitHub repos\n\nGitHub URLs are cloned locally instead of scraped. The agent gets real file contents and a local path to explore with `read` and `bash`. Root URLs return the repo tree + README, `/tree/` paths return directory listings, `/blob/` paths return file contents.\n\nRepos over 350MB get a lightweight API-based view instead of a full clone (override with `forceClone: true`). Commit SHA URLs are handled via the API. Clones are cached for the session and wiped on session change. Private repos require the `gh` CLI. Set `githubClone.enabled` to `false` to skip this GitHub-specific clone/API handling; `fetch_content` remains available, so the URL can continue through the normal HTTP extraction path.\n\nPull request and issue URLs are rendered as one priority-ordered markdown document instead of scraped HTML. PR views include status, body, checks when `gh` supports them, review verdicts, linked references, files, commits, conversation comments, review thread comments, truncation markers, and escalation commands. Issue views include state, metadata, body, linked closing PRs when available, and comments. Comment anchors such as `#issuecomment-...` and `#discussion_r...` are forced inline. The full rendered document is stored for `get_search_content` offsets and `findText`.\n\n`fetch_content` uses `gh pr view` or `gh issue view` first with prompts disabled. It retries with a smaller field set when an older `gh` does not know a requested field. Public unauthenticated REST is used as a bounded fallback under the same `fetchContent.domainPolicy` and SSRF rules; REST cannot include checks. Set `githubPrIssue.enabled` to `false` to skip PR/issue specialization and keep normal HTTP extraction.\n\n### YouTube videos\n\nYouTube URLs are processed via Gemini for full video understanding — visual descriptions, transcripts with timestamps, and chapter markers. Pass a `prompt` to ask specific questions about the video. Results include the video thumbnail so the agent gets visual context alongside the transcript.\n\nFallback: Gemini Web when browser cookies are enabled → Gemini API → Perplexity (text summary only). Handles all URL formats: `/watch?v=`, `youtu.be/`, `/shorts/`, `/live/`, `/embed/`, `/v/`.\n\n### Local video files\n\nPass a file path (`/`, `./`, `../`, or `file://` prefix) to analyze video content via Gemini. Supports MP4, MOV, WebM, AVI, and other common formats up to 50MB for Gemini analysis. Pass a `prompt` to ask about specific content. If ffmpeg is installed, a thumbnail frame is included alongside the analysis. Timestamp/frame extraction uses ffmpeg directly and can still operate on larger local files.\n\nFallback: Gemini API (Files API upload) → Gemini Web when browser cookies are enabled.\n\n### Video frame extraction\n\nUse `timestamp` and/or `frames` on any YouTube URL or local video file to extract visual frames as images.\n\n```typescript\nfetch_content({ url: \"...\", timestamp: \"23:41\" })                       // single frame\nfetch_content({ url: \"...\", timestamp: \"23:41-25:00\" })                 // range, 6 frames\nfetch_content({ url: \"...\", timestamp: \"23:41-25:00\", frames: 3 })      // range, custom count\nfetch_content({ url: \"...\", timestamp: \"23:41\", frames: 5 })            // 5 frames at 5s intervals\nfetch_content({ url: \"...\", frames: 6 })                                // sample whole video\n```\n\nRequires `ffmpeg` (and `yt-dlp` for YouTube). Timestamps accept `H:MM:SS`, `MM:SS`, or bare seconds.\n\n### PDFs\n\nWith `mode: \"answer\"`, the answer model receives the extracted PDF Markdown rather than the saved-file notice. The Markdown file is still saved, and the original extracted content remains available through `get_search_content`; ordinary readable-mode PDF fetches continue to return the file path.\n\nPDF URLs are converted to Markdown and saved under the temporary `pi-web-pdf` directory by default so the agent can `read` specific sections without loading the full document into context. Four engines are available, selected with `pdf.provider` (`\"auto\"` is the default):\n\n| Provider | Engine | Trade-offs |\n| --- | --- | --- |\n| `endpoint` | Self-hosted parser endpoint (POST the PDF, get Markdown) | Layout-aware conversion (marker and similar pipelines) on hardware you run; no key, no per-page cost; requires `pdf.endpointUrl` |\n| `datalab` | Datalab hosted conversion (Marker) | Deterministic layout-aware output — tables, multi-column reading order, headings, math; `accurate` mode handles scanned pages; may return a `parse_quality_score`; requires a Datalab key, billed per page with a free monthly credit |\n| `gemini` | Gemini API (vision LLM) | Best on scanned/complex pages; LLM transcription can occasionally drift or truncate; requires a Gemini key |\n| `unpdf` | Local pdf.js text extraction | Free, offline, no key; flattened text only — no layout, no tables, no OCR |\n\n`auto` order: self-hosted endpoint (when `pdf.endpointUrl` is configured) → Datalab (when a key is configured) → Gemini (when a key is configured) → local `unpdf`. The endpoint runs first because it is local and deterministic. If its request fails — parser down, engine error, timeout — the chain continues to Datalab, then Gemini, then `unpdf`, automatically. Setting `pdf.provider` to `endpoint`, `gemini`, `datalab`, or `unpdf` pins that engine and skips the other remote tiers (an explicit engine still falls back to `unpdf` when it errors, except for credential/config errors and caller cancellation). No Datalab key means the `datalab` tier is simply skipped — behavior is unchanged for existing users.\n\n**Self-hosted parser endpoint.** `pdf.endpointUrl` receives a `multipart/form-data` POST with a `file` field (plus `engine` when `pdf.endpointEngine` is set, and `max_pages`) and answers `{ \"markdown\": \"…\" }`, or `{ \"job_id\": \"…\" }`, which is polled at `jobs/{id}` next to the configured URL until `done`, `error`, or `pdf.endpointTimeoutMs` (default 120s, capped at 300s). The URL passes the same SSRF guard as every other fetch, so a LAN host needs its range in `ssrf.allowRanges` (loopback is allowed); `PDF_ENDPOINT_URL` overrides `pdf.endpointUrl`. For a LAN parser: `{ \"ssrf\": { \"allowRanges\": [\"192.168.50.0/24\"] }, \"pdf\": { \"endpointUrl\": \"http://192.168.50.48:8070/parse\", \"endpointEngine\": \"marker\" } }`.\n\n**Why Datalab.** The hosted converter uses a dedicated extraction engine (Marker) intended to retain document structure such as tables, multi-column reading order, headings, links, and math, where local `unpdf` extraction only yields flattened text. It is deterministic rather than LLM-based. Completed responses may include a `parse_quality_score` (0–5) for optional quality gating. Pricing is per processed page: **fast / balanced** $4 / 1,000 pages; **accurate** $10 / 1,000 pages. The free tier gives a **$10 monthly credit** (personal email; $20 with a work email) at **25 requests/minute** — roughly **2,500 pages/month free in `fast` mode** or 1,000 in `accurate` mode. Processing defaults to the **US region**. EU data residency uses **1.25× usage**; opt in with `DATALAB_PROCESSING_LOCATION=eu`.\n\nConfigure Datalab via the web-search config:\n\n```jsonc\n{\n  \"datalabApiKey\": \"$DATALAB_API_KEY\",\n  \"pdf\": {\n    \"maxSizeMB\": 20,\n    \"maxPages\": 100,\n    \"provider\": \"auto\",      // \"auto\" | \"endpoint\" | \"gemini\" | \"datalab\" | \"unpdf\"\n    \"datalabMode\": \"balanced\", // \"fast\" | \"balanced\" | \"accurate\"\n    \"datalabTimeoutMs\": 120000\n  }\n}\n```\n\nEnv vars: `DATALAB_API_KEY` (or `datalabApiKey` in config), `DATALAB_PROCESSING_LOCATION` (`us` default; `eu` enables EU data residency at 1.25× usage), `DATALAB_MODE` (`fast` / `balanced` / `accurate`), and `DATALAB_API_BASE` (custom gateway). `pdf.datalabMode` overrides `DATALAB_MODE`. The default `datalabTimeoutMs` is 120s and is capped at 300s.\n\n> Privacy note: like the Gemini tier, the PDF bytes are sent to the Datalab cloud for conversion. Files are uploaded to the selected region's storage and deleted best-effort after conversion.\n\n### Blocked pages\n\nRaw and direct-image HTTP requests use the same SSRF validation, hostname domain policy, redirect checks, timeout, and 5MB streamed response bound as normal extraction. Raw mode returns textual bodies even for non-2xx responses and exposes the HTTP status in tool details; it does not run readability or hosted extraction fallbacks.\n\n`fetch_content` can opt into local browser-cookie auth with `auth: \"profile\"`, or `auth: true` when exactly one `authFetch` profile exists. Configure profiles in `~/.pi/agent/web-search.json`, for example `{ \"authFetch\": { \"social\": [\"x.com\", \"instagram.com\"], \"work\": { \"hosts\": [\"docs.company.com\"], \"chromeProfile\": \"Profile 2\", \"cache\": \"off\" } } }`. Auth fetch uses only the local direct HTTP path, requires HTTPS, allows only configured hosts and their subdomains, refuses cross-origin redirects, and never sends cookies or authenticated content to hosted extraction providers. Browser cookie extraction remains opt-in through `allowBrowserCookies: true` or `PI_ALLOW_BROWSER_COOKIES=1`.\n\n#### Proxy (`proxy`)\n\n`web_search`, `source_check`, and `fetch_content` all accept an optional `proxy` string (e.g. `\"http://mcr:4444\"`). When provided, every outbound HTTP(S) request is routed through `curl` instead of Node's built-in fetch — this works around Node fetch ignoring `HTTP(S)_PROXY` env vars and undici `ProxyAgent` failing the TLS handshake against several common HTTP proxies (ERR_SSL_WRONG_VERSION_NUMBER).\n\nAn empty string (`\"\"`) forces a direct connection even when a config-level proxy is set. Omitting the parameter falls back to the global `proxy` in `~/.pi/agent/web-search.json`.\n\nThe config-level `proxy` applies only to requests made by this extension's tools. Other traffic in the host process — such as the coding agent's own model API calls — is never routed through it, so a configured proxy that is temporarily down cannot break unrelated requests.\n\n```jsonc\n// ~/.pi/agent/web-search.json — global proxy for all tools\n{\n  \"proxy\": \"http://mcr:4444\"\n}\n```\n\nLocalhost, `127.0.0.1`, `[::1]`, and any host matching the `NO_PROXY` environment variable are never proxied.\n\nWhen Readability fails or returns only a cookie notice, the extension can retry configured Firecrawl extraction, configured Crawl4AI extraction, Jina Reader (handles JS rendering server-side, no API key needed), TinyFish, Search1API, Querit, Kagi Extract, Ollama Web Fetch, Parallel, Bright Data Web Unlocker, DeepSeek Fetch, Gemini URL Context API, and Gemini Web extraction when browser cookies are enabled. Configure `fetchRouting.providers` to change the order or set of `fetch_content` providers. Supported values are `http`, `firecrawl`, `crawl4ai`, `jina`, `tinyfish`, `search1api`, `querit`, `kagi`, `ollama`, `parallel`, `parallel-mcp`, `brightdata`, `gemini`, and `deepseek`; when absent, the default order is unchanged. `parallel-mcp` and `deepseek` are not in the default fetch order and must be listed explicitly. For remote HTTP(S) targets, third-party hosted providers are disabled unless `fetchRouting.allowRemoteHostedProviders` is `true`, because hosted services perform their own fetch and can see a different redirect chain than the local safety gate. Firecrawl and Crawl4AI stay available as configured self-hosted extraction services. Firecrawl requests are cache-only by default and require an explicit fresh-scrape opt-in before the Firecrawl server can fetch target URLs. Bright Data Web Unlocker runs last of the remote scraping providers, ahead of only the Gemini fallbacks, because it is billed per request against a paid account; it is skipped unless both a key and an `unblocker` zone are configured. It applies no minimum-length check, so any non-empty body it returns — including a short consent or paywall stub — is the final answer for that URL and the Gemini fallbacks are not tried. Handles SPAs, JS-heavy pages, and anti-bot protections transparently. Also parses Next.js RSC flight data when present. HTML extraction also surfaces registered discovery relations (`service-desc`, `service-doc`, `service-meta`, `api-catalog`, `describedby`) from the HTTP `Link` header and matching `link`/`a[rel]` markup. Readable or rendered content remains primary; on an empty shell, the normal extraction fallbacks run before declared links are returned on their own.\n\n## How It Works\n\n```\nweb_search(query)\n  → configured searchRouting (optionally active-model-aware OpenAI Hosted Search) → automatic provider chain\n\nfetch_content(url)\n  → Video file?  Gemini API (Files API) → Gemini Web (if browser cookies enabled)\n  → GitHub URL?  Clone repo, return file contents + local path\n  → YouTube URL? Gemini Web (if browser cookies enabled) → Gemini API → Perplexity\n  → HTTP fetch (asks for markdown first; raw mode does not) → PDF? Self-hosted endpoint → Datalab → Gemini API → local text extraction, save to temp pi-web-pdf\n               → HTML? Readability (+ declared Link/rel discovery) → RSC parser → Firecrawl → Crawl4AI (each if configured) → third-party hosted fallbacks only when fetchRouting.allowRemoteHostedProviders is enabled\n               → Text/JSON/Markdown? Return directly\n```\n\n## Commands\n\n### /websearch\n\nOpen the search curator directly. Runs searches and lets you review, add, select results, and approve a summary before it is sent back to the agent — no LLM round-trip needed.\n\n```\n/websearch                                               # empty page, type your own searches\n/websearch react hooks, next.js caching                  # pre-fill with comma-separated queries\n```\n\nResults get injected into the conversation when you approve the summary or click \"Send selected results without summary\". On timeout, the curator auto-submits and falls back to a deterministic summary if no approved draft is present.\n\nIn summary review, **Approve + auto-summary remaining searches for this prompt** approves the current draft and makes later searches that inherit `summary-review` use `auto-summary` until the run settles. Explicit workflows still win; the choice stays in memory and does not affect open curator windows.\n\n### /curator\n\nToggle or configure the curator workflow at runtime.\n\n```\n/curator                    # toggle on/off\n/curator on                 # enable curator (summary-review)\n/curator off                # disable curator (raw results only)\n/curator summary-review     # explicit workflow\n```\n\nPersists to `~/.pi/agent/web-search.json` and takes effect on the next `web_search` call. When disabled, `web_search` returns raw results without opening the curator window.\n\n### /search\n\nBrowse stored search results interactively. Lists all results from the current session with their response IDs for easy retrieval.\n\n### /google-account\n\nShow the active Google account currently authenticated for Gemini Web. If cookie extraction fails, it reports sanitized attempted browser/profile entries and whether the failure was missing required cookies, password-store access, decryption, SQLite, or profile lookup.\n\n## Activity Monitor\n\nToggle with **Ctrl+Shift+W** to see live request/response activity:\n\n```\n─── Web Search Activity ────────────────────────────────────\n  API  \"typescript best practices\"     200    2.1s ✓\n  GET  docs.example.com/article        200    0.8s ✓\n  GET  blog.example.com/post           404    0.3s ✗\n────────────────────────────────────────────────────────────\n```\n\n## Configuration\n\nConfig defaults to `~/.pi/agent/web-search.json` when neither `PI_CODING_AGENT_DIR` nor `XDG_CONFIG_HOME` is set. `PI_CODING_AGENT_DIR` takes precedence when set; with `XDG_CONFIG_HOME`, an existing `XDG_CONFIG_HOME/pi/web-search.json` is preferred, an existing legacy `~/.pi/web-search.json` remains usable for compatibility, and the XDG path is used as the new-config target when neither file exists. When neither environment variable is set, an existing `~/.pi/agent/web-search.json` is preferred, an existing legacy `~/.pi/web-search.json` remains usable for compatibility, and the agent directory is used as the new-config target when neither file exists. Every field is optional.\n\n```json\n{\n  \"openaiApiKey\": \"sk-...\",\n  \"openaiResponsesUrl\": \"https://gateway.example.com/v1/responses\",\n  \"braveApiKey\": \"BSA_...\",\n  \"braveBaseUrl\": \"https://gateway.example.com/brave/res/v1\",\n  \"exaApiKey\": \"exa-...\",\n  \"exaBaseUrl\": \"https://gateway.example.com/exa\",\n  \"parallelApiKey\": \"...\",\n  \"parallelBaseUrl\": \"https://gateway.example.com/parallel\",\n  \"tinyfishApiKey\": \"sk-tinyfish-...\",\n  \"search1apiApiKey\": \"...\",\n  \"tavilyApiKey\": \"tvly-...\",\n  \"tavilyBaseUrl\": \"https://gateway.example.com/tavily\",\n  \"youApiKey\": \"your-ydc-api-key\",\n  \"jinaApiKey\": \"$JINA_API_KEY\",\n  \"serpdiveApiKey\": \"sd_live_...\",\n  \"serpdiveModel\": \"krill\",\n  \"kagiApiKey\": \"$KAGI_API_KEY\",\n  \"ollamaApiKey\": \"$OLLAMA_API_KEY\",\n  \"valyuApiKey\": \"$VALYU_API_KEY\",\n  \"keenableApiKey\": \"$KEENABLE_API_KEY\",\n  \"ceramicApiKey\": \"$CERAMIC_API_KEY\",\n  \"linkupApiKey\": \"$LINKUP_API_KEY\",\n  \"linkupDepth\": \"fast\",\n  \"deepseekApiKey\": \"$DEEPSEEK_API_KEY\",\n  \"serpbaseApiKey\": \"$SERPBASE_API_KEY\",\n  \"serpapiBaseUrl\": \"https://gateway.example.com/serpapi\",\n  \"serpapiApiKey\": \"$SERPAPI_KEY\",\n  \"serperBaseUrl\": \"https://gateway.example.com/serper\",\n  \"serperApiKey\": \"$SERPER_API_KEY\",\n  \"serplyApiKey\": \"$SERPLY_API_KEY\",\n  \"baizhiApiKey\": \"$BAIZHI_API_KEY\",\n  \"zaiApiKey\": \"$ZAI_API_KEY\",\n  \"brightdataApiKey\": \"$BRIGHTDATA_API_KEY\",\n  \"brightdataSerpZone\": \"pi_serp\",\n  \"xaiApiKey\": \"xai-...\",\n  \"xaiSearchTools\": [\"web_search\"],\n  \"mistralApiKey\": \"$MISTRAL_API_KEY\",\n  \"mistralSearchModel\": \"mistral-small-latest\",\n  \"mistralSearchTool\": \"web_search\",\n  \"searxngBaseUrl\": \"https://search.example.com\",\n  \"searxngHeaders\": {\n    \"CF-Access-Client-Id\": \"xxxxxxxx.access\",\n    \"CF-Access-Client-Secret\": \"xxxxxxxx\"\n  },\n  \"degoogBaseUrl\": \"https://degoog.example.com\",\n  \"degoogApiKey\": \"$DEGOOG_API_KEY\",\n  \"degoogEngines\": [\"degoog-org-official-extensions-brave-engine\"],\n  \"firecrawlBaseUrl\": \"https://crawl.example.com\",\n  \"firecrawlApiKey\": \"fc-...\",\n  \"firecrawlApiVersion\": \"v2\",\n  \"firecrawlFreshScrape\": false,\n  \"firecrawlPdfMaxPages\": 50,\n  \"crawl4aiBaseUrl\": \"https://crawl4ai.example.com\",\n  \"crawl4aiApiToken\": \"$CRAWL4AI_API_TOKEN\",\n  \"brightdataUnlockerZone\": \"pi_unlocker\",\n  \"perplexityApiKey\": \"pplx-...\",\n  \"geminiApiKey\": \"AIza...\",\n  \"geminiBaseUrl\": \"https://my-gateway.example.com/gemini\",\n  \"cloudflareApiKey\": \"...\",\n  \"geminiAuth\": \"adc\",\n  \"geminiProject\": \"my-gcp-project\",\n  \"geminiLocation\": \"us-central1\",\n  \"provider\": \"openai\",\n  \"searchRouting\": {\n    \"providers\": [\"openai\", \"brave\", \"exa\"],\n    \"useCurrentModel\": false,\n    \"fallbackOn\": [\"transient\", \"quota\", \"network\", \"invalid-response\"]\n  },\n  \"fetchRouting\": {\n    \"providers\": [\"http\", \"firecrawl\", \"crawl4ai\", \"jina\", \"tinyfish\", \"search1api\", \"querit\", \"kagi\", \"ollama\", \"parallel\", \"brightdata\", \"gemini\"],\n    \"allowRemoteHostedProviders\": false\n  },\n  \"fetch\": {\n    \"timeout\": 30,\n    \"defaultMode\": \"readable\",\n    \"allowedModes\": [\"readable\", \"raw\", \"answer\"],\n    \"answerProvider\": \"openai\",\n    \"answerModel\": \"gpt-5.6\"\n  },\n  \"webSearch\": {\n    \"enabled\": true,\n    \"allowedProviders\": [\"openai\", \"brave\", \"exa\"]\n  },\n  \"tools\": {\n    \"webSearch\": { \"enabled\": true },\n    \"sourceCheck\": { \"enabled\": true },\n    \"fetchContent\": { \"enabled\": true },\n    \"getSearchContent\": { \"enabled\": true }\n  },\n  \"toolActivation\": \"auto\",\n  \"commands\": {\n    \"websearch\": { \"enabled\": true },\n    \"curator\": { \"enabled\": true },\n    \"search\": { \"enabled\": true },\n    \"google-account\": { \"enabled\": true }\n  },\n  \"image\": {\n    \"enabled\": true\n  },\n  \"browserCookies\": {\n    \"browser\": \"helium\",\n    \"profile\": \"Profile 2\"\n  },\n  \"allowBrowserCookies\": false,\n  \"searchModel\": \"gemini-3.6-flash\",\n  \"summaryModel\": \"anthropic/claude-haiku-4-5\",\n  \"summaryGenerationDeadlineMs\": 30000,\n  \"summaryInstructions\": \"- Preserve concrete figures verbatim: prices, limits, versions, dates.\\n- Name the product version each claim applies to.\",\n  \"maxInlineContentChars\": 30000,\n  \"workflow\": \"summary-review\",\n  \"curatorTimeoutSeconds\": 20,\n  \"curatorRemote\": {\n    \"host\": \"my-box.tailnet.ts.net\",\n    \"bind\": \"100.101.102.103\"\n  },\n  \"autoOpenBrowser\": true,\n  \"githubClone\": {\n    \"enabled\": true,\n    \"maxRepoSizeMB\": 350,\n    \"cloneTimeoutSeconds\": 30,\n    \"clonePath\": \"/tmp/pi-github-repos\"\n  },\n  \"githubPrIssue\": {\n    \"enabled\": true\n  },\n  \"youtube\": {\n    \"enabled\": true,\n    \"preferredModel\": \"gemini-3.6-flash\"\n  },\n  \"video\": {\n    \"enabled\": true,\n    \"preferredModel\": \"gemini-3.6-flash\",\n    \"maxSizeMB\": 50\n  },\n  \"pdf\": {\n    \"enabled\": true,\n    \"maxSizeMB\": 20,\n    \"provider\": \"auto\"\n  },\n  \"fetchContent\": {\n    \"domainPolicy\": {\n      \"allow\": [\"example.com\"],\n      \"deny\": [\"blocked.example.com\"]\n    },\n    \"redirects\": \"same-origin\",\n    \"userAgent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36\"\n  },\n  \"shortcuts\": {\n    \"curate\": \"ctrl+shift+s\",\n    \"activity\": \"ctrl+shift+w\"\n  },\n  \"ssrf\": {\n    \"allowRanges\": [\"198.18.0.0/15\"],\n    \"trustEnvProxy\": false\n  }\n}\n```\n\n`maxInlineContentChars` accepts integers from 1,000 through 200,000. Missing, invalid, or smaller values use the 30,000-character default so truncation and retrieval guidance always fit.\n\n`webSearch.allowedProviders` is an optional, non-empty search-provider allowlist with no duplicate entries. When omitted, every current search provider remains permitted. When present, explicit scalar and array requests for providers outside the list fail before any provider request, while `auto`, `all`, configured routing, `source_check`, and Curator use only listed providers. The allowlist does not make explicit-only or paid providers eligible for automatic fallback or `all`; they must still be named explicitly or included in `searchRouting.providers`. A configured `provider`/`searchProvider` or `searchRouting.providers` entry outside the allowlist is rejected as invalid configuration. This setting affects search only: it does not restrict `fetchRouting`, fetch answer models, or summary models.\n\n`summaryModel` accepts an optional thinking-level suffix, such as `anthropic/claude-haiku-4-5:low`. Supported suffixes are `off`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`.\n\n`summaryInstructions` appends custom text to the Requirements section of the summary prompt used by the curator UI and `auto-summary` mode (e.g. `\"- Preserve concrete figures verbatim: prices, limits, versions, dates.\\n- Name the product version each claim applies to.\"`). The text is passed verbatim to the summary model, so use one `- ` bullet per requirement. It is additive: the built-in guardrails (no invented sources, explicit weak/conflicting-evidence notes, the Sources section) always stay in place, and curator regeneration feedback is still appended afterwards. Missing, non-string, or blank values leave the default prompt unchanged.\n\nAll provider API-key fields (`openaiApiKey`, `braveApiKey`, `parallelApiKey`, `tinyfishApiKey`, `search1apiApiKey`, `searchinfinityApiKey`, `queritApiKey`, `tavilyApiKey`, `youApiKey`, `jinaApiKey`, `serpdiveApiKey`, `kagiApiKey`, `bochaApiKey`, `ollamaApiKey`, `valyuApiKey`, `serpbaseApiKey`, `serpapiApiKey`, `serperApiKey`, `serplyApiKey`, `baizhiApiKey`, `zaiApiKey`, `keenableApiKey`, `ceramicApiKey`, `linkupApiKey`, `deepseekApiKey`, `degoogApiKey`, `anysearchApiKey`, `xcrawlApiKey`, `xaiApiKey`, `mistralApiKey`, `brightdataApiKey`, `firecrawlApiKey`, `crawl4aiApiToken`, `exaApiKey`, `perplexityApiKey`, `geminiApiKey`, `datalabApiKey`, and `cloudflareApiKey`) accept explicit credential sources. Use `$NAME` or `${NAME}` to read one named environment variable, or prefix a trusted local shell command with `!` to resolve one value at provider request time. Escape `$$` as a literal leading `$` and `$!` as a literal leading `!`:\n\n```json\n{\n  \"openaiApiKey\": \"!/absolute/path/to/secret-manager read openai\",\n  \"braveApiKey\": \"${SCOPED_BRAVE_API_KEY}\",\n  \"exaApiKey\": \"$$literal-key\",\n  \"geminiApiKey\": \"$!literal-command\"\n}\n```\n\nThis syntax applies to provider credentials only; other configuration fields are not interpolated. `firecrawlApiKey`, `crawl4aiApiToken`, `kagiApiKey`, `ollamaApiKey`, `valyuApiKey`, `serpbaseApiKey`, `serpapiApiKey`, `serperApiKey`, `serplyApiKey`, `baizhiApiKey`, `zaiApiKey`, `keenableApiKey`, `ceramicApiKey`, `linkupApiKey`, `deepseekApiKey`, `degoogApiKey`, `mistralApiKey`, and `brightdataApiKey` use the same credential-source rules, while API base URLs, `firecrawlApiVersion`, `firecrawlFreshScrape`, `firecrawlPdfMaxPages`, `crawl4aiBaseUrl`, `degoogBaseUrl`, `degoogEngines`, `brightdataSerpZone`, `brightdataUnlockerZone`, and `zaiEndpoint` are literal config values.\n\nA command source is not run while the extension loads or registers tools. Each selected provider request runs it again with a five-second timeout, a 16 KiB output limit, a minimized environment, and a one-line non-empty stdout requirement. Command text and stderr are omitted from errors. On Windows the command runs in Git Bash (or `bash.exe` on `PATH`), like Pi's own `!command` config values, so POSIX syntax such as `$HOME` works; it falls back to `cmd.exe` when no bash is found. These commands are trusted local configuration, not a same-user process isolation boundary; use absolute executable paths and protect the config file. `OP_SESSION_*` and `OP_SERVICE_ACCOUNT_TOKEN`, when present in Pi's environment, are forwarded to trusted resolver commands so 1Password CLI sessions and service accounts can be reused without storing their credentials in config. For example, `\"braveApiKey\": \"!/absolute/path/to/op read 'op://Automation/Brave/credential'\"` resolves that item after you replace the executable placeholder with your trusted installation's absolute path, but the `op://` argument is not an authorization boundary: every configured resolver command that receives the token can exercise all vault and item permissions granted to its service account. Prefer a narrowly scoped service account. An explicit source overrides legacy provider environment variables and fails that provider locally rather than falling back with a stale credential. Direct Google Gemini API requests send the resolved key only in the `x-goog-api-key` header, never in the URL.\n\n`mistralSearchModel` defaults to `mistral-small-latest` and must be a non-empty string. `mistralSearchTool` defaults to `web_search` and accepts only `web_search` or the opt-in `web_search_premium` tool.\n\nThese providers accept an API base URL for compatible gateways. Environment variables take precedence over config; path prefixes are preserved and trailing slashes are removed. Ollama and DeepSeek read `PI_OLLAMA_BASE_URL` and `PI_DEEPSEEK_BASE_URL`, because other tools commonly set the bare `OLLAMA_BASE_URL` (a local Ollama server) and `DEEPSEEK_BASE_URL` (an OpenAI-compatible `/v1` root); the bare names are ignored.\n\n| Config | Environment variable | Appended paths |\n|---|---|---|\n| `braveBaseUrl` | `BRAVE_BASE_URL` | `/web/search` |\n| `exaBaseUrl` | `EXA_BASE_URL` | `/search` |\n| `tavilyBaseUrl` | `TAVILY_BASE_URL` | `/search` |\n| `anysearchBaseUrl` | `ANYSEARCH_BASE_URL` | `/v1/search` |\n| `bochaBaseUrl` | `BOCHA_BASE_URL` | `/v1/web-search` |\n| `brightdataBaseUrl` | `BRIGHTDATA_BASE_URL` | `/request` (SERP and Web Unlocker) |\n| `ceramicBaseUrl` | `CERAMIC_BASE_URL` | `/search` |\n| `deepseekBaseUrl` | `PI_DEEPSEEK_BASE_URL` | `/v1/tools/search`, `/v1/tools/fetch` |\n| `jinaSearchBaseUrl` | `JINA_SEARCH_BASE_URL` | `/{encoded query}` |\n| `kagiBaseUrl` | `KAGI_BASE_URL` | `/api/v1/search`, `/api/v1/extract` |\n| `keenableBaseUrl` | `KEENABLE_BASE_URL` | `/v1/search`, `/v1/search/public` |\n| `linkupBaseUrl` | `LINKUP_BASE_URL` | `/v1/search` |\n| `mistralSearchBaseUrl` | `MISTRAL_SEARCH_BASE_URL` | `/v1/conversations` |\n| `ollamaBaseUrl` | `PI_OLLAMA_BASE_URL` | `/api/web_search`, `/api/web_fetch` |\n| `parallelBaseUrl` | `PARALLEL_BASE_URL` | `/v1/search`, `/v1/extract` |\n| `perplexityBaseUrl` | `PERPLEXITY_BASE_URL` | `/search`, `/chat/completions` |\n| `queritBaseUrl` | `QUERIT_BASE_URL` | `/v1/search`, `/v1/contents` |\n| `search1apiBaseUrl` | `SEARCH1API_BASE_URL` | `/search`, `/crawl` |\n| `searchinfinityBaseUrl` | `SEARCHINFINITY_BASE_URL` | `/search_api/web_search` |\n| `serpapiBaseUrl` | `SERPAPI_BASE_URL` | `/search.json` |\n| `serpbaseBaseUrl` | `SERPBASE_BASE_URL` | `/google/search` |\n| `serpdiveBaseUrl` | `SERPDIVE_BASE_URL` | `/v1/search` |\n| `serperBaseUrl` | `SERPER_BASE_URL` | `/search` |\n| `serplyBaseUrl` | `SERPLY_BASE_URL` | `/v1/search` |\n| `valyuBaseUrl` | `VALYU_BASE_URL` | `/v1/search` |\n| `xcrawlBaseUrl` | `XCRAWL_BASE_URL` | `/v1/serp` |\n| `youBaseUrl` | `YOU_BASE_URL` | `/v1/search` |\n\nDefaults remain the providers' official API roots. Overrides require HTTPS, except HTTP is allowed on loopback hosts (`localhost`, `127.0.0.0/8`, and `::1`). URLs with credentials, query parameters, or fragments are rejected before a request is sent; invalid overrides never fall back to an official endpoint. Cross-origin redirects remove credential headers and the `api_key` query parameter used by SerpApi and SerpBase. `exaBaseUrl` applies only to keyed direct API calls; zero-config Exa MCP search continues to use Exa's hosted MCP endpoint. `parallelBaseUrl` does not change the separate Parallel MCP provider.\n\nThese settings change API destinations, not provider protocols, credentials, pricing options, or activation. Search and extraction use the same root where listed. Existing SSRF and target-domain checks still apply to extraction; in particular, Kagi, Ollama, and Bright Data Web Unlocker gateway addresses remain subject to their API transport's SSRF checks. For a loopback gateway on those extraction transports, use a literal address (`http://127.0.0.1:8080` or `http://[::1]:8080`) and add its matching range (`127.0.0.1/32` or `::1/128`) to `ssrf.allowRanges`. These transports reject `localhost` even when allowed ranges are configured.\n\nExisting Responses endpoint settings (`openaiResponsesUrl`, `xaiResponsesUrl`), Gemini API routing, and self-hosted providers keep their current semantics. No new overrides are added for TinyFish's two-origin API, Kimi Code sign-in, hosted MCP transports, browser-backed search, or the keyless Jina Reader. `jinaSearchBaseUrl` affects only authenticated Jina search, not Reader requests.\n\n`authFetch` configures named local browser-cookie auth profiles for explicit `fetch_content` calls. A profile can be a host array (`\"work\": [\"docs.company.com\"]`) or an object with `hosts`, optional `chromeProfile`, `redirects: \"same-origin\"`, and `cache: \"session\" | \"off\"`.\n\n`browserCookies` selects the Chromium browser preset and profile used for Gemini Web cookies, for example `{ \"browserCookies\": { \"browser\": \"helium\", \"profile\": \"Profile 1\" } }`. When `browser` is set, cookie discovery checks only that browser, which avoids unrelated password-store prompts. Supported preset names are `helium`, `chrome`, `brave`, `arc`, `chromium`, and `edge`, subject to platform availability. Omit `browser` to keep automatic browser discovery. `profile` must be a profile directory name. The old top-level `chromeProfile` field is rejected; move it to `browserCookies.profile`. Arbitrary profile paths and `profilePath` are intentionally not supported.\n\n`fetchContent.domainPolicy` is an optional hostname allow/deny policy for `fetch_content` target URLs. It is off when omitted. Each bare hostname matches itself and its subdomains; `deny` wins when a hostname matches both lists. The policy is checked before HTTP(S) target handling and before each redirect followed by this extension's own fetch path. Local file paths and non-HTTP sources are not subject to this policy. It is an additional restriction: the existing SSRF guard still blocks private and internal destinations. Remote extraction services can still perform their own DNS, redirects, and egress after this extension preflights the submitted target URL, so third-party hosted HTTP(S) fallbacks stay disabled unless `fetchRouting.allowRemoteHostedProviders` is enabled for separately isolated provider deployments.\n\n`fetchContent.redirects: \"same-origin\"` turns on a same-origin redirect policy for every page fetch, including `web_search` `includeContent` and `source_check`. The `fetch_content` parameter `redirects: \"same-origin\"` turns it on for one call; omitting it never turns a configured policy off. Under the policy every redirect target, including in `auth` profile and `mode: \"raw\"` fetches, must match the requested URL's scheme, hostname and effective port. The check runs before the target is resolved or requested, so in an A → B → A chain B is never contacted. A refused redirect returns an error with no page content, and no other extraction provider or retry runs after it. Only this extension's own HTTP fetch is used: Jina Reader, Firecrawl, Crawl4AI, the hosted providers and Gemini are disabled, and GitHub issue/PR, GitHub repository and YouTube URLs are refused by name, even when those integrations are turned off. In `mode: \"raw\"` and `auth` fetches those URLs skip the GitHub and YouTube integrations and go through the same checked HTTP fetch instead. A trusted Pi extension can enforce the policy per call by setting `event.input.redirects = \"same-origin\"` in a `tool_call` handler for `fetch_content`. Local files and videos are not subject to the policy.\n\n`fetchContent.userAgent` sets the `User-Agent` header of this extension's own direct HTTP page fetch, which `fetch_content`, `web_search` `includeContent`, and `source_check` use, including `auth` profile and `mode: \"raw\"` fetches. It defaults to `OpenAI File Downloader, XaiImageApiFetch/1.0`; set it when a site rejects that default, for example to a regular browser User-Agent. Extraction providers such as Jina Reader or Firecrawl are not affected. The value must be a non-empty string of printable ASCII characters; any other value fails the page fetch with a config error.\n\n`fetch.timeout` is an optional positive finite number of seconds for direct HTTP fetches and the Jina Reader fallback. When omitted, both use a 30-second budget. Fractional values are supported and rounded up to at least 1 millisecond; values that cannot be converted to a finite safe integer delay from 1 through Node's 2,147,483,647 ms timer maximum are rejected. An invalid declared value fails closed with an error naming `web-search.json`. An internal/per-call `timeoutMs` override takes precedence over this setting. Other remote extraction fallbacks keep their own documented budgets.\n\n`fetch.defaultMode` sets the mode used when `fetch_content` omits `mode`, and `fetch.allowedModes` controls which modes the tool exposes and accepts. Valid modes are `readable`, `raw`, and `answer`. By default, the default mode is `readable` and all three modes are allowed. The default must be included in the non-empty, duplicate-free allowed list. An explicitly requested disabled mode fails before fetching or invoking a model and is never replaced with another mode. Raw mode remains direct HTTP-only and never runs readability, specialized source handling, or hosted extraction fallbacks.\n\n`fetch.answerProvider` and `fetch.answerModel` are an optional pair that selects the model used by `fetch_content` answer mode when no per-call `answerModel` is supplied. Both values must be non-empty strings and must identify an enabled text-capable model available in Pi's model registry; invalid or partial configuration fails closed. This is opt-in: answering with the configured provider/model can send fetched page text outside the current session and may incur that provider's costs. A per-call `answerModel` override is resolved first and remains usable even when these configured defaults are malformed.\n\nSet `searxngBaseUrl` or `SEARXNG_BASE_URL` to use a self-hosted SearXNG JSON API. A configured endpoint is preferred first in `auto` mode for local/private search. A configured SearXNG base URL may use `localhost`, `127.0.0.0/8`, or `::1` without adding those ranges to global `ssrf.allowRanges`; a base URL on another private or synthetic range needs a narrow `ssrf.allowRanges` entry. The base URL and its redirects are otherwise validated like other remote requests, and configured headers are stripped from cross-origin redirects. Optional `searxngHeaders` merges extra HTTP headers into each SearXNG request (string values only; invalid header names are ignored), which is useful for reverse-proxy or Zero Trust auth such as Cloudflare Access service tokens (`CF-Access-Client-Id` / `CF-Access-Client-Secret`). Configured headers override the default `Accept: application/json` when the same name is supplied. Thanks to Marcos A. Núñez (@marnunez) for PR #107 and Avinash Kanaujiya (@avinashkanaujiya) for issue #105.\n\n**degoog.** Set `degoogBaseUrl` or `DEGOOG_URL` to use a self-hosted [degoog](https://degoog.org) metasearch instance, or omit both to use the public `https://degoog.org` instance. degoog is keyless and explicit-only: select it with `provider: \"degoog\"` or place it in `searchRouting`; it is never chosen by `auto` and never participates in `provider: \"all\"`, so queries do not leave for a third-party metasearch instance unless you ask. When the instance protects its search routes, set `degoogApiKey` or `DEGOOG_API_KEY` and the key is sent as `Authorization: Bearer <key>`; the API key and any `degoogHeaders` are stripped from cross-origin redirects. `degoogEngines` restricts the request to specific engine ids from the instance's engine list (an array of strings), which is sent as the `engines` field on `POST /api/search`; omitting it uses the instance defaults. `recencyFilter` maps to degoog's `time` parameter, and domain filters become `site:`/`-site:` query clauses plus a local result filter; multiple allowed domains are grouped as `(site:a OR site:b)` so the query terms apply to every branch. Only absolute HTTP(S) result URLs are returned as sources, and duplicate URLs are collapsed. A 200 response without a results array is reported as an invalid response, so a configured route can continue when `fallbackOn` includes `\"invalid-response\"`, while a genuine empty `results` array remains a successful empty search. The configured base URL and redirects remain subject to the SSRF guard; add only the narrowest self-hosted range to `ssrf.allowRanges` when it resolves to a private or synthetic range. Optional `degoogHeaders` merges extra HTTP headers (string values only; invalid header names are ignored) for reverse-proxy or Zero Trust auth. Values from `degoogApiKey` and the configured `degoogHeaders` are redacted from reported upstream error text, and a request that exceeds the 30-second deadline fails as a timeout instead of being recorded as a completed request.\n\n**DuckDuckGo.** DuckDuckGo HTML search is keyless and explicit-only. Select it with `provider: \"duckduckgo\"` or place it in `searchRouting`; it is never chosen by `auto` and never participates in `provider: \"all\"`. Domain filters are enforced locally after DuckDuckGo redirect URLs are decoded. `recencyFilter` is not guaranteed because the HTML endpoint has no documented stable time parameter. A page that is neither results nor DuckDuckGo's \"no results\" page is reported as an invalid response, so routing can continue when `fallbackOn` includes `\"invalid-response\"`; DuckDuckGo's bot check is reported as `quota`.\n\nSet `firecrawlBaseUrl` or `FIRECRAWL_BASE_URL` to use Firecrawl for `web_search` and as an extraction fallback for `fetch_content`. Search calls `/v2/search` by default, requests `sources: [\"web\"]`, maps `numResults` to `limit`, maps `recencyFilter` to Firecrawl's `tbs`, and maps domain filters to `includeDomains` or `excludeDomains` when possible. With `includeContent: true`, Firecrawl search adds Markdown scrape options and returns successful result Markdown as inline content. Fetch extraction calls `/v2/scrape` by default. Set `firecrawlApiVersion` or `FIRECRAWL_API_VERSION` to `v1` for older self-hosted images. Firecrawl bills PDFs per parsed page; set `fi","readmeFilename":"README.md"}