diff --git a/packages/app/src/hooks/use-agent-autocomplete.ts b/packages/app/src/hooks/use-agent-autocomplete.ts index d0a6c0e11..6ebbd2fe1 100644 --- a/packages/app/src/hooks/use-agent-autocomplete.ts +++ b/packages/app/src/hooks/use-agent-autocomplete.ts @@ -450,9 +450,7 @@ export function useAgentAutocomplete(input: UseAgentAutocompleteInput): AgentAut command: activeSlashCommand, commandName: selected.id, }); - const shouldAppendSpace = - activeSlashCommand.position === "start" && activeSlashCommand.end === userInput.length; - setUserInput(shouldAppendSpace ? `${nextInput} ` : nextInput); + setUserInput(nextInput); onAutocompleteApplied?.(); return; } diff --git a/packages/app/src/utils/agent-command-autocomplete.test.ts b/packages/app/src/utils/agent-command-autocomplete.test.ts index 641081cfc..9d0067a02 100644 --- a/packages/app/src/utils/agent-command-autocomplete.test.ts +++ b/packages/app/src/utils/agent-command-autocomplete.test.ts @@ -95,6 +95,30 @@ describe("applySlashCommandReplacement", () => { }), ).toBe("use /taste before implementation"); }); + + it("commits an inline slash token at the prompt tail", () => { + const text = "use /tas"; + + expect( + applySlashCommandReplacement({ + text, + command: { start: 4, end: text.length, query: "tas", position: "inline" }, + commandName: "taste", + }), + ).toBe("use /taste "); + }); + + it("commits a start slash token at the prompt tail", () => { + const text = "/tas"; + + expect( + applySlashCommandReplacement({ + text, + command: { start: 0, end: text.length, query: "tas", position: "start" }, + commandName: "taste", + }), + ).toBe("/taste "); + }); }); describe("filterInlineSkillCommandEntries", () => { diff --git a/packages/app/src/utils/agent-command-autocomplete.ts b/packages/app/src/utils/agent-command-autocomplete.ts index 60edcca02..a9abb2f9c 100644 --- a/packages/app/src/utils/agent-command-autocomplete.ts +++ b/packages/app/src/utils/agent-command-autocomplete.ts @@ -115,5 +115,6 @@ export function findActiveSlashCommand( export function applySlashCommandReplacement(input: ApplySlashCommandReplacementInput): string { const before = input.text.slice(0, input.command.start); const after = input.text.slice(input.command.end); - return `${before}/${input.commandName}${after}`; + const replacement = `${before}/${input.commandName}${after}`; + return input.command.end === input.text.length ? `${replacement} ` : replacement; }