Add full disk access checks and settings

Add background themes and custom images

Add shell command logging toggle

Add UTF-8 locale guarantee for PTY

Add Claude hook settings injection

Add hotkey system for GUI

Add glass panel styling

Add search disabled state for agent panels

Add zoom toggle command

Add device report filtering

Add entitlements for notarization

Update version to 0.1.27
This commit is contained in:
2026-06-15 22:26:06 +07:00
parent 2ee2aaaffb
commit ee845e15b3
30 changed files with 859 additions and 123 deletions
+15 -5
View File
@@ -124,7 +124,7 @@ const fontStackLE = (family: string | null) =>
function xtermThemeLE(p: Record<string, string>) {
return {
background: p["bg-panel"],
background: p["term-bg"] ?? p["bg-panel"],
foreground: p["text-primary"],
cursor: p["text-primary"],
selectionBackground: p["search-match"],
@@ -140,6 +140,7 @@ function StoppedSnapshot({ surfaceId, font, palette }: { surfaceId: string; font
fontFamily: fontStackLE(font?.family ?? null),
fontSize: font?.size ?? 13,
theme: palette ? xtermThemeLE(palette) : undefined,
allowTransparency: true, // term-bg may be transparent under a background theme
cursorBlink: false,
disableStdin: true,
scrollback: 0,
@@ -164,7 +165,8 @@ function Leaf({ id, workspaceId, running, states, surfaces, focusedId, onFocus,
onMouseDown={() => onFocus(id)}
style={{
position: "relative", display: "flex", flexDirection: "column", width: "100%", height: "100%",
background: COLORS.bgPanel, borderRadius: 8, overflow: "hidden",
background: "transparent",
borderRadius: 8, overflow: "hidden",
// Constant 2px border, color-only on focus. A width change (1px<->2px)
// would resize the inner content box, fire ResizeObserver -> fit -> PTY
// SIGWINCH, making zsh/powerlevel10k reprint its prompt on every focus
@@ -173,7 +175,15 @@ function Leaf({ id, workspaceId, running, states, surfaces, focusedId, onFocus,
boxSizing: "border-box",
}}
>
{inner}
{/* Glass fill + blur as a layer BEHIND the content. The terminal's transparent
cells show this through. Crucially the terminal canvas is NOT a descendant
of a backdrop-filter element — under WKWebView that clips/smears the WebGL
canvas (first-glyph clip at column 0, smearing on scroll). With "none" the
glass is the solid bg-panel so the classic look is unchanged. */}
<div style={{ position: "absolute", inset: 0, zIndex: 0, background: COLORS.panelGlass, backdropFilter: COLORS.panelBlur, WebkitBackdropFilter: COLORS.panelBlur, pointerEvents: "none" }} />
<div style={{ position: "relative", zIndex: 1, flex: 1, minHeight: 0, display: "flex", flexDirection: "column" }}>
{inner}
</div>
{dropEdge && <DropIndicator edge={dropEdge} />}
</div>
);
@@ -217,7 +227,7 @@ function Leaf({ id, workspaceId, running, states, surfaces, focusedId, onFocus,
<div
onMouseDown={(e) => { onFocus(id); onStartPanelDrag(id, e); }}
title="Drag to move this panel"
style={{ display: "flex", alignItems: "center", gap: 8, height: 30, flex: "0 0 30px", padding: "0 10px", background: COLORS.bgElevated, borderBottom: `1px solid ${COLORS.borderSubtle}`, cursor: "grab" }}
style={{ display: "flex", alignItems: "center", gap: 8, height: 30, flex: "0 0 30px", padding: "0 10px", background: COLORS.elevatedGlass, borderBottom: `1px solid ${COLORS.borderSubtle}`, cursor: "grab" }}
>
<GripVertical size={13} color={COLORS.textMuted} />
<StatusRing state={state} running={true} />
@@ -238,7 +248,7 @@ function Leaf({ id, workspaceId, running, states, surfaces, focusedId, onFocus,
onMouseLeave={(e) => { e.currentTarget.style.color = COLORS.textMuted; }} />
</div>
<div style={{ flex: 1, minHeight: 0 }}>
<TerminalView key={id} surfaceId={id} font={font} palette={palette} />
<TerminalView key={id} surfaceId={id} font={font} palette={palette} focused={focused} />
</div>
{searchSurfaceId === id && (
<SearchBar surfaceId={id} reopenNonce={searchNonce} onClose={onCloseSearch} />