/ src / components / ui / SessionBadge.tsx
SessionBadge.tsx
 1  // Copyright (c) 2026 VPL Solutions. All rights reserved.
 2  // Licensed under the MIT License. See LICENSE for details.
 3  //
 4  // SessionBadge — shows active aiPolaris session + Clear Session control (ADR-011)
 5  // Session data is memory-only — never written to localStorage. ADR-011.
 6  
 7  import { MessageSquare, X } from 'lucide-react';
 8  
 9  interface SessionBadgeProps {
10    sessionId: string | null;
11    onClear: () => void;
12  }
13  
14  export function SessionBadge({ sessionId, onClear }: SessionBadgeProps) {
15    if (!sessionId) return null;
16  
17    // Show only the last 8 chars of the session ID for readability
18    const shortId = sessionId.slice(-8);
19  
20    return (
21      <div className="inline-flex items-center gap-2 px-2.5 py-1 rounded-full bg-purple-50 dark:bg-purple-500/10 border border-purple-200 dark:border-purple-500/20 text-xs text-purple-700 dark:text-purple-300">
22        <MessageSquare className="w-3 h-3 shrink-0" />
23        <span className="font-medium">Session active</span>
24        <span className="font-mono text-purple-400 dark:text-purple-500 text-[10px]">
25          ···{shortId}
26        </span>
27        <span className="text-purple-300 dark:text-purple-600">·</span>
28        <span className="text-[10px] text-purple-500 dark:text-purple-400">
29          Follow-up questions use this context
30        </span>
31        <button
32          onClick={onClear}
33          title="Clear session — next query starts fresh"
34          className="ml-0.5 p-0.5 rounded-full hover:bg-purple-200 dark:hover:bg-purple-500/20 transition-colors"
35          aria-label="Clear session"
36        >
37          <X className="w-3 h-3" />
38        </button>
39      </div>
40    );
41  }