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 { canonicalizeFileText, restoreFileText } from "./file-text-canonicalization"
|
||||||
import { normalizeHashlineEdits, type RawHashlineEdit } from "./normalize-edits"
|
import { normalizeHashlineEdits, type RawHashlineEdit } from "./normalize-edits"
|
||||||
import type { HashlineEdit } from "./types"
|
import type { HashlineEdit } from "./types"
|
||||||
|
import { HashlineMismatchError } from "./validation"
|
||||||
|
|
||||||
interface HashlineEditArgs {
|
interface HashlineEditArgs {
|
||||||
filePath: string
|
filePath: string
|
||||||
@ -158,7 +159,7 @@ export async function executeHashlineEditTool(args: HashlineEditArgs, context: T
|
|||||||
return `Updated ${effectivePath}`
|
return `Updated ${effectivePath}`
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
const message = error instanceof Error ? error.message : String(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: hash mismatch - ${message}\nTip: reuse LINE#ID entries from the latest read/edit output, or batch related edits in one call.`
|
||||||
}
|
}
|
||||||
return `Error: ${message}`
|
return `Error: ${message}`
|
||||||
|
|||||||
@ -103,6 +103,25 @@ describe("createHashlineEditTool", () => {
|
|||||||
expect(result).toContain(">>>")
|
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 () => {
|
it("preserves literal backslash-n and supports string[] payload", async () => {
|
||||||
//#given
|
//#given
|
||||||
const filePath = path.join(tempDir, "test.txt")
|
const filePath = path.join(tempDir, "test.txt")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user