#!/usr/bin/env node const { hookEnabled, mergeSessionStartOutputs, normalizeSessionStartOutput, readStdin, runExistingHook, transformToClaude, } = require('./adapter'); readStdin().then(raw => { let input = {}; try { const parsed = JSON.parse(raw || '{}'); if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) { input = parsed; } } catch { // The Cursor env helper handles malformed input and supplies a safe default. } const transformedInput = transformToClaude(input); const claudeInput = { ...transformedInput, hook_event_name: 'SessionStart', source: 'startup', }; let outputs = []; if (!hookEnabled('session:start', ['minimal', 'standard', 'strict'])) { process.stdout.write(JSON.stringify({})); return; } const envResult = runExistingHook('cursor-session-env.js', raw, { forwardStderr: true, }); if (envResult && envResult.status === 0 && envResult.stdout) { try { outputs = [...outputs, normalizeSessionStartOutput(envResult.stdout)]; } catch { console.error('[Cursor Hook] Ignoring invalid Cursor session environment output'); } } const sessionEnv = outputs[0]?.env || {}; const sessionResult = runExistingHook('session-start.js', claudeInput, { env: { ...sessionEnv, ...(transformedInput.session_id ? { CLAUDE_SESSION_ID: transformedInput.session_id } : {}), }, forwardStderr: true, }); if (sessionResult && sessionResult.status === 0 && sessionResult.stdout) { try { outputs = [ ...outputs, normalizeSessionStartOutput(sessionResult.stdout, { shared: true }), ]; } catch { console.error('[Cursor Hook] Ignoring invalid shared SessionStart output'); } } process.stdout.write(JSON.stringify(mergeSessionStartOutputs(outputs))); }).catch(() => process.exit(0));