From 8f1132e8ec595fbc148408dcd1555c1c090067cb Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 17 Jan 2026 08:04:24 +0000 Subject: [PATCH] fix: share skills watcher ignores --- src/agents/skills/refresh.test.ts | 7 ++++--- src/agents/skills/refresh.ts | 12 +++++++----- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/agents/skills/refresh.test.ts b/src/agents/skills/refresh.test.ts index b4091ed76..51b86e7f7 100644 --- a/src/agents/skills/refresh.test.ts +++ b/src/agents/skills/refresh.test.ts @@ -12,19 +12,20 @@ vi.mock("chokidar", () => { }); describe("ensureSkillsWatcher", () => { - it("ignores node_modules and dist by default", async () => { + it("ignores node_modules, dist, and .git by default", async () => { const mod = await import("./refresh.js"); mod.ensureSkillsWatcher({ workspaceDir: "/tmp/workspace" }); expect(watchMock).toHaveBeenCalledTimes(1); const opts = watchMock.mock.calls[0]?.[1] as { ignored?: unknown }; - expect(Array.isArray(opts.ignored)).toBe(true); - const ignored = opts.ignored as RegExp[]; + expect(opts.ignored).toBe(mod.DEFAULT_SKILLS_WATCH_IGNORED); + const ignored = mod.DEFAULT_SKILLS_WATCH_IGNORED; expect(ignored.some((re) => re.test("/tmp/workspace/skills/node_modules/pkg/index.js"))).toBe( true, ); expect(ignored.some((re) => re.test("/tmp/workspace/skills/dist/index.js"))).toBe(true); expect(ignored.some((re) => re.test("/tmp/workspace/skills/.git/config"))).toBe(true); + expect(ignored.some((re) => re.test("/tmp/.hidden/skills/index.md"))).toBe(false); }); }); diff --git a/src/agents/skills/refresh.ts b/src/agents/skills/refresh.ts index 12e0b5f5f..e41d2cb90 100644 --- a/src/agents/skills/refresh.ts +++ b/src/agents/skills/refresh.ts @@ -26,6 +26,12 @@ const workspaceVersions = new Map(); const watchers = new Map(); let globalVersion = 0; +export const DEFAULT_SKILLS_WATCH_IGNORED = [ + /(^|[\\/])\.git([\\/]|$)/, + /(^|[\\/])node_modules([\\/]|$)/, + /(^|[\\/])dist([\\/]|$)/, +] as const; + function bumpVersion(current: number): number { const now = Date.now(); return now <= current ? current + 1 : now; @@ -127,11 +133,7 @@ export function ensureSkillsWatcher(params: { workspaceDir: string; config?: Cla }, // Avoid FD exhaustion on macOS when a workspace contains huge trees. // This watcher only needs to react to skill changes. - ignored: [ - /(^|[\\/])\../, // dotfiles (includes .git) - /(^|[\\/])node_modules([\\/]|$)/, - /(^|[\\/])dist([\\/]|$)/, - ], + ignored: DEFAULT_SKILLS_WATCH_IGNORED, }); const state: SkillsWatchState = { watcher, pathsKey, debounceMs };