Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

附录 A:类型定义速查

本附录收录 Claude Code 源码中的核心 TypeScript 类型定义,提供快速索引和概览。

Note

详细说明和设计原理请参考对应章节。类型定义文件位于 src/types/ 目录。

A.1 核心 TypeScript 类型汇总

A.1.1 工具系统类型

类型名称定义文件用途说明
Toolsrc/Tool.ts工具接口定义,包含 name、call、inputSchema、checkPermissions 等核心方法
Toolssrc/Tool.ts工具集合类型 readonly Tool[]
ToolDefsrc/Tool.ts工具定义输入类型,用于 buildTool() 函数
ToolResult<T>src/Tool.ts工具执行结果包装器
ToolUseContextsrc/Tool.ts工具执行上下文,包含 messages、abortController、permissionContext 等
ToolProgress<P>src/Tool.ts工具进度消息类型
ToolInputJSONSchemasrc/Tool.tsJSON Schema 格式的工具输入定义
PermissionResultsrc/types/permissions.ts权限检查结果类型
PermissionDecisionsrc/types/permissions.ts权限决策类型(allow/ask/deny)

A.1.2 命令与 Skill 类型

类型名称定义文件用途说明
Commandsrc/types/command.ts斜杠命令类型,合并 CommandBase 与三种命令实现
PromptCommandsrc/types/command.tsPrompt 类型命令,包含 getPromptForCommand 方法
LocalCommandsrc/types/command.ts本地命令类型,包含 load() 懒加载
LocalJSXCommandsrc/types/command.tsJSX 命令类型,用于交互式 UI 命令
CommandBasesrc/types/command.ts命令基础属性(name、description、isEnabled 等)
BundledSkillDefinitionsrc/skills/bundledSkills.ts内置 Skill 定义,包含 name、description、getPromptForCommand 等
CommandAvailabilitysrc/types/command.ts命令可用性约束类型('claude-ai' | 'console')

A.1.3 查询引擎类型

类型名称定义文件用途说明
QueryEngineConfigsrc/QueryEngine.tsQueryEngine 配置,包含 cwd、tools、mcpClients、agents 等
QueryChainTrackingsrc/Tool.ts查询链追踪信息(chainId、depth)
ValidationResultsrc/Tool.ts输入验证结果类型
CompactProgressEventsrc/Tool.ts压缩进度事件类型

A.1.4 会话与标识类型

类型名称定义文件用途说明
SessionIdsrc/types/ids.ts会话 ID 品牌类型,防止与其他 ID 混淆
AgentIdsrc/types/ids.tsAgent ID 品牌类型,用于子 Agent 标识
LogOptionsrc/types/logs.ts会话日志选项,包含 date、messages、sessionId 等
SerializedMessagesrc/types/logs.ts序列化消息类型,用于日志存储
TranscriptMessagesrc/types/logs.ts转录消息类型,包含 parentUuid、isSidechain 等
PersistedWorktreeSessionsrc/types/logs.tsWorktree 会话持久化数据

A.1.5 Bridge 类型

类型名称定义文件用途说明
BridgeConfigsrc/bridge/types.tsBridge 配置,包含 dir、machineName、spawnMode 等
WorkResponsesrc/bridge/types.ts工作响应类型,包含 id、environment_id、state、secret
WorkSecretsrc/bridge/types.ts工作密钥类型,包含 session_ingress_token、api_base_url
SessionHandlesrc/bridge/types.ts会话句柄,包含 sessionId、done、kill、activities
SessionActivitysrc/bridge/types.ts会话活动类型(tool_start、text、result、error)
SpawnModesrc/bridge/types.ts会话启动模式(single-session、worktree、same-dir)
BridgeWorkerTypesrc/bridge/types.tsBridge 工作类型(claude_code、claude_code_assistant)

A.1.6 插件类型

类型名称定义文件用途说明
PluginManifestsrc/types/plugin.ts插件清单定义
LoadedPluginsrc/types/plugin.ts已加载插件类型,包含 manifest、path、enabled 等
PluginErrorsrc/types/plugin.ts插件错误联合类型,包含 20+ 种具体错误类型
PluginLoadResultsrc/types/plugin.ts插件加载结果(enabled、disabled、errors)
PluginRepositorysrc/types/plugin.ts插件仓库配置
BuiltinPluginDefinitionsrc/types/plugin.ts内置插件定义

A.1.7 权限类型

类型名称定义文件用途说明
PermissionModesrc/types/permissions.ts权限模式(default、acceptEdits、bypassPermissions 等)
PermissionBehaviorsrc/types/permissions.ts权限行为(allow、deny、ask)
PermissionRulesrc/types/permissions.ts权限规则,包含 source、ruleBehavior、ruleValue
PermissionUpdatesrc/types/permissions.ts权限更新操作类型
PermissionDecisionReasonsrc/types/permissions.ts权限决策原因类型
ClassifierResultsrc/types/permissions.ts分类器结果类型
YoloClassifierResultsrc/types/permissions.tsAuto Mode 分类器结果
ToolPermissionContextsrc/types/permissions.ts工具权限上下文

A.1.8 Hook 类型

类型名称定义文件用途说明
HookCallbacksrc/types/hooks.tsHook 回调类型
HookResultsrc/types/hooks.tsHook 执行结果
AggregatedHookResultsrc/types/hooks.ts聚合 Hook 结果
HookProgresssrc/types/hooks.tsHook 进度消息
PromptRequestsrc/types/hooks.tsPrompt 请求类型
PromptResponsesrc/types/hooks.tsPrompt 响应类型
PermissionRequestResultsrc/types/hooks.ts权限请求结果

A.1.9 UI 输入类型

类型名称定义文件用途说明
BaseTextInputPropssrc/types/textInputTypes.ts文本输入基础属性
VimTextInputPropssrc/types/textInputTypes.tsVim 模式输入属性
TextInputStatesrc/types/textInputTypes.ts文本输入状态
VimModesrc/types/textInputTypes.tsVim 模式(INSERT、NORMAL)
PromptInputModesrc/types/textInputTypes.tsPrompt 输入模式
QueuePrioritysrc/types/textInputTypes.ts队列优先级(now、next、later)
QueuedCommandsrc/types/textInputTypes.ts队列命令类型
OrphanedPermissionsrc/types/textInputTypes.ts孤立权限类型

A.1.10 Connector 类型

类型名称定义文件用途说明
ConnectorTextBlocksrc/types/connectorText.tsConnector 文本块类型
ConnectorTextDeltasrc/types/connectorText.tsConnector 文本增量类型

A.2 类型关系图

graph TB
    subgraph "核心类型体系"
        Tool[Tool<br/>工具接口]
        Tools[Tools<br/>工具集合]
        ToolDef[ToolDef<br/>工具定义]
        
        ToolDef -->|buildTool| Tool
        Tool -->|组成| Tools
    end
    
    subgraph "权限类型体系"
        PermissionMode[PermissionMode<br/>权限模式]
        PermissionBehavior[PermissionBehavior<br/>权限行为]
        PermissionRule[PermissionRule<br/>权限规则]
        PermissionDecision[PermissionDecision<br/>权限决策]
        PermissionResult[PermissionResult<br/>权限结果]
        
        PermissionMode --> PermissionDecision
        PermissionBehavior --> PermissionRule
        PermissionRule --> PermissionDecision
        PermissionDecision --> PermissionResult
    end
    
    subgraph "命令类型体系"
        CommandBase[CommandBase<br/>命令基础]
        Command[Command<br/>命令联合]
        PromptCommand[PromptCommand<br/>Prompt 命令]
        LocalCommand[LocalCommand<br/>本地命令]
        LocalJSXCommand[LocalJSXCommand<br/>JSX 命令]
        
        CommandBase --> Command
        PromptCommand --> Command
        LocalCommand --> Command
        LocalJSXCommand --> Command
    end
    
    subgraph "会话类型体系"
        SessionId[SessionId<br/>会话 ID]
        AgentId[AgentId<br/>Agent ID]
        LogOption[LogOption<br/>日志选项]
        SerializedMessage[SerializedMessage<br/>序列化消息]
        
        SessionId --> LogOption
        AgentId --> SerializedMessage
    end
    
    subgraph "Bridge 类型体系"
        BridgeConfig[BridgeConfig<br/>Bridge 配置]
        WorkResponse[WorkResponse<br/>工作响应]
        SessionHandle[SessionHandle<br/>会话句柄]
        SpawnMode[SpawnMode<br/>启动模式]
        
        BridgeConfig --> SessionHandle
        WorkResponse --> SessionHandle
        SpawnMode --> BridgeConfig
    end
    
    subgraph "插件类型体系"
        PluginManifest[PluginManifest<br/>插件清单]
        LoadedPlugin[LoadedPlugin<br/>已加载插件]
        PluginError[PluginError<br/>插件错误]
        PluginLoadResult[PluginLoadResult<br/>加载结果]
        
        PluginManifest --> LoadedPlugin
        LoadedPlugin --> PluginLoadResult
        PluginError --> PluginLoadResult
    end
    
    Tool --> PermissionResult
    ToolUseContext --> Tool
    ToolUseContext --> PermissionMode
    Command --> ToolUseContext
    QueryEngine --> ToolUseContext
    QueryEngine --> Tools
    QueryEngine --> Command
    BridgeConfig --> SessionId
    HookResult --> PermissionDecision
    BundledSkillDefinition --> Command

A.3 关键类型定义示例

A.3.1 Tool 核心结构

type Tool<
  Input extends AnyObject = AnyObject,
  Output = unknown,
  P extends ToolProgressData = ToolProgressData,
> = {
  readonly name: string;
  aliases?: string[];
  readonly inputSchema: Input;
  call(args, context, canUseTool, parentMessage, onProgress): Promise<ToolResult<Output>>;
  description(input, options): Promise<string>;
  checkPermissions(input, context): Promise<PermissionResult>;
  isEnabled(): boolean;
  isConcurrencySafe(input): boolean;
  isReadOnly(input): boolean;
  isDestructive?(input): boolean;
  userFacingName(input): string;
  prompt(options): Promise<string>;
  // ... 渲染方法
};

A.3.2 Command 联合类型

type Command = CommandBase &
  (PromptCommand | LocalCommand | LocalJSXCommand);

type CommandBase = {
  name: string;
  description: string;
  availability?: CommandAvailability[];
  isEnabled?: () => boolean;
  isHidden?: boolean;
  aliases?: string[];
  argumentHint?: string;
  whenToUse?: string;
  version?: string;
  disableModelInvocation?: boolean;
  userInvocable?: boolean;
  loadedFrom?: 'skills' | 'plugin' | 'managed' | 'bundled' | 'mcp';
  // ...
};

A.3.3 PermissionResult 结构

type PermissionResult<Input = { [key: string]: unknown }> =
  | PermissionDecision<Input>
  | {
      behavior: 'passthrough';
      message: string;
      decisionReason?: PermissionDecision<Input>['decisionReason'];
      suggestions?: PermissionUpdate[];
      blockedPath?: string;
      pendingClassifierCheck?: PendingClassifierCheck;
    };

type PermissionDecision<Input> =
  | PermissionAllowDecision<Input>
  | PermissionAskDecision<Input>
  | PermissionDenyDecision;

A.3.4 QueryEngineConfig 结构

type QueryEngineConfig = {
  cwd: string;
  tools: Tools;
  commands: Command[];
  mcpClients: MCPServerConnection[];
  agents: AgentDefinition[];
  canUseTool: CanUseToolFn;
  getAppState: () => AppState;
  setAppState: (f: (prev: AppState) => AppState) => void;
  initialMessages?: Message[];
  readFileCache: FileStateCache;
  customSystemPrompt?: string;
  appendSystemPrompt?: string;
  userSpecifiedModel?: string;
  thinkingConfig?: ThinkingConfig;
  maxTurns?: number;
  maxBudgetUsd?: number;
  // ...
};

Tip

品牌类型(Branded Types)如 SessionIdAgentId 使用 TypeScript 的类型品牌机制,在编译时防止不同类型 ID 的混淆,提高代码安全性。