fix: guard output.output in tool after-hooks for MCP tools (#1720)

MCP tool responses can have undefined output.output, causing TypeError
crashes in tool.execute.after hooks.

Changes:
- comment-checker/hook.ts: guard output.output with ?? '' before toLowerCase()
- edit-error-recovery/hook.ts: guard output.output with ?? '' before toLowerCase()
- task-resume-info/hook.ts: extract output.output ?? '' into outputText before all string operations
- Added tests for undefined output.output in edit-error-recovery and task-resume-info
This commit is contained in:
YeonGyu-Kim
2026-02-11 15:49:56 +09:00
parent d9b5c5465b
commit f64a7112bf
5 changed files with 125 additions and 6 deletions
+1 -1
View File
@@ -44,7 +44,7 @@ export function createEditErrorRecoveryHook(_ctx: PluginInput) {
) => {
if (input.tool.toLowerCase() !== "edit") return
const outputLower = output.output.toLowerCase()
const outputLower = (output.output ?? "").toLowerCase()
const hasEditError = EDIT_ERROR_PATTERNS.some((pattern) =>
outputLower.includes(pattern.toLowerCase())
)
@@ -102,6 +102,23 @@ describe("createEditErrorRecoveryHook", () => {
})
})
describe("#given MCP tool with undefined output.output", () => {
describe("#when output.output is undefined", () => {
it("#then should not crash", async () => {
const input = createInput("Edit")
const output = {
title: "Edit",
output: undefined as unknown as string,
metadata: {},
}
await hook["tool.execute.after"](input, output)
expect(output.output).toBeUndefined()
})
})
})
describe("#given case insensitive tool name", () => {
describe("#when tool is 'edit' lowercase", () => {
it("#then should still detect and append reminder", async () => {