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-sdk | openCollieと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/pi | Pi 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 変数。いずれも未設定の場合: 起動に失敗します |
hostName | hello 内における durable agent 自身の名前(64バイトに切り詰められます)。必須 | なし |
tailLimit | Collie による読み取りのために各ペインが保持する生イベントの数 | 500、最大 1000 |
caps | durable agent が実行可能と宣言する機能(機能一覧) | SDK が実行できるすべての操作 |
callerCheck | descendant または off。Bun でのみ読み取られます | descendant |
hooks | 電話側から送信される動作ごとの名前付きの場所(フックと履歴) | なし |
warn | SDKが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、outcomeOf | askの変更、決定、または読み取り (質問) | なし |
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文字の英数字または_ + # . -です |
link | hrefと任意のlabel | hrefはhttps://のみで、最大2048文字です。labelは120文字です |
tool | ツール呼び出し: tool: { kind: "other", name, summary, output? }、およびrunning、done、failed、deniedのいずれかのstatus | nameは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 による判定となります。 | 無制限 |
signal | AbortSignal。中断すると呼び出しは拒否され、program による判定となります。 | なし |
labels | 2つのボタンの表示文({ 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個の選択肢 |
text | 1つのテキストフィールド。任意の placeholder を指定できます。 | { text } | maxLength は1〜2000、デフォルトは500です。プレースホルダーは60文字です。 |
form | 1〜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 | 質問を提示し、回答を受け取る |
starters | starterを一覧表示し、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、versionLine | helloレスポンス、および永続エージェントがバージョン不適合時に書き込む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_MAX | 16、12、9999 |
SUBTITLE_MAX、LINK_LABEL_MAX、RENAME_TITLE_MAX | それぞれ120文字 |
PROGRESS_STEPS_MAX、PROGRESS_LABEL_MAX | 12ステップ、60文字 |
PUSH_TITLE_MAX、PUSH_LINE_MAX、PLACEHOLDER_MAX | 60文字、120文字、60文字 |
ANSWER_TEXT_MAX、ANSWER_TEXT_DEFAULT、ANSWER_TEXT_BYTES | 2000文字、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文字) |
Mapper | Piエントリとエージェントイベントをアイテムとして扱います。生成中の応答は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_VERSION | 0.1.0 | パッケージのバージョン。パッケージがdist-tagのexperimentalを外れるまでは、マイナーリリースでAPIが変更される可能性があります。 |
WIRE_VERSION | 1 | パッケージが対応する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)。