liuzh
|
749062fba7
|
feat: P1功能增强 - 3命令+代码高亮+状态行
新增3个命令:
- /resume: 恢复已保存的对话(支持list/序号选择)
- /export: 导出对话为Markdown文件
- /commit: 创建Git commit(支持AI生成commit message)
代码语法高亮(MarkdownRenderer增强):
- 支持Java/JS/TS/Python/Bash/SQL关键字着色
- 字符串字面量黄色、数字紫色、注释灰色斜体
- 注解(@Annotation)亮黄色
- true/false/null 红色
- 新增引用块、有序列表、复选框、链接渲染
- 代码块边框对齐
底部状态行(StatusLine):
- 模型名、Token用量、费用、API调用次数、工作目录
- 非dumb终端自动启用
- 每次Agent循环后刷新显示
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
1 month ago |
liuzh
|
82a28b7aa7
|
feat: P0功能补全 - 5命令+2工具+权限确认+Thinking显示
新增5个命令:
- /diff: 显示Git未提交变更(支持--staged/--stat)
- /version: 显示版本和环境信息
- /skills: 列出所有可用技能
- /memory: 查看/编辑CLAUDE.md(支持add/edit/user子命令)
- /copy: 复制最近AI回复到剪贴板
新增2个工具:
- WebSearchTool: DuckDuckGo搜索(免费,无需API Key)
- AskUserQuestionTool: AI向用户提问(通过ToolContext回调)
权限确认机制:
- 非只读工具执行前提示用户确认(Y/n/always)
- 支持always一次授权全部后续操作
- 在AgentLoop.executeToolCalls中拦截
Thinking内容显示:
- AgentLoop新增onThinkingContent回调
- 从ChatResponse metadata提取thinking内容
- ThinkingRenderer渲染思考过程(缩进暗色格式)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
1 month ago |
liuzh
|
094057f0d2
|
feat: Phase5C+5D /compact AI摘要压缩 + 多行输入支持
/compact 增强:
- 用AI生成对话历史摘要替代简单清空
- 压缩后保留:原始系统提示 + AI摘要 + 最后一轮对话
- AI摘要保留关键决策、代码变更、文件路径等技术细节
- 摘要生成失败时静默降级(仅保留最近对话)
多行输入:
- 支持反斜杠(\\)续行:行末输入\\后回车继续下一行
- 续行提示符: ' ... '
- JLine SECONDARY_PROMPT_PATTERN 配置
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
1 month ago |
liuzh
|
399cea4478
|
feat: Phase5B 对话历史持久化
新增 ConversationPersistence:
- 退出REPL时自动保存对话到 ~/.claude-code-java/conversations/
- JSON格式存储:系统消息、用户消息、助手消息(含工具调用)、工具响应
- 支持保存、加载最近对话、列出所有对话
- 文件名格式: yyyyMMdd_HHmmss_摘要.json
新增 /history 命令:
- 列出最近10条保存的对话记录
- 显示时间、摘要、消息数、工作目录
ReplSession 更新:
- 自动记录对话摘要(第一次用户输入前40字)
- JLine模式和Scanner模式退出时都保存对话
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
1 month ago |
liuzh
|
fd262bf98d
|
feat: Phase5A 流式输出支持,逐token实时显示
AgentLoop 重构:
- 新增 runStreaming(input, onToken) 流式模式
- 使用 chatModel.stream(Prompt) -> Flux<ChatResponse>
- 统一 executeLoop() 核心循环支持阻塞/流式两种模式
- 流式分片工具调用按ID去重累积
- 流式失败自动降级到阻塞模式
- AssistantMessage 使用 Builder 模式构建(构造器是protected)
- 新增 onStreamStart 回调(第一个token到达时停止spinner)
- 新增 getChatModel() / replaceHistory() 方法(为后续compact准备)
ReplSession 更新:
- handleInput 使用 runStreaming 替代 run
- 逐token直接输出到终端(out.print + flush)
- spinner在第一个token到达时自动停止
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
1 month ago |
liuzh
|
2adbfa56bc
|
feat: 支持OpenAI/Anthropic双API提供者切换,Banner显示URL和模型
通过 claude-code.provider 配置切换API提供者:
- openai(默认): 使用 OpenAI 兼容 API,支持各种代理服务
- anthropic: 使用 Anthropic 原生 API
配置方式:
- 环境变量: CLAUDE_CODE_PROVIDER=openai|anthropic
- application.yml: claude-code.provider
Banner 增强:
- 启动时显示当前 Provider、Model、API URL
- Scanner降级模式也显示同样信息
启动脚本更新:
- run.ps1/run.bat 添加完整的双provider配置说明
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
1 month ago |
liuzh
|
549cc79dc6
|
fix: 修复Windows终端UTF-8编码问题,恢复emoji字符
根因: System.out使用平台默认编码(CP936/GBK),emoji无法编码显示为?。
修复方案:
1. JVM参数: -Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8 -Dfile.encoding=UTF-8
2. 代码层: PrintStream使用StandardCharsets.UTF_8
3. 启动脚本: run.bat添加chcp 65001, run.ps1设置Console编码
同时revert之前的emoji→ASCII替换,恢复原始emoji符号。
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
1 month ago |
liuzh
|
cc0d3f8b00
|
Revert "fix: 将所有emoji/Unicode特殊字符替换为ASCII安全字符"
This reverts commit 3cd67ffe451be2cc7a66b5c554966f1d5aa58c7c.
|
1 month ago |
liuzh
|
eeceaaaea9
|
fix: 将所有emoji/Unicode特殊字符替换为ASCII安全字符
Windows cmd/PowerShell默认codepage下emoji显示为?号。
全局替换: 👋->移除, 💭->[Thinking], ⚙->*, ✓->[OK], ✗->[FAIL],
◆->>, ⚠->[!], ✅->[OK], •->|/-, →->>>, ✏️->[Edit]等。
❯保留(windows-vtp终端下正常显示)。
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
1 month ago |
liuzh
|
9048cc8b74
|
fix: 改进终端兼容性 - FFM原生终端支持、dumb终端提示、双重Goodbye修复
- 添加jline-terminal-ffm依赖(JDK22+ FFM API原生终端)
- JVM参数增加--enable-native-access=ALL-UNNAMED
- dumb终端模式下显示黄色警告和建议
- 终端尺寸为0时不显示尺寸信息
- ExitCommand不再输出Goodbye(避免与ReplSession重复)
- TerminalBuilder增加streams(System.in, System.out)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
1 month ago |
liuzh
|
b29d61581a
|
feat: Phase2 JLine终端交互增强 - 行编辑、历史、Tab补全、信号处理
JLine 3 集成:
- ReplSession重写: JLine Terminal + LineReader 替代Scanner
- 支持行编辑(光标移动、删除、Home/End等)
- 持久化历史记录(~/.claude-code-java/history)
- 上下箭头浏览输入历史
- Ctrl+C取消当前输入、Ctrl+D退出
- JLine失败时自动降级到Scanner模式
Tab补全:
- ClaudeCodeCompleter: 斜杠命令补全(/后按Tab)
- 支持命令别名补全(如 /q → exit)
- 分组显示(Commands / Aliases)
新增命令:
- /model: 显示当前AI模型信息
- /compact: 压缩对话上下文
- /cost: Token用量显示(占位)
改进:
- HelpCommand清理为统一格式
- Banner增加终端信息显示和快捷键提示
- 彩色提示符使用AttributedStringBuilder
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
1 month ago |
liuzh
|
d67f41358d
|
feat: Phase1 项目骨架 - Maven项目结构、核心AgentLoop、6个工具、命令系统、控制台渲染、REPL会话
实现内容:
- pom.xml: JDK25 + Spring AI 2.0.0-M4 + JLine3 + Picocli
- core/AgentLoop: 基于ChatModel的显式工具循环(非ChatClient)
- tool/: Tool接口 + ToolRegistry + ToolCallbackAdapter(适配Spring AI)
- tool/impl/: BashTool, FileReadTool, FileWriteTool, FileEditTool, GlobTool, GrepTool
- command/: SlashCommand接口 + CommandRegistry + /help, /clear, /exit
- console/: AnsiStyle, BannerPrinter, ToolStatusRenderer, ThinkingRenderer, SpinnerAnimation, MarkdownRenderer
- context/: SystemPromptBuilder, ClaudeMdLoader(多级CLAUDE.md加载)
- repl/ReplSession: REPL主循环(Scanner降级方案)
- config/AppConfig: Spring Bean装配
- application.yml: Anthropic/OpenAI双模型配置
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
1 month ago |