From ae58906028f1f9e057276a6633464cc77d78f1d0 Mon Sep 17 00:00:00 2001 From: Continue Agent Date: Mon, 22 Sep 2025 23:05:19 +0000 Subject: [PATCH 1/2] fix: Enable prompt-based slash commands in Edit mode while filtering out built-in legacy commands - Add source property to ComboBoxItem interface to track command origin - Update selector to include source in slash command data - Implement whitelist-based filtering for Edit mode: - Allow: yaml-prompt-block, mcp-prompt, prompt-file-v1/v2, invokable-rule - Filter out: built-in-legacy commands like /commit, /share, etc. - Replace complete removal of slash commands with selective filtering Generated with [Continue](https://continue.dev) Co-Authored-By: Continue --- gui/src/components/mainInput/ContinueInputBox.tsx | 15 ++++++++++++++- gui/src/components/mainInput/types.d.ts | 1 + gui/src/redux/selectors/index.ts | 1 + 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/gui/src/components/mainInput/ContinueInputBox.tsx b/gui/src/components/mainInput/ContinueInputBox.tsx index 3b2ed52ea17..15575b8a377 100644 --- a/gui/src/components/mainInput/ContinueInputBox.tsx +++ b/gui/src/components/mainInput/ContinueInputBox.tsx @@ -38,6 +38,14 @@ const EDIT_DISALLOWED_CONTEXT_PROVIDERS = [ "repo-map", ]; +const EDIT_ALLOWED_SLASH_COMMAND_SOURCES = [ + "yaml-prompt-block", + "mcp-prompt", + "prompt-file-v1", + "prompt-file-v2", + "invokable-rule", +]; + function ContinueInputBox(props: ContinueInputBoxProps) { const isStreaming = useAppSelector((state) => state.session.isStreaming); const availableSlashCommands = useAppSelector( @@ -50,7 +58,12 @@ function ContinueInputBox(props: ContinueInputBoxProps) { const editModeState = useAppSelector((state) => state.editModeState); const filteredSlashCommands = useMemo(() => { - return isInEdit ? [] : availableSlashCommands; + if (isInEdit) { + return availableSlashCommands.filter((cmd) => + cmd.source ? EDIT_ALLOWED_SLASH_COMMAND_SOURCES.includes(cmd.source) : false + ); + } + return availableSlashCommands; }, [isInEdit, availableSlashCommands]); const filteredContextProviders = useMemo(() => { diff --git a/gui/src/components/mainInput/types.d.ts b/gui/src/components/mainInput/types.d.ts index 70f5a5c61ce..52ccc5838a2 100644 --- a/gui/src/components/mainInput/types.d.ts +++ b/gui/src/components/mainInput/types.d.ts @@ -26,4 +26,5 @@ export interface ComboBoxItem { icon?: string; action?: () => void; subActions?: ComboBoxSubAction[]; + source?: string; } diff --git a/gui/src/redux/selectors/index.ts b/gui/src/redux/selectors/index.ts index 8247e56e028..99f6f659fbb 100644 --- a/gui/src/redux/selectors/index.ts +++ b/gui/src/redux/selectors/index.ts @@ -22,6 +22,7 @@ export const selectSlashCommandComboBoxInputs = createSelector( description: cmd.description, type: "slashCommand" as ComboBoxItemType, content: content, + source: cmd.source, } as ComboBoxItem; }) || [] ); From 5ea04d7f84d693c84a7bd1fc377f63c226680e20 Mon Sep 17 00:00:00 2001 From: Dallin Romney Date: Thu, 25 Sep 2025 16:05:00 -0700 Subject: [PATCH 2/2] fix: edit slash command sources --- gui/src/components/mainInput/ContinueInputBox.tsx | 14 +++++++++++--- gui/src/components/mainInput/types.d.ts | 4 ++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/gui/src/components/mainInput/ContinueInputBox.tsx b/gui/src/components/mainInput/ContinueInputBox.tsx index 15575b8a377..da04a273b59 100644 --- a/gui/src/components/mainInput/ContinueInputBox.tsx +++ b/gui/src/components/mainInput/ContinueInputBox.tsx @@ -1,5 +1,10 @@ import { Editor, JSONContent } from "@tiptap/react"; -import { ContextItemWithId, InputModifiers, RuleWithSource } from "core"; +import { + ContextItemWithId, + InputModifiers, + RuleWithSource, + SlashCommandSource, +} from "core"; import { memo, useMemo } from "react"; import { defaultBorderRadius, vscBackground } from ".."; import { useAppSelector } from "../../redux/hooks"; @@ -38,12 +43,13 @@ const EDIT_DISALLOWED_CONTEXT_PROVIDERS = [ "repo-map", ]; -const EDIT_ALLOWED_SLASH_COMMAND_SOURCES = [ +const EDIT_ALLOWED_SLASH_COMMAND_SOURCES: SlashCommandSource[] = [ "yaml-prompt-block", "mcp-prompt", "prompt-file-v1", "prompt-file-v2", "invokable-rule", + "json-custom-command", ]; function ContinueInputBox(props: ContinueInputBoxProps) { @@ -60,7 +66,9 @@ function ContinueInputBox(props: ContinueInputBoxProps) { const filteredSlashCommands = useMemo(() => { if (isInEdit) { return availableSlashCommands.filter((cmd) => - cmd.source ? EDIT_ALLOWED_SLASH_COMMAND_SOURCES.includes(cmd.source) : false + cmd.slashCommandSource + ? EDIT_ALLOWED_SLASH_COMMAND_SOURCES.includes(cmd.slashCommandSource) + : false, ); } return availableSlashCommands; diff --git a/gui/src/components/mainInput/types.d.ts b/gui/src/components/mainInput/types.d.ts index 52ccc5838a2..fa23807bfe7 100644 --- a/gui/src/components/mainInput/types.d.ts +++ b/gui/src/components/mainInput/types.d.ts @@ -1,4 +1,4 @@ -import { ContextProviderDescription } from "core"; +import { ContextProviderDescription, SlashCommandSource } from "core"; export type ComboBoxItemType = | "contextProvider" @@ -26,5 +26,5 @@ export interface ComboBoxItem { icon?: string; action?: () => void; subActions?: ComboBoxSubAction[]; - source?: string; + slashCommandSource?: SlashCommandSource; }