summaryrefslogtreecommitdiff
path: root/packages/server/src
diff options
context:
space:
mode:
authorOlcan <[email protected]>2025-05-12 16:27:07 -0700
committerGitHub <[email protected]>2025-05-12 16:27:07 -0700
commit884d6ebfd855581347a3298fc263afeaf361164a (patch)
treef333088a8e8ee9bc4f6800dc1e8ccbe8f7ba2e80 /packages/server/src
parentdf74594b8ff9d277f0358f89f7ef7bc568a7b8ec (diff)
system prompt for working with git (#321)
Diffstat (limited to 'packages/server/src')
-rw-r--r--packages/server/src/core/prompts.ts30
1 files changed, 27 insertions, 3 deletions
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 = '[email protected]';
@@ -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)
<example>
user: 1 + 2