diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a1ed2f..0c4a77c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,39 +1,22 @@ -# Changelog +## v1.0.1 更新日志 -All notable changes to this project will be documented in this file. +### ✨ 新功能 +- 新增 `test3.txt`,支持中文输出测试 +- `generator` 模块新增 `language` 参数,可指定提交信息语言 +- `commit` 与 `tag` 命令新增自动 push 功能 +- 提交、标签及变更日志命令现支持多语言输出 +- 新增 Kimi、DeepSeek、OpenRouter 三家 LLM 提供商支持 +- 首次创建仓库,完成 0.1.0 版本基础功能 -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +### 🐞 错误修复 +- 修复 `git/commit.rs` 中的提交错误信息问题 +- 修复 Git2 错误处理逻辑(仓库打开功能暂不可用) +- 统一代码风格(`rustfmt` 修正) -## [Unreleased] +### 📚 文档 +- 更新 README,补充新的安装方式与 CLI 选项说明 +- 优化 README 内容,新增 LLM 提供商介绍 -### Added - -- Initial release of QuiCommit -- AI-powered commit message generation using LLM APIs (OpenAI, Anthropic) or local Ollama -- Support for Conventional Commits and @commitlint formats -- Multiple Git profile management with SSH and GPG support -- Smart tag generation with semantic version bumping -- Automatic changelog generation -- Interactive CLI with beautiful prompts and previews -- Encrypted storage for sensitive data -- Cross-platform support (Linux, macOS, Windows) - -### Features - -- **Commit Generation**: Automatically generate conventional commit messages from git diffs -- **Profile Management**: Switch between multiple Git identities for different contexts -- **Tag Management**: Create annotated tags with AI-generated release notes -- **Changelog**: Generate and maintain changelog in Keep a Changelog format -- **Security**: Encrypt SSH passphrases and API keys -- **Interactive UI**: Beautiful CLI with prompts and previews - -## [0.1.0] - 2026-01-30 - -### Added - -- Initial project structure -- Core functionality for git operations -- LLM integration -- Configuration management -- CLI interface +### 🔧 其他变更 +- 新增个人访问令牌、使用统计与配置校验功能 +- 添加 `test2.txt` 占位文件 \ No newline at end of file diff --git a/src/commands/commit.rs b/src/commands/commit.rs index 5af7765..8c02e38 100644 --- a/src/commands/commit.rs +++ b/src/commands/commit.rs @@ -135,7 +135,7 @@ impl CommitCommand { } else if self.manual || self.message.is_some() { // Manual commit self.create_manual_commit(format)? - } else if config.commit.auto_generate && !self.yes { + } else if config.commit.auto_generate { // AI-generated commit self.generate_commit(&repo, format, &messages).await? } else { @@ -262,13 +262,12 @@ impl CommitCommand { let language_str = &config.language.output_language; let language = Language::from_str(language_str).unwrap_or(Language::English); - - // Debug: print language info - eprintln!("DEBUG: Language config: '{}', parsed as: {:?}", language_str, language); let generated = if self.yes { + // Non-interactive mode: generate directly generator.generate_commit_from_repo(repo, format, language).await? } else { + // Interactive mode: allow user to review and regenerate generator.generate_commit_interactive(repo, format, language).await? }; diff --git a/src/llm/mod.rs b/src/llm/mod.rs index 0909456..44794fd 100644 --- a/src/llm/mod.rs +++ b/src/llm/mod.rs @@ -125,11 +125,18 @@ impl LlmClient { ) -> Result { let system_prompt = get_commit_system_prompt(format, language); - // Debug: print system prompt info - eprintln!("DEBUG: System prompt language: {:?}", language); - eprintln!("DEBUG: System prompt (first 200 chars): {}...", &system_prompt.chars().take(200).collect::()); - - let prompt = format!("{}", diff); + // Add language instruction to the prompt + let language_instruction = match language { + Language::Chinese => "\n\n请用中文生成提交消息。", + Language::Japanese => "\n\n日本語でコミットメッセージを生成してください。", + Language::Korean => "\n\n한국어로 커밋 메시지를 생성하세요.", + Language::Spanish => "\n\nPor favor, genera el mensaje de commit en español.", + Language::French => "\n\nVeuillez générer le message de commit en français.", + Language::German => "\n\nBitte generieren Sie die Commit-Nachricht auf Deutsch.", + Language::English => "", + }; + + let prompt = format!("{}{}", diff, language_instruction); let response = self.provider.generate_with_system(system_prompt, &prompt).await?; self.parse_commit_response(&response, format) @@ -144,7 +151,19 @@ impl LlmClient { ) -> Result { let system_prompt = get_tag_system_prompt(language); let commits_text = commits.join("\n"); - let prompt = format!("Version: {}\n\nCommits:\n{}", version, commits_text); + + // Add language instruction to the prompt + let language_instruction = match language { + Language::Chinese => "\n\n请用中文生成标签消息。", + Language::Japanese => "\n\n日本語でタグメッセージを生成してください。", + Language::Korean => "\n\n한국어로 태그 메시지를 생성하세요.", + Language::Spanish => "\n\nPor favor, genera el mensaje de etiqueta en español.", + Language::French => "\n\nVeuillez générer le message de balise en français.", + Language::German => "\n\nBitte generieren Sie die Tag-Nachricht auf Deutsch.", + Language::English => "", + }; + + let prompt = format!("Version: {}\n\nCommits:\n{}{}", version, commits_text, language_instruction); self.provider.generate_with_system(system_prompt, &prompt).await } @@ -164,7 +183,18 @@ impl LlmClient { .collect::>() .join("\n"); - let prompt = format!("Version: {}\n\nCommits:\n{}", version, commits_text); + // Add language instruction to the prompt + let language_instruction = match language { + Language::Chinese => "\n\n请用中文生成变更日志。", + Language::Japanese => "\n\n日本語で変更ログを生成してください。", + Language::Korean => "\n\n한국어로 변경 로그를 생성하세요.", + Language::Spanish => "\n\nPor favor, genera el registro de cambios en español.", + Language::French => "\n\nVeuillez générer le journal des modifications en français.", + Language::German => "\n\nBitte generieren Sie das Changelog auf Deutsch.", + Language::English => "", + }; + + let prompt = format!("Version: {}\n\nCommits:\n{}{}", version, commits_text, language_instruction); self.provider.generate_with_system(system_prompt, &prompt).await } diff --git a/test.txt b/test.txt deleted file mode 100644 index 9daeafb..0000000 --- a/test.txt +++ /dev/null @@ -1 +0,0 @@ -test diff --git a/test2.txt b/test2.txt deleted file mode 100644 index 95f86df..0000000 --- a/test2.txt +++ /dev/null @@ -1 +0,0 @@ -test language diff --git a/test3.txt b/test3.txt deleted file mode 100644 index ad6f813..0000000 --- a/test3.txt +++ /dev/null @@ -1 +0,0 @@ -test chinese output