AI Connect/Reference/APIリファレンス
APIリファレンス
Vinkiusクライアント、fluent APIと低レベルAPI、ケーパビリティ契約、エラー、リトライ、フック、ユーティリティのリファレンス。
Vinkius はアプリケーションスコープのエントリーポイントです。ユーザー、コネクター、認証情報、ケイパビリティのワークフローには Fluent なハンドルを使用します。リソースへの直接操作が必要な場合は、低レベルのクライアントを使用してください。
import { Vinkius } from '@vinkius/connect';
const vinkius = new Vinkius({
appId: process.env.VINKIUS_APP_ID!,
apiKey: process.env.VINKIUS_APP_KEY!,
});
const user = vinkius.user('alice_123'); // No request.
const github = user.connector('github'); // No request.
await github.connect();
await github.credentials.set({ GITHUB_TOKEN: process.env.GITHUB_TOKEN! });
const capabilities = await github.capabilities();パッケージのエクスポート
ルートパッケージ
@vinkius/connect からこれらの値をインポートします:
| カテゴリ | エクスポート |
|---|---|
| クライアントと Fluent ハンドル | Vinkius, UserContext, Connector, CredentialsHandle, Capability, CapabilitySet |
| 低レベルクライアント | CatalogClient, AppUsersClient, ConnectionsClient, CredentialsClient, ExecutionClient |
| インフラストラクチャ | ResolverCache, VERSION |
| エラー | VinkiusError, ConfigError, AuthError, NotFoundError, ValidationError, RateLimitError, QuotaError, OverageError, ConnectorNotConnectedError, NotImplementedError, ConnectionError |
ルートパッケージはさらに次の型もエクスポートします:
| カテゴリ | エクスポート |
|---|---|
| クライアントと実行 | VinkiusOptions, RequestOptions, ExecuteOptions, Hooks, CapabilityExecutor, CapabilityQuery |
| 低レベルの入力 | CreateAppUserInput, UpdateAppUserInput, CreateConnectionInput, SetCredentialsInput, ExecuteCapabilityInput |
| リソース | AppUser, Connection, CatalogConnector, CatalogConnectorDetail, CredentialType, CredentialField, CredentialSchema, CredentialStatus |
| ケイパビリティ | ConnectorStatus, ConnectorSummary, CapabilityResult, CapabilityData, JSONSchema |
| ページネーションとプリミティブ | Paginated, PageMeta, PageLinks, ISODate |
| エラー | VinkiusErrorCode |
HttpClient、再試行の内部処理、マスキング用ヘルパー、アダプター間で共有されるヘルパーは、ルートパッケージのエクスポートではありません。低レベルのクライアントクラスはエクスポートされていますが、そのコンストラクターは内部型 HttpClient を必要とします。インスタンスは vinkius.catalog、vinkius.users、および後述のスコープ付きファクトリから取得してください。
パッケージのサブパス
| サブパス | 公開エクスポート |
|---|---|
@vinkius/connect/openai | toOpenAITools, runOpenAIToolCall, OpenAIFunctionTool, OpenAIToolCall |
@vinkius/connect/anthropic | toAnthropicTools, runAnthropicToolUse, AnthropicTool, AnthropicToolUse |
@vinkius/connect/ai-sdk | toAISDKTools, AISDKTool, ToAISDKOptions |
@vinkius/connect/gemini | toGeminiTools, runGeminiFunctionCall, GeminiFunctionDeclaration, GeminiFunctionCall |
@vinkius/connect/langchain | toLangChainTools, LangChainToolFactory, ToLangChainOptions |
@vinkius/connect/json-schema | toJSONSchemaTools, executeByName, JSONSchemaTool |
@vinkius/connect/openai-agents | toOpenAIAgentsTools, OpenAIAgentsToolFactory, ToOpenAIAgentsOptions |
@vinkius/connect/llamaindex | toLlamaIndexTools, LlamaIndexToolFactory, ToLlamaIndexOptions |
@vinkius/connect/workers-ai | toWorkersAITools, WorkersAITool |
@vinkius/connect/package.json | パッケージのメタデータ |
このパッケージは ESM と CommonJS のエントリーポイントを公開し、副作用なしを宣言し、Node.js 18 以降を必要とします。
クライアントの作成
new Vinkius(options: VinkiusOptions)| オプション | デフォルト | 動作 |
|---|---|---|
appId | 必須 | vk_app_ で始まる文字列である必要があります。ただし vk_app_sk_ で始まる文字列は不可です。x-vinkius-app-id として送信されます。 |
apiKey | 必須 | vk_app_sk_ で始まる文字列である必要があります。Bearer トークンとして送信されます。サーバー側で保管してください。 |
baseUrl | https://api.vinkius.com | URL として解析され、末尾のスラッシュを除いて正規化されます。無効な URL は ConfigError をスローします。ローカル以外の http:// はコンソールに警告を出しますが、拒否はされません。 |
timeoutMs | 30000 | 試行ごとの fetch 部分に対するタイムアウトです。操作全体の期限ではありません。 |
maxRetries | 2 | 再試行可能なリクエストに対する追加試行の最大回数です。 |
fetch | globalThis.fetch | カスタム fetch 実装です。グローバルまたはカスタム関数が存在しない場合は ConfigError をスローします。 |
userAgent | なし | SDK のユーザーエージェントに追加されます。 |
hooks | なし | 同期的に実行される、マスキング済みのリクエストおよびレスポンスのコールバックです。 |
namespaceCapability | (connector, name) => \${connector}__\${name}` | 各ケイパビリティの表示名を生成します。 |
リクエストには Authorization: Bearer <apiKey>、x-vinkius-app-id、Accept: application/json、および SDK のユーザーエージェントが含まれます。ボディのあるリクエストにはさらに Content-Type: application/json も含まれます。
遅延ユーザーハンドルの作成
const user = vinkius.user('alice_123');user() はリクエストを行いません。externalId はアプリケーション内で安定したユーザー ID である必要があり、vk_app_user_ で始まる Vinkius の内部 ID であってはなりません。1 から 255 文字で構成し、空白、/、バックスラッシュを含んではいけません。無効な値は ConfigError をスローします。
リクエストオプション
リクエストを行うほとんどのメソッドは RequestOptions を受け付けます。ケイパビリティの実行は ExecuteOptions を受け付けます。
interface RequestOptions {
signal?: AbortSignal;
}
interface ExecuteOptions extends RequestOptions {
idempotencyKey?: string;
}UserContext.ensure(metadata?) は例外で、RequestOptions を受け付けません。アダプターのディスパッチヘルパーとアダプターが生成するコールバックも ExecuteOptions を受け付けません。
同じ論理的なケイパビリティ実行に対しては、空でない安定した idempotencyKey を使用し、その同じ操作を手動で繰り返す場合にのみ再利用してください。
Fluent API
遅延解決
const user = vinkius.user('alice_123');
const connector = user.connector('github');
const credentials = connector.credentials;これらの文はリクエストを行いません。Connector は操作が必要になったときにのみ接続を解決し、ハンドルの slug と connection.slug または connection.id を照合します。解決された接続 ID はそのハンドル上にのみメモ化されます。connect() は返された接続 ID を保存し、disconnect() は削除後にそれをクリアします。
UserContext
class UserContext {
readonly externalId: string;
ensure(metadata?: Record<string, unknown>): Promise<AppUser>;
get(options?: RequestOptions): Promise<AppUser>;
connector(slug: string): Connector;
connectors(options?: RequestOptions): Promise<ConnectorSummary[]>;
capabilities(options?: CapabilityQuery): Promise<CapabilitySet>;
}ensure() は冪等なユーザーの upsert を実行します。user() の呼び出しだけではユーザーは作成されません。connectors() は既存の接続のみを返します({ slug, status, connectionId? })。
capabilities() の空でない include 配列は、カンマ区切りの 1 つの connector クエリ値としてサーバーに送信されます。exclude はレスポンス後にクライアント側で適用されます。返されるケイパビリティは実行可能で、集約エンドポイントが提供したコネクターと接続 ID を保持しています。
Connector
class Connector {
readonly slug: string;
readonly credentials: CredentialsHandle;
connect(options?: RequestOptions): Promise<Connection>;
disconnect(options?: RequestOptions): Promise<void>;
status(options?: RequestOptions): Promise<ConnectorStatus>;
capabilities(options?: RequestOptions): Promise<CapabilitySet>;
}connect() は明示的に再試行可能で、返された接続 ID をメモ化します。status() は接続が存在しない場合にスローする代わりに not_connected を返します。disconnect() と capabilities() は接続を必要とし、解決で見つからない場合は ConnectorNotConnectedError をスローします。
ConnectorStatus は次のように導出されます:
| 値 | 条件 |
|---|---|
not_connected | 一致する接続が存在しません。 |
ready | connection.status === 'active' かつ connection.ready === true。 |
needs_credentials | connection.status === 'active' かつ connection.ready !== true。 |
disabled | connection.status !== 'active'。 |
CredentialsHandle
class CredentialsHandle {
schema(options?: RequestOptions): Promise<CredentialSchema>;
status(options?: RequestOptions): Promise<CredentialStatus>;
set(
values: Record<string, string>,
options?: RequestOptions,
): Promise<CredentialStatus>;
}schema() はカタログエントリを読み取るため、既存の接続を必要としません。status() と set() は暗黙的に接続することはありません。まず既存の接続を解決し、見つからない場合は ConnectorNotConnectedError をスローします。
認証情報の値は書き込み専用です。認証情報のレスポンスにはスキーマと設定済みキーの真偽値が含まれ、認証情報の値そのものは含まれません:
interface CredentialStatus {
schema: CredentialSchema;
configured: Record<string, boolean>;
}Fluent な set() はフラットなマップを受け付け、低レベルの { credentials: values } エンベロープでラップします。クライアントは送信前に値をスキーマに対して検証しません。
ケイパビリティ
CapabilitySet
CapabilitySet は Array<Capability> を継承しています。標準の配列メソッドが利用できます。
class CapabilitySet extends Array<Capability> {
static fromCapabilities(
capabilities: readonly Capability[],
): CapabilitySet;
forConnector(slug: string): CapabilitySet;
findCapability(name: string): Capability | undefined;
}forConnector() はコネクターの slug との完全一致を使用します。findCapability() は名前空間付きの表示名または生のコネクター名との最初の完全一致を返します。生の名前はコネクター間で衝突する可能性があるため、表示名を優先するか、先にスコープを絞り込んでください:
const issue = capabilities
.forConnector('github')
.findCapability('create_issue');Capability
class Capability {
readonly connector: string;
readonly connectionId: string;
readonly name: string;
readonly rawName: string;
readonly title: string | null;
readonly description: string;
readonly inputSchema: JSONSchema;
execute(
args?: Record<string, unknown>,
options?: ExecuteOptions,
): Promise<CapabilityResult>;
}| プロパティ | 説明 |
|---|---|
connector | ケイパビリティに関連付けられたコネクターの slug。 |
connectionId | 実行のルーティングに使用される接続。 |
name | namespaceCapability が生成する表示名。 |
rawName | コネクターが公開し、実行時に送信される名前。 |
title | 省略可能なタイトル。欠落時は null に正規化されます。 |
description | 説明。欠落時は空文字列に正規化されます。 |
inputSchema | 入力の JSON Schema。欠落時は {} に正規化されます。 |
実行は常に表示名ではなく connectionId と rawName でルーティングされます。Capability はエクスポートされていますが、そのコンストラクターの初期化インターフェースはパッケージのエクスポートではありません。ケイパビリティは手動で構築するのではなく、SDK が生成するオブジェクトとして扱ってください。
interface CapabilityResult {
content: Array<{ type: string; text: string }>;
isError: boolean;
}isError: true はスローされる例外ではなく、返されたケイパビリティの結果です。HTTP、トランスポート、設定、コネクターの解決、アダプターのディスパッチに関する失敗は、引き続きスローされる可能性があります。
低レベルクライアント
公開されているインスタンスとファクトリを使用します:
const catalog = vinkius.catalog;
const users = vinkius.users;
const connections = users.connections('alice_123');
const credentials = connections.credentials(connectionId);
const execution = connections.execution(connectionId);ファクトリの呼び出しでリクエストは発生しません。特に明記されていない限り、低レベルのメソッドは Fluent なハンドルではなく、リソースまたは生のケイパビリティの形式を返します。
CatalogClient
class CatalogClient {
list(
options?: { page?: number } & RequestOptions,
): Promise<Paginated<CatalogConnector>>;
get(
slug: string,
options?: RequestOptions,
): Promise<CatalogConnectorDetail>;
search(
query: string,
options?: RequestOptions,
): Promise<CatalogConnector[]>;
}list() はページベースです。get() はコネクターの slug またはカタログ ID を受け付け、credential_schema を返します。search() は q を送信し、正規化されたデータ配列を返します。フィルタリングはサーバーの q サポートに依存します。
AppUsersClient
class AppUsersClient {
create(
input: CreateAppUserInput,
options?: RequestOptions,
): Promise<AppUser>;
get(externalId: string, options?: RequestOptions): Promise<AppUser>;
update(
externalId: string,
patch: UpdateAppUserInput,
options?: RequestOptions,
): Promise<AppUser>;
delete(externalId: string, options?: RequestOptions): Promise<void>;
list(
options?: { status?: string; page?: number } & RequestOptions,
): Promise<Paginated<AppUser>>;
capabilities(
externalId: string,
options?: { connectors?: string[] } & RequestOptions,
): Promise<CapabilityData[]>;
connections(externalId: string): ConnectionsClient;
}create() は外部 ID による、明示的に再試行可能な upsert です。capabilities() は実行可能な Capability オブジェクトではなく、生の CapabilityData[] を返します。実行可能な Fluent な形式には user.capabilities() を使用してください。
ConnectionsClient
class ConnectionsClient {
list(options?: RequestOptions): Promise<Connection[]>;
create(
input: CreateConnectionInput,
options?: RequestOptions,
): Promise<Connection>;
get(
connectionId: string,
options?: RequestOptions,
): Promise<Connection>;
delete(
connectionId: string,
options?: RequestOptions,
): Promise<void>;
credentials(connectionId: string): CredentialsClient;
execution(connectionId: string): ExecutionClient;
}create() は明示的に再試行可能な get-or-create 操作です。list() は単純な配列を返します。
CredentialsClient
class CredentialsClient {
status(options?: RequestOptions): Promise<CredentialStatus>;
set(
input: SetCredentialsInput,
options?: RequestOptions,
): Promise<CredentialStatus>;
}
interface SetCredentialsInput {
credentials: Record<string, string>;
}低レベルのメソッドは、Fluent なハンドルが自動的に追加するエンベロープを必要とします:
await connections.credentials(connection.id).set({
credentials: { GITHUB_TOKEN: process.env.GITHUB_TOKEN! },
});ExecutionClient
class ExecutionClient {
list(options?: RequestOptions): Promise<CapabilityData[]>;
execute(
input: ExecuteCapabilityInput,
options?: ExecuteOptions,
): Promise<CapabilityResult>;
}
interface ExecuteCapabilityInput {
name: string;
arguments?: Record<string, unknown>;
}name はコネクターの生のケイパビリティ名です。これは ExecuteOptions を受け付ける唯一の低レベルメソッドです。
入力型とリソース型
interface CreateAppUserInput {
external_id: string;
status?: string;
metadata?: Record<string, unknown>;
}
interface UpdateAppUserInput {
status?: string;
metadata?: Record<string, unknown>;
}
interface CreateConnectionInput {
connector: string;
}
interface SetCredentialsInput {
credentials: Record<string, string>;
}
interface ExecuteCapabilityInput {
name: string;
arguments?: Record<string, unknown>;
}
type ISODate = string;
type JSONSchema = Record<string, unknown>;
interface AppUser {
id: string;
external_id: string;
status: string;
metadata: Record<string, unknown> | null;
application_id?: string;
mcp_count?: number;
created_at: ISODate;
updated_at: ISODate;
}
interface Connection {
id: string;
slug: string | null;
name: string;
description: string | null;
status: string;
ready: boolean;
tokens_count?: number;
created_at: ISODate;
}
interface CatalogConnector {
id: string;
slug: string;
title: string;
short_description: string | null;
publisher_type: string;
listing_type: string;
requires_buyer_auth: boolean;
server_type?: string;
tools_count?: number;
}
interface CatalogConnectorDetail extends CatalogConnector {
credential_schema: CredentialSchema;
}
type CredentialType =
| 'api_key'
| 'token'
| 'password'
| 'connection_string'
| 'string'
| 'number'
| 'email'
| 'url'
| 'select'
| 'boolean'
| 'oauth2';
interface CredentialField {
type: CredentialType;
label?: string;
required?: boolean;
group?: string;
docs_url?: string;
placeholder?: string;
allowed?: string[];
}
type CredentialSchema = Record<string, CredentialField>;
interface CapabilityData {
name: string;
title?: string | null;
description?: string | null;
input_schema?: JSONSchema | null;
annotations?: unknown;
connector?: string;
connection_id?: string;
}
interface Paginated<T> {
data: T[];
meta?: PageMeta;
links?: PageLinks;
}
interface PageMeta {
current_page: number;
from: number | null;
last_page: number;
path: string;
per_page: number;
to: number | null;
total: number;
}
interface PageLinks {
first: string | null;
last: string | null;
prev: string | null;
next: string | null;
}単純なリストのエンドポイントは、裸の配列または data を持つオブジェクトを受け付けます。予期しない形式は空の配列に正規化されます。ページネーション付きのエンドポイントは { data, meta?, links? } を想定し、欠落しているか配列でない data フィールドを空の配列に正規化し、truthy な meta と links の値を保持します。
フックとマスキング
interface Hooks {
onRequest?: (info: {
method: string;
url: string;
headers: Record<string, string>;
}) => void;
onResponse?: (info: {
status: number;
url: string;
requestId?: string;
body: unknown;
}) => void;
}フックは同期的に実行され、待機されません。フックが例外をスローすると、その例外は伝播し、リクエストの流れが止まります。
リクエストフック。 onRequest は完全なリクエスト URL とコピーされたヘッダーマップとともに、毎回の試行の前に実行されます。リクエストボディは受け取らず、URL はマスキングされません。ヘッダー名は大文字小文字を区別せずに完全一致で照合されます。次の値は [REDACTED] になります: authorization、idempotency-key、cookie、set-cookie。その他のヘッダーがヒューリスティックでマスキングされることはありません。
レスポンスフック。 onResponse は HTTP レスポンスを返す毎回の試行に対して実行されます。これには再試行される一時的なレスポンスも含まれます。fetch の失敗やレスポンスなしのタイムアウトの場合には実行されません。空のボディは undefined になり、有効な JSON はパースされ、JSON でないテキストは文字列のままになります。レスポンスオブジェクトのキーは大文字小文字を区別せずに完全一致で照合されます。次の値は [REDACTED] になります: authorization、apikey、api_key、token、access_token、refresh_token、mcp_url、credentials、password、secret、client_secret。部分文字列や形状によるシークレット検出は行われません。深さ 6 のオブジェクトは [TRUNCATED] に、繰り返しまたは循環する参照は [CIRCULAR] になります。マスキングはフック用のコピーを作成するものであり、VinkiusError.details を書き換えません。
タイムアウト、再試行、べき等性
タイムアウトの範囲。 各試行は fetch の promise を対象とする新しい timeoutMs タイマーを受け取ります。タイマーはレスポンスボディの読み取り前に解除され、response.text() も再試行のバックオフも対象としないため、再試行が 1 つの総期限を共有することはありません。呼び出し元が制御するキャンセルには signal を渡してください。fetch 中の呼び出し元による中止は再試行されず、通常は ConnectionError になります。
再試行ポリシー。 デフォルトでは、再試行可能な操作は最大 3 回試行します。操作が再試行可能になるのは、その HTTP メソッドが GET、PUT、DELETE の場合、または SDK が明示的に再試行可能とマークした場合(ユーザーの作成、接続の作成、idempotencyKey を指定したケイパビリティの実行)です。再試行可能な操作は、ネットワークエラー、試行ごとのタイムアウト、または HTTP 429、502、503、504 の後に再試行されます。PATCH と通常の POST リクエストは再試行されません。
バックオフは指数窓上のフルジッターを使用します。初期値は 250 ms、上限は 4,000 ms です。Retry-After(delta-seconds または HTTP 日付)が優先され、これも上限は 4,000 ms です。maxRetries は再試行回数を変更するものであり、これらの遅延値を変更するものではありません。
エラーとリクエスト ID
class VinkiusError extends Error {
readonly status: number;
readonly code: VinkiusErrorCode;
readonly requestId: string | undefined;
readonly details: unknown;
}クライアント側のエラーとトランスポートのエラーはステータス 0 を使用します。終端的な HTTP の失敗は、パースされた API レスポンスを details に含めます。
| クラス | code | 発生元 | 追加フィールド |
|---|---|---|---|
ConfigError | config_error | 無効なクライアント設定または外部 ID | なし |
AuthError | auth_error | HTTP 401 または 403 | なし |
NotFoundError | not_found | HTTP 404 | なし |
ValidationError | validation_error | HTTP 422 | errors: Record<string, string[]> |
RateLimitError | rate_limit | ケイパビリティのクォータ形式を持たない HTTP 429 | retryAfterMs?: number |
QuotaError | quota_exceeded | isError: true または upgrade_url を伴う HTTP 429 | upgradeUrl?: string |
OverageError | overage_blocked | HTTP 402 | upgradeUrl?: string |
ConnectorNotConnectedError | connector_not_connected | Fluent な操作が欠落している接続を必要としている | なし |
ConnectionError | connection_error | fetch 中のネットワーク障害、タイムアウト、または呼び出し元による中止 | なし |
VinkiusError | api_error | その他の非成功 HTTP ステータス | なし |
HTTP レスポンスの場合、クライアントは x-request-id、次に x-vinkius-request-id から、最初の空でないリクエスト ID を読み取ります。この値は onResponse と最終的にマッピングされた HTTP エラーに渡されます。成功したリソースの値には含まれません。クライアント側のエラーとトランスポートのエラーには通常リクエスト ID がありません。制御フローのパターンについては Error handling を参照してください。
ResolverCache
ResolverCache は、シークレットではない安定したデータ向けのスタンドアロンのインメモリ TTL キャッシュです。クライアントは内部で使用しません。
class ResolverCache {
constructor(ttlMs?: number); // Default: 5 minutes.
get<V>(key: string): V | undefined;
set<V>(key: string, value: V): void;
delete(key: string): void;
clear(): void;
resolve<V>(key: string, compute: () => Promise<V>): Promise<V>;
}import { ResolverCache } from '@vinkius/connect';
const cache = new ResolverCache(10 * 60 * 1000);
const schema = await cache.resolve('github:schema', () =>
user.connector('github').credentials.schema(),
);期限切れのエントリは get() 時に削除されます。resolve() は、promise が履行された後にのみ欠落した値を計算して保存します。拒否はキャッシュされず、同時発生したミスも統合されません。キャッシュされた undefined はミスと区別できません。認証情報、トークン、認可ヘッダー、その他のシークレットをキャッシュしないでください。キャッシュは最適化であり、認可の手段ではありません。
アダプターリファレンス
すべてのアダプターは readonly Capability[] を受け付け、生成される定義でケイパビリティの表示名を使用します。空の入力スキーマは { type: 'object', properties: {} } に正規化されます。アダプターはケイパビリティの引数をローカルで検証しません。検証は呼び出されるサービスに属します。
ディスパッチヘルパーと生成された実行コールバックは、ExecuteOptions なしで capability.execute(args) を呼び出します。そのため、シグナルやべき等キーを受け取ることはできません。キャンセルや再試行可能な実行が必要な場合は、Capability.execute(args, options) または ExecutionClient.execute(input, options) を直接呼び出してください。
toOpenAITools(capabilities)はOpenAIFunctionTool[]を返します。runOpenAIToolCall(capabilities, call)は表示名のみを照合します。空、不正形式、null、プリミティブな JSON 引数文字列は{}になり、不明な名前は単純なErrorをスローします。toAnthropicTools/runAnthropicToolUse: 表示名のみの照合です。不明な名前は単純なErrorをスローします。toAISDKTools(capabilities, { jsonSchema? })は表示名をキーとするレコードを返します。表示名が重複すると前のエントリが上書きされます。注入されたラッパーがない場合、parametersは生の正規化済み JSON Schema です。生成された各execute(args)はCapabilityResultを返します。toGeminiTools/runGeminiFunctionCall: 欠落している引数は{}になり、不明な名前は単純なErrorをスローします。toLangChainTools(capabilities, { tool })とtoOpenAIAgentsTools(capabilities, { tool })は呼び出し元のファクトリを必要とし、その戻り値の型に対してジェネリックです。生成されたコールバックは結果のテキスト部分を改行で連結し、isErrorもコンテンツ部分の型も保持しません。Agents アダプターはstrict: falseで正規化済みの生の JSON Schema を渡します。toLlamaIndexTools(capabilities, { tool })は生の JSON Schema を受け付けるため、Zod は不要です。toWorkersAITools(capabilities)は実行関数がバインドされた単純なオブジェクトを返します。toJSONSchemaTools(capabilities)は{ name, description, parameters }を生成します。executeByName(capabilities, name, args)は表示名または生の名前を照合し、生の名前が重複する場合は最初の一致で曖昧になります。不明な名前は単純なErrorをスローします。
次のステップ
- framework adapters を比較してください。
- error handling の制御フローパターンに従ってください。
- 焦点を絞った統合パターンについては recipes を参照してください。
