claude-use 11.61.0 → 11.62.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +438 -108
- package/dist/index.cjs +62 -8
- package/dist/index.mjs +62 -8
- package/dist/types/index.d.ts +286 -0
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -250,6 +250,15 @@ var init_graphemes = __esm({
|
|
|
250
250
|
}
|
|
251
251
|
});
|
|
252
252
|
|
|
253
|
+
// src/statusline/messages/languages.ts
|
|
254
|
+
var STATUSLINE_LANGUAGES;
|
|
255
|
+
var init_languages = __esm({
|
|
256
|
+
"src/statusline/messages/languages.ts"() {
|
|
257
|
+
"use strict";
|
|
258
|
+
STATUSLINE_LANGUAGES = ["en", "zh-Hans", "zh-Hant"];
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
|
|
253
262
|
// src/config/statusline.ts
|
|
254
263
|
function distinctList(member) {
|
|
255
264
|
return import_zod2.z.array(member).refine((items) => new Set(items).size === items.length, "must not repeat an entry");
|
|
@@ -260,10 +269,13 @@ function isSingleVisibleGrapheme(text) {
|
|
|
260
269
|
function unsettable(setting) {
|
|
261
270
|
return setting.unwrap().nullable().optional().describe(`${setting.description ?? ""} ${UNSET_NOTE}`);
|
|
262
271
|
}
|
|
272
|
+
function canonicalLanguage(tag) {
|
|
273
|
+
return tag === "zh" || tag === "zh-TW" ? LANGUAGE_ALIASES[tag] : tag;
|
|
274
|
+
}
|
|
263
275
|
function isPlainObject(value) {
|
|
264
276
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
265
277
|
}
|
|
266
|
-
function
|
|
278
|
+
function mergeKeys(base, over) {
|
|
267
279
|
if (!isPlainObject(over)) {
|
|
268
280
|
return over === void 0 ? base : over;
|
|
269
281
|
}
|
|
@@ -272,7 +284,7 @@ function mergeStatuslineSettings(base, over) {
|
|
|
272
284
|
if (value === null) {
|
|
273
285
|
Reflect.deleteProperty(merged, key);
|
|
274
286
|
} else {
|
|
275
|
-
merged[key] =
|
|
287
|
+
merged[key] = mergeKeys(merged[key], value);
|
|
276
288
|
}
|
|
277
289
|
}
|
|
278
290
|
return merged;
|
|
@@ -280,6 +292,13 @@ function mergeStatuslineSettings(base, over) {
|
|
|
280
292
|
function contextBands({ bands, context }) {
|
|
281
293
|
return { warnAt: context.warnAt ?? bands.warnAt, criticalAt: context.criticalAt ?? bands.criticalAt };
|
|
282
294
|
}
|
|
295
|
+
function isPresetName(value) {
|
|
296
|
+
return STATUSLINE_PRESETS.some((name) => name === value);
|
|
297
|
+
}
|
|
298
|
+
function mergeStatuslineSettings(base, over) {
|
|
299
|
+
const preset = isPlainObject(over) ? over.preset : void 0;
|
|
300
|
+
return mergeKeys(isPresetName(preset) ? mergeKeys(base, PRESET_BUNDLES[preset]) : base, over);
|
|
301
|
+
}
|
|
283
302
|
function resolveStatusline(settings) {
|
|
284
303
|
const resolved = ResolvedStatuslineSchema.parse(mergeStatuslineSettings(STATUSLINE_DEFAULTS, settings));
|
|
285
304
|
if (resolved.bands.warnAt >= resolved.bands.criticalAt) {
|
|
@@ -299,7 +318,7 @@ function resolveStatusline(settings) {
|
|
|
299
318
|
}
|
|
300
319
|
return resolved;
|
|
301
320
|
}
|
|
302
|
-
var import_string_width2, import_zod2, STATUSLINE_HEADER_SEGMENTS, STATUSLINE_ROWS, STATUSLINE_SESSION_TIME_PARTS, PROMPT_CACHE_TTL_SECONDS, STATUSLINE_COLOUR_NAMES, DEFAULT_HEADER_SEGMENTS, DEFAULT_ROWS, STATUSLINE_PATH_LEVELS, STATUSLINE_USAGE_VALUES, STATUSLINE_TIME_FORMATS, STATUSLINE_HOUR_CYCLES, MAX_PERCENT, MAX_STATUSLINE_PALETTE_INDEX, MAX_STATUSLINE_LABEL_COLUMNS, MIN_STATUSLINE_COLUMNS, MAX_STATUSLINE_COLUMNS, MAX_BAR_CELLS, MAX_ACCOUNT_USER_CHARS, MAX_DISPLAY_TEXT_CHARS, LABEL_RE2, OPTIONAL_LABEL_RE, mergeGroups, colourValue, barCharacter, STATUSLINE_CONTEXT_VALUES, STATUSLINE_CONTEXT_ESTIMATES, AUTOCOMPACT_RESERVE_FRACTION, AUTOCOMPACT_RESERVE_RAMP_START, AUTOCOMPACT_RESERVE_RAMP_END,
|
|
321
|
+
var import_string_width2, import_zod2, STATUSLINE_HEADER_SEGMENTS, STATUSLINE_ROWS, STATUSLINE_SESSION_TIME_PARTS, PROMPT_CACHE_TTL_SECONDS, STATUSLINE_COLOUR_NAMES, DEFAULT_HEADER_SEGMENTS, DEFAULT_ROWS, STATUSLINE_PRESETS, GIT_WITH_DIRTY_MARKER, JJ_OFF, PRESET_BUNDLES, STATUSLINE_PATH_LEVELS, STATUSLINE_USAGE_VALUES, STATUSLINE_TIME_FORMATS, STATUSLINE_HOUR_CYCLES, MAX_PERCENT, MAX_STATUSLINE_PALETTE_INDEX, MAX_STATUSLINE_LABEL_COLUMNS, MIN_STATUSLINE_COLUMNS, MAX_STATUSLINE_COLUMNS, MAX_BAR_CELLS, MAX_ACCOUNT_USER_CHARS, MAX_DISPLAY_TEXT_CHARS, LABEL_RE2, OPTIONAL_LABEL_RE, mergeGroups, colourValue, barCharacter, STATUSLINE_CONTEXT_VALUES, STATUSLINE_CONTEXT_ESTIMATES, AUTOCOMPACT_RESERVE_FRACTION, AUTOCOMPACT_RESERVE_RAMP_START, AUTOCOMPACT_RESERVE_RAMP_END, labelWithinColumns, labelWithinColumnsMessage, labelShowsSomething, labelShowsSomethingMessage, labelIsPlainText, labelIsPlainTextMessage, windowLabel, overrideText, wholePercent, thresholdPercent, SHAPES, UNSET_NOTE, LANGUAGE_DESCRIPTION, LANGUAGE_TAGS, LANGUAGE_ALIASES, TOP_LEVEL, StatuslineSchema, ResolvedStatuslineSchema, STATUSLINE_DEFAULTS, STATUSLINE_ENV;
|
|
303
322
|
var init_statusline = __esm({
|
|
304
323
|
"src/config/statusline.ts"() {
|
|
305
324
|
"use strict";
|
|
@@ -307,6 +326,7 @@ var init_statusline = __esm({
|
|
|
307
326
|
import_zod2 = require("zod");
|
|
308
327
|
init_blank();
|
|
309
328
|
init_graphemes();
|
|
329
|
+
init_languages();
|
|
310
330
|
STATUSLINE_HEADER_SEGMENTS = ["model", "provider", "route", "account", "identity", "headroom", "project", "vcs", "effort", "advisor", "version", "outputStyle", "cost", "dailyCost", "sessionName", "duration", "speed"];
|
|
311
331
|
STATUSLINE_ROWS = ["context", "quota", "addedDirs", "gitFiles", "memory", "environment", "sessionTime", "promptCache", "compactions", "tokens"];
|
|
312
332
|
STATUSLINE_SESSION_TIME_PARTS = ["started", "lastReply"];
|
|
@@ -333,6 +353,21 @@ var init_statusline = __esm({
|
|
|
333
353
|
];
|
|
334
354
|
DEFAULT_HEADER_SEGMENTS = ["model", "provider", "route", "account", "identity", "headroom"];
|
|
335
355
|
DEFAULT_ROWS = ["context", "quota"];
|
|
356
|
+
STATUSLINE_PRESETS = ["standard", "full", "essential", "minimal"];
|
|
357
|
+
GIT_WITH_DIRTY_MARKER = { enabled: true, showDirty: true, showAheadBehind: false, showLineDiff: false };
|
|
358
|
+
JJ_OFF = { enabled: false, showDirty: true, showConflicts: true };
|
|
359
|
+
PRESET_BUNDLES = {
|
|
360
|
+
standard: { layout: { header: DEFAULT_HEADER_SEGMENTS, rows: DEFAULT_ROWS }, git: GIT_WITH_DIRTY_MARKER, jj: JJ_OFF, usage: { resetLabel: false }, context: { breakdown: "never" } },
|
|
361
|
+
full: {
|
|
362
|
+
layout: { header: ["model", "project", "vcs", "effort", "advisor", "version", "outputStyle", "cost", "sessionName", "duration"], rows: ["context", "quota", "addedDirs", "memory", "environment", "promptCache", "compactions", "tokens"] },
|
|
363
|
+
git: GIT_WITH_DIRTY_MARKER,
|
|
364
|
+
jj: { enabled: true, showDirty: true, showConflicts: true },
|
|
365
|
+
usage: { resetLabel: true },
|
|
366
|
+
context: { breakdown: "critical" }
|
|
367
|
+
},
|
|
368
|
+
essential: { layout: { header: ["model", "project", "vcs", "duration"], rows: ["context", "addedDirs"] }, git: GIT_WITH_DIRTY_MARKER, jj: JJ_OFF, usage: { resetLabel: true }, context: { breakdown: "never" } },
|
|
369
|
+
minimal: { layout: { header: ["model", "project", "vcs"], rows: ["context", "addedDirs"] }, git: GIT_WITH_DIRTY_MARKER, jj: JJ_OFF, usage: { resetLabel: true }, context: { breakdown: "never" } }
|
|
370
|
+
};
|
|
336
371
|
STATUSLINE_PATH_LEVELS = ["1", "2", "3", "full"];
|
|
337
372
|
STATUSLINE_USAGE_VALUES = ["used", "remaining"];
|
|
338
373
|
STATUSLINE_TIME_FORMATS = ["relative", "absolute", "both", "elapsed", "elapsedAndAbsolute"];
|
|
@@ -358,7 +393,13 @@ var init_statusline = __esm({
|
|
|
358
393
|
AUTOCOMPACT_RESERVE_FRACTION = 0.165;
|
|
359
394
|
AUTOCOMPACT_RESERVE_RAMP_START = 0.05;
|
|
360
395
|
AUTOCOMPACT_RESERVE_RAMP_END = 0.5;
|
|
361
|
-
|
|
396
|
+
labelWithinColumns = (text) => (0, import_string_width2.default)(text) <= MAX_STATUSLINE_LABEL_COLUMNS;
|
|
397
|
+
labelWithinColumnsMessage = `must take no more than ${String(MAX_STATUSLINE_LABEL_COLUMNS)} terminal columns`;
|
|
398
|
+
labelShowsSomething = (text) => !drawsNothing(text);
|
|
399
|
+
labelShowsSomethingMessage = "must show something: a label of only combining marks or blank characters draws nothing";
|
|
400
|
+
labelIsPlainText = (text) => LABEL_RE2.test(text);
|
|
401
|
+
labelIsPlainTextMessage = "must be visible text without control characters";
|
|
402
|
+
windowLabel = import_zod2.z.string().refine((text) => text === "" || labelWithinColumns(text), labelWithinColumnsMessage).refine((text) => text === "" || labelShowsSomething(text), labelShowsSomethingMessage).refine((text) => text === "" || labelIsPlainText(text), labelIsPlainTextMessage);
|
|
362
403
|
overrideText = import_zod2.z.string().max(MAX_DISPLAY_TEXT_CHARS).regex(OPTIONAL_LABEL_RE, "must be visible text without control characters");
|
|
363
404
|
wholePercent = import_zod2.z.number().int().min(1).max(MAX_PERCENT);
|
|
364
405
|
thresholdPercent = import_zod2.z.number().int().min(0).max(MAX_PERCENT);
|
|
@@ -406,8 +447,8 @@ var init_statusline = __esm({
|
|
|
406
447
|
criticalAt: wholePercent.describe("The whole percentage of use at which a bar turns red.")
|
|
407
448
|
},
|
|
408
449
|
labels: {
|
|
409
|
-
fiveHour:
|
|
410
|
-
sevenDay:
|
|
450
|
+
fiveHour: windowLabel.describe("The name of the five-hour subscription window; empty uses the language's own name for it."),
|
|
451
|
+
sevenDay: windowLabel.describe("The name of the weekly subscription window; empty uses the language's own name for it.")
|
|
411
452
|
},
|
|
412
453
|
bar: {
|
|
413
454
|
width: import_zod2.z.number().int().min(1).max(MAX_BAR_CELLS).describe("A bar's width in cells before the line's spare width is shared out among the bars."),
|
|
@@ -473,7 +514,16 @@ var init_statusline = __esm({
|
|
|
473
514
|
}
|
|
474
515
|
};
|
|
475
516
|
UNSET_NOTE = "A layer may write null to return it to unset when a shallower layer sets it.";
|
|
517
|
+
LANGUAGE_DESCRIPTION = "The language of the words the statusline writes (labels, units of waiting such as `ago`, the names of effort levels): en, zh-Hans for Chinese in simplified characters, and zh-Hant for traditional; zh and zh-TW are read as zh-Hans and zh-Hant, and any other tag is refused. Durations, token counts, the dollar sign and clock times are written the same in every language, and a clock time follows the system locale and the clock settings.";
|
|
518
|
+
LANGUAGE_TAGS = [...STATUSLINE_LANGUAGES, "zh", "zh-TW"];
|
|
519
|
+
LANGUAGE_ALIASES = { zh: "zh-Hans", "zh-TW": "zh-Hant" };
|
|
520
|
+
TOP_LEVEL = {
|
|
521
|
+
language: import_zod2.z.enum(STATUSLINE_LANGUAGES).describe(LANGUAGE_DESCRIPTION),
|
|
522
|
+
preset: import_zod2.z.enum(STATUSLINE_PRESETS).describe("A named bundle of settings (layout.header, layout.rows, git.enabled, git.showDirty, git.showAheadBehind, git.showLineDiff, jj.enabled, jj.showDirty, jj.showConflicts, usage.resetLabel and context.breakdown) that this layer sets beneath the keys it names itself and above everything the shallower layers set: standard is the statusline's own; full, essential and minimal are claude-hud's presets. Each draws the model, project and version control segments and the context row; full adds the effort, advisor, version, output style, cost, session name and duration segments and the quota, added directories, memory, environment, prompt cache, compactions and session tokens rows, with the token breakdown at high use, essential adds the duration and the added directories row, and minimal adds the added directories row alone.")
|
|
523
|
+
};
|
|
476
524
|
StatuslineSchema = import_zod2.z.strictObject({
|
|
525
|
+
language: import_zod2.z.enum(LANGUAGE_TAGS).transform(canonicalLanguage).describe(LANGUAGE_DESCRIPTION).optional(),
|
|
526
|
+
preset: TOP_LEVEL.preset.optional(),
|
|
477
527
|
layout: import_zod2.z.strictObject(SHAPES.layout).partial().optional(),
|
|
478
528
|
model: import_zod2.z.strictObject(SHAPES.model).partial().optional(),
|
|
479
529
|
provider: import_zod2.z.strictObject(SHAPES.provider).partial().optional(),
|
|
@@ -496,6 +546,8 @@ var init_statusline = __esm({
|
|
|
496
546
|
jj: import_zod2.z.strictObject(SHAPES.jj).partial().optional()
|
|
497
547
|
});
|
|
498
548
|
ResolvedStatuslineSchema = import_zod2.z.strictObject({
|
|
549
|
+
language: TOP_LEVEL.language,
|
|
550
|
+
preset: TOP_LEVEL.preset,
|
|
499
551
|
layout: import_zod2.z.strictObject(SHAPES.layout),
|
|
500
552
|
model: import_zod2.z.strictObject(SHAPES.model),
|
|
501
553
|
provider: import_zod2.z.strictObject(SHAPES.provider),
|
|
@@ -518,6 +570,8 @@ var init_statusline = __esm({
|
|
|
518
570
|
jj: import_zod2.z.strictObject(SHAPES.jj)
|
|
519
571
|
});
|
|
520
572
|
STATUSLINE_DEFAULTS = {
|
|
573
|
+
language: "en",
|
|
574
|
+
preset: "standard",
|
|
521
575
|
layout: { header: [...DEFAULT_HEADER_SEGMENTS], rows: [...DEFAULT_ROWS], mode: "expanded", rule: "none", mergeBars: true, merge: [], rightAlign: [], maxWidth: 0, forceMaxWidth: false },
|
|
522
576
|
model: { format: "full", override: "", source: "client" },
|
|
523
577
|
provider: { name: "" },
|
|
@@ -526,7 +580,7 @@ var init_statusline = __esm({
|
|
|
526
580
|
advisor: { override: "" },
|
|
527
581
|
context: { bar: "shown", value: "both", estimate: "never", breakdown: "never" },
|
|
528
582
|
bands: { warnAt: 70, criticalAt: 90 },
|
|
529
|
-
labels: { fiveHour: "
|
|
583
|
+
labels: { fiveHour: "", sevenDay: "" },
|
|
530
584
|
bar: { width: 10, filled: "\u2588", empty: "\u2591" },
|
|
531
585
|
usage: { value: "used", bar: true, compact: false, resetLabel: false, modelScoped: false, timeFormat: "relative", threshold: 0, sevenDayThreshold: 0 },
|
|
532
586
|
clock: { hourCycle: "auto", seconds: false },
|
|
@@ -4598,7 +4652,7 @@ var init_package = __esm({
|
|
|
4598
4652
|
"package.json"() {
|
|
4599
4653
|
package_default = {
|
|
4600
4654
|
name: "claude-use",
|
|
4601
|
-
version: "11.
|
|
4655
|
+
version: "11.62.0",
|
|
4602
4656
|
description: "A profile manager and launcher for Claude Code that lets one person run multiple logins from one machine while controlling what gets shared between them.",
|
|
4603
4657
|
license: "MIT",
|
|
4604
4658
|
author: "Joseph Mearman <joseph@mearman.co.uk>",
|
package/dist/index.mjs
CHANGED
|
@@ -228,6 +228,15 @@ var init_graphemes = __esm({
|
|
|
228
228
|
}
|
|
229
229
|
});
|
|
230
230
|
|
|
231
|
+
// src/statusline/messages/languages.ts
|
|
232
|
+
var STATUSLINE_LANGUAGES;
|
|
233
|
+
var init_languages = __esm({
|
|
234
|
+
"src/statusline/messages/languages.ts"() {
|
|
235
|
+
"use strict";
|
|
236
|
+
STATUSLINE_LANGUAGES = ["en", "zh-Hans", "zh-Hant"];
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
|
|
231
240
|
// src/config/statusline.ts
|
|
232
241
|
import stringWidth2 from "string-width";
|
|
233
242
|
import { z as z2 } from "zod";
|
|
@@ -240,10 +249,13 @@ function isSingleVisibleGrapheme(text) {
|
|
|
240
249
|
function unsettable(setting) {
|
|
241
250
|
return setting.unwrap().nullable().optional().describe(`${setting.description ?? ""} ${UNSET_NOTE}`);
|
|
242
251
|
}
|
|
252
|
+
function canonicalLanguage(tag) {
|
|
253
|
+
return tag === "zh" || tag === "zh-TW" ? LANGUAGE_ALIASES[tag] : tag;
|
|
254
|
+
}
|
|
243
255
|
function isPlainObject(value) {
|
|
244
256
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
245
257
|
}
|
|
246
|
-
function
|
|
258
|
+
function mergeKeys(base, over) {
|
|
247
259
|
if (!isPlainObject(over)) {
|
|
248
260
|
return over === void 0 ? base : over;
|
|
249
261
|
}
|
|
@@ -252,7 +264,7 @@ function mergeStatuslineSettings(base, over) {
|
|
|
252
264
|
if (value === null) {
|
|
253
265
|
Reflect.deleteProperty(merged, key);
|
|
254
266
|
} else {
|
|
255
|
-
merged[key] =
|
|
267
|
+
merged[key] = mergeKeys(merged[key], value);
|
|
256
268
|
}
|
|
257
269
|
}
|
|
258
270
|
return merged;
|
|
@@ -260,6 +272,13 @@ function mergeStatuslineSettings(base, over) {
|
|
|
260
272
|
function contextBands({ bands, context }) {
|
|
261
273
|
return { warnAt: context.warnAt ?? bands.warnAt, criticalAt: context.criticalAt ?? bands.criticalAt };
|
|
262
274
|
}
|
|
275
|
+
function isPresetName(value) {
|
|
276
|
+
return STATUSLINE_PRESETS.some((name) => name === value);
|
|
277
|
+
}
|
|
278
|
+
function mergeStatuslineSettings(base, over) {
|
|
279
|
+
const preset = isPlainObject(over) ? over.preset : void 0;
|
|
280
|
+
return mergeKeys(isPresetName(preset) ? mergeKeys(base, PRESET_BUNDLES[preset]) : base, over);
|
|
281
|
+
}
|
|
263
282
|
function resolveStatusline(settings) {
|
|
264
283
|
const resolved = ResolvedStatuslineSchema.parse(mergeStatuslineSettings(STATUSLINE_DEFAULTS, settings));
|
|
265
284
|
if (resolved.bands.warnAt >= resolved.bands.criticalAt) {
|
|
@@ -279,12 +298,13 @@ function resolveStatusline(settings) {
|
|
|
279
298
|
}
|
|
280
299
|
return resolved;
|
|
281
300
|
}
|
|
282
|
-
var STATUSLINE_HEADER_SEGMENTS, STATUSLINE_ROWS, STATUSLINE_SESSION_TIME_PARTS, PROMPT_CACHE_TTL_SECONDS, STATUSLINE_COLOUR_NAMES, DEFAULT_HEADER_SEGMENTS, DEFAULT_ROWS, STATUSLINE_PATH_LEVELS, STATUSLINE_USAGE_VALUES, STATUSLINE_TIME_FORMATS, STATUSLINE_HOUR_CYCLES, MAX_PERCENT, MAX_STATUSLINE_PALETTE_INDEX, MAX_STATUSLINE_LABEL_COLUMNS, MIN_STATUSLINE_COLUMNS, MAX_STATUSLINE_COLUMNS, MAX_BAR_CELLS, MAX_ACCOUNT_USER_CHARS, MAX_DISPLAY_TEXT_CHARS, LABEL_RE2, OPTIONAL_LABEL_RE, mergeGroups, colourValue, barCharacter, STATUSLINE_CONTEXT_VALUES, STATUSLINE_CONTEXT_ESTIMATES, AUTOCOMPACT_RESERVE_FRACTION, AUTOCOMPACT_RESERVE_RAMP_START, AUTOCOMPACT_RESERVE_RAMP_END,
|
|
301
|
+
var STATUSLINE_HEADER_SEGMENTS, STATUSLINE_ROWS, STATUSLINE_SESSION_TIME_PARTS, PROMPT_CACHE_TTL_SECONDS, STATUSLINE_COLOUR_NAMES, DEFAULT_HEADER_SEGMENTS, DEFAULT_ROWS, STATUSLINE_PRESETS, GIT_WITH_DIRTY_MARKER, JJ_OFF, PRESET_BUNDLES, STATUSLINE_PATH_LEVELS, STATUSLINE_USAGE_VALUES, STATUSLINE_TIME_FORMATS, STATUSLINE_HOUR_CYCLES, MAX_PERCENT, MAX_STATUSLINE_PALETTE_INDEX, MAX_STATUSLINE_LABEL_COLUMNS, MIN_STATUSLINE_COLUMNS, MAX_STATUSLINE_COLUMNS, MAX_BAR_CELLS, MAX_ACCOUNT_USER_CHARS, MAX_DISPLAY_TEXT_CHARS, LABEL_RE2, OPTIONAL_LABEL_RE, mergeGroups, colourValue, barCharacter, STATUSLINE_CONTEXT_VALUES, STATUSLINE_CONTEXT_ESTIMATES, AUTOCOMPACT_RESERVE_FRACTION, AUTOCOMPACT_RESERVE_RAMP_START, AUTOCOMPACT_RESERVE_RAMP_END, labelWithinColumns, labelWithinColumnsMessage, labelShowsSomething, labelShowsSomethingMessage, labelIsPlainText, labelIsPlainTextMessage, windowLabel, overrideText, wholePercent, thresholdPercent, SHAPES, UNSET_NOTE, LANGUAGE_DESCRIPTION, LANGUAGE_TAGS, LANGUAGE_ALIASES, TOP_LEVEL, StatuslineSchema, ResolvedStatuslineSchema, STATUSLINE_DEFAULTS, STATUSLINE_ENV;
|
|
283
302
|
var init_statusline = __esm({
|
|
284
303
|
"src/config/statusline.ts"() {
|
|
285
304
|
"use strict";
|
|
286
305
|
init_blank();
|
|
287
306
|
init_graphemes();
|
|
307
|
+
init_languages();
|
|
288
308
|
STATUSLINE_HEADER_SEGMENTS = ["model", "provider", "route", "account", "identity", "headroom", "project", "vcs", "effort", "advisor", "version", "outputStyle", "cost", "dailyCost", "sessionName", "duration", "speed"];
|
|
289
309
|
STATUSLINE_ROWS = ["context", "quota", "addedDirs", "gitFiles", "memory", "environment", "sessionTime", "promptCache", "compactions", "tokens"];
|
|
290
310
|
STATUSLINE_SESSION_TIME_PARTS = ["started", "lastReply"];
|
|
@@ -311,6 +331,21 @@ var init_statusline = __esm({
|
|
|
311
331
|
];
|
|
312
332
|
DEFAULT_HEADER_SEGMENTS = ["model", "provider", "route", "account", "identity", "headroom"];
|
|
313
333
|
DEFAULT_ROWS = ["context", "quota"];
|
|
334
|
+
STATUSLINE_PRESETS = ["standard", "full", "essential", "minimal"];
|
|
335
|
+
GIT_WITH_DIRTY_MARKER = { enabled: true, showDirty: true, showAheadBehind: false, showLineDiff: false };
|
|
336
|
+
JJ_OFF = { enabled: false, showDirty: true, showConflicts: true };
|
|
337
|
+
PRESET_BUNDLES = {
|
|
338
|
+
standard: { layout: { header: DEFAULT_HEADER_SEGMENTS, rows: DEFAULT_ROWS }, git: GIT_WITH_DIRTY_MARKER, jj: JJ_OFF, usage: { resetLabel: false }, context: { breakdown: "never" } },
|
|
339
|
+
full: {
|
|
340
|
+
layout: { header: ["model", "project", "vcs", "effort", "advisor", "version", "outputStyle", "cost", "sessionName", "duration"], rows: ["context", "quota", "addedDirs", "memory", "environment", "promptCache", "compactions", "tokens"] },
|
|
341
|
+
git: GIT_WITH_DIRTY_MARKER,
|
|
342
|
+
jj: { enabled: true, showDirty: true, showConflicts: true },
|
|
343
|
+
usage: { resetLabel: true },
|
|
344
|
+
context: { breakdown: "critical" }
|
|
345
|
+
},
|
|
346
|
+
essential: { layout: { header: ["model", "project", "vcs", "duration"], rows: ["context", "addedDirs"] }, git: GIT_WITH_DIRTY_MARKER, jj: JJ_OFF, usage: { resetLabel: true }, context: { breakdown: "never" } },
|
|
347
|
+
minimal: { layout: { header: ["model", "project", "vcs"], rows: ["context", "addedDirs"] }, git: GIT_WITH_DIRTY_MARKER, jj: JJ_OFF, usage: { resetLabel: true }, context: { breakdown: "never" } }
|
|
348
|
+
};
|
|
314
349
|
STATUSLINE_PATH_LEVELS = ["1", "2", "3", "full"];
|
|
315
350
|
STATUSLINE_USAGE_VALUES = ["used", "remaining"];
|
|
316
351
|
STATUSLINE_TIME_FORMATS = ["relative", "absolute", "both", "elapsed", "elapsedAndAbsolute"];
|
|
@@ -336,7 +371,13 @@ var init_statusline = __esm({
|
|
|
336
371
|
AUTOCOMPACT_RESERVE_FRACTION = 0.165;
|
|
337
372
|
AUTOCOMPACT_RESERVE_RAMP_START = 0.05;
|
|
338
373
|
AUTOCOMPACT_RESERVE_RAMP_END = 0.5;
|
|
339
|
-
|
|
374
|
+
labelWithinColumns = (text) => stringWidth2(text) <= MAX_STATUSLINE_LABEL_COLUMNS;
|
|
375
|
+
labelWithinColumnsMessage = `must take no more than ${String(MAX_STATUSLINE_LABEL_COLUMNS)} terminal columns`;
|
|
376
|
+
labelShowsSomething = (text) => !drawsNothing(text);
|
|
377
|
+
labelShowsSomethingMessage = "must show something: a label of only combining marks or blank characters draws nothing";
|
|
378
|
+
labelIsPlainText = (text) => LABEL_RE2.test(text);
|
|
379
|
+
labelIsPlainTextMessage = "must be visible text without control characters";
|
|
380
|
+
windowLabel = z2.string().refine((text) => text === "" || labelWithinColumns(text), labelWithinColumnsMessage).refine((text) => text === "" || labelShowsSomething(text), labelShowsSomethingMessage).refine((text) => text === "" || labelIsPlainText(text), labelIsPlainTextMessage);
|
|
340
381
|
overrideText = z2.string().max(MAX_DISPLAY_TEXT_CHARS).regex(OPTIONAL_LABEL_RE, "must be visible text without control characters");
|
|
341
382
|
wholePercent = z2.number().int().min(1).max(MAX_PERCENT);
|
|
342
383
|
thresholdPercent = z2.number().int().min(0).max(MAX_PERCENT);
|
|
@@ -384,8 +425,8 @@ var init_statusline = __esm({
|
|
|
384
425
|
criticalAt: wholePercent.describe("The whole percentage of use at which a bar turns red.")
|
|
385
426
|
},
|
|
386
427
|
labels: {
|
|
387
|
-
fiveHour:
|
|
388
|
-
sevenDay:
|
|
428
|
+
fiveHour: windowLabel.describe("The name of the five-hour subscription window; empty uses the language's own name for it."),
|
|
429
|
+
sevenDay: windowLabel.describe("The name of the weekly subscription window; empty uses the language's own name for it.")
|
|
389
430
|
},
|
|
390
431
|
bar: {
|
|
391
432
|
width: z2.number().int().min(1).max(MAX_BAR_CELLS).describe("A bar's width in cells before the line's spare width is shared out among the bars."),
|
|
@@ -451,7 +492,16 @@ var init_statusline = __esm({
|
|
|
451
492
|
}
|
|
452
493
|
};
|
|
453
494
|
UNSET_NOTE = "A layer may write null to return it to unset when a shallower layer sets it.";
|
|
495
|
+
LANGUAGE_DESCRIPTION = "The language of the words the statusline writes (labels, units of waiting such as `ago`, the names of effort levels): en, zh-Hans for Chinese in simplified characters, and zh-Hant for traditional; zh and zh-TW are read as zh-Hans and zh-Hant, and any other tag is refused. Durations, token counts, the dollar sign and clock times are written the same in every language, and a clock time follows the system locale and the clock settings.";
|
|
496
|
+
LANGUAGE_TAGS = [...STATUSLINE_LANGUAGES, "zh", "zh-TW"];
|
|
497
|
+
LANGUAGE_ALIASES = { zh: "zh-Hans", "zh-TW": "zh-Hant" };
|
|
498
|
+
TOP_LEVEL = {
|
|
499
|
+
language: z2.enum(STATUSLINE_LANGUAGES).describe(LANGUAGE_DESCRIPTION),
|
|
500
|
+
preset: z2.enum(STATUSLINE_PRESETS).describe("A named bundle of settings (layout.header, layout.rows, git.enabled, git.showDirty, git.showAheadBehind, git.showLineDiff, jj.enabled, jj.showDirty, jj.showConflicts, usage.resetLabel and context.breakdown) that this layer sets beneath the keys it names itself and above everything the shallower layers set: standard is the statusline's own; full, essential and minimal are claude-hud's presets. Each draws the model, project and version control segments and the context row; full adds the effort, advisor, version, output style, cost, session name and duration segments and the quota, added directories, memory, environment, prompt cache, compactions and session tokens rows, with the token breakdown at high use, essential adds the duration and the added directories row, and minimal adds the added directories row alone.")
|
|
501
|
+
};
|
|
454
502
|
StatuslineSchema = z2.strictObject({
|
|
503
|
+
language: z2.enum(LANGUAGE_TAGS).transform(canonicalLanguage).describe(LANGUAGE_DESCRIPTION).optional(),
|
|
504
|
+
preset: TOP_LEVEL.preset.optional(),
|
|
455
505
|
layout: z2.strictObject(SHAPES.layout).partial().optional(),
|
|
456
506
|
model: z2.strictObject(SHAPES.model).partial().optional(),
|
|
457
507
|
provider: z2.strictObject(SHAPES.provider).partial().optional(),
|
|
@@ -474,6 +524,8 @@ var init_statusline = __esm({
|
|
|
474
524
|
jj: z2.strictObject(SHAPES.jj).partial().optional()
|
|
475
525
|
});
|
|
476
526
|
ResolvedStatuslineSchema = z2.strictObject({
|
|
527
|
+
language: TOP_LEVEL.language,
|
|
528
|
+
preset: TOP_LEVEL.preset,
|
|
477
529
|
layout: z2.strictObject(SHAPES.layout),
|
|
478
530
|
model: z2.strictObject(SHAPES.model),
|
|
479
531
|
provider: z2.strictObject(SHAPES.provider),
|
|
@@ -496,6 +548,8 @@ var init_statusline = __esm({
|
|
|
496
548
|
jj: z2.strictObject(SHAPES.jj)
|
|
497
549
|
});
|
|
498
550
|
STATUSLINE_DEFAULTS = {
|
|
551
|
+
language: "en",
|
|
552
|
+
preset: "standard",
|
|
499
553
|
layout: { header: [...DEFAULT_HEADER_SEGMENTS], rows: [...DEFAULT_ROWS], mode: "expanded", rule: "none", mergeBars: true, merge: [], rightAlign: [], maxWidth: 0, forceMaxWidth: false },
|
|
500
554
|
model: { format: "full", override: "", source: "client" },
|
|
501
555
|
provider: { name: "" },
|
|
@@ -504,7 +558,7 @@ var init_statusline = __esm({
|
|
|
504
558
|
advisor: { override: "" },
|
|
505
559
|
context: { bar: "shown", value: "both", estimate: "never", breakdown: "never" },
|
|
506
560
|
bands: { warnAt: 70, criticalAt: 90 },
|
|
507
|
-
labels: { fiveHour: "
|
|
561
|
+
labels: { fiveHour: "", sevenDay: "" },
|
|
508
562
|
bar: { width: 10, filled: "\u2588", empty: "\u2591" },
|
|
509
563
|
usage: { value: "used", bar: true, compact: false, resetLabel: false, modelScoped: false, timeFormat: "relative", threshold: 0, sevenDayThreshold: 0 },
|
|
510
564
|
clock: { hourCycle: "auto", seconds: false },
|
|
@@ -4574,7 +4628,7 @@ var init_package = __esm({
|
|
|
4574
4628
|
"package.json"() {
|
|
4575
4629
|
package_default = {
|
|
4576
4630
|
name: "claude-use",
|
|
4577
|
-
version: "11.
|
|
4631
|
+
version: "11.62.0",
|
|
4578
4632
|
description: "A profile manager and launcher for Claude Code that lets one person run multiple logins from one machine while controlling what gets shared between them.",
|
|
4579
4633
|
license: "MIT",
|
|
4580
4634
|
author: "Joseph Mearman <joseph@mearman.co.uk>",
|