Functions
query()
SDK 的主入口函数。创建一个 async generator,按消息到达顺序流式输出 SDKMessage。
参数
返回值
返回Query——一个 AsyncGenerator<SDKMessage, void>,通过 for await 消费。
q.interrupt()
q.cancelAsyncMessage()
true;消息不存在或已无法取消时返回 false。参见取消排队消息。
q.initializationResult()
skills 是发现清单,不代表主会话当前全部可调用。返回类型见 SDKControlInitializeResponse,skill 发现与调用策略见 Skills。
会话管理函数
以下函数默认读写本地会话。在 options 中传入sessionStore 后,函数会操作外置存储。接入方式和行为说明见外置会话存储。
这些 option 类型都包含
dir 和 sessionStore。列表与消息函数还通过 limit 和 offset 支持分页。listSessions 在读取本地会话时支持 includeWorktrees。forkSession 额外支持 upToMessageId 和 title,getSessionMessages 支持 includeSystemMessages。
importSessionToStore()
把已有的本地会话复制到外置存储。
includeSubagents 默认为 true,batchSize 默认为 500。
Types
Options
query() 的配置对象。
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 版本。
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 inallowedToolssince Qoder invokes subagents through the Agent tool.
Agent 工具调用这些子 Agent。主会话要能委派任务,工具集中必须存在 Agent;allowedTools: ['Agent'] 是必需的预授权写法。如果你使用 options.tools 收窄主会话可用工具,也要把 Agent 放进去。
options.agent
类型: string
指定主会话以哪个 Agent 身份运行。值可以是 options.agents 中注册的名称,也可以是当前 CLI 已发现的内置 / 插件 Agent 名称。
prompt、model 和工具限制。省略时使用默认主会话行为。
AgentDefinition
自定义 Agent 的定义。下列字段是当前版本 SDK 覆盖并经过功能测试验证的稳定能力。
description
描述 Agent 适合处理什么任务。它会影响模型是否选择该 Agent。
Helpful assistant 这类宽泛描述。
prompt
Agent 的系统提示词,用来定义角色、约束和输出格式。
tools
Agent 可用工具白名单。设置后,Agent 只能使用列出的工具。
tools 时,使用子 Agent 默认工具表。子 Agent 的工具表不继承主会话 allowedTools 的裁剪。
disallowedTools
从 Agent 工具集中排除指定工具。
disallowedTools 时,子 Agent 不继承主会话 disallowedTools 的裁剪。通常不要同时设置 tools 和 disallowedTools,除非你明确知道最终工具集合。
model
为 Agent 指定模型,省略时使用会话默认模型。可填模型级别包括:
Agent 还支持两个特殊写法:
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 的优先级和示例见 权限控制。
权限语义介绍见 权限控制。
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()
ModelInfo.value。
q.getAvailableModels()
ModelPolicyContext.availableModels 已实时携带相同列表,无需额外调用。
q.listByokProviders()
- 返回
null:CLI 不支持该接口(兼容降级,不抛异常)。 - 返回数组(可能为空):当前账号可用的 provider 列表(空数组表示账号未开通 BYOK)。
q.getUsageInfo()
- 返回
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
内置工具行为配置。
内置工具列表
在tools、allowedTools、disallowedTools、canUseTool、hooks matcher 和 Agent 工具白名单里,内置工具使用下表中的运行时工具名。
自定义 MCP 工具名格式:
tool()
创建一个类型安全的 SDK MCP 工具定义。
tool() 本身是定义工具的工厂函数;name、description 和重复工具名等注册约束由 createSdkMcpServer() 在注册工具时校验。
AnyZodRawShape
AnyZodRawShape 兼容 Zod 3 / Zod 4。它表示字段对象,而不是 z.object(...)。
InferShape
InferShape 根据 Zod raw shape 推导 handler 的 args 类型。
SdkMcpToolDefinition
ToolExtras
ToolAnnotations
这些字段是元信息和调度提示,不是权限开关。是否允许执行仍由
tools、allowedTools、disallowedTools、permissionMode、canUseTool 和 hooks 决定。当前功能点文档中列为已验证行为能力的是 readOnlyHint、destructiveHint 和 openWorldHint;title 仅按 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 数组中的元素。