Merge main into massive-terminal-upgrade

Resolves merge conflicts:
- apps/server/src/routes/terminal/common.ts: Keep randomBytes import, use @automaker/utils for createLogger
- apps/ui/eslint.config.mjs: Use main's explicit globals list with XMLHttpRequest and MediaQueryListEvent additions
- apps/ui/src/components/views/terminal-view.tsx: Keep our terminal improvements (killAllSessions, beforeunload, better error handling)
- apps/ui/src/config/terminal-themes.ts: Keep our search highlight colors for all themes
- apps/ui/src/store/app-store.ts: Keep our terminal settings persistence improvements (merge function)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
SuperComboGamer
2025-12-21 20:27:44 -05:00
393 changed files with 32473 additions and 17974 deletions

View File

@@ -1,12 +1,7 @@
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import {
LogLevel,
createLogger,
getLogLevel,
setLogLevel,
} from "@/lib/logger.js";
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
import { LogLevel, createLogger, getLogLevel, setLogLevel } from '@automaker/utils';
describe("logger.ts", () => {
describe('logger.ts', () => {
let consoleSpy: {
log: ReturnType<typeof vi.spyOn>;
warn: ReturnType<typeof vi.spyOn>;
@@ -17,9 +12,9 @@ describe("logger.ts", () => {
beforeEach(() => {
originalLogLevel = getLogLevel();
consoleSpy = {
log: vi.spyOn(console, "log").mockImplementation(() => {}),
warn: vi.spyOn(console, "warn").mockImplementation(() => {}),
error: vi.spyOn(console, "error").mockImplementation(() => {}),
log: vi.spyOn(console, 'log').mockImplementation(() => {}),
warn: vi.spyOn(console, 'warn').mockImplementation(() => {}),
error: vi.spyOn(console, 'error').mockImplementation(() => {}),
};
});
@@ -30,8 +25,8 @@ describe("logger.ts", () => {
consoleSpy.error.mockRestore();
});
describe("LogLevel enum", () => {
it("should have correct numeric values", () => {
describe('LogLevel enum', () => {
it('should have correct numeric values', () => {
expect(LogLevel.ERROR).toBe(0);
expect(LogLevel.WARN).toBe(1);
expect(LogLevel.INFO).toBe(2);
@@ -39,8 +34,8 @@ describe("logger.ts", () => {
});
});
describe("setLogLevel and getLogLevel", () => {
it("should set and get log level", () => {
describe('setLogLevel and getLogLevel', () => {
it('should set and get log level', () => {
setLogLevel(LogLevel.DEBUG);
expect(getLogLevel()).toBe(LogLevel.DEBUG);
@@ -49,71 +44,66 @@ describe("logger.ts", () => {
});
});
describe("createLogger", () => {
it("should create a logger with context prefix", () => {
describe('createLogger', () => {
it('should create a logger with context prefix', () => {
setLogLevel(LogLevel.INFO);
const logger = createLogger("TestContext");
const logger = createLogger('TestContext');
logger.info("test message");
logger.info('test message');
expect(consoleSpy.log).toHaveBeenCalledWith("[TestContext]", "test message");
expect(consoleSpy.log).toHaveBeenCalledWith('[TestContext]', 'test message');
});
it("should log error at all log levels", () => {
const logger = createLogger("Test");
it('should log error at all log levels', () => {
const logger = createLogger('Test');
setLogLevel(LogLevel.ERROR);
logger.error("error message");
expect(consoleSpy.error).toHaveBeenCalledWith("[Test]", "error message");
logger.error('error message');
expect(consoleSpy.error).toHaveBeenCalledWith('[Test]', 'error message');
});
it("should log warn when level is WARN or higher", () => {
const logger = createLogger("Test");
it('should log warn when level is WARN or higher', () => {
const logger = createLogger('Test');
setLogLevel(LogLevel.ERROR);
logger.warn("warn message 1");
logger.warn('warn message 1');
expect(consoleSpy.warn).not.toHaveBeenCalled();
setLogLevel(LogLevel.WARN);
logger.warn("warn message 2");
expect(consoleSpy.warn).toHaveBeenCalledWith("[Test]", "warn message 2");
logger.warn('warn message 2');
expect(consoleSpy.warn).toHaveBeenCalledWith('[Test]', 'warn message 2');
});
it("should log info when level is INFO or higher", () => {
const logger = createLogger("Test");
it('should log info when level is INFO or higher', () => {
const logger = createLogger('Test');
setLogLevel(LogLevel.WARN);
logger.info("info message 1");
logger.info('info message 1');
expect(consoleSpy.log).not.toHaveBeenCalled();
setLogLevel(LogLevel.INFO);
logger.info("info message 2");
expect(consoleSpy.log).toHaveBeenCalledWith("[Test]", "info message 2");
logger.info('info message 2');
expect(consoleSpy.log).toHaveBeenCalledWith('[Test]', 'info message 2');
});
it("should log debug only when level is DEBUG", () => {
const logger = createLogger("Test");
it('should log debug only when level is DEBUG', () => {
const logger = createLogger('Test');
setLogLevel(LogLevel.INFO);
logger.debug("debug message 1");
logger.debug('debug message 1');
expect(consoleSpy.log).not.toHaveBeenCalled();
setLogLevel(LogLevel.DEBUG);
logger.debug("debug message 2");
expect(consoleSpy.log).toHaveBeenCalledWith("[Test]", "[DEBUG]", "debug message 2");
logger.debug('debug message 2');
expect(consoleSpy.log).toHaveBeenCalledWith('[Test]', '[DEBUG]', 'debug message 2');
});
it("should pass multiple arguments to log functions", () => {
it('should pass multiple arguments to log functions', () => {
setLogLevel(LogLevel.DEBUG);
const logger = createLogger("Multi");
const logger = createLogger('Multi');
logger.info("message", { data: "value" }, 123);
expect(consoleSpy.log).toHaveBeenCalledWith(
"[Multi]",
"message",
{ data: "value" },
123
);
logger.info('message', { data: 'value' }, 123);
expect(consoleSpy.log).toHaveBeenCalledWith('[Multi]', 'message', { data: 'value' }, 123);
});
});
});