claude-use 11.52.1 → 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,13 +165,13 @@ function resolveStatusline(settings) {
165
165
  }
166
166
  return resolved;
167
167
  }
168
- var import_zod, STATUSLINE_HEADER_SEGMENTS, STATUSLINE_ROWS, STATUSLINE_COLOUR_NAMES, 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"];
174
- STATUSLINE_ROWS = ["context", "quota"];
173
+ STATUSLINE_HEADER_SEGMENTS = ["model", "provider", "route", "account", "identity", "headroom", "project", "vcs", "effort", "advisor", "version", "outputStyle"];
174
+ STATUSLINE_ROWS = ["context", "quota", "addedDirs", "gitFiles"];
175
175
  STATUSLINE_COLOUR_NAMES = [
176
176
  "default",
177
177
  "dim",
@@ -192,21 +192,46 @@ var init_statusline = __esm({
192
192
  "brightCyan",
193
193
  "brightWhite"
194
194
  ];
195
+ DEFAULT_HEADER_SEGMENTS = ["model", "provider", "route", "account", "identity", "headroom"];
196
+ DEFAULT_ROWS = ["context", "quota"];
197
+ STATUSLINE_PATH_LEVELS = ["1", "2", "3", "full"];
195
198
  MAX_PERCENT = 100;
196
199
  MAX_STATUSLINE_PALETTE_INDEX = 255;
197
200
  MAX_STATUSLINE_LABEL_CHARS = 12;
198
201
  MAX_BAR_CELLS = 40;
202
+ MAX_ACCOUNT_USER_CHARS = 254;
203
+ MAX_DISPLAY_TEXT_CHARS = 80;
199
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;
200
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")]);
201
207
  GRAPHEMES = new Intl.Segmenter(void 0, { granularity: "grapheme" });
202
208
  barCharacter = import_zod.z.string().refine(isSingleVisibleGrapheme, "must be a single visible character");
203
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");
204
211
  wholePercent = import_zod.z.number().int().min(1).max(MAX_PERCENT);
205
212
  SHAPES = {
206
213
  layout: {
207
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."),
208
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.")
209
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
+ },
210
235
  bands: {
211
236
  warnAt: wholePercent.describe("The whole percentage of use at which a bar turns yellow; it must be below criticalAt."),
212
237
  criticalAt: wholePercent.describe("The whole percentage of use at which a bar turns red.")
@@ -228,25 +253,67 @@ var init_statusline = __esm({
228
253
  critical: colourValue.describe("The colour of a bar at or above bands.criticalAt, and of a cache hit share that is nearly nothing."),
229
254
  model: colourValue.describe("The colour of the model and provider segments."),
230
255
  label: colourValue.describe("The colour of labels and secondary text: row labels, and the route, account, identity and headroom segments."),
231
- empty: colourValue.describe("The colour of the unused part of a bar.")
256
+ empty: colourValue.describe("The colour of the unused part of a bar."),
257
+ project: colourValue.describe("The colour of the project path segment."),
258
+ git: colourValue.describe("The colour of the version control segment's wrapper text (`git:(` and `)`)."),
259
+ gitBranch: colourValue.describe("The colour of the branch or bookmark and its ahead, behind and dirty markers.")
260
+ },
261
+ project: {
262
+ pathLevels: import_zod.z.enum(STATUSLINE_PATH_LEVELS).describe("How many trailing directories of the working directory the project segment shows: 1, 2 or 3, or full for the whole absolute path."),
263
+ addedDirsLayout: import_zod.z.enum(["inline", "row"]).describe("Where the directories added to the session are drawn: inline, as +name after the project path in the project segment, or row, as an Added dirs line when layout.rows lists addedDirs.")
264
+ },
265
+ git: {
266
+ enabled: import_zod.z.boolean().describe("Whether the vcs segment and the gitFiles row read the working directory's git status."),
267
+ showDirty: import_zod.z.boolean().describe("Whether the branch is followed by * when the working tree has uncommitted changes."),
268
+ showAheadBehind: import_zod.z.boolean().describe("Whether the branch is followed by the commits ahead of (up-arrow) and behind (down-arrow) its upstream."),
269
+ showLineDiff: import_zod.z.boolean().describe("Whether the segment shows the total lines added and removed against HEAD, as [+a -d]."),
270
+ branchOverflow: import_zod.z.enum(["truncate", "wrap"]).describe("How the vcs segment sits beside the project segment when they are listed next to each other: truncate keeps them as one unit the client cuts off at the terminal's edge, and wrap lets the line break between them."),
271
+ pushWarnAt: import_zod.z.number().int().min(0).describe("The count of unpushed commits at which the ahead marker takes colours.warning; 0 turns it off."),
272
+ pushCriticalAt: import_zod.z.number().int().min(0).describe("The count of unpushed commits at which the ahead marker takes colours.critical; 0 turns it off.")
273
+ },
274
+ jj: {
275
+ enabled: import_zod.z.boolean().describe("Whether the vcs segment reads a Jujutsu repository's status, instead of git's, when the working directory is inside one."),
276
+ showDirty: import_zod.z.boolean().describe("Whether the bookmark or change id is followed by * when the working-copy commit differs from its parent."),
277
+ showConflicts: import_zod.z.boolean().describe("Whether the segment shows !conflict when the working-copy commit has an unresolved conflict.")
232
278
  }
233
279
  };
234
280
  StatuslineSchema = import_zod.z.strictObject({
235
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(),
236
287
  bands: import_zod.z.strictObject(SHAPES.bands).partial().optional(),
237
288
  labels: import_zod.z.strictObject(SHAPES.labels).partial().optional(),
238
289
  bar: import_zod.z.strictObject(SHAPES.bar).partial().optional(),
239
- colours: import_zod.z.strictObject(SHAPES.colours).partial().optional()
290
+ colours: import_zod.z.strictObject(SHAPES.colours).partial().optional(),
291
+ project: import_zod.z.strictObject(SHAPES.project).partial().optional(),
292
+ git: import_zod.z.strictObject(SHAPES.git).partial().optional(),
293
+ jj: import_zod.z.strictObject(SHAPES.jj).partial().optional()
240
294
  });
241
295
  ResolvedStatuslineSchema = import_zod.z.strictObject({
242
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),
243
302
  bands: import_zod.z.strictObject(SHAPES.bands),
244
303
  labels: import_zod.z.strictObject(SHAPES.labels),
245
304
  bar: import_zod.z.strictObject(SHAPES.bar),
246
- colours: import_zod.z.strictObject(SHAPES.colours)
305
+ colours: import_zod.z.strictObject(SHAPES.colours),
306
+ project: import_zod.z.strictObject(SHAPES.project),
307
+ git: import_zod.z.strictObject(SHAPES.git),
308
+ jj: import_zod.z.strictObject(SHAPES.jj)
247
309
  });
248
310
  STATUSLINE_DEFAULTS = {
249
- layout: { header: [...STATUSLINE_HEADER_SEGMENTS], rows: [...STATUSLINE_ROWS] },
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: "" },
250
317
  bands: { warnAt: 70, criticalAt: 90 },
251
318
  labels: { fiveHour: "5h", sevenDay: "Wk" },
252
319
  bar: { width: 10, filled: "\u2588", empty: "\u2591" },
@@ -258,8 +325,14 @@ var init_statusline = __esm({
258
325
  critical: "red",
259
326
  model: "default",
260
327
  label: "default",
261
- empty: "brightBlack"
262
- }
328
+ empty: "brightBlack",
329
+ project: "yellow",
330
+ git: "magenta",
331
+ gitBranch: "cyan"
332
+ },
333
+ project: { pathLevels: "1", addedDirsLayout: "inline" },
334
+ git: { enabled: true, showDirty: true, showAheadBehind: false, showLineDiff: false, branchOverflow: "truncate", pushWarnAt: 0, pushCriticalAt: 0 },
335
+ jj: { enabled: false, showDirty: true, showConflicts: true }
263
336
  };
264
337
  STATUSLINE_ENV = "AGENT_SHIM_STATUSLINE";
265
338
  }
@@ -4325,7 +4398,7 @@ var init_package = __esm({
4325
4398
  "package.json"() {
4326
4399
  package_default = {
4327
4400
  name: "claude-use",
4328
- version: "11.52.1",
4401
+ version: "11.54.0",
4329
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.",
4330
4403
  license: "MIT",
4331
4404
  author: "Joseph Mearman <joseph@mearman.co.uk>",
@@ -7501,6 +7574,9 @@ function keyOf(path43, leaf) {
7501
7574
  if (leaf instanceof import_zod15.z.ZodNumber) {
7502
7575
  return { ...common, kind: "integer", choices: [] };
7503
7576
  }
7577
+ if (leaf instanceof import_zod15.z.ZodBoolean) {
7578
+ return { ...common, kind: "boolean", choices: [] };
7579
+ }
7504
7580
  if (leaf instanceof import_zod15.z.ZodString) {
7505
7581
  return { ...common, kind: "text", choices: [] };
7506
7582
  }
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,12 +144,12 @@ function resolveStatusline(settings) {
144
144
  }
145
145
  return resolved;
146
146
  }
147
- var STATUSLINE_HEADER_SEGMENTS, STATUSLINE_ROWS, STATUSLINE_COLOUR_NAMES, 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"];
152
- STATUSLINE_ROWS = ["context", "quota"];
151
+ STATUSLINE_HEADER_SEGMENTS = ["model", "provider", "route", "account", "identity", "headroom", "project", "vcs", "effort", "advisor", "version", "outputStyle"];
152
+ STATUSLINE_ROWS = ["context", "quota", "addedDirs", "gitFiles"];
153
153
  STATUSLINE_COLOUR_NAMES = [
154
154
  "default",
155
155
  "dim",
@@ -170,21 +170,46 @@ var init_statusline = __esm({
170
170
  "brightCyan",
171
171
  "brightWhite"
172
172
  ];
173
+ DEFAULT_HEADER_SEGMENTS = ["model", "provider", "route", "account", "identity", "headroom"];
174
+ DEFAULT_ROWS = ["context", "quota"];
175
+ STATUSLINE_PATH_LEVELS = ["1", "2", "3", "full"];
173
176
  MAX_PERCENT = 100;
174
177
  MAX_STATUSLINE_PALETTE_INDEX = 255;
175
178
  MAX_STATUSLINE_LABEL_CHARS = 12;
176
179
  MAX_BAR_CELLS = 40;
180
+ MAX_ACCOUNT_USER_CHARS = 254;
181
+ MAX_DISPLAY_TEXT_CHARS = 80;
177
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;
178
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")]);
179
185
  GRAPHEMES = new Intl.Segmenter(void 0, { granularity: "grapheme" });
180
186
  barCharacter = z.string().refine(isSingleVisibleGrapheme, "must be a single visible character");
181
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");
182
189
  wholePercent = z.number().int().min(1).max(MAX_PERCENT);
183
190
  SHAPES = {
184
191
  layout: {
185
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."),
186
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.")
187
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
+ },
188
213
  bands: {
189
214
  warnAt: wholePercent.describe("The whole percentage of use at which a bar turns yellow; it must be below criticalAt."),
190
215
  criticalAt: wholePercent.describe("The whole percentage of use at which a bar turns red.")
@@ -206,25 +231,67 @@ var init_statusline = __esm({
206
231
  critical: colourValue.describe("The colour of a bar at or above bands.criticalAt, and of a cache hit share that is nearly nothing."),
207
232
  model: colourValue.describe("The colour of the model and provider segments."),
208
233
  label: colourValue.describe("The colour of labels and secondary text: row labels, and the route, account, identity and headroom segments."),
209
- empty: colourValue.describe("The colour of the unused part of a bar.")
234
+ empty: colourValue.describe("The colour of the unused part of a bar."),
235
+ project: colourValue.describe("The colour of the project path segment."),
236
+ git: colourValue.describe("The colour of the version control segment's wrapper text (`git:(` and `)`)."),
237
+ gitBranch: colourValue.describe("The colour of the branch or bookmark and its ahead, behind and dirty markers.")
238
+ },
239
+ project: {
240
+ pathLevels: z.enum(STATUSLINE_PATH_LEVELS).describe("How many trailing directories of the working directory the project segment shows: 1, 2 or 3, or full for the whole absolute path."),
241
+ addedDirsLayout: z.enum(["inline", "row"]).describe("Where the directories added to the session are drawn: inline, as +name after the project path in the project segment, or row, as an Added dirs line when layout.rows lists addedDirs.")
242
+ },
243
+ git: {
244
+ enabled: z.boolean().describe("Whether the vcs segment and the gitFiles row read the working directory's git status."),
245
+ showDirty: z.boolean().describe("Whether the branch is followed by * when the working tree has uncommitted changes."),
246
+ showAheadBehind: z.boolean().describe("Whether the branch is followed by the commits ahead of (up-arrow) and behind (down-arrow) its upstream."),
247
+ showLineDiff: z.boolean().describe("Whether the segment shows the total lines added and removed against HEAD, as [+a -d]."),
248
+ branchOverflow: z.enum(["truncate", "wrap"]).describe("How the vcs segment sits beside the project segment when they are listed next to each other: truncate keeps them as one unit the client cuts off at the terminal's edge, and wrap lets the line break between them."),
249
+ pushWarnAt: z.number().int().min(0).describe("The count of unpushed commits at which the ahead marker takes colours.warning; 0 turns it off."),
250
+ pushCriticalAt: z.number().int().min(0).describe("The count of unpushed commits at which the ahead marker takes colours.critical; 0 turns it off.")
251
+ },
252
+ jj: {
253
+ enabled: z.boolean().describe("Whether the vcs segment reads a Jujutsu repository's status, instead of git's, when the working directory is inside one."),
254
+ showDirty: z.boolean().describe("Whether the bookmark or change id is followed by * when the working-copy commit differs from its parent."),
255
+ showConflicts: z.boolean().describe("Whether the segment shows !conflict when the working-copy commit has an unresolved conflict.")
210
256
  }
211
257
  };
212
258
  StatuslineSchema = z.strictObject({
213
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(),
214
265
  bands: z.strictObject(SHAPES.bands).partial().optional(),
215
266
  labels: z.strictObject(SHAPES.labels).partial().optional(),
216
267
  bar: z.strictObject(SHAPES.bar).partial().optional(),
217
- colours: z.strictObject(SHAPES.colours).partial().optional()
268
+ colours: z.strictObject(SHAPES.colours).partial().optional(),
269
+ project: z.strictObject(SHAPES.project).partial().optional(),
270
+ git: z.strictObject(SHAPES.git).partial().optional(),
271
+ jj: z.strictObject(SHAPES.jj).partial().optional()
218
272
  });
219
273
  ResolvedStatuslineSchema = z.strictObject({
220
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),
221
280
  bands: z.strictObject(SHAPES.bands),
222
281
  labels: z.strictObject(SHAPES.labels),
223
282
  bar: z.strictObject(SHAPES.bar),
224
- colours: z.strictObject(SHAPES.colours)
283
+ colours: z.strictObject(SHAPES.colours),
284
+ project: z.strictObject(SHAPES.project),
285
+ git: z.strictObject(SHAPES.git),
286
+ jj: z.strictObject(SHAPES.jj)
225
287
  });
226
288
  STATUSLINE_DEFAULTS = {
227
- layout: { header: [...STATUSLINE_HEADER_SEGMENTS], rows: [...STATUSLINE_ROWS] },
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: "" },
228
295
  bands: { warnAt: 70, criticalAt: 90 },
229
296
  labels: { fiveHour: "5h", sevenDay: "Wk" },
230
297
  bar: { width: 10, filled: "\u2588", empty: "\u2591" },
@@ -236,8 +303,14 @@ var init_statusline = __esm({
236
303
  critical: "red",
237
304
  model: "default",
238
305
  label: "default",
239
- empty: "brightBlack"
240
- }
306
+ empty: "brightBlack",
307
+ project: "yellow",
308
+ git: "magenta",
309
+ gitBranch: "cyan"
310
+ },
311
+ project: { pathLevels: "1", addedDirsLayout: "inline" },
312
+ git: { enabled: true, showDirty: true, showAheadBehind: false, showLineDiff: false, branchOverflow: "truncate", pushWarnAt: 0, pushCriticalAt: 0 },
313
+ jj: { enabled: false, showDirty: true, showConflicts: true }
241
314
  };
242
315
  STATUSLINE_ENV = "AGENT_SHIM_STATUSLINE";
243
316
  }
@@ -4301,7 +4374,7 @@ var init_package = __esm({
4301
4374
  "package.json"() {
4302
4375
  package_default = {
4303
4376
  name: "claude-use",
4304
- version: "11.52.1",
4377
+ version: "11.54.0",
4305
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.",
4306
4379
  license: "MIT",
4307
4380
  author: "Joseph Mearman <joseph@mearman.co.uk>",
@@ -7476,6 +7549,9 @@ function keyOf(path43, leaf) {
7476
7549
  if (leaf instanceof z15.ZodNumber) {
7477
7550
  return { ...common, kind: "integer", choices: [] };
7478
7551
  }
7552
+ if (leaf instanceof z15.ZodBoolean) {
7553
+ return { ...common, kind: "boolean", choices: [] };
7554
+ }
7479
7555
  if (leaf instanceof z15.ZodString) {
7480
7556
  return { ...common, kind: "text", choices: [] };
7481
7557
  }