fix: gate skills reminders in headless sessions (#987)

This commit is contained in:
Charles Packer
2026-02-16 19:08:55 -08:00
committed by GitHub
parent 4cd1c5e22e
commit e074d0bfb7
3 changed files with 203 additions and 46 deletions

View File

@@ -8161,37 +8161,49 @@ ${SYSTEM_REMINDER_CLOSE}
pushReminder(sessionContextReminder);
// Inject available skills as system-reminder (LET-7353)
// Lazy-discover on first message, reinject after compaction
// Discover each turn so on-disk skill changes can trigger reinjection.
{
if (!discoveredSkillsRef.current) {
try {
const { discoverSkills: discover, SKILLS_DIR: defaultDir } =
await import("../agent/skills");
const { getSkillsDirectory, getNoSkills } = await import(
"../agent/context"
);
const skillsDir =
getSkillsDirectory() || join(process.cwd(), defaultDir);
const { skills } = await discover(skillsDir, agentId, {
skipBundled: getNoSkills(),
});
discoveredSkillsRef.current = skills;
} catch {
discoveredSkillsRef.current = [];
}
const {
discoverSkills: discover,
SKILLS_DIR: defaultDir,
formatSkillsAsSystemReminder,
} = await import("../agent/skills");
const { getSkillsDirectory, getNoSkills } = await import(
"../agent/context"
);
const previousSkillsReminder = discoveredSkillsRef.current
? formatSkillsAsSystemReminder(discoveredSkillsRef.current)
: null;
let latestSkills = discoveredSkillsRef.current ?? [];
try {
const skillsDir =
getSkillsDirectory() || join(process.cwd(), defaultDir);
const { skills } = await discover(skillsDir, agentId, {
skipBundled: getNoSkills(),
});
latestSkills = skills;
} catch {
// Keep the previous snapshot when discovery fails.
}
discoveredSkillsRef.current = latestSkills;
const latestSkillsReminder = formatSkillsAsSystemReminder(
discoveredSkillsRef.current,
);
if (
previousSkillsReminder !== null &&
previousSkillsReminder !== latestSkillsReminder
) {
contextTrackerRef.current.pendingSkillsReinject = true;
}
const needsSkillsReinject =
contextTrackerRef.current.pendingSkillsReinject;
if (!hasInjectedSkillsRef.current || needsSkillsReinject) {
const { formatSkillsAsSystemReminder } = await import(
"../agent/skills"
);
const skillsReminder = formatSkillsAsSystemReminder(
discoveredSkillsRef.current,
);
if (skillsReminder) {
pushReminder(skillsReminder);
if (latestSkillsReminder) {
pushReminder(latestSkillsReminder);
}
hasInjectedSkillsRef.current = true;
contextTrackerRef.current.pendingSkillsReinject = false;