No description
  • TypeScript 100%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-08-29 11:04:41 +02:00
extensions/webtools Move to conventional extensions/ layout (no package.json manifest) 2026-08-29 11:04:41 +02:00
README.md Move to conventional extensions/ layout (no package.json manifest) 2026-08-29 11:04:41 +02:00

pi-extensions

Pi-Extensions von Anton. Repo-Layout entspricht Pi's konventioneller Paketstruktur (extensions/<name>/index.ts) – kein package.json/Manifest nötig.

└── extensions/
    └── webtools/
        ├── index.ts        – registriert web_search + web_extract
        ├── search.ts       – DDG-Scrape, pro-Session-Nummerierungs-State
        ├── extract.ts      – result_numbers → URLs → Text
        ├── safe-fetch.ts   – SSRF-geschützter Fetch
        ├── html-to-text.ts – HTML → Plain Text
        ├── pdf.ts          – best-effort PDF → Text
        └── test.mts        – Smoke-Test

webtools

Web-Suche und Seiten-Lesen als Pi-Tools, ohne npm-Dependencies. Zwei Tools:

  • web_search – DuckDuckGo-Textsuche (HTML-Endpoint, kein API-Key). Treffer werden pro Session nummeriert: [Result 1] Titel / URL / Snippet.
  • web_extract – liest maximal 5 Seiten aus (per result_numbers aus web_search oder direkten URLs), HTML bzw. PDF → Plain Text, auf 12 000 Zeichen pro Seite begrenzt. SSRF-geschützter Fetch (keine privaten/localhost-Adressen, kein DNS-Rebinding, Redirects werden pro Hop neu validiert).

Das Modell übergibt bei web_extract nur result_numbers – das Zahl→URL-Mapping liegt serverseitig in der Extension, dadurch kann das Modell keine URLs halluzinieren.

Detaillierte Doku: extensions/webtools/README.md

Installation

Option 1: Als Pi-Package via git (empfohlen):

pi install git:https://forgejo.asxh.de/antonsxh/pi-extensions

Pi findet die Extension über den konventionellen extensions/-Ordner. Alternativ in ~/.pi/agent/settings.json eintragen (und Pi neu starten / /reload):

{
	"packages": [
		"git:https://forgejo.asxh.de/antonsxh/pi-extensions"
	]
}

Updates: pi update --extensions.

Option 2: Projektlokal – Ordner klonen/kopieren:

cd <dein-projekt>
mkdir -p .pi/extensions
git clone https://forgejo.asxh.de/antonsxh/pi-extensions.git /tmp/pi-extensions
cp -r /tmp/pi-extensions/extensions/webtools .pi/extensions/webtools

Pi lädt .pi/extensions/*/index.ts automatisch (Projekt muss vertraut sein). Dann /reload.

Option 3: Manuell testen:

git clone https://forgejo.asxh.de/antonsxh/pi-extensions.git
pi -e ./pi-extensions/extensions/webtools/index.ts

Testen

cd extensions/webtools
npx --yes tsx test.mts   # htmlToText, SSRF-Blockade, web_search, web_extract