diff --git a/package.json b/package.json index 99408ff..56213d3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ccstatusline", - "version": "2.0.23", + "version": "2.0.24", "description": "A customizable status line formatter for Claude Code CLI", "module": "src/ccstatusline.ts", "type": "module", diff --git a/src/types/StatusJSON.ts b/src/types/StatusJSON.ts index 7569a5e..767b836 100644 --- a/src/types/StatusJSON.ts +++ b/src/types/StatusJSON.ts @@ -5,10 +5,13 @@ export const StatusJSONSchema = z.looseObject({ session_id: z.string().optional(), transcript_path: z.string().optional(), cwd: z.string().optional(), - model: z.object({ - id: z.string().optional(), - display_name: z.string().optional() - }).optional(), + model: z.union([ + z.string(), + z.object({ + id: z.string().optional(), + display_name: z.string().optional() + }) + ]).optional(), workspace: z.object({ current_dir: z.string().optional(), project_dir: z.string().optional() diff --git a/src/utils/context-percentage.ts b/src/utils/context-percentage.ts index 14872ec..fabeb2d 100644 --- a/src/utils/context-percentage.ts +++ b/src/utils/context-percentage.ts @@ -10,7 +10,8 @@ export function calculateContextPercentage(context: RenderContext): number { return 0; } - const modelId = context.data?.model?.id; + const model = context.data?.model; + const modelId = typeof model === 'string' ? model : model?.id; const contextConfig = getContextConfig(modelId); return Math.min(100, (context.tokenMetrics.contextLength / contextConfig.maxTokens) * 100); diff --git a/src/widgets/ContextPercentage.ts b/src/widgets/ContextPercentage.ts index 3369204..7111dbb 100644 --- a/src/widgets/ContextPercentage.ts +++ b/src/widgets/ContextPercentage.ts @@ -47,7 +47,8 @@ export class ContextPercentageWidget implements Widget { const previewValue = isInverse ? '90.7%' : '9.3%'; return item.rawValue ? previewValue : `Ctx: ${previewValue}`; } else if (context.tokenMetrics) { - const modelId = context.data?.model?.id; + const model = context.data?.model; + const modelId = typeof model === 'string' ? model : model?.id; const contextConfig = getContextConfig(modelId); const usedPercentage = Math.min(100, (context.tokenMetrics.contextLength / contextConfig.maxTokens) * 100); const displayPercentage = isInverse ? (100 - usedPercentage) : usedPercentage; diff --git a/src/widgets/ContextPercentageUsable.ts b/src/widgets/ContextPercentageUsable.ts index 8b0e138..7ab5446 100644 --- a/src/widgets/ContextPercentageUsable.ts +++ b/src/widgets/ContextPercentageUsable.ts @@ -47,7 +47,8 @@ export class ContextPercentageUsableWidget implements Widget { const previewValue = isInverse ? '88.4%' : '11.6%'; return item.rawValue ? previewValue : `Ctx(u): ${previewValue}`; } else if (context.tokenMetrics) { - const modelId = context.data?.model?.id; + const model = context.data?.model; + const modelId = typeof model === 'string' ? model : model?.id; const contextConfig = getContextConfig(modelId); const usedPercentage = Math.min(100, (context.tokenMetrics.contextLength / contextConfig.usableTokens) * 100); const displayPercentage = isInverse ? (100 - usedPercentage) : usedPercentage; diff --git a/src/widgets/Model.ts b/src/widgets/Model.ts index 3de797d..c4c22f4 100644 --- a/src/widgets/Model.ts +++ b/src/widgets/Model.ts @@ -17,8 +17,15 @@ export class ModelWidget implements Widget { render(item: WidgetItem, context: RenderContext, settings: Settings): string | null { if (context.isPreview) { return item.rawValue ? 'Claude' : 'Model: Claude'; - } else if (context.data?.model?.display_name) { - return item.rawValue ? context.data.model.display_name : `Model: ${context.data.model.display_name}`; + } + + const model = context.data?.model; + const modelDisplayName = typeof model === 'string' + ? model + : (model?.display_name ?? model?.id); + + if (modelDisplayName) { + return item.rawValue ? modelDisplayName : `Model: ${modelDisplayName}`; } return null; }