本文へスキップ
ColliePWA

09/Documentation

durable SDK(実験的機能)

npmパッケージ@colliepwa/durable-sdkの解説: エントリとランタイム、openCollie、ペインのメソッド、4種類の質問とrequireApproval、フック、履歴、caps、ヘルパー、Pi連携、バージョンについて

実験的。 パッケージ、API、使用されるプロトコルは、今後のマイナーリリースで変更されるか、機能が削除される可能性があります。durable agentへの影響についてはバージョンを参照してください。

@colliepwa/durable-sdkは、durable agentがCollieを介してスマートフォン上に表示されるために使用するnpmパッケージです。このページでは、そのすべての構成要素を一覧で示します。durable agentにはクイックスタートとCollie側のセットアップ手順があり、durable wireでは両者間で送受信されるデータについて説明しています。

インストールとエントリ

1回インストールすると、ほとんどのdurable agent向けルートインポートと、特定の用途向けの4つのエントリの計5つのエントリが利用可能になります。

npm install @colliepwa/durable-sdk@experimental
# or
bun add @colliepwa/durable-sdk@experimental
import設定内容
@colliepwa/durable-sdkopenCollieとAPI全体。Bun上ではBunサーバーでソケットを提供し、その他の環境ではnode:httpサーバーで提供します
@colliepwa/durable-sdk/bun同じAPI(常にBunサーバーを使用)
@colliepwa/durable-sdk/node同じAPI(常にnode:httpサーバーを使用)に加え、起動時に出力される行であるNO_DESCENDANT_CHECK
@colliepwa/durable-sdk/core独自のトランスポートを備える durable agent 向けに、レイアウトと通信を1つの関数 handle(request) にまとめました。ランタイムのインポートを必要としないため、Web Request が動作する環境であればどこでも実行できます。
@colliepwa/durable-sdk/piPi Durable(Pi ヘルパー)上に構築された durable agent 用の連携コード

このパッケージには Node 22.19 以降、または Bun 1.4 以降が必要で、実行時依存関係はありません。./pi には @earendil-works/pi-durable、@earendil-works/pi-ai、@earendil-works/chord のバージョン 1.1 以降 2 未満が必要です。このエントリーは Pi Durable 1.1.0 および 1.2.0 でテストされています。これら3つはオプショナルの peer dependencies であり、./pi をインポートしない durable agent には何もインストールされません。

ランタイムは、durable agent が応答者を判別できるかどうかを決定します。子孫プロセスのチェックは、durable agent 自身またはそれが起動したプロセスからの操作を拒否し、403 caller-refused を返します。これには answer、send、stop、action、rename、close、reopen、starter が含まれます。読み取り操作は継続して許可されます。

ランタイム子孫チェック設定値
Linux上のBunデフォルトで有効。Bun はソケットから呼び出し元のプロセス ID を読み取りますなし。callerCheck: "off" で無効化されます
macOS 上の Bun、または Linux 以外の任意のシステム実行不可。callerCheck を示すエラーで起動に失敗しますcallerCheck: "off"
Node、すべてのシステム実行不可: Node はソケットの呼び出し元を読み取れません。durable agent は起動時にその旨を1行出力しますなし。callerCheck は読み取られません

このチェックがない場合、エージェントが実行するツールを含め、同一ユーザーのすべてのプロセスがカードに応答できるようになります。エージェントのツールは、ソケットにアクセスできないサンドボックス内で実行してください。ソケットにはファイルの所有権を扱えるシステムが必要なため、Windows では openCollie が起動時に停止します。Windows 上の durable agent は、代わりにトークン付きの TLS の背後で ./core を配信します(durable agentへ接続する2つの方法)。

接続を開く

openCollie がプライベートソケットを作成し、返されたハンドルがスマートフォンの表示レイアウトを構成します。

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 オプションがない場合、パスは Collie も読み取る変数 COLLIE_DURABLE_SOCKET から取得されます。

オプション機能デフォルト
socketソケットのパス: 絶対パス、最大103バイト。そのフォルダーはモード 0700 で作成されるか、モード 0700 の既存の所有フォルダーである必要がありますCOLLIE_DURABLE_SOCKET 変数。いずれも未設定の場合: 起動に失敗します
hostNamehello 内における durable agent 自身の名前(64バイトに切り詰められます)。必須なし
tailLimitCollie による読み取りのために各ペインが保持する生イベントの数500、最大 1000
capsdurable agent が実行可能と宣言する機能(機能一覧)SDK が実行できるすべての操作
callerCheckdescendant または off。Bun でのみ読み取られますdescendant
hooks電話側から送信される動作ごとの名前付きの場所(フックと履歴)なし
warnSDKが1行のメモ(異なる通信プロトコルバージョンを使用するCollieに関する情報など)を書き込む場所console.warn
onRename非推奨。リクエストIDを含まないhooks.onRenameの以前の名前。1リリース間のみ維持されますなし

openCollieにはなく、createCoreにのみ存在するオプションがさらに2つあります: receiptsおよびallowAlways (質問)。

ハンドル上概要
addressリッスンするソケットパス
epoch起動ごとに新しくランダムに生成される128ビットの値
coreソケット背後のコア。テストまたは2つ目のトランスポートはcore.handleを直接呼び出します
workspace(id, { title, cwd? })IDごとに1回作成されるワークスペース。tab(id, { title })によりタブが生成され、タブのpane(id, options)によりペインが生成されます
starters(list)新規作成ページから電話側が開始できる項目(最大50個)。各項目は{ id, label, run }であり、runは表示されたペインの{ paneId }に解決されます
history(provider)永続エージェント自身による会話の記録を配信します(フックと履歴)
ready()すべてのペインが表示された後、および再起動後に未解決のaskがすべて再送された後に1回呼び出します。それまではhello以外のすべてのルートが503 startingを返します
close()サーバーを停止します。送信途中の応答は最大2秒間そのまま送信され、その後ソケットファイルが削除されます

close()は未解決のaskを意図的に開いたままにします。シャットダウンは応答ではないため、その結果を待つ処理の扱いは永続エージェントが決定します。

tab.pane(id, { title, harness, cwd?, sessionId? })は、該当するIDのペインが存在する場合はそれを返します。これにより、永続エージェントはペインを重複して作成することなく会話を再表示できます。タイトルは256バイト、harnessは64バイトに切り詰められます。cwdは絶対パスである必要があり、そうでない場合は除外されます。

すべてのIDはID規則に従います: 1〜128バイト、制御文字なし、空白文字なし、/、?、#のいずれも不可。不正なIDはTypeErrorとなります。プロトコル上でタブが<workspace>:<tab>と命名されるため、ワークスペースやタブのIDに:を含めることはできません。

ペイン

ペインは1つの会話であり、そのメソッドによって電話側に表示される内容を設定します。

メソッド電話側に表示される内容制限
state(s)working、waiting、またはidle。workingに変更があると新しいターンが開始されますいずれかのaskが開いている間、ペインはwaitingと表示されます
event(e)チャットの項目: item、remove、settled、reset、およびsyncedイベント以下の項目テーブルを参照してください
subtitle(text)タイトルの下の1行。nullで消去されます120文字
badge(value)タイトルの横の{ count }または{ text }。nullで消去されます0〜9999のカウント、12文字のテキスト
progress(value)ペインが動作中または待機中に描画される{ kind: "steps", steps }または{ kind: "percent", value, label? }。nullで消去されます12ステップ。各ラベルは60文字、値は0から100までです
actions(list)ベルト内の常駐エージェントセクションにあるボタン: { id, label, icon?, busy?, disabled? }。nullでこれらをクリアします4個のボタン。ラベルは16文字です
onAction(fn)これらのボタンのいずれかのタップを実行します。拒否する場合はfalseを返します端末はbusyまたはdisabledのボタンに対してタップを送信しません
onSend(fn)端末のテキストをfn(text, { steer, requestId })として受け取ります32 KiBのテキスト
onAbort(fn)Stopをfn({ requestId })として受け取りますなし
ask(input, { signal? })質問カード (質問)ペインごとに未完了のaskが50件まで
updateAsk、decideAsk、outcomeOfaskの変更、決定、または読み取り (質問)なし
close()ペインをレイアウトから外します。未完了のaskは停止として閉じられますなし

ペインには読み取り専用の4つのフィールドもあります: id、sessionId、turnId (実行中のターン、または最後のターン)、openAsks。アクションのiconは、play、pause、check、x、refresh、archive、flag、star、send、note、search、moreのいずれかです。それ以外の名前ではアイコンは描画されません。

itemイベントは、idと任意のtsを持つアイテムを1つ含みます。既存のIDを持つアイテムは、その場で前のアイテムと置き換えられます。

種類設定内容制限
userユーザーが送信した行。requestIdは送信元の送信を指定するため、端末は自身の行をこれに置き換えます64 KiBのテキスト
reply、thinking、noticeエージェントのテキスト64 KiBのテキスト
markdown端末が見出し、リスト、強調、コードスパン、リンクとしてMarkdown描画するテキスト32 KiBのテキスト
codeコードブロック(tsなどのlang付き)32 KiBのテキスト。langは1〜24文字の英数字または_ + # . -です
linkhrefと任意のlabelhrefはhttps://のみで、最大2048文字です。labelは120文字です
toolツール呼び出し: tool: { kind: "other", name, summary, output? }、およびrunning、done、failed、deniedのいずれかのstatusnameは128バイト、summaryは1 KiB、outputは16 KiB

reply、thinking、notice、またはmarkdownのアイテムは、テキストの追加中にpartial: trueを含めることができます。テキストの増加に伴い、最短250ミリ秒ごとに同じIDを再書き込みし、ペインがworkingを離れる前に、最終テキストを含めpartialを付けずに再度書き込みます。

上限を超えたテキストは切り詰められ、制御文字や不可視文字は削除されます。Collieによって破棄されるため、不正なlang、不正なhref、不正なバッジ、または不正な進捗状況は、代わりにTypeErrorまたはRangeErrorになります。常駐エージェントはask、ask-closed、またはstateイベントを自身で追加することはできません。これらはask()とstate()が書き込みます。

質問

pane.askはカードを表示して回答を返し、requireApprovalは1回のツール呼び出しについて1行で問い合わせます。

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)は、モデルの言及からではなく呼び出しの内容からカードを構築します。タイトルは「refund wants to run」、ツール行はrefund(order: "5521", amount: 40)、プッシュ通知には「refund needs a yes」と表示され、ボタンはAllowとDenyになります。戻り値は{ approved, decidedBy, decidedAt, askId }です。拒否、タイムアウト、停止、中止はいずれもapproved: falseを返します。

requireApprovalのオプション機能デフォルト
pane問い合わせ元のペイン。必須なし
toolCallIdツール呼び出し自体のID。再起動後も同じ値になります。任意の文字列を指定できます。IDの規則に反するものは安全な形式に変換されます。必須
itemIdカードの親となる項目ツール呼び出しID
timeoutMsスマートフォン側で応答できる制限時間。これを過ぎると呼び出しは拒否され、timeout による判定となります。無制限
signalAbortSignal。中断すると呼び出しは拒否され、program による判定となります。なし
labels2つのボタンの表示文({ allow?, deny? })許可と拒否

使用する2つの要素は callSummary(name, args) と argumentsView(args) です。呼び出しを1行で表し、引数は各値をJSONとする key: value ペアで表します。

pane.ask(input) には4つの種類のいずれかを指定します。promiseは、その種類に応じた形式の回答で解決されます。

kindカードの表示内容回答制限
permission選択肢ごとにボタンを1つ配置し、それぞれに effect(allow、allow-always、deny、cancel のいずれか)が付きます。{ optionId, note? }1〜6個の選択肢
choice選択肢ごとにボタンを1つ配置します。multiple: true の場合、ユーザーは複数を選択できます。{ optionIds }1〜8個の選択肢
text1つのテキストフィールド。任意の placeholder を指定できます。{ text }maxLength は1〜2000、デフォルトは500です。プレースホルダーは60文字です。
form1〜6個のフィールド。それぞれ種類は text、choice、toggle のいずれかで、一部は required です。フィールドIDをキーとする { values }選択肢フィールドには1〜8個の選択肢があります。

すべての種類で toolCallId、itemId、title(256バイト)を受け取ります。また、reason(2 KiB)、tool、push: { title?, line? }(通知の文面、60文字と120文字)、expiresAt(Date またはタイムゾーン付きISO 8601文字列)を受け取ることもできます。

id は省略してください。SDKが askIdFor(paneId, toolCallId) を使ってこれを導出します。2つのIDに対するSHA-256の先頭32文字の16進数です。そのため、再起動後に同じツール呼び出しが再度発生しても同じIDが割り当てられ、再起動を挟んでスマートフォンから送信された回答も正しく届きます。すでに開いているIDを再度発生させると TypeError になります。

ペイン上機能
updateAsk(askId, patch)オープンなaskをその場で変更します: title、reason、tool、options、placeholder、maxLength、または fields。リビジョンが1つ上がるため、古いフォームへの回答は409 stale を受け取り、スマートフォンは再度のタップを要求します。askがオープンでない場合はfalseになります。
decideAsk(askId, answer?)スマートフォン以外の場所で、durable agentが独自にaskを判断しました。answer を指定すると、待機中の ask() はその値で解決されます。指定しない場合、AskClosed で拒否されます。その後スマートフォンでタップすると409 decided を受け取り、カードには「durable agent内で決定されました。」と表示されます。askがオープンでない場合はfalseになります。
outcomeOf(askId)最初の決定: { decidedBy, decidedAt, optionId?, effect? }。ペインは直近の500件を記憶します。発生させたことがないか、すでに忘れたaskについてはundefinedになります。

decidedBy は phone、program、timeout のいずれかです。askが expiresAt を過ぎると、timeout による決定として閉じられます。ask() は AskClosed で拒否され、その decidedBy は timeout になります。カードにはそれまでの残り時間が表示されます。タイムアウトしたか、durable agent内で決定された質問は、Chatに「回答前にタイムアウトしました: refund を実行しようとしています」のような1行を残します。

中断された signal、pane.close()、およびスマートフォンからのクローズによって、askは program による決定として閉じられ、ask() は AskClosed で拒否されます。

注意。 allow-always オプションを使うと、1回の回答でそれ以降のすべての呼び出しが通過するようになります。https経由ではトークンのみが保護手段となるため、そこでのdurable agentは「許可」と「拒否」のみを提供します。createCore で allowAlways: false を指定すると、allow-always オプションは TypeError になります。文面が切り詰められたりクリーンアップされたask、またはツール名が指定されていないaskに対しては、スマートフォンは allow-always を表示しません。

スマートフォンからの各操作にはリクエストIDが付与され、コアはその受領記録を保持します。重複実行は行われず、replayed: true とともに初回と同じ応答を返します。デフォルトの MemoryReceiptStore は、ペインごと、またstarter、名前変更、閉じる、再度開く操作のグループごとに最新の RECEIPTS_PER_GROUP 件(1000件)を保持します。破棄されたIDが再送信された場合は 500 receipt-dropped を返し、何も実行しません。プロセスが終了するとストアは破棄されます。

再起動後も受領記録を維持するには、get(requestId) と put(requestId, record, group) を実装した ReceiptStore を作成し、createCore に receipts として渡します。openCollie はこれらを常にメモリ上に保持します。

フックと履歴

フックはスマートフォンから送られる操作を処理する名前付きエンドポイントであり、history providerは独自に保持する履歴を提供します。

フック実行タイミング拒否時の動作
onSend(pane, { text, steer, turnId, requestId })pane.onSend を持たないペインへのテキスト送信例外をスロー: 500 internal(スマートフォン側では結果が不明となります)
onAbort(pane, { turnId, requestId })pane.onAbort を持たないペインに対する停止操作例外をスロー(上記と同様)
onAction(pane, { actionId, turnId?, requestId })pane.onAction を持たないペインでのベルトタップfalse を返却: 422 action-refused
onRename({ kind, id, title }, requestId)ワークスペースまたはタブの新しいタイトルfalse を返却: 422 rename-refused
onClose({ kind, id, paneIds }, requestId)スマートフォンがペイン、タブ、またはワークスペースを閉じたときfalse を返却: 422 close-refused
onReopen({ id, paneId? }, requestId)スマートフォンが閉じた会話を再度開いたときfalse を返却: 422 reopen-refused

フックは、対応するcapが有効で、リクエストIDが新規の場合にのみ実行されます。拒否された場合は何も保存されないため、同じリクエストIDで再試行できます。ペイン個別のハンドラはフックよりも優先されます。どちらも設定されていないペインへの送信、停止、タップ操作には 409 not-supported が返されます。

SDKは承認された操作を自ら適用します。名前変更ではタイトルを設定します。閉じる操作では対象とその内部のすべてを削除し、未解決の問い合わせを停止状態として閉じます。フックなしで再度開く操作は、現在のプロセスが閉じたペインを復元します。再起動前に閉じられた会話には onReopen が必要です。レイアウトは起動ごとに再構築されるため、タイトルや閉じた状態をプロセス終了後も保持したいdurable agentは、フック内でそれを保存します。

collie.history(provider) は、durable agent独自のストアから開いている会話と閉じた会話のすべてを提供します。caps を省略するか history: true を指定した場合、history capを有効にします。

HistoryProvider戻り値
list(after, limit){ items, next? }: 会話の行一覧。新しい順で最大 limit 件(100件)
items(id, after, limit){ items, next? }: 会話のアイテム一覧。古い順で各最新バージョン、最大 limit 件(1000件)。不明なIDに対しては undefined

各行は { id, title, subtitle?, workspaceId?, tabId?, startedAt, endedAt?, state, items } であり、state には open または closed が入り、items に件数が入ります。カーソル(after、next)は独自の文字列で、空白を含まない1〜512バイトの印字可能ASCIIです。next がない場合はリストの末尾を示します。

providerが設定されると、各ペインの sessionId はそのペインIDとなり、履歴はそのIDのもとでペインの会話を提供します。別のIDを指定する場合は sessionId を tab.pane() に渡し、再起動をまたいで維持できない場合は null を渡します。

tailLimit は履歴ではありません。Collieのイベント読み取り用に各ペインが保持する生の末尾データであり、デフォルトで500イベントです。追いつけなくなったリーダーは、代わりにペインの現在のビュー全体(最新の最大2000アイテム)を取得します。

機能一覧

capはdurable agentが対応可能な機能を示します。スマートフォンは、durable agentが宣言したcapに対するコントロールのみを描画します。

上限durable agentが受け取る内容
asks質問を提示し、回答を受け取る
startersstarterを一覧表示し、Newページから実行する
sendスマートフォンからのテキストを受け取る
steer実行中のターンにテキストを渡す。send が必要
abort実行中のターンを停止します
renameワークスペースまたはタブの新しいタイトルを受け取ります
closeペイン、タブ、またはワークスペースを閉じます
actionsペイン上のベルトボタンを一覧表示し、いずれかを実行します
historyオープンおよびクローズされた会話を提供します
reopenクローズされた会話を再表示します

省略した場合、capsはSDKの全機能を有効化し、history()にプロバイダが設定されるとhistoryも有効化します。指定した場合、それが全リストとなります。記載のない機能は無効になるため、{ asks: true }はaskのみを宣言します。1つだけ無効にして残りを保持するには、ALL_CAPSを展開してください: { ...ALL_CAPS, steer: false }。機能が無効化されたルートは409 not-supportedを返します。terminalは常にfalseです。

ヘルパーと定数

ルートのインポートからは、openCollieを構成するパーツや、適用されるルールもエクスポートされます。

export概要
createCore(options)サーバーを含まないコアです。socketとcallerCheckを除くopenCollieのオプションに加え、receiptsとallowAlwaysを受け取ります。epoch、workspace、starters、history、ready、isReady、handle(request)を返します。
handle単一の関数としての通信層です。WebのRequestを入力とし、Responseを出力します。通常はcore.handle(request)から利用します
wireListener(core)クリーンなクローズのためのdrained()を備えた、node:httpリクエストリスナーとしてのcore.handle
hello、versionLinehelloレスポンス、および永続エージェントがバージョン不適合時に書き込む1行
mintId()新しいランダムID(32桁の16進数文字列で表される128ビット)
askIdFor(paneId, toolCallId)派生したask ID
AskClosed応答がなかった場合にask()がrejectするエラー。byとdecidedByを保持します
idOk(id)、assertId(id, what)、safeId(raw)IDルール: 検証、例外を投げる検証、任意の文字列から毎回同じ値を生成する安全なID
cursorOk(cursor)履歴カーソルのルール
cut(text, max, multiline?)文字列をクリーンアップし、末尾に…を付与してmaxバイトに切り詰めます
hrefOf、langOf、badgeOf、progressOfリンクターゲット、コード言語、バッジ、進行状況(ペインによる検証と同等に検証済み)
subtitleOf、pushTextOf、renameTitleOfサブタイトル、askのプッシュテキスト、変更後のタイトル(クリーンアップおよび切り詰め済み)
CAPS、LIMITS各フィールドの上限(バイト単位)、および各リストの上限
ACTION_LABEL_MAX、BADGE_TEXT_MAX、BADGE_COUNT_MAX16、12、9999
SUBTITLE_MAX、LINK_LABEL_MAX、RENAME_TITLE_MAXそれぞれ120文字
PROGRESS_STEPS_MAX、PROGRESS_LABEL_MAX12ステップ、60文字
PUSH_TITLE_MAX、PUSH_LINE_MAX、PLACEHOLDER_MAX60文字、120文字、60文字
ANSWER_TEXT_MAX、ANSWER_TEXT_DEFAULT、ANSWER_TEXT_BYTES2000文字、500文字、8000バイト
ALL_CAPS、PROTOCOL_RANGE、SOCKET_ENV全機能の有効化、SDKが対応する通信バージョン、および名称COLLIE_DURABLE_SOCKET
MemoryReceiptStore、RECEIPTS_PER_GROUPデフォルトのレシートストアと、グループあたり1000件の上限

すべてのワイヤタイプとフックペイロードもsrc/core/types.tsからエクスポートされます。

Pi ヘルパー

./piは、Pi Durableの会話をペインに、危険なツール呼び出しをカードに、Piのストアを履歴に変換します。

export機能
showConversation(loc, harness, conversation, o)会話をペインとして表示します。まず履歴が表示され、その後にライブイベントが続きます。SendはリクエストIDを付けてPiのsubmitへ送信され、Stopはabortへ送信されます。2回呼び出しても安全です。
PaneRegistryどのペインがどの会話を表示するか。再起動後、reRaised(risky)は結果のない各危険呼び出しが再確認を行うまで待機するため、ready()は再確認の後に実行されます。
riskGuard({ panes, risky, words?, timeoutMs?, onTimeout? })Piの拡張機能。beforeToolフックによって、risky内のツール呼び出しをAllow/Denyカードに変換します。拒否された呼び出しはブロックされます。timeoutMsを使用するとカードが期限切れになり、応答のなかった呼び出しはブロックされ、onTimeout(tool, title)によってdurable agentがそれをログに記録できます。
askTools({ panes, words, timeoutMs?, onTimeout? })サポートデスクの2つの問い合わせツール: 選択式のask_queueと、テキスト入力式のask_customer。timeoutMsを使用すると、応答のない問い合わせは期限切れになり、ツールは"timed out"を返します。
spawnHelperTool(o)ツールspawn_helper: 新しいペインとして表示される子会話であり、ヘルパーの回答を返します。
piHistory({ harness, panes, describe })すべてのPi会話の全エントリを読み取るHistoryProvider
firstMessageOf(conversation)会話の最初のメッセージのテキスト。ペインの命名に使用します。
paneIdOf(id)、conversationOfPaneId(paneId)Pi会話のペインID(conv-<id>)およびその逆への変換
summaryOf(args, name?)ツール呼び出しの引数の文字列表現(最大200文字)
MapperPiエントリとエージェントイベントをアイテムとして扱います。生成中の応答は1つのアイテムIDを保持します。
PARTIAL_MS、RE_RAISE_MS生成中の応答における書き込み間の250ミリ秒の間隔と、reRaisedが待機する最大5000ミリ秒
ESCALATED語彙の例: showConversationがescalate: trueとともに追加するEscalateボタン用のサポートデスク通知
ASKING_TOOLS語彙の例: サポートデスクの2つの問い合わせツールの名前
Submit、ReplyExtrasカスタムsubmitのタイプ、および完了した応答の下にdurable agentが追加するアイテムのタイプ

カードに表示される文言はオプションとして渡されるため、./piにはそれら2つの定数以外のサンプルテキストは含まれません。Pi Durable 1.1.0向けに記述されています。examples/durable-member/のサポートデスクがすべてのパーツを統合します。

バージョン

このパッケージにはCollieとは別の独自バージョンがあり、対応するワイヤバージョンを指定します。

本日意味
SDK_VERSION0.1.0パッケージのバージョン。パッケージがdist-tagのexperimentalを外れるまでは、マイナーリリースでAPIが変更される可能性があります。
WIRE_VERSION1パッケージが対応するdurableワイヤバージョン

Collieは1つのワイヤバージョンに対応し、新しいバージョンがリリースされた後の1マイナーリリースの間は1つ前のバージョンも受け入れます。Collieがいずれのバージョンにも対応していない場合、コアはwarn経由でバージョンごとに1行(例: collie: Collie speaks wire v2, this durable agent speaks v1. Update the agent's SDK, or Collie.)を出力します。スマートフォン側では、durable agentのホーム上にCollie自身の言葉で不一致が表示されます。古い側を更新してください。

このパッケージはnpmのdist-tag experimentalで公開され、latestにはなりません。durableワイヤが終了になった場合、パッケージは非推奨になります(ADR 0105)。

GitHub でこのページを編集

The rest of the documentation