From d1ba0c0be5a6b9037a7f03879e5b9116a1d55298 Mon Sep 17 00:00:00 2001 From: Matthew Breedlove Date: Mon, 18 Aug 2025 02:40:34 -0400 Subject: [PATCH] Adding block timer widget, miscellaneous UI improvements --- README.md | 32 ++- bun.lock | 1 + package.json | 3 +- screenshots/blockTimer.png | Bin 0 -> 143597 bytes screenshots/blockTimerSmall.png | Bin 0 -> 20399 bytes src/ccstatusline.ts | 13 +- src/tui/components/ColorMenu.tsx | 8 +- src/tui/components/ItemsEditor.tsx | 69 ++++-- src/types/RenderContext.ts | 3 + src/types/Settings.ts | 2 +- src/types/Widget.ts | 5 +- src/utils/jsonl.ts | 323 +++++++++++++++++++++++++ src/utils/migrations.ts | 20 ++ src/utils/renderer.ts | 136 ----------- src/utils/widgets.ts | 1 + src/widgets/BlockTimer.ts | 121 +++++++++ src/widgets/ContextLength.ts | 1 + src/widgets/ContextPercentage.ts | 1 + src/widgets/ContextPercentageUsable.ts | 1 + src/widgets/CustomCommand.tsx | 8 + src/widgets/CustomText.tsx | 1 + src/widgets/GitBranch.ts | 1 + src/widgets/GitChanges.ts | 1 + src/widgets/Model.ts | 1 + src/widgets/OutputStyle.ts | 1 + src/widgets/SessionClock.ts | 1 + src/widgets/TerminalWidth.ts | 1 + src/widgets/TokensCached.ts | 1 + src/widgets/TokensInput.ts | 1 + src/widgets/TokensOutput.ts | 1 + src/widgets/TokensTotal.ts | 1 + src/widgets/Version.ts | 1 + src/widgets/index.ts | 3 +- 33 files changed, 600 insertions(+), 163 deletions(-) create mode 100644 screenshots/blockTimer.png create mode 100644 screenshots/blockTimerSmall.png create mode 100644 src/utils/jsonl.ts create mode 100644 src/widgets/BlockTimer.ts diff --git a/README.md b/README.md index 3365be8..af35568 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,16 @@ ## πŸ†• Recent Updates +### v2.0.2 - Block Timer Widget + +![Block Timer](https://raw.githubusercontent.com/sirmalloc/ccstatusline/main/screenshots/blockTimerSmall.png) + +- **⏱️ Block Timer** - Track your progress through 5-hour Claude Code blocks + - Displays time elapsed in current block as hours/minutes (e.g., "3hr 45m") + - Progress bar mode shows visual completion percentage + - Two progress bar styles: full width (32 chars) or compact (16 chars) + - Automatically detects block boundaries from transcript timestamps + ### v2.0.0 - Powerline Support & Enhanced Themes - **⚑ Powerline Mode** - Beautiful Powerline-style status lines with arrow separators and customizable caps - **🎨 Built-in Themes** - Multiple pre-configured themes that you can copy and customize @@ -55,7 +65,7 @@ ## ✨ Features -- **πŸ“Š Real-time Metrics** - Display model name, git branch, token usage, session duration, and more +- **πŸ“Š Real-time Metrics** - Display model name, git branch, token usage, session duration, block timer, and more - **🎨 Fully Customizable** - Choose what to display and customize colors for each element - **⚑ Powerline Support** - Beautiful Powerline-style rendering with arrow separators, caps, and custom fonts - **πŸ“ Multi-line Support** - Configure up to 3 independent status lines @@ -104,6 +114,7 @@ Once configured, ccstatusline automatically formats your Claude Code status line - **Git Branch** - Displays current git branch name - **Git Changes** - Shows uncommitted insertions/deletions (e.g., "+42,-10") - **Session Clock** - Shows elapsed time since session start (e.g., "2hr 15m") +- **Block Timer** - Shows time elapsed in current 5-hour block or progress bar - **Version** - Shows Claude Code version - **Output Style** - Shows the currently set output style in Claude Code - **Tokens Input** - Shows input tokens used @@ -161,11 +172,30 @@ Configure global formatting preferences that apply to all status items: > ⚠️ **VSCode Users:** If colors appear incorrect in the VSCode integrated terminal, the "Terminal β€Ί Integrated: Minimum Contrast Ratio" (`terminal.integrated.minimumContrastRatio`) setting is forcing a minimum contrast between foreground and background colors. You can adjust this setting to 1 to disable the contrast enforcement, or use a standalone terminal for accurate colors. +### ⏱️ Block Timer Widget + +The Block Timer widget helps you track your progress through Claude Code's 5-hour conversation blocks: + +![Block Timer](https://raw.githubusercontent.com/sirmalloc/ccstatusline/main/screenshots/blockTimer.png) + +**Display Modes:** +- **Time Display** - Shows elapsed time as "3hr 45m" (default) +- **Progress Bar** - Full width 32-character progress bar with percentage +- **Progress Bar (Short)** - Compact 16-character progress bar with percentage + +**Features:** +- Automatically detects block boundaries from transcript timestamps +- Floors block start time to the hour for consistent tracking +- Shows "Block: 3hr 45m" in normal mode or just "3hr 45m" in raw value mode +- Progress bars show completion percentage (e.g., "[β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘] 73.9%") +- Toggle between modes with the **(p)** key in the items editor + ### πŸ”€ Raw Value Mode Some items support "raw value" mode which displays just the value without a label: - Normal: `Model: Claude 3.5 Sonnet` β†’ Raw: `Claude 3.5 Sonnet` - Normal: `Session: 2hr 15m` β†’ Raw: `2hr 15m` +- Normal: `Block: 3hr 45m` β†’ Raw: `3hr 45m` - Normal: `Ctx: 18.6k` β†’ Raw: `18.6k` --- diff --git a/bun.lock b/bun.lock index 3465052..00e9146 100644 --- a/bun.lock +++ b/bun.lock @@ -25,6 +25,7 @@ "patch-package": "^8.0.0", "react": "^19.1.1", "react-devtools-core": "^6.1.5", + "tinyglobby": "^0.2.14", "typescript": "^5.9.2", "typescript-eslint": "^8.39.1", }, diff --git a/package.json b/package.json index 7af038b..32872e2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ccstatusline", - "version": "2.0.1", + "version": "2.0.2", "description": "A customizable status line formatter for Claude Code CLI", "module": "src/ccstatusline.ts", "type": "module", @@ -37,6 +37,7 @@ "patch-package": "^8.0.0", "react": "^19.1.1", "react-devtools-core": "^6.1.5", + "tinyglobby": "^0.2.14", "typescript": "^5.9.2", "typescript-eslint": "^8.39.1" }, diff --git a/screenshots/blockTimer.png b/screenshots/blockTimer.png new file mode 100644 index 0000000000000000000000000000000000000000..ccc29911f3c5364fec1574eac35d0a18e72a35a3 GIT binary patch literal 143597 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 z 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
  • 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 G;C}#aQ!n}e literal 0 HcmV?d00001 diff --git a/screenshots/blockTimerSmall.png b/screenshots/blockTimerSmall.png new file mode 100644 index 0000000000000000000000000000000000000000..b97a2f09432c45830ed8d22ddec2c360b8e9ff82 GIT binary patch literal 20399 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 literal 0 HcmV?d00001 diff --git a/src/ccstatusline.ts b/src/ccstatusline.ts index b48c76b..2c87ea6 100644 --- a/src/ccstatusline.ts +++ b/src/ccstatusline.ts @@ -9,8 +9,11 @@ import { saveSettings } from './utils/config'; import { + getBlockMetrics, getSessionDuration, - getTokenMetrics, + getTokenMetrics +} from './utils/jsonl'; +import { renderStatusLine, type RenderContext, type StatusJSON @@ -62,6 +65,9 @@ async function renderMultipleLines(data: StatusJSON) { // Check if session clock is needed const hasSessionClock = lines.some(line => line.some(item => item.type === 'session-clock')); + // Check if block timer is needed + const hasBlockTimer = lines.some(line => line.some(item => item.type === 'block-timer')); + let tokenMetrics = null; if (hasTokenItems && data.transcript_path) tokenMetrics = await getTokenMetrics(data.transcript_path); @@ -70,11 +76,16 @@ async function renderMultipleLines(data: StatusJSON) { if (hasSessionClock && data.transcript_path) sessionDuration = await getSessionDuration(data.transcript_path); + let blockMetrics = null; + if (hasBlockTimer && data.transcript_path) + blockMetrics = getBlockMetrics(data.transcript_path); + // Create render context const context: RenderContext = { data, tokenMetrics, sessionDuration, + blockMetrics, isPreview: false }; diff --git a/src/tui/components/ColorMenu.tsx b/src/tui/components/ColorMenu.tsx index b5fb036..778a00f 100644 --- a/src/tui/components/ColorMenu.tsx +++ b/src/tui/components/ColorMenu.tsx @@ -219,8 +219,10 @@ export const ColorMenu: React.FC = ({ widgets, lineIndex, settin const newItems = widgets.map((widget) => { if (widget.id === selectedWidget.id) { // Remove color, backgroundColor, and bold properties - // eslint-disable-next-line @typescript-eslint/no-unused-vars const { color, backgroundColor, bold, ...restWidget } = widget; + void color; // Intentionally unused + void backgroundColor; // Intentionally unused + void bold; // Intentionally unused return restWidget; } return widget; @@ -430,8 +432,10 @@ export const ColorMenu: React.FC = ({ widgets, lineIndex, settin // Clear all colors from all widgets const newItems = widgets.map((widget) => { // Remove color, backgroundColor, and bold properties - // eslint-disable-next-line @typescript-eslint/no-unused-vars const { color, backgroundColor, bold, ...restWidget } = widget; + void color; // Intentionally unused + void backgroundColor; // Intentionally unused + void bold; // Intentionally unused return restWidget; }); onUpdate(newItems); diff --git a/src/tui/components/ItemsEditor.tsx b/src/tui/components/ItemsEditor.tsx index aa5ae9d..61942bb 100644 --- a/src/tui/components/ItemsEditor.tsx +++ b/src/tui/components/ItemsEditor.tsx @@ -249,8 +249,8 @@ export const ItemsEditor: React.FC = ({ widgets, onUpdate, onB } if (nextMergeState === undefined) { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { merge: _merge, ...rest } = currentWidget; + const { merge, ...rest } = currentWidget; + void merge; // Intentionally unused newWidgets[selectedIndex] = rest; } else { newWidgets[selectedIndex] = { ...currentWidget, merge: nextMergeState }; @@ -270,11 +270,15 @@ export const ItemsEditor: React.FC = ({ widgets, onUpdate, onB const matchedKeybind = customKeybinds.find(kb => kb.key === input); if (matchedKeybind) { - // Handle toggle actions directly - if (matchedKeybind.action === 'toggle-preserve') { - const newWidgets = [...widgets]; - newWidgets[selectedIndex] = { ...currentWidget, preserveColors: !currentWidget.preserveColors }; - onUpdate(newWidgets); + // Check if widget handles the action directly + if (widgetImpl.handleEditorAction) { + // Let the widget handle the action directly + const updatedWidget = widgetImpl.handleEditorAction(matchedKeybind.action, currentWidget); + if (updatedWidget) { + const newWidgets = [...widgets]; + newWidgets[selectedIndex] = updatedWidget; + onUpdate(newWidgets); + } } else if (widgetImpl.renderEditor) { // Set the action on the widget if it supports it if (widgetImpl.setEditorAction) { @@ -387,7 +391,9 @@ export const ItemsEditor: React.FC = ({ widgets, onUpdate, onB )} {moveMode ? ( - ↑↓ to move item, ESC or Enter to exit move mode + + ↑↓ to move item, ESC or Enter to exit move mode + ) : ( {helpText} @@ -404,17 +410,21 @@ export const ItemsEditor: React.FC = ({ widgets, onUpdate, onB {widgets.length === 0 ? ( No items. Press 'a' to add one. ) : ( - widgets.map((widget, index) => { - const isSelected = index === selectedIndex; - const widgetImpl = widget.type !== 'separator' && widget.type !== 'flex-separator' ? getWidget(widget.type) : null; - const { displayText, modifierText } = widgetImpl?.getEditorDisplay(widget) ?? { displayText: getWidgetDisplay(widget) }; + <> + {widgets.map((widget, index) => { + const isSelected = index === selectedIndex; + const widgetImpl = widget.type !== 'separator' && widget.type !== 'flex-separator' ? getWidget(widget.type) : null; + const { displayText, modifierText } = widgetImpl?.getEditorDisplay(widget) ?? { displayText: getWidgetDisplay(widget) }; - return ( - - + return ( + + + + {isSelected ? (moveMode ? 'β—† ' : 'β–Ά ') : ' '} + + - {isSelected ? (moveMode ? 'β—† ' : 'β–Ά ') : ' '} - {` ${index + 1}. ${displayText || getWidgetDisplay(widget)}`} + {`${index + 1}. ${displayText || getWidgetDisplay(widget)}`} {modifierText && ( @@ -425,10 +435,31 @@ export const ItemsEditor: React.FC = ({ widgets, onUpdate, onB {widget.rawValue && (raw value)} {widget.merge === true && (mergedβ†’)} {widget.merge === 'no-padding' && (merged-no-padβ†’)} + + ); + })} + {/* Display description for selected widget */} + {currentWidget && ( + + + {(() => { + if (currentWidget.type === 'separator') { + return 'A separator character between status line items'; + } else if (currentWidget.type === 'flex-separator') { + return 'Expands to fill available terminal width'; + } else { + try { + const widgetImpl = getWidget(currentWidget.type); + return widgetImpl.getDescription(); + } catch { + return 'Widget description not available'; + } + } + })()} - ); - }) + )} + )} diff --git a/src/types/RenderContext.ts b/src/types/RenderContext.ts index 59cc852..7d84431 100644 --- a/src/types/RenderContext.ts +++ b/src/types/RenderContext.ts @@ -1,3 +1,5 @@ +import type { BlockInfo } from '../utils/jsonl'; + import type { StatusJSON } from './StatusJSON'; import type { TokenMetrics } from './TokenMetrics'; @@ -5,6 +7,7 @@ export interface RenderContext { data?: StatusJSON; tokenMetrics?: TokenMetrics | null; sessionDuration?: string | null; + blockMetrics?: BlockInfo | null; terminalWidth?: number | null; isPreview?: boolean; lineIndex?: number; // Index of the current line being rendered (for theme cycling) diff --git a/src/types/Settings.ts b/src/types/Settings.ts index 1b38c8b..05e2d45 100644 --- a/src/types/Settings.ts +++ b/src/types/Settings.ts @@ -6,7 +6,7 @@ import { PowerlineConfigSchema } from './PowerlineConfig'; import { WidgetItemSchema } from './Widget'; // Current version - bump this when making breaking changes to the schema -export const CURRENT_VERSION = 2; +export const CURRENT_VERSION = 3; // Schema for v1 settings (before version field was added) export const SettingsSchema_v1 = z.object({ diff --git a/src/types/Widget.ts b/src/types/Widget.ts index dac78b4..3f48093 100644 --- a/src/types/Widget.ts +++ b/src/types/Widget.ts @@ -17,7 +17,8 @@ export const WidgetItemSchema = z.object({ maxWidth: z.number().optional(), preserveColors: z.boolean().optional(), timeout: z.number().optional(), - merge: z.union([z.boolean(), z.literal('no-padding')]).optional() + merge: z.union([z.boolean(), z.literal('no-padding')]).optional(), + metadata: z.record(z.string(), z.string()).optional() }); // Inferred types from Zod schemas @@ -31,6 +32,7 @@ export interface WidgetEditorDisplay { export interface Widget { getDefaultColor(): string; + getDescription(): string; getDisplayName(): string; getEditorDisplay(item: WidgetItem): WidgetEditorDisplay; render(item: WidgetItem, context: RenderContext, settings: Settings): string | null; @@ -39,6 +41,7 @@ export interface Widget { supportsRawValue(): boolean; supportsColors(item: WidgetItem): boolean; setEditorAction?(action: string): void; + handleEditorAction?(action: string, item: WidgetItem): WidgetItem | null; } export interface WidgetEditorProps { diff --git a/src/utils/jsonl.ts b/src/utils/jsonl.ts new file mode 100644 index 0000000..f1cae04 --- /dev/null +++ b/src/utils/jsonl.ts @@ -0,0 +1,323 @@ +import * as fs from 'fs'; +import path from 'node:path'; +import { globSync } from 'tinyglobby'; +import { promisify } from 'util'; + +import type { + TokenMetrics, + TranscriptLine +} from '../types'; + +// Ensure fs.promises compatibility for older Node versions +const readFile = promisify(fs.readFile); +const readFileSync = fs.readFileSync; +const statSync = fs.statSync; + +export interface BlockInfo { + startTime: Date; + lastActivity: Date; + isActive: boolean; +} + +export async function getSessionDuration(transcriptPath: string): Promise { + try { + if (!fs.existsSync(transcriptPath)) { + return null; + } + + const content = await readFile(transcriptPath, 'utf-8'); + const lines = content.trim().split('\n').filter((line: string) => line.trim()); + + if (lines.length === 0) { + return null; + } + + let firstTimestamp: Date | null = null; + let lastTimestamp: Date | null = null; + + // Find first valid timestamp + for (const line of lines) { + try { + const data = JSON.parse(line) as { timestamp?: string }; + if (data.timestamp) { + firstTimestamp = new Date(data.timestamp); + break; + } + } catch { + // Skip invalid lines + } + } + + // Find last valid timestamp (iterate backwards) + for (let i = lines.length - 1; i >= 0; i--) { + try { + const data = JSON.parse(lines[i] ?? '') as { timestamp?: string }; + if (data.timestamp) { + lastTimestamp = new Date(data.timestamp); + break; + } + } catch { + // Skip invalid lines + } + } + + if (!firstTimestamp || !lastTimestamp) { + return null; + } + + // Calculate duration in milliseconds + const durationMs = lastTimestamp.getTime() - firstTimestamp.getTime(); + + // Convert to minutes + const totalMinutes = Math.floor(durationMs / (1000 * 60)); + + if (totalMinutes < 1) { + return '<1m'; + } + + const hours = Math.floor(totalMinutes / 60); + const minutes = totalMinutes % 60; + + if (hours === 0) { + return `${minutes}m`; + } else if (minutes === 0) { + return `${hours}hr`; + } else { + return `${hours}hr ${minutes}m`; + } + } catch { + return null; + } +} + +export async function getTokenMetrics(transcriptPath: string): Promise { + try { + // Use Node.js-compatible file reading + if (!fs.existsSync(transcriptPath)) { + return { inputTokens: 0, outputTokens: 0, cachedTokens: 0, totalTokens: 0, contextLength: 0 }; + } + + const content = await readFile(transcriptPath, 'utf-8'); + const lines = content.trim().split('\n'); + + let inputTokens = 0; + let outputTokens = 0; + let cachedTokens = 0; + let contextLength = 0; + + // Parse each line and sum up token usage for totals + let mostRecentMainChainEntry: TranscriptLine | null = null; + let mostRecentTimestamp: Date | null = null; + + for (const line of lines) { + try { + const data = JSON.parse(line) as TranscriptLine; + if (data.message?.usage) { + inputTokens += data.message.usage.input_tokens || 0; + outputTokens += data.message.usage.output_tokens || 0; + cachedTokens += data.message.usage.cache_read_input_tokens ?? 0; + cachedTokens += data.message.usage.cache_creation_input_tokens ?? 0; + + // Track the most recent entry with isSidechain: false (or undefined, which defaults to main chain) + if (data.isSidechain !== true && data.timestamp) { + const entryTime = new Date(data.timestamp); + if (!mostRecentTimestamp || entryTime > mostRecentTimestamp) { + mostRecentTimestamp = entryTime; + mostRecentMainChainEntry = data; + } + } + } + } catch { + // Skip invalid JSON lines + } + } + + // Calculate context length from the most recent main chain message + if (mostRecentMainChainEntry?.message?.usage) { + const usage = mostRecentMainChainEntry.message.usage; + contextLength = (usage.input_tokens || 0) + + (usage.cache_read_input_tokens ?? 0) + + (usage.cache_creation_input_tokens ?? 0); + } + + const totalTokens = inputTokens + outputTokens + cachedTokens; + + return { inputTokens, outputTokens, cachedTokens, totalTokens, contextLength }; + } catch { + return { inputTokens: 0, outputTokens: 0, cachedTokens: 0, totalTokens: 0, contextLength: 0 }; + } +} + +/** + * Gets block metrics for the current 5-hour block from JSONL files + */ +export function getBlockMetrics(transcriptPath: string | undefined): BlockInfo | null { + if (!transcriptPath || typeof transcriptPath !== 'string') { + return null; + } + + // Walk up the directory tree to find .claude folder + let currentPath = path.dirname(transcriptPath); + let claudePath: string | null = null; + + while (currentPath && currentPath !== path.dirname(currentPath)) { + const baseName = path.basename(currentPath); + if (baseName === '.claude') { + claudePath = currentPath; + break; + } + currentPath = path.dirname(currentPath); + } + + if (!claudePath) { + return null; + } + + try { + return findMostRecentBlockStartTime(claudePath); + } catch { + return null; + } +} + +/** + * Efficiently finds the most recent 5-hour block start time from JSONL files + * Uses file modification times as hints to avoid unnecessary reads + */ +function findMostRecentBlockStartTime( + rootDir: string, + sessionDurationHours = 5 +): BlockInfo | null { + const sessionDurationMs = sessionDurationHours * 60 * 60 * 1000; + const now = new Date(); + + // Step 1: Find all JSONL files with their modification times + const pattern = path.join(rootDir, 'projects', '**', '*.jsonl').replace(/\\/g, '/'); + const files = globSync([pattern]); + + if (files.length === 0) { + return null; + } + + // Step 2: Get file stats and sort by modification time (most recent first) + const filesWithStats = files.map((file) => { + const stats = statSync(file); + return { file, mtime: stats.mtime }; + }); + + filesWithStats.sort((a, b) => b.mtime.getTime() - a.mtime.getTime()); + + // Step 3: Collect recent timestamps to properly identify blocks + // We need to look back far enough to find the start of the current/recent block + const timestamps: Date[] = []; + // Look back 20 hours to find the current session + const cutoffTime = new Date(now.getTime() - 20 * 60 * 60 * 1000); + + for (const { file, mtime } of filesWithStats) { + // Skip files that are too old (optimization) + if (mtime.getTime() < cutoffTime.getTime()) { + break; + } + + // Get all timestamps from this file (not just the latest) + const fileTimestamps = getAllTimestampsFromFile(file); + timestamps.push(...fileTimestamps); + } + + if (timestamps.length === 0) { + return null; + } + + // Step 4: Sort timestamps and identify the most recent block + timestamps.sort((a, b) => b.getTime() - a.getTime()); // Most recent first + + // Find the most recent timestamp + const mostRecentTimestamp = timestamps[0]; + if (!mostRecentTimestamp) { + return null; + } + + // Now work backwards to find the start of this block + let blockStartTimestamp: Date = mostRecentTimestamp; + + for (let i = 1; i < timestamps.length; i++) { + const currentTimestamp = timestamps[i]; + const previousTimestamp = timestamps[i - 1]; + + if (!currentTimestamp || !previousTimestamp) { + continue; + } + + // Check if there's a gap larger than session duration + const gap = previousTimestamp.getTime() - currentTimestamp.getTime(); + + if (gap > sessionDurationMs) { + // We found a gap - the current block starts with previousTimestamp + break; + } + + // Check if we're still within the session duration from the most recent + const timeFromMostRecent = mostRecentTimestamp.getTime() - currentTimestamp.getTime(); + + if (timeFromMostRecent < sessionDurationMs) { + // This timestamp is still part of the current block + blockStartTimestamp = currentTimestamp; + } else { + // We've gone too far back + break; + } + } + + // Floor the block start to the hour + const blockStart = floorToHour(blockStartTimestamp); + const timeSinceActivity = now.getTime() - mostRecentTimestamp.getTime(); + const blockEnd = new Date(blockStart.getTime() + sessionDurationMs); + + // Check if block is still active + const isActive = timeSinceActivity < sessionDurationMs && now < blockEnd; + + return { + startTime: blockStart, + lastActivity: mostRecentTimestamp, + isActive + }; +} + +/** + * Gets all timestamps from a JSONL file + */ +function getAllTimestampsFromFile(filePath: string): Date[] { + const timestamps: Date[] = []; + try { + const content = readFileSync(filePath, 'utf-8'); + const lines = content.trim().split('\n').filter(line => line.length > 0); + + for (const line of lines) { + try { + const json = JSON.parse(line) as { timestamp?: string }; + if (json.timestamp && typeof json.timestamp === 'string') { + const date = new Date(json.timestamp); + if (!Number.isNaN(date.getTime())) { + timestamps.push(date); + } + } + } catch { + // Skip invalid JSON lines + continue; + } + } + + return timestamps; + } catch { + return []; + } +} + +/** + * Floors a timestamp to the beginning of the hour (matching existing logic) + */ +function floorToHour(timestamp: Date): Date { + const floored = new Date(timestamp); + floored.setUTCMinutes(0, 0, 0); + return floored; +} \ No newline at end of file diff --git a/src/utils/migrations.ts b/src/utils/migrations.ts index e5425bc..35dbc5b 100644 --- a/src/utils/migrations.ts +++ b/src/utils/migrations.ts @@ -89,6 +89,26 @@ export const migrations: Migration[] = [ remaining: 12 }; + return migrated; + } + }, + { + fromVersion: 2, + toVersion: 3, + description: 'Migrate from v2 to v3', + migrate: (data) => { + // Copy all existing data to v3 + const migrated: Record = { ...data }; + + // Update version to 3 + migrated.version = 3; + + // Add update message for v3 migration + migrated.updatemessage = { + message: 'ccstatusline updated to v2.0.2, 5hr block timer widget added', + remaining: 12 + }; + return migrated; } } diff --git a/src/utils/renderer.ts b/src/utils/renderer.ts index 5d99c04..3076ccf 100644 --- a/src/utils/renderer.ts +++ b/src/utils/renderer.ts @@ -1,14 +1,10 @@ import chalk from 'chalk'; -import * as fs from 'fs'; -import { promisify } from 'util'; // ANSI escape sequence for stripping color codes const ANSI_REGEX = new RegExp(`\\x1b\\[[0-9;]*m`, 'g'); import type { RenderContext, - TokenMetrics, - TranscriptLine, WidgetItem } from '../types'; import { getColorLevelString } from '../types/ColorLevel'; @@ -28,9 +24,6 @@ export type { StatusJSON } from '../types/StatusJSON'; export type { TokenMetrics, TokenUsage, TranscriptLine } from '../types/TokenMetrics'; export type { RenderContext } from '../types/RenderContext'; -// Ensure fs.promises compatibility for older Node versions -const readFile = promisify(fs.readFile); - // Color functions moved to colors.ts // Re-exported for backward compatibility export { applyColors } from './colors'; @@ -47,135 +40,6 @@ export function formatTokens(count: number): string { return count.toString(); } -export async function getSessionDuration(transcriptPath: string): Promise { - try { - if (!fs.existsSync(transcriptPath)) { - return null; - } - - const content = await readFile(transcriptPath, 'utf-8'); - const lines = content.trim().split('\n').filter((line: string) => line.trim()); - - if (lines.length === 0) { - return null; - } - - let firstTimestamp: Date | null = null; - let lastTimestamp: Date | null = null; - - // Find first valid timestamp - for (const line of lines) { - try { - const data = JSON.parse(line) as { timestamp?: string }; - if (data.timestamp) { - firstTimestamp = new Date(data.timestamp); - break; - } - } catch { - // Skip invalid lines - } - } - - // Find last valid timestamp (iterate backwards) - for (let i = lines.length - 1; i >= 0; i--) { - try { - const data = JSON.parse(lines[i] ?? '') as { timestamp?: string }; - if (data.timestamp) { - lastTimestamp = new Date(data.timestamp); - break; - } - } catch { - // Skip invalid lines - } - } - - if (!firstTimestamp || !lastTimestamp) { - return null; - } - - // Calculate duration in milliseconds - const durationMs = lastTimestamp.getTime() - firstTimestamp.getTime(); - - // Convert to minutes - const totalMinutes = Math.floor(durationMs / (1000 * 60)); - - if (totalMinutes < 1) { - return '<1m'; - } - - const hours = Math.floor(totalMinutes / 60); - const minutes = totalMinutes % 60; - - if (hours === 0) { - return `${minutes}m`; - } else if (minutes === 0) { - return `${hours}hr`; - } else { - return `${hours}hr ${minutes}m`; - } - } catch { - return null; - } -} - -export async function getTokenMetrics(transcriptPath: string): Promise { - try { - // Use Node.js-compatible file reading - if (!fs.existsSync(transcriptPath)) { - return { inputTokens: 0, outputTokens: 0, cachedTokens: 0, totalTokens: 0, contextLength: 0 }; - } - - const content = await readFile(transcriptPath, 'utf-8'); - const lines = content.trim().split('\n'); - - let inputTokens = 0; - let outputTokens = 0; - let cachedTokens = 0; - let contextLength = 0; - - // Parse each line and sum up token usage for totals - let mostRecentMainChainEntry: TranscriptLine | null = null; - let mostRecentTimestamp: Date | null = null; - - for (const line of lines) { - try { - const data = JSON.parse(line) as TranscriptLine; - if (data.message?.usage) { - inputTokens += data.message.usage.input_tokens || 0; - outputTokens += data.message.usage.output_tokens || 0; - cachedTokens += data.message.usage.cache_read_input_tokens ?? 0; - cachedTokens += data.message.usage.cache_creation_input_tokens ?? 0; - - // Track the most recent entry with isSidechain: false (or undefined, which defaults to main chain) - if (data.isSidechain !== true && data.timestamp) { - const entryTime = new Date(data.timestamp); - if (!mostRecentTimestamp || entryTime > mostRecentTimestamp) { - mostRecentTimestamp = entryTime; - mostRecentMainChainEntry = data; - } - } - } - } catch { - // Skip invalid JSON lines - } - } - - // Calculate context length from the most recent main chain message - if (mostRecentMainChainEntry?.message?.usage) { - const usage = mostRecentMainChainEntry.message.usage; - contextLength = (usage.input_tokens || 0) - + (usage.cache_read_input_tokens ?? 0) - + (usage.cache_creation_input_tokens ?? 0); - } - - const totalTokens = inputTokens + outputTokens + cachedTokens; - - return { inputTokens, outputTokens, cachedTokens, totalTokens, contextLength }; - } catch { - return { inputTokens: 0, outputTokens: 0, cachedTokens: 0, totalTokens: 0, contextLength: 0 }; - } -} - function renderPowerlineStatusLine( widgets: WidgetItem[], settings: Settings, diff --git a/src/utils/widgets.ts b/src/utils/widgets.ts index 280b49c..a21163f 100644 --- a/src/utils/widgets.ts +++ b/src/utils/widgets.ts @@ -19,6 +19,7 @@ const widgetRegistry = new Map([ ['context-percentage', new widgets.ContextPercentageWidget()], ['context-percentage-usable', new widgets.ContextPercentageUsableWidget()], ['session-clock', new widgets.SessionClockWidget()], + ['block-timer', new widgets.BlockTimerWidget()], ['terminal-width', new widgets.TerminalWidthWidget()], ['version', new widgets.VersionWidget()], ['custom-text', new widgets.CustomTextWidget()], diff --git a/src/widgets/BlockTimer.ts b/src/widgets/BlockTimer.ts new file mode 100644 index 0000000..fc41666 --- /dev/null +++ b/src/widgets/BlockTimer.ts @@ -0,0 +1,121 @@ +import type { RenderContext } from '../types/RenderContext'; +import type { Settings } from '../types/Settings'; +import type { + CustomKeybind, + Widget, + WidgetEditorDisplay, + WidgetItem +} from '../types/Widget'; + +type DisplayMode = 'time' | 'progress' | 'progress-short'; + +export class BlockTimerWidget implements Widget { + getDefaultColor(): string { return 'yellow'; } + getDescription(): string { return 'Shows elapsed time since beginning of current 5hr block'; } + getDisplayName(): string { return 'Block Timer'; } + + getEditorDisplay(item: WidgetItem): WidgetEditorDisplay { + const mode = item.metadata?.display ?? 'time'; + const modifiers: string[] = []; + + if (mode === 'progress') { + modifiers.push('progress bar'); + } else if (mode === 'progress-short') { + modifiers.push('short bar'); + } + + return { + displayText: this.getDisplayName(), + modifierText: modifiers.length > 0 ? `(${modifiers.join(', ')})` : undefined + }; + } + + handleEditorAction(action: string, item: WidgetItem): WidgetItem | null { + if (action === 'toggle-progress') { + const currentMode = (item.metadata?.display ?? 'time') as DisplayMode; + let nextMode: DisplayMode; + + if (currentMode === 'time') { + nextMode = 'progress'; + } else if (currentMode === 'progress') { + nextMode = 'progress-short'; + } else { + nextMode = 'time'; + } + + return { + ...item, + metadata: { + ...item.metadata, + display: nextMode + } + }; + } + return null; + } + + render(item: WidgetItem, context: RenderContext, settings: Settings): string | null { + const displayMode = (item.metadata?.display ?? 'time') as DisplayMode; + + if (context.isPreview) { + if (displayMode === 'progress') { + return 'Block [β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘] 73.9%'; + } else if (displayMode === 'progress-short') { + return 'Block [β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘] 73.9%'; + } + return item.rawValue ? '3hr 45m' : 'Block: 3hr 45m'; + } + + // Check if we have block metrics in context + const blockInfo = context.blockMetrics; + if (!blockInfo) { + return null; + } + + try { + // Calculate elapsed time and progress + const now = new Date(); + const elapsedMs = now.getTime() - blockInfo.startTime.getTime(); + const sessionDurationMs = 5 * 60 * 60 * 1000; // 5 hours + const progress = Math.min(elapsedMs / sessionDurationMs, 1.0); + const percentage = (progress * 100).toFixed(1); + + if (displayMode === 'progress' || displayMode === 'progress-short') { + const barWidth = displayMode === 'progress' ? 32 : 16; + const filledWidth = Math.floor(progress * barWidth); + const emptyWidth = barWidth - filledWidth; + const progressBar = 'β–ˆ'.repeat(filledWidth) + 'β–‘'.repeat(emptyWidth); + + if (item.rawValue) { + return `[${progressBar}] ${percentage}%`; + } else { + return `Block [${progressBar}] ${percentage}%`; + } + } else { + // Time display mode + const elapsedHours = Math.floor(elapsedMs / (1000 * 60 * 60)); + const elapsedMinutes = Math.floor((elapsedMs % (1000 * 60 * 60)) / (1000 * 60)); + + let timeString: string; + if (elapsedMinutes === 0) { + timeString = `${elapsedHours}hr`; + } else { + timeString = `${elapsedHours}hr ${elapsedMinutes}m`; + } + + return item.rawValue ? timeString : `Block: ${timeString}`; + } + } catch { + return null; + } + } + + getCustomKeybinds(): CustomKeybind[] { + return [ + { key: 'p', label: '(p)rogress toggle', action: 'toggle-progress' } + ]; + } + + supportsRawValue(): boolean { return true; } + supportsColors(item: WidgetItem): boolean { return true; } +} \ No newline at end of file diff --git a/src/widgets/ContextLength.ts b/src/widgets/ContextLength.ts index 5a6f55a..3d60f77 100644 --- a/src/widgets/ContextLength.ts +++ b/src/widgets/ContextLength.ts @@ -9,6 +9,7 @@ import { formatTokens } from '../utils/renderer'; export class ContextLengthWidget implements Widget { getDefaultColor(): string { return 'brightBlack'; } + getDescription(): string { return 'Shows the current context window size in tokens'; } getDisplayName(): string { return 'Context Length'; } getEditorDisplay(item: WidgetItem): WidgetEditorDisplay { return { displayText: this.getDisplayName() }; diff --git a/src/widgets/ContextPercentage.ts b/src/widgets/ContextPercentage.ts index a0e1309..5bf6974 100644 --- a/src/widgets/ContextPercentage.ts +++ b/src/widgets/ContextPercentage.ts @@ -8,6 +8,7 @@ import type { export class ContextPercentageWidget implements Widget { getDefaultColor(): string { return 'blue'; } + getDescription(): string { return 'Shows percentage of context window used (of 200k tokens)'; } getDisplayName(): string { return 'Context %'; } getEditorDisplay(item: WidgetItem): WidgetEditorDisplay { return { displayText: this.getDisplayName() }; diff --git a/src/widgets/ContextPercentageUsable.ts b/src/widgets/ContextPercentageUsable.ts index 624d4dd..37bd1c8 100644 --- a/src/widgets/ContextPercentageUsable.ts +++ b/src/widgets/ContextPercentageUsable.ts @@ -8,6 +8,7 @@ import type { export class ContextPercentageUsableWidget implements Widget { getDefaultColor(): string { return 'green'; } + getDescription(): string { return 'Shows percentage of usable context window used (of 160k tokens before auto-compact)'; } getDisplayName(): string { return 'Context % (usable)'; } getEditorDisplay(item: WidgetItem): WidgetEditorDisplay { return { displayText: this.getDisplayName() }; diff --git a/src/widgets/CustomCommand.tsx b/src/widgets/CustomCommand.tsx index 3dc88e0..9026f7d 100644 --- a/src/widgets/CustomCommand.tsx +++ b/src/widgets/CustomCommand.tsx @@ -20,6 +20,7 @@ export class CustomCommandWidget implements Widget { private currentAction: string = 'edit-command'; getDefaultColor(): string { return 'white'; } + getDescription(): string { return 'Executes a custom shell command and displays output'; } getDisplayName(): string { return 'Custom Command'; } getEditorDisplay(item: WidgetItem): WidgetEditorDisplay { @@ -49,6 +50,13 @@ export class CustomCommandWidget implements Widget { this.currentAction = action; } + handleEditorAction(action: string, item: WidgetItem): WidgetItem | null { + if (action === 'toggle-preserve') { + return { ...item, preserveColors: !item.preserveColors }; + } + return null; + } + render(item: WidgetItem, context: RenderContext, settings: Settings): string | null { if (context.isPreview) { return item.commandPath ? `[cmd: ${item.commandPath.substring(0, 20)}${item.commandPath.length > 20 ? '...' : ''}]` : '[No command]'; diff --git a/src/widgets/CustomText.tsx b/src/widgets/CustomText.tsx index 207e5e1..224f730 100644 --- a/src/widgets/CustomText.tsx +++ b/src/widgets/CustomText.tsx @@ -17,6 +17,7 @@ import type { export class CustomTextWidget implements Widget { getDefaultColor(): string { return 'white'; } + getDescription(): string { return 'Displays user-defined custom text'; } getDisplayName(): string { return 'Custom Text'; } getEditorDisplay(item: WidgetItem): WidgetEditorDisplay { diff --git a/src/widgets/GitBranch.ts b/src/widgets/GitBranch.ts index 6306c6f..aceeaa0 100644 --- a/src/widgets/GitBranch.ts +++ b/src/widgets/GitBranch.ts @@ -10,6 +10,7 @@ import type { export class GitBranchWidget implements Widget { getDefaultColor(): string { return 'magenta'; } + getDescription(): string { return 'Shows the current git branch name'; } getDisplayName(): string { return 'Git Branch'; } getEditorDisplay(item: WidgetItem): WidgetEditorDisplay { return { displayText: this.getDisplayName() }; diff --git a/src/widgets/GitChanges.ts b/src/widgets/GitChanges.ts index ff6a9ff..1234fb5 100644 --- a/src/widgets/GitChanges.ts +++ b/src/widgets/GitChanges.ts @@ -10,6 +10,7 @@ import type { export class GitChangesWidget implements Widget { getDefaultColor(): string { return 'yellow'; } + getDescription(): string { return 'Shows git changes count (+insertions, -deletions)'; } getDisplayName(): string { return 'Git Changes'; } getEditorDisplay(item: WidgetItem): WidgetEditorDisplay { return { displayText: this.getDisplayName() }; diff --git a/src/widgets/Model.ts b/src/widgets/Model.ts index cfcbc7e..3de797d 100644 --- a/src/widgets/Model.ts +++ b/src/widgets/Model.ts @@ -8,6 +8,7 @@ import type { export class ModelWidget implements Widget { getDefaultColor(): string { return 'cyan'; } + getDescription(): string { return 'Displays the Claude model name (e.g., Claude 3.5 Sonnet)'; } getDisplayName(): string { return 'Model'; } getEditorDisplay(item: WidgetItem): WidgetEditorDisplay { return { displayText: this.getDisplayName() }; diff --git a/src/widgets/OutputStyle.ts b/src/widgets/OutputStyle.ts index bb917bc..de41b9e 100644 --- a/src/widgets/OutputStyle.ts +++ b/src/widgets/OutputStyle.ts @@ -8,6 +8,7 @@ import type { export class OutputStyleWidget implements Widget { getDefaultColor(): string { return 'cyan'; } + getDescription(): string { return 'Shows the current Claude Code output style'; } getDisplayName(): string { return 'Output Style'; } getEditorDisplay(item: WidgetItem): WidgetEditorDisplay { return { displayText: this.getDisplayName() }; diff --git a/src/widgets/SessionClock.ts b/src/widgets/SessionClock.ts index 8d59045..87c8752 100644 --- a/src/widgets/SessionClock.ts +++ b/src/widgets/SessionClock.ts @@ -8,6 +8,7 @@ import type { export class SessionClockWidget implements Widget { getDefaultColor(): string { return 'yellow'; } + getDescription(): string { return 'Shows elapsed time since current session started'; } getDisplayName(): string { return 'Session Clock'; } getEditorDisplay(item: WidgetItem): WidgetEditorDisplay { return { displayText: this.getDisplayName() }; diff --git a/src/widgets/TerminalWidth.ts b/src/widgets/TerminalWidth.ts index 1da5ba6..700776b 100644 --- a/src/widgets/TerminalWidth.ts +++ b/src/widgets/TerminalWidth.ts @@ -9,6 +9,7 @@ import { getTerminalWidth } from '../utils/renderer'; export class TerminalWidthWidget implements Widget { getDefaultColor(): string { return 'gray'; } + getDescription(): string { return 'Shows current terminal width in columns'; } getDisplayName(): string { return 'Terminal Width'; } getEditorDisplay(item: WidgetItem): WidgetEditorDisplay { return { displayText: this.getDisplayName() }; diff --git a/src/widgets/TokensCached.ts b/src/widgets/TokensCached.ts index 8fde9ac..ad4984d 100644 --- a/src/widgets/TokensCached.ts +++ b/src/widgets/TokensCached.ts @@ -9,6 +9,7 @@ import { formatTokens } from '../utils/renderer'; export class TokensCachedWidget implements Widget { getDefaultColor(): string { return 'cyan'; } + getDescription(): string { return 'Shows cached token count for the current session'; } getDisplayName(): string { return 'Tokens Cached'; } getEditorDisplay(item: WidgetItem): WidgetEditorDisplay { return { displayText: this.getDisplayName() }; diff --git a/src/widgets/TokensInput.ts b/src/widgets/TokensInput.ts index 2e2dd99..707aab7 100644 --- a/src/widgets/TokensInput.ts +++ b/src/widgets/TokensInput.ts @@ -9,6 +9,7 @@ import { formatTokens } from '../utils/renderer'; export class TokensInputWidget implements Widget { getDefaultColor(): string { return 'blue'; } + getDescription(): string { return 'Shows input token count for the current session'; } getDisplayName(): string { return 'Tokens Input'; } getEditorDisplay(item: WidgetItem): WidgetEditorDisplay { return { displayText: this.getDisplayName() }; diff --git a/src/widgets/TokensOutput.ts b/src/widgets/TokensOutput.ts index d5efaee..d5008c8 100644 --- a/src/widgets/TokensOutput.ts +++ b/src/widgets/TokensOutput.ts @@ -9,6 +9,7 @@ import { formatTokens } from '../utils/renderer'; export class TokensOutputWidget implements Widget { getDefaultColor(): string { return 'white'; } + getDescription(): string { return 'Shows output token count for the current session'; } getDisplayName(): string { return 'Tokens Output'; } getEditorDisplay(item: WidgetItem): WidgetEditorDisplay { return { displayText: this.getDisplayName() }; diff --git a/src/widgets/TokensTotal.ts b/src/widgets/TokensTotal.ts index dc84b8d..a1ccf36 100644 --- a/src/widgets/TokensTotal.ts +++ b/src/widgets/TokensTotal.ts @@ -9,6 +9,7 @@ import { formatTokens } from '../utils/renderer'; export class TokensTotalWidget implements Widget { getDefaultColor(): string { return 'cyan'; } + getDescription(): string { return 'Shows total token count (input + output + cache) for the current session'; } getDisplayName(): string { return 'Tokens Total'; } getEditorDisplay(item: WidgetItem): WidgetEditorDisplay { return { displayText: this.getDisplayName() }; diff --git a/src/widgets/Version.ts b/src/widgets/Version.ts index 145b4d5..e46c991 100644 --- a/src/widgets/Version.ts +++ b/src/widgets/Version.ts @@ -8,6 +8,7 @@ import type { export class VersionWidget implements Widget { getDefaultColor(): string { return 'gray'; } + getDescription(): string { return 'Shows Claude Code CLI version number'; } getDisplayName(): string { return 'Version'; } getEditorDisplay(item: WidgetItem): WidgetEditorDisplay { return { displayText: this.getDisplayName() }; diff --git a/src/widgets/index.ts b/src/widgets/index.ts index 59eab9a..fc73da1 100644 --- a/src/widgets/index.ts +++ b/src/widgets/index.ts @@ -13,4 +13,5 @@ export { SessionClockWidget } from './SessionClock'; export { TerminalWidthWidget } from './TerminalWidth'; export { VersionWidget } from './Version'; export { CustomTextWidget } from './CustomText'; -export { CustomCommandWidget } from './CustomCommand'; \ No newline at end of file +export { CustomCommandWidget } from './CustomCommand'; +export { BlockTimerWidget } from './BlockTimer'; \ No newline at end of file