fix(slash-command): skip already tagged command output

This commit is contained in:
YeonGyu-Kim
2026-05-17 16:17:42 +09:00
parent 55312cc4b6
commit 8bc4977563
2 changed files with 30 additions and 0 deletions
+14
View File
@@ -56,6 +56,16 @@ function getCommandExecutionEventID(input: CommandExecuteBeforeInput): string |
return null
}
function partsContainAutoSlashCommandTags(parts: Array<{ text?: string }>): boolean {
return parts.some((part) =>
typeof part.text === "string"
&& (
part.text.includes(AUTO_SLASH_COMMAND_TAG_OPEN)
|| part.text.includes(AUTO_SLASH_COMMAND_TAG_CLOSE)
)
)
}
export interface AutoSlashCommandHookOptions {
skills?: LoadedSkill[]
pluginsEnabled?: boolean
@@ -153,6 +163,10 @@ export function createAutoSlashCommandHook(options?: AutoSlashCommandHookOptions
input: CommandExecuteBeforeInput,
output: CommandExecuteBeforeOutput
): Promise<void> => {
if (partsContainAutoSlashCommandTags(output.parts)) {
return
}
const eventID = getCommandExecutionEventID(input)
const commandKey = eventID
? `${input.sessionID}:event:${eventID}`
@@ -355,6 +355,22 @@ describe("createAutoSlashCommandHook", () => {
expect(output.parts[0].text).toContain("/ralph-loop Command")
})
it("should not duplicate injection when command output is already tagged", async () => {
//#given
const hook = createAutoSlashCommandHook()
const input = createCommandInput("ralph-loop")
const taggedContent = "<auto-slash-command>\n/ralph-loop Command\n</auto-slash-command>"
const output = createCommandOutput(taggedContent)
//#when
await hook["command.execute.before"](input, output)
//#then
expect(output.parts).toHaveLength(1)
expect(output.parts[0]?.text).toBe(taggedContent)
expect(output.parts[0]?.text?.split("<auto-slash-command>").length).toBe(2)
})
it("should inject template for known builtin commands like ulw-loop", async () => {
//#given
const hook = createAutoSlashCommandHook()