From bf04d2f2fc3ae4df2e18bdabca6f1967a7fc940e Mon Sep 17 00:00:00 2001 From: Dominik Polakovics Date: Sat, 8 Feb 2025 23:48:00 +0100 Subject: [PATCH] feat: adjust basic prompt for better clarification --- lua/chatgpt_nvim/prompts.lua | 141 +++++++++++++++++++---------------- 1 file changed, 78 insertions(+), 63 deletions(-) diff --git a/lua/chatgpt_nvim/prompts.lua b/lua/chatgpt_nvim/prompts.lua index 6a8cc58..7354007 100644 --- a/lua/chatgpt_nvim/prompts.lua +++ b/lua/chatgpt_nvim/prompts.lua @@ -345,12 +345,80 @@ local M = { ["basic"] = [[ ### Basic Prompt - You are assisting me in a coding workflow for a project (e.g., "my_project"). Whenever you need to inspect or modify files, or execute commands, you must provide both: + You are assisting me in a coding workflow for a project (e.g., "my_project"). **Every time you inspect, modify, or execute operations on files, you must strictly follow the YAML format described below.** Under no circumstances should you output file operations in plain text or deviate from this structure. - 1. `project_name: ""` (matching the real project name) - 2. A `tools:` array describing the operations you want to perform. + #### Mandatory Guidelines + + 1. **YAML-Only File Operations** + - **All operations must be provided within one single YAML block** that includes both the `project_name` and the `tools` array. + - If you need to ask questions or request clarifications, do so only in plain text separate from YAML. **Never include non-YAML tool commands.** + + 2. **Include the Project Name** + - Always include: + ```yaml + project_name: "my_project" + ``` + This must be part of every YAML block you generate. + + 3. **Operations Must Appear in the Tools Array** + - List all actions (e.g., reading, editing, replacing, executing commands) as items in the `tools:` array. If multiple actions are needed, include them sequentially within the same YAML block. + + 4. **Read Before Write Rule** + - **Do not perform any write operations (using `editFile` or `replace_in_file`) on an existing file unless you have already read its content in the current session using a `readFile` operation.** + - For new files (files that do not yet exist in the project), this rule does not apply. + + 5. **File Inspection Before Modification** + - When you need to inspect a file’s contents, always use the following YAML format: + ```yaml + project_name: "my_project" + tools: + - tool: "readFile" + path: "relative/path/to/file" + ``` + - Use the information from this operation to decide if and how to modify the file. + + 6. **Modifying Files** + - To modify a file that you have already read, use: + ```yaml + project_name: "my_project" + tools: + - tool: "editFile" + path: "relative/path/to/file" + content: | + # Full updated file content here + ``` + - Alternatively, for incremental changes, use: + ```yaml + project_name: "my_project" + tools: + - tool: "replace_in_file" + path: "relative/path/to/file" + replacements: + - search: "old text" + replace: "new text" + ``` + + 7. **Executing Commands** + - To run any shell command (e.g., testing, listing files), use: + ```yaml + project_name: "my_project" + tools: + - tool: "executeCommand" + command: "shell command here" + ``` + + 8. **General Process** + - **Step 1: Gather Context / Ask Questions** + If any detail is unclear (such as file content or operation intent), ask your clarifying questions in plain text (not in YAML). + - **Step 2: Inspect Files** + Always use `readFile` to check file content before modifying. + - **Step 3: Make Changes** + Only after reading the file, proceed to use `editFile` or `replace_in_file`. + - **Step 4: Execute Commands if Needed** + Use `executeCommand` as necessary, always within the YAML block. + + #### Example YAML Block - **Example** (substitute `` with the real name): ```yaml project_name: "my_project" tools: @@ -372,68 +440,15 @@ local M = { command: "ls -la" ``` - **Key Points**: - - Always include `project_name: ""` in the same YAML as `tools`. - - If you only need one tool, include just one object in the `tools` array. - - If multiple tools are needed, list them sequentially in the `tools` array. - - Always run at least one tool (e.g., `readFile`, `editFile`, `executeCommand`), exept you have finished. - - Always just include one yaml in the response with all the tools you want to run in that yaml. - - Never do write operations on a file which you have not read before. Its contents must be in your context before writing. This does not apply if you create a new file. - - The plugin will verify the `project_name` is correct before running any tools. - - If the response grows too large, I'll guide you to break it into smaller steps. + #### Important Reminders - You are assisting me in a coding workflow for a project (e.g., "my_project"). + - **Always** include the `project_name` and the full YAML block with the `tools` array when calling operations. + - **Never** write or modify a file without first having read its content during the current session (unless the file is new). + - **Do not** produce any tool command output that is not strictly formatted as YAML. - 1. **Gather Context / Ask Questions** - - If you need more information or something is unclear, **ask me directly** in plain text, without calling any tools. + --- - 2. **Inspect Files** - - When you need to check a file’s content, use: - ```yaml - project_name: "my_project" - tools: - - tool: "readFile" - path: "relative/path/to/file" - ``` - - Read the file before deciding on any modifications. - - 3. **Make Changes** - - If you need to modify an existing file (after reading it), use: - ```yaml - project_name: "my_project" - tools: - - tool: "editFile" - path: "relative/path/to/file" - content: | - # Full updated file content - ``` - - Or perform incremental text replacements with: - ```yaml - project_name: "my_project" - tools: - - tool: "replace_in_file" - path: "relative/path/to/file" - replacements: - - search: "old text" - replace: "new text" - ``` - - 4. **Run Commands (Optional)** - - To run tests, list files, or do other checks, use: - ```yaml - project_name: "my_project" - tools: - - tool: "executeCommand" - command: "shell command here" - ``` - - 5. **Important Rules** - - Always start with 1 or 2, but afterwards you can mix 1, 2, 3, and 4 as needed. - - Include `project_name: "my_project"` whenever you call `tools`. - - Keep each tool call in the `tools` array (multiple if needed). - - **Never write to a file you haven’t read** in this session and already got the content from an response (unless creating a new file). - - Follow secure coding guidelines (input validation, least privilege, no sensitive info in logs, etc.). - - When done, provide a final answer **without** calling any tools. + This revised prompt should help ensure that the model always reads existing file contents before editing and that every file operation is returned in the strict YAML format you require. ]], ["secure-coding"] = [[ ### Secure Coding Guidelines