qwen-code/packages/cli/src/ui/components/DebugModeNotification.tsx
tanzhenxin ba2824b0b0 feat(core,cli): add debug logging infrastructure (M0-M2)
Implement debug logfile foundation for routing internal diagnostics
to a per-session log file instead of polluting the terminal.

Core changes:
- Add DebugLogger interface and createDebugLogger() in debugLogger.ts
- Add Storage.getGlobalDebugDir() and getDebugLogPath() for log paths
- Add Config.getDebugLogger() method with session-scoped logger
- Track write failures via isDebugLoggingDegraded()

CLI changes:
- Add DebugModeNotification component for interactive startup notice
- Add non-interactive debug notice to stderr in gemini.tsx

Log files are written to ~/.qwen/debug/<sessionId>.txt with format:
2026-01-24T10:30:00.000Z [LEVEL] [TAG] message

Debug logging is always-on; debug mode only controls the startup notice.
2026-01-25 09:23:18 +08:00

36 lines
983 B
TypeScript

/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import { Box, Text } from 'ink';
import { Storage, isDebugLoggingDegraded } from '@qwen-code/qwen-code-core';
import { useConfig } from '../contexts/ConfigContext.js';
import { theme } from '../semantic-colors.js';
/**
* Displays debug mode status and log file path when debug mode is enabled.
*/
export const DebugModeNotification = () => {
const config = useConfig();
if (!config.getDebugMode()) {
return null;
}
const logPath = Storage.getDebugLogPath(config.getSessionId());
const isDegraded = isDebugLoggingDegraded();
return (
<Box paddingX={1} marginTop={1} flexDirection="column">
<Text color={theme.status.warning}>Debug mode enabled</Text>
<Text dimColor>Logging to: {logPath}</Text>
{isDegraded && (
<Text dimColor>
Warning: Debug logging is degraded (write failures occurred)
</Text>
)}
</Box>
);
};