diff --git a/src/tools/sessions.ts b/src/tools/sessions.ts index 7b4cc14..06bfb7b 100644 --- a/src/tools/sessions.ts +++ b/src/tools/sessions.ts @@ -407,6 +407,24 @@ export async function sessionCommitLink( commit_message: string | null, committed_at: string | null ): Promise { + // Check if session exists + const sessionExists = await queryOne<{ exists: boolean }>( + 'SELECT EXISTS(SELECT 1 FROM sessions WHERE id = $1) as exists', + [session_id] + ); + + // Auto-create session if missing (prevents FK constraint error) + if (!sessionExists?.exists) { + const timestamp = committed_at || new Date().toISOString(); + await execute( + `INSERT INTO sessions (id, started_at, status) + VALUES ($1, $2, 'active') + ON CONFLICT (id) DO NOTHING`, + [session_id, timestamp] + ); + } + + // Now safely insert commit link await execute( `INSERT INTO session_commits (session_id, commit_sha, repo, commit_message, committed_at) VALUES ($1, $2, $3, $4, $5) @@ -414,5 +432,6 @@ export async function sessionCommitLink( [session_id, commit_sha, repo, commit_message, committed_at] ); - return `Linked commit ${commit_sha.substring(0, 7)} to session ${session_id}`; + const prefix = sessionExists?.exists ? '' : '[auto-created session] '; + return `${prefix}Linked commit ${commit_sha.substring(0, 7)} to session ${session_id}`; }