Commit d08c849e1b65

Vincent Demeester <vincent@sbr.pm>
2026-03-17 19:43:48
fix(worktree-context): reset cache on session/directory changes
Extracted refreshCache helper that clears cached worktree info when cwd is not under ~/.local/share/worktrees/. Added handlers for session_switch and session_directory events to ensure stale context is never injected after navigating away from a worktree.
1 parent 5e18c48
Changed files (1)
dots
pi
agent
dots/pi/agent/extensions/worktree-context.ts
@@ -94,12 +94,16 @@ export default function (pi: ExtensionAPI) {
   let cachedInfo: WorktreeInfo | null = null;
   let cachedNote: string | null = null;
 
-  pi.on("session_start", async (_event, ctx) => {
-    cachedInfo = detectWorktree(ctx.cwd);
-    if (cachedInfo) {
-      cachedNote = loadSplittedNote(cachedInfo) ?? loadNoteFromJson(cachedInfo.relativePath);
-    }
-  });
+  const refreshCache = (cwd: string) => {
+    cachedInfo = detectWorktree(cwd);
+    cachedNote = cachedInfo
+      ? loadSplittedNote(cachedInfo) ?? loadNoteFromJson(cachedInfo.relativePath)
+      : null;
+  };
+
+  pi.on("session_start", async (_event, ctx) => refreshCache(ctx.cwd));
+  pi.on("session_switch", async (_event, ctx) => refreshCache(ctx.cwd));
+  pi.on("session_directory", async (event) => refreshCache(event.cwd));
 
   pi.on("before_agent_start", async (event, _ctx) => {
     if (!cachedInfo || !cachedNote) return;