feat(ui): active agents panel, sidebar context, and page enhancements

Add live ActiveAgentsPanel with real-time transcript feed, SidebarContext
for responsive sidebar state, agent config form with reasoning effort,
improved inbox with failed run alerts, enriched issue detail with project
picker, and various component refinements across pages.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Forgotten
2026-02-20 10:32:32 -06:00
parent b327687c92
commit adca44849a
29 changed files with 1461 additions and 146 deletions

View File

@@ -17,9 +17,10 @@ interface PriorityIconProps {
priority: string;
onChange?: (priority: string) => void;
className?: string;
showLabel?: boolean;
}
export function PriorityIcon({ priority, onChange, className }: PriorityIconProps) {
export function PriorityIcon({ priority, onChange, className, showLabel }: PriorityIconProps) {
const [open, setOpen] = useState(false);
const config = priorityConfig[priority] ?? priorityConfig.medium!;
const Icon = config.icon;
@@ -29,7 +30,7 @@ export function PriorityIcon({ priority, onChange, className }: PriorityIconProp
className={cn(
"inline-flex items-center justify-center shrink-0",
config.color,
onChange && "cursor-pointer",
onChange && !showLabel && "cursor-pointer",
className
)}
>
@@ -37,11 +38,18 @@ export function PriorityIcon({ priority, onChange, className }: PriorityIconProp
</span>
);
if (!onChange) return icon;
if (!onChange) return showLabel ? <span className="inline-flex items-center gap-1.5">{icon}<span className="text-sm">{config.label}</span></span> : icon;
const trigger = showLabel ? (
<button className="inline-flex items-center gap-1.5 cursor-pointer hover:bg-accent/50 rounded px-1 -mx-1 py-0.5 transition-colors">
{icon}
<span className="text-sm">{config.label}</span>
</button>
) : icon;
return (
<Popover open={open} onOpenChange={setOpen}>
<PopoverTrigger asChild>{icon}</PopoverTrigger>
<PopoverTrigger asChild>{trigger}</PopoverTrigger>
<PopoverContent className="w-36 p-1" align="start">
{allPriorities.map((p) => {
const c = priorityConfig[p]!;