Direkt zum Inhalt
ColliePWA

05/Documentation

Persistente Agenten (experimentell)

Ihren eigenen persistenten Agenten auf dem Smartphone anzeigen: die Schnellanleitung, collie durable attach und sources.json, die drei Verben, Token, die von Collie verwalteten Dateien und die Versionen

Experimentell. Das Übertragungsprotokoll, das SDK und diese Seite können sich in einer späteren Unterversion ändern, oder die Funktion wird entfernt. Bislang nutzt nur Collies eigenes Beispielmaterial das Protokoll. Das Beenden erklärt, woran sich entscheidet, ob es bleibt. Wenn Sie keinen beständigen Agenten anbinden, sieht Collie aus und arbeitet wie zuvor.

Wenn Sie einen beständigen Agenten mit Pi Durable oder einem anderen Programm erstellt haben, das das Protokoll bedient, kann Collie ihn auf Ihrem Smartphone anzeigen. Er erhält Bestätigungsaufforderungen, Verlauf und eine Chat-Ansicht ganz ohne UI-Code.

Ein Durable Agent ist ein möglicher Ursprung für ein Sitzung, und jede seiner Unterhaltungen entspricht einer Sitzung. Die Begriffe stammen aus Begriffsbestimmungen. Collie speichert keinen Modellschlüssel: Ein Durable Agent verwendet einen eigenen API-Schlüssel oder eine ChatGPT-Anmeldung, und ein Anthropic-Abonnement darf nicht über die Software eines Drittanbieters genutzt werden.

Schnellstart

Ein zehnzeiliger Durable Agent, ein collie durable attach und eine Fragekarte auf Ihrem Telefon.

Sie benötigen Collie 1.22.0 oder neuer auf diesem Rechner sowie ein gekoppeltes Telefon (Installation).

Ein Durable Agent läuft unter Linux oder macOS mit Node 22.19 oder neuer oder Bun 1.4 oder neuer. Installieren Sie das SDK im Ordner Ihres Durable Agent:

npm install @colliepwa/durable-sdk@experimental
# or
bun add @colliepwa/durable-sdk@experimental

Das Paket wird unter dem npm-Dist-Tag experimental veröffentlicht, niemals latest, und folgt dem Exit in ADR 0104: Fällt das Durable-Wire weg, gilt das Paket als veraltet (ADR 0105).

Der SDK-Einstiegspunkt für Pi Durable wurde mit Pi Durable 1.1.0 und 1.2.0 getestet. Node 22.19 ist die Mindestanforderung für Pi Durable 1.2.0.

Speichern Sie diesen Durable Agent unter hello.mjs. Er umfasst zehn Zeilen:

import { openCollie } from "@colliepwa/durable-sdk";

const socket = process.env.COLLIE_DURABLE_SOCKET ?? `${process.env.XDG_RUNTIME_DIR}/hello/app.sock`;
const collie = await openCollie({ socket, hostName: "hello", caps: { asks: true } });
const pane = collie.workspace("hello", { title: "Hello" }).tab("main", { title: "Questions" }).pane("deploy", { title: "Deploy", harness: "hello" });
collie.ready();
console.log(`listening ${collie.address}`);
const options = [{ id: "yes", label: "Yes" }, { id: "no", label: "No" }];
const answer = await pane.ask({ kind: "choice", toolCallId: "deploy-1", itemId: "deploy-1", title: "Deploy to staging?", options });
console.log(`answer: ${answer.optionIds[0]}`);
await collie.close();

Führen Sie ihn mit node hello.mjs oder bun hello.mjs aus. Er gibt listening /run/user/1000/hello/app.sock aus und wartet. Derselbe Durable Agent entspricht examples/durable-member/hello.ts in einem Klon von Collie.

Unter Node gibt er zunächst eine zusätzliche Zeile aus: Node kann nicht ermitteln, wer eine Verbindung zum Socket des Durable Agent herstellt, weshalb jeder Prozess Ihres Benutzers dessen Frage beantworten kann. Bun unter Linux kann dies und verweigert eine Antwort vom Durable Agent selbst oder von einem durch ihn gestarteten Prozess.

Führen Sie ihn unter macOS mit Node aus. Bun benötigt dort callerCheck: "off", was dieser Durable Agent nicht setzt. macOS verfügt über kein XDG_RUNTIME_DIR, setzen Sie daher COLLIE_DURABLE_SOCKET zuvor auf einen absoluten Pfad.

Binden Sie ihn in einem zweiten Terminal an Ihr Collie an und starten Sie neu, damit Collie den neuen Eintrag einliest:

collie durable attach hello --socket /run/user/1000/hello/app.sock
collie restart

Verwenden Sie den Pfad, den Ihr Durable Agent ausgegeben hat. Fügen Sie dem ersten Befehl --restart hinzu, um den Neustart im selben Schritt auszuführen. --restart startet die Collie-Bridge neu: Ihr Telefon verbindet sich in wenigen Sekunden wieder und Ihre Terminal-Sitzungen laufen weiter.

Öffnen Sie Collie auf Ihrem Telefon. Der Bereich Durable agents zeigt eine Zeile, hello, mit einem Experimental-Badge und einer wartenden Frage. Tippen Sie auf die Zeile: Es öffnet sich die Unterhaltungsliste des Durable Agent, in der die Unterhaltung Deploy mit „Deploy to staging?“ wartet. Öffnen Sie sie und tippen Sie auf Yes oder No. Der Durable Agent gibt Ihre Antwort aus und beendet sich.

Um einen eigenen Durable Agent zu schreiben, lesen Sie Das Durable-SDK und Das Durable-Wire.

Einen Durable Agent anbinden

Jeder Durable Agent ist ein Eintrag in sources.json, der von collie durable attach geschrieben wird.

collie durable attach desk --socket /run/user/1000/desk/app.sock
export EDGE_TOKEN=your-32-byte-random-token-here
collie durable attach edge --url https://edge.example.com --token-env EDGE_TOKEN
collie restart

Unter Windows steht nur die HTTPS-Variante zur Verfügung: attach --socket verweigert die Ausführung mit Exit-Code 2 und fordert dazu auf, --url und --token-env zu verwenden, da ein privater Socket Unix-Benutzerkennungen erfordert.

sources.json liegt im Konfigurationsordner neben Ihrer .env: bei einer von Herdr verwalteten Installation im Herdr-Plugin-Konfigurationsordner (~/.config/herdr/plugins/config/herdr.collie/), andernfalls in ~/.config/collie/. attach gibt den geschriebenen Pfad aus. Die beiden obigen Befehle schreiben diese Datei:

[
  { "name": "desk", "kind": "durable", "socket": "/run/user/1000/desk/app.sock" },
  {
    "name": "edge",
    "kind": "durable",
    "url": "https://edge.example.com",
    "token": "your-32-byte-random-token-here"
  }
]
Feldwas er enthält
nameDer Name des Durable Agent auf dem Telefon und der Name seines Protokollordners. 1 bis 32 Zeichen: Kleinbuchstaben, Ziffern und Bindestriche, beginnend mit einem Buchstaben oder einer Ziffer. Eindeutig innerhalb der Datei
kinddurable, der derzeit einzige Typ
socketDer absolute Pfad des privaten Unix-Sockets des Durable Agent auf diesem Rechner. Nicht zusammen mit url
urlDie Adresse eines Durable Agent, den Sie hinter TLS bereitgestellt haben. Nicht zusammen mit socket und stets mit token
tokenDas Bearer-Token, das Collie an url sendet. Nur zusammen mit url (Tokens)

Die Bridge liest die Datei beim Start, daher wird ein Eintrag nach einem Neustart wirksam. Ihre Terminals sehen wie zuvor aus und funktionieren wie zuvor, neben den langlebigen Agenten.

Collie prüft die Datei streng, denn ein stillschweigend übersprungener langlebiger Agent würde niemals erscheinen:

  • Ein Feld, das die Tabelle nicht benennt, stoppt die Bridge. Ebenso ein falsches kind, ein Name, der gegen die Regel verstößt, ein doppelt vergebener Name, sowohl socket als auch url, keines von beiden oder ein url ohne token.
  • Eine fehlerhafte Datei stoppt die Bridge beim Start mit einer einzigen Zeile. Die Zeile beginnt mit [bridge] FATAL: und nennt den Eintrag sowie das Feld. collie logs zeigt dies an. attach und detach weigern sich zudem, eine Datei zu überschreiben, die sie nicht lesen können; ein Tippfehler kostet Sie also nie Ihre anderen Einträge.
  • Die Datei wird im Modus 0600 gehalten. attach schreibt sie so. Wenn die Datei weiter gefasste Rechte hat, schränkt die Bridge diese beim Start ein und vermerkt dies im Protokoll.
  • Ein Name darf nicht der Ihrer Terminal-Sitzung sein. Das ist default bei den meisten Installationen, und auf einer reinen Durable-Instanz ist default der Name des eigenen langlebigen Agenten. Die Bridge stoppt beim Start und nennt den Eintrag.
  • Ein langlebiger Agent behält seinen Namen gegenüber einer Herdr-Sitzung. Wenn eine Herdr-Sitzung den Namen eines langlebigen Agenten trägt, zeigt das Telefon den langlebigen Agenten an, blendet diese Herdr-Sitzung aus und das Protokoll vermerkt dies einmalig.

attach prüft den Socket-Pfad, die URL und das Token nach den unten stehenden Regeln. Ein manuell verfasster Eintrag wird geprüft, sobald die Bridge den langlebigen Agenten erreicht: Eine verletzte Regel zeigt den langlebigen Agenten dann als nicht erreichbar an, zusammen mit dem Grund.

Zwei Wege, einen langlebigen Agenten zu erreichen

Privater Sockethttps mit einem Token
Wo der langlebige Agent läuftDiese Maschine, als Ihr BenutzerÜberall, wo Sie es bereitstellen
Was andere abhältDas Socket gehört Ihnen, Modus 0600Das Token, und nur das Token
Wer als Ihr Telefon agieren kannJeder Prozess Ihres BenutzersJeder, der das Token besitzt
Wie oft Collie anfragtAlle 1 s, während ein Telefon zuschaut, sonst alle 3 sAlle 2 s, während ein Telefon zuschaut, sonst alle 10 s

Der Socket-Transport ist für Linux und macOS gedacht. Verwenden Sie unter Windows die URL und das Token. Der Socket-Pfad muss absolut sein und darf höchstens 103 Bytes umfassen. Halten Sie ihn unter $XDG_RUNTIME_DIR, nicht /tmp: Der Collie-Dienst läuft unter Linux mit einem privaten /tmp.

Collie verbindet sich nur dann mit einem Socket, wenn der gesamte Pfad privat ist, da der Socket kein Token überträgt. Der Socket gehört Ihnen, ohne Berechtigungen für Gruppe oder Andere. Sein Ordner gehört Ihnen mit Modus 0700. Kein Teil des Pfads ist ein Symlink, und kein übergeordneter Ordner ist für Gruppe oder Andere beschreibbar, außer ein Sticky-Ordner wie /tmp. Das SDK erstellt den Ordner des Sockets mit Modus 0700, falls er nicht existiert.

Die URL muss mit https:// beginnen. Die einzige Ausnahme ist http://127.0.0.1:<port> oder http://localhost:<port>, mit einem Port, für einen langlebigen Agenten auf demselben Rechner. Collie weist jede andere http://-Adresse ab, da das Token unverschlüsselt über das Netzwerk übertragen würde.

Achtung. Über HTTPS ist das Token die einzige Schranke. Jeder, der es besitzt, kann jede Unterhaltung lesen und jede Frage beantworten, und der Host sieht den Text. Ein auf diesem Weg erreichter langlebiger Agent sollte nur Allow und Deny anbieten, niemals ein Always-Allow.

Sicherheit langlebiger Agenten bestimmt, was ein langlebiger Agent tun kann und was Collie protokolliert.

Jede Abfrage über HTTPS ist eine Anfrage, die Ihr Host möglicherweise abrechnet, und eine Antwort mit „keine Änderungen“ zählt ebenfalls. Wenn kein Telefon geöffnet ist, erfolgt die Leerlaufabfrage alle 10 s; Collie fragt also 8.640 Mal am Tag an. Prüfen Sie, was der Tarif Ihres Hosts dafür vorsieht.

Ein langlebiger Agent hinter einer URL muss das Collie-Übertragungsprotokoll bedienen und das Bearer-Token prüfen. Eine unveränderte Pi-Durable-Demo tut keines von beidem, sodass Collie sie nicht ohne Weiteres anbinden kann.

Collie fragt einen gehosteten langlebigen Agenten regelmäßig ab. Es fragt alle 2 s an, solange ein Telefon zusieht, andernfalls alle 10 s. Jede Abfrage weckt ein ruhendes Durable Object auf, sodass ein gehostetes Objekt wach bleibt, während Collie zusieht. Das Protokoll nutzt kein WebSocket, daher nützen die Hibernation- und WebSocket-Funktionen von Durable Objects hier nichts.

Das Cloudflare-Beispiel ist zurückgestellt und nicht Teil eines Releases. Es befindet sich in experiments/durable-member-cloudflare/.

Die drei Verben

attach, detach und list ändern oder lesen sources.json, und sie starten nichts neu, sofern nicht angefordert.

collie durable attach <name> --socket <path> [--restart]
collie durable attach <name> --url <url> --token-env <VAR> [--restart]
collie durable detach <name> [--restart]
collie durable list
VerbFlagsWas ausgegeben wirdExit-Code
attach <name>--socket <path> oder --url <url> mit --token-env <VAR>. --restart. Ein Flag nimmt seinen Wert als nächstes Wort oder nach = entgegenadded <name> in <path> oder updated <name> in <path> für einen bereits vorhandenen Namen. Dann restart to apply: collie restart und die URL, die Sie auf Ihrem Telefon öffnen0 geschrieben. 2 ein Verwendungsfehler oder ein Pfad, eine URL oder ein Token, das eine Regel verletzt. 1 die Datei kann nicht gelesen werden. Mit --restart der Code des Neustarts
detach <name>--restartremoved <name> from <path>, dann restart to apply: collie restart0 entfernt. 2 ein Verwendungsfehler. 3 kein Durable Agent mit diesem Namen. 1 die Datei kann nicht gelesen werden. Mit --restart der Code des Neustarts
listkeinerEine Zeile pro Durable Agent: sein Name, socket <path> oder url <url> (token set) und sein Status. no durable agents attached (<path>), wenn die Datei leer ist oder fehlt0. 1 die Datei kann nicht gelesen werden

collie durable ohne Verb oder mit einem unbekannten Verb gibt die Verwendung aus und beendet mit 2. Mit --restart führen attach und detach denselben Neustart wie collie restart aus.

list fragt die laufende Bridge nach jedem Eintrag ab und wartet maximal 3 s darauf:

StatusBedeutung
loadedDie laufende Bridge hat diesen Eintrag geladen. Dies ist die Aussage der Bridge, nicht die des Durable Agents: Der Durable Agent ist möglicherweise noch nicht erreichbar. collie doctor fragt den Durable Agent ab
not loaded (restart to apply)Die Bridge wurde gestartet, bevor Sie sie angehängt haben. Führen Sie collie restart aus
refused (<status>)Die Bridge hat mit diesem HTTP-Status statt mit einem Status geantwortet
bridge not answeringKeine Antwort innerhalb von 3 s: Collie ist gestoppt oder ausgelastet. collie status zeigt, ob es läuft

Wenn ein Durable Agent nicht erscheint, führen Sie collie doctor aus, das die fehlschlagende Prüfung benennt. Die drei häufigsten Ursachen sind ein noch nicht geladener Eintrag (Neustart), ein nicht privater Socket (socket-not-private) und eine verwaiste Socket-Datei nach einem Absturz (connection refused: löschen Sie diese und starten Sie den Durable Agent). Fehlerbehebung für Durable Agents behandelt die Fälle für Durable Agents. Fehlerbehebung deckt Collie insgesamt ab.

Tokens

Ein url-Eintrag enthält sein Token, und das Token ist die gesamte Zugangskontrolle.

openssl rand -hex 32

Das Ergebnis sind 64 Hex-Zeichen, mehr als die Mindestgrenze von 32 Bytes.

Erstellen Sie das Token mit 32 oder mehr Zufallsbytes wie oben beschrieben und übergeben Sie dem Durable Agent denselben Wert. attach liest ihn aus der Variablen, die --token-env benennt, sodass er in keiner Befehlszeile und in keinem Shell-Verlauf steht. Diese Variable muss gesetzt sein, wenn Sie attach ausführen.

attach kopiert den Wert im Klartext in sources.json. Die Datei ist daher genauso geheim wie das Token: Collie behält sie im Dateimodus 0600, und ein Backup oder ein Abgleich des Konfigurationsordners überträgt das Token. Collie sendet das Token mit jeder Anfrage und gibt es niemals aus: list besagt (token set).

die Regel
Token32 bis 4096 Bytes nach dem Trimmen, druckbares ASCII ohne Leerzeichen
URLhttps:// oder http://127.0.0.1:<port> oder http://localhost:<port> mit einem Port. Maximal 2048 Bytes. Kein Benutzername oder Passwort, keine Query, kein Fragment. Nur die Basis des Durable Agents: Collie fügt /session/v1 selbst an

Das Token läuft nicht ab. Um es zu ändern, führen Sie attach mit demselben Namen und dem neuen Token erneut aus und starten Sie dann neu:

export EDGE_TOKEN=your-new-32-byte-random-token-here
collie durable attach edge --url https://edge.example.com --token-env EDGE_TOKEN
collie restart

attach gibt updated edge aus. Übergeben Sie dem Durable Agent das neue Token, bevor Sie Collie neu starten, andernfalls meldet das Telefon, dass der Durable Agent das Token abgelehnt hat. Ein Durable Agent kann während einer Rotation ein zweites Token akzeptieren, damit keine Seite ausgesperrt wird. Das geparkte Cloudflare-Beispiel nimmt COLLIE_TOKEN und, solange es gesetzt ist, COLLIE_TOKEN_NEXT entgegen (ADR 0103). Setzen Sie das neue Token als COLLIE_TOKEN_NEXT am Durable Agent, führen Sie attach erneut aus, starten Sie Collie neu, verschieben Sie den Wert dann nach COLLIE_TOKEN und entfernen Sie COLLIE_TOKEN_NEXT.

Ein einzelner Durable Agent in einem Collie

Eine Instanz ohne Terminal, wie ein Windows-Host oder ein gehosteter Durable Agent, kann einen Durable Agent über ihre .env ansteuern.

# a durable agent on this machine, as you
COLLIE_MUX=durable
COLLIE_DURABLE_SOCKET=/run/user/1000/durable/session.sock

# or a durable agent you deployed behind TLS
COLLIE_MUX=durable
COLLIE_DURABLE_URL=https://durable-member.example.com
COLLIE_DURABLE_TOKEN=your-32-byte-random-token-here

Eine solche Instanz benennt ihren Durable Agent default, und dieser Durable Agent ist ihre primäre Sitzung. Einträge in sources.json laufen weiterhin daneben unter anderen Namen.

.envconfig.tomlwas er enthält
COLLIE_MUX=durable[mux] muxMacht diese Instanz zu einer reinen Durable-Instanz
COLLIE_DURABLE_SOCKET[mux] durable_socketDer private Socket des Durable Agents. Nicht zusammen mit der URL
COLLIE_DURABLE_URL[mux] durable_urlDie Adresse des Durable Agents hinter TLS. Immer zusammen mit dem Token
COLLIE_DURABLE_TOKEN[mux] durable_tokenDas Bearer-Token für die URL. Eine Datei, die es enthält, muss Dateimodus 0600 haben

Setzen Sie entweder den Socket oder die URL mit ihrem Token, niemals beides. Sind beide gesetzt, eine URL ohne Token oder ein Token ohne URL angegeben, liegt ein Konfigurationsfehler vor: Collie startet, nennt den Fehler im Protokoll und zeigt den Durable Agent mit dieser Begründung als nicht erreichbar an.

Ein älterer Build speicherte die Protokolle einer reinen Durable-Instanz direkt in <state>/durable/. Beim ersten Start dieses Builds werden sie einmalig nach durable/default/ verschoben, mit einer Zeile im Protokoll.

Um das Token zu ändern, übertragen Sie das neue Token auf den Durable Agent, tragen Sie es in .env ein und führen Sie collie restart aus. Eine reine Durable-Instanz tritt einem Crew unter ihrem Hostnamen bei; vergeben Sie daher mit collie crew join <lead-address> --label durable einen Namen, wenn sie sich einen Host mit der primären Instanz teilt.

Um jeden Durable Agent aus sources.json vorübergehend abzuschalten, setzen Sie COLLIE_PROGRAMS=off in .env und führen Sie collie restart aus. Die Bridge ignoriert die Datei daraufhin, protokolliert eine Zeile und läuft wie eine Installation ohne Durable Agents, sodass das Telefon keinen Bereich für Durable Agents anzeigt. collie doctor und collie durable list melden, dass Durable Agents deaktiviert sind. Die Datei bleibt unverändert: Entfernen Sie die Variable und starten Sie neu, um die Durable Agents wieder zu aktivieren. Die Variable betrifft das alte Format über Umgebungsvariablen oben nicht.

Wo Collie die Daten eines Durable Agents speichert

Der Durable Agent speichert den Verlauf seiner Unterhaltungen. Collie hält einen Cache, seine Quittungen und seinen Push-Speicher im Statusordner vor.

Der Statusordner ist ~/.local/state/collie/, oder COLLIE_STATE_DIR, falls gesetzt. <program> ist der Name in sources.json, oder default. Der Ordner jedes Durable Agents hat Dateimodus 0700, und jedes Protokoll hat Dateimodus 0600.

Dateiwas er enthältWie lange
durable/<program>/<id>.jsonlDie Kopie einer aktiven Unterhaltung in Chat, wobei <id> die ID der Unterhaltung in base64url istAb 8 MiB wird sie auf die neuesten 2000 Nachrichten gekürzt. Alle Protokolle zusammen bleiben unter 256 MiB: Die älteste Unterhaltung wird zuerst entfernt, mit einer Zeile im Protokoll
durable/<program>/<id>.cursor.jsonWo Collie mit dem Lesen aufgehört hat, damit nach einem Neustart dort fortgefahren wirdSo lange wie sein Protokoll
answer-receipts.jsonJede Antwort, die ein Telefon gesendet hat: ihre Anfrage-ID, die beantworteten IDs und das Ergebnis. Kein eingegebener TextEine Woche, maximal die neuesten 1000. Eine Antwort, die noch übertragen wird, bleibt mindestens einen Tag erhalten
control-receipts.jsonJede Sende-, Steuerungs-, Stopp- und Gürtel-Aktion: ihre Anfrage-ID und das Ergebnis. Der Text nur als DigestWie oben
starter-receipts.jsonJedes Antippen eines Starters und die dadurch geöffnete UnterhaltungWie oben
durable-asks.jsonWelche Fragen bereits per Push gesendet wurden, nach Host, Durable Agent und Werkzeugaufruf, damit nach einem Neustart nichts doppelt gesendet wirdEine Stunde nach dem Schließen der Frage. Maximal 2000

Der Cache ist der Grund, warum Chat schnell öffnet und funktioniert, während der Durable Agent langsam ist. Eine geschlossene Unterhaltung wird immer vom Durable Agent gelesen, niemals aus dem Cache.

Ein Durable Agent behält nur den neuesten Teil einer langen Unterhaltung. Wenn er den Anfang einer Unterhaltung verworfen hat, bevor Collie ihn lesen konnte, zeigt Chat an dieser Stelle eine Zeile an: "Ältere Nachrichten wurden ausgelassen: Der Durable Agent speichert sie nicht mehr." Auf Ihrem Telefon ging nichts verloren: Collie hatte diese Nachrichten nie.

Anzeige auf dem Telefon

Ein Bereich für Durable Agents in der Übersicht und für jeden Durable Agent eine Liste seiner Unterhaltungen.

Jeder Durable Agent ist eine Zeile im Bereich für Durable Agents, mit seinem Namen, einer Kennzeichnung für experimentelle Funktionen, seiner Laufzeit und der Angabe, ob er hier oder anderswo läuft. Rechts zählt er seine offenen Unterhaltungen und in der Signalfarbe für erforderliche Eingaben jene, die auf Sie warten. Der Bereich verschiebt sich über Ihre Spaces, während eine Frage offen ist. Ein Durable Agent, der startet oder nicht erreichbar ist, zeigt dies anstelle der Zähler an. Ein abgelehntes Token und eine abgelehnte Protokollversion haben eigene Meldungen auf dem Telefon; collie doctor nennt jeden anderen Grund.

Tippen Sie auf eine Zeile, um die Unterhaltungsliste des Durable Agents zu öffnen, ähnlich der Chatliste eines Messengers. Was auf Sie wartet, steht an erster Stelle, danach die übrigen offenen Unterhaltungen, dann die geschlossenen unter der Bezeichnung Geschlossen. Eine offene Unterhaltung öffnet sich in Chat, eine geschlossene schreibgeschützt. Ein Durable Agent meldet in seinem Handshake, was er unterstützt (asks, starters, send, steer, abort, rename, close, actions, history, reopen), und das Telefon stellt nur für das Gemeldete ein Bedienelement dar. Ein Durable Agent hat keinen Bildschirm, daher gibt es weder eine Terminal-Ansicht noch Tastatureingaben.

Beim Senden an einen Durable Agent ist die Kennzeichnung in Warteschlange Collies eigene Interpretation des Vorgangs. Collie zeigt nicht an, was im Posteingang von Pi wartet. Eine Aufgabe, die bis zu einer Frist pausiert, wird als untätig oder arbeitend angezeigt, niemals als wartend. Sitzungen enthält weitere Details.

Eine Fragekarte nennt den Durable Agent und zeigt die verbleibende Zeit, wenn der Durable Agent eine gesetzt hat. Eine im Durable Agent entschiedene oder abgelaufene Frage hinterlässt eine Zeile im Chat. Persistente Agenten auf dem Smartphone zeigt jedes davon mit einer Abbildung.

Senden und Fragen über die Bridge

Ein Durable Agent hat keinen Bildschirm, daher liest Collie keinen Bildschirm für ihn aus. Die Bridge liest stattdessen ihren eigenen Zustand. Ein Durable Agent erhält dieselben Send- und Ask-Vorgänge wie ein Terminalbereich.

  • Der Zustand. Der Spielzug stammt aus seinem Bereichszustand. Eine Frage stammt aus seiner ältesten offenen Anfrage. Das Eingabefeld ist immer leer, da ein Durable Agent kein Feld besitzt. Das Telefon erhält diesen Zustand mit jedem Bereich in derselben Form wie für einen Terminalbereich.
  • Ein Sendevorgang. POST /api/send nimmt eine Anforderungs-ID vom Telefon entgegen. Die Bridge schreibt die Anforderung auf die Festplatte und sperrt die Konversation. Dann sendet sie den Text einmalig an den Durable Agent für den Spielzug, den sie gelesen hat. Seine Antwort ist der Nachweis, und die Quittung nennt die übernommene Anforderungs-ID. Während eines Spielzugs behält der Durable Agent den Text für die Zeit nach diesem Spielzug, und die Quittung lautet queued.
  • Die Ergebnisse. Ein Sendevorgang endet mit sent, refused mit einer Begründung oder mit unknown. unknown bedeutet, dass der Durable Agent die Übernahme des Texts nicht bestätigt hat. Lesen Sie den Chat, bevor Sie ihn erneut senden. Ein Sendevorgang wird zu effective, wenn der Durable Agent ihn in die Konversation schreibt. Sein Eintrag user nennt die Anforderungs-ID dieses Sendevorgangs. Ein einfacher Sendevorgang wird abgelehnt, solange eine Frage offen ist, selbst wenn Collie sie nicht lesen kann. Beantworten Sie die Frage oder verwenden Sie Steer oder Stop. Ein Spielzug, der nach Ihrem Blick darauf begann, lehnt den Sendevorgang ab, und nichts erreicht den Durable Agent.
  • Eine Frage. POST /api/ask/<id> beantwortet sie. Die Anfrage-ID ist nur für die einmalige Verwendung bestimmt. Die Antwort übermittelt den Hash der Frage, die Sie gesehen haben. Die Bridge vergleicht ihn mit der Frage, die der Durable Agent jetzt auflistet. Wenn sich beide unterscheiden, erreicht nichts den Durable Agent. Die Rückmeldung zeigt die Frage in ihrem aktuellen Zustand. Die Antwort geht über ihre eigene Anfrage-ID an den Durable Agent. Es wird niemals ein Schlüssel gesendet. Die Quittung lautet channel: program und behält den Hash.
  • Was auf der Karte verbleibt. Manche Fragen passen nicht zu einem einzelnen Antippen, daher zeigt der Zustand sie als Frage an, die Collie nicht lesen kann (modal: unreadable). Sie beantworten sie auf ihrer eigenen Karte. - Eine Textfrage verbleibt auf der eigenen Karte des Durable Agent, da die Antwort eine eingegebene Zeile ist. - Eine Auswahl aus mehreren Optionen verbleibt auf der eigenen Karte des Durable Agent, da die Antwort aus mehr als einer Auswahl besteht. - Ein Formular verbleibt auf der eigenen Karte des Durable Agent, da die Antwort aus einer Reihe von Feldern besteht. - Immer erlauben ist niemals eine Vertragsoption. Seine Genehmigung gilt über diese Frage hinaus. Daher verlangt die Karte des Durable Agent zuerst ein zweites Antippen, und ein einzelnes Antippen über /api/ask darf dieses Antippen nicht überspringen.
  • Die Zähler. collie doctor zählt diese Lesevorgänge und Ergebnisse in einer Zeile, program.

Auf diesem Rechner verwendet das Telefon diese Routen. Ein einfacher Sendevorgang läuft über /api/send, und ein Antippen auf der Fragekarte läuft über /api/ask. Das Eingabefeld meldet das Ergebnis direkt am Daumen mit den Worten des Durable Agent. Wenn eine Frage das Senden blockiert, führt eine Schaltfläche zu ihrer Karte. Die Liste der letzten Sendevorgänge des Bereichs zeigt jede Quittung, und ein eingereihter Sendevorgang ist entsprechend gekennzeichnet. Steer und Stop verbleiben auf den eigenen Routen der Konversation, da eine Steuerung nicht Teil des Sendeprotokolls ist. Ein Durable Agent auf einem Teammitglied behält die eigenen Routen der Konversation für alle Schreibvorgänge bei. Jede Route prüft den Spielzug, bevor der Text den Durable Agent erreicht. Alle Schreibvorgänge auf eine Konversation teilen sich eine Sperre. Während ein Sendevorgang läuft, werden Steer und eine Kartenantwort als beschäftigt abgelehnt. Stop wartet auf die Sperre, höchstens bis zu seinem Zeitlimit, sodass ein hängender Sendevorgang Stop niemals aussperrt.

Versionen

Collie und ein Durable Agent vereinbaren beim Hello eine Wire-Version, und derzeit gibt es eine: Version 1.

Collie spricht 1..1. Wenn eine Version 2 erscheint, akzeptiert Collie die Version 1 noch für eine Minor-Version danach; die darauffolgende Minor-Version entfernt sie. Derzeit gibt es keine vorherige Version, die akzeptiert werden könnte.

Wenn sich die beiden Bereiche nicht überschneiden, liest Collie nichts mehr vom Durable Agent. Sein Protokoll erhält eine Zeile für jeden abgelehnten Bereich, wie etwa [durable] The durable agent speaks wire v2, this Collie speaks v1. Update Collie, or the agent's SDK.. Die Startseite des Durable Agent auf dem Telefon zeigt denselben Satz in einem Warnfeld, und seine Zeile im Dashboard zeigt Versionskonflikt statt Nicht erreichbar. collie doctor zeigt beide Bereiche in der Zeile durable-hello: incompatible: the durable agent speaks 2..3, this Collie speaks 1..1. Einmal pro Start des Durable Agent sendet Collie ihm außerdem ein hello mit der eigenen Version, damit der Durable Agent den Konflikt auf seiner Seite protokollieren kann. Aktualisieren Sie die ältere Seite.

Das Beenden

Die Funktion bleibt nur bestehen, wenn jemand außerhalb dieses Repositorys sie verwendet.

Bis zum Release 1.24.0 muss eine von zwei Bedingungen erfüllt sein: Es existiert ein öffentliches Repository, das das Wire-Protokoll spricht, oder es existiert ein externes Issue oder eine Diskussion über einen Durable Agent. Trifft beides nicht zu, wird der Durable-Code aus dem Release nach experiments/ verschoben, und diese Seite entfällt (ADR 0104). Bei der Entfernung wird ein Eintrag sources.json mit einer Protokollzeile für ein Release ignoriert, der Socket funktioniert weiterhin für Ihren Durable Agent, und das npm-Paket wird als veraltet markiert, nicht gelöscht (ADR 0105).

Diese Seite auf GitHub bearbeiten

The rest of the documentation