Functions
query()
SDK のメインエントリ関数です。async generator を作成し、メッセージの到着順に SDKMessage をストリーム出力します。
パラメータ
| パラメータ | 型 | 説明 |
|---|---|---|
prompt | string | AsyncIterable<SDKUserMessage> | シングルターンは文字列、マルチターンは非同期イテラブルオブジェクト |
options | Options | オプションのセッション設定 |
戻り値
Query を返します。これは AsyncGenerator<SDKMessage, void> であり、for await で消費します。
startup()
ユーザーメッセージやモデルリクエストを開始せずに qodercli サブプロセスを起動し、初期化ハンドシェイクの完了を待ちます。最初のクエリから CLI の起動レイテンシーを取り除くために使用します。
initializeTimeoutMs のデフォルトは 60000 ミリ秒です。初期化エラーまたはタイムアウトが発生した場合、SDK は起動したリソースを終了してエラーを返します。experimental Cloud Agent ランタイムではサポートされていません。
各 WarmQuery は 1 回のクエリにのみ使用できます。query() を呼び出さない場合は close() でプロセスを終了してください。
StartupParams と WarmQuery を参照してください。
resolveSettings()
qodercli を起動せずに、選択したファイルシステム上の設定ソースを読み込み、マージします。
user、project、local の順でマージされます。settingSources を省略すると 3 つすべてを読み込み、[] を渡すといずれも読み込みません。存在しないファイルはスキップされます。読み取れないファイル、無効な JSON / JSONC、またはオブジェクト以外の設定はエラーになります。
戻り値の effective は、選択したファイルソースをカスケードした生の有効設定です。CLI のランタイムデフォルト、query() の options、環境変数の展開、信頼判断などを含む最終的なランタイム設定の完全なスナップショットではありません。
ResolveSettingsOptions と ResolvedSettings を参照してください。
q.interrupt()
q.cancelAsyncMessage()
true、メッセージが存在しないかキャンセルできない場合は false を返します。キュー内メッセージをキャンセルするを参照してください。
q.backgroundTasks()
tool_use ID を渡すと 1 つの実行だけを対象にし、省略すると対象可能な実行をすべて移します。ID を指定した場合、その実行が移行したときだけ true を返します。CLI は background_tasks_v1 を宣言している必要があります。
q.stopTask()
task_started.task_id または background_tasks_changed.tasks[].task_id の ID を使用します。Agent と Shell は同じメソッドとイベントチャネルを共有します。ホストで区別する場合は、開かれた文字列フィールド task_type(local_agent または local_bash)を確認します。CLI は background_tasks_v1 を宣言している必要があります。
q.initializationResult()
skills は発見済み一覧であり、メインセッションで現在呼び出せる完全な一覧ではありません。戻り値の型は SDKControlInitializeResponse、発見と呼び出しのセマンティクスは Skills を参照してください。
q.accountInfo()
account_info をサポートしていない場合、または空の結果を返した場合は、初期化時のアカウントスナップショットへフォールバックします。
すべてのフィールドは省略可能であり、アカウントや組織の状態によっては結果が空になることがあります。トークン、API キー、その他の認証情報は返しません。experimental Cloud Agent runtime ではこのメソッドをサポートしていません。戻り値の型は AccountInfo を参照してください。
セッション管理関数
次の関数はデフォルトでローカルセッションを読み書きします。options に sessionStore を渡すと、外部ストレージを操作します。接続方法と動作は外部セッションストレージを参照してください。
| 関数 | 役割 | 外部ストレージの要件 |
|---|---|---|
listSessions | 更新日時の新しい順にセッションを一覧表示 | SessionStore.listSessions |
getSessionInfo | 1 つのセッションのメタデータを読み取る | load |
getSessionMessages | 現在有効な会話チェーンを読み取る | load |
renameSession / tagSession | タイトルまたはタグを更新 | append |
forkSession | 既存履歴から独立したセッションを作成 | load と append |
listSubagents | サブエージェント ID を一覧表示 | SessionStore.listSubkeys |
getSubagentMessages | 1 つのサブエージェントのメッセージを読み取る | load。利用可能なら SessionStore.listSubkeys も使用 |
deleteSession | セッションと子データを削除 | SessionStore.delete。未実装の場合、外部データは削除しない |
dir と sessionStore を共有します。一覧とメッセージ関数は limit と offset によるページングもサポートします。listSessions はローカルセッションの読み取り時に includeWorktrees をサポートします。forkSession は upToMessageId と title、getSessionMessages は includeSystemMessages も受け取ります。
importSessionToStore()
既存のローカルセッションを外部ストレージへコピーします。
includeSubagents のデフォルトは true、batchSize のデフォルトは 500 です。
Types
Options
query() の設定オブジェクトです。
| フィールド | 型 | デフォルト値 | 説明 |
|---|---|---|---|
abortController | AbortController | undefined | セッションを早期に終了するコントローラー。abort() を呼び出すとセッション全体が閉じます。入力を終了してセッションを閉じるを参照してください |
additionalDirectories | string[] | [] | AI がアクセス可能な追加ディレクトリ |
agent | string | undefined | メインセッションで使用する Agent 名。Agents Reference を参照 |
agents | Record<string, AgentDefinition> | undefined | プログラムで定義するサブエージェント。Agents Reference を参照 |
allowDangerouslySkipPermissions | boolean | false | 権限チェックのスキップを許可。permissionMode: 'bypassPermissions' と併用 |
allowedTools | string[] | [] | ツールホワイトリスト。事前承認で通過。組み込みツール名は Tools Reference を参照 |
auth | AuthOptions | undefined | 認証設定。query() で必須 |
canUseTool | CanUseTool | undefined | ツールに承認が必要な場合、または Agent がユーザーに質問する場合に呼び出される。承認とユーザー入力を参照 |
continue | boolean | false | 最後のセッションを継続 |
cwd | string | process.cwd() | 作業ディレクトリ |
disallowedTools | string[] | [] | ツールブラックリスト。allowedTools および permissionMode より優先。組み込みツール名は Tools Reference を参照 |
enableFileCheckpointing | boolean | false | ファイルチェックポイントの有効化。rewindFiles() と併用。Checkpoint を参照 |
env | Record<string, string | undefined> | process.env | CLI プロセスに渡す環境変数。QODER_CONFIG_DIR はユーザーデータディレクトリを参照 |
proxy | string | undefined | CLI プロセスで使用するプロキシ URL。http://、https://、socks5://、socks:// をサポート |
executable | 'bun' | 'deno' | 'node' | 自動検出 | JavaScript ランタイム |
executableArgs | string[] | [] | ランタイムに渡す引数 |
experimentalCloudAgent | CloudAgentOptions | undefined | Qoder Cloud Agent ランタイム(experimental)に切り替え。Cloud Agent を参照 |
extraArgs | Record<string, string | null> | {} | CLI に渡す追加引数 |
fallbackModel | string | undefined | メインモデル失敗時の代替モデル |
forkSession | boolean | false | resume と併用時に新しいセッション ID にフォーク |
hooks | Partial<Record<HookEvent, HookCallbackMatcher[]>> | {} | ライフサイクルフック。Hooks を参照 |
includeHookEvents | boolean | false | メッセージストリームに hook ライフサイクルイベントを含める |
includePartialMessages | boolean | false | stream_event ストリームフラグメントを含める。ストリーム出力 を参照 |
maxTurns | number | undefined | 最大対話ターン数(ツール呼び出しのラウンドトリップ数) |
mcpServers | Record<string, McpServerConfig> | {} | MCP サーバー設定。MCP を参照 |
model | string | CLI デフォルト | 使用モデル。選択肢: 'auto' / 'ultimate' / 'performance' / 'efficient' / 'lite' |
pathToQoderCLIExecutable | string | バンドル済みバイナリを自動解決 | qodercli 実行ファイルパス |
permissionMode | PermissionMode | 'default' | セッション権限モード |
permissionPromptToolName | string | undefined | 権限プロンプト用の MCP ツール名。canUseTool と排他 |
plugins | SdkPluginConfig[] | [] | ローカルプラグインの読み込み。Plugins を参照 |
promptSuggestions | boolean | false | 各ターンの result 後に prompt_suggestion メッセージを発行 |
resolveModel | ModelPolicyProvider | undefined | 動的モデル選択コールバック。渡した時点で動的コールバックモードに切り替わる。Model Policy を参照 |
resolveModelTimeoutMs | number | 500 | コールバックタイムアウト(ミリ秒)。resolveModel を渡したときのみ有効 |
resume | string | undefined | 復元するセッション ID |
resumeSessionAt | string | undefined | 指定メッセージ UUID から復元 |
resumeDropsTurn | string | undefined | resumeSessionAt と併用し、切り捨て範囲がこのプロンプト UUID に属することを検証 |
persistSession | boolean | true | 後で復元できるようにローカルセッションを保存する。sessionStore 設定時は false にできません |
sessionId | string | 自動生成 | セッション UUID の指定 |
sessionStore | SessionStore | undefined | セッション履歴を外部ストレージに保存し、別のホストから復元できるようにする。外部セッションストレージを参照 |
sessionStoreFlush | SessionStoreFlush | 'batched' | 外部ストレージへの書き込みタイミング。sessionStore 未設定時は無視 |
loadTimeoutMs | number | 60000 | セッション復元時の外部ストレージ読み込み 1 回ごとのタイムアウト |
settings | string | Settings | undefined | インライン settings オブジェクトまたは settings ファイルパス |
settingSources | SettingSource[] | CLI デフォルト | ロードする filesystem settings。[] で user/project/local をスキップ |
skills | string[] | 'all' | undefined | メインセッションの skill ポリシー。配列でモデルコンテキストと呼び出しを制限し、[] ですべて無効、'all' ですべて有効。Skills を参照 |
spawnQoderCLIProcess | (options: SpawnOptions) => SpawnedProcess | undefined | カスタムプロセス spawn 関数 |
strictMcpConfig | boolean | false | 厳密な MCP 検証 |
systemPrompt | string | { type: 'preset'; preset: 'qodercli'; append?: string } | undefined | システムプロンプト。文字列で上書き、preset 形式では qodercli プリセットの後に append |
toolConfig | ToolConfig | undefined | 組み込みツール動作設定。Tools を参照 |
tools | string[] | { type: 'preset'; preset: 'qodercli' } | undefined | ツール集合。省略時、SDK のデフォルトツール面には永続 Task ツールが含まれます。文字列配列で利用可能ツールを制限。空配列で全ツール無効化。組み込みツール名は Tools Reference を参照 |
SessionStore
外部ストレージアダプターが実装するインターフェースです。append と load は必須で、その他のメソッドは一覧、削除、サブエージェントの完全な復元を有効にします。
SessionStoreFlush
batched は result 境界で書き込みを行うデフォルト値です。eager はより頻繁に書き込みを開始します。
InMemorySessionStore
開発とテスト用の組み込み SessionStore 実装です。すべてのオプションメソッドに加え、getEntries(key)、size、clear() を提供します。データは現在のプロセス内だけに存在し、プロセス終了時に失われます。
SDKSessionInfo
listSessions() と getSessionInfo() が返すセッションメタデータです。
fileSize はローカルストレージでのみ提供されます。時刻フィールドは Unix ミリ秒です。
SessionMessage
セッションおよびサブエージェントのメッセージ関数が返す履歴メッセージです。
Settings
Options.settings には settings ファイルパス、またはインラインの Settings オブジェクトを渡せます。SDK はこれらのフィールドを CLI に渡します。以下は skill 関連フィールドの抜粋であり、デフォルト値と実際の動作は組み合わせる CLI バージョンに依存します。
| フィールド | 説明 |
|---|---|
skillListingMaxDescChars | モデルに表示する skill 一覧の各説明に対する文字数上限 |
skillListingBudgetFraction | skill 一覧が使用できるコンテキストウィンドウの比率 |
skillOverrides
skill 名ごとに発見と可視性を制御します。プラグイン skill にはプラグイン修飾名 plugin:skill、その他のソースには修飾なしの名前を使用します。マッチングでは完全名を先に確認し、その後に修飾なしの名前へフォールバックします。
| 値 | 動作 |
|---|---|
'on' | デフォルトの可視性。名前と説明がモデルに表示され、追加の呼び出し拒否は行いません。セッションのツール設定と権限ポリシーは引き続き適用されます |
'name-only' | モデルには名前だけを表示し、説明は表示しません |
'user-invocable-only' | モデルには表示しませんが、ユーザーは /name で引き続き起動できます |
'off' | initializationResult().skills とモデルコンテキストから非表示にし、Skill ツール呼び出しも拒否します |
StartupParams と WarmQuery
initializeTimeoutMs は正の有限数である必要があり、デフォルトは 60000 です。WarmQuery.query() は 1 回だけ呼び出すことができ、2 回目以降はエラーになります。close() は繰り返し呼び出せます。明示的なリソース管理をサポートする runtime 向けに、WarmQuery は Symbol.asyncDispose も実装します。
ResolveSettingsOptions と ResolvedSettings
provenance は各トップレベルキーで最終的に有効になったソースを記録します。ネストした設定をレイヤーごとに確認する場合は sources を使用してください。
AccountInfo
organization は組織 ID、organizationName は表示名です。認証ソースとプロバイダーのフィールドは、組み合わせる CLI が判定できる場合にのみ設定されます。
SDKControlInitializeResponse
q.initializationResult() が返す初期化スナップショットです。
skills はメタデータを含む発見済み一覧です。メッセージストリームの SDKSystemMessage.skills は init メッセージが持つ名前の配列 string[] であり、両者は同じ戻り値構造ではありません。
AuthOptions
fetchServiceAccountToken は引数を受け取りません。ホストは SAT を取得するときに scope を指定し、その SAT を token で返します。expiresAt は省略できます。指定する場合は、SAT の絶対有効期限を Unix ミリ秒タイムスタンプで指定する必要があります。たとえば、Date.now() + 3_600_000 は現在時刻から 1 時間後を表します。
| 形式 | 説明 |
|---|---|
{ type: 'accessToken'; accessToken: string } | PAT を直接渡す |
{ type: 'accessToken'; accessToken: { envVar } } | 指定環境変数から PAT を読み取り。デフォルト QODER_PERSONAL_ACCESS_TOKEN |
{ type: 'qodercli' } | ローカルの qodercli login 状態を再利用 |
{ type: 'serviceAccount'; serviceAccountKey: string } | Service Account Key を使用し、短期 Service Account Token(SAT)を自動的に取得・更新 |
{ type: 'serviceAccount'; fetchServiceAccountToken: FetchServiceAccountToken } | ホストのコールバックで短期 Service Account Token(SAT)を提供・更新 |
accessToken(token) / accessTokenFromEnv(envVar?) / qodercliAuth() / serviceAccount({ serviceAccountKey }) / serviceAccount({ fetchServiceAccountToken })。SDK 認証 を参照。
options.agents
型: Record<string, AgentDefinition>
現在の query() セッションで利用できるカスタム Agent を登録します。オブジェクトの key が Agent 名、value がその Agent 定義です。
Agentツールが必要です: カスタムサブエージェントは、メインセッションから組み込みAgentツール経由で委任されます。Qoder は Agent ツールを通じてサブエージェントを起動するため、allowedToolsにAgentを含める必要があります。
Agent ツールを通じてこれらのサブエージェントを呼び出せます。メインセッションがタスクを委任するには、ツール集合に Agent が含まれている必要があります。allowedTools: ['Agent'] は必須の事前承認指定です。options.tools でメインセッションの利用可能ツールを絞る場合も、Agent を含めてください。
options.agent
型: string
メインセッションをどの Agent 身分で実行するかを指定します。値には options.agents に登録した名前、または現在の CLI が検出した組み込み / プラグイン Agent 名を指定できます。
prompt、model、ツール制限を使用します。省略時はデフォルトのメインセッション動作になります。
AgentDefinition
カスタム Agent の定義です。以下のフィールドは、現行 SDK でカバーされ、機能テストで検証されている安定機能です。
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
description | string | はい | Agent の用途説明。モデルはこれを見ていつ呼び出すかを判断します |
prompt | string | はい | Agent のシステムプロンプト |
tools | string[] | いいえ | Agent が使用できるツールのホワイトリスト |
disallowedTools | string[] | いいえ | Agent のツール集合から除外するツール |
model | string | いいえ | モデル上書き。'inherit' はメインセッションのモデルを継承します |
mcpServers | AgentMcpServerSpec[] | いいえ | Agent が使用できる MCP server 仕様 |
skills | string[] | いいえ | Agent コンテキストへプリロードする skill 名 |
initialPrompt | string | いいえ | この Agent がメインセッション Agent として使われるときに自動送信される最初のユーザー入力 |
maxTurns | number | いいえ | Agent の最大 API ターン数 |
effort | EffortLevel | いいえ | 推論努力レベル |
permissionMode | PermissionMode | いいえ | この Agent 内でのツール実行の権限モード |
description
Agent がどのようなタスクに適しているかを説明します。モデルがこの Agent を選ぶかどうかに影響します。
Helpful assistant のような広すぎる説明は避けてください。
prompt
Agent のシステムプロンプトです。役割、制約、出力形式を定義します。
tools
Agent が使用できるツールのホワイトリストです。設定すると、Agent は列挙されたツールだけを使用できます。
tools を省略すると、サブエージェントのデフォルトツール表が使われます。サブエージェントのツール表は、メインセッションの allowedTools による絞り込みを継承しません。
disallowedTools
Agent のツール集合から指定ツールを除外します。
disallowedTools を省略しても、サブエージェントはメインセッションの disallowedTools による絞り込みを継承しません。最終的なツール集合を明確に把握している場合を除き、通常は tools と disallowedTools を同時に設定しないでください。
model
Agent に使用するモデルを指定します。省略時はセッションのデフォルトモデルを使います。対応するモデル階層は次の通りです。
| 値 | 階層 | 説明 | 適した用途 | Credit 消費 |
|---|---|---|---|---|
auto | スマートルーティング | 能力とコストのバランスを取り、最適なモデルを自動選択 | 大半の日常開発作業。デフォルト推奨 | ~1.0x |
ultimate | Ultimate | エキスパート級の深い推論と思考能力 | 複雑なシステム設計、高難度の問題分析 | ~1.6x |
performance | Performance | 高度な推論能力と高品質な出力 | 中核機能実装、アーキテクチャ設計、リファクタリング | ~1.1x |
efficient | Efficient | 標準推論能力と高いコスト効率 | 基本的なコード生成、単体テスト、日常 Q&A | ~0.3x |
lite | Lite | 基本推論能力。無料利用 | クイック検証、単純なロジック、短い質問 | 0x |
| 値 | 説明 |
|---|---|
inherit | メインセッションのモデルを継承 |
| 完全なモデル ID | 現在の CLI / backend がサポートするモデル ID を直接指定 |
mcpServers
この Agent が利用できる MCP server を制限または追加します。
skills
Agent コンテキストにプリロードする skill 名の一覧です。通常の skill 名とプラグイン修飾名の両方をサポートします。
initialPrompt
この Agent が options.agent によってメインセッション Agent になったとき、最初のユーザー入力として自動送信されます。
Agent ツール経由でサブエージェントとして呼ばれる場合は無視されます。
maxTurns
Agent の最大 API ターン数を制限します。コスト、実行時間、ループリスクを制御するのに適しています。
effort
effort は、複雑なレビュー、アーキテクチャ分析、高リスク変更に適していますが、レイテンシと token 消費が増えます。
permissionMode
この Agent 内部のツール実行に対する権限モードを制御します。セッションレベルの permissionMode と同じ意味体系を使いますが、作用範囲はこの Agent に限定されます。セッションレベルの権限チェーン、allowedTools / disallowedTools / canUseTool の優先順位と例は 権限制御 を参照してください。
| 値 | 意味 | 適した用途 |
|---|---|---|
'default' | 標準権限動作。ツール呼び出しはツール集合、allow / deny ルール、ランタイム承認、CLI デフォルトポリシーを通ります | 大半の対話型サブエージェント |
'acceptEdits' | ファイル編集系操作を自動承認します。その他の機密操作は通常の権限フローに従います | ワークスペースファイルの変更を許可したサブエージェント |
'bypassPermissions' | 権限チェックをスキップします。高リスクモードで、通常は信頼済み自動化やテスト環境に限定します | 制御された CI、一時検証、一回限りの自動化 |
'yolo' | 'bypassPermissions' の互換エイリアス。同様に権限チェックをスキップします | 旧設定との互換。新規コードでの優先使用は非推奨 |
'plan' | 計画モード。まず実行計画を出す用途に適し、デフォルトでは実変更を行いません | 計画、設計、レビュー、サブエージェントにファイルを変更させたくない場合 |
'dontAsk' | 対話確認を行いません。事前承認されていない、またはルールで許可されていない操作は拒否されます | 非対話環境、または確認ではなく失敗させたいワークフロー |
'auto' | ランタイム能力が allow / deny を自動判断します。安全なワークスペース内ファイル編集は自動許可される場合があります | 確認の中断を減らしつつランタイム判断を残したい場合 |
AgentInfo
q.supportedAgents() が返す Agent の概要です。
| フィールド | 型 | 説明 |
|---|---|---|
name | string | Agent 名 |
description | string | Agent の用途説明 |
model | string | undefined | Agent のモデル上書き。未設定または model: 'inherit' の場合は通常空です |
options.agents で登録した Agent が含まれるほか、現在の CLI が検出した組み込み、プロジェクト、ユーザー、プラグイン Agent が含まれる場合があります。実際に利用できる項目は qodercli のバージョンと現在の設定に依存します。
コンテキストと呼び出し境界
- サブエージェントは独立したコンテキストを使用し、親セッションの完全な履歴を受け取りません。
- 親セッションからサブエージェントへ渡される主な情報は、
Agentツール呼び出し時に渡すタスク prompt です。 - サブエージェントの中間ツール結果は親セッションに直接入りません。親セッションが受け取るのはサブエージェントの最終応答です。
- サブエージェントはさらに自分のサブエージェントを生成できないため、サブエージェントの
toolsにAgentを入れないでください。 initialPromptはoptions.agentで指定したメインセッション Agent にのみ有効です。
Model Policy
query() の動的モデル選択能力。二つのモードがあります:固定モデルモード(resolveModel を渡さず、options.model またはバックエンドのデフォルトを使用)と動的コールバックモード(resolveModel を渡し、LLM 呼び出しの都度コールバックがモデルを決定)。詳細な概念・トリガー・エラー処理は Model Policy を参照。
options.resolveModel
型: ModelPolicyProvider
動的コールバックモードのエントリポイント。渡した瞬間にこのモードに切り替わり、SDK は LLM リクエスト前に毎回コールバックを呼んでモデルを取得します。コールバックが返す model がそのリクエストの最終モデルであり、自動フォールバックはありません。
options.resolveModelTimeoutMs
型: number、デフォルト 500
コールバックのタイムアウト(ミリ秒)。タイムアウトすると ModelPolicyTimeoutError がスローされ、クエリは失敗します(フォールバックなし)。resolveModel を渡したときのみ有効。
ModelPolicyProvider
コールバック関数のシグネチャ。同期・非同期どちらでも構いません。
| シナリオ | purpose | 説明 |
|---|---|---|
| メイン会話 | 'main' | 各ターン / ツール間で再呼び出され、1 セッションで複数回発火する可能性あり |
| サブエージェント | 'subagent' | サブエージェントは同じプロバイダを共有 |
| WebFetch ツール | 'web_fetch' | WebFetch がコンテンツ取得後に二次 LLM 呼び出しで要約 |
| ImageGen ツール | 'image_gen' | 画像生成モデル選択用 |
| コンテキスト圧縮 | 'compact' | 圧縮開始前にコールバックへ圧縮用モデルを問い合わせ |
| BYOK | 任意 | model に CustomModel オブジェクトを渡してサードパーティ LLM 経路へ |
- 同じセッション内で複数回発火します(各ターン / ツール / サブタスク前に再度問い合わせ)。
- コールバックが返す
modelがそのリクエストの最終モデルであり、SDK は再検証しません。 - 例外スローや空
modelはクエリを直接失敗させます。詳細は Model Policy — エラー処理 を参照。
ModelPolicyContext
コールバックが毎回受け取るコンテキスト。
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
purpose | QoderModelPurpose | はい | 当該 LLM 呼び出しの用途 |
sessionId | string | はい | 現在のセッション ID。同じセッション内の複数回コールバックで同じ値を受け取るため、キャッシュ / テレメトリキーとして使える |
availableModels | ModelInfo[] | はい | 現在のアカウントで利用可能なモデル一覧(CLI が get_model_policy リクエストごとに同梱) |
QoderModelPurpose
| 値 | 発火シナリオ |
|---|---|
'main' | メイン会話の LLM 呼び出し |
'subagent' | サブエージェント呼び出し |
'web_fetch' | WebFetch ツールが起こす二次 LLM 呼び出し |
'image_gen' | ImageGen ツールが起こす画像生成呼び出し |
'compact' | コンテキスト圧縮 / 要約 |
ModelPolicyResult
コールバックの戻り値。
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
model | string | (CustomModel & { model: string }) | はい | 文字列: モデル識別子 / オブジェクト: BYOK 認証情報 + モデル識別子 |
parameters | Record<string, unknown> | いいえ | このリクエストのモデルパラメータ上書き。SDK 制御レイヤーのキーは camelCase |
parameters キー:
| キー | 型 | 説明 |
|---|---|---|
contextWindow | number | この LLM リクエストで使うコンテキストウィンドウの token 数。選択したモデルがサポートする値を指定します。通常は ModelInfo.context_config から取得します |
reasoningEffort | string | この LLM リクエストで使う思考 / 推論の深さ。選択したモデルがサポートするレベルを指定します。通常は ModelInfo.thinking_config から取得します。一般的な値は none、low、medium、high、xhigh、max です |
model の形式:
- 文字列 — バックエンドが対応する任意のモデル ID(
auto/performance/glm51など)。有効値は q.getAvailableModels() が実時間で返します。空文字不可で、空だとクエリが失敗します。 CustomModelオブジェクト(BYOK) — SDK はオブジェクトのmodelフィールドを抽出してこの呼び出しのモデル識別子として扱い、それ以外のフィールドは認証情報として CLI に転送し、サードパーティ LLM へルーティングします。
CustomModel
BYOK 認証情報。resolveModel コールバック内で model フィールドにこのオブジェクトを直接設定すると、その LLM リクエストはサードパーティプロバイダへルーティングされます。
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
provider | string | はい | プロバイダ識別子。BYOKProviderInfo.key と一致する必要あり |
model | string | はい | モデル識別子。SDK がこの呼び出しのモデル ID として抽出 |
api_key | string | はい | ユーザーが提供する API Key |
style | string | いいえ | 上流プロトコル形式。"openai" / "anthropic" など。デフォルト "openai" |
providerはカタログのkeyと一致しなければバックエンド認証に失敗します。api_keyが誤っていると認証失敗としてクエリが直接失敗します(動的コールバックモードはフォールバックしません)。- BYOK 呼び出しはプラットフォーム上で
total_cost_usdが 0 として計上され、トークン使用量は実際の値で報告され、プロバイダ側で課金されます。
BYOK カタログ型
q.listByokProviders() が返す provider/model カタログ。
BYOKProviderInfo
| フィールド | 型 | 説明 |
|---|---|---|
key | string | プロバイダ識別子。BYOK 時は CustomModel.provider に設定 |
display_name | string | 表示名 |
api_key_url | string | ユーザーに API Key の取得先を案内する URL |
types | BYOKModelTypeInfo[] | このプロバイダ配下のモデルグループ |
BYOKModelTypeInfo
| フィールド | 型 | 説明 |
|---|---|---|
key | string | undefined | グループ識別子。よく見る値:cp / tp / pg |
display_name | string | グループ表示名 |
models | BYOKModelInfo[] | グループ配下のモデル |
BYOKModelInfo
| フィールド | 型 | 説明 |
|---|---|---|
key | string | モデル ID。CustomModel.model に設定 |
display_name | string | 表示名 |
is_vl | boolean | ビジョン / マルチモーダル入力の対応可否 |
is_reasoning | boolean | 推論型モデルかどうか |
format | string | 上流プロトコル形式(openai など) |
max_input_tokens | number | 最大入力トークン数 |
ModelInfo
q.getAvailableModels() が返す利用可能モデルのサマリ。ModelPolicyContext.availableModels の要素型としても使われます。
| フィールド | 型 | 説明 |
|---|---|---|
value | string | モデル識別子。ModelPolicyResult.model や q.setModel() の引数に使用可 |
displayName | string | 表示名 |
description | string | モデル説明テキスト |
isEnabled | boolean | 現在利用可能かどうか |
isNew | boolean | undefined | 新しく公開されたモデルかどうか |
isFree | boolean | undefined | 無料モデルかどうか |
priceFactor | number | undefined | 価格係数 |
serverScene | string | undefined | クライアント側で統合される前のサーバーモデル一覧レスポンスのトップレベル key。例: assistant、byok_enterprise |
context_config | ModelContextConfig | undefined | コンテキストウィンドウ設定(階層ラベル -> token 数) |
thinking_config | ModelThinkingConfig | undefined | 思考(推論)設定 |
promotion | ModelPromotion | undefined | モデル一覧 API からのプロモーション/割引情報。未指定ならプロモーションなし |
serverModel | ServerModelJson | undefined | CLI がモデル一覧 API から原文のまま転送するモデルエントリ |
ModelContextConfig
"200K" や "1M" などの階層ラベルで索引されるコンテキストウィンドウ設定。
| フィールド | 型 | 説明 |
|---|---|---|
token_count | number | この階層の token 数 |
is_default | boolean | undefined | デフォルト階層かどうか |
ModelThinkingConfig
モデルの思考(推論)設定。
| フィールド | 型 | 説明 |
|---|---|---|
disabled | ModelThinkingDisabled | undefined | 思考を無効にした場合の設定 |
enabled | ModelThinkingEnabled | undefined | 思考を有効にした場合の設定。effort レベルを含む |
enabled.efforts | Record<string, ModelEffortEntry> | undefined | "low" / "high" など各 effort の説明とデフォルト指定 |
ModelPromotion
モデル一覧 API から転送されるプロモーション/割引情報。ネストしたフィールド名はサーバーの snake_case 形式のままです。
| フィールド | 型 | 説明 |
|---|---|---|
active | boolean | このモデルのプロモーションが現在有効かどうか |
badge | LocalizedModelText | undefined | 短いローカライズ済みラベル |
description | LocalizedModelText | undefined | より詳しいローカライズ済み説明 |
discount_factor | number | undefined | プロモーション中の割引後価格係数 |
before_promotion_price_factor | number | undefined | プロモーション前の元の価格係数 |
timezone | string | undefined | プロモーション時間帯の判定に使う IANA タイムゾーン |
rule_id | string | undefined | サーバールール識別子 |
window_start | string | undefined | 毎日の開始時刻。HH:mm 形式 |
window_end | string | undefined | 毎日の終了時刻。HH:mm 形式 |
ServerModelJson
モデル一覧 API からの JSON 互換の原文モデルエントリ。サーバーに新しいフィールドが追加され、まだ ModelInfo の一級フィールドになっていない場合に参照できます。
SDKControlGetContextUsageResponse
現在のコンテキスト使用率と、CLI の /context ビューに表示されるものと同じローカルカテゴリ推定値です。q.getContextUsage() が返します。
0–100 の範囲です。skills.percentageOfContext と各 skill 項目の percentageOfContext は、全 skills の合計サイズではなく、コンテキストウィンドウ全体を分母とします。
SDK は実行中の CLI にこのスナップショットを要求し、クライアント側で再計算しません。カテゴリ値はローカル推定であり、その合計が contextWindow.usedPercentage と完全に一致するとは限りません。全体の使用率は contextWindow.usedPercentage で確認し、カテゴリと skill の内訳はそれぞれの割合フィールドで確認できます。
UsageInfo
q.getUsageInfo() が返すアカウントのクォータと使用量のスナップショット。
| フィールド | 型 | 説明 |
|---|---|---|
userId | string | undefined | アカウント ID |
userType | string | undefined | プラン区分(free、pro、teams など) |
totalUsagePercentage | number | undefined | 全クォータの全体使用率、0–100 |
isHighestTier | boolean | undefined | すでに最上位プランかどうか |
expiresAt | number | undefined | 現在のプラン/クォータ有効期限、Unix ミリ秒 |
upgradeUrl | string | undefined | アップグレードページ URL(アップグレード可能な場合) |
userQuota | UsageQuotaBucket | undefined | プラン内蔵クォータ |
addOnQuota | UsageAddOnQuotaBucket | undefined | アカウントにアドオンクォータがある場合に返る購入済みアドオンクォータ(detailUrl は使用量ページへのリンク) |
isQuotaExceeded | boolean | undefined | 利用可能なクォータをすべて使い切ったかどうか |
isPlanQuotaProrated | boolean | undefined | 当期のプランクォータが日割り計算されているか |
orgResourcePackage | UsageOrgResourcePackage | undefined | 組織共有リソースパッケージ(available は利用可否) |
session | SessionCreditsUsage | undefined | 現在の CLI セッションの累計 Credits。アカウントクォータの取得に失敗した場合でも存在することがあります |
unit(通常は credits)単位で、total(組織パッケージは cap)に対する used / remaining / percentage を報告します。
欠落したフィールド、または実行時型が想定と異なるフィールドは、返却オブジェクトから省略されます。
session.total_credits は現在の CLI セッションの累計値で、session.model_usage はモデルごとの累計 Credits です。ここでの model_usage は snake_case ですが、Result メッセージの対応するフィールドは modelUsage です。
ModelPolicyTimeoutError
resolveModel コールバックが options.resolveModelTimeoutMs を超えても返さないときに SDK がスローします。クエリは直接失敗し、フォールバックはしません。
q.setModel()
q.getAvailableModels()
q.listByokProviders()
nullを返す場合:CLI がこの API をサポートしていない(グレースフルフォールバック、例外なし)。- 配列を返す場合(空の場合あり):現在のアカウントで利用可能な provider リスト(空配列はアカウントが BYOK 未開通)。
q.getContextUsage()
q.getUsageInfo()
nullを返す場合:このリクエストでアカウントクォータとセッション Credits のどちらも取得できなかったことを示します。未認証、未対応の古い CLI バージョン、制御リクエストの失敗などは、例外をスローせずnullにフォールバックします。- UsageInfo オブジェクトを返す場合:実行時型が正しい既知のアカウントクォータ/使用量フィールド。欠落または型が不正なフィールドは省略されます。アカウントクォータの取得に失敗した場合でも、
sessionだけを含むオブジェクトが返ることがあります。
CanUseTool
通常のツールでは、ユーザー承認が必要な呼び出しだけがこのコールバックを呼び出し、自動的に許可または拒否されたツールは呼び出しません。AskUserQuestion は例外です。コールバック設定後、ユーザー操作が明示的に禁止されていなければ、実際のユーザー回答を得るために呼び出されます。
CanUseToolOptions
options フィールド | 型 | 説明 |
|---|---|---|
signal | AbortSignal | キャンセル時に abort される |
suggestions | PermissionUpdate[] | CLI が提案する権限更新 |
blockedPath | string | 承認をトリガーしたファイルパス(ファイル関連シーンのみ) |
decisionReason | string | CLI が提供する人間が読める承認理由 |
decisionReasonType | PermissionDecisionReasonType | 権限理由の分類 |
classifierApprovable | boolean | 現在の呼び出しがランタイム分類器で自動承認可能かどうか |
title / displayName / description | string | ランタイムで生成された人間が読める承認テキスト |
toolUseID | string | 今回のツール呼び出し ID |
agentID | string | 呼び出しを発行したサブエージェント ID |
exitPlanMode | ExitPlanModeApprovalDetails | 計画モードを終了するときの承認詳細 |
AskUserQuestion は承認とユーザー入力を参照してください。
PermissionMode
| 値 | 意味 | 適した用途 |
|---|---|---|
'default' | 標準権限動作。ツール呼び出しは tools、allow / deny ルール、動的承認、ランタイムポリシーで処理されます | 大半の対話型セッション |
'acceptEdits' | ファイル編集系操作を自動承認します。その他の機密操作は通常の権限フローに従います | ワークスペースファイルの変更を許可したセッション |
'bypassPermissions' | 権限チェックをスキップします。allowDangerouslySkipPermissions: true も必要です | 信頼済み自動化またはテスト環境 |
'yolo' | 'bypassPermissions' の互換エイリアス。allowDangerouslySkipPermissions: true も必要です | 旧設定との互換。新規コードでの優先使用は非推奨 |
'plan' | 計画モード。まず実行計画を出す用途に適し、デフォルトでは実変更を行いません | 計画、設計、レビュー |
'dontAsk' | 対話確認を行いません。事前承認されていない、またはルールで許可されていない操作は拒否されます | 非対話環境、または確認ではなく失敗させたいワークフロー |
'auto' | ランタイム能力が allow / deny を自動判断します。安全なワークスペース内ファイル編集は自動許可される場合があります | 確認の中断を減らしつつランタイム判断を残したい場合 |
PermissionResult
CanUseTool の戻り値です。
allow.updatedInput を変更すると、ツールが実際に受け取る入力パラメータが置き換わります。deny.interrupt: true は拒否と同時にエージェントを中断します。
McpServerConfig
MCP サーバー設定。Options.mcpServers に渡します。
McpStdioServerConfig
McpSSEServerConfig
McpHttpServerConfig
McpSdkServerConfigWithInstance
createSdkMcpServer() ファクトリから返されます。MCP - In-Process Server を参照。
SdkPluginConfig
ローカルプラグインの読み込みです。
| フィールド | 型 | 説明 |
|---|---|---|
type | 'local' | 現在は local のみサポート |
path | string | プラグインディレクトリの絶対パスまたは相対パス |
CloudAgentOptions
Options.experimentalCloudAgent の型です。Cloud ランタイムの agent / session 参照を構成します。詳しい使い方は Cloud Agent を参照してください。
| フィールド | 型 | 説明 |
|---|---|---|
agent.id | string | 既存の Cloud Agent を再利用。agent.create と相互排他 |
agent.create | AgentCreateParams | 新しい Cloud Agent を作成。agent.id と相互排他 |
session.id | string | 既存の Cloud session を再利用。agent を併せて渡してはならない |
session.create | CloudSessionCreateParams | 新しい Cloud session を作成。environment_id は必須 |
stream.afterId | string | SSE replay の起点となるイベント ID |
stream.deltaFlushIntervalMs | number | デルタ内容のマージ / フラッシュ間隔(ミリ秒) |
AgentCreateParams
新しい Cloud Agent を作成するためのリクエストボディです。Qoder Cloud OpenAPI の agent create フィールドに対応します。
| フィールド | 型 | 説明 |
|---|---|---|
model | string | モデル識別子。使用可能な値:'auto' / 'ultimate' / 'performance' / 'efficient' / 'lite' |
name | string | 人間可読の agent 名 |
description | string | null | 説明 |
system | string | null | system prompt |
tools | 上記参照 | ビルトインツールセット。enabled_tools で許可リストを指定 |
mcp_servers | 上記参照 | URL 形式の MCP server 接続 |
skills | 上記参照 | ユーザー定義のカスタム Skill |
metadata | Record<string, string> | 任意のキー / 値メタデータ |
CloudSessionCreateParams
新しい Cloud session を作成するためのリクエストボディです。
| フィールド | 型 | 説明 |
|---|---|---|
environment_id | string | コンテナ環境 ID。必須 |
resources | 上記参照 | session コンテナにマウントするリソース(現状は file のみ) |
title | string | null | セッションタイトル |
vault_ids | string[] | 認証情報の vault ID |
memory_store_ids | string[] | memory store ID |
SettingSource
ロードする filesystem settings を制御します。
| 値 | 意味 | 場所 |
|---|---|---|
'user' | ユーザーレベルのグローバル settings | ~/.qoder/settings.json |
'project' | プロジェクト共有 settings(バージョン管理) | .qoder/settings.json |
'local' | プロジェクトローカル settings(gitignore) | .qoder/settings.local.json |
[] を渡すと完全にスキップします。
ToolConfig
組み込みツール動作設定です。
組み込みツール一覧
tools、allowedTools、disallowedTools、canUseTool、hooks matcher、Agent のツールホワイトリストでは、組み込みツールは下表のランタイムツール名を使用します。
| カテゴリ | ツール名 | 説明 |
|---|---|---|
| コマンド実行 | Bash | shell コマンドを実行 |
| ファイル操作 | Read | ファイル内容を読む |
| ファイル操作 | Edit | 文字列一致に基づいてファイルを編集 |
| ファイル操作 | Write | ファイルを作成または上書き |
| 検索 | Glob | ファイル名パターンで検索 |
| 検索 | Grep | 内容の正規表現で検索 |
| ネットワーク | WebFetch | URL 内容を取得して処理 |
| ネットワーク | WebSearch | Web 検索 |
| Agent | Agent | サブエージェントを呼び出す |
| 対話 | AskUserQuestion | ユーザーに質問する |
| Notebook | NotebookEdit | Notebook セルを編集 |
| 永続タスク | TaskCreate | タスクを作成 |
| 永続タスク | TaskGet | タスク詳細を取得 |
| 永続タスク | TaskUpdate | タスクのフィールド、状態、依存関係を更新 |
| 永続タスク | TaskList | タスクを一覧表示 |
| バックグラウンドタスク | TaskOutput | バックグラウンドタスクへ出力を送る |
| バックグラウンドタスク | TaskStop | バックグラウンドタスクを停止 |
| 計画 / worktree | ExitPlanMode | 計画モードを終了 |
| 計画 / worktree | EnterWorktree | git worktree に入る |
| 計画 / worktree | ExitWorktree | worktree を終了 |
| 設定 | Config | 設定を読み書き |
| Todo フォールバック | TodoWrite | QODER_FEATURE_TASKS=false のとき永続 Task ツールを置き換えます |
| MCP リソース | ListMcpResources | MCP resources を列挙 |
| MCP リソース | ReadMcpResource | MCP resource を読む |
| MCP 呼び出し | Mcp | 汎用 MCP ツール呼び出し |
tool()
型安全な SDK MCP ツール定義を作成します。
| パラメータ | 型 | 必須 | 意味 | 現在の Qoder の挙動 |
|---|---|---|---|---|
name | string | はい | 現在の MCP server 内で一意なツール識別子 | モデルから見える完全なツール名 mcp__{serverName}__{name} を構成します。登録時は空文字不可 |
description | string | はい | モデルに見せるツール説明。いつ使うか、何をするか、何を返すかを説明します | ツール一覧へそのまま渡され、モデルが正しく呼び出すかに直接影響します。登録時は空文字不可 |
inputSchema | Schema extends AnyZodRawShape | はい | ツール入力パラメータを定義する Zod raw shape | SDK はこれを使って MCP input schema を生成し、handler の args を InferShape<Schema> として推論します |
handler | (args, extra) => Promise<CallToolResult> | はい | ツール呼び出し時に実行される非同期関数 | モデルがツールを呼ぶと SDK が実行します。戻り値は tool result としてモデルへ返されます |
extras | ToolExtras | いいえ | ツール追加メタ情報。現在は annotations に使用 | SDK は対応する annotations を MCP server に登録します。権限設定の代替にはなりません |
tool() 自体はツールを定義する factory 関数です。name、description、重複ツール名などの登録制約は、createSdkMcpServer() がツール登録時に検証します。
AnyZodRawShape
AnyZodRawShape は Zod 3 / Zod 4 と互換です。これはフィールドオブジェクトを表し、z.object(...) ではありません。
InferShape
InferShape は Zod raw shape から handler の args 型を推論します。
SdkMcpToolDefinition
ToolExtras
ToolAnnotations
| フィールド | 型 | 任意 | 意味 | 現在の Qoder の挙動 |
|---|---|---|---|---|
title | string | はい | ツールの人間向けタイトル | MCP メタ情報。現在は検証済み Qoder 挙動能力としては説明していません |
readOnlyHint | boolean | はい | ツールが状態を変更しないことを示す | 現在観測できる効果は、読み取り専用ツールが同一 batch の tool calls 内で並行実行可能になる条件を満たせることです。権限スイッチではありません |
destructiveHint | boolean | はい | ツールが破壊的更新を行う可能性を示す | リスクメタ情報。承認済みツールの実行を自動的に止めるものではありません |
openWorldHint | boolean | はい | ツールが外部の open world とやり取りするかを示す | 外部やり取りのメタ情報。承認済みツールの実行を自動的に止めるものではありません |
tools、allowedTools、disallowedTools、permissionMode、canUseTool、hooks によって決まります。機能ドキュメントで検証済み挙動能力として扱うのは readOnlyHint、destructiveHint、openWorldHint です。title は MCP メタ情報として型リファレンスに残しています。
createSdkMcpServer()
SDK と同一プロセスで動作する MCP server を作成します。
CreateSdkMcpServerOptions
| フィールド | デフォルト | 説明 |
|---|---|---|
name | 必須 | MCP server 名。mcp__{serverName}__{toolName} に入ります |
version | '1.0.0' | server バージョン情報 |
tools | undefined | この server に登録するツール一覧 |
戻り値
McpSdkServerConfigWithInstance を返します。これは options.mcpServers の値としてそのまま渡せます。完全な MCP server 設定は McpServerConfig を参照してください。
CallToolResult
ツール handler は MCP プロトコルの CallToolResult を返します。
McpToolResultContent
| フィールド | 説明 |
|---|---|
content | モデルへ返す content block 配列 |
isError | true の場合、ツールが意味的に失敗したことを示します |
_meta | ツール結果メタデータ。MCP レスポンスとともに透過的に渡されます |
組み込みツール入力出力型
SDK は型レベルで組み込みツールの入力 / 出力構造を提供します。注意: これらは TypeScript の型名です。権限設定では引き続き上記のランタイムツール名を使用します。
AgentInput / AgentOutput
BashInput / BashOutput
BashOutput はフォアグラウンド互換出力として維持されます。Bash がバックグラウンドへ移ると、構造化された起動データは SDKUserMessage.tool_use_result に入ります。unknown 値は isBashToolBackgroundLaunchResult() で絞り込んでください。
outputFile が存在する場合、これは stdout と stderr を結合した通常の生バイトストリームであり、JSONL ではありません。ホストは一致する CLI 終端イベントの後に 1 回だけ読み取るか、実行中にバイトオフセットを保持し、ストリーミング TextDecoder で新しいバイトをデコードできます。終端イベントの後に最後の読み取りを行い、decoder をフラッシュしてください。一時的な EOF はタスクの完了を意味しません。SDK はこのファイルを読み取り、ポーリング、解析、キャッシュしません。
ライフサイクル状態は CLI イベントストリームが正です。バックグラウンド Shell が自然完了すると task_notification が送信され、明示的に停止すると終端 task_updated が送信されて background_tasks_changed から削除されます。
FileReadInput / FileReadOutput
ランタイムツール名は Read です。型名は FileReadInput / FileReadOutput のままです。
FileEditInput / FileEditOutput
ランタイムツール名は Edit です。
FileWriteInput / FileWriteOutput
ランタイムツール名は Write です。
GlobInput / GlobOutput
GrepInput / GrepOutput
WebFetchInput / WebFetchOutput
WebSearchInput / WebSearchOutput
AskUserQuestionInput / AskUserQuestionOutput
次の型は SDK がエクスポートしているものです。canUseTool が実行時に受け取る入力は、この単一質問形式ではなく、複数形の questions / answers 構造です。AskUserQuestion を処理するを参照してください。
NotebookEditInput / NotebookEditOutput
TaskOutputInput
TaskStopInput / TaskStopOutput
ExitPlanModeInput / ExitPlanModeOutput
ConfigInput / ConfigOutput
EnterWorktreeInput / EnterWorktreeOutput
ExitWorktreeInput / ExitWorktreeOutput
永続タスクの入力 / 出力型
TodoWriteInput / TodoWriteOutput
QODER_FEATURE_TASKS=false で永続 Task を無効にした場合は TodoWrite を使用します。SDK のデフォルトセッションでは上記の永続 Task ツールが公開され、options.tools を省略すると SDK はこの feature flag に従って自動的に置き換えます。
ListMcpResourcesInput / ListMcpResourcesOutput
ReadMcpResourceInput
McpInput / McpOutput
ToolInputSchemas
ToolOutputSchemas
Hooks リファレンス
使用ガイドとサンプルは Hooks を参照してください。
イベント概要
| イベント | トリガー | 制御可能な動作 |
|---|---|---|
PreToolUse | ツール呼び出し前 | インターセプト / 許可 / 入力の変更 |
PostToolUse | ツール成功後 | 監査 / コンテキスト注入 / 出力の上書き |
PostToolUseFailure | ツール失敗後 | エラーハンドリング / ロギング |
UserPromptSubmit | ユーザープロンプト送信前 | コンテキスト注入 / インターセプト |
SessionStart | セッション開始時 | 初期化 / コンテキスト注入 |
SessionEnd | セッション終了時 | クリーンアップ / ロギング |
Stop | AI が生成を停止した時 | 停止の防止、続行の強制 |
SubagentStart | サブエージェント開始時 | 監視 / ロギング |
SubagentStop | サブエージェント停止時 | 監視 / ロギング |
PreCompact | コンテキスト圧縮前 | 監視 / ロギング |
PostCompact | コンテキスト圧縮後 | 監視 / ロギング |
CwdChanged | 作業ディレクトリ変更時 | 監視 / ロギング |
InstructionsLoaded | 命令ファイルロード時 | 監視 / ロギング |
FileChanged | ファイルの作成/変更/削除時 | 監視 / ロギング |
PermissionRequest | パーミッション要求時 | パーミッション要求を自動承認 / 拒否 |
HookEvent
登録可能な hook イベントの共用体型です。
HookCallback
HookCallbackMatcher
| フィールド | 型 | 説明 |
|---|---|---|
matcher | string | オプションの正規表現。tool_name でフィルタリング |
hooks | HookCallback[] | マッチ時に実行されるコールバックリスト |
timeout | number | オプション。タイムアウト(秒)、デフォルト 60 |
BaseHookInput
すべての hook イベントで共有される入力フィールドです。
| フィールド | 型 | 説明 |
|---|---|---|
hook_event_name | string | イベントタイプ識別子(例:"PreToolUse") |
session_id | string | 現在のセッションの一意識別子 |
transcript_path | string | セッション記録ファイルパス(JSONL 形式) |
cwd | string | セッションの現在の作業ディレクトリ |
HookJSONOutput
Hook コールバックの戻り値の型です。
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
continue | boolean | true | false に設定するとセッションを終了。PreToolUse、PostToolUse、PostToolUseFailure、UserPromptSubmit、Stop、SubagentStop のみ有効 |
stopReason | string | — | 停止理由(continue: false と併用) |
decision | string | — | "approve" または "block"。"block" はツール実行を阻止。Stop イベントでは停止を防止し続行を強制 |
reason | string | — | 決定理由(モデルに表示。Stop イベントの "block" では続行プロンプトとして注入) |
hookSpecificOutput | object | — | イベント固有の出力(各イベント型を参照) |
複数の hook が競合するdecision値を返した場合、"deny"/"block"が優先されます(最も厳格なルールが適用)。
PreToolUseHookInput
| フィールド | 型 | 説明 |
|---|---|---|
permission_mode | string | undefined | 現在のセッションのパーミッションモード |
tool_name | string | 呼び出されるツール名 |
tool_input | unknown | ツールに渡される引数 |
hookSpecificOutput:
| フィールド | 型 | 説明 |
|---|---|---|
hookEventName | "PreToolUse" | 必須 |
permissionDecision | string | "allow" / "deny" / "ask" / "defer" |
permissionDecisionReason | string | パーミッション決定理由 |
updatedInput | Record<string, unknown> | 変更されたツール入力。元の tool_input を置換 |
additionalContext | string | モデルの次のターンに注入される追加コンテキスト |
PostToolUseHookInput
| フィールド | 型 | 説明 |
|---|---|---|
tool_name | string | 呼び出されたツール名 |
tool_input | unknown | ツールに渡された引数 |
tool_response | unknown | ツールの実行結果 |
| フィールド | 場所 | 動作 |
|---|---|---|
hookSpecificOutput.updatedToolOutput | イベント固有出力 | tool_response を上書き。モデルは上書き後の値のみ参照 |
hookSpecificOutput.additionalContext | イベント固有出力 | 補足コンテキストを追加。元の結果は変更しない |
decision: "block" + reason | トップレベル出力 | エージェントがこのツール結果をさらに処理することを阻止 |
hookSpecificOutput:
| フィールド | 型 | 説明 |
|---|---|---|
hookEventName | "PostToolUse" | 必須 |
updatedToolOutput | string | ツールレスポンスの内容を上書き |
additionalContext | string | ツール結果に付加される追加コンテキスト |
複数の hook が updatedToolOutput を設定した場合、最後の非空値が有効になります。チェーン変換が必要な場合は、単一のコールバック内で順次実行してください。
PostToolUseFailureHookInput
| フィールド | 型 | 説明 |
|---|---|---|
tool_name | string | 失敗したツール名 |
tool_input | unknown | ツールに渡された引数 |
error | string | エラーメッセージ |
is_interrupt | boolean | undefined | 中断/中止によるものかどうか |
UserPromptSubmitHookInput
| フィールド | 型 | 説明 |
|---|---|---|
prompt | string | ユーザー入力テキスト |
hookSpecificOutput:
| フィールド | 型 | 説明 |
|---|---|---|
hookEventName | "UserPromptSubmit" | 必須 |
additionalContext | string | ユーザープロンプトに追加される追加コンテキスト |
SessionStartHookInput
| フィールド | 型 | 説明 |
|---|---|---|
source | string | セッション開始理由:"startup" / "resume" / "clear" / "compact" |
hookSpecificOutput:
| フィールド | 型 | 説明 |
|---|---|---|
hookEventName | "SessionStart" | 必須 |
additionalContext | string | セッション開始時に注入されるコンテキスト |
SessionEndHookInput
| フィールド | 型 | 説明 |
|---|---|---|
reason | string | セッション終了理由:"clear" / "resume" / "logout" / "prompt_input_exit" / "other" / "bypass_permissions_disabled" |
StopHookInput
| フィールド | 型 | 説明 |
|---|---|---|
stop_hook_active | boolean | Stop hook が現在停止を防止しているかどうか |
{ decision: 'block', reason: '...' } を返すと AI の停止を防止し続行を強制します。reason は続行プロンプトとしてモデルコンテキストに注入されます。
SubagentStartHookInput
| フィールド | 型 | 説明 |
|---|---|---|
agent_id | string | サブエージェントインスタンスの一意識別子 |
agent_type | string | サブエージェントのタイプ/ロール |
SubagentStopHookInput
| フィールド | 型 | 説明 |
|---|---|---|
stop_hook_active | boolean | Stop hook が現在停止を防止しているかどうか |
PreCompactHookInput
| フィールド | 型 | 説明 |
|---|---|---|
trigger | string | トリガー理由:"manual" / "auto" |
custom_instructions | string | null | 圧縮サマリーのカスタム命令 |
PostCompactHookInput
| フィールド | 型 | 説明 |
|---|---|---|
trigger | string | トリガー理由:"manual" / "auto" |
compact_summary | string | コンテキスト圧縮後に生成されたサマリー |
CwdChangedHookInput
| フィールド | 型 | 説明 |
|---|---|---|
old_cwd | string | 変更前の作業ディレクトリ |
new_cwd | string | 変更後の作業ディレクトリ |
InstructionsLoadedHookInput
| フィールド | 型 | 説明 |
|---|---|---|
load_reason | string | ロード理由:"nested_traversal" / "path_glob_match" |
FileChangedHookInput
| フィールド | 型 | 説明 |
|---|---|---|
file_path | string | 変更されたファイルのパス |
event | string | ファイルシステムイベント:"change" / "add" / "unlink" |
PermissionRequestHookInput
| フィールド | 型 | 説明 |
|---|---|---|
tool_name | string | パーミッションを要求するツール |
tool_input | unknown | ツール入力引数 |
permission_suggestions | PermissionUpdate[] | undefined | 提案されるパーミッションルール |
hookSpecificOutput:
| フィールド | 型 | 説明 |
|---|---|---|
hookEventName | "PermissionRequest" | 必須 |
decision | object | パーミッション決定(下記参照) |
decision は以下のいずれかです:
- 承認:
{ behavior: "allow", updatedInput?: Record<string, unknown>, updatedPermissions?: PermissionUpdate[] } - 拒否:
{ behavior: "deny", message?: string }
Message Types
SDKMessage
Query からストリーム出力されるすべてのメッセージの判別ユニオンです。
message.type で分岐し、次に subtype でさらに細分化します(system / result 型のみ subtype を持ちます)。
SDKAssistantMessage
AI の応答メッセージです。1 つの Agent タスクで複数のモデルリクエストが発生することがあるため、複数の SDKAssistantMessage を受信する場合があります。
request_id はデフォルトでは存在しません。公開するには、
options.env でグローバル CLI に QODER_EXPOSE_REQUEST_ID='true'、
中国版 CLI に QODERCN_EXPOSE_REQUEST_ID='true' を設定します。この設定は
message.message.usage の Credits フィールドには影響しません。
message.message.usage.credits、original_credits、billable は個別のモデルリクエストの Credits データです。いずれもオプションフィールドであり、古い CLI バージョンでは省略される場合があります。
SDKUserMessage
ユーザーメッセージまたはツール結果のフィードバックです。
| フィールド | 説明 |
|---|---|
priority | 処理タイミング。now は現在の応答を停止してすぐに処理し、next(デフォルト)は次の適切なタイミングで処理し、later は現在の応答が完了するまで待機 |
shouldQuery | false の場合、メッセージを会話へ追加しますが、そのメッセージだけでは応答を開始しません。処理タイミングは引き続き priority に従います |
uuid | 任意のセッション内一意メッセージ ID。メッセージのキャンセルと replay の重複排除に使用します。同じセッション内で UUID を再利用しないでください |
session_id | 出力メタデータ。入力メッセージは常に現在の query() CLI セッションに属します。指定 ID でセッションを作成する場合は options.sessionId を使用します |
timestamp | 任意のメッセージタイムスタンプ |
SDKUserMessageReplay
セッション復元時にリプレイされる履歴ユーザーメッセージです。
SDKResultMessage
1 回のクエリが完了したときの結果メッセージです。マルチターンセッションでは、時間の経過とともに複数の SDKResultMessage を受信する場合があります。
total_credits は現在の CLI セッションの累計 Credits、modelUsage[model].credits は指定したモデルのセッション内累計 Credits です。どちらも古い CLI バージョンでは省略される場合があります。
Result の usage フィールドからリクエスト単位の Credits を読み取らないでください。credits、original_credits、billable は、Assistant メッセージの message.message.usage から読み取ってください。
SDKSystemMessage
セッション初期化メッセージ(subtype: 'init')。その他のシステムイベントは個別のメッセージ型で送達されます。以下の各 SDK*Message を参照してください。
capabilities はランタイム機能のオープンセットです。アプリケーションが認識しない値は無視してください。
SDKMirrorErrorMessage
SDK が外部セッションストレージへのバッチ書き込みに最終的に失敗したときに生成される非致命メッセージです。現在の query は続行します。
SDKPartialAssistantMessage
includePartialMessages: true の有効化が必要です。トークン単位で増分ストリーム出力されます。完全な使用法は ストリーム出力 を参照してください。
SDKCompactBoundaryMessage
コンテキスト圧縮完了の境界マーカーです。
SDKStatusMessage
セッション実行ステータスの変化(例: 圧縮中)です。
SDKMcpStatusChangeMessage
MCP コネクションプールのステータス変化です。
SDKAPIRetryMessage
ネットワーク/サービス異常時の自動リトライです。
SDKHookStartedMessage
Hook の実行開始です。
SDKHookProgressMessage
Hook 実行中の出力です。
SDKHookResponseMessage
Hook の終了です。
SDKTaskStartedMessage
サブエージェントタスクの開始です。
SDKTaskProgressMessage
サブエージェントタスクの進捗です。
SDKTaskNotificationMessage
サブエージェントタスクの終了です。
SDKSessionStateChangedMessage
メインセッションの実行ステータス変化です。
SDKSessionTitleChangedMessage
セッションタイトルの変化です。
SDKFilesPersistedEvent
ファイルチェックポイントの永続化結果です。
SDKElicitationCompleteMessage
MCP elicitation の完了です。
SDKPermissionDeniedMessage
ツール呼び出しが権限ポリシーによりショートサーキット拒否された場合(dontAsk / auto / deny rule など)です。
SDKPromptSuggestionMessage
promptSuggestions: true 有効化後、各ターンの result 後に受信可能な次ステップの提案です。
SDKCloudAgentEventMessage
Cloud ランタイム(options.experimentalCloudAgent)下で、Qoder Cloud session の SSE ストリームから転送されるイベントです。詳しい使い方は Cloud Agent を参照してください。
| フィールド | 型 | 説明 |
|---|---|---|
event | string | Cloud イベント名(例:user.message、agent.message、session.status_idle) |
id | string | SSE イベント ID。stream.afterId の replay 起点として使用可能 |
data | unknown | Cloud イベント payload(turn_id などのフィールドを含む) |
session_id | string | このイベントが属する Cloud session ID |
SDKPermissionDenial
SDKResultMessage.permission_denials 配列内の要素です。