Skip to content

Commit 5a4c344

Browse files
committed
Implement the commitMessageAutoAcceptAfter setting to control the automatic acceptance duration for generated commit messages
1 parent de8a531 commit 5a4c344

17 files changed

Lines changed: 186 additions & 10 deletions

File tree

‎packages/shared/src/constants/dictionary.ts‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ export const dictionary = {
4040
NO_EDIT_CONTEXT_CONFIGURATIONS_FOUND:
4141
'No "Edit Context" configurations found. Please add one in the settings.',
4242
PRESET_PREVIEW_SENT_TO_BROWSER:
43-
'Preset preview sent to the connected browser'
43+
'Preset preview sent to the connected browser',
44+
COMMIT_CREATED_SUCCESSFULLY: (commit_summary: string) =>
45+
`Commit created: "${commit_summary}"`
4446
},
4547

4648
warning_message: {

‎packages/ui/src/components/editor/panel/ChatInput/ChatInput.module.scss‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@
9696
cursor: pointer;
9797
color: var(--vscode-icon-foreground);
9898
opacity: var(--dimmed-opacity);
99+
z-index: 0;
99100

100101
&::before {
101102
font-size: 13px !important;

‎packages/ui/src/components/editor/panel/modals/CommitMessageModal/CommitMessageModal.stories.tsx‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export const Default = () => {
2020
return visible ? (
2121
<CommitMessageModal
2222
commit_message="feat: Implement amazing new feature"
23+
auto_accept_after_seconds={5}
2324
on_accept={handle_accept}
2425
on_cancel={handle_cancel}
2526
/>

‎packages/ui/src/components/editor/panel/modals/CommitMessageModal/CommitMessageModal.tsx‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { use_commit_timer } from './hooks/use-commit-timer'
66

77
type Props = {
88
commit_message: string
9+
auto_accept_after_seconds: number
910
on_accept: (message: string) => void
1011
on_cancel: () => void
1112
}
@@ -21,7 +22,7 @@ export const CommitMessageModal: React.FC<Props> = (props) => {
2122

2223
const commit_timer_hook = use_commit_timer({
2324
on_accept: handle_accept,
24-
initial_countdown: 5
25+
initial_countdown: props.auto_accept_after_seconds
2526
})
2627

2728
return (

‎packages/vscode/package.json‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,12 @@
525525
"description": "The instructions used when generating a commit message.",
526526
"default": "Write a brief and precise summary for the changes, limited to a single sentence if possible and nothing else. Use an imperative tone to ensure clarity and focus on the primary change or purpose."
527527
},
528+
"codeWebChat.commitMessageAutoAcceptAfter": {
529+
"type": "number",
530+
"scope": "resource",
531+
"default": 5,
532+
"description": "Automatically accept commit message after a specified number of seconds."
533+
},
528534
"codeWebChat.contextSizeWarningThreshold": {
529535
"type": "number",
530536
"default": 60000,

‎packages/vscode/src/views/panel/backend/message-handlers/handle-commit-changes/handle-commit-changes.ts‎

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
} from './utils'
1010
import * as path from 'path'
1111
import { execSync } from 'child_process'
12+
import { handle_accept_commit_message } from '../handle-accept-commit-message'
1213

1314
async function proceed_with_commit_generation(
1415
panel_provider: PanelProvider,
@@ -55,10 +56,30 @@ async function proceed_with_commit_generation(
5556
return
5657
}
5758

58-
panel_provider.send_message({
59-
command: 'SHOW_COMMIT_MESSAGE_MODAL',
60-
commit_message
61-
})
59+
const auto_accept_after = vscode.workspace
60+
.getConfiguration('codeWebChat')
61+
.get<number>('commitMessageAutoAcceptAfter')
62+
63+
if (auto_accept_after && auto_accept_after > 0) {
64+
panel_provider.send_message({
65+
command: 'SHOW_COMMIT_MESSAGE_MODAL',
66+
commit_message,
67+
auto_accept_after_seconds: auto_accept_after
68+
})
69+
} else {
70+
await handle_accept_commit_message(panel_provider, commit_message)
71+
panel_provider.send_message({ command: 'COMMIT_PROCESS_CANCELLED' })
72+
panel_provider.commit_was_staged_by_script = false
73+
const commit_message_lines = commit_message.split('\n')
74+
const shortened_commit_message = commit_message_lines.length
75+
? `${commit_message_lines[0]}...`
76+
: commit_message_lines[0]
77+
vscode.window.showInformationMessage(
78+
dictionary.information_message.COMMIT_CREATED_SUCCESSFULLY(
79+
shortened_commit_message
80+
)
81+
)
82+
}
6283
} catch (error) {
6384
if (panel_provider.commit_was_staged_by_script) {
6485
await vscode.commands.executeCommand('git.unstageAll')

‎packages/vscode/src/views/panel/frontend/Panel.tsx‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -449,7 +449,10 @@ export const Panel = () => {
449449
{commit_message_to_review && (
450450
<div className={styles.slot}>
451451
<UiCommitMessageModal
452-
commit_message={commit_message_to_review}
452+
commit_message={commit_message_to_review.commit_message}
453+
auto_accept_after_seconds={
454+
commit_message_to_review.auto_accept_after_seconds
455+
}
453456
on_accept={(message) => {
454457
post_message(vscode, {
455458
command: 'ACCEPT_COMMIT_MESSAGE',

‎packages/vscode/src/views/panel/frontend/hooks/use-panel.ts‎

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,11 @@ export const use_panel = (vscode: any) => {
3737
string | undefined
3838
>()
3939
const [commit_message_to_review, set_commit_message_to_review] = useState<
40-
string | undefined
40+
| {
41+
commit_message: string
42+
auto_accept_after_seconds: number
43+
}
44+
| undefined
4145
>()
4246
const [files_to_stage, set_files_to_stage] = useState<string[]>()
4347
const [
@@ -231,7 +235,10 @@ export const use_panel = (vscode: any) => {
231235
} else if (message.command == 'FOCUS_CHAT_INPUT') {
232236
set_chat_input_focus_key((k) => k + 1)
233237
} else if (message.command == 'SHOW_COMMIT_MESSAGE_MODAL') {
234-
set_commit_message_to_review(message.commit_message)
238+
set_commit_message_to_review({
239+
commit_message: message.commit_message,
240+
auto_accept_after_seconds: message.auto_accept_after_seconds
241+
})
235242
} else if (message.command == 'SHOW_STAGE_FILES_MODAL') {
236243
set_files_to_stage(message.files)
237244
} else if (message.command == 'COMMIT_PROCESS_CANCELLED') {

‎packages/vscode/src/views/panel/types/messages.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -584,6 +584,7 @@ export interface ShowStageFilesModalMessage extends BaseMessage {
584584
export interface ShowCommitMessageModalMessage extends BaseMessage {
585585
command: 'SHOW_COMMIT_MESSAGE_MODAL'
586586
commit_message: string
587+
auto_accept_after_seconds: number
587588
}
588589

589590
export interface CommitProcessCancelledMessage extends BaseMessage {
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import * as vscode from 'vscode'
2+
import { SettingsProvider } from '@/views/settings/backend/settings-provider'
3+
4+
export const handle_get_commit_message_auto_accept_after = async (
5+
provider: SettingsProvider
6+
): Promise<void> => {
7+
const config = vscode.workspace.getConfiguration('codeWebChat')
8+
const seconds = config.get<number | null>('commitMessageAutoAcceptAfter')
9+
provider.postMessage({
10+
command: 'COMMIT_MESSAGE_AUTO_ACCEPT_AFTER',
11+
seconds: seconds ?? null
12+
})
13+
}

0 commit comments

Comments
 (0)