diff --git a/apps/code/src/renderer/features/sessions/components/session-update/DeleteToolView.tsx b/apps/code/src/renderer/features/sessions/components/session-update/DeleteToolView.tsx
index 08719ae37..c01853abf 100644
--- a/apps/code/src/renderer/features/sessions/components/session-update/DeleteToolView.tsx
+++ b/apps/code/src/renderer/features/sessions/components/session-update/DeleteToolView.tsx
@@ -37,7 +37,7 @@ export function DeleteToolView({
{filePath && }
{deletedLines !== null && (
-
+
-{deletedLines}
)}
diff --git a/apps/code/src/renderer/features/sessions/components/session-update/EditToolView.tsx b/apps/code/src/renderer/features/sessions/components/session-update/EditToolView.tsx
index 631c24311..7a8b9ae61 100644
--- a/apps/code/src/renderer/features/sessions/components/session-update/EditToolView.tsx
+++ b/apps/code/src/renderer/features/sessions/components/session-update/EditToolView.tsx
@@ -92,7 +92,7 @@ export function EditToolView({
{filePath && }
{diffStats && (
-
+
+{diffStats.added}{" "}
-{diffStats.removed}
diff --git a/apps/code/src/renderer/features/sessions/components/session-update/FileMentionChip.tsx b/apps/code/src/renderer/features/sessions/components/session-update/FileMentionChip.tsx
index 9ff62268b..8d29842fe 100644
--- a/apps/code/src/renderer/features/sessions/components/session-update/FileMentionChip.tsx
+++ b/apps/code/src/renderer/features/sessions/components/session-update/FileMentionChip.tsx
@@ -87,7 +87,7 @@ export const FileMentionChip = memo(function FileMentionChip({
>
- {filename}
+ {filename}
);
diff --git a/apps/code/src/renderer/features/sessions/components/session-update/MoveToolView.tsx b/apps/code/src/renderer/features/sessions/components/session-update/MoveToolView.tsx
index 6e390f7ee..5db42204b 100644
--- a/apps/code/src/renderer/features/sessions/components/session-update/MoveToolView.tsx
+++ b/apps/code/src/renderer/features/sessions/components/session-update/MoveToolView.tsx
@@ -29,9 +29,14 @@ export function MoveToolView({
wasCancelled={wasCancelled}
>
{title ||
- (sourcePath && destPath
- ? `Move ${getFilename(sourcePath)} → ${getFilename(destPath)}`
- : "Move file")}
+ (sourcePath && destPath ? (
+ <>
+ Move {getFilename(sourcePath)} →{" "}
+ {getFilename(destPath)}
+ >
+ ) : (
+ "Move file"
+ ))}
);
}
diff --git a/apps/code/src/renderer/features/sessions/components/session-update/SearchToolView.tsx b/apps/code/src/renderer/features/sessions/components/session-update/SearchToolView.tsx
index 2c116384a..3d5c9b31a 100644
--- a/apps/code/src/renderer/features/sessions/components/session-update/SearchToolView.tsx
+++ b/apps/code/src/renderer/features/sessions/components/session-update/SearchToolView.tsx
@@ -63,7 +63,9 @@ export function SearchToolView({
isExpandable
isExpanded={isExpanded}
/>
- {title || "Search"}
+
+ {title || "Search"}
+
{resultCount} {resultCount === 1 ? "result" : "results"}
diff --git a/apps/code/src/renderer/features/sessions/components/session-update/ThinkToolView.tsx b/apps/code/src/renderer/features/sessions/components/session-update/ThinkToolView.tsx
index 753a9c7cc..d683bc3ca 100644
--- a/apps/code/src/renderer/features/sessions/components/session-update/ThinkToolView.tsx
+++ b/apps/code/src/renderer/features/sessions/components/session-update/ThinkToolView.tsx
@@ -81,7 +81,7 @@ export function ThinkToolView({
-
+
{displayedContent}
diff --git a/apps/code/src/renderer/features/sessions/components/session-update/ThoughtView.tsx b/apps/code/src/renderer/features/sessions/components/session-update/ThoughtView.tsx
index 6194ca070..fb4f5e3c8 100644
--- a/apps/code/src/renderer/features/sessions/components/session-update/ThoughtView.tsx
+++ b/apps/code/src/renderer/features/sessions/components/session-update/ThoughtView.tsx
@@ -46,7 +46,7 @@ export const ThoughtView = memo(function ThoughtView({
-
+
{displayedContent}
diff --git a/apps/code/src/renderer/features/sessions/components/session-update/toolCallUtils.tsx b/apps/code/src/renderer/features/sessions/components/session-update/toolCallUtils.tsx
index 8e9550f49..75824e1c3 100644
--- a/apps/code/src/renderer/features/sessions/components/session-update/toolCallUtils.tsx
+++ b/apps/code/src/renderer/features/sessions/components/session-update/toolCallUtils.tsx
@@ -234,7 +234,9 @@ export function ContentPre({ children }: { children: React.ReactNode }) {
return (
- {children}
+
+ {children}
+
);
diff --git a/packages/git/src/operation-manager.ts b/packages/git/src/operation-manager.ts
index 30d111409..fc54bb286 100644
--- a/packages/git/src/operation-manager.ts
+++ b/packages/git/src/operation-manager.ts
@@ -2,6 +2,29 @@ import { createGitClient, type GitClient } from "./client";
import { removeLock, waitForUnlock } from "./lock-detector";
import { AsyncReaderWriterLock } from "./rw-lock";
+/**
+ * Returns process.env with Electron/Chromium variables cleaned so that
+ * child processes spawned by git hooks (e.g. biome via lint-staged) don't
+ * crash trying to initialise GPU subsystems.
+ *
+ * The agent service symlinks `node → Electron binary` and prepends it to
+ * PATH. If ELECTRON_RUN_AS_NODE is missing, that binary starts as a full
+ * Chromium browser (GPU init → SIGTRAP crash). We strip most ELECTRON_/
+ * CHROME_ vars but explicitly keep ELECTRON_RUN_AS_NODE=1 so any such
+ * shim still behaves as plain Node.js.
+ */
+function getCleanEnv(): Record {
+ const env: Record = {};
+ for (const [key, value] of Object.entries(process.env)) {
+ if (value === undefined) continue;
+ if (key === "ELECTRON_RUN_AS_NODE") continue;
+ if (key.startsWith("ELECTRON_") || key.startsWith("CHROME_")) continue;
+ env[key] = value;
+ }
+ env.ELECTRON_RUN_AS_NODE = "1";
+ return env;
+}
+
interface RepoState {
lock: AsyncReaderWriterLock;
client: GitClient;
@@ -62,11 +85,11 @@ class GitOperationManagerImpl {
abortSignal: options.signal,
});
return operation(
- scopedGit.env({ ...process.env, GIT_OPTIONAL_LOCKS: "0" }),
+ scopedGit.env({ ...getCleanEnv(), GIT_OPTIONAL_LOCKS: "0" }),
);
}
- const git = state.client.env({ ...process.env, GIT_OPTIONAL_LOCKS: "0" });
+ const git = state.client.env({ ...getCleanEnv(), GIT_OPTIONAL_LOCKS: "0" });
return operation(git);
}
@@ -93,10 +116,10 @@ class GitOperationManagerImpl {
const scopedGit = createGitClient(repoPath, {
abortSignal: options.signal,
});
- return await operation(scopedGit.env(process.env));
+ return await operation(scopedGit.env(getCleanEnv()));
}
- return await operation(state.client.env(process.env));
+ return await operation(state.client.env(getCleanEnv()));
} catch (error) {
if (options?.signal?.aborted) {
await removeLock(repoPath).catch(() => {});