İçeriğe atla
ColliePWA

05/Documentation

Dayanıklı aracılar (deneysel)

Kendi dayanıklı aracınızı telefonunuzda gösterin: hızlı başlangıç, collie durable attach ve sources.json, üç eylem, belirteçler, Collie'nin tuttuğu dosyalar ve sürümler

Deneysel. Kablo protokolü, SDK ve bu sayfa değişebilir veya bu özellik sonraki bir alt sürümde kaldırılabilir. Şu anda yalnızca Collie'nin kendi örnekleri kablo protokolünü konuşur. Çıkış, kalıp kalmayacağını neyin belirlediğini açıklar. Kalıcı bir araç bağlamazsanız Collie eskisi gibi görünür ve çalışır.

Pi Durable veya kablo protokolünü sunan herhangi bir programla kalıcı bir araç geliştirdiyseniz Collie bunu telefonunuzda gösterebilir. Herhangi bir UI kodu olmadan onay istemleri, geçmiş ve sohbet görünümü elde eder.

Durable agent, bir oturum kaynağı olabilir ve her görüşmesi bir oturumdur. Terimler Terminoloji içindedir. Collie hiçbir model anahtarı tutmaz: durable agent kendi API anahtarını veya bir ChatGPT oturum açmasını kullanır; Anthropic aboneliği ise üçüncü taraf bir teçhizat üzerinden kullanılamaz.

Hızlı başlangıç

On satırlık bir durable agent, bir collie durable attach ve telefonunuzda bir soru kartı.

Bu makinede çalışan Collie 1.22.0 veya sonraki bir sürüme ve telefonunuzun eşleşmiş olmasına (Yükleme) ihtiyacınız vardır.

Durable agent Linux veya macOS üzerinde, Node 22.19 veya üzeri ya da Bun 1.4 veya üzeri ile çalışır. SDK'yı durable agent'ınızın klasörüne kurun:

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

Paket npm dist-tag experimental altında yayımlanır, asla latest altında yayımlanmaz ve ADR 0104 içindeki çıkışı izler: durable wire kaldırılırsa paket kullanımdan kaldırılır (ADR 0105).

SDK'nın Pi Durable girişi, Pi Durable 1.1.0 ve 1.2.0 ile test edilmiştir. Node 22.19, Pi Durable 1.2.0 için taban sürümdür.

Bu durable agent'ı hello.mjs olarak kaydedin. On satırdır:

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();

node hello.mjs veya bun hello.mjs ile çalıştırın. listening /run/user/1000/hello/app.sock yazdırır ve bekler. Aynı durable agent, bir Collie klonunda examples/durable-member/hello.ts durumundadır.

Node üzerinde önce bir satır daha yazar: Node, durable agent soketine kimin bağlandığını okuyamaz, bu nedenle kullanıcınızın herhangi bir işlemi sorusunu yanıtlayabilir. Linux üzerindeki Bun bunu okuyabilir; durable agent'ın kendisinden veya başlattığı bir işlemden gelen yanıtı reddeder.

macOS üzerinde Node ile çalıştırın. Oradaki Bun, bu durable agent'ın ayarlamadığı callerCheck: "off" değerine ihtiyaç duyar. macOS üzerinde XDG_RUNTIME_DIR yoktur, bu nedenle önce COLLIE_DURABLE_SOCKET değerini mutlak bir yola ayarlayın.

İkinci bir terminalde bunu Collie'nize bağlayın, ardından Collie'nin yeni girişi okuması için yeniden başlatın:

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

Durable agent'ınızın yazdırdığı yolu kullanın. Aynı adımda yeniden başlatmak için ilk komuta --restart ekleyin. --restart Collie köprüsünü yeniden başlatır: telefonunuz birkaç saniye içinde yeniden bağlanır ve terminal oturumlarınız çalışmaya devam eder.

Telefonunuzda Collie'yi açın. Durable agents bölümünde bir Experimental rozeti ve bekleyen bir soru ile birlikte tek bir satır, hello, gösterilir. Satıra dokunun: durable agent'ın görüşme listesinde açılır ve burada Deploy görüşmesi "Deploy to staging?" ile bekler. Açın ve Yes veya No seçeneğine dokunun. Durable agent yanıtınızı yazdırır ve çıkar.

Kendi durable agent'ınızı yazmak için Durable SDK ve Durable wire belgelerini okuyun.

Bir durable agent bağlayın

Her durable agent, sources.json içinde tek bir giriştir ve bunu collie durable attach yazar.

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

Windows üzerinde yalnızca HTTPS biçimi kullanılabilir: attach --socket, çıkış kodu 2 ile işlemi reddeder ve özel bir soket Unix kullanıcı kimliklerine ihtiyaç duyduğu için --url ile --token-env kullanılması gerektiğini belirtir.

sources.json, yapılandırma klasöründe .env yanında yer alır: Herdr tarafından yönetilen bir kurulumda Herdr eklenti yapılandırma klasöründe (~/.config/herdr/plugins/config/herdr.collie/), aksi takdirde ~/.config/collie/ içindedir. attach, yazdığı yolu ekrana basar. Yukarıdaki iki komut bu dosyayı yazar:

[
  { "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"
  }
]
alaniçerdikleri
nameDurable agent'ın telefondaki adı ve günlük klasörünün adı. 1 ila 32 karakter: bir harf veya rakamla başlayan küçük harfler, rakamlar ve kısa çizgiler. Dosya içinde benzersiz olmalıdır
kinddurable, günümüzdeki tek tür
socketDurable agent'ın bu makinedeki özel Unix soketinin mutlak yolu. url ile birlikte kullanılmaz
urlTLS arkasında dağıttığınız bir durable agent'ın adresi. socket ile birlikte kullanılmaz ve her zaman token ile kullanılır
tokenCollie'nin url hedefine gönderdiği bearer token. Yalnızca url (Belirteçler) ile kullanılır

Köprü, dosyayı başlangıçta okur; bu nedenle bir girdi yeniden başlatmanın ardından geçerli olur. Terminalleriniz, durable agent'ların yanında eskisi gibi görünür ve çalışır.

Collie dosya konusunda katıdır, çünkü sessizce atladığı bir durable agent hiçbir zaman görünmez:

  • Tabloda belirtilmeyen bir alan köprüyü durdurur. Hatalı bir kind, kuralı ihlal eden bir ad, iki kez kullanılan bir ad, hem socket hem url, ikisi de yoksa veya token içermeyen bir url için de durum aynıdır.
  • Hatalı bir dosya, başlangıçta köprüyü tek bir satırla durdurur. Satır [bridge] FATAL: ile başlar ve girdiyi ve alanı adlandırır. collie logs bunu gösterir. attach ve detach de okuyamadıkları bir dosyanın üzerine yazmayı reddeder, böylece bir yazım hatası diğer girdilerinize asla mal olmaz.
  • Dosya 0600 modunda tutulur. attach dosyayı bu şekilde yazar. Dosya daha geniş izinlere sahip olduğunda, köprü başlangıçta izinleri daraltır ve bunu günlüğünde belirtir.
  • Bir ad, terminal oturumunuzun adıyla aynı olamaz. Bu, çoğu kurulumda default değeridir ve yalnızca durable çalıştıran bir örnekte default, kendi durable agent'ının adıdır. Köprü başlangıçta durur ve girdiyi belirtir.
  • Bir durable agent, adını bir Herdr oturumuna karşı korur. Bir Herdr oturumu bir durable agent ile aynı ada sahip olduğunda, telefon durable agent'ı gösterir, bu Herdr oturumunu gizler ve günlük bunu bir kez belirtir.

attach soket yolunu, URL'yi ve belirteci aşağıdaki kurallara göre denetler. Elle yazılan bir girdi, köprü durable agent'a ulaştığında denetlenir: ihlal edilen bir kural, durable agent'ı nedeni ile birlikte erişilemez olarak gösterir.

Bir durable agent'a ulaşmanın iki yolu

özel soketbelirteçli https
Durable agent'ın çalıştığı yerbu makine, kullanıcınız olarakdağıttığınız herhangi bir yer
Diğerlerini dışarıda tutan şeysoket size aittir, kip 0600belirteç ve yalnızca belirteç
Telefonunuz olarak kimler işlem yapabilirkullanıcınıza ait herhangi bir işlembelirtece sahip olan herkes
Collie ne sıklıkla sorgularbir telefon izlerken her 1 sn'de bir, aksi halde her 3 sn'de birbir telefon izlerken her 2 sn'de bir, aksi halde her 10 sn'de bir

Soket aktarımı Linux ve macOS içindir. Windows'ta URL ve belirteç kullanın. Soket yolu mutlak ve en fazla 103 bayt olmalıdır. /tmp altında değil, $XDG_RUNTIME_DIR altında tutun: Linux üzerindeki Collie hizmeti özel bir /tmp ile çalışır.

Collie, bir sokete yalnızca yolun tamamı özel olduğunda bağlanır, çünkü soket bir belirteç taşımaz. Soket, grup veya diğer izinler olmaksızın size aittir. Klasörü 0700 modunda size aittir. Yolun hiçbir bölümü sembolik bağ değildir ve üzerindeki hiçbir klasör, /tmp gibi bir sticky dizin hariç, grup veya diğer kullanıcılar tarafından yazılabilir değildir. SDK, soketin klasörünü mevcut olmadığında 0700 moduyla oluşturur.

URL https:// ile başlamalıdır. Tek istisna, aynı makinedeki bir durable agent için bir bağlantı noktasıyla birlikte http://127.0.0.1:<port> veya http://localhost:<port> olmasıdır. Collie, başka herhangi bir http:// adresini reddeder, çünkü belirteç ağ üzerinden şifrelenmeden geçer.

Dikkat. https üzerinden belirteç tek kapıdır. Buna sahip olan herkes her konuşmayı okuyabilir ve her soruyu yanıtlayabilir; ana bilgisayar da metni görür. Bu yolla ulaşılan bir durable agent yalnızca Allow ve Deny seçeneklerini sunmalıdır, asla bir always-allow seçeneği sunmamalıdır.

Durable agent'lar için güvenlik, bir durable agent'ın ne yapabileceğini ve Collie'nin neyi günlüğe kaydettiğini belirtir.

https üzerinden yapılan her yoklama, ana bilgisayarınızın faturalandırabileceği bir istektir ve bir "nothing changed" yanıtı da sayılır. Hiçbir telefon açık olmadığında boşta yoklama her 10 saniyede bir çalışır, bu nedenle Collie günde 8.640 kez sorgular. Ana bilgisayarınızın planının buna ne kadar izin verdiğini kontrol edin.

Bir URL arkasındaki durable agent Collie aktarım protokolüne hizmet etmeli ve taşıyıcı belirteci denetlemelidir. Standart bir Pi Durable demosu ikisini de yapmaz, bu yüzden Collie onu olduğu gibi bağlayamaz.

Collie, barındırılan bir durable agent'ı yoklar. Bir telefon izlerken her 2 saniyede bir, aksi takdirde her 10 saniyede bir sorar. Her yoklama hazırda bekletilen bir Durable Object'i uyandırır, bu nedenle Collie izlerken barındırılan bir nesne uyanık kalır. Protokolde WebSocket yoktur, bu nedenle Durable Object'lerin hazırda bekletme ve WebSocket özellikleri burada işe yaramaz.

Cloudflare örneği askıya alınmıştır ve bir sürümün parçası değildir. experiments/durable-member-cloudflare/ içindedir.

Üç fiil

attach, detach ve list, sources.json dosyasını değiştirir veya okur; istenmedikçe hiçbir şeyi yeniden başlatmazlar.

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
fiilbayraklaryazdırdığı içerikçıkış kodu
attach <name>--socket <path> veya --token-env <VAR> ile --url <url>. --restart. Bir bayrak, değerini sonraki sözcük olarak veya = sonrasında alıradded <name> in <path> veya zaten mevcut bir ad için updated <name> in <path>. Ardından restart to apply: collie restart ve telefonunuzda açılacak URL0 yazıldı. 2 bir kullanım hatası veya bir kuralı ihlal eden bir yol, URL ya da belirteç. 1 dosya okunamıyor. --restart ile, yeniden başlatmanın kodu
detach <name>--restartremoved <name> from <path>, ardından restart to apply: collie restart0 kaldırıldı. 2 bir kullanım hatası. 3 bu adda kalıcı ajan yok. 1 dosya okunamıyor. --restart ile, yeniden başlatmanın kodu
listyokKalıcı ajan başına bir satır: adı, socket <path> veya url <url> (token set) ve durumu. Dosya boş veya eksik olduğunda no durable agents attached (<path>)0. 1 dosya okunamıyor

Herhangi bir fiil olmadan veya bilinmeyen bir fiille collie durable, kullanımı yazdırır ve 2 koduyla çıkar. --restart ile, attach ve detach komutları collie restart ile aynı yeniden başlatmayı çalıştırır.

list, çalışan köprüye her bir girdiyi sorar ve bunun için en fazla 3 sn bekler:

durumanlamı
loadedÇalışan köprü bu girdiyi yükledi. Bu köprünün ifadesidir, kalıcı ajanın değil: kalıcı ajan yine de erişilemez olabilir. collie doctor kalıcı ajana sorar
not loaded (restart to apply)Köprü siz bağlamadan önce başlatıldı. collie restart komutunu çalıştırın
refused (<status>)Köprü, bir durum yerine bu HTTP durumuyla yanıt verdi
bridge not answering3 sn içinde yanıt yok: Collie durduruldu veya meşgul. collie status çalışıp çalışmadığını gösterir

Bir kalıcı ajan görünmediğinde, başarısız olan denetimi belirten collie doctor komutunu çalıştırın. En yaygın üç neden: henüz yüklenmemiş bir girdi (yeniden başlatın), gizli olmayan bir soket (socket-not-private) ve bir çökmeden kalan eski bir soket dosyasıdır (connection refused: silin ve kalıcı ajanı başlatın). Kalıcı ajanlar için sorun giderme kalıcı ajan durumlarını kapsar. Sorun giderme Collie'yi bir bütün olarak kapsar.

Belirteçler

Bir url girdisi kendi belirtecini taşır ve belirteç tüm geçittir.

openssl rand -hex 32

Sonuç, 32 baytlık tabanın üzerinde, 64 onaltılık karakterdir.

Belirteci yukarıdaki gibi 32 rastgele bayt veya daha fazlası yapın ve kalıcı ajana da aynı değeri verin. attach, bunu --token-env bayrağının belirttiği değişkenden okur; böylece hiçbir komut satırında ve kabuk geçmişinde yer almaz. Bu değişken, attach komutunu çalıştırdığınızda ayarlanmış olmalıdır.

attach, değeri sources.json içine düz metin olarak kopyalar. Bu nedenle dosya da belirteç kadar gizlidir: Collie onu 0600 modunda tutar; yapılandırma klasörünün bir yedeği veya eşitlemesi belirteci de taşır. Collie belirteci her istekle birlikte gönderir ve asla yazdırmaz: list (token set) der.

kural
BelirteçKırpmadan sonra 32 ila 4096 bayt, boşluksuz yazdırılabilir ASCII
URLhttps:// veya bir bağlantı noktasıyla http://127.0.0.1:<port> ya da http://localhost:<port>. En fazla 2048 bayt. Kullanıcı adı veya parola yok, sorgu yok, parça yok. Yalnızca kalıcı ajanın kök adresi: Collie /session/v1 kısmını kendisi ekler

Belirtecin süresi dolmaz. Değiştirmek için attach komutunu aynı ad ve yeni belirteçle tekrar çalıştırın, ardından yeniden başlatın:

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, updated edge yazdırır. Collie'yi yeniden başlatmadan önce kalıcı ajana yeni belirteci verin; aksi takdirde telefon kalıcı ajanın belirteci reddettiğini bildirir. Bir kalıcı ajan, dönüşüm sürerken ikinci bir belirteci kabul edebilir; böylece hiçbir taraf kilitli kalmaz. Park edilmiş Cloudflare örneği COLLIE_TOKEN ve bu ayarlanmışken COLLIE_TOKEN_NEXT alır (ADR 0103). Kalıcı ajanda yeni belirteci COLLIE_TOKEN_NEXT olarak ayarlayın, attach komutunu tekrar çalıştırıp Collie'yi yeniden başlatın, ardından değeri COLLIE_TOKEN konumuna taşıyın ve COLLIE_TOKEN_NEXT ayarını kaldırın.

Tek bir Collie içinde yalnız bir kalıcı ajan

Windows ana bilgisayarı veya barındırılan bir kalıcı ajan gibi uçbirimi olmayan bir örnek, kendi .env üzerinden tek bir kalıcı ajanı yönetebilir.

# 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

Böyle bir örnek, durable agent'ını default olarak adlandırır ve bu durable agent onun birincil oturumu olur. sources.json içindeki girdiler yine de onun yanında, başka adlar altında çalışmaya devam eder.

.envconfig.tomliçerdikleri
COLLIE_MUX=durable[mux] muxBu örneği durable-only yapar
COLLIE_DURABLE_SOCKET[mux] durable_socketDurable agent'ın özel soketi. URL ile birlikte kullanılmaz
COLLIE_DURABLE_URL[mux] durable_urlDurable agent'ın TLS arkasındaki adresi. Her zaman token ile birlikte
COLLIE_DURABLE_TOKEN[mux] durable_tokenURL için taşıyıcı token. Bu token'ı içeren dosya 0600 modunda olmalıdır

Soketi veya token'ı ile birlikte URL'yi ayarlayın, asla ikisini birden ayarlamayın. İkisinin de ayarlanması, token olmadan bir URL veya URL olmadan bir token bir yapılandırma hatasıdır: Collie başlar, günlükte hatayı belirtir ve durable agent'ı bu nedenle erişilemez olarak gösterir.

Eski bir sürüm, durable-only bir örneğin günlüklerini doğrudan <state>/durable/ içinde tutuyordu. Bu sürümün ilk başlangıcında, günlükte tek bir satırla birlikte bir defaya mahsus olmak üzere durable/default/ içine taşınırlar.

Token'ı değiştirmek için yenisini durable agent'a dağıtın, .env içinde ayarlayın ve collie restart komutunu çalıştırın. Durable-only bir örnek, bir crew yapısına ana bilgisayar adı altında katılır; bu nedenle liderle aynı ana bilgisayarı paylaştığında collie crew join <lead-address> --label durable ile ona bir ad verin.

sources.json içindeki tüm durable agent'ları bir süreliğine kapatmak için .env içinde COLLIE_PROGRAMS=off ayarlayın ve collie restart komutunu çalıştırın. Köprü daha sonra dosyayı yok sayar, tek bir satır günlüğe kaydeder ve durable agent içermeyen bir kurulum olarak çalışır; böylece telefonda Durable agents bölümü gösterilmez. collie doctor ve collie durable list, durable agent'ların kapalı olduğunu belirtir. Dosya olduğu gibi kalır: durable agent'ları geri getirmek için değişkeni kaldırın ve yeniden başlatın. Değişken, yukarıdaki eski ortam değişkeni biçimine dokunmaz.

Collie'nin bir durable agent'ın verilerini tuttuğu yer

Durable agent, konuşmalarının kaydını tutar. Collie ise durum klasöründe bir önbellek, alındılarını ve iletim belleğini tutar.

Durum klasörü ~/.local/state/collie/ dizinidir veya ayarlandığında COLLIE_STATE_DIR dizinidir. <program>, sources.json içindeki addır veya default olur. Her durable agent'ın klasörü 0700 modundadır ve her günlük 0600 modundadır.

dosyaiçerdiklerine kadar süreyle
durable/<program>/<id>.jsonl<id> konuşmanın base64url biçimindeki kimliği olmak üzere, Chat'in canlı bir konuşmaya ait kopyası8 MiB aşıldığında en yeni 2000 mesaja kırpılır. Tüm günlükler birlikte 256 MiB altında kalır: günlükte tek bir satır belirtilerek önce en eski konuşma silinir
durable/<program>/<id>.cursor.jsonYeniden başlatmanın ardından oradan devam edebilmesi için Collie'nin okumayı bıraktığı yerGünlüğü kadar süreyle
answer-receipts.jsonBir telefonun gönderdiği her yanıt: istek kimliği, yanıtladığı kimlikler ve sonuç. Yazılan metin dahil değildirBir hafta, en fazla en yeni 1000 adet. İletilmekte olan bir yanıt en az bir gün kalır
control-receipts.jsonHer send, steer, stop ve belt eylemi: istek kimliği ve sonuç. Metin yalnızca özet olarakYukarıdaki gibi
starter-receipts.jsonHer başlatıcı dokunuşu ve açtığı konuşmaYukarıdaki gibi
durable-asks.jsonYeniden başlatmanın hiçbir şeyi iki kez iletmemesi için ana bilgisayara, durable agent'a ve araç çağrısına göre önceden iletilmiş sorularSoru kapandıktan bir saat sonra. En fazla 2000

Chat'in hızlı açılmasının ve durable agent yavaşken çalışabilmesinin nedeni önbellektir. Kapanan bir konuşma her zaman durable agent üzerinden okunur, asla önbellekten okunmaz.

Bir durable agent, uzun bir konuşmanın yalnızca en yeni kısmını tutar. Bir konuşmanın başlangıcını Collie okumadan önce sildiyse, Chat onun yerine tek bir satır gösterir: "Daha eski mesajlar dışarıda bırakıldı: durable agent artık bunları tutmuyor." Telefonunuzda hiçbir şey kaybolmadı: Collie bu mesajlara hiçbir zaman sahip olmadı.

Telefonun gösterdiği

Kontrol panelinde bir Durable agents bölümü ve her durable agent için konuşmalarının bir listesi.

Her durable agent, Durable agents bölümünde adı, bir Experimental rozeti, çalışma zamanı ve burada mı yoksa başka bir yerde mi çalıştığı bilgisiyle bir satırdır. Sağ tarafta açık konuşmalarını ve size ihtiyaç duyulan renkte, sizden yanıt bekleyenleri sayar. Bir soru beklerken bu bölüm alanlarınızın yukarısına taşınır. Başlatılmakta olan veya erişilemeyen bir durable agent, sayıların yerine bu durumu belirtir. Reddedilen bir token ve reddedilen bir hat sürümü telefonda kendi ifadelerine sahiptir; collie doctor diğer tüm nedenleri belirtir.

Durable agent'ın konuşma listesini, bir mesajlaşma uygulamasının sohbet listesi gibi açmak için bir satıra dokunun. İlk önce sizden yanıt bekleyenler gelir, ardından diğer açık konuşmalar, sonra da Kapalı etiketi altındaki kapatılmış olanlar gelir. Açık olan bir konuşma Chat içinde açılır, kapatılmış olan ise salt okunur açılır. Bir durable agent merhaba mesajında neler yapabileceğini belirtir (asks, starters, send, steer, abort, rename, close, actions, history, reopen) ve telefon yalnızca belirttikleri için bir denetim çizer. Bir durable agent'ın ekranı yoktur, bu nedenle Terminal görünümü ve yazılan tuşları bulunmaz.

Bir durable agent'a gönderim yapıldığında, kuyrukta etiketi Collie'nin sıraya ilişkin kendi yorumudur. Collie, Pi'nin gelen kutusunda neyin beklediğini göstermez. Bir son tarihe kadar uyuyan bir görev, hiçbir zaman bekliyor olarak değil, boşta veya çalışıyor olarak gösterilir. Oturumlar daha fazla bilgi içerir.

Bir soru kartı, durable agent'ı adlandırır ve durable agent bir süre belirlediyse kalan süreyi gösterir. Durable agent içinde karara bağlanan veya zaman aşımına uğrayan bir soru, sohbette bir satır bırakır. Telefonda dayanıklı aracılar bunların her birini bir görselle gösterir.

Köprü üzerinden Gönderme ve Sorma

Bir durable agent'ın ekranı yoktur; bu nedenle Collie onun için hiçbir ekran okumaz. Bunun yerine köprü kendi durumunu okur. Bir durable agent, bir terminal bölmesiyle aynı Gönderme ve Sorma işlemlerini alır.

  • Durum. Sıra, bölme durumundan gelir. Bir soru, en eski açık sorusundan gelir. Giriş kutusu her zaman boştur, çünkü bir durable agent'ın kutusu yoktur. Telefon bu durumu, bir terminal bölmesinde olduğu gibi aynı biçimde her bölmeyle birlikte alır.
  • Bir gönderme. POST /api/send telefondan bir istek kimliği alır. Köprü isteği diske yazar ve konuşmayı kilitler. Ardından metni, okuduğu sıra için durable agent'a bir kez gönderir. Yanıtı kanıttır ve makbuz aldığı istek kimliğini belirtir. Bir sıra sırasında durable agent metni o sıradan sonrası için saklar ve makbuzda queued yazar.
  • Sonuçlar. Bir gönderme sent, bir gerekçeyle refused veya unknown şeklinde sonuçlanır. unknown, durable agent'ın metni aldığını belirtmediği anlamına gelir. Tekrar göndermeden önce sohbeti okuyun. Durable agent bunu konuşmaya yazdığında gönderme effective haline gelir. user ögesi, o göndermenin istek kimliğini belirtir. Collie'nin okuyamadığı bir soru dahil olmak üzere herhangi bir soru açıkken düz gönderme reddedilir. Soruyu yanıtlayın veya Steer ya da Stop kullanın. Siz baktıktan sonra başlayan bir sıra göndermeyi reddeder ve durable agent'a hiçbir şey ulaşmaz.
  • Bir soru. POST /api/ask/<id> bunu yanıtlar. Soru kimliği yalnızca tek kullanımlıktır. Yanıt, gördüğünüz sorunun karmasını taşır. Köprü bunu durable agent'ın şu anda listelediği soruyla karşılaştırır. İkisi farklı olduğunda durable agent'a hiçbir şey ulaşmaz. Yanıt, soruyu şu anki haliyle gösterir. Yanıt, durable agent'a kendi soru kimliğiyle gider. Hiçbir anahtar asla gönderilmez. Makbuzda channel: program yazar ve karmayı saklar.
  • Kartta kalanlar. Bazı sorular tek bir dokunuşa sığmaz; bu nedenle durum bunları Collie'nin okuyamadığı bir soru olarak gösterir (modal: unreadable). Bunları kendi kartında yanıtlarsınız. - Bir metin sorusu durable agent'ın kendi kartında kalır, çünkü yanıt yazdığınız bir satırdır. - Çoklu seçenek durable agent'ın kendi kartında kalır, çünkü yanıt birden fazla seçimdir. - Bir form durable agent'ın kendi kartında kalır, çünkü yanıt bir dizi alandır. - Always allow hiçbir zaman bir sözleşme seçeneği değildir. İzni bu sorudan sonra da devam eder. Bu nedenle durable agent'ın kartı önce ikinci bir dokunuş ister ve /api/ask üzerinden tek bir dokunuş bu dokunuşu atlamamalıdır.
  • Sayaçlar. collie doctor bu okumaları ve sonuçları tek bir satırda sayar, program.

Bu makinede telefon şu rotaları kullanır. Düz bir gönderme /api/send üzerinden gider ve soru kartına dokunma /api/ask üzerinden gider. Yazıcı, sonucu durable agent'ın sözleriyle başparmakta bildirir. Bir soru göndermeyi engellediğinde, kartına bir düğme gider. Bölmenin Recent sends listesi her makbuzu gösterir ve sıraya alınmış bir gönderme bunu belirtir. Steer ve Stop konuşmanın kendi rotalarında kalır, çünkü bir steer işlemi Gönderme Protokolü'nün bir parçası değildir. Bir crew member üzerindeki durable agent, tüm yazmalar için konuşmanın kendi rotalarını korur. Her rota, metin durable agent'a ulaşmadan önce sırayı denetler. Bir konuşmaya yapılan tüm yazmalar tek bir kilidi paylaşır. Bir gönderme çalışırken Steer ve kart yanıtı meşgul olarak reddedilir. Stop kilidi en fazla kendi zaman sınırına kadar bekler; böylece takılan bir gönderme Stop'ı hiçbir zaman engellemez.

Sürümler

Collie ve bir durable agent hello aşamasında bir hat sürümü üzerinde anlaşır ve bugün bir tane vardır: sürüm 1.

Collie 1..1 konuşur. Bir sürüm 2 çıktığında Collie, ondan sonraki bir alt sürüm boyunca sürüm 1'i kabul edecek ve bir sonraki alt sürüm bunu bırakacaktır. Bugün kabul edilecek önceki bir sürüm yoktur.

İki aralık uyuşmadığında Collie durable agent'tan başka bir şey okumaz. Günlüğüne, reddettiği her aralık için [durable] The durable agent speaks wire v2, this Collie speaks v1. Update Collie, or the agent's SDK. gibi bir satır eklenir. Telefonda durable agent'ın ana sayfası aynı cümleyi bir uyarı kutusunda gösterir ve gösterge panosundaki satırında Unreachable yerine Version mismatch yazar. collie doctor her iki aralığı da durable-hello satırında gösterir: incompatible: the durable agent speaks 2..3, this Collie speaks 1..1. Durable agent'ın her başlatılışında bir kez Collie, durable agent'ın uyuşmazlığı kendi tarafında günlüğe kaydedebilmesi için kendi sürümüyle birlikte bir hello de gönderir. Eski tarafı güncelleyin.

Çıkış

Özellik yalnızca bu deponun dışından biri onu kullanırsa kalır.

1.24.0 sürümüne kadar iki şeyden biri geçerli olmalıdır: hattı konuşan herkese açık bir depo bulunmalıdır ya da bir durable agent hakkında harici bir sorun veya tartışma bulunmalıdır. İkisi de yoksa durable kodu sürümden çıkarılıp experiments/ içine taşınır ve bu sayfa kaldırılır (ADR 0104). Kaldırıldığında, bir sources.json girdisi bir sürüm boyunca tek bir günlük satırıyla yok sayılır, soket durable agent'ınız için çalışmaya devam eder ve npm paketi silinmez, kullanımdan kaldırılır (ADR 0105).

Bu sayfayı GitHub üzerinde düzenleyin

The rest of the documentation