From a7f4e722168525be1aec0d73edae97350e210e6d Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 14 Jul 2026 20:09:02 +0100 Subject: [PATCH] test(shared): preserve tabbed ignore anchoring --- src/agents/sessions/package-manager.test.ts | 9 ++++++--- src/shared/ignore-rules.ts | 1 + 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/agents/sessions/package-manager.test.ts b/src/agents/sessions/package-manager.test.ts index 54f30b5b0632..c58e270935ac 100644 --- a/src/agents/sessions/package-manager.test.ts +++ b/src/agents/sessions/package-manager.test.ts @@ -122,19 +122,22 @@ describe("DefaultPackageManager", () => { it("keeps auto-discovered project skills inside their skill root", async () => { const root = await makeTempDir("openclaw-package-manager-"); const agentsSkillsRoot = join(root, ".agents", "skills"); - const insideSkill = join(agentsSkillsRoot, "inside", "SKILL.md"); + const insideSkill = join(agentsSkillsRoot, "group", "deep", "t", "SKILL.md"); const ignoredSkill = join(agentsSkillsRoot, "group", "deep", "ignored", "SKILL.md"); const escapedSkill = join(agentsSkillsRoot, "group", "deep", "!literal", "SKILL.md"); const outsideRoot = join(root, "outside"); await mkdir(join(root, ".git")); - await mkdir(join(agentsSkillsRoot, "inside"), { recursive: true }); + await mkdir(join(agentsSkillsRoot, "group", "deep", "t"), { recursive: true }); await mkdir(join(agentsSkillsRoot, "group", "deep", "ignored"), { recursive: true }); await mkdir(join(agentsSkillsRoot, "group", "deep", "!literal"), { recursive: true }); await mkdir(outsideRoot, { recursive: true }); await writeFile(insideSkill, "# Inside\n", "utf-8"); await writeFile(ignoredSkill, "# Ignored\n", "utf-8"); await writeFile(escapedSkill, "# Ignored\n", "utf-8"); - await writeFile(join(agentsSkillsRoot, "group", ".gitignore"), "ignored/ \n\\!literal/\n"); + await writeFile( + join(agentsSkillsRoot, "group", ".gitignore"), + "ignored/ \nt/\t\n\\!literal/\n", + ); await writeFile(join(outsideRoot, "SKILL.md"), "# Outside\n", "utf-8"); try { diff --git a/src/shared/ignore-rules.ts b/src/shared/ignore-rules.ts index bb826382e8e2..2105a31a638f 100644 --- a/src/shared/ignore-rules.ts +++ b/src/shared/ignore-rules.ts @@ -36,6 +36,7 @@ function prefixIgnorePattern(line: string, prefix: string): string { const pattern = negated ? line.slice(1) : line; const anchored = pattern.startsWith("/"); const normalized = anchored ? pattern.slice(1) : pattern; + // Git discards trailing spaces only; broader trimming would over-expand nested rules. const matchPattern = normalized.replace(/ +$/, ""); const depthGlob = prefix && !anchored && !matchPattern.slice(0, -1).includes("/") ? "**/" : ""; const prefixed = `${prefix}${depthGlob}${normalized}`;