From 4ca8b8a7414fabc332b25ccc8b72f0445a8b1ab2 Mon Sep 17 00:00:00 2001 From: Ariane Emory Date: Mon, 19 Jan 2026 14:24:44 -0500 Subject: [PATCH] fix: don't update session timestamp for metadata-only changes Adds optional { touch: false } parameter to Session.update() to skip automatic timestamp updates. Applied to: - Title changes (rename) - Archived changes - Share/unshare - Auto-generated titles --- packages/opencode/src/server/routes/session.ts | 2 +- packages/opencode/src/session/index.ts | 10 ++++++---- packages/opencode/src/session/prompt.ts | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/opencode/src/server/routes/session.ts b/packages/opencode/src/server/routes/session.ts index a98624dfae2..a0dc9fb84ba 100644 --- a/packages/opencode/src/server/routes/session.ts +++ b/packages/opencode/src/server/routes/session.ts @@ -281,7 +281,7 @@ export const SessionRoutes = lazy(() => session.title = updates.title } if (updates.time?.archived !== undefined) session.time.archived = updates.time.archived - }) + }, { touch: false }) return c.json(updatedSession) }, diff --git a/packages/opencode/src/session/index.ts b/packages/opencode/src/session/index.ts index 3fcdab5238c..659127470c9 100644 --- a/packages/opencode/src/session/index.ts +++ b/packages/opencode/src/session/index.ts @@ -259,7 +259,7 @@ export namespace Session { draft.share = { url: share.url, } - }) + }, { touch: false }) return share }) @@ -269,14 +269,16 @@ export namespace Session { await ShareNext.remove(id) await update(id, (draft) => { draft.share = undefined - }) + }, { touch: false }) }) - export async function update(id: string, editor: (session: Info) => void) { + export async function update(id: string, editor: (session: Info) => void, options?: { touch?: boolean }) { const project = Instance.project const result = await Storage.update(["session", project.id, id], (draft) => { editor(draft) - draft.time.updated = Date.now() + if (options?.touch !== false) { + draft.time.updated = Date.now() + } }) Bus.publish(Event.Updated, { info: result, diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index f4793d1a798..41d720491ad 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -1800,6 +1800,6 @@ NOTE: At any point in time through this workflow you should feel free to ask the const title = cleaned.length > 100 ? cleaned.substring(0, 97) + "..." : cleaned draft.title = title - }) + }, { touch: false }) } }