devin-remote-Binärdatei und die Spawn-Spezifikation für benutzerdefinierte Orchestratoren.
Authentifizierung
Worker und Orchestratoren authentifizieren sich mit einem v3-API-Token, das zu einem Service-Benutzer gehört. Die dem Service-Benutzer zugewiesene Rolle legt die Outposts-Geltungsbereiche des Tokens fest:Die älteren Geltungsbereiche
account.outposts.machine und account.outposts.orchestrator
sind veraltet. Rollen, denen diese gewährt wurden, funktionieren weiterhin (beide implizieren
den Schreib-Geltungsbereich), aber neue Rollen sollten Outposts lesen / Outposts
schreiben verwenden.devin worker start kann auch ohne vorab bereitgestelltes Token mit Ihrer bestehenden CLI-Anmeldung ausgeführt werden – siehe Starten ohne Token.
CLI
devin worker start
Fragt die Warteschlange eines Outposts regelmäßig ab, nimmt Sitzungen an, lädt die passende devin-remote-Binärdatei herunter und führt Sitzungen aus. Führen Sie den Befehl in dem Verzeichnis aus, in dem Sitzungen arbeiten sollen: Die Repositorys einer Sitzung befinden sich im Unterverzeichnis repos dieses Verzeichnisses, sodass your-org/app unter $(pwd)/repos/app ausgecheckt wird. Bereits dort vorhandene Repositorys werden wiederverwendet; fehlende werden beim Start der Sitzung geklont.
Die Umgebung des Workers kann außerdem
DEVIN_CHROME_PATH enthalten, um Sitzungen für Browser-Funktionen auf eine Chrome-/Chromium-Binärdatei zu verweisen.
Starten ohne Token
Ein vorab bereitgestellter Outposts-Token ist nicht erforderlich. Wenn weder--token noch DEVIN_OUTPOSTS_TOKEN angegeben sind, erstellt devin worker start mithilfe Ihrer bestehenden CLI-Anmeldung einen Outpost und verwendet bei späteren Ausführungen den gespeicherten Worker-Token wieder.
Plattformvalidierung
Der Worker prüft, ob das Betriebssystem der Maschine mit der Plattform des Outposts übereinstimmt. Bei einer Abweichung wird eine eindeutige Fehlermeldung ausgegeben, statt Sitzungen in der Warteschlange wiederholt zu beanspruchen und freizugeben. Windows-x64-Maschinen werden unterstützt: Der Worker lädt die passendedevin-remote-Binärdatei herunter und übergibt die Windows-Systemumgebung an die Sitzungen.
devin worker outpost create
Erstellt einen Outpost – eine benannte Warteschlange für Sitzungen, die von Ihrer Infrastruktur bedient wird. Erfordert den Schreib-Geltungsbereich.
Gibt die ID des neuen Outposts aus (
outpost_env-...). Sie können Outposts auch in der Web-App unter Settings → Environment → Outposts erstellen.
devin worker outpost delete
Löscht einen Outpost. Erfordert den Schreib-Geltungsbereich.
Fleet API
Alle Endpunkte sind unterhttps://api.devin.ai/opbeta/outposts/ verfügbar und verwenden ein Bearer-Token:
metadata-/spec-/status-Struktur, und die Warteschlange verwendet die Kubernetes-Semantik „list-then-watch“ mit mindestens einmaliger Zustellung.
Objekte
Warteschlangeneintrag (devins)
Jede Sitzung in der Warteschlange wird durch einen Warteschlangeneintrag dargestellt:
spec.network_policy gibt an, ob der Netzwerkzugriff der Sitzung eingeschränkt ist (enabled) und welche Ziele zulässig sind (allow): Hostname-Muster ({"hostname": ...}), IPv4-Adressen/CIDRs ({"ipv4": ...}) oder IPv6-Adressen/CIDRs ({"ipv6": ...}). Die Richtlinie stammt aus dem Sicherheitsprofil, das für die Sitzung gilt; für ihre Durchsetzung auf Ihren Maschinen ist der Outpost-Betreiber verantwortlich.
Outpost
Sitzungen in der Warteschlange auflisten
Beispielantwort:
- Übergeben Sie den
Cursorjeder Antwort in die nächste Anfrage, solangehas_next_pagetrueist. - Die Zustellung erfolgt mindestens einmal: Eine Sitzung an einer Seitengrenze kann auf beiden Seiten erscheinen. Führen Sie daher Upserts für Einträge anhand von
metadata.session_idaus, anstatt jedes Element als neu zu behandeln (das Claim-CAS macht Duplikate unschädlich). - Wenn
has_next_pagefalsewird, speichern Sie den zurückgegebenen Cursor als Startposition für einen Watch.
Änderungen beobachten
MODIFIED-Ereignisse werden ausgelöst, wenn sich der Warteschlangeneintrag einer Sitzung ändert (neu in die Warteschlange aufgenommene Sitzungen kommen ebenfalls als MODIFIED an); DELETED-Ereignisse werden ausgelöst, wenn er entfernt wird. Jedes SSE-data-Feld enthält:
- Persistieren Sie nach der Verarbeitung jedes Ereignisses dessen
cursorauf oberster Ebene; stellen Sie die Verbindung mit dem zuletzt persistierten Cursor wieder her, um Änderungen wiederzugeben, die während der Unterbrechung aufgetreten sind. - Die Zustellung erfolgt mindestens einmal — tolerieren Sie doppelte Ereignisse.
- Streams enden nach spätestens fünf Minuten; eine Watch-Schleife mit Wiederverbindung wird erwartet.
phase- undacceptor_id-Filter werden ignoriert, wennwatch=true; filtern Sie beobachtete Ereignisse stattdessen anhand der Felder imobjectjedes Ereignisses.- Wenn der Cursor weggelassen wird, beginnt der Stream am Anfang. Verwenden Sie daher für den normalen Abgleich list-then-watch.
Einen Queue-Eintrag abrufen
Eine Sitzung übernehmen
409 fehl. Eine erfolgreiche Beanspruchungsantwort enthält status.connect_token und status.gateway_url — die Zugangsdaten, die devin-remote zum Herstellen der Verbindung benötigt (siehe den Spawn-Spezifikation).
Mit der Beanspruchung wird zugesichert, dass ein Worker innerhalb der vom Server zugewiesenen Claim-Deadline (status.claim_deadline) bereit ist; abgelaufene Beanspruchungen kehren automatisch in die Warteschlange zurück.
Eine Beanspruchung freigeben
Outposts
status.queue_depth und status.active_claims.
Operatornachricht senden
- Jeder Aufruf ersetzt die vorherige Nachricht – in der Sitzung wird immer nur die neueste angezeigt.
- Durch das Senden einer leeren Zeichenfolge (
{"message": ""}) wird das Banner entfernt. - Nachrichten werden als Klartext dargestellt (bis zu 2.000 Zeichen; längere Nachrichten werden mit einem
422-Validierungsfehler abgewiesen) – HTML und Markdown werden nicht interpretiert. - Unbekannte Sitzungs-IDs, Sitzungen auf dem Outpost eines anderen Kontos und abgeschlossene Sitzungen geben
404zurück. - Ratenlimit: maximal eine neue Nachricht pro Sitzung alle 30 Sekunden (andernfalls
429). Das Entfernen mit einer leeren Zeichenfolge ist immer zulässig.
Verteilung von Remote-Binärdateien
Der Befehldevin worker start lädt automatisch die passende devin-remote-Binärdatei herunter. Benutzerdefinierte Orchestratoren, die nicht die Devin CLI verwenden, können sie direkt hier abrufen:
Unter Windows endet der Dateiname der Binärdatei (und der zugehörigen Prüfsummendatei) auf
.exe — devin-remote_${SHA}_windows_x64.exe und devin-remote_${SHA}_windows_x64.exe.sha256 —, während der Zeiger auf die neueste Version schlicht latest_windows_x64 lautet.
Wenn der Warteschlangeneintrag der Sitzung ein spec.remote_binary_sha enthält, verwenden Sie diesen SHA-Wert anstelle von latest — dadurch wird die Sitzung auf eine bestimmte getestete Version angepinnt.
Spawn-Spezifikation
Wenn Ihr Orchestratordevin-remote selbst startet, statt devin worker start zu verwenden, starten Sie ihn wie folgt:
Geben Sie dem Remote eine saubere Umgebung, die nur die oben genannten Variablen sowie grundlegende Systemvariablen enthält (
PATH, HOME, USER, LOGNAME, TMPDIR, LANG, TZ und — für die Bildschirmaufnahme des Desktop-Streams unter Linux/X11 — DISPLAY, WAYLAND_DISPLAY, XAUTHORITY). Geben Sie nichts an das Remote weiter, was der Agent nicht sehen können soll: Es wird von der Shell des Agenten vererbt.
Zusätzliche Lifecycle-Erwartungen:
- Arbeitsverzeichnis: Starten Sie das Remote in dem Verzeichnis, in dem die Sitzung arbeiten soll — Repositories befinden sich in dessen Unterverzeichnis
repos, also$(pwd)/repos/<repo-name>(dieselbe Regel wie beidevin worker start). - Sitzungsende: Wenn die Sitzung endet (in den sleep-Zustand wechselt oder beendet wird), benachrichtigt Devin das Remote und es beendet sich selbst mit Status 0. Behandeln Sie einen sauberen Exit als Ende der Sitzung: Bestätigen Sie, dass
status.session_statusdes Warteschlangeneintragssuspendedoderterminatedist (die Statusaktualisierung kann dem Exit um einige Sekunden hinterherhinken, lesen Sie also einige Male erneut), und geben Sie dann die Beanspruchung frei. Als Fallback pollen Siestatus.session_statusauch, während das Remote läuft, und beenden den Prozess selbst, sobald esterminatederreicht (oder der Warteschlangeneintrag verschwindet).

