Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
7e90328
feat(terminal): Add core infrastructure for custom terminal configura…
DhanushSantosh Jan 28, 2026
cea405f
feat(terminal): Wire terminal service with settings service
DhanushSantosh Jan 28, 2026
13457de
feat(terminal): Add Settings UI and theme change synchronization
DhanushSantosh Jan 28, 2026
4f28286
fix(terminal): Add error handling and explicit field mapping for term…
DhanushSantosh Jan 28, 2026
691c181
fix(terminal): Use React Query mutation hook for settings updates
DhanushSantosh Jan 28, 2026
8d2d6d8
fix(terminal): Use React Query hook for globalSettings instead of store
DhanushSantosh Jan 28, 2026
f07fbc0
debug(terminal): Add detailed logging for terminal config application
DhanushSantosh Jan 28, 2026
efad219
Fix terminal rc updates and bash rcfile loading
DhanushSantosh Jan 28, 2026
7d31a05
feat(terminal): add banner on shell start
DhanushSantosh Jan 28, 2026
92cbb42
feat(terminal): colorize banner per theme
DhanushSantosh Jan 28, 2026
a44d425
chore(terminal): bump rc version for banner colors
DhanushSantosh Jan 28, 2026
b1387d2
feat(terminal): match banner colors to launcher
DhanushSantosh Jan 28, 2026
ca5a16f
feat(terminal): add prompt customization controls
DhanushSantosh Jan 28, 2026
01d59d5
feat: integrate oh-my-posh prompt themes
DhanushSantosh Jan 28, 2026
b3829f6
fix: resolve oh-my-posh theme path
DhanushSantosh Jan 28, 2026
942e6ba
fix: correct oh-my-posh config invocation
DhanushSantosh Jan 28, 2026
b818a45
docs: add terminal theme screenshot
DhanushSantosh Jan 28, 2026
a204bc1
fix: address review feedback and stabilize e2e test
DhanushSantosh Jan 28, 2026
02659b8
ui: split terminal config into separate card
DhanushSantosh Jan 28, 2026
19c4850
fix: enable cross-platform Warp terminal detection
DhanushSantosh Jan 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion apps/server/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -390,7 +390,7 @@ const server = createServer(app);
// WebSocket servers using noServer mode for proper multi-path support
const wss = new WebSocketServer({ noServer: true });
const terminalWss = new WebSocketServer({ noServer: true });
const terminalService = getTerminalService();
const terminalService = getTerminalService(settingsService);

/**
* Authenticate WebSocket upgrade requests
Expand Down
25 changes: 25 additions & 0 deletions apps/server/src/lib/terminal-themes-data.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/**
* Terminal Theme Data - Re-export terminal themes from platform package
*
* This module re-exports terminal theme data for use in the server.
*/

import { terminalThemeColors, getTerminalThemeColors as getThemeColors } from '@automaker/platform';
import type { ThemeMode } from '@automaker/types';
import type { TerminalTheme } from '@automaker/platform';

/**
* Get terminal theme colors for a given theme mode
*/
export function getTerminalThemeColors(theme: ThemeMode): TerminalTheme {
return getThemeColors(theme);
}

/**
* Get all terminal themes
*/
export function getAllTerminalThemes(): Record<ThemeMode, TerminalTheme> {
return terminalThemeColors;
}

export default terminalThemeColors;
36 changes: 36 additions & 0 deletions apps/server/src/routes/settings/routes/update-global.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import type { GlobalSettings } from '../../../types/settings.js';
import { getErrorMessage, logError, logger } from '../common.js';
import { setLogLevel, LogLevel } from '@automaker/utils';
import { setRequestLoggingEnabled } from '../../../index.js';
import { getTerminalService } from '../../../services/terminal-service.js';

/**
* Map server log level string to LogLevel enum
Expand Down Expand Up @@ -57,13 +58,48 @@ export function createUpdateGlobalHandler(settingsService: SettingsService) {
}, localStorageMigrated=${(updates as any).localStorageMigrated ?? 'n/a'}`
);

// Get old settings to detect theme changes
const oldSettings = await settingsService.getGlobalSettings();
const oldTheme = oldSettings?.theme;

logger.info('[SERVER_SETTINGS_UPDATE] Calling updateGlobalSettings...');
const settings = await settingsService.updateGlobalSettings(updates);
logger.info(
'[SERVER_SETTINGS_UPDATE] Update complete, projects count:',
settings.projects?.length ?? 0
);

// Handle theme change - regenerate terminal RC files for all projects
if ('theme' in updates && updates.theme && updates.theme !== oldTheme) {
const terminalService = getTerminalService(settingsService);
const newTheme = updates.theme;

logger.info(
`[TERMINAL_CONFIG] Theme changed from ${oldTheme} to ${newTheme}, regenerating RC files`
);

// Regenerate RC files for all projects with terminal config enabled
const projects = settings.projects || [];
for (const project of projects) {
try {
const projectSettings = await settingsService.getProjectSettings(project.path);
// Check if terminal config is enabled (global or project-specific)
const terminalConfigEnabled =
projectSettings.terminalConfig?.enabled !== false &&
settings.terminalConfig?.enabled === true;

if (terminalConfigEnabled) {
await terminalService.onThemeChange(project.path, newTheme);
logger.info(`[TERMINAL_CONFIG] Regenerated RC files for project: ${project.name}`);
}
} catch (error) {
logger.warn(
`[TERMINAL_CONFIG] Failed to regenerate RC files for project ${project.name}: ${error}`
);
}
}
}

// Apply server log level if it was updated
if ('serverLogLevel' in updates && updates.serverLogLevel) {
const level = LOG_LEVEL_MAP[updates.serverLogLevel];
Expand Down
Loading