agent-shim 11.65.10 → 11.66.1

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 CHANGED
@@ -25544,7 +25544,7 @@ function resolveStatusline(settings2) {
25544
25544
  }
25545
25545
  return resolved;
25546
25546
  }
25547
- var STATUSLINE_HEADER_SEGMENTS, STATUSLINE_ROWS, STATUSLINE_SESSION_TIME_PARTS, PROMPT_CACHE_TTL_SECONDS, ORANGE_PALETTE_INDEX, 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, MAX_EXTRA_COMMAND_ARGUMENTS, MAX_EXTRA_COMMAND_ARGUMENT_CHARS, STATUSLINE_EXTRA_GROUP, commandArgument, 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;
25547
+ var STATUSLINE_HEADER_SEGMENTS, STATUSLINE_ROWS, STATUSLINE_SESSION_TIME_PARTS, PROMPT_CACHE_TTL_SECONDS, ORANGE_PALETTE_INDEX, 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_BAR_GRADIENTS, 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, MAX_EXTRA_COMMAND_ARGUMENTS, MAX_EXTRA_COMMAND_ARGUMENT_CHARS, STATUSLINE_EXTRA_GROUP, commandArgument, 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;
25548
25548
  var init_statusline = __esm({
25549
25549
  "src/config/statusline.ts"() {
25550
25550
  "use strict";
@@ -25597,6 +25597,7 @@ var init_statusline = __esm({
25597
25597
  };
25598
25598
  STATUSLINE_PATH_LEVELS = ["1", "2", "3", "full"];
25599
25599
  STATUSLINE_USAGE_VALUES = ["used", "remaining"];
25600
+ STATUSLINE_BAR_GRADIENTS = ["off", "use", "width"];
25600
25601
  STATUSLINE_TIME_FORMATS = ["relative", "absolute", "both", "elapsed", "elapsedAndAbsolute"];
25601
25602
  STATUSLINE_HOUR_CYCLES = ["auto", "h11", "h12", "h23", "h24"];
25602
25603
  MAX_PERCENT = 100;
@@ -25667,8 +25668,8 @@ var init_statusline = __esm({
25667
25668
  context: {
25668
25669
  bar: external_exports.enum(["shown", "hidden"]).describe("Whether the context row draws its bar, or only its figures on one line of text."),
25669
25670
  value: external_exports.enum(STATUSLINE_CONTEXT_VALUES).describe("The context figure: both (the tokens held against the window, then the percentage), percent, tokens, or remaining (the percentage of the window left)."),
25670
- warnAt: wholePercent.optional().describe("The whole percentage of the context window at which the context bar turns yellow; while it is unset the context bar follows bands.warnAt."),
25671
- criticalAt: wholePercent.optional().describe("The whole percentage of the context window at which the context bar turns red and, with context.breakdown set to critical, the token breakdown appears; while it is unset the context bar follows bands.criticalAt."),
25671
+ warnAt: wholePercent.optional().describe("The whole percentage of the context window at which the context bar turns yellow when bar.gradient is off (a bar.gradient of use holds the warning colour exactly there, and width colours a bar by its cells, not its use, once a cell of its used part is drawn; both fall back to the band colours when a stop's colour is default or dim, and width also when no cell of its used part is drawn); while it is unset the context bar follows bands.warnAt."),
25672
+ criticalAt: wholePercent.optional().describe("The whole percentage of the context window at which the context bar turns red when bar.gradient is off (a bar.gradient of use holds the critical colour from there, and width colours a bar by its cells, not its use, once a cell of its used part is drawn; both fall back to the band colours when a stop's colour is default or dim, and width also when no cell of its used part is drawn) and, with context.breakdown set to critical, the token breakdown appears; while it is unset the context bar follows bands.criticalAt."),
25672
25673
  autoCompactWindow: external_exports.number().int().positive().optional().describe("A window in tokens to measure the context against instead of the model's, matching the figure /context gives once Claude Code compacts before the window is full. While it is set, the row draws nothing until the client reports the tokens held, since without them there is nothing to measure against it; while it is unset the model's own window is used."),
25673
25674
  estimate: external_exports.enum(STATUSLINE_CONTEXT_ESTIMATES).describe(`What to draw when the client reports no percentage of the window in use, or reports 0 while tokens are already held (which is how a client says it has not worked it out yet): never (nothing is estimated: a percentage reported, 0 included, is drawn as it is, and none reported draws nothing), raw (the tokens held over the window), or buffered (that, plus the ${String(AUTOCOMPACT_RESERVE_FRACTION * MAX_PERCENT)}% of the window Claude Code reserves for compaction, rising from nothing at ${String(AUTOCOMPACT_RESERVE_RAMP_START * MAX_PERCENT)}% of the window held to the whole reserve at ${String(AUTOCOMPACT_RESERVE_RAMP_END * MAX_PERCENT)}%).`),
25674
25675
  breakdown: external_exports.enum(["never", "critical"]).describe("Whether to add the input and cache tokens of the last request to the context row once its use reaches context.criticalAt.")
@@ -25683,8 +25684,8 @@ var init_statusline = __esm({
25683
25684
  )
25684
25685
  },
25685
25686
  bands: {
25686
- warnAt: wholePercent.describe("The whole percentage of use at which a bar turns yellow; it must be below criticalAt."),
25687
- criticalAt: wholePercent.describe("The whole percentage of use at which a bar turns red.")
25687
+ warnAt: wholePercent.describe("The whole percentage of use at which a bar turns yellow when bar.gradient is off; it must be below criticalAt. A bar.gradient of use holds the warning colour exactly there, and width colours a bar by its cells, not its use, once a cell of its used part is drawn; both fall back to the band colours when a stop's colour is default or dim, and width also when no cell of its used part is drawn."),
25688
+ criticalAt: wholePercent.describe("The whole percentage of use at which a bar turns red when bar.gradient is off. A bar.gradient of use holds the critical colour from there, and width colours a bar by its cells, not its use, once a cell of its used part is drawn; both fall back to the band colours when a stop's colour is default or dim, and width also when no cell of its used part is drawn.")
25688
25689
  },
25689
25690
  labels: {
25690
25691
  fiveHour: windowLabel.describe("The name of the five-hour subscription window; empty uses the language's own name for it."),
@@ -25692,6 +25693,9 @@ var init_statusline = __esm({
25692
25693
  },
25693
25694
  bar: {
25694
25695
  width: external_exports.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."),
25696
+ gradient: external_exports.enum(STATUSLINE_BAR_GRADIENTS).describe(
25697
+ "How a bar's used part is coloured: off (the default) draws the band's single colour, the bar's own colour below the warning threshold, the warning colour from there and the critical one from the critical threshold; use blends the bar's colour with its use, from its own colour at none in use to the warning colour at the warning threshold and the critical one at the critical threshold, holding exactly the colour the bands draw at each threshold and the critical colour above it; and width colours each cell of the used part across the bar's width, from the bar's own colour at the first cell to the critical one at the last, whatever the use, with a bar one cell wide drawing that cell in its own colour. A bar's thresholds are bands.warnAt and bands.criticalAt, the context bar's own where it sets them, and the figures beside a bar keep the band's colours in every mode. The unused part keeps colours.empty in every mode, and when that is default or dim, which set no colour of their own, it draws in the colour the used part ends in: under off the band's colour, under use the blend for the bar's use (even where no cell of the used part is drawn), and under width the last drawn cell's colour (the band's colour where no cell is drawn). A gradient blends RGB values, so a colour name, or a palette index below 16, is blended at the default RGB the xterm scheme gives it rather than the shade a themed terminal draws it in, while a stop itself, where a mode holds it exactly, is drawn as the bands draw that role. A bar whose stops include a role set to default or dim, which names no colour of its own, is drawn in the band's single colour: for use those stops are the bar's own, warning and critical roles, and for width its own and critical roles. A width bar with no cell of its used part drawn has no cell to colour, so it takes the band's colours as off does."
25698
+ ),
25695
25699
  filled: barCharacter.describe("The character that draws the used part of a bar."),
25696
25700
  empty: barCharacter.describe("The character that draws the unused part of a bar.")
25697
25701
  },
@@ -25726,11 +25730,11 @@ var init_statusline = __esm({
25726
25730
  maxVisible: external_exports.number().int().min(0).describe("The most kinds of finished tool call the tools row names, the most-used first, with the rest counted as +N more. 0 names every kind.")
25727
25731
  },
25728
25732
  colours: {
25729
- context: colourValue.describe("The colour of the context bar and its figures below the warning threshold."),
25730
- usage: colourValue.describe("The colour of the quota bars and their figures below the warning threshold."),
25731
- warning: colourValue.describe("The colour of the context bar at or above bands.warnAt, and of a cache hit share that is middling."),
25732
- usageWarning: colourValue.describe("The colour of a quota bar at or above bands.warnAt."),
25733
- critical: colourValue.describe("The colour of a bar at or above bands.criticalAt, and of a cache hit share that is nearly nothing."),
25733
+ context: colourValue.describe("The colour of the context bar below the warning threshold while bar.gradient is off, of the figures beside it below that threshold in every mode, and the colour a bar.gradient of use or width blends the context bar from (at none in use for use, at the first cell for width), while a gradient bar with a stop whose colour is default or dim, or a width bar with no cell of its used part drawn, takes the band's colours."),
25734
+ usage: colourValue.describe("The colour of the quota bars and the memory bar below the warning threshold while bar.gradient is off, of the figures beside them below that threshold in every mode, and the colour a bar.gradient of use or width blends those bars from (at none in use for use, at the first cell for width), while a gradient bar with a stop whose colour is default or dim, or a width bar with no cell of its used part drawn, takes the band's colours."),
25735
+ warning: colourValue.describe("The colour of the context bar from its warning threshold (bands.warnAt, or context.warnAt where that is set) up to its critical threshold (bands.criticalAt, or context.criticalAt where that is set) when bar.gradient is off (a bar.gradient of use holds it exactly at the threshold, and a gradient bar with a stop whose colour is default or dim draws the band's colours instead, and so does a width bar with no cell of its used part drawn), of the figures beside the bar from that threshold up to its critical threshold in every mode, and of a cache hit share that is middling."),
25736
+ usageWarning: colourValue.describe("The colour of a quota bar or the memory bar from bands.warnAt up to bands.criticalAt when bar.gradient is off (a bar.gradient of use holds it exactly at bands.warnAt, and a gradient bar with a stop whose colour is default or dim draws the band's colours instead, and so does a width bar with no cell of its used part drawn), and of the figures beside the bar from that threshold up to bands.criticalAt in every mode."),
25737
+ critical: colourValue.describe("The colour of a bar at or above its critical threshold (bands.criticalAt, or context.criticalAt for the context bar where that is set) when bar.gradient is off or use, of the last cell of a full bar more than one cell wide under a bar.gradient of width (a bar one cell wide draws its cell in its own colour, and a width bar whose own colour or this one is default or dim, or that has no cell of its used part drawn, draws the band's colours instead), of the figures beside a bar from its critical threshold in every mode, and of a cache hit share that is nearly nothing."),
25734
25738
  model: colourValue.describe("The colour of the model and provider segments."),
25735
25739
  label: colourValue.describe("The colour of labels and secondary text: row labels, and the route, account, identity and headroom segments."),
25736
25740
  empty: colourValue.describe("The colour of the unused part of a bar."),
@@ -25836,7 +25840,7 @@ var init_statusline = __esm({
25836
25840
  extra: { command: [] },
25837
25841
  bands: { warnAt: 70, criticalAt: 90 },
25838
25842
  labels: { fiveHour: "", sevenDay: "" },
25839
- bar: { width: 10, filled: "\u2588", empty: "\u2591" },
25843
+ bar: { width: 10, gradient: "off", filled: "\u2588", empty: "\u2591" },
25840
25844
  usage: { value: "used", bar: true, compact: false, resetLabel: false, modelScoped: false, timeFormat: "relative", threshold: 0, sevenDayThreshold: 0 },
25841
25845
  clock: { hourCycle: "auto", seconds: false },
25842
25846
  cost: { routed: false },
@@ -37172,7 +37176,7 @@ var init_package = __esm({
37172
37176
  "package.json"() {
37173
37177
  package_default = {
37174
37178
  name: "agent-shim",
37175
- version: "11.65.10",
37179
+ version: "11.66.1",
37176
37180
  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.",
37177
37181
  license: "MIT",
37178
37182
  author: "Joseph Mearman <joseph@mearman.co.uk>",
@@ -140393,18 +140397,18 @@ function sweepStaleRunDirectories(root) {
140393
140397
  }
140394
140398
  }
140395
140399
  }
140396
- function runProgram(runRoot, file2, args, cwd, options = {}) {
140397
- return options.outputInFile === true ? runWithOutputInFile(runRoot, file2, args, cwd) : runWithPipe(file2, args, cwd);
140400
+ function runProgram(runRoot, timeoutMs, file2, args, cwd, options = {}) {
140401
+ return options.outputInFile === true ? runWithOutputInFile(runRoot, timeoutMs, file2, args, cwd) : runWithPipe(timeoutMs, file2, args, cwd);
140398
140402
  }
140399
- function runWithPipe(file2, args, cwd) {
140403
+ function runWithPipe(timeoutMs, file2, args, cwd) {
140400
140404
  try {
140401
- const result = spawnSyncBlocking("a statusline command", file2, args, { cwd, encoding: "utf8", timeout: RUN_TIMEOUT_MS, killSignal: "SIGKILL", maxBuffer: RUN_MAX_OUTPUT_BYTES, stdio: ["ignore", "pipe", "ignore"], windowsHide: true });
140405
+ const result = spawnSyncBlocking("a statusline command", file2, args, { cwd, encoding: "utf8", timeout: timeoutMs, killSignal: "SIGKILL", maxBuffer: RUN_MAX_OUTPUT_BYTES, stdio: ["ignore", "pipe", "ignore"], windowsHide: true });
140402
140406
  return result.error === void 0 && result.status === 0 ? result.stdout : void 0;
140403
140407
  } catch {
140404
140408
  return void 0;
140405
140409
  }
140406
140410
  }
140407
- function runWithOutputInFile(runRoot, file2, args, cwd) {
140411
+ function runWithOutputInFile(runRoot, timeoutMs, file2, args, cwd) {
140408
140412
  let directory;
140409
140413
  try {
140410
140414
  sweepStaleRunDirectories(runRoot);
@@ -140413,7 +140417,7 @@ function runWithOutputInFile(runRoot, file2, args, cwd) {
140413
140417
  const descriptor = import_node_fs23.default.openSync(import_node_path56.default.join(directory, "stdout"), "wx+", RUN_FILE_MODE);
140414
140418
  try {
140415
140419
  const limited = process.platform === "win32" ? { command: file2, args } : fileSizeLimitedCommand("/bin/sh", file2, args);
140416
- const result = spawnSyncBlocking("a statusline command", limited.command, limited.args, { cwd, timeout: RUN_TIMEOUT_MS, killSignal: "SIGKILL", stdio: ["ignore", descriptor, "ignore"], windowsHide: true });
140420
+ const result = spawnSyncBlocking("a statusline command", limited.command, limited.args, { cwd, timeout: timeoutMs, killSignal: "SIGKILL", stdio: ["ignore", descriptor, "ignore"], windowsHide: true });
140417
140421
  return result.error === void 0 && result.status === 0 ? readOutput(descriptor) : void 0;
140418
140422
  } finally {
140419
140423
  import_node_fs23.default.closeSync(descriptor);
@@ -140443,7 +140447,7 @@ function discard(target) {
140443
140447
  function readMemoryUse() {
140444
140448
  const totalBytes = import_node_os12.default.totalmem();
140445
140449
  if (process.platform === "darwin") {
140446
- const output2 = runWithPipe("/usr/bin/vm_stat", [], process.cwd());
140450
+ const output2 = runWithPipe(RUN_TIMEOUT_MS, "/usr/bin/vm_stat", [], process.cwd());
140447
140451
  const usedBytes = output2 === void 0 ? void 0 : usedBytesFromVmStat(output2);
140448
140452
  return usedBytes === void 0 ? void 0 : { usedBytes, totalBytes };
140449
140453
  }
@@ -140453,7 +140457,7 @@ function readMemoryUse() {
140453
140457
  }
140454
140458
  return { usedBytes: totalBytes - import_node_os12.default.freemem(), totalBytes };
140455
140459
  }
140456
- function realStatuslinePorts(env, stateDirectory) {
140460
+ function realStatuslinePorts(env, stateDirectory, runTimeoutMs = RUN_TIMEOUT_MS) {
140457
140461
  const { locale, timeZone } = Intl.DateTimeFormat().resolvedOptions();
140458
140462
  return {
140459
140463
  env,
@@ -140476,7 +140480,7 @@ function realStatuslinePorts(env, stateDirectory) {
140476
140480
  return void 0;
140477
140481
  }
140478
140482
  },
140479
- run: (file2, args, cwd, options) => runProgram(import_node_path56.default.join(stateDirectory, RUN_DIRECTORY), file2, args, cwd, options),
140483
+ run: (file2, args, cwd, options) => runProgram(import_node_path56.default.join(stateDirectory, RUN_DIRECTORY), runTimeoutMs, file2, args, cwd, options),
140480
140484
  entryKind: (target) => {
140481
140485
  try {
140482
140486
  return import_node_fs23.default.lstatSync(target).isDirectory() ? "directory" : "other";
@@ -141000,6 +141004,78 @@ function durationSegment(context) {
141000
141004
  return startedAtMs === void 0 ? void 0 : `\u23F1\uFE0F ${formatElapsed(context.nowMs - startedAtMs)}`;
141001
141005
  }
141002
141006
 
141007
+ // src/statusline/colour.ts
141008
+ init_statusline();
141009
+ var FULL_CHANNEL = 255;
141010
+ var NORMAL_PRIMARY = 205;
141011
+ var SCHEME_WHITE = 229;
141012
+ var SCHEME_BLUE = 238;
141013
+ var BRIGHT_BLACK_GREY = 127;
141014
+ var BRIGHT_BLUE_TINT = 92;
141015
+ var NAMED_DEFAULT_RGB = {
141016
+ black: [0, 0, 0],
141017
+ red: [NORMAL_PRIMARY, 0, 0],
141018
+ green: [0, NORMAL_PRIMARY, 0],
141019
+ yellow: [NORMAL_PRIMARY, NORMAL_PRIMARY, 0],
141020
+ blue: [0, 0, SCHEME_BLUE],
141021
+ magenta: [NORMAL_PRIMARY, 0, NORMAL_PRIMARY],
141022
+ cyan: [0, NORMAL_PRIMARY, NORMAL_PRIMARY],
141023
+ white: [SCHEME_WHITE, SCHEME_WHITE, SCHEME_WHITE],
141024
+ brightBlack: [BRIGHT_BLACK_GREY, BRIGHT_BLACK_GREY, BRIGHT_BLACK_GREY],
141025
+ brightRed: [FULL_CHANNEL, 0, 0],
141026
+ brightGreen: [0, FULL_CHANNEL, 0],
141027
+ brightYellow: [FULL_CHANNEL, FULL_CHANNEL, 0],
141028
+ brightBlue: [BRIGHT_BLUE_TINT, BRIGHT_BLUE_TINT, FULL_CHANNEL],
141029
+ brightMagenta: [FULL_CHANNEL, 0, FULL_CHANNEL],
141030
+ brightCyan: [0, FULL_CHANNEL, FULL_CHANNEL],
141031
+ brightWhite: [FULL_CHANNEL, FULL_CHANNEL, FULL_CHANNEL]
141032
+ };
141033
+ function isNamedColour(value2) {
141034
+ return value2 !== "default" && value2 !== "dim" && STATUSLINE_COLOUR_NAMES.some((name) => name === value2);
141035
+ }
141036
+ var NAMED_RGB_IN_PALETTE_ORDER = STATUSLINE_COLOUR_NAMES.filter(isNamedColour).map((name) => NAMED_DEFAULT_RGB[name]);
141037
+ var CUBE_SIDE = 6;
141038
+ var CUBE_FIRST_INDEX = 16;
141039
+ var GREYSCALE_FIRST_INDEX = CUBE_FIRST_INDEX + CUBE_SIDE * CUBE_SIDE * CUBE_SIDE;
141040
+ var GREYSCALE_START = 8;
141041
+ var GREYSCALE_STEP = 10;
141042
+ var CUBE_CHANNEL_BASE = 55;
141043
+ var CUBE_CHANNEL_STEP = 40;
141044
+ function cubeChannel(level) {
141045
+ return level === 0 ? 0 : CUBE_CHANNEL_BASE + CUBE_CHANNEL_STEP * level;
141046
+ }
141047
+ function paletteIndexRgb(index) {
141048
+ if (index < CUBE_FIRST_INDEX) {
141049
+ return NAMED_RGB_IN_PALETTE_ORDER[index];
141050
+ }
141051
+ if (index < GREYSCALE_FIRST_INDEX) {
141052
+ const cube = index - CUBE_FIRST_INDEX;
141053
+ return [cubeChannel(Math.floor(cube / CUBE_SIDE ** 2)), cubeChannel(Math.floor(cube / CUBE_SIDE) % CUBE_SIDE), cubeChannel(cube % CUBE_SIDE)];
141054
+ }
141055
+ const grey = GREYSCALE_START + GREYSCALE_STEP * (index - GREYSCALE_FIRST_INDEX);
141056
+ return [grey, grey, grey];
141057
+ }
141058
+ var CHANNEL_DIGITS = 2;
141059
+ var HEX_RADIX2 = 16;
141060
+ var HASH_LENGTH = 1;
141061
+ function rgbOfHex(value2) {
141062
+ const channel = (index) => Number.parseInt(value2.slice(HASH_LENGTH + index * CHANNEL_DIGITS, HASH_LENGTH + (index + 1) * CHANNEL_DIGITS), HEX_RADIX2);
141063
+ return [channel(0), channel(1), channel(2)];
141064
+ }
141065
+ function rgbOfSetting(value2) {
141066
+ if (typeof value2 === "number") {
141067
+ return paletteIndexRgb(value2);
141068
+ }
141069
+ if (value2.startsWith("#")) {
141070
+ return rgbOfHex(value2);
141071
+ }
141072
+ return isNamedColour(value2) ? NAMED_DEFAULT_RGB[value2] : void 0;
141073
+ }
141074
+ function blendRgb(from, to2, at2) {
141075
+ const channel = (start, end) => Math.round(start + (end - start) * at2);
141076
+ return [channel(from[0], to2[0]), channel(from[1], to2[1]), channel(from[2], to2[2])];
141077
+ }
141078
+
141003
141079
  // src/statusline/palette.ts
141004
141080
  init_statusline();
141005
141081
  var RESET = `${ESCAPE}[0m`;
@@ -141026,16 +141102,15 @@ var SGR_BY_NAME = {
141026
141102
  function isColourName(value2) {
141027
141103
  return STATUSLINE_COLOUR_NAMES.some((name) => name === value2);
141028
141104
  }
141029
- var CHANNELS = 3;
141030
- var CHANNEL_DIGITS = 2;
141031
- var HEX_RADIX2 = 16;
141105
+ function rgbSgr(channels) {
141106
+ return `38;2;${channels.join(";")}`;
141107
+ }
141032
141108
  function sgrOf(value2) {
141033
141109
  if (typeof value2 === "number") {
141034
141110
  return `38;5;${String(value2)}`;
141035
141111
  }
141036
141112
  if (value2.startsWith("#")) {
141037
- const channels = Array.from({ length: CHANNELS }, (_, index) => Number.parseInt(value2.slice(1 + index * CHANNEL_DIGITS, 1 + (index + 1) * CHANNEL_DIGITS), HEX_RADIX2));
141038
- return `38;2;${channels.join(";")}`;
141113
+ return rgbSgr(rgbOfHex(value2));
141039
141114
  }
141040
141115
  return isColourName(value2) ? SGR_BY_NAME[value2] : "";
141041
141116
  }
@@ -141052,7 +141127,9 @@ function createPalette(colours, enabled) {
141052
141127
  paint: (role, text5) => {
141053
141128
  const start = ansi(role);
141054
141129
  return start === "" ? text5 : `${start}${text5}${RESET}`;
141055
- }
141130
+ },
141131
+ rgb: (channels) => enabled ? `${ESCAPE}[${rgbSgr(channels)}m` : "",
141132
+ rgbOf: (role) => rgbOfSetting(colours[role])
141056
141133
  };
141057
141134
  }
141058
141135
 
@@ -141068,21 +141145,71 @@ var ONE_PERCENT = 1;
141068
141145
  function withColor(color, text5) {
141069
141146
  return color === "" ? text5 : `${color}${text5}${RESET}`;
141070
141147
  }
141148
+ function warningRoleOf(style) {
141149
+ return style.okRole === "usage" ? "usageWarning" : "warning";
141150
+ }
141071
141151
  function statusColor(fraction, isUsedMetric, style) {
141072
141152
  const yellowAt = style.bands.warnAt / FULL_PERCENT3;
141073
141153
  const redAt = style.bands.criticalAt / FULL_PERCENT3;
141074
- const warningRole = style.okRole === "usage" ? "usageWarning" : "warning";
141075
141154
  const { ansi } = style.palette;
141076
141155
  if (isUsedMetric) {
141077
141156
  if (fraction >= redAt) {
141078
141157
  return ansi("critical");
141079
141158
  }
141080
- return fraction >= yellowAt ? ansi(warningRole) : ansi(style.okRole);
141159
+ return fraction >= yellowAt ? ansi(warningRoleOf(style)) : ansi(style.okRole);
141081
141160
  }
141082
141161
  if (fraction <= 1 - redAt) {
141083
141162
  return ansi("critical");
141084
141163
  }
141085
- return fraction <= 1 - yellowAt ? ansi(warningRole) : ansi(style.okRole);
141164
+ return fraction <= 1 - yellowAt ? ansi(warningRoleOf(style)) : ansi(style.okRole);
141165
+ }
141166
+ function stopOf(role, style) {
141167
+ const rgb = style.palette.rgbOf(role);
141168
+ return rgb === void 0 ? void 0 : { role, rgb };
141169
+ }
141170
+ function colourBetween(from, to2, at2, style) {
141171
+ if (at2 <= 0) {
141172
+ return style.palette.ansi(from.role);
141173
+ }
141174
+ if (at2 >= 1) {
141175
+ return style.palette.ansi(to2.role);
141176
+ }
141177
+ return style.palette.rgb(blendRgb(from.rgb, to2.rgb, at2));
141178
+ }
141179
+ function gradientColorOf(fraction, style) {
141180
+ const ok2 = stopOf(style.okRole, style);
141181
+ const warning = stopOf(warningRoleOf(style), style);
141182
+ const critical = stopOf("critical", style);
141183
+ if (ok2 === void 0 || warning === void 0 || critical === void 0) {
141184
+ return void 0;
141185
+ }
141186
+ const warnAt = style.bands.warnAt / FULL_PERCENT3;
141187
+ const criticalAt = style.bands.criticalAt / FULL_PERCENT3;
141188
+ return fraction < warnAt ? colourBetween(ok2, warning, fraction / warnAt, style) : colourBetween(warning, critical, (fraction - warnAt) / (criticalAt - warnAt), style);
141189
+ }
141190
+ function widthStopsOf(style) {
141191
+ const ok2 = stopOf(style.okRole, style);
141192
+ const critical = stopOf("critical", style);
141193
+ return ok2 === void 0 || critical === void 0 ? void 0 : { ok: ok2, critical };
141194
+ }
141195
+ function acrossBar(column, cells) {
141196
+ return cells <= 1 ? 0 : column / (cells - 1);
141197
+ }
141198
+ function fillOf(fraction, filled, cells, style) {
141199
+ const stops = style.gradient === "width" ? widthStopsOf(style) : void 0;
141200
+ if (stops !== void 0 && filled > 0) {
141201
+ return Array.from({ length: filled }, (_, column) => `${colourBetween(stops.ok, stops.critical, acrossBar(column, cells), style)}${style.filled}`).join("");
141202
+ }
141203
+ const color = style.gradient === "use" ? gradientColorOf(fraction, style) : void 0;
141204
+ return `${color ?? statusColor(fraction, true, style)}${style.filled.repeat(filled)}`;
141205
+ }
141206
+ function drawBar(fraction, cells, style) {
141207
+ const clamped = Math.max(0, Math.min(1, fraction));
141208
+ const filled = Math.round(clamped * cells);
141209
+ const emptyColor = style.palette.ansi("empty");
141210
+ const fill = fillOf(clamped, filled, cells, style);
141211
+ const empty = style.empty.repeat(cells - filled);
141212
+ return fill === style.filled.repeat(filled) && emptyColor === "" ? `[${fill}${empty}]` : `[${fill}${emptyColor}${empty}${RESET}]`;
141086
141213
  }
141087
141214
  function formatTokens(num) {
141088
141215
  if (num >= MILLION) {
@@ -141120,17 +141247,6 @@ function secondsUntil(resetAt, nowMs) {
141120
141247
  const resetMs = Date.parse(resetAt);
141121
141248
  return Number.isNaN(resetMs) ? void 0 : Math.max(0, Math.round((resetMs - nowMs) / THOUSAND));
141122
141249
  }
141123
- function drawBar(fraction, cells, style) {
141124
- const clamped = Math.max(0, Math.min(1, fraction));
141125
- const filled = Math.round(clamped * cells);
141126
- const color = statusColor(clamped, true, style);
141127
- const emptyColor = style.palette.ansi("empty");
141128
- const body = `${style.filled.repeat(filled)}${style.empty.repeat(cells - filled)}`;
141129
- if (color === "" && emptyColor === "") {
141130
- return `[${body}]`;
141131
- }
141132
- return `[${color}${style.filled.repeat(filled)}${emptyColor}${style.empty.repeat(cells - filled)}${RESET}]`;
141133
- }
141134
141250
  function barCell(prefix, suffix, fraction, style) {
141135
141251
  return { prefix, suffix, draw: (cells) => drawBar(fraction, cells, style) };
141136
141252
  }
@@ -141902,7 +142018,7 @@ init_statusline();
141902
142018
 
141903
142019
  // src/statusline/elements/context.ts
141904
142020
  function barStyleOf({ settings: settings2, palette }, okRole) {
141905
- return { bands: settings2.bands, palette, okRole, filled: settings2.bar.filled, empty: settings2.bar.empty };
142021
+ return { bands: settings2.bands, palette, okRole, gradient: settings2.bar.gradient, filled: settings2.bar.filled, empty: settings2.bar.empty };
141906
142022
  }
141907
142023
 
141908
142024
  // src/statusline/elements/rows/context.ts
package/dist/index.cjs CHANGED
@@ -324,7 +324,7 @@ function resolveStatusline(settings) {
324
324
  }
325
325
  return resolved;
326
326
  }
327
- var import_string_width2, import_zod2, STATUSLINE_HEADER_SEGMENTS, STATUSLINE_ROWS, STATUSLINE_SESSION_TIME_PARTS, PROMPT_CACHE_TTL_SECONDS, ORANGE_PALETTE_INDEX, 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, MAX_EXTRA_COMMAND_ARGUMENTS, MAX_EXTRA_COMMAND_ARGUMENT_CHARS, STATUSLINE_EXTRA_GROUP, commandArgument, 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;
327
+ var import_string_width2, import_zod2, STATUSLINE_HEADER_SEGMENTS, STATUSLINE_ROWS, STATUSLINE_SESSION_TIME_PARTS, PROMPT_CACHE_TTL_SECONDS, ORANGE_PALETTE_INDEX, 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_BAR_GRADIENTS, 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, MAX_EXTRA_COMMAND_ARGUMENTS, MAX_EXTRA_COMMAND_ARGUMENT_CHARS, STATUSLINE_EXTRA_GROUP, commandArgument, 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;
328
328
  var init_statusline = __esm({
329
329
  "src/config/statusline.ts"() {
330
330
  "use strict";
@@ -377,6 +377,7 @@ var init_statusline = __esm({
377
377
  };
378
378
  STATUSLINE_PATH_LEVELS = ["1", "2", "3", "full"];
379
379
  STATUSLINE_USAGE_VALUES = ["used", "remaining"];
380
+ STATUSLINE_BAR_GRADIENTS = ["off", "use", "width"];
380
381
  STATUSLINE_TIME_FORMATS = ["relative", "absolute", "both", "elapsed", "elapsedAndAbsolute"];
381
382
  STATUSLINE_HOUR_CYCLES = ["auto", "h11", "h12", "h23", "h24"];
382
383
  MAX_PERCENT = 100;
@@ -447,8 +448,8 @@ var init_statusline = __esm({
447
448
  context: {
448
449
  bar: import_zod2.z.enum(["shown", "hidden"]).describe("Whether the context row draws its bar, or only its figures on one line of text."),
449
450
  value: import_zod2.z.enum(STATUSLINE_CONTEXT_VALUES).describe("The context figure: both (the tokens held against the window, then the percentage), percent, tokens, or remaining (the percentage of the window left)."),
450
- warnAt: wholePercent.optional().describe("The whole percentage of the context window at which the context bar turns yellow; while it is unset the context bar follows bands.warnAt."),
451
- criticalAt: wholePercent.optional().describe("The whole percentage of the context window at which the context bar turns red and, with context.breakdown set to critical, the token breakdown appears; while it is unset the context bar follows bands.criticalAt."),
451
+ warnAt: wholePercent.optional().describe("The whole percentage of the context window at which the context bar turns yellow when bar.gradient is off (a bar.gradient of use holds the warning colour exactly there, and width colours a bar by its cells, not its use, once a cell of its used part is drawn; both fall back to the band colours when a stop's colour is default or dim, and width also when no cell of its used part is drawn); while it is unset the context bar follows bands.warnAt."),
452
+ criticalAt: wholePercent.optional().describe("The whole percentage of the context window at which the context bar turns red when bar.gradient is off (a bar.gradient of use holds the critical colour from there, and width colours a bar by its cells, not its use, once a cell of its used part is drawn; both fall back to the band colours when a stop's colour is default or dim, and width also when no cell of its used part is drawn) and, with context.breakdown set to critical, the token breakdown appears; while it is unset the context bar follows bands.criticalAt."),
452
453
  autoCompactWindow: import_zod2.z.number().int().positive().optional().describe("A window in tokens to measure the context against instead of the model's, matching the figure /context gives once Claude Code compacts before the window is full. While it is set, the row draws nothing until the client reports the tokens held, since without them there is nothing to measure against it; while it is unset the model's own window is used."),
453
454
  estimate: import_zod2.z.enum(STATUSLINE_CONTEXT_ESTIMATES).describe(`What to draw when the client reports no percentage of the window in use, or reports 0 while tokens are already held (which is how a client says it has not worked it out yet): never (nothing is estimated: a percentage reported, 0 included, is drawn as it is, and none reported draws nothing), raw (the tokens held over the window), or buffered (that, plus the ${String(AUTOCOMPACT_RESERVE_FRACTION * MAX_PERCENT)}% of the window Claude Code reserves for compaction, rising from nothing at ${String(AUTOCOMPACT_RESERVE_RAMP_START * MAX_PERCENT)}% of the window held to the whole reserve at ${String(AUTOCOMPACT_RESERVE_RAMP_END * MAX_PERCENT)}%).`),
454
455
  breakdown: import_zod2.z.enum(["never", "critical"]).describe("Whether to add the input and cache tokens of the last request to the context row once its use reaches context.criticalAt.")
@@ -463,8 +464,8 @@ var init_statusline = __esm({
463
464
  )
464
465
  },
465
466
  bands: {
466
- warnAt: wholePercent.describe("The whole percentage of use at which a bar turns yellow; it must be below criticalAt."),
467
- criticalAt: wholePercent.describe("The whole percentage of use at which a bar turns red.")
467
+ warnAt: wholePercent.describe("The whole percentage of use at which a bar turns yellow when bar.gradient is off; it must be below criticalAt. A bar.gradient of use holds the warning colour exactly there, and width colours a bar by its cells, not its use, once a cell of its used part is drawn; both fall back to the band colours when a stop's colour is default or dim, and width also when no cell of its used part is drawn."),
468
+ criticalAt: wholePercent.describe("The whole percentage of use at which a bar turns red when bar.gradient is off. A bar.gradient of use holds the critical colour from there, and width colours a bar by its cells, not its use, once a cell of its used part is drawn; both fall back to the band colours when a stop's colour is default or dim, and width also when no cell of its used part is drawn.")
468
469
  },
469
470
  labels: {
470
471
  fiveHour: windowLabel.describe("The name of the five-hour subscription window; empty uses the language's own name for it."),
@@ -472,6 +473,9 @@ var init_statusline = __esm({
472
473
  },
473
474
  bar: {
474
475
  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."),
476
+ gradient: import_zod2.z.enum(STATUSLINE_BAR_GRADIENTS).describe(
477
+ "How a bar's used part is coloured: off (the default) draws the band's single colour, the bar's own colour below the warning threshold, the warning colour from there and the critical one from the critical threshold; use blends the bar's colour with its use, from its own colour at none in use to the warning colour at the warning threshold and the critical one at the critical threshold, holding exactly the colour the bands draw at each threshold and the critical colour above it; and width colours each cell of the used part across the bar's width, from the bar's own colour at the first cell to the critical one at the last, whatever the use, with a bar one cell wide drawing that cell in its own colour. A bar's thresholds are bands.warnAt and bands.criticalAt, the context bar's own where it sets them, and the figures beside a bar keep the band's colours in every mode. The unused part keeps colours.empty in every mode, and when that is default or dim, which set no colour of their own, it draws in the colour the used part ends in: under off the band's colour, under use the blend for the bar's use (even where no cell of the used part is drawn), and under width the last drawn cell's colour (the band's colour where no cell is drawn). A gradient blends RGB values, so a colour name, or a palette index below 16, is blended at the default RGB the xterm scheme gives it rather than the shade a themed terminal draws it in, while a stop itself, where a mode holds it exactly, is drawn as the bands draw that role. A bar whose stops include a role set to default or dim, which names no colour of its own, is drawn in the band's single colour: for use those stops are the bar's own, warning and critical roles, and for width its own and critical roles. A width bar with no cell of its used part drawn has no cell to colour, so it takes the band's colours as off does."
478
+ ),
475
479
  filled: barCharacter.describe("The character that draws the used part of a bar."),
476
480
  empty: barCharacter.describe("The character that draws the unused part of a bar.")
477
481
  },
@@ -506,11 +510,11 @@ var init_statusline = __esm({
506
510
  maxVisible: import_zod2.z.number().int().min(0).describe("The most kinds of finished tool call the tools row names, the most-used first, with the rest counted as +N more. 0 names every kind.")
507
511
  },
508
512
  colours: {
509
- context: colourValue.describe("The colour of the context bar and its figures below the warning threshold."),
510
- usage: colourValue.describe("The colour of the quota bars and their figures below the warning threshold."),
511
- warning: colourValue.describe("The colour of the context bar at or above bands.warnAt, and of a cache hit share that is middling."),
512
- usageWarning: colourValue.describe("The colour of a quota bar at or above bands.warnAt."),
513
- critical: colourValue.describe("The colour of a bar at or above bands.criticalAt, and of a cache hit share that is nearly nothing."),
513
+ context: colourValue.describe("The colour of the context bar below the warning threshold while bar.gradient is off, of the figures beside it below that threshold in every mode, and the colour a bar.gradient of use or width blends the context bar from (at none in use for use, at the first cell for width), while a gradient bar with a stop whose colour is default or dim, or a width bar with no cell of its used part drawn, takes the band's colours."),
514
+ usage: colourValue.describe("The colour of the quota bars and the memory bar below the warning threshold while bar.gradient is off, of the figures beside them below that threshold in every mode, and the colour a bar.gradient of use or width blends those bars from (at none in use for use, at the first cell for width), while a gradient bar with a stop whose colour is default or dim, or a width bar with no cell of its used part drawn, takes the band's colours."),
515
+ warning: colourValue.describe("The colour of the context bar from its warning threshold (bands.warnAt, or context.warnAt where that is set) up to its critical threshold (bands.criticalAt, or context.criticalAt where that is set) when bar.gradient is off (a bar.gradient of use holds it exactly at the threshold, and a gradient bar with a stop whose colour is default or dim draws the band's colours instead, and so does a width bar with no cell of its used part drawn), of the figures beside the bar from that threshold up to its critical threshold in every mode, and of a cache hit share that is middling."),
516
+ usageWarning: colourValue.describe("The colour of a quota bar or the memory bar from bands.warnAt up to bands.criticalAt when bar.gradient is off (a bar.gradient of use holds it exactly at bands.warnAt, and a gradient bar with a stop whose colour is default or dim draws the band's colours instead, and so does a width bar with no cell of its used part drawn), and of the figures beside the bar from that threshold up to bands.criticalAt in every mode."),
517
+ critical: colourValue.describe("The colour of a bar at or above its critical threshold (bands.criticalAt, or context.criticalAt for the context bar where that is set) when bar.gradient is off or use, of the last cell of a full bar more than one cell wide under a bar.gradient of width (a bar one cell wide draws its cell in its own colour, and a width bar whose own colour or this one is default or dim, or that has no cell of its used part drawn, draws the band's colours instead), of the figures beside a bar from its critical threshold in every mode, and of a cache hit share that is nearly nothing."),
514
518
  model: colourValue.describe("The colour of the model and provider segments."),
515
519
  label: colourValue.describe("The colour of labels and secondary text: row labels, and the route, account, identity and headroom segments."),
516
520
  empty: colourValue.describe("The colour of the unused part of a bar."),
@@ -616,7 +620,7 @@ var init_statusline = __esm({
616
620
  extra: { command: [] },
617
621
  bands: { warnAt: 70, criticalAt: 90 },
618
622
  labels: { fiveHour: "", sevenDay: "" },
619
- bar: { width: 10, filled: "\u2588", empty: "\u2591" },
623
+ bar: { width: 10, gradient: "off", filled: "\u2588", empty: "\u2591" },
620
624
  usage: { value: "used", bar: true, compact: false, resetLabel: false, modelScoped: false, timeFormat: "relative", threshold: 0, sevenDayThreshold: 0 },
621
625
  clock: { hourCycle: "auto", seconds: false },
622
626
  cost: { routed: false },
@@ -4747,7 +4751,7 @@ var init_package = __esm({
4747
4751
  "package.json"() {
4748
4752
  package_default = {
4749
4753
  name: "agent-shim",
4750
- version: "11.65.10",
4754
+ version: "11.66.1",
4751
4755
  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.",
4752
4756
  license: "MIT",
4753
4757
  author: "Joseph Mearman <joseph@mearman.co.uk>",
package/dist/index.mjs CHANGED
@@ -304,7 +304,7 @@ function resolveStatusline(settings) {
304
304
  }
305
305
  return resolved;
306
306
  }
307
- var STATUSLINE_HEADER_SEGMENTS, STATUSLINE_ROWS, STATUSLINE_SESSION_TIME_PARTS, PROMPT_CACHE_TTL_SECONDS, ORANGE_PALETTE_INDEX, 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, MAX_EXTRA_COMMAND_ARGUMENTS, MAX_EXTRA_COMMAND_ARGUMENT_CHARS, STATUSLINE_EXTRA_GROUP, commandArgument, 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;
307
+ var STATUSLINE_HEADER_SEGMENTS, STATUSLINE_ROWS, STATUSLINE_SESSION_TIME_PARTS, PROMPT_CACHE_TTL_SECONDS, ORANGE_PALETTE_INDEX, 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_BAR_GRADIENTS, 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, MAX_EXTRA_COMMAND_ARGUMENTS, MAX_EXTRA_COMMAND_ARGUMENT_CHARS, STATUSLINE_EXTRA_GROUP, commandArgument, 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;
308
308
  var init_statusline = __esm({
309
309
  "src/config/statusline.ts"() {
310
310
  "use strict";
@@ -355,6 +355,7 @@ var init_statusline = __esm({
355
355
  };
356
356
  STATUSLINE_PATH_LEVELS = ["1", "2", "3", "full"];
357
357
  STATUSLINE_USAGE_VALUES = ["used", "remaining"];
358
+ STATUSLINE_BAR_GRADIENTS = ["off", "use", "width"];
358
359
  STATUSLINE_TIME_FORMATS = ["relative", "absolute", "both", "elapsed", "elapsedAndAbsolute"];
359
360
  STATUSLINE_HOUR_CYCLES = ["auto", "h11", "h12", "h23", "h24"];
360
361
  MAX_PERCENT = 100;
@@ -425,8 +426,8 @@ var init_statusline = __esm({
425
426
  context: {
426
427
  bar: z2.enum(["shown", "hidden"]).describe("Whether the context row draws its bar, or only its figures on one line of text."),
427
428
  value: z2.enum(STATUSLINE_CONTEXT_VALUES).describe("The context figure: both (the tokens held against the window, then the percentage), percent, tokens, or remaining (the percentage of the window left)."),
428
- warnAt: wholePercent.optional().describe("The whole percentage of the context window at which the context bar turns yellow; while it is unset the context bar follows bands.warnAt."),
429
- criticalAt: wholePercent.optional().describe("The whole percentage of the context window at which the context bar turns red and, with context.breakdown set to critical, the token breakdown appears; while it is unset the context bar follows bands.criticalAt."),
429
+ warnAt: wholePercent.optional().describe("The whole percentage of the context window at which the context bar turns yellow when bar.gradient is off (a bar.gradient of use holds the warning colour exactly there, and width colours a bar by its cells, not its use, once a cell of its used part is drawn; both fall back to the band colours when a stop's colour is default or dim, and width also when no cell of its used part is drawn); while it is unset the context bar follows bands.warnAt."),
430
+ criticalAt: wholePercent.optional().describe("The whole percentage of the context window at which the context bar turns red when bar.gradient is off (a bar.gradient of use holds the critical colour from there, and width colours a bar by its cells, not its use, once a cell of its used part is drawn; both fall back to the band colours when a stop's colour is default or dim, and width also when no cell of its used part is drawn) and, with context.breakdown set to critical, the token breakdown appears; while it is unset the context bar follows bands.criticalAt."),
430
431
  autoCompactWindow: z2.number().int().positive().optional().describe("A window in tokens to measure the context against instead of the model's, matching the figure /context gives once Claude Code compacts before the window is full. While it is set, the row draws nothing until the client reports the tokens held, since without them there is nothing to measure against it; while it is unset the model's own window is used."),
431
432
  estimate: z2.enum(STATUSLINE_CONTEXT_ESTIMATES).describe(`What to draw when the client reports no percentage of the window in use, or reports 0 while tokens are already held (which is how a client says it has not worked it out yet): never (nothing is estimated: a percentage reported, 0 included, is drawn as it is, and none reported draws nothing), raw (the tokens held over the window), or buffered (that, plus the ${String(AUTOCOMPACT_RESERVE_FRACTION * MAX_PERCENT)}% of the window Claude Code reserves for compaction, rising from nothing at ${String(AUTOCOMPACT_RESERVE_RAMP_START * MAX_PERCENT)}% of the window held to the whole reserve at ${String(AUTOCOMPACT_RESERVE_RAMP_END * MAX_PERCENT)}%).`),
432
433
  breakdown: z2.enum(["never", "critical"]).describe("Whether to add the input and cache tokens of the last request to the context row once its use reaches context.criticalAt.")
@@ -441,8 +442,8 @@ var init_statusline = __esm({
441
442
  )
442
443
  },
443
444
  bands: {
444
- warnAt: wholePercent.describe("The whole percentage of use at which a bar turns yellow; it must be below criticalAt."),
445
- criticalAt: wholePercent.describe("The whole percentage of use at which a bar turns red.")
445
+ warnAt: wholePercent.describe("The whole percentage of use at which a bar turns yellow when bar.gradient is off; it must be below criticalAt. A bar.gradient of use holds the warning colour exactly there, and width colours a bar by its cells, not its use, once a cell of its used part is drawn; both fall back to the band colours when a stop's colour is default or dim, and width also when no cell of its used part is drawn."),
446
+ criticalAt: wholePercent.describe("The whole percentage of use at which a bar turns red when bar.gradient is off. A bar.gradient of use holds the critical colour from there, and width colours a bar by its cells, not its use, once a cell of its used part is drawn; both fall back to the band colours when a stop's colour is default or dim, and width also when no cell of its used part is drawn.")
446
447
  },
447
448
  labels: {
448
449
  fiveHour: windowLabel.describe("The name of the five-hour subscription window; empty uses the language's own name for it."),
@@ -450,6 +451,9 @@ var init_statusline = __esm({
450
451
  },
451
452
  bar: {
452
453
  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."),
454
+ gradient: z2.enum(STATUSLINE_BAR_GRADIENTS).describe(
455
+ "How a bar's used part is coloured: off (the default) draws the band's single colour, the bar's own colour below the warning threshold, the warning colour from there and the critical one from the critical threshold; use blends the bar's colour with its use, from its own colour at none in use to the warning colour at the warning threshold and the critical one at the critical threshold, holding exactly the colour the bands draw at each threshold and the critical colour above it; and width colours each cell of the used part across the bar's width, from the bar's own colour at the first cell to the critical one at the last, whatever the use, with a bar one cell wide drawing that cell in its own colour. A bar's thresholds are bands.warnAt and bands.criticalAt, the context bar's own where it sets them, and the figures beside a bar keep the band's colours in every mode. The unused part keeps colours.empty in every mode, and when that is default or dim, which set no colour of their own, it draws in the colour the used part ends in: under off the band's colour, under use the blend for the bar's use (even where no cell of the used part is drawn), and under width the last drawn cell's colour (the band's colour where no cell is drawn). A gradient blends RGB values, so a colour name, or a palette index below 16, is blended at the default RGB the xterm scheme gives it rather than the shade a themed terminal draws it in, while a stop itself, where a mode holds it exactly, is drawn as the bands draw that role. A bar whose stops include a role set to default or dim, which names no colour of its own, is drawn in the band's single colour: for use those stops are the bar's own, warning and critical roles, and for width its own and critical roles. A width bar with no cell of its used part drawn has no cell to colour, so it takes the band's colours as off does."
456
+ ),
453
457
  filled: barCharacter.describe("The character that draws the used part of a bar."),
454
458
  empty: barCharacter.describe("The character that draws the unused part of a bar.")
455
459
  },
@@ -484,11 +488,11 @@ var init_statusline = __esm({
484
488
  maxVisible: z2.number().int().min(0).describe("The most kinds of finished tool call the tools row names, the most-used first, with the rest counted as +N more. 0 names every kind.")
485
489
  },
486
490
  colours: {
487
- context: colourValue.describe("The colour of the context bar and its figures below the warning threshold."),
488
- usage: colourValue.describe("The colour of the quota bars and their figures below the warning threshold."),
489
- warning: colourValue.describe("The colour of the context bar at or above bands.warnAt, and of a cache hit share that is middling."),
490
- usageWarning: colourValue.describe("The colour of a quota bar at or above bands.warnAt."),
491
- critical: colourValue.describe("The colour of a bar at or above bands.criticalAt, and of a cache hit share that is nearly nothing."),
491
+ context: colourValue.describe("The colour of the context bar below the warning threshold while bar.gradient is off, of the figures beside it below that threshold in every mode, and the colour a bar.gradient of use or width blends the context bar from (at none in use for use, at the first cell for width), while a gradient bar with a stop whose colour is default or dim, or a width bar with no cell of its used part drawn, takes the band's colours."),
492
+ usage: colourValue.describe("The colour of the quota bars and the memory bar below the warning threshold while bar.gradient is off, of the figures beside them below that threshold in every mode, and the colour a bar.gradient of use or width blends those bars from (at none in use for use, at the first cell for width), while a gradient bar with a stop whose colour is default or dim, or a width bar with no cell of its used part drawn, takes the band's colours."),
493
+ warning: colourValue.describe("The colour of the context bar from its warning threshold (bands.warnAt, or context.warnAt where that is set) up to its critical threshold (bands.criticalAt, or context.criticalAt where that is set) when bar.gradient is off (a bar.gradient of use holds it exactly at the threshold, and a gradient bar with a stop whose colour is default or dim draws the band's colours instead, and so does a width bar with no cell of its used part drawn), of the figures beside the bar from that threshold up to its critical threshold in every mode, and of a cache hit share that is middling."),
494
+ usageWarning: colourValue.describe("The colour of a quota bar or the memory bar from bands.warnAt up to bands.criticalAt when bar.gradient is off (a bar.gradient of use holds it exactly at bands.warnAt, and a gradient bar with a stop whose colour is default or dim draws the band's colours instead, and so does a width bar with no cell of its used part drawn), and of the figures beside the bar from that threshold up to bands.criticalAt in every mode."),
495
+ critical: colourValue.describe("The colour of a bar at or above its critical threshold (bands.criticalAt, or context.criticalAt for the context bar where that is set) when bar.gradient is off or use, of the last cell of a full bar more than one cell wide under a bar.gradient of width (a bar one cell wide draws its cell in its own colour, and a width bar whose own colour or this one is default or dim, or that has no cell of its used part drawn, draws the band's colours instead), of the figures beside a bar from its critical threshold in every mode, and of a cache hit share that is nearly nothing."),
492
496
  model: colourValue.describe("The colour of the model and provider segments."),
493
497
  label: colourValue.describe("The colour of labels and secondary text: row labels, and the route, account, identity and headroom segments."),
494
498
  empty: colourValue.describe("The colour of the unused part of a bar."),
@@ -594,7 +598,7 @@ var init_statusline = __esm({
594
598
  extra: { command: [] },
595
599
  bands: { warnAt: 70, criticalAt: 90 },
596
600
  labels: { fiveHour: "", sevenDay: "" },
597
- bar: { width: 10, filled: "\u2588", empty: "\u2591" },
601
+ bar: { width: 10, gradient: "off", filled: "\u2588", empty: "\u2591" },
598
602
  usage: { value: "used", bar: true, compact: false, resetLabel: false, modelScoped: false, timeFormat: "relative", threshold: 0, sevenDayThreshold: 0 },
599
603
  clock: { hourCycle: "auto", seconds: false },
600
604
  cost: { routed: false },
@@ -4723,7 +4727,7 @@ var init_package = __esm({
4723
4727
  "package.json"() {
4724
4728
  package_default = {
4725
4729
  name: "agent-shim",
4726
- version: "11.65.10",
4730
+ version: "11.66.1",
4727
4731
  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.",
4728
4732
  license: "MIT",
4729
4733
  author: "Joseph Mearman <joseph@mearman.co.uk>",
@@ -457,6 +457,11 @@ declare const LaunchSchema: z.ZodObject<{
457
457
  }, z.core.$strict>>;
458
458
  bar: z.ZodOptional<z.ZodObject<{
459
459
  width: z.ZodOptional<z.ZodNumber>;
460
+ gradient: z.ZodOptional<z.ZodEnum<{
461
+ off: "off";
462
+ use: "use";
463
+ width: "width";
464
+ }>>;
460
465
  filled: z.ZodOptional<z.ZodString>;
461
466
  empty: z.ZodOptional<z.ZodString>;
462
467
  }, z.core.$strict>>;
@@ -1678,6 +1683,11 @@ declare const ConfigProfileSchema: z.ZodObject<{
1678
1683
  }, z.core.$strict>>;
1679
1684
  bar: z.ZodOptional<z.ZodObject<{
1680
1685
  width: z.ZodOptional<z.ZodNumber>;
1686
+ gradient: z.ZodOptional<z.ZodEnum<{
1687
+ off: "off";
1688
+ use: "use";
1689
+ width: "width";
1690
+ }>>;
1681
1691
  filled: z.ZodOptional<z.ZodString>;
1682
1692
  empty: z.ZodOptional<z.ZodString>;
1683
1693
  }, z.core.$strict>>;
@@ -2473,6 +2483,11 @@ declare const DirectoryRuleSchema: z.ZodObject<{
2473
2483
  }, z.core.$strict>>;
2474
2484
  bar: z.ZodOptional<z.ZodObject<{
2475
2485
  width: z.ZodOptional<z.ZodNumber>;
2486
+ gradient: z.ZodOptional<z.ZodEnum<{
2487
+ off: "off";
2488
+ use: "use";
2489
+ width: "width";
2490
+ }>>;
2476
2491
  filled: z.ZodOptional<z.ZodString>;
2477
2492
  empty: z.ZodOptional<z.ZodString>;
2478
2493
  }, z.core.$strict>>;
@@ -3241,6 +3256,11 @@ declare const DirectoryRulesSchema: z.ZodObject<{
3241
3256
  }, z.core.$strict>>;
3242
3257
  bar: z.ZodOptional<z.ZodObject<{
3243
3258
  width: z.ZodOptional<z.ZodNumber>;
3259
+ gradient: z.ZodOptional<z.ZodEnum<{
3260
+ off: "off";
3261
+ use: "use";
3262
+ width: "width";
3263
+ }>>;
3244
3264
  filled: z.ZodOptional<z.ZodString>;
3245
3265
  empty: z.ZodOptional<z.ZodString>;
3246
3266
  }, z.core.$strict>>;
@@ -4055,6 +4075,11 @@ declare const PortableConfigSchema: z.ZodObject<{
4055
4075
  }, z.core.$strict>>;
4056
4076
  bar: z.ZodOptional<z.ZodObject<{
4057
4077
  width: z.ZodOptional<z.ZodNumber>;
4078
+ gradient: z.ZodOptional<z.ZodEnum<{
4079
+ off: "off";
4080
+ use: "use";
4081
+ width: "width";
4082
+ }>>;
4058
4083
  filled: z.ZodOptional<z.ZodString>;
4059
4084
  empty: z.ZodOptional<z.ZodString>;
4060
4085
  }, z.core.$strict>>;
@@ -4804,6 +4829,11 @@ declare const GlobalConfigSchema: z.ZodObject<{
4804
4829
  }, z.core.$strict>>;
4805
4830
  bar: z.ZodOptional<z.ZodObject<{
4806
4831
  width: z.ZodOptional<z.ZodNumber>;
4832
+ gradient: z.ZodOptional<z.ZodEnum<{
4833
+ off: "off";
4834
+ use: "use";
4835
+ width: "width";
4836
+ }>>;
4807
4837
  filled: z.ZodOptional<z.ZodString>;
4808
4838
  empty: z.ZodOptional<z.ZodString>;
4809
4839
  }, z.core.$strict>>;
@@ -8106,8 +8136,8 @@ declare const CheckReportJsonSchema: z.ZodObject<{
8106
8136
  source: z.ZodEnum<{
8107
8137
  env: "env";
8108
8138
  none: "none";
8109
- "config-dir-escape-hatch": "config-dir-escape-hatch";
8110
8139
  argv: "argv";
8140
+ "config-dir-escape-hatch": "config-dir-escape-hatch";
8111
8141
  "directory-pin": "directory-pin";
8112
8142
  "active-identity-file": "active-identity-file";
8113
8143
  }>;
@@ -9877,6 +9907,11 @@ declare function createConfigApiRouter(deps: ConfigApiDeps): {
9877
9907
  }, zod_v4_core.$strict>>;
9878
9908
  bar: zod.ZodOptional<zod.ZodObject<{
9879
9909
  width: zod.ZodOptional<zod.ZodNumber>;
9910
+ gradient: zod.ZodOptional<zod.ZodEnum<{
9911
+ off: "off";
9912
+ use: "use";
9913
+ width: "width";
9914
+ }>>;
9880
9915
  filled: zod.ZodOptional<zod.ZodString>;
9881
9916
  empty: zod.ZodOptional<zod.ZodString>;
9882
9917
  }, zod_v4_core.$strict>>;
@@ -10593,6 +10628,11 @@ declare function createConfigApiRouter(deps: ConfigApiDeps): {
10593
10628
  }, zod_v4_core.$strict>>;
10594
10629
  bar: zod.ZodOptional<zod.ZodObject<{
10595
10630
  width: zod.ZodOptional<zod.ZodNumber>;
10631
+ gradient: zod.ZodOptional<zod.ZodEnum<{
10632
+ off: "off";
10633
+ use: "use";
10634
+ width: "width";
10635
+ }>>;
10596
10636
  filled: zod.ZodOptional<zod.ZodString>;
10597
10637
  empty: zod.ZodOptional<zod.ZodString>;
10598
10638
  }, zod_v4_core.$strict>>;
@@ -11785,6 +11825,11 @@ declare function createConfigApiRouter(deps: ConfigApiDeps): {
11785
11825
  }, zod_v4_core.$strict>>;
11786
11826
  bar: zod.ZodOptional<zod.ZodObject<{
11787
11827
  width: zod.ZodOptional<zod.ZodNumber>;
11828
+ gradient: zod.ZodOptional<zod.ZodEnum<{
11829
+ off: "off";
11830
+ use: "use";
11831
+ width: "width";
11832
+ }>>;
11788
11833
  filled: zod.ZodOptional<zod.ZodString>;
11789
11834
  empty: zod.ZodOptional<zod.ZodString>;
11790
11835
  }, zod_v4_core.$strict>>;
@@ -12558,6 +12603,11 @@ declare function createConfigApiRouter(deps: ConfigApiDeps): {
12558
12603
  }, zod_v4_core.$strict>>;
12559
12604
  bar: zod.ZodOptional<zod.ZodObject<{
12560
12605
  width: zod.ZodOptional<zod.ZodNumber>;
12606
+ gradient: zod.ZodOptional<zod.ZodEnum<{
12607
+ off: "off";
12608
+ use: "use";
12609
+ width: "width";
12610
+ }>>;
12561
12611
  filled: zod.ZodOptional<zod.ZodString>;
12562
12612
  empty: zod.ZodOptional<zod.ZodString>;
12563
12613
  }, zod_v4_core.$strict>>;
@@ -13466,6 +13516,11 @@ declare const StatuslineSchema: z.ZodObject<{
13466
13516
  }, z.core.$strict>>;
13467
13517
  bar: z.ZodOptional<z.ZodObject<{
13468
13518
  width: z.ZodOptional<z.ZodNumber>;
13519
+ gradient: z.ZodOptional<z.ZodEnum<{
13520
+ off: "off";
13521
+ use: "use";
13522
+ width: "width";
13523
+ }>>;
13469
13524
  filled: z.ZodOptional<z.ZodString>;
13470
13525
  empty: z.ZodOptional<z.ZodString>;
13471
13526
  }, z.core.$strict>>;
@@ -14108,8 +14163,8 @@ declare function createLaunchApiRouter(deps: LaunchApiDeps): {
14108
14163
  identitySource: zod.ZodEnum<{
14109
14164
  env: "env";
14110
14165
  none: "none";
14111
- "config-dir-escape-hatch": "config-dir-escape-hatch";
14112
14166
  argv: "argv";
14167
+ "config-dir-escape-hatch": "config-dir-escape-hatch";
14113
14168
  "directory-pin": "directory-pin";
14114
14169
  "active-identity-file": "active-identity-file";
14115
14170
  }>;
@@ -14319,6 +14374,11 @@ declare function createLaunchApiRouter(deps: LaunchApiDeps): {
14319
14374
  }, zod_v4_core.$strict>>;
14320
14375
  bar: zod.ZodOptional<zod.ZodObject<{
14321
14376
  width: zod.ZodOptional<zod.ZodNumber>;
14377
+ gradient: zod.ZodOptional<zod.ZodEnum<{
14378
+ off: "off";
14379
+ use: "use";
14380
+ width: "width";
14381
+ }>>;
14322
14382
  filled: zod.ZodOptional<zod.ZodString>;
14323
14383
  empty: zod.ZodOptional<zod.ZodString>;
14324
14384
  }, zod_v4_core.$strict>>;
@@ -15258,8 +15318,8 @@ declare function createControlApiRouter(deps: ControlApiDeps): {
15258
15318
  source: zod.ZodEnum<{
15259
15319
  env: "env";
15260
15320
  none: "none";
15261
- "config-dir-escape-hatch": "config-dir-escape-hatch";
15262
15321
  argv: "argv";
15322
+ "config-dir-escape-hatch": "config-dir-escape-hatch";
15263
15323
  "directory-pin": "directory-pin";
15264
15324
  "active-identity-file": "active-identity-file";
15265
15325
  }>;
@@ -15772,8 +15832,8 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
15772
15832
  identitySource: zod.ZodEnum<{
15773
15833
  env: "env";
15774
15834
  none: "none";
15775
- "config-dir-escape-hatch": "config-dir-escape-hatch";
15776
15835
  argv: "argv";
15836
+ "config-dir-escape-hatch": "config-dir-escape-hatch";
15777
15837
  "directory-pin": "directory-pin";
15778
15838
  "active-identity-file": "active-identity-file";
15779
15839
  }>;
@@ -15983,6 +16043,11 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
15983
16043
  }, zod_v4_core.$strict>>;
15984
16044
  bar: zod.ZodOptional<zod.ZodObject<{
15985
16045
  width: zod.ZodOptional<zod.ZodNumber>;
16046
+ gradient: zod.ZodOptional<zod.ZodEnum<{
16047
+ off: "off";
16048
+ use: "use";
16049
+ width: "width";
16050
+ }>>;
15986
16051
  filled: zod.ZodOptional<zod.ZodString>;
15987
16052
  empty: zod.ZodOptional<zod.ZodString>;
15988
16053
  }, zod_v4_core.$strict>>;
@@ -16893,6 +16958,11 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
16893
16958
  }, zod_v4_core.$strict>>;
16894
16959
  bar: zod.ZodOptional<zod.ZodObject<{
16895
16960
  width: zod.ZodOptional<zod.ZodNumber>;
16961
+ gradient: zod.ZodOptional<zod.ZodEnum<{
16962
+ off: "off";
16963
+ use: "use";
16964
+ width: "width";
16965
+ }>>;
16896
16966
  filled: zod.ZodOptional<zod.ZodString>;
16897
16967
  empty: zod.ZodOptional<zod.ZodString>;
16898
16968
  }, zod_v4_core.$strict>>;
@@ -17609,6 +17679,11 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
17609
17679
  }, zod_v4_core.$strict>>;
17610
17680
  bar: zod.ZodOptional<zod.ZodObject<{
17611
17681
  width: zod.ZodOptional<zod.ZodNumber>;
17682
+ gradient: zod.ZodOptional<zod.ZodEnum<{
17683
+ off: "off";
17684
+ use: "use";
17685
+ width: "width";
17686
+ }>>;
17612
17687
  filled: zod.ZodOptional<zod.ZodString>;
17613
17688
  empty: zod.ZodOptional<zod.ZodString>;
17614
17689
  }, zod_v4_core.$strict>>;
@@ -18801,6 +18876,11 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
18801
18876
  }, zod_v4_core.$strict>>;
18802
18877
  bar: zod.ZodOptional<zod.ZodObject<{
18803
18878
  width: zod.ZodOptional<zod.ZodNumber>;
18879
+ gradient: zod.ZodOptional<zod.ZodEnum<{
18880
+ off: "off";
18881
+ use: "use";
18882
+ width: "width";
18883
+ }>>;
18804
18884
  filled: zod.ZodOptional<zod.ZodString>;
18805
18885
  empty: zod.ZodOptional<zod.ZodString>;
18806
18886
  }, zod_v4_core.$strict>>;
@@ -19574,6 +19654,11 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
19574
19654
  }, zod_v4_core.$strict>>;
19575
19655
  bar: zod.ZodOptional<zod.ZodObject<{
19576
19656
  width: zod.ZodOptional<zod.ZodNumber>;
19657
+ gradient: zod.ZodOptional<zod.ZodEnum<{
19658
+ off: "off";
19659
+ use: "use";
19660
+ width: "width";
19661
+ }>>;
19577
19662
  filled: zod.ZodOptional<zod.ZodString>;
19578
19663
  empty: zod.ZodOptional<zod.ZodString>;
19579
19664
  }, zod_v4_core.$strict>>;
@@ -20283,8 +20368,8 @@ declare function createDoorApiRouter(deps: DoorApiDeps): {
20283
20368
  source: zod.ZodEnum<{
20284
20369
  env: "env";
20285
20370
  none: "none";
20286
- "config-dir-escape-hatch": "config-dir-escape-hatch";
20287
20371
  argv: "argv";
20372
+ "config-dir-escape-hatch": "config-dir-escape-hatch";
20288
20373
  "directory-pin": "directory-pin";
20289
20374
  "active-identity-file": "active-identity-file";
20290
20375
  }>;
@@ -21388,6 +21473,11 @@ declare const ConfigProfileAddOutputSchema: z.ZodObject<{
21388
21473
  }, z.core.$strict>>;
21389
21474
  bar: z.ZodOptional<z.ZodObject<{
21390
21475
  width: z.ZodOptional<z.ZodNumber>;
21476
+ gradient: z.ZodOptional<z.ZodEnum<{
21477
+ off: "off";
21478
+ use: "use";
21479
+ width: "width";
21480
+ }>>;
21391
21481
  filled: z.ZodOptional<z.ZodString>;
21392
21482
  empty: z.ZodOptional<z.ZodString>;
21393
21483
  }, z.core.$strict>>;
@@ -22106,6 +22196,11 @@ declare const ConfigProfileSetOutputSchema: z.ZodObject<{
22106
22196
  }, z.core.$strict>>;
22107
22197
  bar: z.ZodOptional<z.ZodObject<{
22108
22198
  width: z.ZodOptional<z.ZodNumber>;
22199
+ gradient: z.ZodOptional<z.ZodEnum<{
22200
+ off: "off";
22201
+ use: "use";
22202
+ width: "width";
22203
+ }>>;
22109
22204
  filled: z.ZodOptional<z.ZodString>;
22110
22205
  empty: z.ZodOptional<z.ZodString>;
22111
22206
  }, z.core.$strict>>;
@@ -23300,6 +23395,11 @@ declare const ConfigRuleAddOutputSchema: z.ZodObject<{
23300
23395
  }, z.core.$strict>>;
23301
23396
  bar: z.ZodOptional<z.ZodObject<{
23302
23397
  width: z.ZodOptional<z.ZodNumber>;
23398
+ gradient: z.ZodOptional<z.ZodEnum<{
23399
+ off: "off";
23400
+ use: "use";
23401
+ width: "width";
23402
+ }>>;
23303
23403
  filled: z.ZodOptional<z.ZodString>;
23304
23404
  empty: z.ZodOptional<z.ZodString>;
23305
23405
  }, z.core.$strict>>;
@@ -24075,6 +24175,11 @@ declare const ConfigRuleSetOutputSchema: z.ZodObject<{
24075
24175
  }, z.core.$strict>>;
24076
24176
  bar: z.ZodOptional<z.ZodObject<{
24077
24177
  width: z.ZodOptional<z.ZodNumber>;
24178
+ gradient: z.ZodOptional<z.ZodEnum<{
24179
+ off: "off";
24180
+ use: "use";
24181
+ width: "width";
24182
+ }>>;
24078
24183
  filled: z.ZodOptional<z.ZodString>;
24079
24184
  empty: z.ZodOptional<z.ZodString>;
24080
24185
  }, z.core.$strict>>;
@@ -24942,8 +25047,8 @@ declare const LaunchResolveOutputSchema: z.ZodObject<{
24942
25047
  identitySource: z.ZodEnum<{
24943
25048
  env: "env";
24944
25049
  none: "none";
24945
- "config-dir-escape-hatch": "config-dir-escape-hatch";
24946
25050
  argv: "argv";
25051
+ "config-dir-escape-hatch": "config-dir-escape-hatch";
24947
25052
  "directory-pin": "directory-pin";
24948
25053
  "active-identity-file": "active-identity-file";
24949
25054
  }>;
@@ -25153,6 +25258,11 @@ declare const LaunchResolveOutputSchema: z.ZodObject<{
25153
25258
  }, z.core.$strict>>;
25154
25259
  bar: z.ZodOptional<z.ZodObject<{
25155
25260
  width: z.ZodOptional<z.ZodNumber>;
25261
+ gradient: z.ZodOptional<z.ZodEnum<{
25262
+ off: "off";
25263
+ use: "use";
25264
+ width: "width";
25265
+ }>>;
25156
25266
  filled: z.ZodOptional<z.ZodString>;
25157
25267
  empty: z.ZodOptional<z.ZodString>;
25158
25268
  }, z.core.$strict>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-shim",
3
- "version": "11.65.10",
3
+ "version": "11.66.1",
4
4
  "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.",
5
5
  "license": "MIT",
6
6
  "author": "Joseph Mearman <joseph@mearman.co.uk>",