Files
claude-code/README.md
T
liuzhandCopilot 7dc4d142b3 docs: Phase6 完整README文档 + 修改记录更新
新增 README.md:
- 功能特性概览(11工具、11命令、双API、流式输出等)
- 快速开始指南(环境变量、启动方式)
- 完整使用说明(对话、多行输入、斜杠命令、工具、CLAUDE.md、Skills)
- 架构设计(模块结构图、核心流程、双Provider架构)
- 配置参考(application.yml、环境变量表)
- 开发说明(构建、打包、已知问题)
- TypeScript→Java 对应关系表

更新 修改记录.md:
- 补全 Phase 1~5 所有修改记录
- 每个Phase的详细变更说明和关联需求

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-01 21:45:23 +08:00

320 lines
9.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Claude Code Java ☕
> 使用 Java + Spring AI 重写的 [Claude Code](https://github.com/anthropics/claude-code) CLI AI 编码助手。
## ✨ 功能特性
- 🤖 **AI 对话** — 流式输出,逐 token 实时显示
- 🔧 **11 个内置工具** — Bash、文件读写编辑、Glob、Grep、Web获取、Agent 等
-**双 API 提供者** — 同时支持 OpenAI 兼容 API 和 Anthropic 原生 API
- 📝 **斜杠命令**`/help`, `/compact`, `/cost`, `/model`, `/history` 等 11 个命令
- 🖥️ **JLine 终端** — 行编辑、历史记录、Tab 补全、多行输入
- 📋 **CLAUDE.md** — 自动加载项目级和用户级记忆文件
- 🎯 **Skills** — 可扩展的技能系统
- 🌿 **Git 上下文** — 自动收集分支、状态、最近提交
- 💾 **对话持久化** — 自动保存对话历史,支持回顾
- 🗜️ **上下文压缩** — AI 生成摘要替代简单清空
## 📦 技术栈
| 组件 | 版本 | 用途 |
|------|------|------|
| JDK | 25 | 运行时 |
| Spring Boot | 4.1.0-M2 | 应用框架 |
| Spring AI | 2.0.0-M4 | AI 模型调用 |
| JLine 3 | 3.28.0 | 终端交互 |
| Picocli | 4.7.6 | CLI 命令解析 |
## 🚀 快速开始
### 前置要求
- **JDK 25**(配置 `JAVA_HOME`
- **Maven 3.9+**
- **API Key**OpenAI 或 Anthropic 或兼容服务)
### 配置
设置环境变量:
```bash
# 必须:API 密钥
export AI_API_KEY="your-api-key-here"
# 可选:API 提供者(默认 openai)
export CLAUDE_CODE_PROVIDER="openai" # 或 "anthropic"
# 可选:自定义 API 地址和模型
export AI_BASE_URL="https://api.openai.com"
export AI_MODEL="gpt-4o"
```
**支持的 API 提供者:**
| 提供者 | 默认 Base URL | 默认模型 |
|--------|--------------|---------|
| `openai` | `https://api.openai.com` | `gpt-4o` |
| `anthropic` | `https://api.anthropic.com` | `claude-sonnet-4-20250514` |
> 💡 OpenAI 提供者兼容所有 OpenAI 格式的 API 代理(如 DeepSeek、Azure OpenAI 等)。
### 运行
**Windows PowerShell**
```powershell
.\run.ps1
```
**Windows CMD**
```cmd
run.bat
```
**手动运行:**
```bash
cd claude-code-copy
mvn spring-boot:run
```
### 启动效果
```
◆ Claude Code (Java) v0.1.0-SNAPSHOT
Type /help for commands • Ctrl+D to exit
Provider: OPENAI Model: deepseek-chat
API URL: https://api.deepseek.com
Work Dir: D:\my-project
Tools: 11 registered
Terminal: windows-vtp (160×30)
Tip: Tab to complete commands, ↑↓ to browse history, Ctrl+D to exit
```
## 📖 使用说明
### 对话
直接输入文本与 AI 对话,支持流式输出:
```
帮我分析这个项目的架构
```
### 多行输入
行末加 `\` 续行:
```
请帮我写一个函数,\
... 实现字符串反转
```
### 斜杠命令
| 命令 | 说明 |
|------|------|
| `/help` | 显示所有可用命令 |
| `/clear` | 清屏 |
| `/compact` | AI 摘要压缩对话上下文 |
| `/cost` | 显示 Token 使用量和费用 |
| `/model [name]` | 查看/切换模型 |
| `/status` | 显示会话状态(消息数、Token、模型) |
| `/context` | 显示已加载的上下文(CLAUDE.md、Skills、Git |
| `/config` | 查看配置信息 |
| `/init` | 初始化 CLAUDE.md 配置文件 |
| `/history` | 列出保存的对话历史 |
| `/exit` | 退出 |
### 内置工具
AI 可以自动调用以下工具:
| 工具 | 说明 |
|------|------|
| `bash` | 执行 Shell 命令 |
| `file_read` | 读取文件内容 |
| `file_write` | 写入文件 |
| `file_edit` | 编辑文件(搜索替换) |
| `glob` | 文件模式匹配搜索 |
| `grep` | 文本内容搜索 |
| `list_files` | 列出目录文件 |
| `web_fetch` | 获取网页内容 |
| `todo_write` | 管理待办事项 |
| `agent` | 启动子 Agent 处理复杂任务 |
| `notebook_edit` | 编辑 Jupyter Notebook |
### CLAUDE.md 记忆文件
创建 `CLAUDE.md` 文件来给 AI 提供项目上下文:
```markdown
# 项目说明
这是一个 Spring Boot 项目,使用 MyBatis 做数据持久化。
# 编码规范
- 使用中文注释
- 遵循阿里巴巴 Java 开发手册
```
加载顺序(优先级递增):
1. `~/.claude/CLAUDE.md` — 全局配置
2. 项目根目录 `CLAUDE.md` — 项目级配置
3. 当前目录 `CLAUDE.md` — 目录级配置
### Skills 技能系统
在以下目录放置 `.md` 文件作为技能:
- `~/.claude/skills/` — 全局技能
- `.claude/skills/` — 项目技能
- `.claude/commands/` — 自定义命令技能
技能文件支持 YAML frontmatter
```markdown
---
name: code-review
description: 代码审查技能
---
请按照以下标准审查代码:
1. 命名规范
2. 错误处理
3. 性能考量
```
## 🏗️ 架构设计
### 模块结构
```
com.claudecode
├── ClaudeCodeApplication // Spring Boot 主入口
├── cli/
│ └── ClaudeCodeRunner // 启动编排(CommandLineRunner
├── config/
│ └── AppConfig // Bean 装配、Provider 切换
├── core/
│ ├── AgentLoop // Agent 循环(阻塞 + 流式)
│ ├── TokenTracker // Token 使用追踪
│ └── ConversationPersistence // 对话持久化
├── tool/
│ ├── Tool // 工具协议接口
│ ├── ToolRegistry // 工具注册中心
│ ├── ToolCallbackAdapter // Spring AI 适配器
│ └── impl/ // 11 个工具实现
├── command/
│ ├── SlashCommand // 命令接口
│ ├── CommandRegistry // 命令注册中心
│ └── impl/ // 11 个命令实现
├── console/
│ ├── BannerPrinter // 启动 Banner
│ ├── ToolStatusRenderer // 工具状态渲染
│ ├── ThinkingRenderer // Thinking 渲染
│ ├── SpinnerAnimation // 加载动画
│ ├── MarkdownRenderer // Markdown 渲染
│ └── AnsiStyle // ANSI 样式工具
├── context/
│ ├── SystemPromptBuilder // 系统提示词构建
│ ├── ClaudeMdLoader // CLAUDE.md 加载
│ ├── SkillLoader // Skills 加载
│ └── GitContext // Git 上下文收集
└── repl/
├── ReplSession // REPL 会话管理
└── ClaudeCodeCompleter // Tab 补全
```
### 核心流程
```
用户输入 → 命令检测 → AgentLoop
chatModel.stream(prompt) → Flux<ChatResponse>
逐token实时输出到终端
检测工具调用 → 执行工具 → 结果回传
继续循环或结束
```
### 双 API 提供者架构
```
┌─ openAiChatModel ──── OpenAI / DeepSeek / Azure
CLAUDE_CODE_PROVIDER─┤
└─ anthropicChatModel ── Anthropic Claude
```
通过 `claude-code.provider` 配置决定使用哪个 `ChatModel` Bean。
## ⚙️ 配置参考
### application.yml
```yaml
spring:
ai:
anthropic:
api-key: ${AI_API_KEY:}
base-url: ${AI_BASE_URL:https://api.anthropic.com}
chat.options.model: ${AI_MODEL:claude-sonnet-4-20250514}
openai:
api-key: ${AI_API_KEY:}
base-url: ${AI_BASE_URL:https://api.openai.com}
chat.options.model: ${AI_MODEL:gpt-4o}
claude-code:
provider: ${CLAUDE_CODE_PROVIDER:openai}
```
### 环境变量
| 变量 | 必须 | 说明 | 默认值 |
|------|------|------|--------|
| `AI_API_KEY` | ✅ | API 密钥 | - |
| `CLAUDE_CODE_PROVIDER` | ❌ | 提供者 (`openai`/`anthropic`) | `openai` |
| `AI_BASE_URL` | ❌ | API 基础 URL | 按提供者不同 |
| `AI_MODEL` | ❌ | 模型名称 | 按提供者不同 |
| `AI_MAX_TOKENS` | ❌ | 最大 Token 数 | `8096` |
## 🔧 开发
### 构建
```bash
mvn clean compile
```
### 打包
```bash
mvn clean package -DskipTests
java -jar target/claude-code-java-0.1.0-SNAPSHOT.jar
```
### 已知问题
- **Windows 编码**:需要 `chcp 65001` 切换到 UTF-8 编码页(启动脚本已自动处理)
- **IDE 终端**IntelliJ IDEA 等 IDE 内置终端为 dumb 模式,Tab 补全和行编辑受限
- **JDK 25 警告**Maven 的 jansi/guava 会触发 native access 警告(启动脚本已通过 MAVEN_OPTS 抑制)
## 📝 对应关系
| Claude Code (TypeScript) | Java 实现 | 说明 |
|--------------------------|-----------|------|
| `cli.tsx``main.tsx` | `ClaudeCodeApplication` + `ClaudeCodeRunner` | 入口 |
| `REPL.tsx` | `ReplSession` + JLine 3 | 交互循环 |
| `query.ts` | `AgentLoop` | Agent 循环 |
| `Tool.ts` + `tools/*` | `Tool` 接口 + `impl/*` | 工具系统 |
| `commands.ts` | `SlashCommand` + `impl/*` | 命令系统 |
| `context.ts` + `prompts.ts` | `SystemPromptBuilder` + loaders | 上下文 |
| `CLAUDE.md` + `skills/` | `ClaudeMdLoader` + `SkillLoader` | 记忆/技能 |
| Ink Components | `console/*` 渲染器 | 终端 UI |
## 📄 License
本项目仅用于学习和研究目的。