You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: add refine_message for interactive commit refinement
Users can now provide feedback to regenerate commit messages with
natural language guidance. The refine_message method accepts user
feedback and calls resolve_refinement_prompt to build a targeted LLM
request, enabling iterative message improvement before committing.
Copy file name to clipboardExpand all lines: CHANGELOG.md
+21-9Lines changed: 21 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,10 +8,17 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Commercial
8
8
9
9
All notable changes to CommitBee are documented here.
10
10
11
-
## `v0.6.0-rc.1` — Deep Understanding (release candidate)
11
+
## `v0.6.0-dev` — Deep Understanding (release candidate)
12
+
13
+
### UI/UX
14
+
15
+
-**Interactive message refinement** — Added a "Refine" option to the candidate selection and confirmation menu. Users can provide feedback to the LLM (e.g., "more detail about the API change") to regenerate the message with natural language guidance.
16
+
-**Native clipboard support** — Replaced external commands (`pbcopy`, `xclip`) with the `arboard` crate for a native, cross-platform clipboard implementation.
17
+
-**Interactive commit editing** — Added an "Edit" option to the candidate selection and confirmation menu. Users can now refine the generated message using their system editor before committing.
12
18
13
19
### Semantic Analysis
14
20
21
+
-**Full AST diffs for structs and enums** — `AstDiffer` now supports structured diffing for structs, enums, classes, interfaces, and traits. Detects added/removed fields, changed variants, and type modifications.
15
22
-**Parent scope extraction** — Methods inside `impl`, `class`, or `trait` blocks now show their parent in the prompt: `CommitValidator > pub fn validate(...)`. Walks the AST tree through intermediate nodes (declaration_list, class_body). Verified across 7 languages (Rust, Python, TypeScript, Java, Go, Ruby, C#).
16
23
-**Import change detection** — New `IMPORTS CHANGED:` prompt section shows added/removed import statements. Supports Rust `use`, JS/TS `import`, Python `from`/`import`, Node `require()`, and C/C++ `#include`. Capped at 10 entries.
17
24
-**Doc-vs-code distinction** — `SpanChangeKind` enum classifies modified symbols as WhitespaceOnly, DocsOnly, Mixed, or Semantic. Doc-only changes suggest `docs` type. Modified symbols show `[docs only]` or `[docs + code]` suffix in the prompt.
@@ -30,21 +37,26 @@ All notable changes to CommitBee are documented here.
30
37
-**Diff-based intent patterns** — Scans added lines for error handling (`Result`, `?`, `Err()`), test additions (`#[test]`, `assert!`), logging (`tracing::`, `debug!`), and dependency updates. Shown as `INTENT:` section in the prompt with confidence scores.
31
38
-**Conservative type refinement** — High-confidence performance optimization patterns can override the base type to `perf`.
32
39
33
-
### Prompt Quality
34
-
35
-
-**Token budget rebalance** — Symbol budget reduced from 30% to 20% when structural diffs are available, freeing space for the raw diff. SYSTEM_PROMPT updated to guide the LLM to prefer STRUCTURED CHANGES for signature details.
36
-
-**Unsafe constraint rule** — When `unsafe` is added to a function, a CONSTRAINTS rule instructs the LLM to mention safety justification in the commit body.
37
-
38
-
### Fixes
40
+
### Security
39
41
42
+
-**Accurate secret scan line numbers** — The secret scanner now parses `@@` hunk headers to report accurate source line numbers for potential secrets, instead of absolute diff line numbers.
40
43
-**API key validation ordering** — `set-key`, `get-key`, `init`, `config`, `completions`, and `hook` commands no longer require an API key to be present. CLI `--provider` flag now applies before keyring lookup.
41
44
-**Platform-native keyring backends** — keyring v3 now uses macOS Keychain (`apple-native`), Windows Credential Manager (`windows-native`), and Linux Secret Service (`linux-native`) instead of a mock file-based backend.
42
45
-**SecretString for API keys** — API keys stored as `secrecy::SecretString` in Config and provider structs. Memory zeroed on drop, never exposed except at HTTP header insertion.
43
46
-**Overflow checks in release builds** — `overflow-checks = true` added to release profile for ANSSI-FR compliance.
44
47
48
+
### Performance
49
+
50
+
-**Optimized symbol dependency merging** — Improved `CommitSplitter` performance for large commits by pre-indexing symbols and optimizing diff scanning.
51
+
52
+
### Prompt Quality
53
+
54
+
-**Token budget rebalance** — Symbol budget reduced from 30% to 20% when structural diffs are available, freeing space for the raw diff. SYSTEM_PROMPT updated to guide the LLM to prefer STRUCTURED CHANGES for signature details.
55
+
-**Unsafe constraint rule** — When `unsafe` is added to a function, a CONSTRAINTS rule instructs the LLM to mention safety justification in the commit body.
56
+
45
57
### Testing
46
58
47
-
-**424 tests** total (up from 367 at v0.5.0).
59
+
-**442 tests** total (up from 367 at v0.5.0).
48
60
49
61
## `v0.5.0` — Beyond the Diff
50
62
@@ -79,7 +91,7 @@ All notable changes to CommitBee are documented here.
79
91
-**Evaluation harness** — 36 fixtures covering all 11 commit types, AST features, and edge cases. Per-type accuracy reporting with `EvalSummary`.
80
92
-**15+ new unit tests** — Coverage for `detect_primary_change`, `detect_metadata_breaking`, `detect_bug_evidence` (all 7 patterns), Deleted/Renamed status, signature edge cases, connection content assertions.
@@ -457,7 +459,7 @@ Project-level `.commitbee.toml` can no longer override `openai_base_url`, `anthr
457
459
458
460
Subject character budget accounts for `!` suffix on breaking changes. EVIDENCE section omitted when all flags are default (~200 chars saved). Symbol marker legend added to SYSTEM_PROMPT (`[+] added, [-] removed, [~] modified`). Duplicate JSON schema removed from system prompt. Emoji replaced with text labels (`WARNING:` instead of `⚠`). CONNECTIONS instruction softened for small models. Python tree-sitter queries enhanced with `decorated_definition` support.
@@ -495,6 +497,30 @@ In `infer_commit_type`, when >80% of additions are in `FileCategory::Test` files
495
497
496
498
`detect_intents()` scans added diff lines for error handling patterns (9 patterns including `Result<>`, `?`, `Err()`, `.map_err()`), test patterns (6 patterns including `#[test]`, `assert!`), logging patterns (9 patterns including `tracing::`, `debug!()`, `info!()`), and dependency updates (version changes in manifests). `INTENT:` prompt section shows detected patterns with confidence scores. `refine_type_with_intents()` conservatively overrides base type only for high-confidence performance optimization. 7 tests.
497
499
500
+
#### FR-076: Interactive Commit Editing ✅
501
+
502
+
Added an "Edit" choice to the candidate selection and confirmation menu. Users can refine the generated message using their system editor (via the `EDITOR` env var) before committing, allowing for final manual tweaks without leaving the tool's flow.
503
+
504
+
#### FR-077: Optimized Symbol Dependency Merging ✅
505
+
506
+
Improved `CommitSplitter` performance for large commits by pre-indexing symbols and optimizing diff scanning. Reduces complexity from $O(F \times S \times L)$ to $O(F \times L)$, where F is files, S is symbols, and L is diff lines. Ensures commit splitting remains fast even for large refactorings.
507
+
508
+
#### FR-078: Native Clipboard Implementation ✅
509
+
510
+
Replaced external command dependencies (`pbcopy`, `xclip`) with the `arboard` crate for a native, cross-platform clipboard implementation. (Improvement over `FR-033`).
511
+
512
+
#### FR-079: Accurate Secret Scan Line Numbers ✅
513
+
514
+
The secret scanner now parses `@@` hunk headers to correctly report the source line number of detected secrets in the staged file, instead of the absolute diff line number. (Improvement over `SR-001`).
515
+
516
+
#### FR-080: Full AST Diffs for Structs and Enums ✅
517
+
518
+
Extended `AstDiffer` to support structured diffing for structs, enums, classes, and traits, detecting added/removed fields and variants. (Completion of `FR-069`).
519
+
520
+
#### FR-081: Interactive Message Refinement ✅
521
+
522
+
Added a "Refine" option to the candidate selection and confirmation menu. Users can provide feedback to the LLM (e.g., "more detail about the API change") to regenerate the message with natural language guidance.
0 commit comments