claude-use 11.53.0 → 11.54.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/index.cjs CHANGED
@@ -140,7 +140,7 @@ var init_proxyBypass = __esm({
140
140
 
141
141
  // src/config/statusline.ts
142
142
  function distinctList(member) {
143
- return import_zod.z.array(member).refine((items) => new Set(items).size === items.length, "must not repeat a segment");
143
+ return import_zod.z.array(member).refine((items) => new Set(items).size === items.length, "must not repeat an entry");
144
144
  }
145
145
  function isSingleVisibleGrapheme(text) {
146
146
  return [...GRAPHEMES.segment(text)].length === 1 && !/[\p{C}\p{Z}]/u.test(text);
@@ -165,12 +165,12 @@ function resolveStatusline(settings) {
165
165
  }
166
166
  return resolved;
167
167
  }
168
- var import_zod, STATUSLINE_HEADER_SEGMENTS, STATUSLINE_ROWS, STATUSLINE_COLOUR_NAMES, DEFAULT_HEADER_SEGMENTS, DEFAULT_ROWS, STATUSLINE_PATH_LEVELS, MAX_PERCENT, MAX_STATUSLINE_PALETTE_INDEX, MAX_STATUSLINE_LABEL_CHARS, MAX_BAR_CELLS, LABEL_RE2, colourValue, GRAPHEMES, barCharacter, labelText, wholePercent, SHAPES, StatuslineSchema, ResolvedStatuslineSchema, STATUSLINE_DEFAULTS, STATUSLINE_ENV;
168
+ var import_zod, STATUSLINE_HEADER_SEGMENTS, STATUSLINE_ROWS, STATUSLINE_COLOUR_NAMES, DEFAULT_HEADER_SEGMENTS, DEFAULT_ROWS, STATUSLINE_PATH_LEVELS, MAX_PERCENT, MAX_STATUSLINE_PALETTE_INDEX, MAX_STATUSLINE_LABEL_CHARS, MAX_BAR_CELLS, MAX_ACCOUNT_USER_CHARS, MAX_DISPLAY_TEXT_CHARS, LABEL_RE2, OPTIONAL_LABEL_RE, colourValue, GRAPHEMES, barCharacter, labelText, overrideText, wholePercent, SHAPES, StatuslineSchema, ResolvedStatuslineSchema, STATUSLINE_DEFAULTS, STATUSLINE_ENV;
169
169
  var init_statusline = __esm({
170
170
  "src/config/statusline.ts"() {
171
171
  "use strict";
172
172
  import_zod = require("zod");
173
- STATUSLINE_HEADER_SEGMENTS = ["model", "provider", "route", "account", "identity", "headroom", "project", "vcs"];
173
+ STATUSLINE_HEADER_SEGMENTS = ["model", "provider", "route", "account", "identity", "headroom", "project", "vcs", "effort", "advisor", "version", "outputStyle"];
174
174
  STATUSLINE_ROWS = ["context", "quota", "addedDirs", "gitFiles"];
175
175
  STATUSLINE_COLOUR_NAMES = [
176
176
  "default",
@@ -199,17 +199,39 @@ var init_statusline = __esm({
199
199
  MAX_STATUSLINE_PALETTE_INDEX = 255;
200
200
  MAX_STATUSLINE_LABEL_CHARS = 12;
201
201
  MAX_BAR_CELLS = 40;
202
+ MAX_ACCOUNT_USER_CHARS = 254;
203
+ MAX_DISPLAY_TEXT_CHARS = 80;
202
204
  LABEL_RE2 = /^[^\p{C}\p{Z}]+(?: [^\p{C}\p{Z}]+)*$/u;
205
+ OPTIONAL_LABEL_RE = /^(?:[^\p{C}\p{Z}]+(?: [^\p{C}\p{Z}]+)*)?$/u;
203
206
  colourValue = import_zod.z.union([import_zod.z.enum(STATUSLINE_COLOUR_NAMES), import_zod.z.number().int().min(0).max(MAX_STATUSLINE_PALETTE_INDEX), import_zod.z.string().regex(/^#[0-9a-fA-F]{6}$/, "must be a colour name, a palette index from 0 to 255 or #rrggbb")]);
204
207
  GRAPHEMES = new Intl.Segmenter(void 0, { granularity: "grapheme" });
205
208
  barCharacter = import_zod.z.string().refine(isSingleVisibleGrapheme, "must be a single visible character");
206
209
  labelText = import_zod.z.string().max(MAX_STATUSLINE_LABEL_CHARS).regex(LABEL_RE2, "must be visible text without control characters");
210
+ overrideText = import_zod.z.string().max(MAX_DISPLAY_TEXT_CHARS).regex(OPTIONAL_LABEL_RE, "must be visible text without control characters");
207
211
  wholePercent = import_zod.z.number().int().min(1).max(MAX_PERCENT);
208
212
  SHAPES = {
209
213
  layout: {
210
214
  header: distinctList(import_zod.z.enum(STATUSLINE_HEADER_SEGMENTS)).describe("The header segments to draw, in drawing order; a segment left out is hidden, and an empty list hides the header."),
211
215
  rows: distinctList(import_zod.z.enum(STATUSLINE_ROWS)).describe("The rows to draw below the header, in drawing order; a row left out is hidden, and an empty list hides every row.")
212
216
  },
217
+ model: {
218
+ format: import_zod.z.enum(["full", "compact", "short"]).describe("How the model's name is written: full is the name as the client gives it, compact drops a context-window suffix such as (1M context), and short also drops a leading Claude."),
219
+ override: overrideText.describe("A name to show in place of the client's own model name, whatever model is running; empty shows the model's own name. A dynamic mode's served model still follows it."),
220
+ source: import_zod.z.enum(["client", "transcript", "auto"]).describe("Where the model's name comes from: client is the name the client reports, transcript is the model the session's last reply came from (what a proxy actually served), and auto uses the transcript's model only when it is not a Claude model, which is what a proxy redirect looks like.")
221
+ },
222
+ provider: {
223
+ name: overrideText.describe("A label to show in place of the launch's provider name, or on its own when the launch has no provider; empty shows the provider's own name.")
224
+ },
225
+ account: {
226
+ parts: distinctList(import_zod.z.enum(["user", "organisation", "plan"])).describe("What the account segment says about the login account, in drawing order: the account's email address, its organisation (shown for team and enterprise accounts) and its plan. A part left out is hidden, and an empty list hides the segment."),
227
+ userLength: import_zod.z.number().int().min(0).max(MAX_ACCOUNT_USER_CHARS).describe("The most characters of the account's email address to show, with an ellipsis after a cut one; 0 shows all of it.")
228
+ },
229
+ effort: {
230
+ format: import_zod.z.enum(["full", "symbol", "text"]).describe("How the reasoning effort is written: full is a symbol and the level (a filled circle that grows with the level, then the name), symbol is the symbol alone, and text is the level's name alone. A level with no symbol is always written as its name.")
231
+ },
232
+ advisor: {
233
+ override: overrideText.describe("A name to show for the advisor model in place of the one the session's transcript records; empty shows the transcript's, prettified.")
234
+ },
213
235
  bands: {
214
236
  warnAt: wholePercent.describe("The whole percentage of use at which a bar turns yellow; it must be below criticalAt."),
215
237
  criticalAt: wholePercent.describe("The whole percentage of use at which a bar turns red.")
@@ -257,6 +279,11 @@ var init_statusline = __esm({
257
279
  };
258
280
  StatuslineSchema = import_zod.z.strictObject({
259
281
  layout: import_zod.z.strictObject(SHAPES.layout).partial().optional(),
282
+ model: import_zod.z.strictObject(SHAPES.model).partial().optional(),
283
+ provider: import_zod.z.strictObject(SHAPES.provider).partial().optional(),
284
+ account: import_zod.z.strictObject(SHAPES.account).partial().optional(),
285
+ effort: import_zod.z.strictObject(SHAPES.effort).partial().optional(),
286
+ advisor: import_zod.z.strictObject(SHAPES.advisor).partial().optional(),
260
287
  bands: import_zod.z.strictObject(SHAPES.bands).partial().optional(),
261
288
  labels: import_zod.z.strictObject(SHAPES.labels).partial().optional(),
262
289
  bar: import_zod.z.strictObject(SHAPES.bar).partial().optional(),
@@ -267,6 +294,11 @@ var init_statusline = __esm({
267
294
  });
268
295
  ResolvedStatuslineSchema = import_zod.z.strictObject({
269
296
  layout: import_zod.z.strictObject(SHAPES.layout),
297
+ model: import_zod.z.strictObject(SHAPES.model),
298
+ provider: import_zod.z.strictObject(SHAPES.provider),
299
+ account: import_zod.z.strictObject(SHAPES.account),
300
+ effort: import_zod.z.strictObject(SHAPES.effort),
301
+ advisor: import_zod.z.strictObject(SHAPES.advisor),
270
302
  bands: import_zod.z.strictObject(SHAPES.bands),
271
303
  labels: import_zod.z.strictObject(SHAPES.labels),
272
304
  bar: import_zod.z.strictObject(SHAPES.bar),
@@ -277,6 +309,11 @@ var init_statusline = __esm({
277
309
  });
278
310
  STATUSLINE_DEFAULTS = {
279
311
  layout: { header: [...DEFAULT_HEADER_SEGMENTS], rows: [...DEFAULT_ROWS] },
312
+ model: { format: "full", override: "", source: "client" },
313
+ provider: { name: "" },
314
+ account: { parts: ["user", "organisation", "plan"], userLength: 0 },
315
+ effort: { format: "full" },
316
+ advisor: { override: "" },
280
317
  bands: { warnAt: 70, criticalAt: 90 },
281
318
  labels: { fiveHour: "5h", sevenDay: "Wk" },
282
319
  bar: { width: 10, filled: "\u2588", empty: "\u2591" },
@@ -4361,7 +4398,7 @@ var init_package = __esm({
4361
4398
  "package.json"() {
4362
4399
  package_default = {
4363
4400
  name: "claude-use",
4364
- version: "11.53.0",
4401
+ version: "11.54.0",
4365
4402
  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.",
4366
4403
  license: "MIT",
4367
4404
  author: "Joseph Mearman <joseph@mearman.co.uk>",
package/dist/index.mjs CHANGED
@@ -119,7 +119,7 @@ var init_proxyBypass = __esm({
119
119
  // src/config/statusline.ts
120
120
  import { z } from "zod";
121
121
  function distinctList(member) {
122
- return z.array(member).refine((items) => new Set(items).size === items.length, "must not repeat a segment");
122
+ return z.array(member).refine((items) => new Set(items).size === items.length, "must not repeat an entry");
123
123
  }
124
124
  function isSingleVisibleGrapheme(text) {
125
125
  return [...GRAPHEMES.segment(text)].length === 1 && !/[\p{C}\p{Z}]/u.test(text);
@@ -144,11 +144,11 @@ function resolveStatusline(settings) {
144
144
  }
145
145
  return resolved;
146
146
  }
147
- var STATUSLINE_HEADER_SEGMENTS, STATUSLINE_ROWS, STATUSLINE_COLOUR_NAMES, DEFAULT_HEADER_SEGMENTS, DEFAULT_ROWS, STATUSLINE_PATH_LEVELS, MAX_PERCENT, MAX_STATUSLINE_PALETTE_INDEX, MAX_STATUSLINE_LABEL_CHARS, MAX_BAR_CELLS, LABEL_RE2, colourValue, GRAPHEMES, barCharacter, labelText, wholePercent, SHAPES, StatuslineSchema, ResolvedStatuslineSchema, STATUSLINE_DEFAULTS, STATUSLINE_ENV;
147
+ var STATUSLINE_HEADER_SEGMENTS, STATUSLINE_ROWS, STATUSLINE_COLOUR_NAMES, DEFAULT_HEADER_SEGMENTS, DEFAULT_ROWS, STATUSLINE_PATH_LEVELS, MAX_PERCENT, MAX_STATUSLINE_PALETTE_INDEX, MAX_STATUSLINE_LABEL_CHARS, MAX_BAR_CELLS, MAX_ACCOUNT_USER_CHARS, MAX_DISPLAY_TEXT_CHARS, LABEL_RE2, OPTIONAL_LABEL_RE, colourValue, GRAPHEMES, barCharacter, labelText, overrideText, wholePercent, SHAPES, StatuslineSchema, ResolvedStatuslineSchema, STATUSLINE_DEFAULTS, STATUSLINE_ENV;
148
148
  var init_statusline = __esm({
149
149
  "src/config/statusline.ts"() {
150
150
  "use strict";
151
- STATUSLINE_HEADER_SEGMENTS = ["model", "provider", "route", "account", "identity", "headroom", "project", "vcs"];
151
+ STATUSLINE_HEADER_SEGMENTS = ["model", "provider", "route", "account", "identity", "headroom", "project", "vcs", "effort", "advisor", "version", "outputStyle"];
152
152
  STATUSLINE_ROWS = ["context", "quota", "addedDirs", "gitFiles"];
153
153
  STATUSLINE_COLOUR_NAMES = [
154
154
  "default",
@@ -177,17 +177,39 @@ var init_statusline = __esm({
177
177
  MAX_STATUSLINE_PALETTE_INDEX = 255;
178
178
  MAX_STATUSLINE_LABEL_CHARS = 12;
179
179
  MAX_BAR_CELLS = 40;
180
+ MAX_ACCOUNT_USER_CHARS = 254;
181
+ MAX_DISPLAY_TEXT_CHARS = 80;
180
182
  LABEL_RE2 = /^[^\p{C}\p{Z}]+(?: [^\p{C}\p{Z}]+)*$/u;
183
+ OPTIONAL_LABEL_RE = /^(?:[^\p{C}\p{Z}]+(?: [^\p{C}\p{Z}]+)*)?$/u;
181
184
  colourValue = z.union([z.enum(STATUSLINE_COLOUR_NAMES), z.number().int().min(0).max(MAX_STATUSLINE_PALETTE_INDEX), z.string().regex(/^#[0-9a-fA-F]{6}$/, "must be a colour name, a palette index from 0 to 255 or #rrggbb")]);
182
185
  GRAPHEMES = new Intl.Segmenter(void 0, { granularity: "grapheme" });
183
186
  barCharacter = z.string().refine(isSingleVisibleGrapheme, "must be a single visible character");
184
187
  labelText = z.string().max(MAX_STATUSLINE_LABEL_CHARS).regex(LABEL_RE2, "must be visible text without control characters");
188
+ overrideText = z.string().max(MAX_DISPLAY_TEXT_CHARS).regex(OPTIONAL_LABEL_RE, "must be visible text without control characters");
185
189
  wholePercent = z.number().int().min(1).max(MAX_PERCENT);
186
190
  SHAPES = {
187
191
  layout: {
188
192
  header: distinctList(z.enum(STATUSLINE_HEADER_SEGMENTS)).describe("The header segments to draw, in drawing order; a segment left out is hidden, and an empty list hides the header."),
189
193
  rows: distinctList(z.enum(STATUSLINE_ROWS)).describe("The rows to draw below the header, in drawing order; a row left out is hidden, and an empty list hides every row.")
190
194
  },
195
+ model: {
196
+ format: z.enum(["full", "compact", "short"]).describe("How the model's name is written: full is the name as the client gives it, compact drops a context-window suffix such as (1M context), and short also drops a leading Claude."),
197
+ override: overrideText.describe("A name to show in place of the client's own model name, whatever model is running; empty shows the model's own name. A dynamic mode's served model still follows it."),
198
+ source: z.enum(["client", "transcript", "auto"]).describe("Where the model's name comes from: client is the name the client reports, transcript is the model the session's last reply came from (what a proxy actually served), and auto uses the transcript's model only when it is not a Claude model, which is what a proxy redirect looks like.")
199
+ },
200
+ provider: {
201
+ name: overrideText.describe("A label to show in place of the launch's provider name, or on its own when the launch has no provider; empty shows the provider's own name.")
202
+ },
203
+ account: {
204
+ parts: distinctList(z.enum(["user", "organisation", "plan"])).describe("What the account segment says about the login account, in drawing order: the account's email address, its organisation (shown for team and enterprise accounts) and its plan. A part left out is hidden, and an empty list hides the segment."),
205
+ userLength: z.number().int().min(0).max(MAX_ACCOUNT_USER_CHARS).describe("The most characters of the account's email address to show, with an ellipsis after a cut one; 0 shows all of it.")
206
+ },
207
+ effort: {
208
+ format: z.enum(["full", "symbol", "text"]).describe("How the reasoning effort is written: full is a symbol and the level (a filled circle that grows with the level, then the name), symbol is the symbol alone, and text is the level's name alone. A level with no symbol is always written as its name.")
209
+ },
210
+ advisor: {
211
+ override: overrideText.describe("A name to show for the advisor model in place of the one the session's transcript records; empty shows the transcript's, prettified.")
212
+ },
191
213
  bands: {
192
214
  warnAt: wholePercent.describe("The whole percentage of use at which a bar turns yellow; it must be below criticalAt."),
193
215
  criticalAt: wholePercent.describe("The whole percentage of use at which a bar turns red.")
@@ -235,6 +257,11 @@ var init_statusline = __esm({
235
257
  };
236
258
  StatuslineSchema = z.strictObject({
237
259
  layout: z.strictObject(SHAPES.layout).partial().optional(),
260
+ model: z.strictObject(SHAPES.model).partial().optional(),
261
+ provider: z.strictObject(SHAPES.provider).partial().optional(),
262
+ account: z.strictObject(SHAPES.account).partial().optional(),
263
+ effort: z.strictObject(SHAPES.effort).partial().optional(),
264
+ advisor: z.strictObject(SHAPES.advisor).partial().optional(),
238
265
  bands: z.strictObject(SHAPES.bands).partial().optional(),
239
266
  labels: z.strictObject(SHAPES.labels).partial().optional(),
240
267
  bar: z.strictObject(SHAPES.bar).partial().optional(),
@@ -245,6 +272,11 @@ var init_statusline = __esm({
245
272
  });
246
273
  ResolvedStatuslineSchema = z.strictObject({
247
274
  layout: z.strictObject(SHAPES.layout),
275
+ model: z.strictObject(SHAPES.model),
276
+ provider: z.strictObject(SHAPES.provider),
277
+ account: z.strictObject(SHAPES.account),
278
+ effort: z.strictObject(SHAPES.effort),
279
+ advisor: z.strictObject(SHAPES.advisor),
248
280
  bands: z.strictObject(SHAPES.bands),
249
281
  labels: z.strictObject(SHAPES.labels),
250
282
  bar: z.strictObject(SHAPES.bar),
@@ -255,6 +287,11 @@ var init_statusline = __esm({
255
287
  });
256
288
  STATUSLINE_DEFAULTS = {
257
289
  layout: { header: [...DEFAULT_HEADER_SEGMENTS], rows: [...DEFAULT_ROWS] },
290
+ model: { format: "full", override: "", source: "client" },
291
+ provider: { name: "" },
292
+ account: { parts: ["user", "organisation", "plan"], userLength: 0 },
293
+ effort: { format: "full" },
294
+ advisor: { override: "" },
258
295
  bands: { warnAt: 70, criticalAt: 90 },
259
296
  labels: { fiveHour: "5h", sevenDay: "Wk" },
260
297
  bar: { width: 10, filled: "\u2588", empty: "\u2591" },
@@ -4337,7 +4374,7 @@ var init_package = __esm({
4337
4374
  "package.json"() {
4338
4375
  package_default = {
4339
4376
  name: "claude-use",
4340
- version: "11.53.0",
4377
+ version: "11.54.0",
4341
4378
  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.",
4342
4379
  license: "MIT",
4343
4380
  author: "Joseph Mearman <joseph@mearman.co.uk>",