diff --git a/factory/packages/frontend/src/components/mock-layout/history-minimap.tsx b/factory/packages/frontend/src/components/mock-layout/history-minimap.tsx
index a5a91cf..b62faa1 100644
--- a/factory/packages/frontend/src/components/mock-layout/history-minimap.tsx
+++ b/factory/packages/frontend/src/components/mock-layout/history-minimap.tsx
@@ -58,7 +58,11 @@ export const HistoryMinimap = memo(function HistoryMinimap({ events, onSelect }:
onFocus={() => setActiveEventId(event.id)}
onClick={() => onSelect(event)}
className={css({
- all: "unset",
+ appearance: "none",
+ WebkitAppearance: "none",
+ background: "none",
+ border: "none",
+ margin: "0",
display: "grid",
gridTemplateColumns: "1fr auto",
gap: "10px",
diff --git a/factory/packages/frontend/src/components/mock-layout/message-list.tsx b/factory/packages/frontend/src/components/mock-layout/message-list.tsx
index 4199d35..28906ae 100644
--- a/factory/packages/frontend/src/components/mock-layout/message-list.tsx
+++ b/factory/packages/frontend/src/components/mock-layout/message-list.tsx
@@ -95,7 +95,12 @@ const TranscriptMessageBody = memo(function TranscriptMessageBody({
data-copy-action="true"
onClick={() => onCopyMessage(message)}
className={css({
- all: "unset",
+ appearance: "none",
+ WebkitAppearance: "none",
+ background: "none",
+ border: "none",
+ padding: "0",
+ margin: "0",
display: "inline-flex",
alignItems: "center",
gap: "5px",
diff --git a/factory/packages/frontend/src/components/mock-layout/model-picker.tsx b/factory/packages/frontend/src/components/mock-layout/model-picker.tsx
index 2e41ddf..48513a1 100644
--- a/factory/packages/frontend/src/components/mock-layout/model-picker.tsx
+++ b/factory/packages/frontend/src/components/mock-layout/model-picker.tsx
@@ -138,7 +138,10 @@ export const ModelPicker = memo(function ModelPicker({
setRightTab("changes")}
className={css({
- all: "unset",
+ appearance: "none",
+ WebkitAppearance: "none",
+ background: "none",
+ border: "none",
+ margin: "0",
boxSizing: "border-box",
display: "inline-flex",
alignItems: "center",
@@ -277,7 +293,11 @@ export const RightSidebar = memo(function RightSidebar({
setRightTab("files")}
className={css({
- all: "unset",
+ appearance: "none",
+ WebkitAppearance: "none",
+ background: "none",
+ border: "none",
+ margin: "0",
boxSizing: "border-box",
display: "inline-flex",
alignItems: "center",
diff --git a/factory/packages/frontend/src/components/mock-layout/tab-strip.tsx b/factory/packages/frontend/src/components/mock-layout/tab-strip.tsx
index 03f05ed..cc7d904 100644
--- a/factory/packages/frontend/src/components/mock-layout/tab-strip.tsx
+++ b/factory/packages/frontend/src/components/mock-layout/tab-strip.tsx
@@ -130,7 +130,13 @@ export const TabStrip = memo(function TabStrip({
}
}}
className={css({
- all: "unset",
+ appearance: "none",
+ WebkitAppearance: "none",
+ background: "none",
+ border: "none",
+ padding: "0",
+ margin: "0",
+ outline: "none",
minWidth: "72px",
maxWidth: "180px",
fontSize: "11px",
diff --git a/factory/packages/frontend/src/components/mock-layout/terminal-pane.tsx b/factory/packages/frontend/src/components/mock-layout/terminal-pane.tsx
index f59de90..900887d 100644
--- a/factory/packages/frontend/src/components/mock-layout/terminal-pane.tsx
+++ b/factory/packages/frontend/src/components/mock-layout/terminal-pane.tsx
@@ -48,10 +48,7 @@ function canOpenTerminal(process: SandboxProcessRecord | null | undefined): bool
function defaultShellRequest(cwd?: string | null) {
return {
command: "/bin/bash",
- args: [
- "-lc",
- 'if [ -n "$SHELL" ] && [ -x "$SHELL" ]; then exec "$SHELL" -l; fi; if [ -x /bin/zsh ]; then exec /bin/zsh -l; fi; exec /bin/bash -l',
- ],
+ args: ["-lc", 'if [ -n "$SHELL" ] && [ -x "$SHELL" ]; then exec "$SHELL" -l; fi; if [ -x /bin/zsh ]; then exec /bin/zsh -l; fi; exec /bin/bash -l'],
cwd: cwd ?? undefined,
interactive: true,
tty: true,
@@ -105,13 +102,7 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
}, [handoffQuery.data]);
const connectionQuery = useQuery({
- queryKey: [
- "mock-layout",
- "sandbox-agent-connection",
- workspaceId,
- activeSandbox?.providerId ?? "",
- activeSandbox?.sandboxId ?? "",
- ],
+ queryKey: ["mock-layout", "sandbox-agent-connection", workspaceId, activeSandbox?.providerId ?? "", activeSandbox?.sandboxId ?? ""],
enabled: Boolean(activeSandbox?.sandboxId),
staleTime: 30_000,
refetchOnWindowFocus: false,
@@ -120,22 +111,12 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
throw new Error("Cannot load a sandbox connection without an active sandbox.");
}
- return await backendClient.getSandboxAgentConnection(
- workspaceId,
- activeSandbox.providerId,
- activeSandbox.sandboxId,
- );
+ return await backendClient.getSandboxAgentConnection(workspaceId, activeSandbox.providerId, activeSandbox.sandboxId);
},
});
const processesQuery = useQuery({
- queryKey: [
- "mock-layout",
- "sandbox-processes",
- workspaceId,
- activeSandbox?.providerId ?? "",
- activeSandbox?.sandboxId ?? "",
- ],
+ queryKey: ["mock-layout", "sandbox-processes", workspaceId, activeSandbox?.providerId ?? "", activeSandbox?.sandboxId ?? ""],
enabled: Boolean(activeSandbox?.sandboxId),
staleTime: 0,
refetchOnWindowFocus: true,
@@ -145,11 +126,7 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
throw new Error("Cannot load processes without an active sandbox.");
}
- return await backendClient.listSandboxProcesses(
- workspaceId,
- activeSandbox.providerId,
- activeSandbox.sandboxId,
- );
+ return await backendClient.listSandboxProcesses(workspaceId, activeSandbox.providerId, activeSandbox.sandboxId);
},
});
@@ -158,14 +135,9 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
return;
}
- return backendClient.subscribeSandboxProcesses(
- workspaceId,
- activeSandbox.providerId,
- activeSandbox.sandboxId,
- () => {
- void processesQuery.refetch();
- },
- );
+ return backendClient.subscribeSandboxProcesses(workspaceId, activeSandbox.providerId, activeSandbox.sandboxId, () => {
+ void processesQuery.refetch();
+ });
}, [activeSandbox?.providerId, activeSandbox?.sandboxId, processesQuery, workspaceId]);
useEffect(() => {
@@ -241,10 +213,7 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
}, [handoffId]);
const processes = processesQuery.data?.processes ?? [];
- const selectedProcess = useMemo(
- () => processes.find((process) => process.id === selectedProcessId) ?? null,
- [processes, selectedProcessId],
- );
+ const selectedProcess = useMemo(() => processes.find((process) => process.id === selectedProcessId) ?? null, [processes, selectedProcessId]);
useEffect(() => {
if (!processes.length) {
@@ -270,21 +239,11 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
setLogsLoading(true);
setLogsError(null);
try {
- const response = await backendClient.getSandboxProcessLogs(
- workspaceId,
- activeSandbox.providerId,
- activeSandbox.sandboxId,
- selectedProcess.id,
- {
- stream: selectedProcess.tty ? "pty" : "combined",
- tail: 200,
- },
- );
- setLogsText(
- response.entries
- .map((entry: ProcessLogResponseEntry) => decodeBase64Utf8(entry.data))
- .join(""),
- );
+ const response = await backendClient.getSandboxProcessLogs(workspaceId, activeSandbox.providerId, activeSandbox.sandboxId, selectedProcess.id, {
+ stream: selectedProcess.tty ? "pty" : "combined",
+ tail: 200,
+ });
+ setLogsText(response.entries.map((entry: ProcessLogResponseEntry) => decodeBase64Utf8(entry.data)).join(""));
} catch (error) {
setLogsText("");
setLogsError(error instanceof Error ? error.message : String(error));
@@ -386,17 +345,7 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
} finally {
setCreatingProcess(false);
}
- }, [
- activeSandbox,
- argsText,
- command,
- cwdOverride,
- interactive,
- openTerminalTab,
- processesQuery,
- tty,
- workspaceId,
- ]);
+ }, [activeSandbox, argsText, command, cwdOverride, interactive, openTerminalTab, processesQuery, tty, workspaceId]);
const handleProcessAction = useCallback(
async (processId: string, action: "stop" | "kill" | "delete") => {
@@ -407,32 +356,13 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
setActingProcessId(`${action}:${processId}`);
try {
if (action === "stop") {
- await backendClient.stopSandboxProcess(
- workspaceId,
- activeSandbox.providerId,
- activeSandbox.sandboxId,
- processId,
- { waitMs: 2_000 },
- );
+ await backendClient.stopSandboxProcess(workspaceId, activeSandbox.providerId, activeSandbox.sandboxId, processId, { waitMs: 2_000 });
} else if (action === "kill") {
- await backendClient.killSandboxProcess(
- workspaceId,
- activeSandbox.providerId,
- activeSandbox.sandboxId,
- processId,
- { waitMs: 2_000 },
- );
+ await backendClient.killSandboxProcess(workspaceId, activeSandbox.providerId, activeSandbox.sandboxId, processId, { waitMs: 2_000 });
} else {
- await backendClient.deleteSandboxProcess(
- workspaceId,
- activeSandbox.providerId,
- activeSandbox.sandboxId,
- processId,
- );
+ await backendClient.deleteSandboxProcess(workspaceId, activeSandbox.providerId, activeSandbox.sandboxId, processId);
setProcessTabs((current) => current.filter((tab) => tab.processId !== processId));
- setActiveTabId((current) =>
- current.startsWith("terminal:") && current === `terminal:${processId}` ? PROCESSES_TAB_ID : current,
- );
+ setActiveTabId((current) => (current.startsWith("terminal:") && current === `terminal:${processId}` ? PROCESSES_TAB_ID : current));
}
await processesQuery.refetch();
} catch (error) {
@@ -445,9 +375,9 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
);
const processTabsById = useMemo(() => new Map(processTabs.map((tab) => [tab.id, tab])), [processTabs]);
- const activeProcessTab = activeTabId === PROCESSES_TAB_ID ? null : processTabsById.get(activeTabId) ?? null;
+ const activeProcessTab = activeTabId === PROCESSES_TAB_ID ? null : (processTabsById.get(activeTabId) ?? null);
const activeTerminalProcess = useMemo(
- () => (activeProcessTab ? processes.find((process) => process.id === activeProcessTab.processId) ?? null : null),
+ () => (activeProcessTab ? (processes.find((process) => process.id === activeProcessTab.processId) ?? null) : null),
[activeProcessTab, processes],
);
@@ -473,7 +403,10 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
});
const smallButtonClassName = css({
- all: "unset",
+ appearance: "none",
+ WebkitAppearance: "none",
+ background: "none",
+ margin: "0",
display: "inline-flex",
alignItems: "center",
gap: "6px",
@@ -545,21 +478,11 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
- void processesQuery.refetch()}
- disabled={processesQuery.isFetching}
- >
+ void processesQuery.refetch()} disabled={processesQuery.isFetching}>
{processesQuery.isFetching ? : }
Refresh
- void spawnTerminal()}
- disabled={creatingProcess}
- >
+ void spawnTerminal()} disabled={creatingProcess}>
{creatingProcess ? : }
New Terminal
@@ -656,21 +579,12 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
/>
tty
- void createCustomProcess()}
- disabled={creatingProcess}
- >
+ void createCustomProcess()} disabled={creatingProcess}>
Create Process
- {createError ? (
-
- {createError}
-
- ) : null}
+ {createError ? {createError}
: null}
{processes.length === 0 ? (
-
- No processes yet.
-
+
No processes yet.
) : (
processes.map((process) => {
const isSelected = selectedProcessId === process.id;
@@ -743,7 +655,16 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
{formatCommandSummary(process)}
-
+
{process.pid ? `PID ${process.pid}` : "PID ?"}
{process.id.slice(0, 8)}
@@ -822,12 +743,8 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
})}
>
-
- {formatCommandSummary(selectedProcess)}
-
-
- {selectedProcess.status}
-
+ {formatCommandSummary(selectedProcess)}
+ {selectedProcess.status}
{selectedProcess.pid ? `PID ${selectedProcess.pid}` : "PID ?"}
@@ -836,16 +753,22 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
-
+
Logs
void refreshLogs()} disabled={logsLoading}>
{logsLoading ? : }
Refresh
- {logsError ? (
-
{logsError}
- ) : null}
+ {logsError ?
{logsError}
: null}
Interactive terminal transport is unavailable.
-
- This tab was created through the standard process API flow. Mock mode does not open a live terminal
- transport.
-
+ This tab was created through the standard process API flow. Mock mode does not open a live terminal transport.
);
@@ -908,7 +828,18 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
return (
-
+
{formatCommandSummary(activeTerminalProcess)}
{activeTerminalProcess.id.slice(0, 8)}
@@ -1001,7 +932,12 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
type="button"
aria-label="Terminal controls"
className={css({
- all: "unset",
+ appearance: "none",
+ WebkitAppearance: "none",
+ background: "none",
+ border: "none",
+ padding: "0",
+ margin: "0",
display: "flex",
alignItems: "center",
justifyContent: "center",
@@ -1017,7 +953,11 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
type="button"
onClick={() => setActiveTabId(PROCESSES_TAB_ID)}
className={css({
- all: "unset",
+ appearance: "none",
+ WebkitAppearance: "none",
+ background: "none",
+ border: "none",
+ margin: "0",
position: "relative",
display: "flex",
alignItems: "center",
@@ -1057,7 +997,11 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
type="button"
onClick={() => setActiveTabId(tab.id)}
className={css({
- all: "unset",
+ appearance: "none",
+ WebkitAppearance: "none",
+ background: "none",
+ border: "none",
+ margin: "0",
position: "relative",
display: "flex",
alignItems: "center",
@@ -1088,7 +1032,12 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
aria-label={`Close ${tab.title}`}
onClick={() => closeTerminalTab(tab.id)}
className={css({
- all: "unset",
+ appearance: "none",
+ WebkitAppearance: "none",
+ background: "none",
+ border: "none",
+ padding: "0",
+ margin: "0",
display: "flex",
alignItems: "center",
justifyContent: "center",
@@ -1110,7 +1059,12 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
onClick={() => void spawnTerminal()}
disabled={!activeSandbox?.sandboxId || creatingProcess}
className={css({
- all: "unset",
+ appearance: "none",
+ WebkitAppearance: "none",
+ background: "none",
+ border: "none",
+ padding: "0",
+ margin: "0",
display: "flex",
alignItems: "center",
justifyContent: "center",
@@ -1132,6 +1086,4 @@ export function TerminalPane({ workspaceId, handoffId }: TerminalPaneProps) {
);
}
-type ProcessLogResponseEntry = Awaited<
- ReturnType
->["entries"][number];
+type ProcessLogResponseEntry = Awaited>["entries"][number];
diff --git a/factory/packages/frontend/src/components/mock-layout/transcript-header.tsx b/factory/packages/frontend/src/components/mock-layout/transcript-header.tsx
index 1107324..daa56ae 100644
--- a/factory/packages/frontend/src/components/mock-layout/transcript-header.tsx
+++ b/factory/packages/frontend/src/components/mock-layout/transcript-header.tsx
@@ -45,7 +45,13 @@ export const TranscriptHeader = memo(function TranscriptHeader({
}
}}
className={css({
- all: "unset",
+ appearance: "none",
+ WebkitAppearance: "none",
+ background: "none",
+ border: "none",
+ padding: "0",
+ margin: "0",
+ outline: "none",
fontWeight: 500,
fontSize: "14px",
color: theme.colors.contentPrimary,
@@ -79,7 +85,11 @@ export const TranscriptHeader = memo(function TranscriptHeader({
}
}}
className={css({
- all: "unset",
+ appearance: "none",
+ WebkitAppearance: "none",
+ background: "none",
+ margin: "0",
+ outline: "none",
padding: "2px 8px",
borderRadius: "999px",
border: "1px solid rgba(255, 255, 255, 0.3)",
@@ -136,7 +146,11 @@ export const TranscriptHeader = memo(function TranscriptHeader({
onSetActiveTabUnread(!activeTab.unread)}
className={css({
- all: "unset",
+ appearance: "none",
+ WebkitAppearance: "none",
+ background: "none",
+ border: "none",
+ margin: "0",
boxSizing: "border-box",
display: "inline-flex",
alignItems: "center",