Skip to main content

Functions

query()

SDK 的主入口函数。创建一个 async generator,按消息到达顺序流式输出 SDKMessage

参数

返回值

返回 Query——一个 AsyncGenerator<SDKMessage, void>,通过 for await 消费。

q.interrupt()

停止当前轮次的生成或工具执行,但不会关闭会话。可选返回值列出仍在排队的消息。参见中断当前轮次

q.cancelAsyncMessage()

按 UUID 取消排队中的用户消息。取消成功返回 true;消息不存在或已无法取消时返回 false。参见取消排队消息

q.initializationResult()

等待 CLI 完成当前会话的初始化并返回初始化快照。返回值包含当前会话发现到的 commands、agents、skills 等信息;其中 skills 是发现清单,不代表主会话当前全部可调用。返回类型见 SDKControlInitializeResponse,skill 发现与调用策略见 Skills

会话管理函数

以下函数默认读写本地会话。在 options 中传入 sessionStore 后,函数会操作外置存储。接入方式和行为说明见外置会话存储
这些 option 类型都包含 dirsessionStore。列表与消息函数还通过 limitoffset 支持分页。listSessions 在读取本地会话时支持 includeWorktreesforkSession 额外支持 upToMessageIdtitlegetSessionMessages 支持 includeSystemMessages

importSessionToStore()

把已有的本地会话复制到外置存储。
includeSubagents 默认为 truebatchSize 默认为 500

Types

Options

query() 的配置对象。

SessionStore

外置存储适配器需要实现的接口。appendload 是必需方法,其他方法分别支持会话列表、删除和完整的子代理恢复。
应用应把 key 和 entry 当作 SDK 提供的不透明数据。行为要求和实现建议见外置会话存储

SessionStoreFlush

batched 在 result 边界写入,是默认值。eager 会更频繁地启动写入。

InMemorySessionStore

用于开发和测试的内置 SessionStore 实现。它实现全部可选方法,并额外提供 getEntries(key)sizeclear()。数据只存在于当前进程中,进程退出后会丢失。

SDKSessionInfo

listSessions()getSessionInfo() 返回的会话元数据。
fileSize 只在本地存储中提供。时间字段使用 Unix 毫秒时间戳。

SessionMessage

会话和子代理消息函数返回的历史消息。

Settings

Options.settings 可以传入 settings 文件路径,也可以直接传入 Settings 对象。SDK 会把这些字段传给 CLI;下面列出与 skill 相关的字段,默认值和实际效果取决于配套 CLI 版本。

skillOverrides

按 skill 名控制发现和可见性。插件 skill 使用插件限定名 plugin:skill,其它来源使用裸名;匹配时先检查完整名称,再回退到裸名。 完整的会话级 skill 配置见 Skills

SDKControlInitializeResponse

q.initializationResult() 返回的初始化快照。
这里的 skills 是带元数据的发现清单。消息流中的 SDKSystemMessage.skills 是初始化消息携带的名称数组 string[],两者不是同一个返回结构。

AuthOptions

便捷构造器:accessToken(token) / accessTokenFromEnv(envVar?) / qodercliAuth(),见 SDK 认证

options.agents

类型: Record<string, AgentDefinition> 注册当前 query() 会话可用的自定义 Agent。对象 key 是 Agent 名称,value 是该 Agent 的定义。
必须包含 Agent 工具:自定义 subagents 需要主会话通过内置 Agent 工具发起委派。The Agent tool must be included in allowedTools since Qoder invokes subagents through the Agent tool.
注册后,模型可通过内置 Agent 工具调用这些子 Agent。主会话要能委派任务,工具集中必须存在 AgentallowedTools: ['Agent'] 是必需的预授权写法。如果你使用 options.tools 收窄主会话可用工具,也要把 Agent 放进去。

options.agent

类型: string 指定主会话以哪个 Agent 身份运行。值可以是 options.agents 中注册的名称,也可以是当前 CLI 已发现的内置 / 插件 Agent 名称。
设置后,主会话使用该 Agent 的 promptmodel 和工具限制。省略时使用默认主会话行为。

AgentDefinition

自定义 Agent 的定义。下列字段是当前版本 SDK 覆盖并经过功能测试验证的稳定能力。

description

描述 Agent 适合处理什么任务。它会影响模型是否选择该 Agent。
建议写清楚触发场景。避免只写 Helpful assistant 这类宽泛描述。

prompt

Agent 的系统提示词,用来定义角色、约束和输出格式。

tools

Agent 可用工具白名单。设置后,Agent 只能使用列出的工具。
省略 tools 时,使用子 Agent 默认工具表。子 Agent 的工具表不继承主会话 allowedTools 的裁剪。

disallowedTools

从 Agent 工具集中排除指定工具。
省略 disallowedTools 时,子 Agent 不继承主会话 disallowedTools 的裁剪。通常不要同时设置 toolsdisallowedTools,除非你明确知道最终工具集合。

model

为 Agent 指定模型,省略时使用会话默认模型。可填模型级别包括: Agent 还支持两个特殊写法:

mcpServers

限制或增加该 Agent 可用的 MCP server。
字符串形式用于引用会话中已配置的 MCP server 名称;对象形式用于给该 Agent 配置专属 MCP server。MCP server 配置结构见 SDK References - McpServerConfig

skills

预加载到 Agent 上下文的 skill 名称列表。支持普通 skill 名称,也支持插件限定名。
会话级 skill 行为见 Skills

initialPrompt

当该 Agent 通过 options.agent 成为主会话 Agent 时,自动作为首轮用户输入提交。
该字段只对主会话 Agent 生效。作为子 Agent 被 Agent 工具调用时会被忽略。

maxTurns

限制 Agent 的最大 API 轮次。适合控制成本、执行时间和循环风险。

effort

控制 Agent 的推理努力级别。更高的 effort 通常适合复杂审查、架构分析和高风险变更,但会增加延迟和 token 消耗。

permissionMode

控制该 Agent 内部工具执行的权限模式。它和会话级 permissionMode 使用同一组语义,但作用范围只限这个 Agent。会话级权限链路、allowedTools / disallowedTools / canUseTool 的优先级和示例见 权限控制
权限语义介绍见 权限控制

AgentInfo

q.supportedAgents() 返回的 Agent 摘要。
返回列表可能包含通过 options.agents 注册的 Agent,也可能包含当前 CLI 发现的内置、项目、用户或插件 Agent。实际可用项取决于 qodercli 版本和当前配置。

上下文与调用边界

  • 子 Agent 使用独立上下文,不接收父会话完整历史。
  • 父会话传给子 Agent 的主要信息,是调用 Agent 工具时传入的任务 prompt。
  • 子 Agent 的中间工具结果不会直接进入父会话;父会话收到的是子 Agent 最终返回。
  • 子 Agent 不能再生成自己的子 Agent,因此不要把 Agent 放进子 Agent 的 tools
  • initialPrompt 只对 options.agent 指定的主会话 Agent 生效。

Model Policy

query() 的动态模型选择能力。两种模式:固定模型(不传 resolveModel,使用 options.model 或后端默认)与动态回调模式(传入 resolveModel,每次 LLM 调用前由回调决定模型)。完整概念、触发时机与错误处理见 Model Policy

options.resolveModel

类型: ModelPolicyProvider 动态回调模式入口。传入即进入动态回调模式,每次 LLM 请求前 SDK 都会调用该回调拿模型;回调返回的 model 是该次请求的最终模型,不会自动降级

options.resolveModelTimeoutMs

类型: number,默认 500 回调超时(毫秒)。超时后抛 ModelPolicyTimeoutError,query 失败,不降级。仅在传入 resolveModel 时生效。

ModelPolicyProvider

回调函数签名。同步或异步均可。
触发时机按 QoderModelPurpose 区分: 行为要点:
  • 同一会话内会触发多次(每个 turn / tool / 子任务前都会再问一次)。
  • 回调返回的 model 是该次请求的最终模型,SDK 不再做二次校验。
  • 抛异常或返回空 model 让 query 直接失败,详细错误处理见 Model Policy — 超时与错误处理

ModelPolicyContext

回调每次接收的上下文。

QoderModelPurpose

ModelPolicyResult

回调返回值。
支持的 parameters 键: model 形式:
  • 字符串 — 后端支持的模型 ID(如 auto / performance / glm51),具体可用值由 q.getAvailableModels() 实时返回。必须非空,否则 query 失败。
  • CustomModel 对象(BYOK) — SDK 自动提取对象里的 model 字段作为本次调用的模型标识,其余字段作为凭证转发给 CLI 路由到第三方 LLM。

CustomModel

BYOK 凭证。在 resolveModel 回调里把 model 字段直接设为该对象,本次 LLM 请求会路由到第三方 provider。
注意:
  • provider 必须命中目录里的 key,否则后端鉴权失败。
  • api_key 错误时鉴权失败让 query 直接失败(动态回调模式不降级)。
  • BYOK 调用平台 total_cost_usd 计为 0,token 用量按真实值上报,由 provider 侧扣费。

BYOK 目录类型

q.listByokProviders() 返回的 provider/model 目录。

BYOKProviderInfo

BYOKModelTypeInfo

BYOKModelInfo

ModelInfo

q.getAvailableModels() 返回的可用模型摘要,也作为 ModelPolicyContext.availableModels 的元素类型。

ModelContextConfig

模型的上下文窗口配置,按层级标签(如 "200K""1M")索引。

ModelThinkingConfig

模型的思考(推理)配置。

ModelPromotion

CLI 从模型列表 API 透传的优惠/折扣信息。嵌套字段名保持服务端的 snake_case 形式。

ServerModelJson

模型列表 API 返回的 JSON 兼容原始模型条目。服务端新增字段尚未进入 ModelInfo 一等字段时,可以从这里读取。

UsageInfo

q.getUsageInfo() 返回的账号配额与用量快照。
各额度桶均以 unit(通常为 credits)为单位,按 total(组织包为 cap)给出 used / remaining / percentage。 缺失字段或运行时类型不符合预期的字段会从返回对象中省略。

ModelPolicyTimeoutError

resolveModel 回调超过 options.resolveModelTimeoutMs 仍未返回时由 SDK 抛出,query 直接失败,不降级。

q.setModel()

运行中切换固定模型模式下的模型,下一次 LLM 调用生效。仅在固定模型模式下生效;动态回调模式下调用不会覆盖回调结果。可用模型 ID 见 ModelInfo.value

q.getAvailableModels()

实时拉取当前账号可用的模型列表。返回最新结果,不缓存;暂时无法获取时返回空数组,不抛异常。动态回调模式下 ModelPolicyContext.availableModels 已实时携带相同列表,无需额外调用。

q.listByokProviders()

返回当前账号可用的 BYOK provider/model 目录数组:
  • 返回 null:CLI 不支持该接口(兼容降级,不抛异常)。
  • 返回数组(可能为空):当前账号可用的 provider 列表(空数组表示账号未开通 BYOK)。
provider/model 字段含义见 BYOK 目录类型

q.getUsageInfo()

实时获取当前账号的配额与用量信息(由运行中的 CLI 返回)。
  • 返回 null:CLI 未登录、旧版本 CLI 不支持该接口,或 CLI 未返回对象(兼容降级,不抛异常)。
  • 返回 UsageInfo 对象:运行时类型合法的账号配额与用量字段。缺失或类型不合法的字段会被省略。
返回类型见 UsageInfo

CanUseTool

宿主自定义的工具权限审批回调。

CanUseToolOptions

完整使用与例子见 权限控制

PermissionMode

更多权限链路说明见 权限控制

PermissionResult

CanUseTool 的返回值。
allow.updatedInput 修改后会替换工具实际收到的入参。deny.interrupt: true 拒绝同时中断 Agent。

McpServerConfig

MCP 服务器配置,传给 Options.mcpServers

McpStdioServerConfig

McpSSEServerConfig

McpHttpServerConfig

McpSdkServerConfigWithInstance

createSdkMcpServer() 工厂返回,见 MCP - In-Process Server

SdkPluginConfig

加载本地插件。

CloudAgentOptions

Options.experimentalCloudAgent 的类型。Cloud runtime 的 agent / session 引用配置;完整用法见 Cloud Agent

AgentCreateParams

新建 Cloud Agent 的请求体,对应 Qoder Cloud OpenAPI 的 agent create 字段。

CloudSessionCreateParams

新建 Cloud session 的请求体。

SettingSource

控制加载哪些 filesystem settings。
省略时按 CLI 默认加载所有源;传 [] 完全跳过。

ToolConfig

内置工具行为配置。

内置工具列表

toolsallowedToolsdisallowedToolscanUseTool、hooks matcher 和 Agent 工具白名单里,内置工具使用下表中的运行时工具名。 自定义 MCP 工具名格式:

tool()

创建一个类型安全的 SDK MCP 工具定义。
tool() 本身是定义工具的工厂函数;namedescription 和重复工具名等注册约束由 createSdkMcpServer() 在注册工具时校验。

AnyZodRawShape

AnyZodRawShape 兼容 Zod 3 / Zod 4。它表示字段对象,而不是 z.object(...)

InferShape

InferShape 根据 Zod raw shape 推导 handler 的 args 类型。

SdkMcpToolDefinition

ToolExtras

ToolAnnotations

这些字段是元信息和调度提示,不是权限开关。是否允许执行仍由 toolsallowedToolsdisallowedToolspermissionModecanUseTool 和 hooks 决定。当前功能点文档中列为已验证行为能力的是 readOnlyHintdestructiveHintopenWorldHinttitle 仅按 MCP 元信息保留在类型参考里。

createSdkMcpServer()

创建一个与 SDK 同进程运行的 MCP server。

CreateSdkMcpServerOptions

返回值

返回 McpSdkServerConfigWithInstance,可直接作为 options.mcpServers 的值。完整 MCP server 配置见 McpServerConfig

CallToolResult

工具 handler 返回 MCP 协议的 CallToolResult

McpToolResultContent

内置工具输入输出类型

SDK 在类型层提供内置工具的输入 / 输出结构。注意:这些是 TypeScript 类型名;权限配置里仍使用上方的运行时工具名。

AgentInput / AgentOutput

BashInput / BashOutput

FileReadInput / FileReadOutput

运行时工具名是 Read,类型名保留为 FileReadInput / FileReadOutput

FileEditInput / FileEditOutput

运行时工具名是 Edit

FileWriteInput / FileWriteOutput

运行时工具名是 Write

GlobInput / GlobOutput

GrepInput / GrepOutput

WebFetchInput / WebFetchOutput

WebSearchInput / WebSearchOutput

AskUserQuestionInput / AskUserQuestionOutput

NotebookEditInput / NotebookEditOutput

TaskOutputInput

TaskStopInput / TaskStopOutput

ExitPlanModeInput / ExitPlanModeOutput

ConfigInput / ConfigOutput

EnterWorktreeInput / EnterWorktreeOutput

ExitWorktreeInput / ExitWorktreeOutput

TodoWriteInput / TodoWriteOutput

ListMcpResourcesInput / ListMcpResourcesOutput

ReadMcpResourceInput

McpInput / McpOutput

ToolInputSchemas

ToolOutputSchemas


Hooks Reference

使用指南和示例见 Hooks

事件概览

HookEvent

可注册的 hook 事件联合类型。

HookCallback

HookCallbackMatcher

BaseHookInput

所有 hook 事件的通用输入字段。

HookJSONOutput

Hook 回调的返回类型。
当多个 hook 返回冲突的 decision 值时,"deny" / "block" 优先(最严格规则生效)。

PreToolUseHookInput

hookSpecificOutput

PostToolUseHookInput

输出行为: hookSpecificOutput
当多个 hook 都设置了 updatedToolOutput 时,最后一个非空值生效。如需链式转换,请在单个回调内按顺序执行。

PostToolUseFailureHookInput

UserPromptSubmitHookInput

hookSpecificOutput

SessionStartHookInput

hookSpecificOutput

SessionEndHookInput

StopHookInput

返回 { decision: 'block', reason: '...' } 可阻止 AI 停止并强制继续。reason 作为续接提示注入模型上下文。

SubagentStartHookInput

SubagentStopHookInput

PreCompactHookInput

PostCompactHookInput

CwdChangedHookInput

InstructionsLoadedHookInput

FileChangedHookInput

PermissionRequestHookInput

hookSpecificOutput 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 的完整回复,按 turn 触达一次。

SDKUserMessage

用户消息或工具结果回灌。

SDKUserMessageReplay

会话恢复时回放的历史用户消息。

SDKResultMessage

整个会话结束时的最终消息。

SDKSystemMessage

会话初始化消息(subtype: 'init')。其他系统事件通过单独的消息类型送达,见下方各 SDK*Message
capabilities 是 runtime 功能的开放集合。应用应忽略无法识别的值。

SDKMirrorErrorMessage

SDK 最终仍无法把一批数据写入外置会话存储时产生的非致命消息。当前 query 会继续执行。

SDKPartialAssistantMessage

需启用 includePartialMessages: true,按 token 增量流出。完整用法见 流式输出

SDKCompactBoundaryMessage

上下文压缩完成的边界标记。

SDKStatusMessage

会话运行状态变化(如压缩中)。

SDKMcpStatusChangeMessage

MCP 连接池状态变化。

SDKAPIRetryMessage

网络/服务异常时的自动重试。

SDKHookStartedMessage

Hook 开始执行。

SDKHookProgressMessage

Hook 执行中输出。

SDKHookResponseMessage

Hook 结束。

SDKTaskStartedMessage

子 Agent 任务启动。

SDKTaskProgressMessage

子 Agent 任务进度。

SDKTaskNotificationMessage

子 Agent 任务结束。

SDKSessionStateChangedMessage

主会话运行状态变化。

SDKSessionTitleChangedMessage

会话标题变化。

SDKFilesPersistedEvent

文件 checkpoint 持久化结果。

SDKElicitationCompleteMessage

MCP elicitation 完成。

SDKPermissionDeniedMessage

工具调用被权限策略短路拒绝(dontAsk / auto / deny rule 等)。

SDKPromptSuggestionMessage

启用 promptSuggestions: true 后,每轮 result 后可能收到的下一步建议。

SDKCloudAgentEventMessage

Cloud runtime(options.experimentalCloudAgent)下,从 Qoder Cloud session SSE 流转发的事件。完整用法见 Cloud Agent

SDKPermissionDenial

SDKResultMessage.permission_denials 数组中的元素。