Files
claude-hud/dist/config.js
2026-01-09 00:59:01 +00:00

104 lines
4.0 KiB
JavaScript

import * as fs from 'node:fs';
import * as path from 'node:path';
import * as os from 'node:os';
export const DEFAULT_CONFIG = {
layout: 'default',
pathLevels: 1,
gitStatus: {
enabled: true,
showDirty: true,
showAheadBehind: false,
},
display: {
showModel: true,
showContextBar: true,
showConfigCounts: true,
showDuration: true,
showTokenBreakdown: true,
showUsage: true,
showTools: true,
showAgents: true,
showTodos: true,
autocompactBuffer: 'enabled',
},
};
export function getConfigPath() {
const homeDir = os.homedir();
return path.join(homeDir, '.claude', 'plugins', 'claude-hud', 'config.json');
}
function validatePathLevels(value) {
return value === 1 || value === 2 || value === 3;
}
function validateLayout(value) {
return value === 'default' || value === 'separators';
}
function validateAutocompactBuffer(value) {
return value === 'enabled' || value === 'disabled';
}
function mergeConfig(userConfig) {
const layout = validateLayout(userConfig.layout)
? userConfig.layout
: DEFAULT_CONFIG.layout;
const pathLevels = validatePathLevels(userConfig.pathLevels)
? userConfig.pathLevels
: DEFAULT_CONFIG.pathLevels;
const gitStatus = {
enabled: typeof userConfig.gitStatus?.enabled === 'boolean'
? userConfig.gitStatus.enabled
: DEFAULT_CONFIG.gitStatus.enabled,
showDirty: typeof userConfig.gitStatus?.showDirty === 'boolean'
? userConfig.gitStatus.showDirty
: DEFAULT_CONFIG.gitStatus.showDirty,
showAheadBehind: typeof userConfig.gitStatus?.showAheadBehind === 'boolean'
? userConfig.gitStatus.showAheadBehind
: DEFAULT_CONFIG.gitStatus.showAheadBehind,
};
const display = {
showModel: typeof userConfig.display?.showModel === 'boolean'
? userConfig.display.showModel
: DEFAULT_CONFIG.display.showModel,
showContextBar: typeof userConfig.display?.showContextBar === 'boolean'
? userConfig.display.showContextBar
: DEFAULT_CONFIG.display.showContextBar,
showConfigCounts: typeof userConfig.display?.showConfigCounts === 'boolean'
? userConfig.display.showConfigCounts
: DEFAULT_CONFIG.display.showConfigCounts,
showDuration: typeof userConfig.display?.showDuration === 'boolean'
? userConfig.display.showDuration
: DEFAULT_CONFIG.display.showDuration,
showTokenBreakdown: typeof userConfig.display?.showTokenBreakdown === 'boolean'
? userConfig.display.showTokenBreakdown
: DEFAULT_CONFIG.display.showTokenBreakdown,
showUsage: typeof userConfig.display?.showUsage === 'boolean'
? userConfig.display.showUsage
: DEFAULT_CONFIG.display.showUsage,
showTools: typeof userConfig.display?.showTools === 'boolean'
? userConfig.display.showTools
: DEFAULT_CONFIG.display.showTools,
showAgents: typeof userConfig.display?.showAgents === 'boolean'
? userConfig.display.showAgents
: DEFAULT_CONFIG.display.showAgents,
showTodos: typeof userConfig.display?.showTodos === 'boolean'
? userConfig.display.showTodos
: DEFAULT_CONFIG.display.showTodos,
autocompactBuffer: validateAutocompactBuffer(userConfig.display?.autocompactBuffer)
? userConfig.display.autocompactBuffer
: DEFAULT_CONFIG.display.autocompactBuffer,
};
return { layout, pathLevels, gitStatus, display };
}
export async function loadConfig() {
const configPath = getConfigPath();
try {
if (!fs.existsSync(configPath)) {
return DEFAULT_CONFIG;
}
const content = fs.readFileSync(configPath, 'utf-8');
const userConfig = JSON.parse(content);
return mergeConfig(userConfig);
}
catch {
return DEFAULT_CONFIG;
}
}
//# sourceMappingURL=config.js.map