Compare commits
5 Commits
bfc1812ebf
...
v0.1.4
| Author | SHA1 | Date | |
|---|---|---|---|
| baaefa2909 | |||
| cf268ebe0f | |||
| e571293f40 | |||
| fa92d90ff4 | |||
| 33aaa020c4 |
53
CHANGELOG.md
53
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
|
- 添加 `test2.txt` 占位文件
|
||||||
- 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
|
|
||||||
@@ -135,7 +135,7 @@ impl CommitCommand {
|
|||||||
} else if self.manual || self.message.is_some() {
|
} else if self.manual || self.message.is_some() {
|
||||||
// Manual commit
|
// Manual commit
|
||||||
self.create_manual_commit(format)?
|
self.create_manual_commit(format)?
|
||||||
} else if config.commit.auto_generate && !self.yes {
|
} else if config.commit.auto_generate {
|
||||||
// AI-generated commit
|
// AI-generated commit
|
||||||
self.generate_commit(&repo, format, &messages).await?
|
self.generate_commit(&repo, format, &messages).await?
|
||||||
} else {
|
} else {
|
||||||
@@ -260,11 +260,14 @@ impl CommitCommand {
|
|||||||
|
|
||||||
println!("{}", messages.ai_analyzing());
|
println!("{}", messages.ai_analyzing());
|
||||||
|
|
||||||
let language = Language::from_str(&config.language.output_language).unwrap_or(Language::English);
|
let language_str = &config.language.output_language;
|
||||||
|
let language = Language::from_str(language_str).unwrap_or(Language::English);
|
||||||
|
|
||||||
let generated = if self.yes {
|
let generated = if self.yes {
|
||||||
|
// Non-interactive mode: generate directly
|
||||||
generator.generate_commit_from_repo(repo, format, language).await?
|
generator.generate_commit_from_repo(repo, format, language).await?
|
||||||
} else {
|
} else {
|
||||||
|
// Interactive mode: allow user to review and regenerate
|
||||||
generator.generate_commit_interactive(repo, format, language).await?
|
generator.generate_commit_interactive(repo, format, language).await?
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -125,7 +125,18 @@ impl LlmClient {
|
|||||||
) -> Result<GeneratedCommit> {
|
) -> Result<GeneratedCommit> {
|
||||||
let system_prompt = get_commit_system_prompt(format, language);
|
let system_prompt = get_commit_system_prompt(format, language);
|
||||||
|
|
||||||
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?;
|
let response = self.provider.generate_with_system(system_prompt, &prompt).await?;
|
||||||
|
|
||||||
self.parse_commit_response(&response, format)
|
self.parse_commit_response(&response, format)
|
||||||
@@ -140,7 +151,19 @@ impl LlmClient {
|
|||||||
) -> Result<String> {
|
) -> Result<String> {
|
||||||
let system_prompt = get_tag_system_prompt(language);
|
let system_prompt = get_tag_system_prompt(language);
|
||||||
let commits_text = commits.join("\n");
|
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
|
self.provider.generate_with_system(system_prompt, &prompt).await
|
||||||
}
|
}
|
||||||
@@ -160,7 +183,18 @@ impl LlmClient {
|
|||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
.join("\n");
|
.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
|
self.provider.generate_with_system(system_prompt, &prompt).await
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user