You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
liuzh 7dc4d142b3 docs: Phase6 完整README文档 + 修改记录更新 1 month ago
src/main feat: Phase5C+5D /compact AI摘要压缩 + 多行输入支持 1 month ago
.gitignore feat: Phase1 项目骨架 - Maven项目结构、核心AgentLoop、6个工具、命令系统、控制台渲染、REPL会话 1 month ago
README.md docs: Phase6 完整README文档 + 修改记录更新 1 month ago
pom.xml fix: 修复Windows终端UTF-8编码问题,恢复emoji字符 1 month ago
run.bat refactor: 统一API环境变量命名,AI_API_KEY/AI_BASE_URL/AI_MODEL通用 1 month ago
run.ps1 refactor: 统一API环境变量命名,AI_API_KEY/AI_BASE_URL/AI_MODEL通用 1 month ago
修改记录.md docs: Phase6 完整README文档 + 修改记录更新 1 month ago
需求文档.md docs: 初始化项目需求文档和修改记录 1 month ago

README.md

Claude Code Java

使用 Java + Spring AI 重写的 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 或兼容服务)

配置

设置环境变量:

# 必须: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:

.\run.ps1

Windows CMD:

run.bat

手动运行:

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 提供项目上下文:

# 项目说明
这是一个 Spring Boot 项目,使用 MyBatis 做数据持久化。

# 编码规范
- 使用中文注释
- 遵循阿里巴巴 Java 开发手册

加载顺序(优先级递增):

  1. ~/.claude/CLAUDE.md — 全局配置
  2. 项目根目录 CLAUDE.md — 项目级配置
  3. 当前目录 CLAUDE.md — 目录级配置

Skills 技能系统

在以下目录放置 .md 文件作为技能:

  • ~/.claude/skills/ — 全局技能
  • .claude/skills/ — 项目技能
  • .claude/commands/ — 自定义命令技能

技能文件支持 YAML frontmatter:

---
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

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

🔧 开发

构建

mvn clean compile

打包

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.tsxmain.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

本项目仅用于学习和研究目的。