Skip to content

项目结构

目录总览

claude-code-java/
├── pom.xml                          # Maven 构建配置
├── src/
│   ├── main/java/com/claudecode/
│   │   ├── ClaudeCode.java          # 🚀 程序入口
│   │   │
│   │   ├── core/                    # 🧠 核心引擎
│   │   │   ├── AgentLoop.java       #    Agent 循环(最核心的类)
│   │   │   ├── ForkExecutor.java    #    Skill Fork 模式执行器(子 Agent)
│   │   │   ├── ConversationHistory.java  #    对话历史管理
│   │   │   └── ContextManager.java  #    上下文窗口管理
│   │   │
│   │   ├── api/                     # 🌐 API 通信层
│   │   │   ├── ClaudeApiClient.java #    HTTP 客户端
│   │   │   ├── StreamAssembler.java #    SSE 流式组装器
│   │   │   └── model/              #    数据模型
│   │   │       ├── ApiRequest.java
│   │   │       ├── ApiResponse.java
│   │   │       ├── Message.java
│   │   │       ├── ContentBlock.java
│   │   │       ├── TextBlock.java
│   │   │       ├── ToolUseBlock.java
│   │   │       ├── ToolResultBlock.java
│   │   │       └── ToolDefinition.java
│   │   │
│   │   ├── tool/                    # 🔧 工具系统
│   │   │   ├── Tool.java           #    工具接口(所有工具的契约)
│   │   │   ├── ToolRegistry.java   #    工具注册中心
│   │   │   ├── ToolResult.java     #    工具执行结果
│   │   │   └── impl/              #    7 个内置工具实现
│   │   │       ├── BashTool.java
│   │   │       ├── ReadFileTool.java
│   │   │       ├── WriteFileTool.java
│   │   │       ├── EditFileTool.java
│   │   │       ├── GlobTool.java
│   │   │       ├── GrepTool.java
│   │   │       └── SkillTool.java  #    Skill↔Tool 桥梁
│   │   │
│   │   ├── command/                 # 📜 Skill / 命令系统
│   │   │   ├── Command.java        #    命令接口
│   │   │   ├── CommandType.java    #    命令类型(PROMPT / BUILTIN)
│   │   │   ├── CommandSource.java  #    命令来源(BUNDLED / DISK / MCP)
│   │   │   ├── CommandRegistry.java #    命令注册中心
│   │   │   ├── CommandRenderer.java #    内容渲染(变量替换 + Shell 预处理)
│   │   │   ├── PromptCommand.java  #    Skill 核心数据类
│   │   │   └── loader/
│   │   │       ├── SkillFrontmatter.java  # YAML 解析目标
│   │   │       └── SkillLoader.java       # SKILL.md 磁盘扫描
│   │   │
│   │   ├── mcp/                     # 🔌 MCP 扩展层
│   │   │   ├── McpManager.java     #    MCP 子系统编排器
│   │   │   ├── McpToolAdapter.java #    远程工具 → 本地 Tool 适配器
│   │   │   ├── client/
│   │   │   │   ├── McpClient.java  #    JSON-RPC 客户端
│   │   │   │   ├── McpTransport.java    # 传输层接口
│   │   │   │   ├── StdioTransport.java  # Stdio 传输实现
│   │   │   │   ├── JsonRpcRequest.java
│   │   │   │   └── JsonRpcResponse.java
│   │   │   └── config/
│   │   │       ├── McpConfigLoader.java #    配置加载器
│   │   │       └── McpServerConfig.java #    Server 配置模型
│   │   │
│   │   ├── permission/             # 🔐 权限管理
│   │   │   ├── PermissionManager.java  #    权限评估 + 用户审批
│   │   │   └── PermissionRule.java #    权限规则 + 通配符匹配
│   │   │
│   │   └── cli/                    # 💻 用户界面
│   │       ├── Repl.java           #    交互式命令行循环
│   │       └── TerminalRenderer.java   #    终端渲染(颜色、格式)
│   │
│   └── test/                       # 🧪 单元测试
│       └── java/com/claudecode/
│           └── ...

八大模块

整个项目按职责划分为 8 个包,每个包专注于一个领域:

模块职责速查

模块核心类一句话职责
入口ClaudeCode解析参数,初始化组件,启动应用
core/AgentLoop驱动 "思考-行动" 循环,是系统心脏
core/ForkExecutorSkill Fork 模式执行器,创建独立子 Agent
core/ConversationHistory维护 user/assistant 严格交替的消息列表
core/ContextManager监控 token 用量,执行上下文压缩
api/ClaudeApiClient封装 HTTP 通信,支持流式和非流式调用
api/StreamAssembler处理 SSE 事件流,组装完整的 API 响应
api/model/7 个数据类Claude API 的请求/响应/消息/内容块模型
tool/Tool 接口所有工具的统一契约(5 个方法)
tool/ToolRegistry工具的注册、查找、执行的统一入口
tool/impl/7 个工具类Bash/Read/Write/Edit/Glob/Grep/Skill 的具体实现
command/CommandRegistrySkill 的注册、查找、列表生成
command/PromptCommandSkill 核心数据载体(来自 SKILL.md 解析)
command/CommandRendererSkill 内容渲染(Shell 预处理 + 变量替换)
command/loader/SkillLoader扫描磁盘 SKILL.md 文件,解析 YAML frontmatter
mcp/McpManagerMCP 子系统编排:连接 Server、注册工具
mcp/McpToolAdapter将 MCP 远程工具适配为本地 Tool 接口
mcp/client/McpClientJSON-RPC 协议客户端(初始化、工具发现、工具调用)
mcp/client/StdioTransport基于子进程 stdin/stdout 的传输层
mcp/config/McpConfigLoader从 settings.json 加载 MCP Server 配置
permission/PermissionManager权限评估(ALLOW/DENY/ASK)+ 用户审批
permission/PermissionRule权限规则定义 + 通配符匹配算法
cli/Repl交互式命令行循环(JLine3 驱动)
cli/TerminalRenderer统一的终端输出渲染(颜色、格式化)

依赖关系原则

这个项目的模块依赖遵循单向依赖原则,没有循环依赖:

  • ClaudeCode(入口)→ 依赖所有模块(负责组装)
  • AgentLoop(核心)→ 依赖 api, tool, permission(驱动协调)
  • ClaudeApiClient → 依赖 model(发送/接收数据)
  • ToolRegistry → 依赖 Tool 接口和 impl(管理工具)
  • PermissionManager → 依赖 PermissionRule(评估规则)
  • Repl → 依赖 AgentLoop(委托处理)

设计要点

注意 Repl 不直接依赖 ClaudeApiClientToolRegistry,它只通过 AgentLoop 间接使用这些组件。这就是门面模式(Facade) 的体现 —— AgentLoop 是核心引擎的统一入口。

下一步

了解了项目结构后,让我们进入 整体架构,从更高的视角理解各模块如何协作。

基于 MIT 许可发布