diff --git a/src/index.ts b/src/index.ts index 7ec42f5..aabd442 100644 --- a/src/index.ts +++ b/src/index.ts @@ -24,8 +24,10 @@ import { import { readSettings } from "./settings.js"; import { findRegisteredSkillByName, resolveRegisteredSkills } from "./skills-registry.js"; import { + applyExtensionState, createInitialState, createRuntimeFlags, + loadStateFromBranch, saveState, trackSkill, type TrackSkillInput, @@ -95,8 +97,11 @@ export default function skillReinject(pi: ExtensionAPI): void { persistState(); } - pi.on("session_start", async () => { + pi.on("session_start", async (_event, ctx) => { detectAndCachePiAutoCompact(pi, runtime); + readSettings(ctx); + const loaded = loadStateFromBranch(ctx.sessionManager.getBranch()); + applyExtensionState(state, loaded ?? createInitialState()); }); pi.on("session_before_compact", async () => { diff --git a/src/state.ts b/src/state.ts index e38fd26..fe167ee 100644 --- a/src/state.ts +++ b/src/state.ts @@ -82,6 +82,14 @@ export function createInitialState(): ExtensionState { }; } +/** Copy persisted fields into live session state (SPEC ยง6.3). */ +export function applyExtensionState(target: ExtensionState, loaded: ExtensionState): void { + target.sessionOverride = loaded.sessionOverride; + target.skills = loaded.skills; + target.lastCompactionSource = loaded.lastCompactionSource; + target.pendingReinject = loaded.pendingReinject; +} + export function createRuntimeFlags(): RuntimeFlags { return { autoCompactDetected: false,