项目文件夹

文件
hyunsh 691d27b207 feat(effort): show ultracode sessions as ultracode(xhigh) (#640)
Claude Code reports ultracode as a normal level (xhigh) in stdin, so the
statusline recovers it from the transcript: the ultra_effort_enter /
ultra_effort_exit attachment markers and the immediate /effort command
output, latest signal wins. When active, the reported level is wrapped as
ultracode(<level>), taken as-is rather than assumed to be xhigh.

Also drop the ps-based parent-process --effort fallback (#471); the effort
label now comes solely from Claude Code stdin, removing a subprocess spawn
on every statusline refresh.

Co-authored-by: Claude <noreply@anthropic.com>
2026-07-13 10:02:28 +10:00

117 行
4.8 KiB
JavaScript

import { describe, it } from 'node:test';
import assert from 'node:assert';
import { resolveEffortLevel } from '../dist/effort.js';
describe('resolveEffortLevel', () => {
describe('stdin effort (future Claude Code support)', () => {
it('returns effort info when stdin provides effort level', () => {
const result = resolveEffortLevel('max');
assert.deepStrictEqual(result, { level: 'max', symbol: '●' });
});
it('normalizes effort level to lowercase', () => {
const result = resolveEffortLevel('HIGH');
assert.deepStrictEqual(result, { level: 'high', symbol: '◑' });
});
it('handles all known effort levels', () => {
assert.deepStrictEqual(resolveEffortLevel('low'), { level: 'low', symbol: '○' });
assert.deepStrictEqual(resolveEffortLevel('medium'), { level: 'medium', symbol: '◔' });
assert.deepStrictEqual(resolveEffortLevel('high'), { level: 'high', symbol: '◑' });
assert.deepStrictEqual(resolveEffortLevel('xhigh'), { level: 'xhigh', symbol: '◕' });
assert.deepStrictEqual(resolveEffortLevel('max'), { level: 'max', symbol: '●' });
});
it('wraps the reported level (not a hardcoded xhigh) when the marker is active', () => {
const result = resolveEffortLevel('max', { ultracodeActive: true });
assert.deepStrictEqual(result, { level: 'ultracode(max)', symbol: '●' });
});
it('annotates xhigh as ultracode(xhigh) when the transcript marker is active', () => {
const result = resolveEffortLevel('xhigh', { ultracodeActive: true });
assert.deepStrictEqual(result, { level: 'ultracode(xhigh)', symbol: '◕' });
});
it('keeps plain xhigh when the ultracode marker is inactive', () => {
const result = resolveEffortLevel('xhigh', { ultracodeActive: false });
assert.deepStrictEqual(result, { level: 'xhigh', symbol: '◕' });
});
it('keeps plain xhigh when no ultracode marker is present', () => {
const result = resolveEffortLevel('xhigh');
assert.deepStrictEqual(result, { level: 'xhigh', symbol: '◕' });
});
it('handles unknown future effort levels with empty symbol', () => {
const result = resolveEffortLevel('turbo');
assert.deepStrictEqual(result, { level: 'turbo', symbol: '' });
});
it('returns null when stdin effort is null', () => {
assert.strictEqual(resolveEffortLevel(null), null);
});
it('returns null when stdin effort is undefined', () => {
assert.strictEqual(resolveEffortLevel(undefined), null);
});
it('returns null for empty string', () => {
assert.strictEqual(resolveEffortLevel(''), null);
});
});
describe('stdin effort as object (Claude Code 2.1.115+ schema)', () => {
it('extracts level from object { level: "max" }', () => {
const result = resolveEffortLevel({ level: 'max' });
assert.deepStrictEqual(result, { level: 'max', symbol: '●' });
});
it('extracts and normalizes uppercase level from object', () => {
const result = resolveEffortLevel({ level: 'HIGH' });
assert.deepStrictEqual(result, { level: 'high', symbol: '◑' });
});
it('handles all known levels when wrapped in object', () => {
assert.deepStrictEqual(resolveEffortLevel({ level: 'low' }), { level: 'low', symbol: '○' });
assert.deepStrictEqual(resolveEffortLevel({ level: 'medium' }), { level: 'medium', symbol: '◔' });
assert.deepStrictEqual(resolveEffortLevel({ level: 'xhigh' }), { level: 'xhigh', symbol: '◕' });
});
it('annotates object xhigh as ultracode(xhigh) when the transcript marker is active', () => {
const result = resolveEffortLevel({ level: 'xhigh' }, { ultracodeActive: true });
assert.deepStrictEqual(result, { level: 'ultracode(xhigh)', symbol: '◕' });
});
it('tolerates extra fields in effort object (forward-compat)', () => {
const result = resolveEffortLevel({ level: 'max', budget: 32000, extra: 'ignored' });
assert.deepStrictEqual(result, { level: 'max', symbol: '●' });
});
it('returns null when object has no level field', () => {
assert.strictEqual(resolveEffortLevel({}), null);
});
it('returns null when object.level is null', () => {
assert.strictEqual(resolveEffortLevel({ level: null }), null);
});
it('returns null when object.level is not a string', () => {
assert.strictEqual(resolveEffortLevel({ level: 42 }), null);
});
});
describe('defensive handling of unexpected types (no crash)', () => {
it('returns null on numeric effort value', () => {
assert.strictEqual(resolveEffortLevel(42), null);
});
it('returns null on boolean effort value', () => {
assert.strictEqual(resolveEffortLevel(true), null);
});
it('returns null on array effort value', () => {
assert.strictEqual(resolveEffortLevel(['max']), null);
});
});
});