diff --git a/src/settings.ts b/src/settings.ts index a186c72..5c0c768 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -135,3 +135,37 @@ export function mergeSkillReinjectIntoSettingsFile( export function writeGlobalSettings(partial: PartialSkillReinjectSettings): void { mergeSkillReinjectIntoSettingsFile(join(getAgentDir(), "settings.json"), partial); } + +/** Resolved re-inject delivery mode after integration settings (SPEC §6.5.3). */ +export type ReinjectDeliveryMode = "defer" | "immediate"; + +/** Session override wins over global enabled default (SPEC §5.1). */ +export function effectiveEnabled( + sessionOverride: boolean | null, + settings: SkillReinjectSettings, +): boolean { + return sessionOverride ?? settings.enabled; +} + +/** Resolve delivery mode from integration setting, pi-auto-compact detect, and triggerTurn (SPEC §6.5.3). */ +export function effectiveIntegration( + settings: SkillReinjectSettings, + autoCompactDetected: boolean, + sessionIntegrationOverride?: AutoCompactIntegration | null, +): ReinjectDeliveryMode { + const integration = sessionIntegrationOverride ?? settings.autoCompactIntegration; + switch (integration) { + case "defer": + return "defer"; + case "immediate": + return "immediate"; + case "off": + return settings.triggerTurn ? "immediate" : "defer"; + case "auto": + default: + if (autoCompactDetected) { + return "defer"; + } + return settings.triggerTurn ? "immediate" : "defer"; + } +}