From 00ffdff57841c00d359539630a0d3b3fa80c1734 Mon Sep 17 00:00:00 2001 From: GRayHook Date: Wed, 17 Jun 2026 10:12:21 +0700 Subject: [PATCH] =?UTF-8?q?Phase=202:=20add=20effective=20helpers=20?= =?UTF-8?q?=E2=80=94=20enabled=20and=20delivery=20mode=20resolution.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implements SPEC §5.1 session/global layering and §6.5.3 integration table for defer vs immediate delivery decisions. Co-authored-by: Cursor --- src/settings.ts | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) 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"; + } +}