diff --git a/src/reinject.ts b/src/reinject.ts index d17eba8..33f0c15 100644 --- a/src/reinject.ts +++ b/src/reinject.ts @@ -179,11 +179,18 @@ export function buildReinjectBlocks( continue; } const registered = registeredByName.get(name); + const filePath = registered?.filePath ?? tracked.filePath; + const baseDir = registered?.baseDir ?? tracked.baseDir; if (!registered) { - notifySkippedSkill(ctx, name, "no longer registered"); - continue; - } - if (!existsSync(registered.filePath)) { + if (settings.requireRegistered) { + notifySkippedSkill(ctx, name, "no longer registered"); + continue; + } + if (!existsSync(tracked.filePath)) { + notifySkippedSkill(ctx, name, "SKILL.md not found on disk"); + continue; + } + } else if (!existsSync(filePath)) { notifySkippedSkill(ctx, name, "SKILL.md not found on disk"); continue; } @@ -192,8 +199,8 @@ export function buildReinjectBlocks( expandSkill( { name: tracked.name, - filePath: registered.filePath, - baseDir: registered.baseDir, + filePath, + baseDir, }, settings.suffix, ), diff --git a/test/reinject-deferred-consume.test.ts b/test/reinject-deferred-consume.test.ts index 4f62949..4ee0cad 100644 --- a/test/reinject-deferred-consume.test.ts +++ b/test/reinject-deferred-consume.test.ts @@ -2,7 +2,7 @@ import { existsSync, mkdtempSync, mkdirSync, rmSync, writeFileSync } from "fs"; import { tmpdir } from "os"; import { join } from "path"; import { afterEach, describe, expect, it, vi } from "vitest"; -import { filterPendingReinjectForConsume } from "../src/reinject"; +import { filterPendingReinjectForConsume, tryConsumeDeferredReinject } from "../src/reinject"; import { createDefaultSettings } from "../src/settings"; import { createInitialState, trackSkill } from "../src/state"; @@ -94,3 +94,18 @@ describe("filterPendingReinjectForConsume", () => { ); }); }); + +describe("tryConsumeDeferredReinject loose path", () => { + it("injects skill block from tracked filePath when not registered", () => { + const { filePath, baseDir } = tempSkillDir("loose"); + const state = createInitialState(); + trackSkill(state, { name: "loose", filePath, baseDir, source: "slash" }); + state.pendingReinject = ["loose"]; + + const result = tryConsumeDeferredReinject(state, createDefaultSettings(), [], undefined); + + expect(result?.message?.content).toContain('