Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ frontend/public/pdf.worker.min.mjs
*.sw?

target
ratarget

# Gemini CLI Desktop test artifacts
.gemini-cli-desktop/
Expand Down
10 changes: 3 additions & 7 deletions frontend/src/components/layout/AppHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ export const AppHeader: React.FC<AppHeaderProps> = ({
return (
<div className="border-b border-gray-200 dark:border-neutral-700 bg-white dark:bg-neutral-900 flex-shrink-0">
<div className="px-6 py-4">
<div className="flex items-center w-full">
<div className="flex items-center w-full justify-between">
{/* Left section - Sidebar trigger + Desktop Logo */}
<div className="flex flex-1 items-center gap-3">
<div className="flex items-center gap-3">
<SidebarTrigger />
<div
className={`flex items-center gap-1 ${
Expand All @@ -59,12 +59,8 @@ export const AppHeader: React.FC<AppHeaderProps> = ({
)}
</div>
</div>

{/* Center section - Empty spacer */}
<div className="flex-1"></div>

{/* Right section - Settings + Directory Toggle + Piebald branding */}
<div className="flex flex-1 items-center justify-end gap-2">
<div className="flex items-center justify-end gap-2">
{onOpenSettings && (
<Button
variant="ghost"
Expand Down
63 changes: 30 additions & 33 deletions frontend/src/pages/HomeDashboard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ export const HomeDashboard: React.FC = () => {
>
<div className="w-full">
{/* Header with logo and timestamp */}
<div className="flex items-center gap-2 mb-4">
<div className="flex items-center gap-2 mb-2">
{message.sender === "assistant" ? (
<div>
<SmartLogo />
Expand All @@ -91,6 +91,33 @@ export const HomeDashboard: React.FC = () => {
minute: "2-digit",
})}
</span>
{/* Info button for raw JSON */}
<Dialog>
<DialogTrigger asChild>
<Button
variant="ghost"
size="sm"
className="h-[unset] mt-0 py-1 text-xs text-muted-foreground hover:text-foreground"
>
<Info className="size-3" />
{t("dashboard.rawJsonButton")}
</Button>
</DialogTrigger>
<DialogContent className="max-w-2xl max-h-[80vh] overflow-y-auto">
<DialogHeader>
<DialogTitle>
{t("dashboard.rawJsonTitle")}
</DialogTitle>
</DialogHeader>
<div className="rounded-lg overflow-hidden border border-border">
<CodeMirrorViewer
code={JSON.stringify(message, null, 2)}
language="json"
readOnly={true}
/>
</div>
</DialogContent>
</Dialog>
</div>

<>
Expand All @@ -99,7 +126,7 @@ export const HomeDashboard: React.FC = () => {
return message.parts.map((msgPart, partIndex) => (
<div
key={partIndex}
className="text-sm text-gray-900 dark:text-gray-100 mb-2"
className="text-sm text-gray-900 dark:text-gray-100"
>
<MessageContent content={msgPart.text} />
</div>
Expand Down Expand Up @@ -130,7 +157,7 @@ ${part.thinking}`;
{msgPart.type === "thinking" ? (
<ThinkingBlock thinking={msgPart.thinking} />
) : msgPart.type === "text" ? (
<div className="text-sm text-gray-900 dark:text-gray-100 mb-2">
<div className="text-sm text-gray-900 dark:text-gray-100">
<MessageContent content={msgPart.text} />
</div>
) : msgPart.type === "toolCall" ? (
Expand Down Expand Up @@ -173,36 +200,6 @@ ${part.thinking}`;
));
})()}
</>

{/* Info button for raw JSON */}
<div className="mt-2 flex justify-start">
<Dialog>
<DialogTrigger asChild>
<Button
variant="ghost"
size="sm"
className="h-6 px-2 text-xs text-muted-foreground hover:text-foreground"
>
<Info className="h-3 w-3 mr-1" />
{t("dashboard.rawJsonButton")}
</Button>
</DialogTrigger>
<DialogContent className="max-w-2xl max-h-[80vh] overflow-y-auto">
<DialogHeader>
<DialogTitle>
{t("dashboard.rawJsonTitle")}
</DialogTitle>
</DialogHeader>
<div className="rounded-lg overflow-hidden border border-border">
<CodeMirrorViewer
code={JSON.stringify(message, null, 2)}
language="json"
readOnly={true}
/>
</div>
</DialogContent>
</Dialog>
</div>
</div>
</div>
))}
Expand Down