/**
 * Git Checkpoint Extension
 *
 * Creates git stash checkpoints at each turn so /fork can restore code state.
 * When forking, offers to restore code to that point in history.
 */

import type { ExtensionAPI } from 'shortcutxl/app';

export default function (shortcut: ExtensionAPI) {
  const checkpoints = new Map<string, string>();
  let currentEntryId: string | undefined;

  // Track the current entry ID when user messages are saved
  shortcut.on('tool_result', async (_event, ctx) => {
    const leaf = ctx.sessionManager.getLeafEntry();
    if (leaf) currentEntryId = leaf.id;
  });

  shortcut.on('turn_start', async () => {
    // Create a git stash entry before LLM makes changes
    const { stdout } = await shortcut.exec('git', ['stash', 'create']);
    const ref = stdout.trim();
    if (ref && currentEntryId) {
      checkpoints.set(currentEntryId, ref);
    }
  });

  shortcut.on('agent_end', async () => {
    // Clear checkpoints after agent completes
    checkpoints.clear();
  });
}
