diff --git a/src/kept.ts b/src/kept.ts index 9461103..6855872 100644 --- a/src/kept.ts +++ b/src/kept.ts @@ -1,5 +1,6 @@ import type { SessionEntry } from "@earendil-works/pi-coding-agent"; import { parseSkillBlocksFromText } from "./detect.js"; +import type { TrackedSkill } from "./state.js"; /** Branch slice from firstKeptEntryId through tail (SPEC §6.4). */ export function getKeptEntries(branch: SessionEntry[], firstKeptEntryId: string): SessionEntry[] { @@ -54,3 +55,18 @@ export function skillsPresentInKeptWindow( } return present; } + +/** Tracked skills missing from kept window but still registered (SPEC §5.2, §6.4). */ +export function filterSkillsNeedingReinject( + tracked: readonly TrackedSkill[], + keptPresent: ReadonlySet, + registeredNames: ReadonlySet, +): string[] { + const needing: string[] = []; + for (const skill of tracked) { + if (registeredNames.has(skill.name) && !keptPresent.has(skill.name)) { + needing.push(skill.name); + } + } + return needing; +}