diff --git a/cogs/ai_code_agent_cog.py b/cogs/ai_code_agent_cog.py index 8e8b8f1..cace85b 100644 --- a/cogs/ai_code_agent_cog.py +++ b/cogs/ai_code_agent_cog.py @@ -976,13 +976,13 @@ class AICodeAgentCog(commands.Cog): # Content between ------- and ======= is search_content. # Content between ======= and >>>>>>> REPLACE is replace_content. operation_pattern = re.compile( - r"^\s*<<<<<<< SEARCH\s*\n" + r"^\s*\[SEARCH_BLOCK_START\]\s*\n" # Changed to match AI prompt r":start_line:(\d+)\s*\n" r"-------\s*\n" r"(.*?)" # search_content (group 2) - r"=======\s*\n" + r"\\=======\s*\n" # Changed to match AI prompt (\=======) r"(.*?)" # replace_content (group 3) - r">>>>>>> REPLACE\s*$", + r"\[REPLACE_BLOCK_END\]\s*$", # Changed to match AI prompt re.DOTALL | re.MULTILINE ) @@ -1000,14 +1000,9 @@ class AICodeAgentCog(commands.Cog): # The (.*?) captures content up to the next \n======= or \n>>>>>>> # We need to remove the structural newlines from the capture groups if they are included by DOTALL - # To get precise content: find the end of "-------\n" and start of "\n=======" - search_content_start_offset = match.group(0).find("-------\n") + len("-------\n") - search_content_end_offset = match.group(0).find("\n=======") - search_c = match.group(0)[search_content_start_offset:search_content_end_offset] - - replace_content_start_offset = match.group(0).find("=======\n") + len("=======\n") - replace_content_end_offset = match.group(0).find("\n>>>>>>> REPLACE") - replace_c = match.group(0)[replace_content_start_offset:replace_content_end_offset] + # Use regex capture groups directly for search and replace content + search_c = match.group(2) + replace_c = match.group(3) operations.append({ "start_line": start_line, @@ -1628,13 +1623,13 @@ class AICodeAgentCog(commands.Cog): try: # Pattern for a single search/replace operation block (same as apply_diff) operation_pattern = re.compile( - r"^\s*<<<<<<< SEARCH\s*\n" + r"^\s*\[SEARCH_BLOCK_START\]\s*\n" # Changed to match AI prompt r":start_line:(\d+)\s*\n" r"-------\s*\n" - r"(.*?)" # search_content - r"=======\s*\n" - r"(.*?)" # replace_content - r">>>>>>> REPLACE\s*$", + r"(.*?)" # search_content (group 2) + r"\\=======\s*\n" # Changed to match AI prompt (\=======) + r"(.*?)" # replace_content (group 3) + r"\[REPLACE_BLOCK_END\]\s*$", # Changed to match AI prompt re.DOTALL | re.MULTILINE ) @@ -1647,13 +1642,9 @@ class AICodeAgentCog(commands.Cog): return f"Dry run Error: Malformed diff_block. Unexpected content between operations near character {last_match_end}." start_line = int(match.group(1)) - search_content_start_offset = match.group(0).find("-------\n") + len("-------\n") - search_content_end_offset = match.group(0).find("\n=======") - search_c = match.group(0)[search_content_start_offset:search_content_end_offset] - - replace_content_start_offset = match.group(0).find("=======\n") + len("=======\n") - replace_content_end_offset = match.group(0).find("\n>>>>>>> REPLACE") - replace_c = match.group(0)[replace_content_start_offset:replace_content_end_offset] + # Use regex capture groups directly for search and replace content + search_c = match.group(2) + replace_c = match.group(3) operations.append({ "start_line": start_line,