genbox 1.0.241 → 1.0.243
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Theme Utilities
|
|
3
3
|
*
|
|
4
|
-
* Provides automatic theme detection based on
|
|
4
|
+
* Provides automatic theme detection based on system preferences.
|
|
5
|
+
* Falls back to time-based detection if system theme cannot be detected.
|
|
5
6
|
* Used by session commands to set light/dark theme for AI CLIs.
|
|
6
7
|
*
|
|
7
8
|
* Claude Code CLI: Theme is configured via ~/.claude/settings.json
|
|
@@ -9,12 +10,20 @@
|
|
|
9
10
|
* - No command-line flag available (removed in v2.0.0)
|
|
10
11
|
*
|
|
11
12
|
* Gemini CLI: Theme is configured via ~/.gemini/settings.json
|
|
12
|
-
* - Format: { "
|
|
13
|
+
* - Format: { "theme": "Default Light" } or { "theme": "Default Dark" }
|
|
13
14
|
* - No command-line flag available
|
|
14
15
|
*/
|
|
15
16
|
export type Theme = 'light' | 'dark';
|
|
17
|
+
/**
|
|
18
|
+
* Detect the system theme based on the current platform.
|
|
19
|
+
* Returns null if detection fails or platform is unsupported.
|
|
20
|
+
*
|
|
21
|
+
* @returns 'dark' or 'light' based on system preference, null if detection fails
|
|
22
|
+
*/
|
|
23
|
+
export declare function detectSystemTheme(): Theme | null;
|
|
16
24
|
/**
|
|
17
25
|
* Get the appropriate theme based on the current time of day.
|
|
26
|
+
* This is used as a fallback when system theme detection fails.
|
|
18
27
|
*
|
|
19
28
|
* @param options Optional configuration for day/night hours
|
|
20
29
|
* @returns 'light' during day hours (6 AM - 6 PM), 'dark' otherwise
|
|
@@ -25,17 +34,33 @@ export declare function getThemeForTime(options?: {
|
|
|
25
34
|
now?: Date;
|
|
26
35
|
}): Theme;
|
|
27
36
|
/**
|
|
28
|
-
* Get the theme
|
|
37
|
+
* Get the current theme, preferring system detection over time-based.
|
|
38
|
+
*
|
|
39
|
+
* @returns The detected system theme, or time-based fallback
|
|
40
|
+
*/
|
|
41
|
+
export declare function getSystemTheme(): Theme;
|
|
42
|
+
/**
|
|
43
|
+
* Get the theme for Claude CLI based on system preference.
|
|
44
|
+
* Falls back to time-based detection if system theme cannot be detected.
|
|
29
45
|
*
|
|
30
46
|
* @returns The theme value
|
|
31
47
|
*/
|
|
32
48
|
export declare function getClaudeTheme(): Theme;
|
|
33
49
|
/**
|
|
34
|
-
* Get the theme for Gemini CLI based on
|
|
50
|
+
* Get the theme for Gemini CLI based on system preference.
|
|
51
|
+
* Falls back to time-based detection if system theme cannot be detected.
|
|
35
52
|
*
|
|
36
|
-
* @returns The theme value
|
|
53
|
+
* @returns The theme value (light/dark)
|
|
37
54
|
*/
|
|
38
55
|
export declare function getGeminiTheme(): Theme;
|
|
56
|
+
/**
|
|
57
|
+
* Get the full Gemini theme name based on system preference.
|
|
58
|
+
* Gemini CLI uses specific theme names like "Default Light", "Default Dark", etc.
|
|
59
|
+
* Falls back to time-based detection if system theme cannot be detected.
|
|
60
|
+
*
|
|
61
|
+
* @returns The full Gemini theme name
|
|
62
|
+
*/
|
|
63
|
+
export declare function getGeminiThemeName(): string;
|
|
39
64
|
/**
|
|
40
65
|
* Update local Claude Code settings.json with the current time-based theme.
|
|
41
66
|
* Creates the settings file if it doesn't exist.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme-utils.d.ts","sourceRoot":"","sources":["../../src/utils/theme-utils.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"theme-utils.d.ts","sourceRoot":"","sources":["../../src/utils/theme-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,MAAM,MAAM,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;AAqHrC;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,KAAK,GAAG,IAAI,CAahD;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,GAAG,KAAK,CAgBR;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,KAAK,CAOtC;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,KAAK,CAEtC;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,KAAK,CAEtC;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAI3C;AASD;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAiC3C;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,IAAI,MAAM,CAiBtD;AASD;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAsC3C;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,IAAI,MAAM,CAkBtD"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Theme Utilities
|
|
3
3
|
*
|
|
4
|
-
* Provides automatic theme detection based on
|
|
4
|
+
* Provides automatic theme detection based on system preferences.
|
|
5
|
+
* Falls back to time-based detection if system theme cannot be detected.
|
|
5
6
|
* Used by session commands to set light/dark theme for AI CLIs.
|
|
6
7
|
*
|
|
7
8
|
* Claude Code CLI: Theme is configured via ~/.claude/settings.json
|
|
@@ -9,19 +10,143 @@
|
|
|
9
10
|
* - No command-line flag available (removed in v2.0.0)
|
|
10
11
|
*
|
|
11
12
|
* Gemini CLI: Theme is configured via ~/.gemini/settings.json
|
|
12
|
-
* - Format: { "
|
|
13
|
+
* - Format: { "theme": "Default Light" } or { "theme": "Default Dark" }
|
|
13
14
|
* - No command-line flag available
|
|
14
15
|
*/
|
|
15
16
|
import * as fs from 'fs';
|
|
16
17
|
import * as path from 'path';
|
|
17
18
|
import * as os from 'os';
|
|
19
|
+
import { execSync } from 'child_process';
|
|
18
20
|
/**
|
|
19
21
|
* Default day hours (6 AM to 6 PM is considered "day")
|
|
22
|
+
* Used as fallback when system theme detection fails.
|
|
20
23
|
*/
|
|
21
24
|
const DEFAULT_DAY_START_HOUR = 6; // 6 AM
|
|
22
25
|
const DEFAULT_DAY_END_HOUR = 18; // 6 PM
|
|
26
|
+
/**
|
|
27
|
+
* Detect the system theme on macOS.
|
|
28
|
+
* Uses `defaults read -g AppleInterfaceStyle` which returns "Dark" if dark mode is enabled.
|
|
29
|
+
*
|
|
30
|
+
* @returns 'dark' if dark mode, 'light' if light mode, null if detection fails
|
|
31
|
+
*/
|
|
32
|
+
function detectMacOSTheme() {
|
|
33
|
+
try {
|
|
34
|
+
const result = execSync('defaults read -g AppleInterfaceStyle 2>/dev/null', {
|
|
35
|
+
encoding: 'utf-8',
|
|
36
|
+
timeout: 1000,
|
|
37
|
+
}).trim();
|
|
38
|
+
return result === 'Dark' ? 'dark' : 'light';
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// Command fails or returns empty when in light mode
|
|
42
|
+
return 'light';
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Detect the system theme on Linux.
|
|
47
|
+
* Tries multiple methods for different desktop environments:
|
|
48
|
+
* - GNOME/GTK: gsettings
|
|
49
|
+
* - KDE: kreadconfig5
|
|
50
|
+
* - Generic: GTK_THEME environment variable
|
|
51
|
+
*
|
|
52
|
+
* @returns 'dark' if dark mode, 'light' if light mode, null if detection fails
|
|
53
|
+
*/
|
|
54
|
+
function detectLinuxTheme() {
|
|
55
|
+
// Try GNOME/GTK (most common)
|
|
56
|
+
try {
|
|
57
|
+
const result = execSync('gsettings get org.gnome.desktop.interface color-scheme 2>/dev/null', {
|
|
58
|
+
encoding: 'utf-8',
|
|
59
|
+
timeout: 1000,
|
|
60
|
+
}).trim();
|
|
61
|
+
if (result.includes('dark')) {
|
|
62
|
+
return 'dark';
|
|
63
|
+
}
|
|
64
|
+
if (result.includes('light') || result.includes('default')) {
|
|
65
|
+
return 'light';
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// gsettings not available or failed
|
|
70
|
+
}
|
|
71
|
+
// Try GTK theme setting
|
|
72
|
+
try {
|
|
73
|
+
const result = execSync('gsettings get org.gnome.desktop.interface gtk-theme 2>/dev/null', {
|
|
74
|
+
encoding: 'utf-8',
|
|
75
|
+
timeout: 1000,
|
|
76
|
+
}).trim().toLowerCase();
|
|
77
|
+
if (result.includes('dark')) {
|
|
78
|
+
return 'dark';
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
// gsettings not available or failed
|
|
83
|
+
}
|
|
84
|
+
// Try KDE
|
|
85
|
+
try {
|
|
86
|
+
const result = execSync('kreadconfig5 --group General --key ColorScheme 2>/dev/null', {
|
|
87
|
+
encoding: 'utf-8',
|
|
88
|
+
timeout: 1000,
|
|
89
|
+
}).trim().toLowerCase();
|
|
90
|
+
if (result.includes('dark')) {
|
|
91
|
+
return 'dark';
|
|
92
|
+
}
|
|
93
|
+
if (result) {
|
|
94
|
+
return 'light';
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
// kreadconfig5 not available or failed
|
|
99
|
+
}
|
|
100
|
+
// Check GTK_THEME environment variable
|
|
101
|
+
const gtkTheme = process.env.GTK_THEME?.toLowerCase();
|
|
102
|
+
if (gtkTheme) {
|
|
103
|
+
return gtkTheme.includes('dark') ? 'dark' : 'light';
|
|
104
|
+
}
|
|
105
|
+
// Check for common dark theme indicators in environment
|
|
106
|
+
const colorScheme = process.env.COLOR_SCHEME?.toLowerCase();
|
|
107
|
+
if (colorScheme) {
|
|
108
|
+
return colorScheme.includes('dark') ? 'dark' : 'light';
|
|
109
|
+
}
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Detect the system theme on Windows.
|
|
114
|
+
* Uses PowerShell to read the registry key for app theme preference.
|
|
115
|
+
*
|
|
116
|
+
* @returns 'dark' if dark mode, 'light' if light mode, null if detection fails
|
|
117
|
+
*/
|
|
118
|
+
function detectWindowsTheme() {
|
|
119
|
+
try {
|
|
120
|
+
const result = execSync('powershell -NoProfile -Command "(Get-ItemProperty -Path HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize -Name AppsUseLightTheme).AppsUseLightTheme"', { encoding: 'utf-8', timeout: 2000 }).trim();
|
|
121
|
+
// 0 = dark mode, 1 = light mode
|
|
122
|
+
return result === '0' ? 'dark' : 'light';
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Detect the system theme based on the current platform.
|
|
130
|
+
* Returns null if detection fails or platform is unsupported.
|
|
131
|
+
*
|
|
132
|
+
* @returns 'dark' or 'light' based on system preference, null if detection fails
|
|
133
|
+
*/
|
|
134
|
+
export function detectSystemTheme() {
|
|
135
|
+
const platform = os.platform();
|
|
136
|
+
switch (platform) {
|
|
137
|
+
case 'darwin':
|
|
138
|
+
return detectMacOSTheme();
|
|
139
|
+
case 'linux':
|
|
140
|
+
return detectLinuxTheme();
|
|
141
|
+
case 'win32':
|
|
142
|
+
return detectWindowsTheme();
|
|
143
|
+
default:
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
23
147
|
/**
|
|
24
148
|
* Get the appropriate theme based on the current time of day.
|
|
149
|
+
* This is used as a fallback when system theme detection fails.
|
|
25
150
|
*
|
|
26
151
|
* @param options Optional configuration for day/night hours
|
|
27
152
|
* @returns 'light' during day hours (6 AM - 6 PM), 'dark' otherwise
|
|
@@ -37,20 +162,47 @@ export function getThemeForTime(options) {
|
|
|
37
162
|
return 'dark';
|
|
38
163
|
}
|
|
39
164
|
/**
|
|
40
|
-
* Get the theme
|
|
165
|
+
* Get the current theme, preferring system detection over time-based.
|
|
41
166
|
*
|
|
42
|
-
* @returns The theme
|
|
167
|
+
* @returns The detected system theme, or time-based fallback
|
|
43
168
|
*/
|
|
44
|
-
export function
|
|
169
|
+
export function getSystemTheme() {
|
|
170
|
+
const systemTheme = detectSystemTheme();
|
|
171
|
+
if (systemTheme !== null) {
|
|
172
|
+
return systemTheme;
|
|
173
|
+
}
|
|
174
|
+
// Fall back to time-based detection
|
|
45
175
|
return getThemeForTime();
|
|
46
176
|
}
|
|
47
177
|
/**
|
|
48
|
-
* Get the theme for
|
|
178
|
+
* Get the theme for Claude CLI based on system preference.
|
|
179
|
+
* Falls back to time-based detection if system theme cannot be detected.
|
|
49
180
|
*
|
|
50
181
|
* @returns The theme value
|
|
51
182
|
*/
|
|
183
|
+
export function getClaudeTheme() {
|
|
184
|
+
return getSystemTheme();
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Get the theme for Gemini CLI based on system preference.
|
|
188
|
+
* Falls back to time-based detection if system theme cannot be detected.
|
|
189
|
+
*
|
|
190
|
+
* @returns The theme value (light/dark)
|
|
191
|
+
*/
|
|
52
192
|
export function getGeminiTheme() {
|
|
53
|
-
return
|
|
193
|
+
return getSystemTheme();
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Get the full Gemini theme name based on system preference.
|
|
197
|
+
* Gemini CLI uses specific theme names like "Default Light", "Default Dark", etc.
|
|
198
|
+
* Falls back to time-based detection if system theme cannot be detected.
|
|
199
|
+
*
|
|
200
|
+
* @returns The full Gemini theme name
|
|
201
|
+
*/
|
|
202
|
+
export function getGeminiThemeName() {
|
|
203
|
+
const theme = getSystemTheme();
|
|
204
|
+
// Use "Default Light" or "Default Dark" which match most terminal backgrounds
|
|
205
|
+
return theme === 'light' ? 'Default Light' : 'Default Dark';
|
|
54
206
|
}
|
|
55
207
|
/**
|
|
56
208
|
* Path to Claude Code settings.json
|
|
@@ -132,7 +284,7 @@ function getGeminiSettingsPath() {
|
|
|
132
284
|
* @returns true if successfully updated, false otherwise
|
|
133
285
|
*/
|
|
134
286
|
export function updateGeminiTheme() {
|
|
135
|
-
const
|
|
287
|
+
const themeName = getGeminiThemeName();
|
|
136
288
|
const settingsPath = getGeminiSettingsPath();
|
|
137
289
|
const geminiDir = path.dirname(settingsPath);
|
|
138
290
|
try {
|
|
@@ -152,11 +304,12 @@ export function updateGeminiTheme() {
|
|
|
152
304
|
settings = {};
|
|
153
305
|
}
|
|
154
306
|
}
|
|
155
|
-
// Update the theme
|
|
156
|
-
|
|
157
|
-
|
|
307
|
+
// Update the theme at root level (Gemini uses full theme names like "Default Light")
|
|
308
|
+
settings.theme = themeName;
|
|
309
|
+
// Clean up old ui.theme format if it exists (no longer used)
|
|
310
|
+
if (settings.ui && typeof settings.ui === 'object') {
|
|
311
|
+
delete settings.ui.theme;
|
|
158
312
|
}
|
|
159
|
-
settings.ui.theme = theme;
|
|
160
313
|
// Write back
|
|
161
314
|
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
|
|
162
315
|
return true;
|
|
@@ -173,19 +326,20 @@ export function updateGeminiTheme() {
|
|
|
173
326
|
* @returns Shell command string to update Gemini settings
|
|
174
327
|
*/
|
|
175
328
|
export function buildRemoteGeminiThemeCommand() {
|
|
176
|
-
const
|
|
329
|
+
const themeName = getGeminiThemeName();
|
|
177
330
|
// This script:
|
|
178
331
|
// 1. Creates ~/.gemini if needed
|
|
179
332
|
// 2. Reads existing settings.json or creates new
|
|
180
|
-
// 3. Updates the
|
|
181
|
-
// 4.
|
|
333
|
+
// 3. Updates the theme value at root level (Gemini uses full theme names like "Default Light")
|
|
334
|
+
// 4. Cleans up old ui.theme format if present
|
|
335
|
+
// 5. Writes back the settings
|
|
182
336
|
return `
|
|
183
337
|
mkdir -p ~/.gemini && \
|
|
184
338
|
if [ -f ~/.gemini/settings.json ]; then \
|
|
185
|
-
node -e "const fs=require('fs'); const s=JSON.parse(fs.readFileSync('$HOME/.gemini/settings.json','utf-8')||'{}'); s.
|
|
186
|
-
echo '{"
|
|
339
|
+
node -e "const fs=require('fs'); const s=JSON.parse(fs.readFileSync('$HOME/.gemini/settings.json','utf-8')||'{}'); s.theme='${themeName}'; if(s.ui) delete s.ui.theme; fs.writeFileSync('$HOME/.gemini/settings.json',JSON.stringify(s,null,2));" 2>/dev/null || \
|
|
340
|
+
echo '{"theme":"${themeName}"}' > ~/.gemini/settings.json; \
|
|
187
341
|
else \
|
|
188
|
-
echo '{"
|
|
342
|
+
echo '{"theme":"${themeName}"}' > ~/.gemini/settings.json; \
|
|
189
343
|
fi
|
|
190
344
|
`.trim().replace(/\n/g, ' ');
|
|
191
345
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme-utils.js","sourceRoot":"","sources":["../../src/utils/theme-utils.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"theme-utils.js","sourceRoot":"","sources":["../../src/utils/theme-utils.ts"],"names":[],"mappings":"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"}
|