How pengchengneo/claude-code works
定位与入口
这是从 @anthropic-ai/claude-code source map 还原的可运行 TypeScript CLI,目标是研究 Claude Code 的本地代理、终端 UI 和受门控的内部能力。开发入口为 src/entrypoints/cli.tsx,主应用装配在 src/main.tsx 与 src/setup.ts;另有初始化与 MCP 入口:src/entrypoints/init.ts、src/entrypoints/mcp.ts。
交互式 CLI 与状态层
CLI 使用 React/TSX 终端界面,根屏幕和 REPL 分别位于 src/components/App.tsx、src/screens/REPL.tsx。仓库内置 Ink 渲染/终端事件实现(而非仅依赖外部 UI):src/ink/ink.tsx、src/ink/renderer.ts。会话级 UI 状态集中在 src/state/AppState.tsx、src/state/AppStateStore.ts,输入经 src/utils/processUserInput/processUserInput.ts 分流为文本提示、shell 输入或斜杠命令。
Agent 查询循环、工具与权限边界
核心控制流是:用户消息 → 查询/模型流 → 工具调用 → 权限决策 → 工具结果回注会话。查询编排的关键边界在 src/QueryEngine.ts、src/query.ts、src/query/transitions.ts;工具执行由 src/services/tools/toolOrchestration.ts 和 src/services/tools/StreamingToolExecutor.ts 统一调度。具体能力以工具模块实现,如 src/tools/BashTool/BashTool.tsx、src/tools/FileEditTool/FileEditTool.ts、src/tools/AgentTool/AgentTool.tsx。权限规则与模式在 src/utils/permissions/permissions.ts、src/utils/permissions/PermissionMode.ts,交互审批 UI 位于 src/components/permissions/PermissionPrompt.tsx;这是模型行为与本地文件/进程副作用之间的主要安全边界。
命令、扩展与上下文持久化
斜杠命令注册/路由以 src/commands.ts 为中心,命令实现位于 src/commands/;它们改变会话、配置或调用服务,而非独立应用入口。插件、技能和 MCP 是三条扩展边界:src/services/plugins/PluginInstallationManager.ts、src/skills/loadSkillsDir.ts、src/services/mcp/MCPConnectionManager.tsx。本地记忆与上下文压缩分别由 src/memdir/memdir.ts、src/services/compact/compact.ts、src/services/SessionMemory/sessionMemory.ts 管理,以控制长会话 token 与跨会话信息复用。
并发代理与远程会话
任务抽象统一本地 shell、工作流、子代理与远程代理,核心类型/生命周期在 src/tasks/types.ts、src/tasks/LocalAgentTask/LocalAgentTask.tsx、src/tasks/RemoteAgentTask/RemoteAgentTask.tsx。多 Agent coordinator 通过 src/coordinator/coordinatorMode.ts 和 src/coordinator/workerAgent.ts 将主代理限制为委派/通信/停止角色。远程会话由 src/remote/RemoteSessionManager.ts、src/remote/SessionsWebSocket.ts 管理;远程控制 bridge 则通过 src/bridge/bridgeMain.ts、src/bridge/bridgeMessaging.ts、src/bridge/bridgePermissionCallbacks.ts 同步消息、状态与审批。
外部依赖、平台与功能门控
运行要求 Bun 与 Node;终端 UI 使用 React/Ink,原生能力通过本地兼容包连接,例如 shims/color-diff-napi/index.ts、shims/ant-computer-use-mcp/index.ts。网络边界包括 Claude API 客户端(src/services/api/claude.ts、src/services/api/client.ts)、OAuth(src/services/oauth/client.ts)、MCP server/client、WebSocket/SSE transport(src/cli/transports/WebSocketTransport.ts、src/cli/transports/SSETransport.ts),并支持 AWS Bedrock/Google Vertex 模型路径。功能可被编译开关、USER_TYPE 和 GrowthBook 远程实验共同限制;实验接入集中于 src/services/analytics/growthbook.ts,因此功能存在并不等于外部运行时可用。
Main entry points: QueryEngine.ts 查询编排 · App.tsx 根终端界面 · permissions.ts 权限策略与模式 · processUserInput.ts 用户输入分流
Components 25
CLI 与终端 UI
Agent 执行与安全
扩展、记忆与远程
- 会话记忆与压缩 · 复用跨会话信息并控制长会话 token。
src/services/SessionMemory/sessionMemory.ts - 插件与技能
src/services/plugins/PluginInstallationManager.ts - MCP 连接管理
src/services/mcp/MCPConnectionManager.tsx - 本地与远程任务 · 统一 shell、工作流、子代理和远程代理任务。
src/tasks/types.ts - 多 Agent 协调器 · 限制主代理执行委派、通信与停止。
src/coordinator/coordinatorMode.ts - 远程会话管理
src/remote/RemoteSessionManager.ts - 远程控制 Bridge · 同步远程消息、状态和审批。
src/bridge/bridgeMain.ts
外部平台与门控
- Claude API 客户端
src/services/api/claude.ts - OAuth 客户端
src/services/oauth/client.ts - 实验与功能门控 · 由编译开关、用户类型和远程实验共同限制。
src/services/analytics/growthbook.ts - WebSocket / SSE 传输
src/cli/transports/WebSocketTransport.ts
Connections 28
- CLI 入口 → 应用装配: 启动
- 应用装配 → 根终端界面: 装配
- 根终端界面 → 交互 REPL: 呈现
- 根终端界面 → 会话 UI 状态: 读取与更新
- 根终端界面 → 内置 Ink 渲染器: 终端渲染
- 交互 REPL → 用户输入分流: 提交输入
- 用户输入分流 → 斜杠命令: 斜杠命令
- 用户输入分流 → 查询编排: 文本提示
- 斜杠命令 → 会话 UI 状态: 修改会话或配置
- 查询编排 → Claude API 客户端: 模型请求流
- 查询编排 → 工具编排: 工具调用
- 查询编排 → 会话记忆与压缩: 读取与保存上下文
- 工具编排 → 流式工具执行: 调度
- 流式工具执行 → 权限策略与模式: 请求授权
- 权限策略与模式 → 权限审批界面: 需要交互时
- 权限审批界面 → 权限策略与模式: 审批结果
- 权限策略与模式 → 本地副作用工具: 授权执行
- 流式工具执行 → 查询编排: 工具结果回注
- 查询编排 → 本地与远程任务: 创建任务
- 多 Agent 协调器 → 本地与远程任务: 委派 worker
- 本地与远程任务 → 远程会话管理: 远程代理任务
- 远程会话管理 → 远程控制 Bridge: 同步控制状态
- 远程控制 Bridge → WebSocket / SSE 传输: 网络消息
- 插件与技能 → MCP 连接管理: 扩展能力
- MCP 连接管理 → 工具编排: 提供工具
- OAuth 客户端 → Claude API 客户端: 认证
- 实验与功能门控 → 查询编排: 门控能力
- 实验与功能门控 → 插件与技能: 门控扩展