{"_id":"@alfonzjanfrithz/pi-websearch","_rev":"10-94d302cd4cc190fa1ddc2d1a060b4373","name":"@alfonzjanfrithz/pi-websearch","dist-tags":{"latest":"0.7.1"},"versions":{"0.1.0":{"name":"@alfonzjanfrithz/pi-websearch","version":"0.1.0","keywords":["pi-package"],"author":{"name":"alfonzjanfrithz"},"license":"MIT","_id":"@alfonzjanfrithz/pi-websearch@0.1.0","maintainers":[{"name":"alfonzjanfrithz","email":"alfonzjanfrithz@gmail.com"}],"homepage":"https://github.com/alfonzjanfrithz/pi-websearch","bugs":{"url":"https://github.com/alfonzjanfrithz/pi-websearch/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"1fd98bb7534bd9fba7014d2b8c6065525731a8ac","tarball":"https://registry.npmjs.org/@alfonzjanfrithz/pi-websearch/-/pi-websearch-0.1.0.tgz","fileCount":4,"integrity":"sha512-WiK6KIfbrx38QRRT8/q0y3xpBAM/1Rai0MZBwENcXHHhnbB8myZ9QqwoYvsNiggJz2pcEMcwIvBVeDmjB0NRSQ==","signatures":[{"sig":"MEQCIDddQQxBp74fid6RsKUNQKjTJbvFlA83dJjKKcm/W1BwAiAVYQL7bHNWG57MgLTf7GrsS3CIfDax9UHgmYP3so2kyw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18965},"main":"index.ts","type":"module","gitHead":"207058d0c71b56a77c8a690dd60d34ee349b3042","_npmUser":{"name":"alfonzjanfrithz","email":"alfonzjanfrithz@gmail.com"},"repository":{"url":"git+https://github.com/alfonzjanfrithz/pi-websearch.git","type":"git"},"_npmVersion":"11.12.1","description":"Web search and URL content fetching tools for Pi coding agent","directories":{},"_nodeVersion":"24.15.0","dependencies":{"turndown":"^7.2.0","htmlparser2":"^9.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/turndown":"^5.0.5"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-websearch_0.1.0_1779636417785_0.9306412364803391","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@alfonzjanfrithz/pi-websearch","version":"0.1.2","keywords":["pi-package"],"author":{"name":"alfonzjanfrithz"},"license":"MIT","_id":"@alfonzjanfrithz/pi-websearch@0.1.2","maintainers":[{"name":"alfonzjanfrithz","email":"alfonzjanfrithz@gmail.com"}],"homepage":"https://github.com/alfonzjanfrithz/pi-websearch","bugs":{"url":"https://github.com/alfonzjanfrithz/pi-websearch/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"613649144400a5c72b62421a330fd2921e837f04","tarball":"https://registry.npmjs.org/@alfonzjanfrithz/pi-websearch/-/pi-websearch-0.1.2.tgz","fileCount":4,"integrity":"sha512-zjpw49w4I7pwl5uakYybxeUuQ+esZNDGMIXn8xerPDDH+6/hgOp+7QBxXvso9gEtEtlD1Az8Nk1iqq89k5fTOA==","signatures":[{"sig":"MEYCIQD8n6dTxQWofhqygd8iUWPVePFPOz+EQqp00Yjl2DybAAIhAOrWG62dvCeGJY62tmMwRPsMVCDRs6s+gkyGDf5iuIce","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alfonzjanfrithz%2fpi-websearch@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":18985},"main":"index.ts","type":"module","gitHead":"59c7f0937cccaf5efab42e4be123256225e6234c","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:64dbed2e-4ffa-4626-9c0c-e8ebaaa1fc12"}},"repository":{"url":"git+https://github.com/alfonzjanfrithz/pi-websearch.git","type":"git"},"_npmVersion":"11.12.1","description":"Web search and URL content fetching tools for Pi coding agent","directories":{},"_nodeVersion":"24.15.0","dependencies":{"turndown":"^7.2.0","htmlparser2":"^9.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/turndown":"^5.0.5"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-websearch_0.1.2_1779637028689_0.9599764564603426","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@alfonzjanfrithz/pi-websearch","version":"0.2.0","keywords":["pi-package"],"author":{"name":"alfonzjanfrithz"},"license":"MIT","_id":"@alfonzjanfrithz/pi-websearch@0.2.0","maintainers":[{"name":"alfonzjanfrithz","email":"alfonzjanfrithz@gmail.com"}],"homepage":"https://github.com/alfonzjanfrithz/pi-websearch","bugs":{"url":"https://github.com/alfonzjanfrithz/pi-websearch/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"1bd27cfe4085fdf21b2f00c8f5b9e24b83c4c1dd","tarball":"https://registry.npmjs.org/@alfonzjanfrithz/pi-websearch/-/pi-websearch-0.2.0.tgz","fileCount":4,"integrity":"sha512-+p4b1XKxQ2S50w4iLIH4O00Jfw6vs82+MECYxwNrqlYQ7oQiQCtiBuNnUKz7hcMldkLaq8nep5Ky8BTwICNijg==","signatures":[{"sig":"MEUCIQD6g35bDK5/VKnWuf03dWzMkNdkXuxEFeFIZ33hlCDhqwIgbA8VLJyyJijS46utti2hZKXEuEp3SXfquhPjhd7o6RM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alfonzjanfrithz%2fpi-websearch@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":21713},"main":"index.ts","type":"module","gitHead":"ebc068199d61d9ee633f1a4584925628ae4515fb","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:64dbed2e-4ffa-4626-9c0c-e8ebaaa1fc12"}},"repository":{"url":"git+https://github.com/alfonzjanfrithz/pi-websearch.git","type":"git"},"_npmVersion":"11.12.1","description":"Web search and URL content fetching tools for Pi coding agent","directories":{},"_nodeVersion":"24.15.0","dependencies":{"turndown":"^7.2.0","htmlparser2":"^9.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/turndown":"^5.0.5"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-websearch_0.2.0_1779637899446_0.6133171002800002","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@alfonzjanfrithz/pi-websearch","version":"0.3.0","keywords":["pi-package"],"author":{"name":"alfonzjanfrithz"},"license":"MIT","_id":"@alfonzjanfrithz/pi-websearch@0.3.0","maintainers":[{"name":"alfonzjanfrithz","email":"alfonzjanfrithz@gmail.com"}],"homepage":"https://github.com/alfonzjanfrithz/pi-websearch","bugs":{"url":"https://github.com/alfonzjanfrithz/pi-websearch/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"46db9969adb513c332f5b9685af66d901c8f01d3","tarball":"https://registry.npmjs.org/@alfonzjanfrithz/pi-websearch/-/pi-websearch-0.3.0.tgz","fileCount":4,"integrity":"sha512-23QCvrNflQzrGopCMhYgkYLr2GTJZNZk7j/6+kxBU9xybpz5LzSlA9vZzt3wI5C5+ydwy3Ol5d8Qw++q1BOVnw==","signatures":[{"sig":"MEQCIDm0HoMDwc1E+zSqvEI3U5zz+pzaHwI/fCg8kcMkNsbMAiAPu/kUjW6ao0PvNyIc7qZcqcXJeKeQgVsddg7qYPf60Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alfonzjanfrithz%2fpi-websearch@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":27321},"main":"index.ts","type":"module","gitHead":"084c543a7cc3d771d0f60480955ce57690ac93b1","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:64dbed2e-4ffa-4626-9c0c-e8ebaaa1fc12"}},"repository":{"url":"git+https://github.com/alfonzjanfrithz/pi-websearch.git","type":"git"},"_npmVersion":"11.13.0","description":"Web search and URL content fetching tools for Pi coding agent","directories":{},"_nodeVersion":"24.16.0","dependencies":{"turndown":"^7.2.0","htmlparser2":"^9.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/turndown":"^5.0.5"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-websearch_0.3.0_1779865862184_0.5827091526037917","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@alfonzjanfrithz/pi-websearch","version":"0.4.0","keywords":["pi-package"],"author":{"name":"alfonzjanfrithz"},"license":"MIT","_id":"@alfonzjanfrithz/pi-websearch@0.4.0","maintainers":[{"name":"alfonzjanfrithz","email":"alfonzjanfrithz@gmail.com"}],"homepage":"https://github.com/alfonzjanfrithz/pi-websearch","bugs":{"url":"https://github.com/alfonzjanfrithz/pi-websearch/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"33946eb11730f92a89ec0748480f56c540fc3e9f","tarball":"https://registry.npmjs.org/@alfonzjanfrithz/pi-websearch/-/pi-websearch-0.4.0.tgz","fileCount":4,"integrity":"sha512-24lpZxcOE19ftjTuglZOfc2djLZjDkSgRMhMcJupI0oG7bkK4w4j8AA34p2wx7UO9oeQdFufayul5GCJt8CBbg==","signatures":[{"sig":"MEUCIHy/aMelPaEZckYcNDQ3Gq3bpVNGH47eXnaSc5f9BOoYAiEAqI9vpKHKwGZwEtjiSV0ZwuXfb1upat3n4yHClsyBedw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alfonzjanfrithz%2fpi-websearch@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":30598},"main":"index.ts","type":"module","gitHead":"22de472f6baed54891a62c5405b30cb5f5c61c5b","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:64dbed2e-4ffa-4626-9c0c-e8ebaaa1fc12"}},"repository":{"url":"git+https://github.com/alfonzjanfrithz/pi-websearch.git","type":"git"},"_npmVersion":"11.13.0","description":"Web search and URL content fetching tools for Pi coding agent","directories":{},"_nodeVersion":"24.16.0","dependencies":{"unpdf":"^1.6.2","turndown":"^7.2.0","htmlparser2":"^9.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/turndown":"^5.0.5"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-websearch_0.4.0_1779933155819_0.8190368993655868","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@alfonzjanfrithz/pi-websearch","version":"0.4.1","keywords":["pi-package"],"author":{"name":"alfonzjanfrithz"},"license":"MIT","_id":"@alfonzjanfrithz/pi-websearch@0.4.1","maintainers":[{"name":"alfonzjanfrithz","email":"alfonzjanfrithz@gmail.com"}],"homepage":"https://github.com/alfonzjanfrithz/pi-websearch","bugs":{"url":"https://github.com/alfonzjanfrithz/pi-websearch/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"1d0a9f11e05ffb68966403b5a9030636804af7c9","tarball":"https://registry.npmjs.org/@alfonzjanfrithz/pi-websearch/-/pi-websearch-0.4.1.tgz","fileCount":4,"integrity":"sha512-0HwDPK7CLieUmML1xwbAzBcIbrw7kAuvmPlmMftbQAtZru516hTfYZ8h+VFoI+g2roFps8Em4ZY3MYs8W/zlww==","signatures":[{"sig":"MEQCICEVPzNX4FUldhURdwvBvCrumgkvWD2tYvyDxhajGOCNAiBXS+yEoCnjIvuH3QwDXUmwvQeIB4E4PiuwR4CLl4FAUQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alfonzjanfrithz%2fpi-websearch@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":33485},"main":"index.ts","type":"module","gitHead":"2f0eee1104fe1d3e078c6856ef45bff90520f5d2","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:64dbed2e-4ffa-4626-9c0c-e8ebaaa1fc12"}},"repository":{"url":"git+https://github.com/alfonzjanfrithz/pi-websearch.git","type":"git"},"_npmVersion":"11.13.0","description":"Web search and URL content fetching tools for Pi coding agent","directories":{},"_nodeVersion":"24.16.0","dependencies":{"unpdf":"^1.6.2","turndown":"^7.2.0","htmlparser2":"^9.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/turndown":"^5.0.5"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-websearch_0.4.1_1780109862641_0.48278896708077546","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@alfonzjanfrithz/pi-websearch","version":"0.5.0","keywords":["pi-package"],"author":{"name":"alfonzjanfrithz"},"license":"MIT","_id":"@alfonzjanfrithz/pi-websearch@0.5.0","maintainers":[{"name":"alfonzjanfrithz","email":"alfonzjanfrithz@gmail.com"}],"homepage":"https://github.com/alfonzjanfrithz/pi-websearch","bugs":{"url":"https://github.com/alfonzjanfrithz/pi-websearch/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"ce5d4d0c028dae9785956adbe416e597e6150cfb","tarball":"https://registry.npmjs.org/@alfonzjanfrithz/pi-websearch/-/pi-websearch-0.5.0.tgz","fileCount":4,"integrity":"sha512-f42hnVFHc6rG1QjmSCzZtPBj8rsklhauqwCOQ6svTUGxkWlX5WW2viB+zrO2FOGX91RVF9Tob/zbwVvg6n08yA==","signatures":[{"sig":"MEUCIQDF6z1N9qMXz55CkMCX0xSQzD4VkTPzaU70c0VPWvlQoQIgIDi7RzVC5bVFpMuRJYLb4o65hi0P+AazHz2tj2abBmo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alfonzjanfrithz%2fpi-websearch@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":37350},"main":"index.ts","type":"module","gitHead":"e78fa24945559114bb9556ca588164d857152e73","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:64dbed2e-4ffa-4626-9c0c-e8ebaaa1fc12"}},"repository":{"url":"git+https://github.com/alfonzjanfrithz/pi-websearch.git","type":"git"},"_npmVersion":"11.13.0","description":"Web search and URL content fetching tools for Pi coding agent","directories":{},"_nodeVersion":"24.16.0","dependencies":{"unpdf":"^1.6.2","domutils":"^3.1.0","turndown":"^7.2.0","domhandler":"^5.0.3","htmlparser2":"^9.1.0","dom-serializer":"^2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/turndown":"^5.0.5"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-websearch_0.5.0_1780111032866_0.47646022072592253","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@alfonzjanfrithz/pi-websearch","version":"0.6.0","keywords":["pi-package"],"author":{"name":"alfonzjanfrithz"},"license":"MIT","_id":"@alfonzjanfrithz/pi-websearch@0.6.0","maintainers":[{"name":"alfonzjanfrithz","email":"alfonzjanfrithz@gmail.com"}],"homepage":"https://github.com/alfonzjanfrithz/pi-websearch","bugs":{"url":"https://github.com/alfonzjanfrithz/pi-websearch/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"dae4d9b102907c5b0a5071e1672d531efa7920aa","tarball":"https://registry.npmjs.org/@alfonzjanfrithz/pi-websearch/-/pi-websearch-0.6.0.tgz","fileCount":4,"integrity":"sha512-ZQ6sr8Kv/VD9ICjMZkbKYeguq15Wf+MuE28TT0erX1XG/jR/fU/lV2N/nl0R34cuUYzlVqVcVV5lDOzTBynTXw==","signatures":[{"sig":"MEQCIDwgRqEjVKC2mnp8/vZPhPBIJnkQA1va800L5gyIDOWwAiABRzvsySe2TwuwCNJXjhmcstuC2T77ldUDOQ4QRbzjKg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alfonzjanfrithz%2fpi-websearch@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":50795},"main":"index.ts","type":"module","gitHead":"9956aad7c1efaf28c582cd5f16e14a500c3f5c29","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:64dbed2e-4ffa-4626-9c0c-e8ebaaa1fc12"}},"repository":{"url":"git+https://github.com/alfonzjanfrithz/pi-websearch.git","type":"git"},"_npmVersion":"11.13.0","description":"Web search and URL content fetching tools for Pi coding agent","directories":{},"_nodeVersion":"24.16.0","dependencies":{"unpdf":"^1.6.2","domutils":"^3.1.0","turndown":"^7.2.0","domhandler":"^5.0.3","htmlparser2":"^9.1.0","dom-serializer":"^2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/turndown":"^5.0.5"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-websearch_0.6.0_1780114660348_0.06421005338137986","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@alfonzjanfrithz/pi-websearch","version":"0.7.0","keywords":["pi-package"],"author":{"name":"alfonzjanfrithz"},"license":"MIT","_id":"@alfonzjanfrithz/pi-websearch@0.7.0","maintainers":[{"name":"alfonzjanfrithz","email":"alfonzjanfrithz@gmail.com"}],"homepage":"https://github.com/alfonzjanfrithz/pi-websearch","bugs":{"url":"https://github.com/alfonzjanfrithz/pi-websearch/issues"},"pi":{"extensions":["./index.ts"]},"dist":{"shasum":"68b460d9db9b983d3a6191fc93199a90af5b26dd","tarball":"https://registry.npmjs.org/@alfonzjanfrithz/pi-websearch/-/pi-websearch-0.7.0.tgz","fileCount":4,"integrity":"sha512-8mRR3egKAVHkgVv2g+d5LRf8GTO2oFi/aeLwmGd6nX6pd2mLjitFaXEbQ2Q3rSHwWIX7R2g4J4u3DkolUSVeRQ==","signatures":[{"sig":"MEUCIFhiLYYj+XmyZG8IRUDYqCCBJ2JuqjPz15qvFk+UNe7ZAiEAoKJXjAmWfSwFv84P7JRxftdD9ydt5/Ht/e5RuKgbWoc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alfonzjanfrithz%2fpi-websearch@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":62033},"main":"index.ts","type":"module","gitHead":"1dafdb16eb924cc09220879cc977e384545b8cf4","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:64dbed2e-4ffa-4626-9c0c-e8ebaaa1fc12"}},"repository":{"url":"git+https://github.com/alfonzjanfrithz/pi-websearch.git","type":"git"},"_npmVersion":"11.13.0","description":"Web search and URL content fetching tools for Pi coding agent","directories":{},"_nodeVersion":"24.16.0","dependencies":{"unpdf":"^1.6.2","domutils":"^3.1.0","turndown":"^7.2.0","domhandler":"^5.0.3","htmlparser2":"^9.1.0","dom-serializer":"^2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/turndown":"^5.0.5"},"peerDependencies":{"typebox":"*","@earendil-works/pi-coding-agent":"*"},"_npmOperationalInternal":{"tmp":"tmp/pi-websearch_0.7.0_1780143871153_0.3605652065617446","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@alfonzjanfrithz/pi-websearch","version":"0.7.1","description":"Web search and URL content fetching tools for Pi coding agent","keywords":["pi-package"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/alfonzjanfrithz/pi-websearch.git"},"homepage":"https://github.com/alfonzjanfrithz/pi-websearch","author":{"name":"alfonzjanfrithz"},"type":"module","main":"index.ts","dependencies":{"dom-serializer":"^2.0.0","domhandler":"^5.0.3","domutils":"^3.1.0","htmlparser2":"^9.1.0","turndown":"^7.2.0","unpdf":"^1.6.2"},"devDependencies":{"@types/turndown":"^5.0.5"},"peerDependencies":{"@earendil-works/pi-coding-agent":"*","typebox":"*"},"pi":{"extensions":["./index.ts"]},"gitHead":"63a8c72c6e60b8ff66203dc40eeb20c2e87ee13a","_id":"@alfonzjanfrithz/pi-websearch@0.7.1","bugs":{"url":"https://github.com/alfonzjanfrithz/pi-websearch/issues"},"_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-cawIP0WWy6KJlcOq6uUqn/G3jGcdsm4TpfUTIzghK3uGonzEYNUtjzjCxjoQgu7xZJC0if92iTbY2NimerfyiA==","shasum":"c8aee7b7a2c64543e501a0f964b2d8c025384eed","tarball":"https://registry.npmjs.org/@alfonzjanfrithz/pi-websearch/-/pi-websearch-0.7.1.tgz","fileCount":4,"unpackedSize":66262,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alfonzjanfrithz%2fpi-websearch@0.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAjlpU/bcvLcllUA9dV7ua+AwZA5PgVYxaAc+mRaHcQBAiBK2CdSI9S7gw08N8wFBdmPZ/Pg1IZ3vFzVROl79q2YQQ=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:64dbed2e-4ffa-4626-9c0c-e8ebaaa1fc12"}},"directories":{},"maintainers":[{"name":"alfonzjanfrithz","email":"alfonzjanfrithz@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pi-websearch_0.7.1_1780173315142_0.48412655005208416"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-24T15:26:57.661Z","modified":"2026-05-30T20:35:15.566Z","0.1.0":"2026-05-24T15:26:57.914Z","0.1.2":"2026-05-24T15:37:08.823Z","0.2.0":"2026-05-24T15:51:39.572Z","0.3.0":"2026-05-27T07:11:02.327Z","0.4.0":"2026-05-28T01:52:35.972Z","0.4.1":"2026-05-30T02:57:42.786Z","0.5.0":"2026-05-30T03:17:13.003Z","0.6.0":"2026-05-30T04:17:40.486Z","0.7.0":"2026-05-30T12:24:31.289Z","0.7.1":"2026-05-30T20:35:15.291Z"},"bugs":{"url":"https://github.com/alfonzjanfrithz/pi-websearch/issues"},"author":{"name":"alfonzjanfrithz"},"license":"MIT","homepage":"https://github.com/alfonzjanfrithz/pi-websearch","keywords":["pi-package"],"repository":{"type":"git","url":"git+https://github.com/alfonzjanfrithz/pi-websearch.git"},"description":"Web search and URL content fetching tools for Pi coding agent","maintainers":[{"name":"alfonzjanfrithz","email":"alfonzjanfrithz@gmail.com"}],"readme":"# pi-websearch\n\nWeb search and URL content fetching tools for [Pi](https://pi.dev) coding agent.\n\nAdapted from [opencode](https://github.com/sst/opencode)'s [`websearch.ts`](https://github.com/sst/opencode/blob/dev/packages/opencode/src/tool/websearch.ts), [`mcp-websearch.ts`](https://github.com/sst/opencode/blob/dev/packages/opencode/src/tool/mcp-websearch.ts), and [`webfetch.ts`](https://github.com/sst/opencode/blob/dev/packages/opencode/src/tool/webfetch.ts).\n\nRegisters two LLM-callable tools:\n\n- **`websearch`** — search the web via one of 6 providers: [Brave](https://brave.com/search/api/), [Tavily](https://tavily.com), [Google](https://developers.google.com/custom-search), [SearXNG](https://searxng.org), [Exa](https://exa.ai), or [Parallel](https://parallel.ai)\n- **`webfetch`** — direct HTTP fetch + HTML→markdown conversion\n\n## Install\n\n```bash\npi install npm:@alfonzjanfrithz/pi-websearch\n# or from GitHub\npi install git:github.com/alfonzjanfrithz/pi-websearch\n```\n\n## Configuration\n\n### Search providers\n\n| Variable | Description | Required |\n|---|---|---|\n| `BRAVE_API_KEY` | [Brave Search API](https://brave.com/search/api/) key | No — optional |\n| `TAVILY_API_KEY` | [Tavily Search API](https://tavily.com) key | No — optional |\n| `GOOGLE_API_KEY` | [Google Custom Search JSON API](https://developers.google.com/custom-search) key | No — optional (requires `GOOGLE_CX`) |\n| `GOOGLE_CX` | Google Programmable Search Engine ID | No — optional (requires `GOOGLE_API_KEY`) |\n| `SEARXNG_BASE_URL` | [SearXNG](https://searxng.org) instance URL (e.g. `https://searx.be`) | No — optional |\n| `EXA_API_KEY` | [Exa](https://exa.ai) API key | No — works without |\n| `PARALLEL_API_KEY` | [Parallel](https://parallel.ai) API key | No — works without |\n| `PI_WEBSEARCH_PROVIDER` | Force a provider: `brave`, `tavily`, `google`, `searxng`, `exa`, or `parallel` | No — auto-selects |\n| `PI_WEBSEARCH_DATE_RANGE` | Set to `0` to disable date range filtering entirely | No — enabled by default |\n| `PI_WEBSEARCH_CACHE_TTL` | Cache time-to-live in seconds | No — default: `300` (5 minutes) |\n| `PI_WEBSEARCH_CACHE_MAX` | Maximum number of cached search results | No — default: `100` |\n| `PI_WEBSEARCH_CACHE` | Set to `off` to disable caching entirely | No — enabled by default |\n\nProvider selection logic:\n\n1. `PI_WEBSEARCH_PROVIDER` override → that provider\n2. No override set → pick the highest-priority provider with configured credentials:\n   - `BRAVE_API_KEY` → Brave\n   - `TAVILY_API_KEY` → Tavily\n   - `GOOGLE_API_KEY` + `GOOGLE_CX` → Google\n   - `SEARXNG_BASE_URL` → SearXNG\n3. No keys configured → deterministic hash of session ID → 50/50 split between Exa and Parallel\n\n**Fallback** — If a provider fails (invalid key, rate limit, timeout, server error), the tool automatically tries the next available provider in the priority chain.\n\n### Web fetch\n\nNo API keys needed. Fetches URLs directly, converts HTML to markdown using `turndown`. No third-party services.\n\n## Tools\n\n### `websearch`\n\nSearch the web and return relevant content.\n\n| Parameter | Type | Required | Description |\n|---|---|---|---|\n| `query` | string | yes | Search query |\n| `numResults` | number | no | Number of results (default: 8) |\n| `dateRange` | `\"last_day\" \\| \"last_week\" \\| \"last_month\" \\| \"last_3m\" \\| \"last_6m\" \\| \"last_9m\" \\| \"last_year\" \\| \"ytd\"` | no | Filter results by recency |\n\n**Date range mapping** — Each provider maps `dateRange` to its native API parameter:\n\n| `dateRange` | Label | Brave | Tavily | Google | SearXNG | Exa | Parallel |\n|---|---|---|---|---|---|---|---|\n| `last_day` | 24h | `freshness=pd` | `time_range=day` | `dateRestrict=d1` | `time_range=day` | ISO date (1 day ago) | — |\n| `last_week` | 7d | `freshness=pw` | `time_range=week` | `dateRestrict=w1` | `time_range=week` | ISO date (7 days ago) | — |\n| `last_month` | 30d | `freshness=pm` | `time_range=month` | `dateRestrict=m1` | `time_range=month` | ISO date (30 days ago) | — |\n| `last_3m` | 3m | `freshness=<custom>` ⚠️ | `start_date=<ISO>` | `dateRestrict=m3` | `time_range=month` ⚠️ | ISO date (90 days ago) | — |\n| `last_6m` | 6m | `freshness=<custom>` ⚠️ | `start_date=<ISO>` | `dateRestrict=m6` | `time_range=year` ⚠️ | ISO date (180 days ago) | — |\n| `last_9m` | 9m | `freshness=<custom>` ⚠️ | `start_date=<ISO>` | `dateRestrict=m9` | `time_range=year` ⚠️ | ISO date (270 days ago) | — |\n| `last_year` | 1y | `freshness=py` | `time_range=year` | `dateRestrict=y1` | `time_range=year` | ISO date (365 days ago) | — |\n| `ytd` | YTD | `freshness=<custom>` ⚠️ | `start_date=<ISO>` | `dateRestrict=d<N>` ⚠️ | `time_range=year` ⚠️ | ISO date (Jan 1) | — |\n\n⚠️ = approximate mapping (see notes below)\n\n**Provider-specific date range notes:**\n\n- **Brave**: Intermediate ranges use custom date ranges (`YYYY-MM-DDtoYYYY-MM-DD`). YTD computes from Jan 1 of the current year.\n- **Tavily**: Intermediate ranges and YTD use `start_date` (ISO date) instead of `time_range` presets, which provides exact dates.\n- **Google**: YTD is approximated as `d<N>` (days since Jan 1). All other ranges use native `d[N]`/`w[N]`/`m[N]`/`y[N]` units.\n- **SearXNG**: Only supports 4 presets (`day`/`week`/`month`/`year`). `last_3m` falls back to `month`, `last_6m`/`last_9m`/`ytd` fall back to `year`.\n- **Exa**: All ranges are computed as ISO `startPublishedDate` offsets — fully flexible.\n- **Parallel**: Does not support date filtering. The parameter is silently ignored.\n\nSet `PI_WEBSEARCH_DATE_RANGE=0` to completely disable the `dateRange` parameter (it will be stripped from all requests regardless of what the LLM passes).\n\n### `webfetch`\n\nFetch a URL and extract its content.\n\n| Parameter | Type | Required | Description |\n|---|---|---|---|\n| `url` | string | yes | URL to fetch |\n| `format` | `\"text\"` \\| `\"markdown\"` \\| `\"html\"` | no | Output format (default: `\"markdown\"`) |\n| `timeout` | number | no | Timeout in seconds (max 120) |\n\n**Metadata extraction** — When fetching HTML pages, `webfetch` automatically extracts structured metadata and includes it in the result:\n\n| Field | Source |\n|---|---|\n| `title` | OpenGraph (`og:title`) → JSON-LD `headline` → `<title>` → meta description |\n| `description` | OpenGraph (`og:description`) → JSON-LD `description` → HTML meta description |\n| `author` | OpenGraph (`og:article:author`) → JSON-LD `author`/`creator` → HTML meta author |\n| `publishedDate` | OpenGraph (`og:article:published_time`) → JSON-LD `datePublished` → HTML meta date |\n| `canonicalUrl` | OpenGraph (`og:url`) → `<link rel=\"canonical\">` |\n| `image` | OpenGraph (`og:image`) → JSON-LD `image` |\n| `siteName` | OpenGraph (`og:site_name`) |\n| `type` | OpenGraph (`og:type`) → JSON-LD `@type` |\n\n## Features\n\n- 6 search providers with automatic fallback on failure\n- 8 date/recency filters via `dateRange` parameter (last_day, last_week, last_month, last_3m, last_6m, last_9m, last_year, ytd) with provider-specific mapping\n- Disable date range filtering via `PI_WEBSEARCH_DATE_RANGE=0`\n- Direct HTTP fetch with browser-like User-Agent\n- HTML→markdown via `turndown`, text extraction via `htmlparser2`\n- Cloudflare bot detection retry (honest UA fallback)\n- Image support (returned as base64 attachments)\n- Output truncation (50KB / 2000 lines, overflow saved to temp file)\n- Automatic page metadata extraction (OpenGraph, JSON-LD structured data, HTML meta tags)\n- Search result caching with TTL-based expiry and LRU eviction (Issue #2)\n  - In-memory cache keyed by provider + query + dateRange + numResults\n  - Default 5-minute TTL, configurable via `PI_WEBSEARCH_CACHE_TTL`\n  - Default 100-entry max with LRU eviction, configurable via `PI_WEBSEARCH_CACHE_MAX`\n  - Disable entirely with `PI_WEBSEARCH_CACHE=off`\n  - Cache hits shown in TUI with \"(cached)\" indicator\n  - Only successful results are cached; errors always fall through to the provider\n\n## Testing\n\n**Note:** Public SearXNG instances often disable the JSON API or rate-limit it. For best results, [self-host SearXNG](https://docs.searxng.org/admin/installation.html) and enable `json` in `settings.yml`:\n\n```yaml\nsearch:\n  formats:\n    - html\n    - json\n```\n\n## License\n\nMIT","readmeFilename":"README.md"}