İçeriğe atla
ColliePWA

09/Documentation

Dayanıklı SDK (deneysel)

Bölüm bölüm @colliepwa/durable-sdk npm paketi: girdileri ve çalışma zamanları, openCollie, bölme yöntemleri, dört soru türü ve requireApproval, kancalar, geçmiş, yetenekler, yardımcılar, Pi bağlayıcısı ve sürümler

Deneysel. Paket, API'si ve konuştuğu hat ileriki bir ikincil sürümde değişebilir veya bu özellik kaldırılabilir. Sürümler, bunun kalıcı ajanınız için ne anlama geldiğini açıklar.

@colliepwa/durable-sdk, kalıcı bir ajanın Collie aracılığıyla telefonunuzda kendini göstermek için kullandığı npm paketidir. Bu sayfa paketin tüm parçalarını listeler. Dayanıklı aracılar hızlı başlangıcı ve Collie tarafındaki kurulumu içerir; Durable wire ise ikisi arasında nelerin aktarıldığını açıklar.

Kurulum ve girişler

Tek bir kurulum beş giriş sağlar: çoğu kalıcı ajan için kök içe aktarma ve daha özel bir ihtiyaç için dört giriş.

npm install @colliepwa/durable-sdk@experimental
# or
bun add @colliepwa/durable-sdk@experimental
importiçerdikleri
@colliepwa/durable-sdkopenCollie ve tüm API. Bun üzerinde soketi Bun sunucusuyla, diğer yerlerde node:http sunucusuyla sunar
@colliepwa/durable-sdk/bunAynı API, her zaman Bun sunucusuyla
@colliepwa/durable-sdk/nodeAynı API, her zaman node:http sunucusuyla, artı başlangıçta yazdığı satır olan NO_DESCENDANT_CHECK
@colliepwa/durable-sdk/coreKendi aktarımını getiren dayanıklı bir ajan için tek fonksiyon olarak düzen ve hat, handle(request). Çalışma zamanı içe aktarımı yoktur, bu nedenle web Request çalışan her yerde çalışır
@colliepwa/durable-sdk/piPi Durable (Pi yardımcıları) üzerine kurulu dayanıklı bir ajan için yapıştırıcı

Paket, Node 22.19 veya üzerini ya da Bun 1.4 veya üzerini gerektirir ve çalışma zamanı bağımlılığı yoktur. ./pi; 1.1 veya üzeri ve 2'nin altında @earendil-works/pi-durable, @earendil-works/pi-ai ve @earendil-works/chord gerektirir. Giriş noktası Pi Durable 1.1.0 ve 1.2.0 ile test edilmiştir. Bu üçü isteğe bağlı eş bağımlılıklardır: ./pi içe aktarmayan dayanıklı bir ajan hiçbirini yüklemez.

Çalışma zamanı, dayanıklı ajanın kimin yanıt verdiğini anlayıp anlayamayacağına karar verir. Alt süreç denetimi, dayanıklı ajanın kendisinden veya başlattığı bir süreçten gelen eylemleri 403 caller-refused ile reddeder. answer, send, stop, action, rename, close, reopen ve starter eylemlerini kapsar. Okuma işlemleri açık kalır.

çalışma zamanıalt süreç denetimiayarladığınız değer
Linux üzerinde BunVarsayılan olarak açıktır. Bun, çağıranın süreç kimliğini soketten okurHiçbir şey. callerCheck: "off" bunu kapatır
macOS üzerindeki Bun veya Linux dışındaki herhangi bir sistemÇalıştırılamaz. Başlatma işlemi callerCheck adını veren bir hatayla başarısız olurcallerCheck: "off"
Node, herhangi bir sistemÇalıştırılamaz: Node bir soketi çağıranı okuyamaz. Dayanıklı ajan başlangıçta bunu belirten tek bir satır yazarHiçbir şey. callerCheck okunmaz

Denetim olmadan, kullanıcınızın herhangi bir süreci bir kartı yanıtlayabilir; ajanın çalıştırdığı araçlar da buna dahildir. Ajanın araçlarını sokete erişemeyen bir yalıtılmış alanda çalıştırın. Soket, dosya sahipleri olan bir sisteme ihtiyaç duyar; bu nedenle Windows üzerinde openCollie başlangıçta durur. Oradaki dayanıklı bir ajan, bunun yerine bir belirteç ile TLS arkasında ./core sunar (Bir durable agent'a ulaşmanın iki yolu).

Bir bağlantı açın

openCollie özel soketi oluşturur ve döndürdüğü tanıtıcı telefonun ne göstereceğini düzenler.

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

const collie = await openCollie({ hostName: "desk" });
const space = collie.workspace("support", { title: "Support" });
const tab = space.tab("main", { title: "Tickets" });
const pane = tab.pane("ticket-1", { title: "Maria Lopez", harness: "desk" });
collie.ready();

socket seçeneği olmadığında yol, Collie tarafından da okunan değişken olan COLLIE_DURABLE_SOCKET değerinden gelir.

seçenekne yaparvarsayılan
socketSoket yolu: mutlak, en fazla 103 bayt. Klasörü 0700 moduyla oluşturulur veya zaten 0700 moduyla size ait olmalıdırCOLLIE_DURABLE_SOCKET değişkeni. İkisi de ayarlanmamışsa: başlatma başarısız olur
hostNameDayanıklı ajanın hello mesajındaki kendi adı, 64 bayt ile sınırlandırılmıştır. ZorunludurYok
tailLimitCollie okumaları için her bir bölmenin kaç ham olay tutacağı500, en fazla 1000
capsDayanıklı ajanın yapabileceğini bildirdiği şeyler (Kabiliyetler)SDK'nın yapabildiği her şey
callerCheckdescendant veya off. Yalnızca Bun üzerinde okunurdescendant
hooksTelefonun gönderdiği her eylem için adlandırılmış bir yer (Kancalar ve geçmiş)Yok
warnSDK'nin tek satırlık notlarını yazdığı yer; örneğin başka bir kablo sürümünü kullanan bir Collie hakkındaconsole.warn
onRenameKullanımdan kaldırıldı. İstek kimliği olmadan, bir sürüm boyunca tutulan eski hooks.onRename adıYok

Yalnızca createCore üzerinde bulunan, openCollie üzerinde bulunmayan iki seçenek daha vardır: receipts ve allowAlways (Sorular).

tanıtıcı üzerindene olduğu
addressDinlediği soket yolu
epochHer başlangıçta yeni ve rastgele, 128 bit
coreSoketin arkasındaki çekirdek. Bir test veya ikinci bir aktarım doğrudan core.handle çağırır
workspace(id, { title, cwd? })Kimlik başına bir kez oluşturulan bir çalışma alanı. tab(id, { title }) bir sekme verir ve sekmenin pane(id, options) değeri bir bölme sağlar
starters(list)Telefonun Yeni sayfasından başlatabileceği en fazla 50 öğe. Her biri { id, label, run } şeklindedir ve run, gösterdiği bölmenin { paneId } değerine çözümlenir
history(provider)Kalıcı aracının kendi konuşma kaydını sunun (Kancalar ve geçmiş)
ready()Her bölme gösterildikten sonra bir kez ve bir yeniden başlatmanın ardından her açık soru tekrar iletildiğinde bir kez çağırın. O zamana kadar hello dışındaki her rota 503 starting yanıtı verir
close()Sunucuyu durdurun. Halihazırda yolda olan yanıtlar en fazla 2 sn boyunca gönderilmeye devam eder, ardından soket dosyası kaldırılır

close() açık soruları bilerek açık bırakır: kapatma bir yanıt değildir ve bunlardan birini bekleyen işe ne olacağına kalıcı aracı karar verir.

tab.pane(id, { title, harness, cwd?, sessionId? }), varsa bu kimliğe sahip bölmeyi döndürür; böylece kalıcı bir aracı, ikinci bir bölme olmadan bir konuşmayı iki kez gösterebilir. Başlıklar 256 bayt ve harness 64 bayt ile sınırlandırılır. cwd mutlak bir yoldur, aksi takdirde atlanır.

Her kimlik, kimlik kuralına uyar: 1 ila 128 bayt, kontrol karakteri yok, boşluk yok ve /, ? veya # karakterlerinden hiçbiri bulunmaz. Geçersiz bir kimlik TypeError durumudur. Bir çalışma alanı veya sekme kimliği : içeremez, çünkü kablo bir sekmeyi <workspace>:<tab> olarak adlandırır.

Bölmeler

Bir bölme tek bir konuşmadır ve yöntemleri telefonun bu konuşma için ne göstereceğini belirler.

yöntemtelefonun gösterdiği içeriklimit
state(s)working, waiting veya idle. working üzerindeki bir değişiklik yeni bir tur başlatırHerhangi bir soru açık olduğu sürece bölme waiting olarak görünür
event(e)Chat öğeleri: item, remove, settled, reset ve synced olaylarıAşağıdaki öğe tablosuna bakın
subtitle(text)Başlığın altında tek bir satır. null bunu temizler120 karakter
badge(value)Başlığın yanında { count } veya { text }. null bunu temizler0 ile 9999 arasında bir sayı, 12 karakterlik bir metin
progress(value)Bölme çalışırken veya beklerken çizilen { kind: "steps", steps } veya { kind: "percent", value, label? }. null bunu temizler12 adım; her etiket 60 karakter, 0 ile 100 arasında bir değer
actions(list)Kuşağın dayanıklı ajan bölümündeki butonlar: { id, label, icon?, busy?, disabled? }. null bunları temizler4 buton, 16 karakterlik bir etiket
onAction(fn)Bu butonlardan birine dokunmayı çalıştırır. Reddetmek için false döndürünTelefon busy veya disabled butonu için dokunma göndermez
onSend(fn)Telefonun metnini fn(text, { steer, requestId }) olarak alır32 KiB metin
onAbort(fn)Stop değerini fn({ requestId }) olarak alırYok
ask(input, { signal? })Bir soru kartı (Sorular)Bölme başına 50 açık ask
updateAsk, decideAsk, outcomeOfBir ask değiştirin, karara bağlayın veya geri okuyun (Sorular)Yok
close()Bölmeyi yerleşimden çıkarır. Açık ask ögeleri durduruldu olarak kapanırYok

Bir bölmede ayrıca dört salt okunur alan bulunur: id, sessionId, turnId (çalışan tur veya sonuncusu) ve openAsks. Bir eylemin icon alanı play, pause, check, x, refresh, archive, flag, star, send, note, search ve more değerlerinden biridir. Başka bir ad simge çizmez.

Bir item olayı, bir id ve isteğe bağlı bir ts içeren bir öge taşır. Bilinen kimliğe sahip bir öge, önceki ögenin yerini alır.

türiçerdiklerilimit
userKullanıcının gönderdiği bir satır. requestId, geldiği gönderimi adlandırır; böylece telefon kendi satırını bununla değiştirir64 KiB metin
reply, thinking, noticeAjanın sözleri64 KiB metin
markdownTelefonun markdown olarak işlediği metin: başlıklar, listeler, vurgular, kod parçacıkları ve bağlantılar32 KiB metin
codets gibi lang içeren bir kod bloğu32 KiB metin. lang, 1 ila 24 harf, basamak veya _ + # . - değeridir
linkBir href ve isteğe bağlı bir labelhref yalnızca https:// değeridir, en fazla 2048 karakterdir. label 120 karakterdir
toolBir araç çağrısı: tool: { kind: "other", name, summary, output? } ve running, done, failed veya denied durumunda bir statusname 128 bayt, summary 1 KiB, output 16 KiB

Bir reply, thinking, notice veya markdown ögesi, metni büyürken partial: true taşıyabilir. Bölme working durumundan ayrılmadan önce, metin büyüdükçe en fazla 250 ms'de bir aynı kimliği yeniden yazın; ardından son metinle ve partial olmadan bir kez daha yazın.

Sınırını aşan metin kesilir; denetim karakterleri ve görünmeyen karakterler kaldırılır. Hatalı bir lang, hatalı bir href, hatalı bir rozet veya hatalı bir ilerleme, Collie onu bırakacağı için bunun yerine bir TypeError veya RangeError olur. Dayanıklı bir ajan kendisi ask, ask-closed veya state olayları ekleyemez: bunları ask() ve state() yazar.

Sorular

pane.ask bir kart gösterir ve yanıtla çözümlenir; requireApproval ise tek bir satırda tek bir araç çağrısını sorar.

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

const args = { order: "5521", amount: 40 };
const approval = await requireApproval("refund", args, {
  pane,
  toolCallId: "call-1",
  timeoutMs: 10 * 60_000,
});
if (!approval.approved) throw new Error(`refund not approved: ${approval.decidedBy}`);

requireApproval(toolName, args, options), kartı modelin bununla ilgili sözlerinden değil, çağrının ne olduğundan oluşturur. Başlık "refund wants to run", araç satırı refund(order: "5521", amount: 40), anlık bildirim "refund needs a yes" şeklindedir ve butonlar Allow ile Deny şeklindedir. { approved, decidedBy, decidedAt, askId } döndürür. Reddetme, zaman aşımı, durdurma ve iptal durumlarının tümü approved: false döndürür.

requireApproval seçeneğine yaparvarsayılan
paneSoran bölme. ZorunludurYok
toolCallIdAraç çağrısının kendi kimliği; yeniden başlatma sonrasında da aynı kalır. Herhangi bir dize olabilir: Kimlik kuralını bozan dizeler güvenli hale getirilirGerekli
itemIdKartın altında yer aldığı öğeAraç çağrısı kimliği
timeoutMsTelefonun sahip olduğu süre. Bu süre aşıldığında çağrı reddedilir, karar timeout tarafından verilirSınır yok
signalBir AbortSignal. İptal etmek çağrıyı reddeder, karar program tarafından verilirYok
labelsİki düğmenin metinleri, { allow?, deny? }İzin Ver ve Reddet

callSummary(name, args) ve argumentsView(args) kullandığı iki parçadır: tek satırda çağrı ve her bir değeri JSON olan key: value çiftleri biçimindeki bağımsız değişkenler.

pane.ask(input) dört türden birini alır. Promise, türün biçimindeki yanıt ile çözümlenir.

kindkartın gösterdiğiyanıtlimit
permissionHer seçenek için bir düğme, her biri bir effect içerir: allow, allow-always, deny veya cancel{ optionId, note? }1 ila 6 seçenek
choiceHer seçenek için bir düğme. multiple: true ile kişi birden fazla seçim yapar{ optionIds }1 ila 8 seçenek
textİsteğe bağlı bir placeholder içeren tek bir metin alanı{ text }1 ila 2000 arası maxLength, varsayılan 500. Yer tutucu 60 karakterdir
formHer biri text, choice veya toggle türünde 1 ila 6 alan, bazıları requiredAlan kimliğine göre anahtarlanmış { values }Bir seçenek alanı 1 ila 8 seçeneğe sahiptir

Her tür toolCallId, itemId ve title (256 bayt) alır. reason (2 KiB), tool, push: { title?, line? } (60 ve 120 karakter, bildirimin metinleri) ve expiresAt (bir Date veya saat dilimi içeren bir ISO 8601 dizesi) alabilir.

id alanını hariç tutun. SDK bunu askIdFor(paneId, toolCallId) ile türetir: iki kimlik üzerinden SHA-256, ilk 32 onaltılık karakter. Bu nedenle yeniden başlatmanın ardından tekrar oluşturulan aynı araç çağrısı aynı kimliği alır ve telefonun yeniden başlatma öncesinde veya sırasında gönderdiği bir yanıt yerine ulaşır. Zaten açık olan bir kimliği oluşturmak bir TypeError hatasıdır.

bölmedene yapar
updateAsk(askId, patch)Açık bir sorma işlemini yerinde değiştirir: title, reason, tool, options, placeholder, maxLength veya fields. Revizyonu bir artar, bu nedenle eski forma verilen bir yanıt 409 stale alır ve telefon yeni bir dokunma ister. Sorma işlemi açık olmadığında false döner
decideAsk(askId, answer?)Durable agent sorma işlemine telefon dışındaki bir yerde bizzat karar verdi. answer mevcutsa, bekleyen ask() bu değerle çözümlenir. Mevcut değilse, AskClosed ile reddedilir. Telefonda daha sonra yapılacak bir dokunma 409 decided alır ve kartta "Decided in the durable agent." yazar. Sorma işlemi açık olmadığında false döner
outcomeOf(askId)İlk karar: { decidedBy, decidedAt, optionId?, effect? }. Bölme son 500 tanesini hatırlar. Hiç oluşturmadığı veya unuttuğu bir sorma işlemi için tanımsızdır

decidedBy; phone, program veya timeout değerini alır. Bir sorma işlemi expiresAt süresini geçer ve timeout tarafından kararlaştırıldığı şekilde kapanır: ask(), decidedBy değeri timeout olan AskClosed ile reddedilir. Kart o zamana kadar kalan süreyi gösterir. Zaman aşımına uğrayan veya durable agent içinde karara bağlanan bir soru, Chat içinde "Timed out before an answer: refund wants to run" gibi tek bir satır bırakır.

İptal edilen bir signal, pane.close() ve telefondan gelen bir kapatma işlemi sormayı program tarafından kararlaştırıldığı şekilde kapatır ve ask(), AskClosed ile reddedilir.

Dikkat. Bir allow-always seçeneği, tek bir yanıttan sonraki tüm çağrılara izin verir. https üzerinden token tek geçittir, bu nedenle oradaki bir durable agent yalnızca İzin Ver ve Reddet seçeneklerini sunar. allowAlways: false ile createCore, bir allow-always seçeneğini TypeError yapar. Telefon, sözcükleri kesilmiş veya temizlenmiş ya da hiçbir aracı adlandırmayan bir sormada hiçbir allow-always sunmaz.

Telefondan gelen her eylem bir istek kimliği taşır ve çekirdek bunun makbuzunu saklar: tekrarlanan bir istek hiçbir şey çalıştırmaz ve replayed: true ile ilk yanıtı tekrar alır. Varsayılan MemoryReceiptStore, bölme başına ve başlatıcılar, yeniden adlandırmalar, kapatmalar ve yeniden açmalar için grup başına en yeni RECEIPTS_PER_GROUP (1000) öğeyi saklar. Bıraktığı bir kimliğin tekrarı 500 receipt-dropped alır ve hiçbir şey çalıştırmaz. Depo, işlemle birlikte kaybolur.

Makbuzları yeniden başlatma sonrasında da korumak için get(requestId) ve put(requestId, record, group) içeren bir ReceiptStore yazın ve bunu createCore içine receipts olarak geçirin. openCollie bunları her zaman bellekte tutar.

Kancalar ve geçmiş

Hook, telefonun gönderdiği bir eylem için belirlenmiş tek adlandırılmış yerdir; geçmiş sağlayıcısı ise kendi kaydınızı sunar.

hookçalıştığı zamannasıl reddettiği
onSend(pane, { text, steer, turnId, requestId })pane.onSend içermeyen bir bölme için metinThrow: 500 internal, telefon için bilinmeyen bir sonuç
onAbort(pane, { turnId, requestId })pane.onAbort içermeyen bir bölme için durdurmaThrow, yukarıdaki gibi
onAction(pane, { actionId, turnId?, requestId })pane.onAction içermeyen bir bölmede kemer dokunuşufalse döndürün: 422 action-refused
onRename({ kind, id, title }, requestId)Bir çalışma alanı veya sekme için yeni bir başlıkfalse döndürün: 422 rename-refused
onClose({ kind, id, paneIds }, requestId)Telefon bir bölmeyi, sekmeyi veya çalışma alanını kapatırfalse döndürün: 422 close-refused
onReopen({ id, paneId? }, requestId)Telefon kapalı bir konuşmayı yeniden açarfalse döndürün: 422 reopen-refused

Bir hook yalnızca yeteneği etkin olduğunda ve istek kimliği yeni olduğunda çalışır. Reddetme hiçbir şey depolamaz, bu nedenle aynı istek kimliği tekrar deneyebilir. Bölme başına işleyiciler hook'a göre önceliklidir. İkisine de sahip olmayan bir bölme; gönderme, durdurma veya dokunmaya 409 not-supported yanıtı verir.

SDK kabul edilen bir eylemi kendisi uygular. Yeniden adlandırma başlığı ayarlar. Kapatma, hedefi ve içindeki her şeyi kaldırır, açık isteklerini durduruldu olarak kapatır. Hook olmadan yeniden açma, bu işlemin kapattığı bir bölmeyi geri yükler; yeniden başlatmadan önce kapatılan bir konuşma onReopen gerektirir. Düzen her başlangıçta yeniden oluşturulur, bu nedenle bir başlığın veya kapatmanın işlemden sonra da kalmasını isteyen dayanıklı bir aracı bunu kendi hook'unda depolar.

collie.history(provider), açık ve kapalı her konuşmayı dayanıklı aracının kendi deposundan sunar. caps atlandığında veya history: true belirtildiğinde history yeteneğini etkinleştirir.

HistoryProviderdöndürür
list(after, limit){ items, next? }: konuşma satırları, en yeniden eskiye, en fazla limit (100)
items(id, after, limit){ items, next? }: konuşmanın öğeleri, en eskiden yeniye, her biri en son sürümünde, en fazla limit (1000). Bilinmeyen bir kimlik için undefined

Bir satır { id, title, subtitle?, workspaceId?, tabId?, startedAt, endedAt?, state, items } biçimindedir; state open veya closed değerine sahiptir ve items sayıdır. İmleç (after, next) boşluk içermeyen, 1 ila 512 baytlık yazdırılabilir ASCII olan kendi dizginizdir. next bulunmadığında liste sona erer.

Bir sağlayıcı ayarlandıktan sonra her bölmenin sessionId değeri kendi bölme kimliğidir ve geçmiş, bölmenin konuşmasını bunun altında sunar. Başka bir kimlik belirtmek için tab.pane() içine sessionId geçirin veya yeniden başlatma sonrasında aynı kalamadığında null geçirin.

tailLimit geçmiş değildir. Her bölmenin Collie'nin olay okumaları için tuttuğu ham kuyruktur, varsayılan olarak 500 olaydır. Bunun gerisinde kalan bir okuyucu, bunun yerine bölmenin tüm geçerli görünümünü, en fazla en yeni 2000 öğeyi alır.

Kabiliyetler

Yetenek, dayanıklı aracının bir şeyi yapabileceğini belirtir ve telefon yalnızca dayanıklı aracının bildirdiği bir yetenek için denetim çizer.

sınırdayanıklı aracının kabul ettikleri
asksSorular sorar ve yanıtları alır
startersBaşlatıcıları listeler ve Yeni sayfasından birini çalıştırır
sendTelefondan metin alır
steerÇalışan bir tura metin alır. send gerektirir
abortÇalışan bir sırayı durdurur
renameBir çalışma alanı veya sekme için yeni bir başlık alır
closeBir bölmeyi, sekmeyi veya çalışma alanını kapatır
actionsBir bölmedeki kemer butonlarını listeler ve birini çalıştırır
historyAçık ve kapalı konuşmalarını sunar
reopenKapatılmış bir konuşmayı yeniden gösterir

Belirtilmezse caps, SDK'nın yapabileceği her şeyi ve history() bir sağlayıcıya sahip olduğunda history özelliğini açar. Belirtilirse tüm listedir: adlandırmadığı bir sınır kapalıdır, bu nedenle { asks: true } yalnızca sormaları bildirir. Birini kapatıp kalanları tutmak için ALL_CAPS öğesini yayın: { ...ALL_CAPS, steer: false }. Sınırı kapalı olan bir rota 409 not-supported yanıtı verir. terminal her zaman false değerindedir.

Yardımcılar ve sabitler

Kök içe aktarımı, openCollie bileşeninin oluştuğu parçaları ve uyguladığı kuralları da dışa aktarır.

dışa aktarne olduğu
createCore(options)Sunucusuz çekirdek. socket ve callerCheck hariç openCollie seçeneklerini, ayrıca receipts ve allowAlways alır. epoch, workspace, starters, history, ready, isReady ve handle(request) döndürür
handleTek bir işlev olarak hat, web Request girişi ve Response çıkışı. core.handle(request) olağan giriş yoludur
wireListener(core)Düzgün bir kapatma için drained() ile birlikte bir node:http istek dinleyicisi olarak core.handle
hello, versionLinehello yanıtı ve sürüm reddi için kalıcı bir ajanın yazdığı tek satır
mintId()Yeni bir rastgele kimlik, 32 onaltılık karakter olarak 128 bit
askIdFor(paneId, toolCallId)Türetilmiş sorma kimliği
AskClosedYanıt gelmediğinde ask() işlevinin reddettiği hata. by ve decidedBy taşır
idOk(id), assertId(id, what), safeId(raw)Kimlik kuralı: bir denetim, hata fırlatan bir denetim ve herhangi bir dizeden oluşturulan güvenli bir kimlik, her seferinde aynısı
cursorOk(cursor)Geçmiş imleci kuralı
cut(text, max, multiline?)Bir dizeyi temizleyin ve sonunda … olacak şekilde max bayta kesin
hrefOf, langOf, badgeOf, progressOfBölmenin denetlediği şekilde denetlenen bir bağlantı hedefi, bir kod dili, bir rozet ve bir ilerleme
subtitleOf, pushTextOf, renameTitleOfTemizlenmiş ve kesilmiş bir alt başlık, bir sormanın itme kelimeleri ve bir yeniden adlandırma başlığı
CAPS, LIMITSBayt cinsinden alan başına her sınır ve liste başına her sınır
ACTION_LABEL_MAX, BADGE_TEXT_MAX, BADGE_COUNT_MAX16, 12 ve 9999
SUBTITLE_MAX, LINK_LABEL_MAX, RENAME_TITLE_MAXHer biri 120 karakter
PROGRESS_STEPS_MAX, PROGRESS_LABEL_MAX12 adım, 60 karakter
PUSH_TITLE_MAX, PUSH_LINE_MAX, PLACEHOLDER_MAX60, 120 ve 60 karakter
ANSWER_TEXT_MAX, ANSWER_TEXT_DEFAULT, ANSWER_TEXT_BYTES2000 ve 500 karakter, 8000 bayt
ALL_CAPS, PROTOCOL_RANGE, SOCKET_ENVTüm sınırlar açık, SDK'nın konuştuğu hat sürümleri ve COLLIE_DURABLE_SOCKET adı
MemoryReceiptStore, RECEIPTS_PER_GROUPVarsayılan makbuz deposu ve grup başına 1000 sınırı

Kablo üzerindeki her tür ve her kanca yükü de src/core/types.ts üzerinden dışa aktarılır.

Pi yardımcıları

./pi, bir Pi Durable konuşmasını bir bölmeye, riskli bir araç çağrısını bir karta ve Pi deposunu geçmişe dönüştürür.

dışa aktarne yapar
showConversation(loc, harness, conversation, o)Bir konuşmayı bölme olarak gösterir; önce geçmişi, ardından canlı olayları sunar. Send isteği istek kimliğiyle birlikte Pi'nin submit alanına, Stop ise abort işlemine gider. İki kez çağrılması güvenlidir
PaneRegistryHangi bölmenin hangi konuşmayı gösterdiği. Yeniden başlatmanın ardından reRaised(risky), sonuçsuz her riskli çağrı tekrar sorana kadar bekler; bu nedenle ready() sorma işlemlerinden sonra gelir
riskGuard({ panes, risky, words?, timeoutMs?, onTimeout? })beforeTool kancasıyla risky içindeki bir araç çağrısını Allow ve Deny kartına dönüştüren bir Pi uzantısı. Reddedilen çağrı engellenir. timeoutMs ile kartın süresi dolar, kimsenin yanıtlamadığı çağrı engellenir ve onTimeout(tool, title) durable agent'ın bunu günlüğe kaydetmesini sağlar
askTools({ panes, words, timeoutMs?, onTimeout? })Destek masasının iki sorma aracı: Bir seçenek sunan ask_queue ve metin soran ask_customer. timeoutMs ile yanıtsız kalan sorma işleminin süresi dolar ve araç "timed out" döndürür
spawnHelperTool(o)spawn_helper aracı: Yardımcının yanıtını döndüren, yeni bir bölme olarak gösterilen alt konuşma
piHistory({ harness, panes, describe })Her Pi konuşmasının her girdisini okuyan bir HistoryProvider
firstMessageOf(conversation)Bölmesini adlandırmak için bir konuşmanın ilk mesajının metni
paneIdOf(id), conversationOfPaneId(paneId)Bir Pi konuşmasının bölme kimliği, conv-<id> ve geri dönüşü
summaryOf(args, name?)Bir araç çağrısının sözcüklerle ifade edilmiş argümanları, en fazla 200 karakter
MapperÖğe olarak Pi girdileri ve agent olayları. Büyüyen bir yanıt tek bir öğe kimliğini korur
PARTIAL_MS, RE_RAISE_MSBüyüyen bir yanıtın iki yazımı arasındaki 250 ms ve reRaised için en fazla 5000 ms olan bekleme süresi
ESCALATEDÖrnek sözlük: showConversation tarafından escalate: true ile eklenen Escalate düğmesi için destek masası bildirimi
ASKING_TOOLSÖrnek sözlük: Destek masasının iki sorma aracının adları
Submit, ReplyExtrasÖzel bir submit türleri ve tamamlanmış bir yanıtın altına durable agent tarafından eklenen öğelerin türleri

Kartın gösterdiği sözcükler seçenek olarak gelir; bu nedenle ./pi, bu iki sabit dışında örneğe ait hiçbir metin barındırmaz. Pi Durable 1.1.0 sürümüne göre yazılmıştır. examples/durable-member/ içindeki destek masası tüm parçaları bir araya getirir.

Sürümler

Paketin Collie'den ayrı kendi sürümü vardır ve konuştuğu kablo sürümünü belirtir.

bugünanlamı
SDK_VERSION0.1.0Paket sürümü. Paket experimental dist-tag etiketinden ayrılana kadar, ikincil bir sürüm API'yi değiştirebilir
WIRE_VERSION1Paketin konuştuğu durable kablo sürümü

Collie tek bir kablo sürümünü konuşur ve yeni bir sürüm çıktıktan sonraki bir ikincil sürüm boyunca bir öncekini kabul eder. Bir Collie sürümlerinizin hiçbirini konuşmadığında çekirdek, her sürüm için bir kez olmak üzere warn üzerinden tek bir satır yazar, örneğin collie: Collie speaks wire v2, this durable agent speaks v1. Update the agent's SDK, or Collie.. Telefon, durable agent'ın ana ekranında uyumsuzluğu Collie'nin kendi sözcükleriyle belirtir. Eski tarafı güncelleyin.

Paket npm dist-tag experimental altında yayımlanır, hiçbir zaman latest altında yayımlanmaz. Durable kablo çıkış üzerinde kaldırılırsa paket kullanımdan kaldırılır (ADR 0105).

Bu sayfayı GitHub üzerinde düzenleyin

The rest of the documentation