mirror of
https://github.com/jarrodwatts/claude-hud.git
synced 2026-05-01 18:02:40 +00:00
* feat(layout): add expanded multi-line layout mode Split the overloaded session line into semantic lines for better readability: - Identity line: model, plan, context bar, duration - Project line: path, git status - Environment line: config counts (CLAUDE.md, rules, MCPs, hooks) - Usage line: rate limits with reset times New config options: - `lineLayout`: 'compact' | 'expanded' (default: expanded for new users) - `showSeparators`: boolean (orthogonal to layout) - `usageThreshold`: show usage line only when >= N% - `environmentThreshold`: show env line only when counts >= N Backward compatible: old `layout` config is automatically migrated. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: address code review feedback - Fix usage threshold to use max(5h, 7d) so high 7d usage isn't hidden when 5h is null - Update stale comment in session-line.ts (now compact layout only) - Remove non-null assertions in identity.ts by hoisting planName Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: apply thresholds to compact layout for consistency - Add environmentThreshold gating to config counts in compact mode - Add usageThreshold with max(5h, 7d) logic to usage in compact mode - Remove non-null assertion for planName (same fix as identity.ts) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * test: update tests for new lineLayout config schema - Update config.test.js to validate lineLayout instead of layout - Update render.test.js to use lineLayout and showSeparators - Update index.test.js mock config with new schema - Update integration test expected output for expanded default Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
44 lines
1.9 KiB
JavaScript
44 lines
1.9 KiB
JavaScript
import { test } from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { loadConfig, getConfigPath } from '../dist/config.js';
|
|
import * as path from 'node:path';
|
|
import * as os from 'node:os';
|
|
|
|
test('loadConfig returns valid config structure', async () => {
|
|
const config = await loadConfig();
|
|
|
|
// pathLevels must be 1, 2, or 3
|
|
assert.ok([1, 2, 3].includes(config.pathLevels), 'pathLevels should be 1, 2, or 3');
|
|
|
|
// lineLayout must be valid
|
|
const validLineLayouts = ['compact', 'expanded'];
|
|
assert.ok(validLineLayouts.includes(config.lineLayout), 'lineLayout should be valid');
|
|
|
|
// showSeparators must be boolean
|
|
assert.equal(typeof config.showSeparators, 'boolean', 'showSeparators should be boolean');
|
|
|
|
// gitStatus object with expected properties
|
|
assert.equal(typeof config.gitStatus, 'object');
|
|
assert.equal(typeof config.gitStatus.enabled, 'boolean');
|
|
assert.equal(typeof config.gitStatus.showDirty, 'boolean');
|
|
assert.equal(typeof config.gitStatus.showAheadBehind, 'boolean');
|
|
|
|
// display object with expected properties
|
|
assert.equal(typeof config.display, 'object');
|
|
assert.equal(typeof config.display.showModel, 'boolean');
|
|
assert.equal(typeof config.display.showContextBar, 'boolean');
|
|
assert.equal(typeof config.display.showConfigCounts, 'boolean');
|
|
assert.equal(typeof config.display.showDuration, 'boolean');
|
|
assert.equal(typeof config.display.showTokenBreakdown, 'boolean');
|
|
assert.equal(typeof config.display.showUsage, 'boolean');
|
|
assert.equal(typeof config.display.showTools, 'boolean');
|
|
assert.equal(typeof config.display.showAgents, 'boolean');
|
|
assert.equal(typeof config.display.showTodos, 'boolean');
|
|
});
|
|
|
|
test('getConfigPath returns correct path', () => {
|
|
const configPath = getConfigPath();
|
|
const homeDir = os.homedir();
|
|
assert.equal(configPath, path.join(homeDir, '.claude', 'plugins', 'claude-hud', 'config.json'));
|
|
});
|