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| import | içerdikleri |
|---|---|
@colliepwa/durable-sdk | openCollie ve tüm API. Bun üzerinde soketi Bun sunucusuyla, diğer yerlerde node:http sunucusuyla sunar |
@colliepwa/durable-sdk/bun | Aynı API, her zaman Bun sunucusuyla |
@colliepwa/durable-sdk/node | Aynı API, her zaman node:http sunucusuyla, artı başlangıçta yazdığı satır olan NO_DESCENDANT_CHECK |
@colliepwa/durable-sdk/core | Kendi 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/pi | Pi 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ç denetimi | ayarladığınız değer |
|---|---|---|
| Linux üzerinde Bun | Varsayılan olarak açıktır. Bun, çağıranın süreç kimliğini soketten okur | Hiç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 olur | callerCheck: "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 yazar | Hiç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çenek | ne yapar | varsayılan |
|---|---|---|
socket | Soket yolu: mutlak, en fazla 103 bayt. Klasörü 0700 moduyla oluşturulur veya zaten 0700 moduyla size ait olmalıdır | COLLIE_DURABLE_SOCKET değişkeni. İkisi de ayarlanmamışsa: başlatma başarısız olur |
hostName | Dayanıklı ajanın hello mesajındaki kendi adı, 64 bayt ile sınırlandırılmıştır. Zorunludur | Yok |
tailLimit | Collie okumaları için her bir bölmenin kaç ham olay tutacağı | 500, en fazla 1000 |
caps | Dayanıklı ajanın yapabileceğini bildirdiği şeyler (Kabiliyetler) | SDK'nın yapabildiği her şey |
callerCheck | descendant veya off. Yalnızca Bun üzerinde okunur | descendant |
hooks | Telefonun gönderdiği her eylem için adlandırılmış bir yer (Kancalar ve geçmiş) | Yok |
warn | SDK'nin tek satırlık notlarını yazdığı yer; örneğin başka bir kablo sürümünü kullanan bir Collie hakkında | console.warn |
onRename | Kullanı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ı üzerinde | ne olduğu |
|---|---|
address | Dinlediği soket yolu |
epoch | Her başlangıçta yeni ve rastgele, 128 bit |
core | Soketin 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öntem | telefonun gösterdiği içerik | limit |
|---|---|---|
state(s) | working, waiting veya idle. working üzerindeki bir değişiklik yeni bir tur başlatır | Herhangi 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 temizler | 120 karakter |
badge(value) | Başlığın yanında { count } veya { text }. null bunu temizler | 0 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 temizler | 12 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ı temizler | 4 buton, 16 karakterlik bir etiket |
onAction(fn) | Bu butonlardan birine dokunmayı çalıştırır. Reddetmek için false döndürün | Telefon busy veya disabled butonu için dokunma göndermez |
onSend(fn) | Telefonun metnini fn(text, { steer, requestId }) olarak alır | 32 KiB metin |
onAbort(fn) | Stop değerini fn({ requestId }) olarak alır | Yok |
ask(input, { signal? }) | Bir soru kartı (Sorular) | Bölme başına 50 açık ask |
updateAsk, decideAsk, outcomeOf | Bir 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ır | Yok |
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ür | içerdikleri | limit |
|---|---|---|
user | Kullanı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ştirir | 64 KiB metin |
reply, thinking, notice | Ajanın sözleri | 64 KiB metin |
markdown | Telefonun markdown olarak işlediği metin: başlıklar, listeler, vurgular, kod parçacıkları ve bağlantılar | 32 KiB metin |
code | ts gibi lang içeren bir kod bloğu | 32 KiB metin. lang, 1 ila 24 harf, basamak veya _ + # . - değeridir |
link | Bir href ve isteğe bağlı bir label | href yalnızca https:// değeridir, en fazla 2048 karakterdir. label 120 karakterdir |
tool | Bir araç çağrısı: tool: { kind: "other", name, summary, output? } ve running, done, failed veya denied durumunda bir status | name 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ği | ne yapar | varsayılan |
|---|---|---|
pane | Soran bölme. Zorunludur | Yok |
toolCallId | Araç ç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 getirilir | Gerekli |
itemId | Kartın altında yer aldığı öğe | Araç çağrısı kimliği |
timeoutMs | Telefonun sahip olduğu süre. Bu süre aşıldığında çağrı reddedilir, karar timeout tarafından verilir | Sınır yok |
signal | Bir AbortSignal. İptal etmek çağrıyı reddeder, karar program tarafından verilir | Yok |
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.
kind | kartın gösterdiği | yanıt | limit |
|---|---|---|---|
permission | Her 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 |
choice | Her 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 |
form | Her biri text, choice veya toggle türünde 1 ila 6 alan, bazıları required | Alan 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ölmede | ne 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. Birallow-alwaysseç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: falseilecreateCore, birallow-alwaysseçeneğiniTypeErroryapar. Telefon, sözcükleri kesilmiş veya temizlenmiş ya da hiçbir aracı adlandırmayan bir sormada hiçbirallow-alwayssunmaz.
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ığı zaman | nasıl reddettiği |
|---|---|---|
onSend(pane, { text, steer, turnId, requestId }) | pane.onSend içermeyen bir bölme için metin | Throw: 500 internal, telefon için bilinmeyen bir sonuç |
onAbort(pane, { turnId, requestId }) | pane.onAbort içermeyen bir bölme için durdurma | Throw, yukarıdaki gibi |
onAction(pane, { actionId, turnId?, requestId }) | pane.onAction içermeyen bir bölmede kemer dokunuşu | false döndürün: 422 action-refused |
onRename({ kind, id, title }, requestId) | Bir çalışma alanı veya sekme için yeni bir başlık | false döndürün: 422 rename-refused |
onClose({ kind, id, paneIds }, requestId) | Telefon bir bölmeyi, sekmeyi veya çalışma alanını kapatır | false döndürün: 422 close-refused |
onReopen({ id, paneId? }, requestId) | Telefon kapalı bir konuşmayı yeniden açar | false 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.
HistoryProvider | dö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ır | dayanıklı aracının kabul ettikleri |
|---|---|
asks | Sorular sorar ve yanıtları alır |
starters | Başlatıcıları listeler ve Yeni sayfasından birini çalıştırır |
send | Telefondan metin alır |
steer | Çalışan bir tura metin alır. send gerektirir |
abort | Çalışan bir sırayı durdurur |
rename | Bir çalışma alanı veya sekme için yeni bir başlık alır |
close | Bir bölmeyi, sekmeyi veya çalışma alanını kapatır |
actions | Bir bölmedeki kemer butonlarını listeler ve birini çalıştırır |
history | Açık ve kapalı konuşmalarını sunar |
reopen | Kapatı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 aktar | ne 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 |
handle | Tek 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, versionLine | hello 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 |
AskClosed | Yanı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, progressOf | Bölmenin denetlediği şekilde denetlenen bir bağlantı hedefi, bir kod dili, bir rozet ve bir ilerleme |
subtitleOf, pushTextOf, renameTitleOf | Temizlenmiş ve kesilmiş bir alt başlık, bir sormanın itme kelimeleri ve bir yeniden adlandırma başlığı |
CAPS, LIMITS | Bayt cinsinden alan başına her sınır ve liste başına her sınır |
ACTION_LABEL_MAX, BADGE_TEXT_MAX, BADGE_COUNT_MAX | 16, 12 ve 9999 |
SUBTITLE_MAX, LINK_LABEL_MAX, RENAME_TITLE_MAX | Her biri 120 karakter |
PROGRESS_STEPS_MAX, PROGRESS_LABEL_MAX | 12 adım, 60 karakter |
PUSH_TITLE_MAX, PUSH_LINE_MAX, PLACEHOLDER_MAX | 60, 120 ve 60 karakter |
ANSWER_TEXT_MAX, ANSWER_TEXT_DEFAULT, ANSWER_TEXT_BYTES | 2000 ve 500 karakter, 8000 bayt |
ALL_CAPS, PROTOCOL_RANGE, SOCKET_ENV | Tüm sınırlar açık, SDK'nın konuştuğu hat sürümleri ve COLLIE_DURABLE_SOCKET adı |
MemoryReceiptStore, RECEIPTS_PER_GROUP | Varsayı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 aktar | ne 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 |
PaneRegistry | Hangi 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_MS | Bü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ün | anlamı | |
|---|---|---|
SDK_VERSION | 0.1.0 | Paket sürümü. Paket experimental dist-tag etiketinden ayrılana kadar, ikincil bir sürüm API'yi değiştirebilir |
WIRE_VERSION | 1 | Paketin 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