mirror of
https://github.com/codeaashu/claude-code.git
synced 2026-04-09 06:38:46 +03:00
claude-code
This commit is contained in:
94
src/commands/commit.ts
Normal file
94
src/commands/commit.ts
Normal file
@@ -0,0 +1,94 @@
|
||||
import type { Command } from '../commands.js'
|
||||
import { getAttributionTexts } from '../utils/attribution.js'
|
||||
import { executeShellCommandsInPrompt } from '../utils/promptShellExecution.js'
|
||||
import { getUndercoverInstructions, isUndercover } from '../utils/undercover.js'
|
||||
|
||||
const ALLOWED_TOOLS = [
|
||||
'Bash(git add:*)',
|
||||
'Bash(git status:*)',
|
||||
'Bash(git commit:*)',
|
||||
]
|
||||
|
||||
function getPromptContent(): string {
|
||||
const { commit: commitAttribution } = getAttributionTexts()
|
||||
|
||||
let prefix = ''
|
||||
if (process.env.USER_TYPE === 'ant' && isUndercover()) {
|
||||
prefix = getUndercoverInstructions() + '\n'
|
||||
}
|
||||
|
||||
return `${prefix}## Context
|
||||
|
||||
- Current git status: !\`git status\`
|
||||
- Current git diff (staged and unstaged changes): !\`git diff HEAD\`
|
||||
- Current branch: !\`git branch --show-current\`
|
||||
- Recent commits: !\`git log --oneline -10\`
|
||||
|
||||
## Git Safety Protocol
|
||||
|
||||
- NEVER update the git config
|
||||
- NEVER skip hooks (--no-verify, --no-gpg-sign, etc) unless the user explicitly requests it
|
||||
- CRITICAL: ALWAYS create NEW commits. NEVER use git commit --amend, unless the user explicitly requests it
|
||||
- Do not commit files that likely contain secrets (.env, credentials.json, etc). Warn the user if they specifically request to commit those files
|
||||
- If there are no changes to commit (i.e., no untracked files and no modifications), do not create an empty commit
|
||||
- Never use git commands with the -i flag (like git rebase -i or git add -i) since they require interactive input which is not supported
|
||||
|
||||
## Your task
|
||||
|
||||
Based on the above changes, create a single git commit:
|
||||
|
||||
1. Analyze all staged changes and draft a commit message:
|
||||
- Look at the recent commits above to follow this repository's commit message style
|
||||
- Summarize the nature of the changes (new feature, enhancement, bug fix, refactoring, test, docs, etc.)
|
||||
- Ensure the message accurately reflects the changes and their purpose (i.e. "add" means a wholly new feature, "update" means an enhancement to an existing feature, "fix" means a bug fix, etc.)
|
||||
- Draft a concise (1-2 sentences) commit message that focuses on the "why" rather than the "what"
|
||||
|
||||
2. Stage relevant files and create the commit using HEREDOC syntax:
|
||||
\`\`\`
|
||||
git commit -m "$(cat <<'EOF'
|
||||
Commit message here.${commitAttribution ? `\n\n${commitAttribution}` : ''}
|
||||
EOF
|
||||
)"
|
||||
\`\`\`
|
||||
|
||||
You have the capability to call multiple tools in a single response. Stage and create the commit using a single message. Do not use any other tools or do anything else. Do not send any other text or messages besides these tool calls.`
|
||||
}
|
||||
|
||||
const command = {
|
||||
type: 'prompt',
|
||||
name: 'commit',
|
||||
description: 'Create a git commit',
|
||||
allowedTools: ALLOWED_TOOLS,
|
||||
contentLength: 0, // Dynamic content
|
||||
progressMessage: 'creating commit',
|
||||
source: 'builtin',
|
||||
async getPromptForCommand(_args, context) {
|
||||
const promptContent = getPromptContent()
|
||||
const finalContent = await executeShellCommandsInPrompt(
|
||||
promptContent,
|
||||
{
|
||||
...context,
|
||||
getAppState() {
|
||||
const appState = context.getAppState()
|
||||
return {
|
||||
...appState,
|
||||
toolPermissionContext: {
|
||||
...appState.toolPermissionContext,
|
||||
alwaysAllowRules: {
|
||||
...appState.toolPermissionContext.alwaysAllowRules,
|
||||
command: ALLOWED_TOOLS,
|
||||
},
|
||||
},
|
||||
}
|
||||
},
|
||||
},
|
||||
'/commit',
|
||||
)
|
||||
|
||||
return [{ type: 'text', text: finalContent }]
|
||||
},
|
||||
} satisfies Command
|
||||
|
||||
export default command
|
||||
|
||||
|
||||
Reference in New Issue
Block a user