From b9fe4fc263340c7a614e3e36462284b865e641c7 Mon Sep 17 00:00:00 2001
From: Sandy Tao <sandytao520@icloud.com>
Date: Mon, 4 Aug 2025 10:49:15 -0700
Subject: feat(cli):  Handle Punctuation in @ Command Parsing (#5482)

---
 packages/cli/src/ui/hooks/useSlashCompletion.tsx | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

(limited to 'packages/cli/src/ui/hooks/useSlashCompletion.tsx')

diff --git a/packages/cli/src/ui/hooks/useSlashCompletion.tsx b/packages/cli/src/ui/hooks/useSlashCompletion.tsx
index f68d52d8..c6821358 100644
--- a/packages/cli/src/ui/hooks/useSlashCompletion.tsx
+++ b/packages/cli/src/ui/hooks/useSlashCompletion.tsx
@@ -16,6 +16,7 @@ import {
   Config,
   FileDiscoveryService,
   DEFAULT_FILE_FILTERING_OPTIONS,
+  SHELL_SPECIAL_CHARS,
 } from '@google/gemini-cli-core';
 import { Suggestion } from '../components/SuggestionsDisplay.js';
 import { CommandContext, SlashCommand } from '../commands/types.js';
@@ -513,11 +514,17 @@ export function useSlashCompletion(
           ];
         }
 
-        // Like glob, we always return forwardslashes, even in windows.
+        // Like glob, we always return forward slashes for path separators, even on Windows.
+        // But preserve backslash escaping for special characters.
+        const specialCharsLookahead = `(?![${SHELL_SPECIAL_CHARS.source.slice(1, -1)}])`;
+        const pathSeparatorRegex = new RegExp(
+          `\\\\${specialCharsLookahead}`,
+          'g',
+        );
         fetchedSuggestions = fetchedSuggestions.map((suggestion) => ({
           ...suggestion,
-          label: suggestion.label.replace(/\\/g, '/'),
-          value: suggestion.value.replace(/\\/g, '/'),
+          label: suggestion.label.replace(pathSeparatorRegex, '/'),
+          value: suggestion.value.replace(pathSeparatorRegex, '/'),
         }));
 
         // Sort by depth, then directories first, then alphabetically
-- 
cgit v1.2.3

