Something went wrong. Try again.
source dump of claude code forked from oppi.li/claude-code
Something went wrong. Try again.
3.5 kB · 92 lines
TypeScript
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293import 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