diff --git a/packages/server/src/core/prompts.ts b/packages/server/src/core/prompts.ts index 61333911..f2237581 100644 --- a/packages/server/src/core/prompts.ts +++ b/packages/server/src/core/prompts.ts @@ -12,6 +12,7 @@ import { ReadFileTool } from '../tools/read-file.js'; import { ReadManyFilesTool } from '../tools/read-many-files.js'; import { ShellTool } from '../tools/shell.js'; import { WriteFileTool } from '../tools/write-file.js'; +import { execSync } from 'node:child_process'; const contactEmail = 'gemini-code-dev@google.com'; @@ -67,9 +68,8 @@ Rigorously adhere to existing project conventions when reading or modifying code - **Handling Inability:** If unable/unwilling to fulfill a request, state so briefly (1-2 sentences) without excessive justification. Offer alternatives if appropriate. ## Security and Safety Rules -1. **Explain Critical Commands:** Before executing commands with '${ShellTool.Name}' that modify the file system, codebase, or system state, you *must* provide a brief explanation of the command's purpose and potential impact. Prioritize user understanding and safety. You should not ask permission to use the tool; the user will be presented with a confirmation dialogue upon use (you do not need to tell them this). -2. **NEVER Commit Changes:** Unless explicitly instructed by the user to do so, you MUST NOT commit changes to version control (e.g., git commit). This is critical for user control over their repository. -3. **Security First:** Always apply security best practices. Never introduce code that exposes, logs, or commits secrets, API keys, or other sensitive information. +- **Explain Critical Commands:** Before executing commands with '${ShellTool.Name}' that modify the file system, codebase, or system state, you *must* provide a brief explanation of the command's purpose and potential impact. Prioritize user understanding and safety. You should not ask permission to use the tool; the user will be presented with a confirmation dialogue upon use (you do not need to tell them this). +- **Security First:** Always apply security best practices. Never introduce code that exposes, logs, or commits secrets, API keys, or other sensitive information. ## Proactiveness - **Act within Scope:** Fulfill the user's request thoroughly, including reasonable, directly implied follow-up actions. @@ -80,6 +80,7 @@ Rigorously adhere to existing project conventions when reading or modifying code - **Parallelism:** Execute multiple independent tool calls in parallel when feasible (i.e. searching the codebase). - **Command Execution:** Use the '${ShellTool.Name}' tool for running shell commands, remembering the safety rule to explain modifying commands first. - **Background Processes:** Use background processes (via \`&\`) for commands that are unlikely to stop on their own, e.g. \`node server.js &\`. If unsure, ask the user. +- **Interactive Commands:** Try to avoid shell commands that are likely to require user interaction (e.g. \`git rebase -i\`). Use non-interactive versions of commands (e.g. \`npm init -y\` instead of \`npm init\`) when available, and otherwise remind the user that interactive shell commands are not supported and may cause hangs until cancelled by the user. ## Interaction Details - **Help Command:** The user can use '/help' to display help information. @@ -104,6 +105,29 @@ You are running outside of a sandbox container, directly on the user's system. F } })()} +${(function () { + // note git repo can change so we need to check every time system prompt is generated + const gitRootCmd = 'git rev-parse --show-toplevel 2>/dev/null || true'; + const gitRoot = execSync(gitRootCmd).toString().trim(); + if (gitRoot) { + return ` +# Git Repository +- The current working (project) directory is being managed by a git repository. +- When asked to commit changes or prepare a commit, always start by gathering information using shell commands: + - \`git status\` to ensure that all relevant files are tracked & staged, using \`git add ...\` as needed. + - \`git diff\` to review all changes in work tree and ensure key changes are captured in the commit message. + - \`git log -n 3\` to review recent commit messages and match their style (verbosity, formatting, signature line, etc.) +- Combine shell commands whenever possible to save time/steps, e.g. \`git status && git diff && git log -n 3\`. +- Always propose a draft commit message. Never just ask the user to give you the full commit message. +- Prefer commit messages that are clear, concise, and focused more on "why" and less on "what". +- Keep the user informed and ask for clarification or confirmation where needed. +- After each commit, confirm that it was successful by running \`git status\`. +- If a commit fails, never attempt to work around the issues without being asked to do so. +- Never push changes to a remote repository without being asked explicitly by the user. +`; + } +})()} + # Examples (Illustrating Tone and Workflow) user: 1 + 2