-
+
+
$ {command}
@@ -290,7 +339,7 @@ function ShellConfirm({
function Chip({ children }: { children: React.ReactNode }) {
return (
-
+
{children}
);
diff --git a/frontend/src/panels/LeftPanel.tsx b/frontend/src/panels/LeftPanel.tsx
index cccafa8..0032c9c 100644
--- a/frontend/src/panels/LeftPanel.tsx
+++ b/frontend/src/panels/LeftPanel.tsx
@@ -22,24 +22,22 @@ export function LeftPanel() {
}, [refreshSessions, refreshFiles]);
return (
-
+
{/* Historique */}
-
- Historique
-
+
HISTORIQUE
-
+
{sessions.length === 0 && (
-
+
Aucune session. Lance une conversation ci-dessous.
)}
@@ -49,17 +47,15 @@ export function LeftPanel() {
openSession(s.id)}
- className={`group relative cursor-pointer rounded-[9px] px-3 py-[9px] ${
- active ? "bg-[#252019]" : "hover:bg-[#221e18]"
+ className={`group cursor-pointer border-[3px] border-line px-3 py-2.5 ${
+ active ? "bg-card-deep shadow-hard-accent" : "bg-card"
}`}
+ style={{ borderRadius: 7 }}
>
- {active && (
-
- )}
{s.title}
@@ -69,13 +65,15 @@ export function LeftPanel() {
e.stopPropagation();
removeSession(s.id);
}}
- className="hidden text-muted-3 hover:text-warn group-hover:block"
+ className={`hidden group-hover:block ${
+ active ? "text-on-dark-2 hover:text-accent" : "text-muted-3 hover:text-warn"
+ }`}
title="Supprimer"
>
×
-
+
{relTime(s.updated_at)} · {s.message_count ?? 0} message
{(s.message_count ?? 0) > 1 ? "s" : ""}
@@ -84,19 +82,17 @@ export function LeftPanel() {
})}
-
+
{/* Fichiers */}
-
- Fichiers
-
- workspace/
+ FICHIERS
+ workspace/
-
+
{fileTree.length === 0 ? (
-
+
Aucun fichier pour l'instant.
L'agent créera des fichiers ici.
@@ -110,41 +106,39 @@ export function LeftPanel() {
}
function FileTree({ nodes, depth }: { nodes: FileNode[]; depth: number }) {
- const openPreview = useStore((s) => s.openPreview);
+ const { openPreview, previewPath } = useStore();
return (
<>
- {nodes.map((n) => (
-
-
n.type === "file" && openPreview(n.path)}
- className={`flex items-center gap-2 rounded-[7px] px-2 py-[5px] ${
- n.type === "file"
- ? "cursor-pointer text-ink-2 hover:bg-[#221e18]"
- : "text-muted"
- }`}
- style={{ paddingLeft: 8 + depth * 14 }}
- >
- {n.type === "dir" ? (
-
- ) : (
-
- )}
-
{n.name}
+ {nodes.map((n) => {
+ const active = n.type === "file" && n.path === previewPath;
+ return (
+
+
n.type === "file" && openPreview(n.path)}
+ className={`mb-[3px] flex items-center gap-2 px-2 py-[5px] ${
+ n.type === "file"
+ ? active
+ ? "cursor-pointer border-2 border-line bg-card-deep text-white"
+ : "cursor-pointer text-ink-2 hover:bg-base"
+ : "text-muted"
+ }`}
+ style={{ paddingLeft: 8 + depth * 14 }}
+ >
+ {n.type === "dir" ? (
+ ▾
+ ) : (
+
+ )}
+ {n.name}
+
+ {n.children &&
}
- {n.children &&
}
-
- ))}
+ );
+ })}
>
);
}
diff --git a/frontend/src/panels/PreviewPanel.tsx b/frontend/src/panels/PreviewPanel.tsx
index acca8e3..b7664b6 100644
--- a/frontend/src/panels/PreviewPanel.tsx
+++ b/frontend/src/panels/PreviewPanel.tsx
@@ -18,29 +18,28 @@ export function PreviewPanel() {
];
return (
-
+
{/* Onglets */}
-
-
- setTab("preview")}>
- Aperçu
-
- setTab("code")}>
- Code
-
- setTab("logs")}>
- Logs
-
- {logs.length}
-
-
-
+
+ setTab("preview")}>
+ Aperçu
+
+ setTab("code")}>
+ Code
+
+ setTab("logs")}>
+ Logs
+
+ {logs.length}
+
+
{/* URL bar */}
-
-
-
+
+
+ 🔒
+
{previewPath ? `workspace/${previewPath}` : "workspace/"}
@@ -48,25 +47,23 @@ export function PreviewPanel() {
{/* Onglet Logs (fond sombre) */}
{tab === "logs" ? (
-
+
{logs.length === 0 ? (
-
+
Aucune activité d'outil pour cette session.
) : (
logs.map((l, i) => (
@@ -78,42 +75,42 @@ export function PreviewPanel() {
? "…"
: "✓"}
- {l.name}
-
+ {l.name}
+
{(l.args?.path as string) ??
(l.args?.query as string) ??
(l.args?.command as string) ??
""}
- {l.summary}
+ {l.summary}
))
)}
) : (
/* Viewport Aperçu / Code (fond clair) */
-
+
{!previewPath ? (
-
- L'aperçu s'affichera ici dès que l'agent générera un fichier (clique
- aussi un fichier à gauche).
-
- ) : tab === "code" ? (
-
- {previewContent}
-
- ) : isHtml ? (
-
+
+ L'aperçu s'affichera ici dès que l'agent générera un fichier (clique
+ aussi un fichier à gauche).
+
+ ) : tab === "code" ? (
+
+ {previewContent}
+
+ ) : isHtml ? (
+
) : (
-
+
{previewContent}
)}
@@ -126,8 +123,8 @@ export function PreviewPanel() {
function Empty({ children }: { children: React.ReactNode }) {
return (
-
[ aucun aperçu ]
-
{children}
+
AUCUN APERÇU
+
{children}
);
}
@@ -144,10 +141,8 @@ function Tab({
return (