From b33abaa8b56445991b797edbd229b3e63c3dac14 Mon Sep 17 00:00:00 2001 From: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com> Date: Thu, 17 Oct 2024 05:31:48 -0400 Subject: [PATCH] Detect code omission and show warning with troubleshooting link --- src/core/Cline.ts | 3 ++ src/core/prompts/system.ts | 2 +- src/integrations/editor/detect-omission.ts | 52 ++++++++++++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 src/integrations/editor/detect-omission.ts diff --git a/src/core/Cline.ts b/src/core/Cline.ts index d21a8fc..03b2fcc 100644 --- a/src/core/Cline.ts +++ b/src/core/Cline.ts @@ -41,6 +41,7 @@ import { formatResponse } from "./prompts/responses" import { addCustomInstructions, SYSTEM_PROMPT } from "./prompts/system" import { truncateHalfConversation } from "./sliding-window" import { ClineProvider, GlobalFileNames } from "./webview/ClineProvider" +import { showOmissionWarning } from "../integrations/editor/detect-omission" const cwd = vscode.workspace.workspaceFolders?.map((folder) => folder.uri.fsPath).at(0) ?? path.join(os.homedir(), "Desktop") // may or may not exist but fs checking existence would immediately ask for permission which would be bad UX, need to come up with a better solution @@ -1075,6 +1076,8 @@ export class Cline { await delay(300) // wait for diff view to update this.diffViewProvider.scrollToFirstDiff() + showOmissionWarning(newContent) + const completeMessage = JSON.stringify({ ...sharedMessageProps, content: fileExists ? undefined : newContent, diff --git a/src/core/prompts/system.ts b/src/core/prompts/system.ts index e5cf974..b9e4d8a 100644 --- a/src/core/prompts/system.ts +++ b/src/core/prompts/system.ts @@ -55,7 +55,7 @@ Usage: Description: Request to write content to a file at the specified path. If the file exists, it will be overwritten with the provided content. If the file doesn't exist, it will be created. This tool will automatically create any directories needed to write the file. Parameters: - path: (required) The path of the file to write to (relative to the current working directory ${cwd.toPosix()}) -- content: (required) The content to write to the file. ALWAYS provide the COMPLETE intended content of the file, without any truncation or omissions. You MUST include ALL parts of the file, even if they haven't been modified. IT IS STRICTLY FORBIDDEN TO OMIT CODE WITH \`// implementation remains unchanged\` OR ANY OTHER SUCH PLACEHOLDER. +- content: (required) The content to write to the file. ALWAYS provide the COMPLETE intended content of the file, without any truncation or omissions. You MUST include ALL parts of the file, even if they haven't been modified. Usage: File path here diff --git a/src/integrations/editor/detect-omission.ts b/src/integrations/editor/detect-omission.ts new file mode 100644 index 0000000..a66d08d --- /dev/null +++ b/src/integrations/editor/detect-omission.ts @@ -0,0 +1,52 @@ +import * as vscode from "vscode" + +/** + * Detects potential AI-generated code omissions in the given file content. + * @param fileContent The content of the file to check. + * @returns True if a potential omission is detected, false otherwise. + */ +function detectCodeOmission(fileContent: string): boolean { + const lines = fileContent.split("\n") + const omissionKeywords = ["remain", "remains", "unchanged", "rest", "existing", "previous", "..."] + + const commentPatterns = [ + /^\s*\/\//, // Single-line comment for most languages + /^\s*#/, // Single-line comment for Python, Ruby, etc. + /^\s*{\s*\/\*/, // JSX comment opening + /^\s*