Implementierungen sind die Code-Dateien, die du schreibst, um EDGE-Tool-Ausführungen zu behandeln. Wenn ein Agent ein Tool mit dem Ausführungstyp EDGE aufruft, wird die Anfrage an den Edge Connector weitergeleitet, der die entsprechende Implementierung lädt, sie mit den übergebenen Parametern ausführt und ein strukturiertes Ergebnis zurückgibt. Diese Seite erklärt, wie du eigene Implementierungen erstellst, testest, paketierst und deployst.
Jedes EDGE-Tool in der nara-Registry hat definierte Eingabeparameter (ein Schema) und ein Ergebnis-Schema. Eine Implementierung ist eine JavaScript- oder TypeScript-Datei, die eine Handler-Funktion exportiert, die diesen Schemas entspricht. Der Handler empfängt die geparsten Parameter und einen Ausführungskontext, erledigt die nötige Arbeit (API aufrufen, Datenbank abfragen, Systembefehle ausführen) und gibt ein Ergebnisobjekt zurück.
Implementierungen sind als einzelne Dateien in einem tools/-Verzeichnis organisiert, eine Datei pro Tool. Diese Struktur ermöglicht es dem Edge Connector, jedes Tool unabhängig zu bündeln, versionieren und verteilen.
Der schnellste Weg, eine neue Implementierung zu erstellen, ist der generate-Befehl. Er verbindet sich mit dem nara Platform Server, holt die Schemas des Tools und generiert eine korrekt typisierte TypeScript-Datei.
Öffne die nara Webapp und starte eine Konversation mit einem Agent, dem dein EDGE-Tool zugewiesen ist.
Löse das Tool aus (z.B. bitte den Agent, eine Systemdiagnose durchzuführen). Die Tool-Ausführungsanfrage fließt über die Plattform zu deinem lokalen Edge Connector.
Prüfe die Terminal-Ausgabe auf Ausführungslogs und Ergebnisse.
Die CLI entdeckt alle Tool-Quelldateien in tools/ (.ts, .js, .mjs, .cjs).
Jedes Tool wird einzeln mit esbuild in dist/tools/ kompiliert.
Ein automatisch generierter dist/index.js wird erstellt, der alle Tool-Handler exportiert.
Alle .ref.json-Referenzdateien werden in das Manifest aufgenommen (für Tools mit servergehosteten Versionen).
Ein Manifest (manifest.json) wird erstellt mit der Organisations-ID, Sprache, Tool-Einträgen (Name, Checksumme, Größe), Referenzen, Build-Zeitstempel und Gesamt-Checksumme.
Alles wird in eine .tgz-Datei im Ausgabeverzeichnis archiviert.
Wenn du eine package.json in deinem Implementierungsverzeichnis mit Abhängigkeiten hast, führt die CLI automatisch pnpm install aus, wenn node_modules/ nicht existiert.
Die TypeScript-Kompilierung wird beim Paketierungsschritt automatisch von esbuild übernommen. Jede Tool-Datei wird einzeln gebündelt und ergibt eine eigenständige .js-Datei pro Tool. Das bedeutet:
Tools sind auf Bundle-Ebene voneinander isoliert.
Abhängigkeiten werden inline eingebettet (kein node_modules im Bundle nötig).
Der Build ist schnell — esbuild verarbeitet Dateien in Millisekunden.
Um den Build-Schritt zu überspringen (wenn du bereits manuell kompiliert hast), verwende --no-build:
Umschließe deine Implementierungslogik immer mit try/catch. Gib strukturierte Fehlerobjekte mit
aussagekräftigen Meldungen zurück. Setze isRetryable: true für vorübergehende Fehler
(Netzwerk-Timeouts, temporäre Nichtverfügbarkeit) und isRetryable: false für permanente Fehler
(ungültige Eingabe, fehlende Ressource).
Strukturierte Ergebnisse zurückgeben
Halte dich exakt an das Ergebnis-Schema des Tools. Der Agent empfängt das Ergebnisobjekt und
nutzt es, um Antworten zu formulieren. Füge alle Felder ein, die das Schema erwartet, auch wenn
manche null oder leer sind.
Timeouts beachten
Tool-Ausführungen haben ein vom Platform Server erzwungenes Timeout. Halte Implementierungen
schnell und reaktionsfreudig. Für langwierige Operationen erwäge, sie in kleinere Schritte
aufzuteilen oder einen Status zurückzugeben, den der Agent pollen kann.
Secrets sicher aufbewahren
Hardcode niemals Anmeldedaten in Implementierungsdateien. Verwende Umgebungsvariablen,
Secret-Manager oder die Konfiguration des Edge Connectors, um sensible Werte zur Laufzeit
einzuschleusen. Tool-Bundles werden auf dem Platform Server gespeichert.