From e3c00dd900caf8f5b96c3606411139a2c1675803 Mon Sep 17 00:00:00 2001 From: Adi Yeroslav Date: Sun, 30 Nov 2025 20:50:36 +0200 Subject: [PATCH 1/2] fix: edit tool error after undo Prevents unnecessary write -> error "modified externaly" -> read -> write cycles when editing files after undo. - Update FileTime for reverted files in `revert()` and `unrevert()` so the edit tool sees them as freshly read rather than externally modified *Restoring the old read time would be more "semantically correct" but adds complexity without functional benefit. --- packages/opencode/src/session/revert.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/opencode/src/session/revert.ts b/packages/opencode/src/session/revert.ts index 35c7b9a607ec..db5017da98db 100644 --- a/packages/opencode/src/session/revert.ts +++ b/packages/opencode/src/session/revert.ts @@ -8,6 +8,7 @@ import { splitWhen } from "remeda" import { Storage } from "../storage/storage" import { Bus } from "../bus" import { SessionPrompt } from "./prompt" +import { FileTime } from "../file/time" export namespace SessionRevert { const log = Log.create({ service: "session.revert" }) @@ -56,6 +57,12 @@ export namespace SessionRevert { const session = await Session.get(input.sessionID) revert.snapshot = session.revert?.snapshot ?? (await Snapshot.track()) await Snapshot.revert(patches) + // Update FileTime for reverted files so the edit tool doesn't see them as externally modified + for (const patch of patches) { + for (const file of patch.files) { + FileTime.read(input.sessionID, file) + } + } if (revert.snapshot) revert.diff = await Snapshot.diff(revert.snapshot) return Session.update(input.sessionID, (draft) => { draft.revert = revert @@ -69,7 +76,14 @@ export namespace SessionRevert { SessionPrompt.assertNotBusy(input.sessionID) const session = await Session.get(input.sessionID) if (!session.revert) return session - if (session.revert.snapshot) await Snapshot.restore(session.revert.snapshot) + if (session.revert.snapshot) { + const patch = await Snapshot.patch(session.revert.snapshot) + await Snapshot.restore(session.revert.snapshot) + // Update FileTime for restored files so the edit tool doesn't see them as externally modified + for (const file of patch.files) { + FileTime.read(input.sessionID, file) + } + } const next = await Session.update(input.sessionID, (draft) => { draft.revert = undefined }) From fa6a70a43268de2d95419ebacda42c04549d1874 Mon Sep 17 00:00:00 2001 From: Github Action Date: Sun, 30 Nov 2025 19:10:31 +0000 Subject: [PATCH 2/2] Update Nix flake.lock and hashes --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index 211be53aa99b..1927ddf074bf 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1764445028, - "narHash": "sha256-ik6H/0Zl+qHYDKTXFPpzuVHSZE+uvVz2XQuQd1IVXzo=", + "lastModified": 1764474957, + "narHash": "sha256-RCNYRb7zHt+qycQwfTD/Zxnbd4Sxi2fgvkeAljtLEOs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "a09378c0108815dbf3961a0e085936f4146ec415", + "rev": "890f57fde071de281cd0e950cd80ea3e1ab55e75", "type": "github" }, "original": {