@vimukthid/ccsl 1.0.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/LICENSE +21 -0
- package/README.md +251 -0
- package/dist/cli.js +1225 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.cjs +707 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +362 -0
- package/dist/index.d.ts +362 -0
- package/dist/index.js +658 -0
- package/dist/index.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/themes/index.ts","../src/utils/icons.ts","../src/utils/colors.ts","../src/utils/format.ts","../src/widgets/index.ts","../src/formatter.ts","../src/parser.ts","../src/config/loader.ts","../src/config/defaults.ts","../src/config/claude.ts"],"sourcesContent":["export { formatStatusLine, sampleStatusInput } from \"./formatter.js\";\nexport { parseStatusInput, type StatusInput, StatusInputSchema } from \"./parser.js\";\nexport { loadConfig, type CcslConfig } from \"./config/loader.js\";\nexport { defaultConfig } from \"./config/defaults.js\";\nexport { themes, themeNames, type Theme } from \"./themes/index.js\";\nexport { availableWidgets, type WidgetType } from \"./widgets/index.js\";\nexport {\n installToClaudeSettings,\n uninstallFromClaudeSettings,\n isInstalledInClaude,\n getClaudeSettingsPath,\n} from \"./config/claude.js\";\n","import type { ColorStyle } from \"../utils/colors.js\";\nimport type { IconKey } from \"../utils/icons.js\";\n\nexport interface ThemeColors {\n model?: ColorStyle;\n context?: ColorStyle;\n contextHigh?: ColorStyle;\n contextCritical?: ColorStyle;\n tokens?: ColorStyle;\n cost?: ColorStyle;\n duration?: ColorStyle;\n lines?: ColorStyle;\n linesAdded?: ColorStyle;\n linesRemoved?: ColorStyle;\n directory?: ColorStyle;\n version?: ColorStyle;\n separator?: ColorStyle;\n}\n\nexport interface Theme {\n name: string;\n colors: ThemeColors;\n icons?: Partial<Record<IconKey, string>>;\n}\n\n// Neon theme - Vibrant cyberpunk\nconst neonTheme: Theme = {\n name: \"neon\",\n colors: {\n model: { fg: \"#00ffff\", bold: true },\n context: { fg: \"#ff00ff\" },\n contextHigh: { fg: \"#ffff00\" },\n contextCritical: { fg: \"#ff0000\", bold: true },\n tokens: { fg: \"#00ff00\" },\n cost: { fg: \"#ffff00\" },\n duration: { fg: \"#00aaff\" },\n lines: { fg: \"#ff6600\" },\n linesAdded: { fg: \"#00ff00\" },\n linesRemoved: { fg: \"#ff0066\" },\n directory: { fg: \"#00ffff\" },\n version: { fg: \"#aaaaff\" },\n separator: { fg: \"#666666\" },\n },\n};\n\n// Rainbow theme - Colorful gradient\nconst rainbowTheme: Theme = {\n name: \"rainbow\",\n colors: {\n model: { fg: \"#ff0000\", bold: true },\n context: { fg: \"#ff7f00\" },\n contextHigh: { fg: \"#ffff00\" },\n contextCritical: { fg: \"#ff0000\", bold: true },\n tokens: { fg: \"#00ff00\" },\n cost: { fg: \"#0000ff\" },\n duration: { fg: \"#4b0082\" },\n lines: { fg: \"#9400d3\" },\n linesAdded: { fg: \"#00ff00\" },\n linesRemoved: { fg: \"#ff0000\" },\n directory: { fg: \"#ff7f00\" },\n version: { fg: \"#9400d3\" },\n separator: { fg: \"#888888\" },\n },\n};\n\n// Ocean theme - Cool blues and teals\nconst oceanTheme: Theme = {\n name: \"ocean\",\n colors: {\n model: { fg: \"#00bcd4\", bold: true },\n context: { fg: \"#2d8b8b\" },\n contextHigh: { fg: \"#4dd0e1\" },\n contextCritical: { fg: \"#ff5252\", bold: true },\n tokens: { fg: \"#80deea\" },\n cost: { fg: \"#4dd0e1\" },\n duration: { fg: \"#0288d1\" },\n lines: { fg: \"#26c6da\" },\n linesAdded: { fg: \"#69f0ae\" },\n linesRemoved: { fg: \"#ff5252\" },\n directory: { fg: \"#00bcd4\" },\n version: { fg: \"#80deea\" },\n separator: { fg: \"#37474f\" },\n },\n};\n\n// Minimal theme - Clean and subtle (default)\nconst minimalTheme: Theme = {\n name: \"minimal\",\n colors: {\n model: { fg: \"#888888\" },\n context: { fg: \"#ffffff\" },\n contextHigh: { fg: \"#e5c07b\" },\n contextCritical: { fg: \"#e06c75\", bold: true },\n tokens: { fg: \"#666666\", dim: true },\n cost: { fg: \"#61afef\" },\n duration: { fg: \"#666666\", dim: true },\n lines: { fg: \"#abb2bf\" },\n linesAdded: { fg: \"#98c379\" },\n linesRemoved: { fg: \"#e06c75\" },\n directory: { fg: \"#888888\" },\n version: { fg: \"#5c6370\" },\n separator: { fg: \"#444444\" },\n },\n icons: {\n model: \"\",\n context: \"\",\n tokens: \"\",\n duration: \"\",\n lines: \"\",\n directory: \"\",\n },\n};\n\n// Monochrome theme - Grayscale\nconst monochromeTheme: Theme = {\n name: \"monochrome\",\n colors: {\n model: { fg: \"#ffffff\", bold: true },\n context: { fg: \"#cccccc\" },\n contextHigh: { fg: \"#ffffff\", bold: true },\n contextCritical: { fg: \"#ffffff\", bold: true, underline: true },\n tokens: { fg: \"#aaaaaa\" },\n cost: { fg: \"#999999\" },\n duration: { fg: \"#888888\" },\n lines: { fg: \"#777777\" },\n linesAdded: { fg: \"#cccccc\" },\n linesRemoved: { fg: \"#888888\" },\n directory: { fg: \"#aaaaaa\" },\n version: { fg: \"#666666\" },\n separator: { fg: \"#444444\" },\n },\n icons: {\n model: \"\",\n context: \"\",\n tokens: \"\",\n duration: \"\",\n lines: \"\",\n directory: \"\",\n },\n};\n\n// Corporate theme - Professional blues\nconst corporateTheme: Theme = {\n name: \"corporate\",\n colors: {\n model: { fg: \"#3b82f6\", bold: true },\n context: { fg: \"#64748b\" },\n contextHigh: { fg: \"#f59e0b\" },\n contextCritical: { fg: \"#ef4444\", bold: true },\n tokens: { fg: \"#4682b4\" },\n cost: { fg: \"#6b7280\" },\n duration: { fg: \"#64748b\" },\n lines: { fg: \"#94a3b8\" },\n linesAdded: { fg: \"#22c55e\" },\n linesRemoved: { fg: \"#ef4444\" },\n directory: { fg: \"#3b82f6\" },\n version: { fg: \"#94a3b8\" },\n separator: { fg: \"#334155\" },\n },\n};\n\nexport const themes: Record<string, Theme> = {\n neon: neonTheme,\n rainbow: rainbowTheme,\n ocean: oceanTheme,\n minimal: minimalTheme,\n monochrome: monochromeTheme,\n corporate: corporateTheme,\n};\n\nexport const themeNames = Object.keys(themes);\n\nexport function getTheme(name: string): Theme {\n return themes[name] || themes.minimal;\n}\n","import type { Theme } from \"../themes/index.js\";\n\nexport type IconMode = \"auto\" | \"nerd\" | \"unicode\" | \"ascii\";\nexport type IconKey =\n | \"model\"\n | \"context\"\n | \"tokens\"\n | \"cost\"\n | \"duration\"\n | \"lines\"\n | \"directory\"\n | \"version\";\n\nconst nerdIcons: Record<IconKey, string> = {\n model: \"◈\",\n context: \"◐\",\n tokens: \"\",\n cost: \"$\",\n duration: \"⏱\",\n lines: \"±\",\n directory: \"\",\n version: \"\",\n};\n\nconst unicodeIcons: Record<IconKey, string> = {\n model: \"◈\",\n context: \"◐\",\n tokens: \"⇅\",\n cost: \"$\",\n duration: \"⏱\",\n lines: \"±\",\n directory: \"📁\",\n version: \"v\",\n};\n\nconst asciiIcons: Record<IconKey, string> = {\n model: \"*\",\n context: \"%\",\n tokens: \"\",\n cost: \"$\",\n duration: \"\",\n lines: \"\",\n directory: \"\",\n version: \"v\",\n};\n\nlet detectedIconMode: IconMode | null = null;\n\nfunction detectIconSupport(): IconMode {\n if (detectedIconMode !== null) {\n return detectedIconMode;\n }\n\n const term = process.env.TERM || \"\";\n const termProgram = process.env.TERM_PROGRAM || \"\";\n const nerdFontEnv = process.env.NERD_FONT || \"\";\n\n // Explicit Nerd Font environment variable\n if (nerdFontEnv === \"1\" || nerdFontEnv.toLowerCase() === \"true\") {\n detectedIconMode = \"nerd\";\n return \"nerd\";\n }\n\n // Known Nerd Font capable terminals\n const nerdFontTerminals = [\"iTerm.app\", \"WezTerm\", \"Alacritty\", \"kitty\", \"Hyper\", \"Tabby\"];\n\n if (nerdFontTerminals.some((t) => termProgram.includes(t))) {\n detectedIconMode = \"nerd\";\n return \"nerd\";\n }\n\n // Modern terminals with good Unicode support\n if (term.includes(\"256color\") || term.includes(\"truecolor\")) {\n detectedIconMode = \"unicode\";\n return \"unicode\";\n }\n\n detectedIconMode = \"ascii\";\n return \"ascii\";\n}\n\nexport function getIcon(key: IconKey, theme: Theme, mode: IconMode): string {\n // Check theme-specific icons first\n if (theme.icons && theme.icons[key]) {\n return theme.icons[key] || \"\";\n }\n\n // Determine which icon set to use\n const effectiveMode = mode === \"auto\" ? detectIconSupport() : mode;\n\n switch (effectiveMode) {\n case \"nerd\":\n return nerdIcons[key] || \"\";\n case \"unicode\":\n return unicodeIcons[key] || \"\";\n case \"ascii\":\n return asciiIcons[key] || \"\";\n default:\n return unicodeIcons[key] || \"\";\n }\n}\n\nexport function getAllIcons(mode: IconMode): Record<IconKey, string> {\n const effectiveMode = mode === \"auto\" ? detectIconSupport() : mode;\n\n switch (effectiveMode) {\n case \"nerd\":\n return { ...nerdIcons };\n case \"unicode\":\n return { ...unicodeIcons };\n case \"ascii\":\n return { ...asciiIcons };\n default:\n return { ...unicodeIcons };\n }\n}\n","import chalk from \"chalk\";\n\nexport interface ColorStyle {\n fg?: string;\n bg?: string;\n bold?: boolean;\n dim?: boolean;\n italic?: boolean;\n underline?: boolean;\n}\n\nexport function applyStyle(text: string, style?: ColorStyle): string {\n if (!style) return text;\n\n let result = chalk;\n\n if (style.fg) {\n result = result.hex(style.fg);\n }\n if (style.bg) {\n result = result.bgHex(style.bg);\n }\n if (style.bold) {\n result = result.bold;\n }\n if (style.dim) {\n result = result.dim;\n }\n if (style.italic) {\n result = result.italic;\n }\n if (style.underline) {\n result = result.underline;\n }\n\n return result(text);\n}\n\nexport function hexToRgb(hex: string): { r: number; g: number; b: number } | null {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n }\n : null;\n}\n\nexport function rgbToHex(r: number, g: number, b: number): string {\n return (\n \"#\" +\n [r, g, b]\n .map((x) => {\n const hex = x.toString(16);\n return hex.length === 1 ? \"0\" + hex : hex;\n })\n .join(\"\")\n );\n}\n","export function formatNumber(num: number): string {\n if (num >= 1000000) {\n return `${(num / 1000000).toFixed(1)}m`;\n }\n if (num >= 1000) {\n return `${(num / 1000).toFixed(1)}k`;\n }\n return num.toString();\n}\n\nexport function formatDuration(ms: number): string {\n const seconds = Math.floor(ms / 1000);\n\n if (seconds < 60) {\n return `${seconds}s`;\n }\n\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) {\n const remainingSeconds = seconds % 60;\n return remainingSeconds > 0 ? `${minutes}m${remainingSeconds}s` : `${minutes}m`;\n }\n\n const hours = Math.floor(minutes / 60);\n const remainingMinutes = minutes % 60;\n return remainingMinutes > 0 ? `${hours}h${remainingMinutes}m` : `${hours}h`;\n}\n\nexport function formatCost(usd: number): string {\n if (usd < 0.01) {\n return usd.toFixed(4);\n }\n if (usd < 1) {\n return usd.toFixed(2);\n }\n return usd.toFixed(2);\n}\n","import type { StatusInput } from \"../parser.js\";\nimport type { Theme } from \"../themes/index.js\";\nimport type { CcslConfig } from \"../config/loader.js\";\nimport { getIcon } from \"../utils/icons.js\";\nimport { applyStyle } from \"../utils/colors.js\";\nimport { formatNumber, formatDuration, formatCost } from \"../utils/format.js\";\nimport path from \"path\";\n\nexport type WidgetType =\n | \"model\"\n | \"context\"\n | \"tokens\"\n | \"cost\"\n | \"duration\"\n | \"lines\"\n | \"directory\"\n | \"version\";\n\nexport const availableWidgets: WidgetType[] = [\n \"model\",\n \"context\",\n \"tokens\",\n \"cost\",\n \"duration\",\n \"lines\",\n \"directory\",\n \"version\",\n];\n\nexport interface WidgetResult {\n content: string;\n visible: boolean;\n}\n\nexport function renderWidget(\n widget: WidgetType,\n input: StatusInput,\n theme: Theme,\n config: CcslConfig\n): WidgetResult {\n switch (widget) {\n case \"model\":\n return renderModel(input, theme, config);\n case \"context\":\n return renderContext(input, theme, config);\n case \"tokens\":\n return renderTokens(input, theme, config);\n case \"cost\":\n return renderCostWidget(input, theme, config);\n case \"duration\":\n return renderDurationWidget(input, theme, config);\n case \"lines\":\n return renderLines(input, theme, config);\n case \"directory\":\n return renderDirectory(input, theme, config);\n case \"version\":\n return renderVersion(input, theme, config);\n default:\n return { content: \"\", visible: false };\n }\n}\n\nfunction renderModel(input: StatusInput, theme: Theme, config: CcslConfig): WidgetResult {\n const displayName = input.model?.display_name;\n if (!displayName) {\n return { content: \"\", visible: false };\n }\n\n const icon = getIcon(\"model\", theme, config.icons);\n const text = icon ? `${icon} ${displayName}` : displayName;\n const content = applyStyle(text, theme.colors.model);\n\n return { content, visible: true };\n}\n\nfunction renderContext(input: StatusInput, theme: Theme, config: CcslConfig): WidgetResult {\n const percentage = input.context_window?.used_percentage;\n if (percentage === undefined) {\n return { content: \"\", visible: false };\n }\n\n const icon = getIcon(\"context\", theme, config.icons);\n const roundedPercent = Math.round(percentage);\n const progressBar = renderProgressBar(percentage, theme);\n const value = `${roundedPercent}%`;\n const text = icon ? `${icon} ${progressBar} ${value}` : `${progressBar} ${value}`;\n\n // Color based on usage level\n let colorKey: \"context\" | \"contextHigh\" | \"contextCritical\" = \"context\";\n if (percentage >= 80) {\n colorKey = \"contextCritical\";\n } else if (percentage >= 60) {\n colorKey = \"contextHigh\";\n }\n\n const style = theme.colors[colorKey] || theme.colors.context;\n const content = applyStyle(text, style);\n\n return { content, visible: true };\n}\n\nfunction renderProgressBar(percentage: number, theme: Theme): string {\n const totalBars = 10;\n const filledBars = Math.round((percentage / 100) * totalBars);\n const emptyBars = totalBars - filledBars;\n\n // Use block characters for progress bar\n const filledChar = \"█\";\n const emptyChar = \"░\";\n\n // Color the filled portion based on usage level\n let filledStyle = theme.colors.context;\n if (percentage >= 80) {\n filledStyle = theme.colors.contextCritical || theme.colors.context;\n } else if (percentage >= 60) {\n filledStyle = theme.colors.contextHigh || theme.colors.context;\n }\n\n const filled = applyStyle(filledChar.repeat(filledBars), filledStyle);\n const empty = applyStyle(emptyChar.repeat(emptyBars), { fg: \"#444444\", dim: true });\n\n return `${filled}${empty}`;\n}\n\nfunction renderTokens(input: StatusInput, theme: Theme, config: CcslConfig): WidgetResult {\n const inputTokens = input.context_window?.total_input_tokens;\n const outputTokens = input.context_window?.total_output_tokens;\n\n if (inputTokens === undefined && outputTokens === undefined) {\n return { content: \"\", visible: false };\n }\n\n const icon = getIcon(\"tokens\", theme, config.icons);\n const inStr = formatNumber(inputTokens ?? 0);\n const outStr = formatNumber(outputTokens ?? 0);\n const text = icon ? `${icon} ↑${inStr} ↓${outStr}` : `↑${inStr} ↓${outStr}`;\n const content = applyStyle(text, theme.colors.tokens);\n\n return { content, visible: true };\n}\n\nfunction renderCostWidget(input: StatusInput, theme: Theme, config: CcslConfig): WidgetResult {\n const costUsd = input.cost?.total_cost_usd;\n if (costUsd === undefined) {\n return { content: \"\", visible: false };\n }\n\n const icon = getIcon(\"cost\", theme, config.icons);\n const value = formatCost(costUsd);\n const text = icon ? `${icon}${value}` : `$${value}`;\n const content = applyStyle(text, theme.colors.cost);\n\n return { content, visible: true };\n}\n\nfunction renderDurationWidget(input: StatusInput, theme: Theme, config: CcslConfig): WidgetResult {\n const durationMs = input.cost?.total_duration_ms;\n if (durationMs === undefined) {\n return { content: \"\", visible: false };\n }\n\n const icon = getIcon(\"duration\", theme, config.icons);\n const value = formatDuration(durationMs);\n const text = icon ? `${icon} ${value}` : value;\n const content = applyStyle(text, theme.colors.duration);\n\n return { content, visible: true };\n}\n\nfunction renderLines(input: StatusInput, theme: Theme, config: CcslConfig): WidgetResult {\n const added = input.cost?.total_lines_added;\n const removed = input.cost?.total_lines_removed;\n\n if (added === undefined && removed === undefined) {\n return { content: \"\", visible: false };\n }\n\n const icon = getIcon(\"lines\", theme, config.icons);\n\n const addedStr = applyStyle(`+${added ?? 0}`, theme.colors.linesAdded || theme.colors.lines);\n const removedStr = applyStyle(`-${removed ?? 0}`, theme.colors.linesRemoved || theme.colors.lines);\n\n const text = icon ? `${icon} ${addedStr} ${removedStr}` : `${addedStr} ${removedStr}`;\n\n return { content: text, visible: true };\n}\n\nfunction renderDirectory(input: StatusInput, theme: Theme, config: CcslConfig): WidgetResult {\n const dir = input.workspace?.current_dir || input.cwd;\n if (!dir) {\n return { content: \"\", visible: false };\n }\n\n const icon = getIcon(\"directory\", theme, config.icons);\n const dirName = path.basename(dir);\n const text = icon ? `${icon} ${dirName}` : dirName;\n const content = applyStyle(text, theme.colors.directory);\n\n return { content, visible: true };\n}\n\nfunction renderVersion(input: StatusInput, theme: Theme, config: CcslConfig): WidgetResult {\n const version = input.version;\n if (!version) {\n return { content: \"\", visible: false };\n }\n\n const icon = getIcon(\"version\", theme, config.icons);\n const text = icon ? `${icon}${version}` : `v${version}`;\n const content = applyStyle(text, theme.colors.version);\n\n return { content, visible: true };\n}\n","import type { StatusInput } from \"./parser.js\";\nimport type { CcslConfig } from \"./config/loader.js\";\nimport { themes } from \"./themes/index.js\";\nimport { renderWidget } from \"./widgets/index.js\";\nimport { applyStyle } from \"./utils/colors.js\";\n\nexport function formatStatusLine(input: StatusInput, config: CcslConfig): string {\n const theme = config.customTheme || themes[config.theme] || themes.minimal;\n const renderedWidgets: string[] = [];\n\n for (const widget of config.widgets) {\n const result = renderWidget(widget, input, theme, config);\n if (result.visible && result.content) {\n renderedWidgets.push(result.content);\n }\n }\n\n if (renderedWidgets.length === 0) {\n return \"\";\n }\n\n const separator = applyStyle(config.separator, theme.colors.separator);\n const statusLine = renderedWidgets.join(separator);\n\n // Add padding\n const padding = \" \".repeat(config.padding);\n\n // Prepend ANSI reset to ensure clean state\n return `\\x1b[0m${padding}${statusLine}${padding}`;\n}\n\n// Sample data for preview\nexport const sampleStatusInput: StatusInput = {\n hook_event_name: \"Status\",\n session_id: \"sample-session-123\",\n model: {\n id: \"claude-opus-4-1\",\n display_name: \"Opus\",\n },\n workspace: {\n current_dir: \"/home/user/my-project\",\n project_dir: \"/home/user/my-project\",\n },\n version: \"1.0.80\",\n cost: {\n total_cost_usd: 0.0234,\n total_duration_ms: 45000,\n total_api_duration_ms: 2300,\n total_lines_added: 156,\n total_lines_removed: 23,\n },\n context_window: {\n total_input_tokens: 15234,\n total_output_tokens: 4521,\n context_window_size: 200000,\n used_percentage: 42.5,\n remaining_percentage: 57.5,\n current_usage: {\n input_tokens: 8500,\n output_tokens: 1200,\n cache_creation_input_tokens: 5000,\n cache_read_input_tokens: 2000,\n },\n },\n};\n","import { z } from \"zod\";\n\n// Schema for Claude Code status JSON input\nexport const StatusInputSchema = z\n .object({\n hook_event_name: z.string().optional(),\n session_id: z.string().optional(),\n transcript_path: z.string().optional(),\n cwd: z.string().optional(),\n model: z\n .object({\n id: z.string().optional(),\n display_name: z.string().optional(),\n })\n .optional(),\n workspace: z\n .object({\n current_dir: z.string().optional(),\n project_dir: z.string().optional(),\n })\n .optional(),\n version: z.string().optional(),\n output_style: z\n .object({\n name: z.string().optional(),\n })\n .optional(),\n cost: z\n .object({\n total_cost_usd: z.number().optional(),\n total_duration_ms: z.number().optional(),\n total_api_duration_ms: z.number().optional(),\n total_lines_added: z.number().optional(),\n total_lines_removed: z.number().optional(),\n })\n .optional(),\n context_window: z\n .object({\n total_input_tokens: z.number().optional(),\n total_output_tokens: z.number().optional(),\n context_window_size: z.number().optional(),\n used_percentage: z.number().optional(),\n remaining_percentage: z.number().optional(),\n current_usage: z\n .object({\n input_tokens: z.number().optional(),\n output_tokens: z.number().optional(),\n cache_creation_input_tokens: z.number().optional(),\n cache_read_input_tokens: z.number().optional(),\n })\n .nullable()\n .optional(),\n })\n .optional(),\n })\n .passthrough();\n\nexport type StatusInput = z.infer<typeof StatusInputSchema>;\n\nexport function parseStatusInput(input: string): StatusInput | null {\n try {\n const trimmed = input.trim();\n if (!trimmed) {\n return null;\n }\n const parsed = JSON.parse(trimmed);\n const result = StatusInputSchema.safeParse(parsed);\n\n if (result.success) {\n return result.data;\n }\n\n // If validation fails, still try to use the data\n // Claude Code may add new fields we don't know about\n return parsed as StatusInput;\n } catch {\n return null;\n }\n}\n\nexport async function readStdin(): Promise<string> {\n return new Promise((resolve) => {\n let data = \"\";\n\n process.stdin.setEncoding(\"utf8\");\n\n process.stdin.on(\"readable\", () => {\n let chunk;\n while ((chunk = process.stdin.read()) !== null) {\n data += chunk;\n }\n });\n\n process.stdin.on(\"end\", () => {\n resolve(data);\n });\n\n process.stdin.on(\"error\", () => {\n resolve(\"\");\n });\n });\n}\n\nexport function isInteractiveMode(): boolean {\n return process.stdin.isTTY === true;\n}\n","import { cosmiconfig } from \"cosmiconfig\";\nimport { defaultConfig } from \"./defaults.js\";\nimport type { Theme } from \"../themes/index.js\";\nimport type { WidgetType } from \"../widgets/index.js\";\nimport type { IconMode } from \"../utils/icons.js\";\n\nexport interface CcslConfig {\n theme: string;\n widgets: WidgetType[];\n separator: string;\n icons: IconMode;\n padding: number;\n customTheme?: Theme;\n}\n\nconst explorer = cosmiconfig(\"ccsl\", {\n searchPlaces: [\n \".ccslrc\",\n \".ccslrc.json\",\n \".ccslrc.yaml\",\n \".ccslrc.yml\",\n \".ccslrc.js\",\n \".ccslrc.cjs\",\n \".config/ccsl/config.json\",\n \"ccsl.config.js\",\n \"ccsl.config.cjs\",\n ],\n});\n\nexport async function loadConfig(searchFrom?: string): Promise<CcslConfig> {\n try {\n const result = await explorer.search(searchFrom);\n\n if (result && result.config) {\n return mergeConfig(defaultConfig, result.config);\n }\n } catch {\n // Config loading failed, use defaults\n }\n\n return { ...defaultConfig };\n}\n\nexport async function loadConfigFromFile(filePath: string): Promise<CcslConfig> {\n try {\n const result = await explorer.load(filePath);\n\n if (result && result.config) {\n return mergeConfig(defaultConfig, result.config);\n }\n } catch {\n // Config loading failed, use defaults\n }\n\n return { ...defaultConfig };\n}\n\nfunction mergeConfig(defaults: CcslConfig, userConfig: Partial<CcslConfig>): CcslConfig {\n return {\n theme: userConfig.theme ?? defaults.theme,\n widgets: userConfig.widgets ?? defaults.widgets,\n separator: userConfig.separator ?? defaults.separator,\n icons: userConfig.icons ?? defaults.icons,\n padding: userConfig.padding ?? defaults.padding,\n customTheme: userConfig.customTheme,\n };\n}\n\nexport function getConfigPath(scope: \"local\" | \"global\"): string {\n if (scope === \"local\") {\n return \".ccslrc.json\";\n }\n const home = process.env.HOME || process.env.USERPROFILE || \"~\";\n return `${home}/.config/ccsl/config.json`;\n}\n","import type { CcslConfig } from \"./loader.js\";\nimport type { WidgetType } from \"../widgets/index.js\";\n\nexport const defaultWidgets: WidgetType[] = [\"model\", \"context\", \"tokens\", \"cost\"];\n\nexport const defaultConfig: CcslConfig = {\n theme: \"minimal\",\n widgets: defaultWidgets,\n separator: \" │ \",\n icons: \"auto\",\n padding: 1,\n};\n","import { readFileSync, writeFileSync, existsSync, mkdirSync, copyFileSync } from \"fs\";\nimport { dirname, join } from \"path\";\nimport { homedir } from \"os\";\n\nexport interface ClaudeSettings {\n statusLine?: {\n type: \"command\";\n command: string;\n padding?: number;\n };\n [key: string]: unknown;\n}\n\nexport function getClaudeSettingsPath(): string {\n const claudeDir = process.env.CLAUDE_CONFIG_DIR || join(homedir(), \".claude\");\n return join(claudeDir, \"settings.json\");\n}\n\nexport function getClaudeSettings(): ClaudeSettings | null {\n const settingsPath = getClaudeSettingsPath();\n\n if (!existsSync(settingsPath)) {\n return null;\n }\n\n try {\n const content = readFileSync(settingsPath, \"utf8\");\n return JSON.parse(content);\n } catch {\n return null;\n }\n}\n\nexport function backupClaudeSettings(): string | null {\n const settingsPath = getClaudeSettingsPath();\n\n if (!existsSync(settingsPath)) {\n return null;\n }\n\n const backupPath = settingsPath + \".backup\";\n try {\n copyFileSync(settingsPath, backupPath);\n return backupPath;\n } catch {\n return null;\n }\n}\n\nexport function installToClaudeSettings(command: string = \"npx @vimukthid/ccsl\"): boolean {\n const settingsPath = getClaudeSettingsPath();\n const dir = dirname(settingsPath);\n\n // Ensure directory exists\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n // Load existing settings or create new\n let settings: ClaudeSettings = {};\n if (existsSync(settingsPath)) {\n try {\n const content = readFileSync(settingsPath, \"utf8\");\n settings = JSON.parse(content);\n } catch {\n // If parse fails, start fresh\n settings = {};\n }\n }\n\n // Update statusLine\n settings.statusLine = {\n type: \"command\",\n command,\n };\n\n // Write back\n try {\n writeFileSync(settingsPath, JSON.stringify(settings, null, 2));\n return true;\n } catch {\n return false;\n }\n}\n\nexport function uninstallFromClaudeSettings(): boolean {\n const settingsPath = getClaudeSettingsPath();\n\n if (!existsSync(settingsPath)) {\n return true; // Nothing to uninstall\n }\n\n try {\n const content = readFileSync(settingsPath, \"utf8\");\n const settings: ClaudeSettings = JSON.parse(content);\n\n // Remove statusLine\n delete settings.statusLine;\n\n // Write back\n writeFileSync(settingsPath, JSON.stringify(settings, null, 2));\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isInstalledInClaude(): boolean {\n const settings = getClaudeSettings();\n if (!settings?.statusLine) {\n return false;\n }\n\n const command = settings.statusLine.command || \"\";\n return command.includes(\"ccsl\") || command.includes(\"@vimukthid/ccsl\");\n}\n\nexport function getCurrentClaudeCommand(): string | null {\n const settings = getClaudeSettings();\n return settings?.statusLine?.command || null;\n}\n"],"mappings":"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","names":["chalk","path","import_path"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
declare const StatusInputSchema: z.ZodObject<{
|
|
4
|
+
hook_event_name: z.ZodOptional<z.ZodString>;
|
|
5
|
+
session_id: z.ZodOptional<z.ZodString>;
|
|
6
|
+
transcript_path: z.ZodOptional<z.ZodString>;
|
|
7
|
+
cwd: z.ZodOptional<z.ZodString>;
|
|
8
|
+
model: z.ZodOptional<z.ZodObject<{
|
|
9
|
+
id: z.ZodOptional<z.ZodString>;
|
|
10
|
+
display_name: z.ZodOptional<z.ZodString>;
|
|
11
|
+
}, "strip", z.ZodTypeAny, {
|
|
12
|
+
id?: string | undefined;
|
|
13
|
+
display_name?: string | undefined;
|
|
14
|
+
}, {
|
|
15
|
+
id?: string | undefined;
|
|
16
|
+
display_name?: string | undefined;
|
|
17
|
+
}>>;
|
|
18
|
+
workspace: z.ZodOptional<z.ZodObject<{
|
|
19
|
+
current_dir: z.ZodOptional<z.ZodString>;
|
|
20
|
+
project_dir: z.ZodOptional<z.ZodString>;
|
|
21
|
+
}, "strip", z.ZodTypeAny, {
|
|
22
|
+
current_dir?: string | undefined;
|
|
23
|
+
project_dir?: string | undefined;
|
|
24
|
+
}, {
|
|
25
|
+
current_dir?: string | undefined;
|
|
26
|
+
project_dir?: string | undefined;
|
|
27
|
+
}>>;
|
|
28
|
+
version: z.ZodOptional<z.ZodString>;
|
|
29
|
+
output_style: z.ZodOptional<z.ZodObject<{
|
|
30
|
+
name: z.ZodOptional<z.ZodString>;
|
|
31
|
+
}, "strip", z.ZodTypeAny, {
|
|
32
|
+
name?: string | undefined;
|
|
33
|
+
}, {
|
|
34
|
+
name?: string | undefined;
|
|
35
|
+
}>>;
|
|
36
|
+
cost: z.ZodOptional<z.ZodObject<{
|
|
37
|
+
total_cost_usd: z.ZodOptional<z.ZodNumber>;
|
|
38
|
+
total_duration_ms: z.ZodOptional<z.ZodNumber>;
|
|
39
|
+
total_api_duration_ms: z.ZodOptional<z.ZodNumber>;
|
|
40
|
+
total_lines_added: z.ZodOptional<z.ZodNumber>;
|
|
41
|
+
total_lines_removed: z.ZodOptional<z.ZodNumber>;
|
|
42
|
+
}, "strip", z.ZodTypeAny, {
|
|
43
|
+
total_cost_usd?: number | undefined;
|
|
44
|
+
total_duration_ms?: number | undefined;
|
|
45
|
+
total_api_duration_ms?: number | undefined;
|
|
46
|
+
total_lines_added?: number | undefined;
|
|
47
|
+
total_lines_removed?: number | undefined;
|
|
48
|
+
}, {
|
|
49
|
+
total_cost_usd?: number | undefined;
|
|
50
|
+
total_duration_ms?: number | undefined;
|
|
51
|
+
total_api_duration_ms?: number | undefined;
|
|
52
|
+
total_lines_added?: number | undefined;
|
|
53
|
+
total_lines_removed?: number | undefined;
|
|
54
|
+
}>>;
|
|
55
|
+
context_window: z.ZodOptional<z.ZodObject<{
|
|
56
|
+
total_input_tokens: z.ZodOptional<z.ZodNumber>;
|
|
57
|
+
total_output_tokens: z.ZodOptional<z.ZodNumber>;
|
|
58
|
+
context_window_size: z.ZodOptional<z.ZodNumber>;
|
|
59
|
+
used_percentage: z.ZodOptional<z.ZodNumber>;
|
|
60
|
+
remaining_percentage: z.ZodOptional<z.ZodNumber>;
|
|
61
|
+
current_usage: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
62
|
+
input_tokens: z.ZodOptional<z.ZodNumber>;
|
|
63
|
+
output_tokens: z.ZodOptional<z.ZodNumber>;
|
|
64
|
+
cache_creation_input_tokens: z.ZodOptional<z.ZodNumber>;
|
|
65
|
+
cache_read_input_tokens: z.ZodOptional<z.ZodNumber>;
|
|
66
|
+
}, "strip", z.ZodTypeAny, {
|
|
67
|
+
input_tokens?: number | undefined;
|
|
68
|
+
output_tokens?: number | undefined;
|
|
69
|
+
cache_creation_input_tokens?: number | undefined;
|
|
70
|
+
cache_read_input_tokens?: number | undefined;
|
|
71
|
+
}, {
|
|
72
|
+
input_tokens?: number | undefined;
|
|
73
|
+
output_tokens?: number | undefined;
|
|
74
|
+
cache_creation_input_tokens?: number | undefined;
|
|
75
|
+
cache_read_input_tokens?: number | undefined;
|
|
76
|
+
}>>>;
|
|
77
|
+
}, "strip", z.ZodTypeAny, {
|
|
78
|
+
total_input_tokens?: number | undefined;
|
|
79
|
+
total_output_tokens?: number | undefined;
|
|
80
|
+
context_window_size?: number | undefined;
|
|
81
|
+
used_percentage?: number | undefined;
|
|
82
|
+
remaining_percentage?: number | undefined;
|
|
83
|
+
current_usage?: {
|
|
84
|
+
input_tokens?: number | undefined;
|
|
85
|
+
output_tokens?: number | undefined;
|
|
86
|
+
cache_creation_input_tokens?: number | undefined;
|
|
87
|
+
cache_read_input_tokens?: number | undefined;
|
|
88
|
+
} | null | undefined;
|
|
89
|
+
}, {
|
|
90
|
+
total_input_tokens?: number | undefined;
|
|
91
|
+
total_output_tokens?: number | undefined;
|
|
92
|
+
context_window_size?: number | undefined;
|
|
93
|
+
used_percentage?: number | undefined;
|
|
94
|
+
remaining_percentage?: number | undefined;
|
|
95
|
+
current_usage?: {
|
|
96
|
+
input_tokens?: number | undefined;
|
|
97
|
+
output_tokens?: number | undefined;
|
|
98
|
+
cache_creation_input_tokens?: number | undefined;
|
|
99
|
+
cache_read_input_tokens?: number | undefined;
|
|
100
|
+
} | null | undefined;
|
|
101
|
+
}>>;
|
|
102
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
103
|
+
hook_event_name: z.ZodOptional<z.ZodString>;
|
|
104
|
+
session_id: z.ZodOptional<z.ZodString>;
|
|
105
|
+
transcript_path: z.ZodOptional<z.ZodString>;
|
|
106
|
+
cwd: z.ZodOptional<z.ZodString>;
|
|
107
|
+
model: z.ZodOptional<z.ZodObject<{
|
|
108
|
+
id: z.ZodOptional<z.ZodString>;
|
|
109
|
+
display_name: z.ZodOptional<z.ZodString>;
|
|
110
|
+
}, "strip", z.ZodTypeAny, {
|
|
111
|
+
id?: string | undefined;
|
|
112
|
+
display_name?: string | undefined;
|
|
113
|
+
}, {
|
|
114
|
+
id?: string | undefined;
|
|
115
|
+
display_name?: string | undefined;
|
|
116
|
+
}>>;
|
|
117
|
+
workspace: z.ZodOptional<z.ZodObject<{
|
|
118
|
+
current_dir: z.ZodOptional<z.ZodString>;
|
|
119
|
+
project_dir: z.ZodOptional<z.ZodString>;
|
|
120
|
+
}, "strip", z.ZodTypeAny, {
|
|
121
|
+
current_dir?: string | undefined;
|
|
122
|
+
project_dir?: string | undefined;
|
|
123
|
+
}, {
|
|
124
|
+
current_dir?: string | undefined;
|
|
125
|
+
project_dir?: string | undefined;
|
|
126
|
+
}>>;
|
|
127
|
+
version: z.ZodOptional<z.ZodString>;
|
|
128
|
+
output_style: z.ZodOptional<z.ZodObject<{
|
|
129
|
+
name: z.ZodOptional<z.ZodString>;
|
|
130
|
+
}, "strip", z.ZodTypeAny, {
|
|
131
|
+
name?: string | undefined;
|
|
132
|
+
}, {
|
|
133
|
+
name?: string | undefined;
|
|
134
|
+
}>>;
|
|
135
|
+
cost: z.ZodOptional<z.ZodObject<{
|
|
136
|
+
total_cost_usd: z.ZodOptional<z.ZodNumber>;
|
|
137
|
+
total_duration_ms: z.ZodOptional<z.ZodNumber>;
|
|
138
|
+
total_api_duration_ms: z.ZodOptional<z.ZodNumber>;
|
|
139
|
+
total_lines_added: z.ZodOptional<z.ZodNumber>;
|
|
140
|
+
total_lines_removed: z.ZodOptional<z.ZodNumber>;
|
|
141
|
+
}, "strip", z.ZodTypeAny, {
|
|
142
|
+
total_cost_usd?: number | undefined;
|
|
143
|
+
total_duration_ms?: number | undefined;
|
|
144
|
+
total_api_duration_ms?: number | undefined;
|
|
145
|
+
total_lines_added?: number | undefined;
|
|
146
|
+
total_lines_removed?: number | undefined;
|
|
147
|
+
}, {
|
|
148
|
+
total_cost_usd?: number | undefined;
|
|
149
|
+
total_duration_ms?: number | undefined;
|
|
150
|
+
total_api_duration_ms?: number | undefined;
|
|
151
|
+
total_lines_added?: number | undefined;
|
|
152
|
+
total_lines_removed?: number | undefined;
|
|
153
|
+
}>>;
|
|
154
|
+
context_window: z.ZodOptional<z.ZodObject<{
|
|
155
|
+
total_input_tokens: z.ZodOptional<z.ZodNumber>;
|
|
156
|
+
total_output_tokens: z.ZodOptional<z.ZodNumber>;
|
|
157
|
+
context_window_size: z.ZodOptional<z.ZodNumber>;
|
|
158
|
+
used_percentage: z.ZodOptional<z.ZodNumber>;
|
|
159
|
+
remaining_percentage: z.ZodOptional<z.ZodNumber>;
|
|
160
|
+
current_usage: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
161
|
+
input_tokens: z.ZodOptional<z.ZodNumber>;
|
|
162
|
+
output_tokens: z.ZodOptional<z.ZodNumber>;
|
|
163
|
+
cache_creation_input_tokens: z.ZodOptional<z.ZodNumber>;
|
|
164
|
+
cache_read_input_tokens: z.ZodOptional<z.ZodNumber>;
|
|
165
|
+
}, "strip", z.ZodTypeAny, {
|
|
166
|
+
input_tokens?: number | undefined;
|
|
167
|
+
output_tokens?: number | undefined;
|
|
168
|
+
cache_creation_input_tokens?: number | undefined;
|
|
169
|
+
cache_read_input_tokens?: number | undefined;
|
|
170
|
+
}, {
|
|
171
|
+
input_tokens?: number | undefined;
|
|
172
|
+
output_tokens?: number | undefined;
|
|
173
|
+
cache_creation_input_tokens?: number | undefined;
|
|
174
|
+
cache_read_input_tokens?: number | undefined;
|
|
175
|
+
}>>>;
|
|
176
|
+
}, "strip", z.ZodTypeAny, {
|
|
177
|
+
total_input_tokens?: number | undefined;
|
|
178
|
+
total_output_tokens?: number | undefined;
|
|
179
|
+
context_window_size?: number | undefined;
|
|
180
|
+
used_percentage?: number | undefined;
|
|
181
|
+
remaining_percentage?: number | undefined;
|
|
182
|
+
current_usage?: {
|
|
183
|
+
input_tokens?: number | undefined;
|
|
184
|
+
output_tokens?: number | undefined;
|
|
185
|
+
cache_creation_input_tokens?: number | undefined;
|
|
186
|
+
cache_read_input_tokens?: number | undefined;
|
|
187
|
+
} | null | undefined;
|
|
188
|
+
}, {
|
|
189
|
+
total_input_tokens?: number | undefined;
|
|
190
|
+
total_output_tokens?: number | undefined;
|
|
191
|
+
context_window_size?: number | undefined;
|
|
192
|
+
used_percentage?: number | undefined;
|
|
193
|
+
remaining_percentage?: number | undefined;
|
|
194
|
+
current_usage?: {
|
|
195
|
+
input_tokens?: number | undefined;
|
|
196
|
+
output_tokens?: number | undefined;
|
|
197
|
+
cache_creation_input_tokens?: number | undefined;
|
|
198
|
+
cache_read_input_tokens?: number | undefined;
|
|
199
|
+
} | null | undefined;
|
|
200
|
+
}>>;
|
|
201
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
202
|
+
hook_event_name: z.ZodOptional<z.ZodString>;
|
|
203
|
+
session_id: z.ZodOptional<z.ZodString>;
|
|
204
|
+
transcript_path: z.ZodOptional<z.ZodString>;
|
|
205
|
+
cwd: z.ZodOptional<z.ZodString>;
|
|
206
|
+
model: z.ZodOptional<z.ZodObject<{
|
|
207
|
+
id: z.ZodOptional<z.ZodString>;
|
|
208
|
+
display_name: z.ZodOptional<z.ZodString>;
|
|
209
|
+
}, "strip", z.ZodTypeAny, {
|
|
210
|
+
id?: string | undefined;
|
|
211
|
+
display_name?: string | undefined;
|
|
212
|
+
}, {
|
|
213
|
+
id?: string | undefined;
|
|
214
|
+
display_name?: string | undefined;
|
|
215
|
+
}>>;
|
|
216
|
+
workspace: z.ZodOptional<z.ZodObject<{
|
|
217
|
+
current_dir: z.ZodOptional<z.ZodString>;
|
|
218
|
+
project_dir: z.ZodOptional<z.ZodString>;
|
|
219
|
+
}, "strip", z.ZodTypeAny, {
|
|
220
|
+
current_dir?: string | undefined;
|
|
221
|
+
project_dir?: string | undefined;
|
|
222
|
+
}, {
|
|
223
|
+
current_dir?: string | undefined;
|
|
224
|
+
project_dir?: string | undefined;
|
|
225
|
+
}>>;
|
|
226
|
+
version: z.ZodOptional<z.ZodString>;
|
|
227
|
+
output_style: z.ZodOptional<z.ZodObject<{
|
|
228
|
+
name: z.ZodOptional<z.ZodString>;
|
|
229
|
+
}, "strip", z.ZodTypeAny, {
|
|
230
|
+
name?: string | undefined;
|
|
231
|
+
}, {
|
|
232
|
+
name?: string | undefined;
|
|
233
|
+
}>>;
|
|
234
|
+
cost: z.ZodOptional<z.ZodObject<{
|
|
235
|
+
total_cost_usd: z.ZodOptional<z.ZodNumber>;
|
|
236
|
+
total_duration_ms: z.ZodOptional<z.ZodNumber>;
|
|
237
|
+
total_api_duration_ms: z.ZodOptional<z.ZodNumber>;
|
|
238
|
+
total_lines_added: z.ZodOptional<z.ZodNumber>;
|
|
239
|
+
total_lines_removed: z.ZodOptional<z.ZodNumber>;
|
|
240
|
+
}, "strip", z.ZodTypeAny, {
|
|
241
|
+
total_cost_usd?: number | undefined;
|
|
242
|
+
total_duration_ms?: number | undefined;
|
|
243
|
+
total_api_duration_ms?: number | undefined;
|
|
244
|
+
total_lines_added?: number | undefined;
|
|
245
|
+
total_lines_removed?: number | undefined;
|
|
246
|
+
}, {
|
|
247
|
+
total_cost_usd?: number | undefined;
|
|
248
|
+
total_duration_ms?: number | undefined;
|
|
249
|
+
total_api_duration_ms?: number | undefined;
|
|
250
|
+
total_lines_added?: number | undefined;
|
|
251
|
+
total_lines_removed?: number | undefined;
|
|
252
|
+
}>>;
|
|
253
|
+
context_window: z.ZodOptional<z.ZodObject<{
|
|
254
|
+
total_input_tokens: z.ZodOptional<z.ZodNumber>;
|
|
255
|
+
total_output_tokens: z.ZodOptional<z.ZodNumber>;
|
|
256
|
+
context_window_size: z.ZodOptional<z.ZodNumber>;
|
|
257
|
+
used_percentage: z.ZodOptional<z.ZodNumber>;
|
|
258
|
+
remaining_percentage: z.ZodOptional<z.ZodNumber>;
|
|
259
|
+
current_usage: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
260
|
+
input_tokens: z.ZodOptional<z.ZodNumber>;
|
|
261
|
+
output_tokens: z.ZodOptional<z.ZodNumber>;
|
|
262
|
+
cache_creation_input_tokens: z.ZodOptional<z.ZodNumber>;
|
|
263
|
+
cache_read_input_tokens: z.ZodOptional<z.ZodNumber>;
|
|
264
|
+
}, "strip", z.ZodTypeAny, {
|
|
265
|
+
input_tokens?: number | undefined;
|
|
266
|
+
output_tokens?: number | undefined;
|
|
267
|
+
cache_creation_input_tokens?: number | undefined;
|
|
268
|
+
cache_read_input_tokens?: number | undefined;
|
|
269
|
+
}, {
|
|
270
|
+
input_tokens?: number | undefined;
|
|
271
|
+
output_tokens?: number | undefined;
|
|
272
|
+
cache_creation_input_tokens?: number | undefined;
|
|
273
|
+
cache_read_input_tokens?: number | undefined;
|
|
274
|
+
}>>>;
|
|
275
|
+
}, "strip", z.ZodTypeAny, {
|
|
276
|
+
total_input_tokens?: number | undefined;
|
|
277
|
+
total_output_tokens?: number | undefined;
|
|
278
|
+
context_window_size?: number | undefined;
|
|
279
|
+
used_percentage?: number | undefined;
|
|
280
|
+
remaining_percentage?: number | undefined;
|
|
281
|
+
current_usage?: {
|
|
282
|
+
input_tokens?: number | undefined;
|
|
283
|
+
output_tokens?: number | undefined;
|
|
284
|
+
cache_creation_input_tokens?: number | undefined;
|
|
285
|
+
cache_read_input_tokens?: number | undefined;
|
|
286
|
+
} | null | undefined;
|
|
287
|
+
}, {
|
|
288
|
+
total_input_tokens?: number | undefined;
|
|
289
|
+
total_output_tokens?: number | undefined;
|
|
290
|
+
context_window_size?: number | undefined;
|
|
291
|
+
used_percentage?: number | undefined;
|
|
292
|
+
remaining_percentage?: number | undefined;
|
|
293
|
+
current_usage?: {
|
|
294
|
+
input_tokens?: number | undefined;
|
|
295
|
+
output_tokens?: number | undefined;
|
|
296
|
+
cache_creation_input_tokens?: number | undefined;
|
|
297
|
+
cache_read_input_tokens?: number | undefined;
|
|
298
|
+
} | null | undefined;
|
|
299
|
+
}>>;
|
|
300
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
301
|
+
type StatusInput = z.infer<typeof StatusInputSchema>;
|
|
302
|
+
declare function parseStatusInput(input: string): StatusInput | null;
|
|
303
|
+
|
|
304
|
+
interface ColorStyle {
|
|
305
|
+
fg?: string;
|
|
306
|
+
bg?: string;
|
|
307
|
+
bold?: boolean;
|
|
308
|
+
dim?: boolean;
|
|
309
|
+
italic?: boolean;
|
|
310
|
+
underline?: boolean;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
type IconMode = "auto" | "nerd" | "unicode" | "ascii";
|
|
314
|
+
type IconKey = "model" | "context" | "tokens" | "cost" | "duration" | "lines" | "directory" | "version";
|
|
315
|
+
|
|
316
|
+
interface ThemeColors {
|
|
317
|
+
model?: ColorStyle;
|
|
318
|
+
context?: ColorStyle;
|
|
319
|
+
contextHigh?: ColorStyle;
|
|
320
|
+
contextCritical?: ColorStyle;
|
|
321
|
+
tokens?: ColorStyle;
|
|
322
|
+
cost?: ColorStyle;
|
|
323
|
+
duration?: ColorStyle;
|
|
324
|
+
lines?: ColorStyle;
|
|
325
|
+
linesAdded?: ColorStyle;
|
|
326
|
+
linesRemoved?: ColorStyle;
|
|
327
|
+
directory?: ColorStyle;
|
|
328
|
+
version?: ColorStyle;
|
|
329
|
+
separator?: ColorStyle;
|
|
330
|
+
}
|
|
331
|
+
interface Theme {
|
|
332
|
+
name: string;
|
|
333
|
+
colors: ThemeColors;
|
|
334
|
+
icons?: Partial<Record<IconKey, string>>;
|
|
335
|
+
}
|
|
336
|
+
declare const themes: Record<string, Theme>;
|
|
337
|
+
declare const themeNames: string[];
|
|
338
|
+
|
|
339
|
+
type WidgetType = "model" | "context" | "tokens" | "cost" | "duration" | "lines" | "directory" | "version";
|
|
340
|
+
declare const availableWidgets: WidgetType[];
|
|
341
|
+
|
|
342
|
+
interface CcslConfig {
|
|
343
|
+
theme: string;
|
|
344
|
+
widgets: WidgetType[];
|
|
345
|
+
separator: string;
|
|
346
|
+
icons: IconMode;
|
|
347
|
+
padding: number;
|
|
348
|
+
customTheme?: Theme;
|
|
349
|
+
}
|
|
350
|
+
declare function loadConfig(searchFrom?: string): Promise<CcslConfig>;
|
|
351
|
+
|
|
352
|
+
declare function formatStatusLine(input: StatusInput, config: CcslConfig): string;
|
|
353
|
+
declare const sampleStatusInput: StatusInput;
|
|
354
|
+
|
|
355
|
+
declare const defaultConfig: CcslConfig;
|
|
356
|
+
|
|
357
|
+
declare function getClaudeSettingsPath(): string;
|
|
358
|
+
declare function installToClaudeSettings(command?: string): boolean;
|
|
359
|
+
declare function uninstallFromClaudeSettings(): boolean;
|
|
360
|
+
declare function isInstalledInClaude(): boolean;
|
|
361
|
+
|
|
362
|
+
export { type CcslConfig, type StatusInput, StatusInputSchema, type Theme, type WidgetType, availableWidgets, defaultConfig, formatStatusLine, getClaudeSettingsPath, installToClaudeSettings, isInstalledInClaude, loadConfig, parseStatusInput, sampleStatusInput, themeNames, themes, uninstallFromClaudeSettings };
|