fix(hashline-edit): use instanceof for hash mismatch error detection
This commit is contained in:
parent
1785313f3b
commit
365d863e3a
@ -5,6 +5,7 @@ import { countLineDiffs, generateUnifiedDiff } from "./diff-utils"
|
||||
import { canonicalizeFileText, restoreFileText } from "./file-text-canonicalization"
|
||||
import { normalizeHashlineEdits, type RawHashlineEdit } from "./normalize-edits"
|
||||
import type { HashlineEdit } from "./types"
|
||||
import { HashlineMismatchError } from "./validation"
|
||||
|
||||
interface HashlineEditArgs {
|
||||
filePath: string
|
||||
@ -158,7 +159,7 @@ export async function executeHashlineEditTool(args: HashlineEditArgs, context: T
|
||||
return `Updated ${effectivePath}`
|
||||
} catch (error) {
|
||||
const message = error instanceof Error ? error.message : String(error)
|
||||
if (message.toLowerCase().includes("hash")) {
|
||||
if (error instanceof HashlineMismatchError) {
|
||||
return `Error: hash mismatch - ${message}\nTip: reuse LINE#ID entries from the latest read/edit output, or batch related edits in one call.`
|
||||
}
|
||||
return `Error: ${message}`
|
||||
|
||||
@ -103,6 +103,25 @@ describe("createHashlineEditTool", () => {
|
||||
expect(result).toContain(">>>")
|
||||
})
|
||||
|
||||
it("does not classify invalid pos format as hash mismatch", async () => {
|
||||
//#given
|
||||
const filePath = path.join(tempDir, "invalid-format.txt")
|
||||
fs.writeFileSync(filePath, "line1\nline2")
|
||||
|
||||
//#when
|
||||
const result = await tool.execute(
|
||||
{
|
||||
filePath,
|
||||
edits: [{ op: "replace", pos: "42", lines: "updated" }],
|
||||
},
|
||||
createMockContext(),
|
||||
)
|
||||
|
||||
//#then
|
||||
expect(result).toContain("Error")
|
||||
expect(result.toLowerCase()).not.toContain("hash mismatch")
|
||||
})
|
||||
|
||||
it("preserves literal backslash-n and supports string[] payload", async () => {
|
||||
//#given
|
||||
const filePath = path.join(tempDir, "test.txt")
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user