@owloops/claude-powerline 1.25.1 → 1.26.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/README.md +120 -4
- package/dist/browser.d.ts +88 -9
- package/dist/browser.js +3 -3
- package/dist/index.mjs +13 -12
- package/package.json +1 -1
- package/src/browser.ts +5 -0
- package/src/config/defaults.ts +3 -0
- package/src/config/loader.ts +9 -0
- package/src/powerline.ts +148 -5
- package/src/segments/cacheTimer.ts +72 -0
- package/src/segments/index.ts +5 -0
- package/src/segments/renderer.ts +177 -58
- package/src/themes/dark.ts +9 -0
- package/src/themes/gruvbox.ts +9 -0
- package/src/themes/index.ts +27 -0
- package/src/themes/light.ts +9 -0
- package/src/themes/nord.ts +9 -0
- package/src/themes/rose-pine.ts +9 -0
- package/src/themes/tokyo-night.ts +9 -0
- package/src/tui/layouts.ts +56 -20
- package/src/tui/primitives.ts +12 -3
- package/src/tui/sections.ts +555 -124
- package/src/tui/types.ts +8 -0
- package/src/utils/budget.ts +69 -0
- package/src/utils/claude.ts +29 -0
- package/src/utils/constants.ts +6 -0
- package/src/utils/formatters.ts +8 -0
- package/src/utils/icon-visibility.ts +31 -0
package/dist/index.mjs
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import e from"node:process";import{json as t}from"node:stream/consumers";import n from"node:tty";import{exec as r,execSync as i}from"node:child_process";import{promisify as a}from"node:util";import o,{createReadStream as s,existsSync as c}from"node:fs";import l,{dirname as u,join as d}from"node:path";import{get as f}from"node:https";import{URL as p}from"node:url";import m,{homedir as h}from"node:os";import{createHash as g}from"node:crypto";import{setTimeout as _}from"node:timers/promises";import{readFile as v,readdir as y,stat as b}from"node:fs/promises";import{createInterface as x}from"node:readline";function S(e,t){if(t&&(e.toLowerCase()===`transparent`||e.toLowerCase()===`none`))return`\x1B[49m`;let n=parseInt(e.slice(1,3),16),r=parseInt(e.slice(3,5),16),i=parseInt(e.slice(5,7),16);return`\x1b[${t?`48`:`38`};2;${n};${r};${i}m`}function C(e,t=!1){if(!e||e===``)return``;let n=e.match(/48;2;(\d+);(\d+);(\d+)/);if(n)return`\x1b[38;2;${n[1]};${n[2]};${n[3]}m`;if(t)return`\x1B[37m`;if(e.includes(`\x1B[`)&&e.includes(`m`)){let t=e.match(/\[(\d+)m/);if(t&&t[1]){let e=parseInt(t[1],10);if(e>=40&&e<=47||e>=100&&e<=107)return`\x1b[${e-10}m`}}return e.replace(`48`,`38`)}function w(e,t){if(t&&(e.toLowerCase()===`transparent`||e.toLowerCase()===`none`))return`\x1B[49m`;let n=((e,t,n)=>e===t&&t===n?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(n/255*5))(parseInt(e.slice(1,3),16),parseInt(e.slice(3,5),16),parseInt(e.slice(5,7),16));return`\x1b[${t?`48`:`38`};5;${n}m`}function ee(e,t){if(t&&(e.toLowerCase()===`transparent`||e.toLowerCase()===`none`))return`\x1B[49m`;if(t)return``;let n=parseInt(e.slice(1,3),16),r=parseInt(e.slice(3,5),16),i=parseInt(e.slice(5,7),16);return r>n&&r>i&&r>120?`\x1B[32m`:n>r&&n>i&&n>120?`\x1B[31m`:i>n&&i>r&&i>120?`\x1B[34m`:(n+r+i)/3>150?`\x1B[37m`:`\x1B[90m`}function te(e,t){let n=parseInt(e.slice(1,3),16),r=parseInt(e.slice(3,5),16),i=parseInt(e.slice(5,7),16),a=parseInt(t.slice(1,3),16),o=parseInt(t.slice(3,5),16),s=parseInt(t.slice(5,7),16);return Math.sqrt((n-a)**2+(r-o)**2+(i-s)**2)}function T(){let{env:t}=e,r=!0;t.NO_COLOR&&t.NO_COLOR!==``&&(r=!1);let i=t.FORCE_COLOR;if(i&&i!==``)return i===`false`||i===`0`?`none`:i===`true`||i===`1`?`ansi`:i===`2`?`ansi256`:i===`3`?`truecolor`:`ansi`;if(!r||t.TERM===`dumb`)return`none`;if(t.CI)return[`GITHUB_ACTIONS`,`GITEA_ACTIONS`,`CIRCLECI`].some(e=>e in t)?`truecolor`:`ansi`;if(t.COLORTERM===`truecolor`||[`xterm-kitty`,`xterm-ghostty`,`wezterm`,`alacritty`,`foot`,`contour`].includes(t.TERM||``))return`truecolor`;if(t.TERM_PROGRAM)switch(t.TERM_PROGRAM){case`iTerm.app`:return`truecolor`;case`Apple_Terminal`:return`ansi256`;case`vscode`:return`truecolor`;case`Tabby`:return`truecolor`}if(/-256(color)?$/i.test(t.TERM||``))return`ansi256`;if(/-truecolor$/i.test(t.TERM||``))return`truecolor`;if(/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(t.TERM||``)||t.COLORTERM)return`ansi`;if(n?.WriteStream?.prototype?.hasColors)try{if(!n.WriteStream.prototype.hasColors())return`none`;let e=n.WriteStream.prototype.hasColors(256);return n.WriteStream.prototype.hasColors(16777216)?`truecolor`:e?`ansi256`:`ansi`}catch{}return`ansi`}const ne={directory:{bg:`#8b4513`,fg:`#ffffff`},git:{bg:`#404040`,fg:`#ffffff`},model:{bg:`#2d2d2d`,fg:`#ffffff`},session:{bg:`#202020`,fg:`#00ffff`},block:{bg:`#2a2a2a`,fg:`#87ceeb`},today:{bg:`#1a1a1a`,fg:`#98fb98`},tmux:{bg:`#2f4f2f`,fg:`#90ee90`},context:{bg:`#4a5568`,fg:`#cbd5e0`},contextWarning:{bg:`#92400e`,fg:`#fbbf24`},contextCritical:{bg:`#991b1b`,fg:`#fca5a5`},metrics:{bg:`#374151`,fg:`#d1d5db`},version:{bg:`#3a3a4a`,fg:`#b8b8d0`},env:{bg:`#2d2d3d`,fg:`#d0a0d0`},weekly:{bg:`#2a2a3a`,fg:`#a0c4e8`}},re={directory:{bg:`#af5f00`,fg:`#ffffff`},git:{bg:`#444444`,fg:`#ffffff`},model:{bg:`#3a3a3a`,fg:`#ffffff`},session:{bg:`#262626`,fg:`#00ffff`},block:{bg:`#303030`,fg:`#87ceeb`},today:{bg:`#1c1c1c`,fg:`#87ff87`},tmux:{bg:`#444444`,fg:`#87ff87`},context:{bg:`#585858`,fg:`#d0d0d0`},contextWarning:{bg:`#af5f00`,fg:`#ffaf00`},contextCritical:{bg:`#870000`,fg:`#ff8787`},metrics:{bg:`#4e4e4e`,fg:`#d0d0d0`},version:{bg:`#444444`,fg:`#d7afff`},env:{bg:`#3a3a3a`,fg:`#d787d7`},weekly:{bg:`#303030`,fg:`#87afd7`}},ie={directory:{bg:`#d75f00`,fg:`#ffffff`},git:{bg:`#585858`,fg:`#ffffff`},model:{bg:`#444444`,fg:`#ffffff`},session:{bg:`#303030`,fg:`#00ffff`},block:{bg:`#3a3a3a`,fg:`#5fafff`},today:{bg:`#262626`,fg:`#00ff00`},tmux:{bg:`#585858`,fg:`#00ff00`},context:{bg:`#808080`,fg:`#ffffff`},contextWarning:{bg:`#d75f00`,fg:`#ffff00`},contextCritical:{bg:`#af0000`,fg:`#ff0000`},metrics:{bg:`#666666`,fg:`#ffffff`},version:{bg:`#585858`,fg:`#af87ff`},env:{bg:`#444444`,fg:`#ff87ff`},weekly:{bg:`#3a3a3a`,fg:`#5fafff`}},ae={directory:{bg:`#ff6b47`,fg:`#ffffff`},git:{bg:`#4fb3d9`,fg:`#ffffff`},model:{bg:`#87ceeb`,fg:`#000000`},session:{bg:`#da70d6`,fg:`#ffffff`},block:{bg:`#6366f1`,fg:`#ffffff`},today:{bg:`#10b981`,fg:`#ffffff`},tmux:{bg:`#32cd32`,fg:`#ffffff`},context:{bg:`#718096`,fg:`#ffffff`},contextWarning:{bg:`#d97706`,fg:`#ffffff`},contextCritical:{bg:`#dc2626`,fg:`#ffffff`},metrics:{bg:`#6b7280`,fg:`#ffffff`},version:{bg:`#8b7dd8`,fg:`#ffffff`},env:{bg:`#d45dbf`,fg:`#ffffff`},weekly:{bg:`#4f46e5`,fg:`#ffffff`}},oe={directory:{bg:`#ff5f5f`,fg:`#ffffff`},git:{bg:`#5fafff`,fg:`#ffffff`},model:{bg:`#87d7ff`,fg:`#000000`},session:{bg:`#ff5fff`,fg:`#ffffff`},block:{bg:`#5f5fff`,fg:`#ffffff`},today:{bg:`#00d787`,fg:`#ffffff`},tmux:{bg:`#00ff5f`,fg:`#ffffff`},context:{bg:`#808080`,fg:`#ffffff`},contextWarning:{bg:`#d78700`,fg:`#ffffff`},contextCritical:{bg:`#d70000`,fg:`#ffffff`},metrics:{bg:`#767676`,fg:`#ffffff`},version:{bg:`#af87ff`,fg:`#ffffff`},env:{bg:`#d787af`,fg:`#ffffff`},weekly:{bg:`#5f5fff`,fg:`#ffffff`}},se={directory:{bg:`#ff5f5f`,fg:`#ffffff`},git:{bg:`#5fafff`,fg:`#ffffff`},model:{bg:`#87d7ff`,fg:`#000000`},session:{bg:`#ff5fff`,fg:`#ffffff`},block:{bg:`#5f5fff`,fg:`#ffffff`},today:{bg:`#00d787`,fg:`#ffffff`},tmux:{bg:`#00ff5f`,fg:`#ffffff`},context:{bg:`#808080`,fg:`#ffffff`},contextWarning:{bg:`#d78700`,fg:`#ffffff`},contextCritical:{bg:`#d70000`,fg:`#ffffff`},metrics:{bg:`#767676`,fg:`#ffffff`},version:{bg:`#af87ff`,fg:`#ffffff`},env:{bg:`#d787af`,fg:`#ffffff`},weekly:{bg:`#5f5fff`,fg:`#ffffff`}},ce={directory:{bg:`#434c5e`,fg:`#d8dee9`},git:{bg:`#3b4252`,fg:`#a3be8c`},model:{bg:`#4c566a`,fg:`#81a1c1`},session:{bg:`#2e3440`,fg:`#88c0d0`},block:{bg:`#3b4252`,fg:`#81a1c1`},today:{bg:`#2e3440`,fg:`#8fbcbb`},tmux:{bg:`#2e3440`,fg:`#8fbcbb`},context:{bg:`#5e81ac`,fg:`#eceff4`},contextWarning:{bg:`#d08770`,fg:`#2e3440`},contextCritical:{bg:`#bf616a`,fg:`#eceff4`},metrics:{bg:`#b48ead`,fg:`#2e3440`},version:{bg:`#434c5e`,fg:`#88c0d0`},env:{bg:`#3b4252`,fg:`#b48ead`},weekly:{bg:`#3b4252`,fg:`#88c0d0`}},le={directory:{bg:`#5f87af`,fg:`#e4e4e4`},git:{bg:`#4e4e4e`,fg:`#87d787`},model:{bg:`#6c6c6c`,fg:`#87afd7`},session:{bg:`#3a3a3a`,fg:`#5fafaf`},block:{bg:`#4e4e4e`,fg:`#87afd7`},today:{bg:`#3a3a3a`,fg:`#5fd7d7`},tmux:{bg:`#3a3a3a`,fg:`#5fd7d7`},context:{bg:`#5f87d7`,fg:`#ffffff`},contextWarning:{bg:`#d7875f`,fg:`#3a3a3a`},contextCritical:{bg:`#d75f5f`,fg:`#ffffff`},metrics:{bg:`#d787af`,fg:`#3a3a3a`},version:{bg:`#5f87af`,fg:`#5fafaf`},env:{bg:`#4e4e4e`,fg:`#d787af`},weekly:{bg:`#4e4e4e`,fg:`#5fafaf`}},ue={directory:{bg:`#0087af`,fg:`#ffffff`},git:{bg:`#585858`,fg:`#87d700`},model:{bg:`#808080`,fg:`#87afff`},session:{bg:`#444444`,fg:`#00d7d7`},block:{bg:`#585858`,fg:`#87afff`},today:{bg:`#444444`,fg:`#00ffff`},tmux:{bg:`#444444`,fg:`#00ffff`},context:{bg:`#0087ff`,fg:`#ffffff`},contextWarning:{bg:`#d78700`,fg:`#000000`},contextCritical:{bg:`#d75f5f`,fg:`#ffffff`},metrics:{bg:`#ff87d7`,fg:`#444444`},version:{bg:`#0087af`,fg:`#00d7d7`},env:{bg:`#585858`,fg:`#ff87af`},weekly:{bg:`#585858`,fg:`#00d7d7`}},de={directory:{bg:`#2f334d`,fg:`#82aaff`},git:{bg:`#1e2030`,fg:`#c3e88d`},model:{bg:`#191b29`,fg:`#fca7ea`},session:{bg:`#222436`,fg:`#86e1fc`},block:{bg:`#2d3748`,fg:`#7aa2f7`},today:{bg:`#1a202c`,fg:`#4fd6be`},tmux:{bg:`#191b29`,fg:`#4fd6be`},context:{bg:`#414868`,fg:`#c0caf5`},contextWarning:{bg:`#ff9e64`,fg:`#1a1b26`},contextCritical:{bg:`#f7768e`,fg:`#1a1b26`},metrics:{bg:`#3d59a1`,fg:`#c0caf5`},version:{bg:`#292e42`,fg:`#bb9af7`},env:{bg:`#24283b`,fg:`#fca7ea`},weekly:{bg:`#24283b`,fg:`#7dcfff`}},fe={directory:{bg:`#444478`,fg:`#87afff`},git:{bg:`#262640`,fg:`#afff87`},model:{bg:`#1c1c30`,fg:`#ff87ff`},session:{bg:`#3a3a50`,fg:`#5fd7ff`},block:{bg:`#4e4e68`,fg:`#5f87ff`},today:{bg:`#262640`,fg:`#00d7af`},tmux:{bg:`#1c1c30`,fg:`#00d7af`},context:{bg:`#5f5f87`,fg:`#d7d7ff`},contextWarning:{bg:`#ffaf5f`,fg:`#262626`},contextCritical:{bg:`#ff5f87`,fg:`#262626`},metrics:{bg:`#5f5faf`,fg:`#d7d7ff`},version:{bg:`#444460`,fg:`#d787ff`},env:{bg:`#303050`,fg:`#ff87ff`},weekly:{bg:`#303050`,fg:`#5fd7ff`}},pe={directory:{bg:`#5f5faf`,fg:`#87afff`},git:{bg:`#303050`,fg:`#87ff87`},model:{bg:`#262640`,fg:`#ff87ff`},session:{bg:`#444470`,fg:`#00d7ff`},block:{bg:`#666680`,fg:`#5f87ff`},today:{bg:`#303050`,fg:`#00d787`},tmux:{bg:`#262640`,fg:`#00d787`},context:{bg:`#808080`,fg:`#ffffff`},contextWarning:{bg:`#ffaf00`,fg:`#000000`},contextCritical:{bg:`#ff5f5f`,fg:`#000000`},metrics:{bg:`#8787d7`,fg:`#ffffff`},version:{bg:`#585870`,fg:`#d787ff`},env:{bg:`#444470`,fg:`#ff87ff`},weekly:{bg:`#444470`,fg:`#00d7ff`}},me={directory:{bg:`#26233a`,fg:`#c4a7e7`},git:{bg:`#1f1d2e`,fg:`#9ccfd8`},model:{bg:`#191724`,fg:`#ebbcba`},session:{bg:`#26233a`,fg:`#f6c177`},block:{bg:`#2a273f`,fg:`#eb6f92`},today:{bg:`#232136`,fg:`#9ccfd8`},tmux:{bg:`#26233a`,fg:`#908caa`},context:{bg:`#393552`,fg:`#e0def4`},contextWarning:{bg:`#f6c177`,fg:`#191724`},contextCritical:{bg:`#eb6f92`,fg:`#191724`},metrics:{bg:`#524f67`,fg:`#e0def4`},version:{bg:`#2a273f`,fg:`#c4a7e7`},env:{bg:`#21202e`,fg:`#eb6f92`},weekly:{bg:`#21202e`,fg:`#c4a7e7`}},he={directory:{bg:`#444444`,fg:`#d787d7`},git:{bg:`#262626`,fg:`#87d7d7`},model:{bg:`#1c1c1c`,fg:`#ffaf87`},session:{bg:`#444444`,fg:`#d7af5f`},block:{bg:`#4e4e4e`,fg:`#ff5f87`},today:{bg:`#3a3a3a`,fg:`#87d7d7`},tmux:{bg:`#444444`,fg:`#9e9e9e`},context:{bg:`#585858`,fg:`#e4e4e4`},contextWarning:{bg:`#d7af5f`,fg:`#1c1c1c`},contextCritical:{bg:`#ff5f87`,fg:`#1c1c1c`},metrics:{bg:`#767676`,fg:`#e4e4e4`},version:{bg:`#4e4e4e`,fg:`#d787d7`},env:{bg:`#303030`,fg:`#ff5f87`},weekly:{bg:`#303030`,fg:`#d787d7`}},ge={directory:{bg:`#585858`,fg:`#ff87ff`},git:{bg:`#303030`,fg:`#00d7d7`},model:{bg:`#262626`,fg:`#ffaf87`},session:{bg:`#585858`,fg:`#d7af00`},block:{bg:`#666666`,fg:`#ff5f87`},today:{bg:`#444444`,fg:`#00d7d7`},tmux:{bg:`#585858`,fg:`#bcbcbc`},context:{bg:`#808080`,fg:`#ffffff`},contextWarning:{bg:`#d7af00`,fg:`#000000`},contextCritical:{bg:`#ff5f5f`,fg:`#000000`},metrics:{bg:`#a8a8a8`,fg:`#000000`},version:{bg:`#666666`,fg:`#ff87ff`},env:{bg:`#444444`,fg:`#ff5f87`},weekly:{bg:`#444444`,fg:`#ff87ff`}},_e={directory:{bg:`#504945`,fg:`#ebdbb2`},git:{bg:`#3c3836`,fg:`#b8bb26`},model:{bg:`#665c54`,fg:`#83a598`},session:{bg:`#282828`,fg:`#8ec07c`},block:{bg:`#3c3836`,fg:`#83a598`},today:{bg:`#282828`,fg:`#fabd2f`},tmux:{bg:`#282828`,fg:`#fe8019`},context:{bg:`#458588`,fg:`#ebdbb2`},contextWarning:{bg:`#d79921`,fg:`#282828`},contextCritical:{bg:`#cc241d`,fg:`#ebdbb2`},metrics:{bg:`#d3869b`,fg:`#282828`},version:{bg:`#504945`,fg:`#8ec07c`},env:{bg:`#3c3836`,fg:`#d3869b`},weekly:{bg:`#3c3836`,fg:`#8ec07c`}},ve={directory:{bg:`#585858`,fg:`#ffffaf`},git:{bg:`#444444`,fg:`#afaf00`},model:{bg:`#6c6c6c`,fg:`#87afaf`},session:{bg:`#303030`,fg:`#87af87`},block:{bg:`#444444`,fg:`#87afaf`},today:{bg:`#303030`,fg:`#ffaf00`},tmux:{bg:`#303030`,fg:`#ff8700`},context:{bg:`#5f8787`,fg:`#ffffaf`},contextWarning:{bg:`#d7af00`,fg:`#303030`},contextCritical:{bg:`#d70000`,fg:`#ffffaf`},metrics:{bg:`#d787af`,fg:`#303030`},version:{bg:`#585858`,fg:`#87af87`},env:{bg:`#444444`,fg:`#d787af`},weekly:{bg:`#444444`,fg:`#87af87`}},ye={directory:{bg:`#808080`,fg:`#ffff00`},git:{bg:`#585858`,fg:`#00ff00`},model:{bg:`#808080`,fg:`#00afff`},session:{bg:`#444444`,fg:`#00d787`},block:{bg:`#585858`,fg:`#00afff`},today:{bg:`#444444`,fg:`#ffaf00`},tmux:{bg:`#444444`,fg:`#ff8700`},context:{bg:`#008787`,fg:`#ffffff`},contextWarning:{bg:`#d7af00`,fg:`#000000`},contextCritical:{bg:`#d70000`,fg:`#ffffff`},metrics:{bg:`#ff87af`,fg:`#444444`},version:{bg:`#808080`,fg:`#00d787`},env:{bg:`#585858`,fg:`#ff87af`},weekly:{bg:`#585858`,fg:`#00d787`}},E={dark:ne,"dark-ansi256":re,"dark-ansi":ie,light:ae,"light-ansi256":oe,"light-ansi":se,nord:ce,"nord-ansi256":le,"nord-ansi":ue,"tokyo-night":de,"tokyo-night-ansi256":fe,"tokyo-night-ansi":pe,"rose-pine":me,"rose-pine-ansi256":he,"rose-pine-ansi":ge,gruvbox:_e,"gruvbox-ansi256":ve,"gruvbox-ansi":ye};function D(e,t){let n=E[e];if(!n)return null;if(t===`none`||t===`ansi`){let t=E[`${e}-ansi`];if(t)return t}if(t===`ansi256`){let t=E[`${e}-ansi256`];if(t)return t}return n}function O(e,...t){process.env.CLAUDE_POWERLINE_DEBUG&&console.error(`[DEBUG] ${e}`,...t)}const be=a(r);var xe=class{isGitRepo(e){try{return o.existsSync(l.join(e,`.git`))}catch{return!1}}async execGitAsync(e,t){return be(e,{...t,env:{...process.env,GIT_OPTIONAL_LOCKS:`0`}})}async findGitRoot(e){try{return(await this.execGitAsync(`git rev-parse --show-toplevel`,{cwd:e,encoding:`utf8`,timeout:2e3})).stdout.trim()||null}catch{return null}}async getGitInfo(e,t={},n){let r,i=this.isWorktree(e);if(i)r=e;else if(n&&this.isGitRepo(n))r=n;else if(this.isGitRepo(e))r=e;else{let t=await this.findGitRoot(e);if(!t)return null;r=t}try{let e=await this.getStatusWithBranchAsync(r),n=await this.getAheadBehindAsync(r),a={branch:e.branch||`detached`,status:e.status,ahead:n.ahead,behind:n.behind};t.showWorkingTree&&e.workingTree&&(a.staged=e.workingTree.staged,a.unstaged=e.workingTree.unstaged,a.untracked=e.workingTree.untracked,a.conflicts=e.workingTree.conflicts);let o={},s={};t.showSha&&(o.sha=this.getShaAsync(r)),t.showTag&&(o.tag=this.getNearestTagAsync(r)),t.showTimeSinceCommit&&(o.timeSinceCommit=this.getTimeSinceLastCommitAsync(r)),t.showStashCount&&(s.stashCount=this.getStashCountAsync(r)),t.showUpstream&&(s.upstream=this.getUpstreamAsync(r)),t.showRepoName&&(s.repoName=this.getRepoNameAsync(r));let c=new Map;for(let[e,t]of Object.entries(o))try{let n=await t;c.set(e,n)}catch{}return Object.keys(s).length>0&&(await Promise.allSettled(Object.entries(s).map(async([e,t])=>({key:e,value:await t})))).forEach(e=>{e.status===`fulfilled`&&c.set(e.value.key,e.value.value)}),t.showSha&&(a.sha=c.get(`sha`)||void 0),t.showOperation&&(a.operation=this.getOngoingOperation(r)||void 0),t.showTag&&(a.tag=c.get(`tag`)||void 0),t.showTimeSinceCommit&&(a.timeSinceCommit=c.get(`timeSinceCommit`)||void 0),t.showStashCount&&(a.stashCount=c.get(`stashCount`)||0),t.showUpstream&&(a.upstream=c.get(`upstream`)||void 0),t.showRepoName&&(a.repoName=c.get(`repoName`)||void 0,a.isWorktree=i),a}catch{return null}}async getShaAsync(e){try{return(await this.execGitAsync(`git rev-parse --short=7 HEAD`,{cwd:e,encoding:`utf8`,timeout:2e3})).stdout.trim()||null}catch{return null}}resolveGitDir(e){let t=l.join(e,`.git`);if(o.existsSync(t)&&o.statSync(t).isFile()){let n=o.readFileSync(t,`utf-8`).match(/^gitdir:\s*(.+)$/m);if(n?.[1])return l.resolve(e,n[1].trim())}return t}getOngoingOperation(e){try{let t=this.resolveGitDir(e);return o.existsSync(l.join(t,`MERGE_HEAD`))?`MERGE`:o.existsSync(l.join(t,`CHERRY_PICK_HEAD`))?`CHERRY-PICK`:o.existsSync(l.join(t,`REVERT_HEAD`))?`REVERT`:o.existsSync(l.join(t,`BISECT_LOG`))?`BISECT`:o.existsSync(l.join(t,`rebase-merge`))||o.existsSync(l.join(t,`rebase-apply`))?`REBASE`:null}catch{return null}}async getNearestTagAsync(e){try{return(await this.execGitAsync(`git describe --tags --abbrev=0`,{cwd:e,encoding:`utf8`,timeout:2e3})).stdout.trim()||null}catch{return null}}async getTimeSinceLastCommitAsync(e){try{let t=(await this.execGitAsync(`git log -1 --format=%ct`,{cwd:e,encoding:`utf8`,timeout:2e3})).stdout.trim();if(!t)return null;let n=parseInt(t)*1e3;return Math.floor((Date.now()-n)/1e3)}catch{return null}}async getStashCountAsync(e){try{let t=(await this.execGitAsync(`git stash list`,{cwd:e,encoding:`utf8`,timeout:2e3})).stdout.trim();return t?t.split(`
|
|
3
|
-
`).length:0}catch{return 0}}async getUpstreamAsync(e){try{return(await this.execGitAsync(`git rev-parse --abbrev-ref @{u}`,{cwd:e,encoding:`utf8`,timeout:2e3})).stdout.trim()||null}catch{return null}}async getRepoNameAsync(e){try{let t=(await this.execGitAsync(`git config --get remote.origin.url`,{cwd:e,encoding:`utf8`,timeout:2e3})).stdout.trim();return t&&t.match(/\/([^/]+?)(\.git)?$/)?.[1]||l.basename(e)}catch{return l.basename(e)}}isWorktree(e){try{let t=l.join(e,`.git`);return!!(o.existsSync(t)&&o.statSync(t).isFile())}catch{return!1}}async getStatusWithBranchAsync(e){try{
|
|
4
|
-
`),n=null,r=`clean`,i=0,a=0,o=0,s=0;for(let e of t)if(e){if(e.startsWith(`## `)){let t=e.substring(3).split(`...`)[0];t&&t!==`HEAD (no branch)`&&(n=t);continue}if(e.length>=2){let t=e.charAt(0),n=e.charAt(1);if(t===`?`&&n===`?`){o++,r===`clean`&&(r=`dirty`);continue}let c=t+n;if([`DD`,`AU`,`UD`,`UA`,`DU`,`AA`,`UU`].includes(c)){s++,r=`conflicts`;continue}t!==` `&&t!==`?`&&(i++,r===`clean`&&(r=`dirty`)),n!==` `&&n!==`?`&&(a++,r===`clean`&&(r=`dirty`))}}return{branch:n||await this.getFallbackBranch(e),status:r,workingTree:{staged:i,unstaged:a,untracked:o,conflicts:s}}}catch(t){return
|
|
5
|
-
`)[0];r&&JSON.parse(r).sessionId===e&&n.push(t)}catch{
|
|
6
|
-
`).filter(e=>e.trim()),n=[];for(let e of t)try{let t=JSON.parse(e);if(!t.timestamp)continue;let r={timestamp:new Date(t.timestamp),message:t.message,costUSD:typeof t.costUSD==`number`?t.costUSD:void 0,isSidechain:t.isSidechain===!0,raw:t};n.push(r)}catch(e){O(`Failed to parse JSONL line: ${e}`);continue}return n}async function je(e){return new Promise((t,n)=>{let r=[],i=s(e,{encoding:`utf8`}),a=x({input:i,crlfDelay:1/0});a.on(`line`,e=>{let t=e.trim();if(t)try{let e=JSON.parse(t);if(!e.timestamp)return;let n={timestamp:new Date(e.timestamp),message:e.message,costUSD:typeof e.costUSD==`number`?e.costUSD:void 0,isSidechain:e.isSidechain===!0,raw:e};r.push(n)}catch(e){O(`Failed to parse JSONL line: ${e}`)}}),a.on(`close`,()=>{t(r)}),a.on(`error`,t=>{O(`Streaming parser error for ${e}:`,t),n(t)}),i.on(`error`,t=>{O(`File stream error for ${e}:`,t),n(t)})})}async function Me(e){try{let t=await Oe(e);return t?{filePath:e,mtime:t}:null}catch{return null}}async function Ne(e,t){try{let n=await y(e,{withFileTypes:!0}),r=n.filter(e=>!e.isDirectory()&&e.name.endsWith(`.jsonl`)).map(t=>Me(d(e,t.name))),i=n.filter(e=>e.isDirectory()).map(async t=>{let n=d(e,t.name,`subagents`);try{return(await y(n)).filter(e=>e.startsWith(`agent-`)&&e.endsWith(`.jsonl`)).map(e=>Me(d(n,e)))}catch{return[]}}),[a,o]=await Promise.all([Promise.all(r),Promise.all(i).then(e=>Promise.all(e.flat()))]);return[...a,...o].filter(e=>e!==null&&(!t||t(e.filePath,e.mtime)))}catch(t){return O(`Failed to read project directory ${e}:`,t),[]}}async function Pe(e,t,n=!1){let r=await Te(we()),i=new Set,a=r.map(e=>Ne(e,t)),o=(await Promise.all(a)).flat().filter(e=>e!==null);n&&o.sort((e,t)=>t.mtime.getTime()-e.mtime.getTime());let s=o.map(e=>e.filePath),c=[],l=s.map(async t=>(await k(t)).filter(t=>!e||e(t))),u=await Promise.all(l);for(let e of u)c.push(...e);c.sort((e,t)=>e.timestamp.getTime()-t.timestamp.getTime());let d=[];for(let e of c){let t=ke(e);t&&i.has(t)||(t&&i.add(t),d.push(e))}return d}var A=class{static CACHE_DIR=l.join(h(),`.claude`,`powerline`);static USAGE_CACHE_DIR=l.join(this.CACHE_DIR,`usage`);static LOCKS_DIR=l.join(this.CACHE_DIR,`locks`);static isLocked(e){let t=l.join(this.LOCKS_DIR,e);if(!o.existsSync(t))return!1;try{let n=o.readFileSync(t,`utf-8`),r=parseInt(n.trim(),10);if(isNaN(r))return O(`Invalid PID in lock file ${e}, removing stale lock`),o.unlinkSync(t),!1;try{return process.kill(r,0),!0}catch(n){return n.code===`ESRCH`?(O(`Removing stale lock file ${e} for dead process ${r}`),o.unlinkSync(t),!1):(O(`Error checking process ${r} for lock ${e}:`,n),!0)}}catch(t){return O(`Error reading lock file ${e}:`,t),!0}}static async acquireLock(e,t=5e3){await this.ensureCacheDirectories();let n=l.join(this.LOCKS_DIR,e),r=Date.now(),i=String(process.pid);for(;Date.now()-r<t;)try{return await o.promises.writeFile(n,i,{flag:`wx`}),O(`Lock acquired for ${e}`),!0}catch(e){if(e.code===`EEXIST`)await _(50);else throw e}return O(`Failed to acquire lock for ${e} within ${t}ms`),!1}static async releaseLock(e){let t=l.join(this.LOCKS_DIR,e);try{await o.promises.unlink(t),O(`Lock released for ${e}`)}catch(t){t.code!==`ENOENT`&&O(`Error releasing lock for ${e}:`,t)}}static async ensureCacheDirectories(){try{await Promise.all([o.promises.mkdir(this.CACHE_DIR,{recursive:!0}),o.promises.mkdir(this.USAGE_CACHE_DIR,{recursive:!0}),o.promises.mkdir(this.LOCKS_DIR,{recursive:!0})])}catch(e){O(`Failed to create cache directories:`,e)}}static createProjectHash(e){return g(`md5`).update(e).digest(`hex`).substring(0,8)}static async getUsageCache(e,t){await this.ensureCacheDirectories();let n=l.join(this.USAGE_CACHE_DIR,`${e}.json`),r=`${e}.usage.lock`;for(let i=0;i<3;i++){if(this.isLocked(r)){O(`Cache for ${e} is locked, waiting...`),await _(75);continue}try{let r=await o.promises.readFile(n,`utf-8`),i=JSON.parse(r);return!t||i.timestamp>=t?(O(`[CACHE-HIT] ${e} disk cache: found`),this.deserializeDates(i.data)):(O(`${e} cache outdated: cache=${i.timestamp}, latest=${t}`),null)}catch(t){if(t.code===`ENOENT`)return O(`No shared ${e} usage cache found`),null;O(`Attempt ${i+1} failed to read ${e} cache: ${t.message}. Retrying...`),await _(75)}}return O(`Failed to read ${e} cache after 3 attempts.`),null}static deserializeDates(e){return Array.isArray(e)?e.map(e=>({...e,timestamp:new Date(e.timestamp)})):e}static async setUsageCache(e,t,n){let r=`${e}.usage.lock`;if(!await this.acquireLock(r)){O(`Could not acquire lock to set usage cache for ${e}`);return}try{await this.ensureCacheDirectories();let r=l.join(this.USAGE_CACHE_DIR,`${e}.json`),i=JSON.stringify({data:t,timestamp:n||Date.now()});await o.promises.writeFile(r,i,`utf-8`),O(`[CACHE-SET] ${e} disk cache stored`)}catch(t){O(`Failed to save ${e} usage cache:`,t)}finally{await this.releaseLock(r)}}static async getLatestTranscriptMtime(){try{let e=await Te(we()),t=0;for(let n of e)try{let e=(await o.promises.readdir(n)).filter(e=>e.endsWith(`.jsonl`));for(let r of e){let e=await Oe(l.join(n,r));e&&e.getTime()>t&&(t=e.getTime())}}catch(e){O(`Failed to read project directory ${n}:`,e);continue}return t}catch(e){return O(`Failed to get latest transcript mtime:`,e),Date.now()}}};const j={"claude-haiku-4-5-20251001":{name:`Claude Haiku 4.5`,input:1,output:5,cache_write_5m:1.25,cache_write_1h:2,cache_read:.1},"claude-haiku-4-5":{name:`Claude Haiku 4.5`,input:1,output:5,cache_write_5m:1.25,cache_write_1h:2,cache_read:.1},"claude-opus-4-20250514":{name:`Claude Opus 4`,input:15,output:75,cache_write_5m:18.75,cache_write_1h:30,cache_read:1.5},"claude-opus-4-1":{name:`Claude Opus 4.1`,input:15,output:75,cache_write_5m:18.75,cache_write_1h:30,cache_read:1.5},"claude-opus-4-1-20250805":{name:`Claude Opus 4.1`,input:15,output:75,cache_write_5m:18.75,cache_write_1h:30,cache_read:1.5},"claude-sonnet-4-20250514":{name:`Claude Sonnet 4`,input:3,output:15,cache_write_5m:3.75,cache_write_1h:6,cache_read:.3},"claude-4-opus-20250514":{name:`Claude 4 Opus`,input:15,output:75,cache_write_5m:18.75,cache_write_1h:30,cache_read:1.5},"claude-4-sonnet-20250514":{name:`Claude 4 Sonnet`,input:3,output:15,cache_write_5m:3.75,cache_write_1h:6,cache_read:.3},"claude-sonnet-4-5":{name:`Claude Sonnet 4.5`,input:3,output:15,cache_write_5m:3.75,cache_write_1h:6,cache_read:.3},"claude-sonnet-4-5-20250929":{name:`Claude Sonnet 4.5`,input:3,output:15,cache_write_5m:3.75,cache_write_1h:6,cache_read:.3},"claude-opus-4-5":{name:`Claude Opus 4.5`,input:5,output:25,cache_write_5m:6.25,cache_write_1h:10,cache_read:.5},"claude-opus-4-5-20251101":{name:`Claude Opus 4.5`,input:5,output:25,cache_write_5m:6.25,cache_write_1h:10,cache_read:.5},"claude-opus-4-6":{name:`Claude Opus 4.6`,input:5,output:25,cache_write_5m:6.25,cache_write_1h:10,cache_read:.5},"claude-opus-4-6-20260205":{name:`Claude Opus 4.6`,input:5,output:25,cache_write_5m:6.25,cache_write_1h:10,cache_read:.5},"claude-sonnet-4-6":{name:`Claude Sonnet 4.6`,input:3,output:15,cache_write_5m:3.75,cache_write_1h:6,cache_read:.3}};var Fe=class{static executionCache=null;static modelPricingCache=new Map;static GITHUB_PRICING_URL=`https://raw.githubusercontent.com/Owloops/claude-powerline/main/pricing.json`;static async loadDiskCache(){let e=Date.now()-1440*60*1e3;return await A.getUsageCache(`pricing`,e)}static async saveDiskCache(e){await A.setUsageCache(`pricing`,e)}static async fetchPricingData(){return new Promise(e=>{let t=new p(this.GITHUB_PRICING_URL),n=f({hostname:t.hostname,path:t.pathname,headers:{"User-Agent":`claude-powerline`,"Cache-Control":`no-cache`},timeout:5e3},t=>{if(t.statusCode!==200){O(`HTTP ${t.statusCode}: ${t.statusMessage}`),e(null);return}let r=``,i=0;t.on(`data`,t=>{if(i+=t.length,i>1048576){O(`Response too large`),n.destroy(),e(null);return}r+=t}),t.on(`end`,()=>{try{let t=JSON.parse(r),n=t._meta,i={};for(let[e,n]of Object.entries(t))e!==`_meta`&&(i[e]=n);this.validatePricingData(i)?(O(`Fetched fresh pricing from GitHub for ${Object.keys(i).length} models`),O(`Pricing last updated: ${n?.updated||`unknown`}`),e(i)):(O(`Invalid pricing data structure`),e(null))}catch(t){O(`Failed to parse JSON:`,t),e(null)}}),t.on(`error`,t=>{O(`Response error:`,t),e(null)})});n.on(`error`,t=>{O(`Request error:`,t),e(null)}),n.on(`timeout`,()=>{O(`Request timeout`),n.destroy(),e(null)}),n.end()})}static async getCurrentPricing(){if(this.executionCache!==null)return O(`[CACHE-HIT] Pricing execution cache: ${Object.keys(this.executionCache).length} models`),this.executionCache;let e=await this.loadDiskCache();if(e)return O(`[CACHE-HIT] Pricing disk cache: ${Object.keys(e).length} models`),this.executionCache=e,O(`[CACHE-SET] Pricing execution cache stored: ${Object.keys(e).length} models`),e;let t=await this.fetchPricingData();return t?(await this.saveDiskCache(t),O(`[CACHE-SET] Pricing disk cache stored: ${Object.keys(t).length} models`),this.executionCache=t,O(`[CACHE-SET] Pricing execution cache stored: ${Object.keys(t).length} models`),t):(O(`[CACHE-FALLBACK] Using offline pricing data: ${Object.keys(j).length} models`),this.executionCache=j,O(`[CACHE-SET] Pricing execution cache stored: ${Object.keys(j).length} models`),j)}static validatePricingData(e){if(!e||typeof e!=`object`)return!1;for(let[,t]of Object.entries(e)){if(!t||typeof t!=`object`)return!1;let e=t;if(typeof e.input!=`number`||typeof e.output!=`number`||typeof e.cache_read!=`number`)return!1}return!0}static async getModelPricing(e){if(this.modelPricingCache.has(e))return O(`[CACHE-HIT] Model pricing cache: ${e}`),this.modelPricingCache.get(e);let t=await this.getCurrentPricing(),n;return n=t[e]?t[e]:this.fuzzyMatchModel(e,t),this.modelPricingCache.set(e,n),O(`[CACHE-SET] Model pricing cache: ${e}`),n}static fuzzyMatchModel(e,t){let n=e.toLowerCase();for(let[e,r]of Object.entries(t))if(e.toLowerCase()===n)return r;for(let{pattern:e,fallback:r}of[{pattern:[`opus-4-6`,`claude-opus-4-6`],fallback:`claude-opus-4-6-20260205`},{pattern:[`opus-4-5`,`claude-opus-4-5`],fallback:`claude-opus-4-5-20251101`},{pattern:[`opus-4-1`,`claude-opus-4-1`],fallback:`claude-opus-4-1-20250805`},{pattern:[`opus-4`,`claude-opus-4`],fallback:`claude-opus-4-20250514`},{pattern:[`sonnet-4-6`,`sonnet-4.6`,`claude-sonnet-4-6`],fallback:`claude-sonnet-4-6`},{pattern:[`sonnet-4.5`,`4-5-sonnet`,`sonnet-4-5`],fallback:`claude-sonnet-4-5-20250929`},{pattern:[`sonnet-4`,`claude-sonnet-4`],fallback:`claude-sonnet-4-20250514`},{pattern:[`haiku-4.5`,`4-5-haiku`,`haiku-4-5`],fallback:`claude-haiku-4-5-20251001`},{pattern:[`haiku`],fallback:`claude-haiku-4-5-20251001`},{pattern:[`opus`],fallback:`claude-opus-4-20250514`},{pattern:[`sonnet`],fallback:`claude-sonnet-4-5-20250929`}])if(e.some(e=>n.includes(e))&&t[r])return t[r];return t[`claude-sonnet-4-5-20250929`]||{name:`${e} (Unknown Model)`,input:3,cache_write_5m:3.75,cache_write_1h:6,cache_read:.3,output:15}}static async calculateCostForEntry(e){let t=e.message?.usage;if(!t)return 0;let n=this.extractModelId(e),r=await this.getModelPricing(n),i=t.input_tokens||0,a=t.output_tokens||0,o=t.cache_creation_input_tokens||0,s=t.cache_read_input_tokens||0,c=i/1e6*r.input,l=a/1e6*r.output,u=s/1e6*r.cache_read,d=o/1e6*r.cache_write_5m;return c+l+d+u}static extractModelId(e){if(e.model&&typeof e.model==`string`)return e.model;let t=e.message;if(t?.model){let e=t.model;if(typeof e==`string`)return e;let n=e;return(typeof n?.id==`string`?n.id:null)||`claude-sonnet-4-5-20250929`}return e.model_id&&typeof e.model_id==`string`?e.model_id:`claude-sonnet-4-5-20250929`}};function Ie(e){return{timestamp:e.timestamp.toISOString(),message:{usage:{input_tokens:e.message?.usage?.input_tokens||0,output_tokens:e.message?.usage?.output_tokens||0,cache_creation_input_tokens:e.message?.usage?.cache_creation_input_tokens,cache_read_input_tokens:e.message?.usage?.cache_read_input_tokens}},costUSD:e.costUSD}}var Le=class{async getSessionUsage(e){try{let t=await Ee(e);if(!t)return O(`No transcript found for session: ${e}`),null;O(`Found transcript at: ${t}`);let n=await k(t),r=await De(e,u(t));O(`Found ${r.length} agent transcripts for session`);for(let e of r){let t=await k(e);n.push(...t)}if(n.length===0)return{totalCost:0,entries:[]};let i=[],a=0;for(let e of n)if(e.message?.usage){let t=Ie(e);if(t.costUSD!==void 0)a+=t.costUSD;else{let n=await Fe.calculateCostForEntry(e.raw);t.costUSD=n,a+=n}i.push(t)}return O(`Parsed ${i.length} usage entries, total cost: $${a.toFixed(4)}`),{totalCost:a,entries:i}}catch(t){return O(`Error reading session usage for ${e}:`,t),null}}calculateTokenBreakdown(e){return e.reduce((e,t)=>({input:e.input+(t.message.usage.input_tokens||0),output:e.output+(t.message.usage.output_tokens||0),cacheCreation:e.cacheCreation+(t.message.usage.cache_creation_input_tokens||0),cacheRead:e.cacheRead+(t.message.usage.cache_read_input_tokens||0)}),{input:0,output:0,cacheCreation:0,cacheRead:0})}async getSessionInfo(e,t){let n=await this.getSessionUsage(e);if(!n||n.entries.length===0)return{cost:null,calculatedCost:null,officialCost:null,tokens:null,tokenBreakdown:null};let r=this.calculateTokenBreakdown(n.entries),i=r.input+r.output+r.cacheCreation+r.cacheRead,a=n.totalCost,o=t?.cost?.total_cost_usd??null;return{cost:a??o,calculatedCost:a,officialCost:o,tokens:i,tokenBreakdown:r}}},Re=class{sessionProvider=new Le;async getUsageInfo(e,t){try{return O(`Starting usage info retrieval for session: ${e}`),{session:await this.sessionProvider.getSessionInfo(e,t)}}catch(t){return O(`Error getting usage info for session ${e}:`,t),{session:{cost:null,calculatedCost:null,officialCost:null,tokens:null,tokenBreakdown:null}}}}},ze=class{thresholds={LOW:50,MEDIUM:80};config;constructor(e){this.config=e}getContextUsageThresholds(){return this.thresholds}getContextLimit(e){let t=this.config.modelContextLimits||{default:2e5};return t[this.getModelType(e)]||t.default||2e5}getModelType(e){let t=e.toLowerCase();return t.includes(`sonnet`)?`sonnet`:t.includes(`opus`)?`opus`:`default`}calculatePercentages(e,t,n=33e3){let r=Math.min(100,Math.max(0,Math.round(e/t*100))),i=Math.max(1,t-n),a=Math.min(100,Math.max(0,Math.round(e/i*100)));return{percentage:r,usablePercentage:a,contextLeftPercentage:Math.max(0,100-a),usableTokens:i}}calculateContextFromHookData(e,t=33e3){let n=e.context_window?.current_usage;if(!n)return O(`No current_usage in hook data, falling back to transcript parsing`),null;let r=e.context_window?.context_window_size||2e5,i=(n.input_tokens||0)+(n.cache_creation_input_tokens||0)+(n.cache_read_input_tokens||0);O(`Native current_usage: input=${n.input_tokens}, cache_create=${n.cache_creation_input_tokens}, cache_read=${n.cache_read_input_tokens}, total=${i} (limit: ${r})`);let a=e.context_window?.used_percentage,o=this.calculatePercentages(i,r,t);return a!=null&&(o.percentage=Math.round(a),O(`Using native used_percentage: ${a}%`)),{totalTokens:i,maxTokens:r,...o}}async calculateContextTokensFromTranscript(e,t,n=33e3){try{O(`Calculating context tokens from transcript: ${e}`);let r=await k(e);if(r.length===0)return O(`No entries in transcript`),null;let i=null;for(let e=r.length-1;e>=0;e--){let t=r[e];if(t&&t.message?.usage?.input_tokens&&t.isSidechain!==!0){i=t,O(`Context segment: Found most recent entry at ${t.timestamp.toISOString()}, stopping search`);break}}if(i?.message?.usage){let e=i.message.usage,r=(e.input_tokens||0)+(e.cache_read_input_tokens||0)+(e.cache_creation_input_tokens||0),a=t?this.getContextLimit(t):2e5;return O(`Most recent main chain context: ${r} tokens (limit: ${a})`),{totalTokens:r,maxTokens:a,...this.calculatePercentages(r,a,n)}}return O(`No main chain entries with usage data found`),null}catch(e){return O(`Error reading transcript: ${e instanceof Error?e.message:String(e)}`),null}}async getContextInfo(e,t=33e3){return this.calculateContextFromHookData(e,t)||this.calculateContextTokensFromTranscript(e.transcript_path,e.model?.id,t)}},Be=class{async loadTranscriptEntries(e){try{let t=await Ee(e);if(!t)return O(`No transcript found for session: ${e}`),[];O(`Loading transcript from: ${t}`);let n=(await v(t,`utf-8`)).trim().split(`
|
|
7
|
-
`).filter(e=>e.trim()),r=[];for(let e of n)try{let t=JSON.parse(e);if(t.isSidechain===!0)continue;r.push(t)}catch(e){O(`Failed to parse JSONL line: ${e}`);continue}return O(`Loaded ${r.length} transcript entries`),r}catch(t){return O(`Error loading transcript for ${e}:`,t),[]}}calculateMessageCount(e){return e.filter(e=>{let t=e.type||e.message?.role||e.message?.type,n=e.type===`user`&&e.message?.content?.[0]?.type===`tool_result`;return t===`user`&&!n}).length}calculateLastResponseTime(e){if(e.length===0)return null;let t=e.slice(-20),n=null,r=null;for(let e of t)if(e.timestamp)try{let t=new Date(e.timestamp),i=e.type||e.message?.role||e.message?.type,a=e.type===`user`&&e.message?.content?.[0]?.type===`tool_result`;if(i===`user`&&!a)n=t;else if(i===`assistant`&&n){let e=(t.getTime()-n.getTime())/1e3;e>.1&&e<300&&(r=e)}}catch{continue}return r}async getMetricsInfo(e,t){try{if(O(`Getting metrics from hook data for session: ${e}`),!t.cost)return O(`No cost data available in hook data`),{responseTime:null,lastResponseTime:null,sessionDuration:null,messageCount:null,linesAdded:null,linesRemoved:null};let n=await this.loadTranscriptEntries(e),r=this.calculateMessageCount(n),i=this.calculateLastResponseTime(n);return{responseTime:t.cost.total_api_duration_ms/1e3,lastResponseTime:i,sessionDuration:t.cost.total_duration_ms/1e3,messageCount:r,linesAdded:t.cost.total_lines_added,linesRemoved:t.cost.total_lines_removed}}catch(t){return O(`Error getting metrics from hook data for session ${e}:`,t),{responseTime:null,lastResponseTime:null,sessionDuration:null,messageCount:null,linesAdded:null,linesRemoved:null}}}};function M(e){return e===null?`$0.00`:e<.01?`<$0.01`:`$${e.toFixed(2)}`}function Ve(e){return e===null||e===0?`0 tokens`:e>=1e6?`${(e/1e6).toFixed(1)}M tokens`:e>=1e3?`${(e/1e3).toFixed(1)}K tokens`:`${e} tokens`}function He(e){if(!e)return`0 tokens`;let t=[];if(e.input>0&&t.push(`${N(e.input)} in`),e.output>0&&t.push(`${N(e.output)} out`),e.cacheCreation>0||e.cacheRead>0){let n=e.cacheCreation+e.cacheRead;t.push(`${N(n)} cached`)}return t.length>0?t.join(` + `):`0 tokens`}function Ue(e){return e<60?`${e}s`:e<3600?`${Math.floor(e/60)}m`:e<86400?`${Math.floor(e/3600)}h`:e<604800?`${Math.floor(e/86400)}d`:`${Math.floor(e/604800)}w`}function We(e){return e<60?`${e.toFixed(0)}s`:e<3600?`${(e/60).toFixed(0)}m`:e<86400?`${(e/3600).toFixed(1)}h`:`${(e/86400).toFixed(1)}d`}const Ge=/^(?:(?:global|apac|au|eu|us|us-east-\d|us-west-\d|eu-west-\d|eu-central-\d)\.)?(?:anthropic\.|azure_ai\/|bedrock\/|vertex_ai\/)?claude-(?:(?<family>opus|sonnet|haiku)-(?<newMajor>\d+)(?:-(?<newMinor>\d))?|(?<oldMajor>\d+)(?:-(?<oldMinor>\d))?-(?<oldFamily>opus|sonnet|haiku))(?:[-@]\d{8})?(?:-v\d+:\d+)?(?:-latest)?$/i;function Ke(e){if(!e)return`Claude`;let t=e.trim().match(Ge);if(!t?.groups)return e;let{family:n,newMajor:r,newMinor:i,oldMajor:a,oldMinor:o,oldFamily:s}=t.groups,c=n||s,l=r||a,u=i||o;return c&&l?`${c.charAt(0).toUpperCase()+c.slice(1).toLowerCase()} ${u?`${l}.${u}`:l}`:e}function qe(e){let t=e.includes(`/`)?`/`:`\\`,n=e.split(t);return n.map((e,t)=>t===n.length-1||e===`~`||e===``?e:e.charAt(0)).join(t)}function Je(e){return e<60?`${e.toFixed(1)}s`:`${(e/60).toFixed(1)}m`}function N(e){return Ve(e).replace(` tokens`,``)}function Ye(e,t){let n=t??globalThis.process?.env?.HOME??globalThis.process?.env?.USERPROFILE;return n&&e.startsWith(n)?e.replace(n,`~`):e}function Xe(e){let t=Math.floor(e/60),n=e%60;return t>0?`${t}h ${n}m left`:`${n}m left`}function Ze(e){if(e>=1440){let t=Math.floor(e/1440),n=Math.floor(e%1440/60);return n>0?`${t}d ${n}h`:`${t}d`}else if(e>=60){let t=Math.floor(e/60),n=e%60;return n>0?`${t}h ${n}m`:`${t}h`}return`${e}m`}function Qe(e){return Math.round(Math.max(0,e*1e3-Date.now())/6e4)}function $e(e,t){return!t||t<=0||e<0?null:Math.min(100,e/t*100)}function P(e,t,n=80){let r=$e(e,t);if(r===null)return{percentage:null,isWarning:!1,displayText:``};let i=`${r.toFixed(0)}%`,a=r>=n,o=``;return o=a?` !${i}`:r>=50?` +${i}`:` ${i}`,{percentage:r,isWarning:a,displayText:o}}const et={ball:{filled:`─`,empty:`─`,marker:`●`},blocks:{filled:`█`,empty:`░`},"blocks-line":{filled:`█`,empty:`─`},capped:{filled:`━`,empty:`┄`,cap:`╸`},dots:{filled:`●`,empty:`○`},filled:{filled:`■`,empty:`□`},geometric:{filled:`▰`,empty:`▱`},line:{filled:`━`,empty:`┄`},squares:{filled:`◼`,empty:`◻`}};var tt=class{constructor(e,t){this.config=e,this.symbols=t}renderDirectory(e,t,n){let r=e.workspace?.current_dir||e.cwd||`/`,i=e.workspace?.project_dir,a=n?.style??(n?.showBasename?`basename`:`full`);if(a===`basename`)return{text:r.split(/[\\/]/).pop()||`root`,bgColor:t.modeBg,fgColor:t.modeFg};let o=Ye(r),s=i&&Ye(i),c=this.getDisplayDirectoryName(o,s);return a===`fish`&&(c=qe(c)),{text:c,bgColor:t.modeBg,fgColor:t.modeFg}}renderGit(e,t,n){if(!e)return null;let r=[];if(n?.showRepoName&&e.repoName&&(r.push(e.repoName),e.isWorktree&&r.push(this.symbols.git_worktree)),n?.showOperation&&e.operation&&r.push(`[${e.operation}]`),r.push(`${this.symbols.branch} ${e.branch}`),n?.showTag&&e.tag&&r.push(`${this.symbols.git_tag} ${e.tag}`),n?.showSha&&e.sha&&r.push(`${this.symbols.git_sha} ${e.sha}`),n?.showAheadBehind!==!1&&(e.ahead>0&&e.behind>0?r.push(`${this.symbols.git_ahead}${e.ahead}${this.symbols.git_behind}${e.behind}`):e.ahead>0?r.push(`${this.symbols.git_ahead}${e.ahead}`):e.behind>0&&r.push(`${this.symbols.git_behind}${e.behind}`)),n?.showWorkingTree){let t=[];e.staged&&e.staged>0&&t.push(`+${e.staged}`),e.unstaged&&e.unstaged>0&&t.push(`~${e.unstaged}`),e.untracked&&e.untracked>0&&t.push(`?${e.untracked}`),e.conflicts&&e.conflicts>0&&t.push(`!${e.conflicts}`),t.length>0&&r.push(`(${t.join(` `)})`)}if(n?.showUpstream&&e.upstream&&r.push(`${this.symbols.git_upstream}${e.upstream}`),n?.showStashCount&&e.stashCount&&e.stashCount>0&&r.push(`${this.symbols.git_stash} ${e.stashCount}`),n?.showTimeSinceCommit&&e.timeSinceCommit!==void 0){let t=Ue(e.timeSinceCommit);r.push(`${this.symbols.git_time} ${t}`)}let i=this.symbols.git_clean;return e.status===`conflicts`?i=this.symbols.git_conflicts:e.status===`dirty`&&(i=this.symbols.git_dirty),r.push(i),{text:r.join(` `),bgColor:t.gitBg,fgColor:t.gitFg}}renderModel(e,t){let n=Ke(e.model?.display_name||`Claude`);return{text:`${this.symbols.model} ${n}`,bgColor:t.modelBg,fgColor:t.modelFg}}renderSession(e,t,n){let r=n?.type||`cost`,i=n?.costSource,a=this.config.budget?.session,o=this.formatUsageWithBudget(i===`calculated`?e.session.calculatedCost:i===`official`?e.session.officialCost:e.session.cost,e.session.tokens,e.session.tokenBreakdown,r,a?.amount,a?.warningThreshold||80,a?.type);return{text:`${this.symbols.session_cost} ${o}`,bgColor:t.sessionBg,fgColor:t.sessionFg}}renderSessionId(e,t,n){return{text:n?.showIdLabel===!1?e:`${this.symbols.session_id} ${e}`,bgColor:t.sessionBg,fgColor:t.sessionFg}}renderTmux(e,t){return e?{text:`tmux:${e}`,bgColor:t.tmuxBg,fgColor:t.tmuxFg}:{text:`tmux:none`,bgColor:t.tmuxBg,fgColor:t.tmuxFg}}renderContext(e,t,n){let r=n?.displayStyle??`text`,i=r===`text`?`remaining`:`used`,a=n?.percentageMode??i,o=this.resolveBarStyleDef(r),s=a===`remaining`?`100%`:`0%`;if(!e)return o?{text:`${o.empty.repeat(10)} ${s}`,bgColor:t.contextBg,fgColor:t.contextFg}:{text:`${this.symbols.context_time} 0 (${s})`,bgColor:t.contextBg,fgColor:t.contextFg};let c=t.contextBg,l=t.contextFg;e.contextLeftPercentage<=20?(c=t.contextCriticalBg,l=t.contextCriticalFg):e.contextLeftPercentage<=40&&(c=t.contextWarningBg,l=t.contextWarningFg);let u=a===`remaining`?e.contextLeftPercentage:e.usablePercentage,d=Math.round(e.usablePercentage/100*10),f=10-d;if(o){let t=this.buildBar(o,d,f,10);return{text:n?.showPercentageOnly?`${t} ${u}%`:`${t} ${e.totalTokens.toLocaleString()} (${u}%)`,bgColor:c,fgColor:l}}return{text:n?.showPercentageOnly?`${this.symbols.context_time} ${u}%`:`${this.symbols.context_time} ${e.totalTokens.toLocaleString()} (${u}%)`,bgColor:c,fgColor:l}}buildBar(e,t,n,r){if(e.marker){let n=Math.min(t,r-1);return e.filled.repeat(n)+e.marker+e.empty.repeat(r-n-1)}return e.cap?t===0?e.cap+e.empty.repeat(r-1):t>=r?e.filled.repeat(r):e.filled.repeat(t-1)+e.cap+e.empty.repeat(n):e.filled.repeat(t)+e.empty.repeat(n)}resolveBarStyleDef(e){return e===`bar`?{filled:this.symbols.bar_filled,empty:this.symbols.bar_empty}:et[e]??null}formatPercentageWithBar(e,t,n){let r=t??`text`,i=this.resolveBarStyleDef(r);if(i){let t=Math.round(e/100*10),r=10-t,a=this.buildBar(i,t,r,10);return n?`${a} ${e}% (${n})`:`${a} ${e}%`}return n?`${e}% (${n})`:`${e}%`}renderMetrics(e,t,n){if(!e)return{text:`${this.symbols.metrics_response} new`,bgColor:t.metricsBg,fgColor:t.metricsFg};let r=[];if(n?.showLastResponseTime&&e.lastResponseTime!==null){let t=e.lastResponseTime<60?`${e.lastResponseTime.toFixed(1)}s`:`${(e.lastResponseTime/60).toFixed(1)}m`;r.push(`${this.symbols.metrics_last_response} ${t}`)}if(n?.showResponseTime!==!1&&e.responseTime!==null){let t=e.responseTime<60?`${e.responseTime.toFixed(1)}s`:`${(e.responseTime/60).toFixed(1)}m`;r.push(`${this.symbols.metrics_response} ${t}`)}if(n?.showDuration!==!1&&e.sessionDuration!==null){let t=We(e.sessionDuration);r.push(`${this.symbols.metrics_duration} ${t}`)}return n?.showMessageCount!==!1&&e.messageCount!==null&&r.push(`${this.symbols.metrics_messages} ${e.messageCount}`),n?.showLinesAdded!==!1&&e.linesAdded!==null&&e.linesAdded>0&&r.push(`${this.symbols.metrics_lines_added} ${e.linesAdded}`),n?.showLinesRemoved!==!1&&e.linesRemoved!==null&&e.linesRemoved>0&&r.push(`${this.symbols.metrics_lines_removed} ${e.linesRemoved}`),r.length===0?{text:`${this.symbols.metrics_response} active`,bgColor:t.metricsBg,fgColor:t.metricsFg}:{text:r.join(` `),bgColor:t.metricsBg,fgColor:t.metricsFg}}renderBlock(e,t,n){let r=Math.round(e.nativeUtilization),i=Ze(e.timeRemaining),a=this.config.budget?.block?.warningThreshold??80,o=t.blockBg,s=t.blockFg;return r>=a?(o=t.contextCriticalBg,s=t.contextCriticalFg):r>=50&&(o=t.contextWarningBg,s=t.contextWarningFg),{text:`${this.symbols.block_cost} ${this.formatPercentageWithBar(r,n?.displayStyle,i)}`,bgColor:o,fgColor:s}}renderWeekly(e,t,n){let r=e.rate_limits?.seven_day;if(!r)return null;let i=Math.round(r.used_percentage),a=Ze(Qe(r.resets_at)),o=t.weeklyBg,s=t.weeklyFg;return i>=80?(o=t.contextCriticalBg,s=t.contextCriticalFg):i>=50&&(o=t.contextWarningBg,s=t.contextWarningFg),{text:`${this.symbols.weekly_cost} ${this.formatPercentageWithBar(i,n?.displayStyle,a)}`,bgColor:o,fgColor:s}}renderToday(e,t,n=`cost`){let r=this.config.budget?.today;return{text:`${this.symbols.today_cost} ${this.formatUsageWithBudget(e.cost,e.tokens,e.tokenBreakdown,n,r?.amount,r?.warningThreshold,r?.type)}`,bgColor:t.todayBg,fgColor:t.todayFg}}getDisplayDirectoryName(e,t){return e.startsWith(`~`)?e:t&&t!==e&&e.startsWith(t)?e.slice(t.length+1)||t.split(/[\\/]/).pop()||`project`:e}formatUsageDisplay(e,t,n,r){switch(r){case`cost`:return M(e);case`tokens`:return Ve(t);case`both`:return`${M(e)} (${Ve(t)})`;case`breakdown`:return He(n);default:return M(e)}}formatUsageWithBudget(e,t,n,r,i,a=80,o){let s=this.formatUsageDisplay(e,t,n,r);if(i&&i>0){let n=null;if(o===`tokens`&&t!==null?n=t:(o===`cost`&&e!==null||!o&&e!==null)&&(n=e),n!==null)return s+P(n,i,a).displayText}return s}renderVersion(e,t,n){return e.version?{text:`${this.symbols.version} v${e.version}`,bgColor:t.versionBg,fgColor:t.versionFg}:null}renderEnv(e,t){let n=globalThis.process?.env?.[t.variable];if(!n)return null;let r=t.prefix??t.variable;return{text:r?`${this.symbols.env} ${r}: ${n}`:`${this.symbols.env} ${n}`,bgColor:e.envBg,fgColor:e.envFg}}},nt=class{async getActiveBlockInfo(e){let t=e?.rate_limits?.five_hour;if(!t)return O(`Block segment: No native rate_limits data available`),null;let n=Qe(t.resets_at);return O(`Block segment: Using native rate_limits: ${t.used_percentage}%, resets in ${n}m`),{nativeUtilization:t.used_percentage,timeRemaining:n}}};function F(e){return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`}function rt(e){return e.inputTokens+e.outputTokens+e.cacheCreationInputTokens+e.cacheReadInputTokens}function it(e){return{timestamp:e.timestamp,usage:{inputTokens:e.message?.usage?.input_tokens||0,outputTokens:e.message?.usage?.output_tokens||0,cacheCreationInputTokens:e.message?.usage?.cache_creation_input_tokens||0,cacheReadInputTokens:e.message?.usage?.cache_read_input_tokens||0},costUSD:e.costUSD||0,model:e.message?.model||`unknown`}}var at=class{async loadTodayEntries(){let e=F(new Date);O(`Today segment: Loading entries for date ${e}`);let t=await A.getLatestTranscriptMtime(),n=await A.getUsageCache(`today`,t);if(n)return O(`Using shared today usage cache`),n;let r=new Date;r.setDate(r.getDate()-1),r.setHours(0,0,0,0);let i=(e,t)=>t>=r,a=new Date;a.setHours(0,0,0,0);let o=await Pe(e=>e.timestamp>=a,i,!0),s=[],c=0;for(let t of o)if(F(t.timestamp)===e&&t.message?.usage){let e=it(t);!e.costUSD&&t.raw&&(e.costUSD=await Fe.calculateCostForEntry(t.raw)),s.push(e),c++}return O(`Today segment: Found ${c} entries for today (${e})`),await A.setUsageCache(`today`,s,t),s}async getTodayEntries(){try{return await this.loadTodayEntries()}catch(e){return O(`Error loading today's entries:`,e),[]}}async getTodayInfo(){try{let e=await this.getTodayEntries();if(e.length===0)return{cost:null,tokens:null,tokenBreakdown:null,date:F(new Date)};let t=e.reduce((e,t)=>e+t.costUSD,0),n=e.reduce((e,t)=>e+rt(t.usage),0),r=e.reduce((e,t)=>({input:e.input+t.usage.inputTokens,output:e.output+t.usage.outputTokens,cacheCreation:e.cacheCreation+t.usage.cacheCreationInputTokens,cacheRead:e.cacheRead+t.usage.cacheReadInputTokens}),{input:0,output:0,cacheCreation:0,cacheRead:0});return O(`Today segment: $${t.toFixed(2)}, ${n} tokens total`),{cost:t,tokens:n,tokenBreakdown:r,date:F(new Date)}}catch(e){return O(`Error getting today's info:`,e),{cost:null,tokens:null,tokenBreakdown:null,date:F(new Date)}}}};const ot={right:``,left_rounded:``,right_rounded:``,branch:`⎇`,model:`✱`,git_clean:`✓`,git_dirty:`●`,git_conflicts:`⚠`,git_ahead:`↑`,git_behind:`↓`,git_worktree:`⧉`,git_tag:`⌂`,git_sha:`♯`,git_upstream:`→`,git_stash:`⧇`,git_time:`◷`,session_cost:`§`,block_cost:`◱`,today_cost:`☉`,context_time:`◔`,metrics_response:`⧖`,metrics_last_response:`Δ`,metrics_duration:`⧗`,metrics_messages:`◆`,metrics_lines_added:`+`,metrics_lines_removed:`-`,metrics_burn:`↗`,version:`◈`,bar_filled:`▪`,bar_empty:`▫`,env:`⚙`,session_id:`⌗`,weekly_cost:`◑`,dir:`📁`,activity:`⚡`},st={topLeft:`╭`,topRight:`╮`,bottomLeft:`╰`,bottomRight:`╯`,horizontal:`─`,vertical:`│`,teeLeft:`├`,teeRight:`┤`},ct={topLeft:`+`,topRight:`+`,bottomLeft:`+`,bottomRight:`+`,horizontal:`-`,vertical:`|`,teeLeft:`+`,teeRight:`+`},I={rounded:st,square:{topLeft:`┌`,topRight:`┐`,bottomLeft:`└`,bottomRight:`┘`,horizontal:`─`,vertical:`│`,teeLeft:`├`,teeRight:`┤`},heavy:{topLeft:`┏`,topRight:`┓`,bottomLeft:`┗`,bottomRight:`┛`,horizontal:`━`,vertical:`┃`,teeLeft:`┣`,teeRight:`┫`},double:{topLeft:`╔`,topRight:`╗`,bottomLeft:`╚`,bottomRight:`╝`,horizontal:`═`,vertical:`║`,teeLeft:`╠`,teeRight:`╣`},dashed:{topLeft:`╭`,topRight:`╮`,bottomLeft:`╰`,bottomRight:`╯`,horizontal:`┄`,vertical:`┊`,teeLeft:`├`,teeRight:`┤`},"heavy-dashed":{topLeft:`┏`,topRight:`┓`,bottomLeft:`┗`,bottomRight:`┛`,horizontal:`┅`,vertical:`┇`,teeLeft:`┣`,teeRight:`┫`},mixed:{topLeft:`┍`,topRight:`┑`,bottomLeft:`┕`,bottomRight:`┙`,horizontal:`━`,vertical:`│`,teeLeft:`┝`,teeRight:`┥`},ascii:ct,invisible:{topLeft:` `,topRight:` `,bottomLeft:` `,bottomRight:` `,horizontal:` `,vertical:` `,teeLeft:` `,teeRight:` `}},lt={right:``,left_rounded:``,right_rounded:``,branch:`~`,model:`M`,git_clean:`=`,git_dirty:`*`,git_conflicts:`!`,git_ahead:`^`,git_behind:`v`,git_worktree:`W`,git_tag:`T`,git_sha:`#`,git_upstream:`>>`,git_stash:`S`,git_time:`@`,session_cost:`S`,block_cost:`B`,today_cost:`D`,context_time:`C`,metrics_response:`R`,metrics_last_response:`L`,metrics_duration:`T`,metrics_messages:`#`,metrics_lines_added:`+`,metrics_lines_removed:`-`,metrics_burn:`~/h`,version:`V`,bar_filled:`=`,bar_empty:`-`,env:`$`,session_id:`#`,weekly_cost:`W`,dir:`D`,activity:`A`},ut=RegExp(`\x1B\\[[0-9;]*m`,`g`),dt=RegExp(`(\x1B\\[[0-9;]*m)`);function ft(e){return e.replace(ut,``)}function L(e){return ft(e).length}const pt=/^[a-zA-Z0-9/]+$/;function mt(){if(process.platform===`win32`)return null;let e=process.pid.toString();for(let t=0;t<10;t++)try{let t=i(`ps -o ppid=,tty= -p ${e}`,{encoding:`utf8`,stdio:[`pipe`,`pipe`,`ignore`]}).trim().split(/\s+/),n=t[0],r=t[1];if(r&&r!==`?`&&r!==`??`&&pt.test(r))return r;if(!n||n===`1`||n===`0`)break;e=n}catch{break}return null}function ht(){try{let e=i(`mode con`,{encoding:`utf8`,stdio:[`pipe`,`pipe`,`ignore`],windowsHide:!0}).match(/Columns:\s*(\d+)/i);if(e?.[1]){let t=parseInt(e[1],10);if(!isNaN(t)&&t>0)return t}}catch{}return null}function gt(){let e=mt();if(e)try{let t=i(`stty size < /dev/${e}`,{encoding:`utf8`,stdio:[`pipe`,`pipe`,`ignore`],shell:`/bin/sh`}).trim().split(` `)[1];if(t){let e=parseInt(t,10);if(!isNaN(e)&&e>0)return e}}catch{}try{let e=i(`tput cols 2>/dev/null`,{encoding:`utf8`,stdio:[`pipe`,`pipe`,`ignore`]}).trim(),t=parseInt(e,10);if(!isNaN(t)&&t>0)return t}catch{}return null}function _t(){let e=e=>Math.max(1,e-45),t=process.env.COLUMNS;if(t){let n=parseInt(t,10);if(!isNaN(n)&&n>0)return e(n)}if(process.stdout.columns&&process.stdout.columns>0)return e(process.stdout.columns);if(process.platform===`win32`){let t=ht();if(t)return e(t)}let n=gt();return n?e(n):null}function vt(){return process.platform===`win32`?ht():gt()}function R(e,t,n){return t?`${t}${e}${n}`:e}function z(e,t){let n=L(e);return n>=t?e:e+` `.repeat(t-n)}function yt(e,t){let n=L(e);return n>=t?e:` `.repeat(t-n)+e}function bt(e,t){let n=L(e);if(n>=t)return e;let r=t-n,i=Math.floor(r/2),a=r-i;return` `.repeat(i)+e+` `.repeat(a)}function B(e,t){if(ft(e).length<=t)return e;let n=0,r=``,i=e.split(dt);for(let e of i){if(e.startsWith(`\x1B`)){r+=e;continue}for(let i of e){if(n>=t-1)return r+=`…\x1B[0m`,r;r+=i,n++}}return r}function V(e,t,n){let r=n-2,i=z(B(t,r),r);return e.vertical+` `+i+` `+e.vertical}function H(e,t){return e.teeLeft+e.horizontal.repeat(t)+e.teeRight}function xt(e,t,n,r){if(!n&&!r)return e.bottomLeft+e.horizontal.repeat(t)+e.bottomRight;let i=n?` ${n} `:``,a=r?` ${r} `:``,o=L(i),s=L(a);if(o+s>t){let e=Math.max(0,t-s);if(o>e&&(i=B(i,e),o=L(i)),o+s>t){let e=Math.max(0,t-o);a=B(a,e),s=L(a)}}let c=t-o-s;return e.bottomLeft+i+e.horizontal.repeat(Math.max(0,c))+a+e.bottomRight}function St(e,t){if(e.length===0)return``;if(e.length===1)return e[0]??``;let n=e.map(e=>L(e)),r=t-n.reduce((e,t)=>e+t,0),i=Math.max(2,Math.floor(r/(e.length-1))),a=Array.from({length:e.length});a[e.length-1]=n[e.length-1]??0;for(let t=e.length-2;t>=0;t--)a[t]=(a[t+1]??0)+(n[t]??0);let o=e[0]??``,s=n[0]??0;for(let r=1;r<e.length;r++){let c=t-s-(a[r]??0)-(e.length-1-r)*2,l=Math.max(2,Math.min(i,c));o+=` `.repeat(l)+(e[r]??``),s+=l+(n[r]??0)}return o}function U(e,t,n){if(!t)return e;if(!e)return t;let r=L(e),i=L(t),a=n-r-i;return a<2?`${e} ${t}`:e+` `.repeat(a)+t}function W(e,t,n){let r=Ke(t.hookData.model?.display_name||`Claude`).toLowerCase();return e.replace(/\{([^}]+)\}/g,(e,t)=>{if(n){let e=n[t];if(e!==void 0)return e}return t===`model`?r:``})}function Ct(e,t,n,r,i){let a=r?.left??`{model}`,o=r?.right,s=W(a,e,i),c=s?` ${s} `:``,l=L(c);if(!o){let e=n-l;return t.topLeft+c+t.horizontal.repeat(Math.max(0,e))+t.topRight}let u=W(o,e,i),d=u?` ${u} `:``,f=L(d),p=c,m=l,h=d,g=f;if(m+g>n){let e=Math.max(0,n-g);if(m>e&&(p=B(p,e),m=L(p)),m+g>n){let e=Math.max(0,n-m);h=B(h,e),g=L(h)}}let _=n-m-g;if(_<2){let e=n-m;return t.topLeft+p+t.horizontal.repeat(Math.max(0,e))+t.topRight}return t.topLeft+p+t.horizontal.repeat(_)+h+t.topRight}function G(e,t,n,r=60,i=80){return e>=i?n.contextCriticalFg:e>=r?n.contextWarningFg:t}function K(e,t,n,r,i){t=Math.max(5,t);let a=Math.max(0,Math.min(t,Math.round(e/100*t))),o=t-a;return R(n.bar_filled.repeat(a)+n.bar_empty.repeat(o),i,r)}function wt(e,t){if(!e.contextInfo)return{icon:``,label:`context`,bar:``,pct:``,tokens:``};let n=e.contextInfo.usablePercentage,r=N(e.contextInfo.totalTokens),i=N(e.contextInfo.maxTokens);return{icon:t.context_time,label:`context`,bar:` `,pct:`${n}%`,tokens:`${r}/${i}`}}function Tt(e,t,n,r,i,a){if(!e.contextInfo)return``;let o=e.contextInfo.usablePercentage;return K(o,t,n,r,G(o,a?.[`context.bar`]??a?.context??i.contextFg,i))}function Et(e,t,n,r,i,a,o){if(!e.blockInfo)return``;let s=e.blockInfo.nativeUtilization,c=a.budget?.block?.warningThreshold??80;return K(s,t,n,r,G(s,o?.[`block.bar`]??o?.block??i.blockFg,i,50,c))}function Dt(e,t,n,r,i,a){let o=e.hookData.rate_limits?.seven_day;if(!o)return``;let s=o.used_percentage;return K(s,t,n,r,G(s,a?.[`weekly.bar`]??a?.weekly??i.weeklyFg,i))}function Ot(e,t,n,r,i){if(!e.contextInfo)return null;let a=e.contextInfo.usablePercentage,o=` ${a}% ${N(e.contextInfo.totalTokens)}/${N(e.contextInfo.maxTokens)}`,s=Math.max(5,t-o.length),c=Math.max(0,Math.min(s,Math.round(a/100*s))),l=s-c,u=n.bar_filled.repeat(c)+n.bar_empty.repeat(l),d=G(a,i.contextFg,i);return R(`${u}${o}`,d,r)}function kt(e){return Ye(e.workspace?.current_dir||e.cwd||`/`)}function At(e,t,n,r,i){let a=[];e.blockInfo&&a.push(R(q(e.blockInfo,t,n),i.blockFg,r));let o=e.hookData.rate_limits?.seven_day;o&&a.push(R(J(o,t),i.weeklyFg,r)),e.usageInfo&&a.push(R(Lt(e.usageInfo,t,n),i.sessionFg,r)),e.todayInfo&&a.push(R(zt(e.todayInfo,t,n),i.todayFg,r));let s=jt(e,t);return s.length>0&&a.push(R(s.join(` · `),i.metricsFg,r)),a}function jt(e,t){let n=[];return e.metricsInfo&&(e.metricsInfo.sessionDuration!==null&&e.metricsInfo.sessionDuration>0&&n.push(`${t.metrics_duration} ${We(e.metricsInfo.sessionDuration)}`),e.metricsInfo.messageCount!==null&&e.metricsInfo.messageCount>0&&n.push(`${t.metrics_messages} ${e.metricsInfo.messageCount}`)),n}function Mt(e,t,n,r){let i=[],a=Gt(e,t);a&&i.push(R(a,r.gitFg,n));let o=qe(kt(e.hookData));return i.push(R(o,r.modeFg,n)),i}function Nt(e,t,n,r,i){let a=[];if(e.hookData.version&&a.push(R(`${t.version} v${e.hookData.version}`,i.versionFg,r)),e.tmuxSessionId&&a.push(R(`tmux:${e.tmuxSessionId}`,i.tmuxFg,r)),e.metricsInfo){let n=[];e.metricsInfo.responseTime!==null&&!isNaN(e.metricsInfo.responseTime)&&e.metricsInfo.responseTime>0&&n.push(`${t.metrics_response} ${Je(e.metricsInfo.responseTime)}`),e.metricsInfo.linesAdded!==null&&e.metricsInfo.linesAdded>0&&n.push(`${t.metrics_lines_added}${e.metricsInfo.linesAdded}`),e.metricsInfo.linesRemoved!==null&&e.metricsInfo.linesRemoved>0&&n.push(`${t.metrics_lines_removed}${e.metricsInfo.linesRemoved}`),n.length>0&&a.push(R(n.join(` · `),i.metricsFg,r))}let o=n.display.lines.map(e=>e.segments.env).find(e=>e?.enabled);if(o&&o.variable){let e=globalThis.process?.env?.[o.variable];if(e){let t=o.prefix??o.variable;a.push(R(t?`${t}:${e}`:e,i.envFg,r))}}return a}function Pt(e,t,n){let r=`${Math.round(e.nativeUtilization)}%`,i=Xe(e.timeRemaining);return{icon:t.block_cost,label:`block`,value:r,time:i,budget:``,bar:` `}}function q(e,t,n){let r=Pt(e,t,n),i=`${r.icon} ${r.value}`;return r.time&&(i+=` · ${r.time}`),r.budget&&(i+=r.budget),i}function Ft(e,t){let n=`${Math.round(e.used_percentage)}%`,r=Ze(Qe(e.resets_at));return{icon:t.weekly_cost,label:`weekly`,pct:n,time:r,bar:` `}}function J(e,t){let n=Ft(e,t),r=`${n.icon} ${n.pct}`;return n.time&&(r+=` · ${n.time}`),r}function It(e,t,n){let r=e.session.tokens,i=r!==null&&r>0?N(r):``,a=``,o=n.budget?.session;return o?.amount&&e.session.cost!==null&&(a=P(e.session.cost,o.amount,o.warningThreshold||80).displayText),{icon:t.session_cost,label:`session`,cost:M(e.session.cost),tokens:i,budget:a}}function Lt(e,t,n){let r=It(e,t,n),i=`${r.icon} ${r.cost}`;return r.tokens&&(i+=` · ${r.tokens}`),r.budget&&(i+=r.budget),i}function Rt(e,t,n){let r=``,i=n.budget?.today;return i?.amount&&e.cost!==null&&(r=P(e.cost,i.amount,i.warningThreshold||80).displayText),{icon:t.today_cost,cost:M(e.cost),label:`today`,budget:r}}function zt(e,t,n){let r=Rt(e,t,n),i=`${r.icon} ${r.cost} ${r.label}`;return r.budget&&(i+=r.budget),i}function Bt(e,t){let n={response:``,responseIcon:``,responseVal:``,lastResponse:``,lastResponseIcon:``,lastResponseVal:``,added:``,addedIcon:``,addedVal:``,removed:``,removedIcon:``,removedVal:``};if(!e.metricsInfo)return n;let r=e.metricsInfo.responseTime!==null&&!isNaN(e.metricsInfo.responseTime)&&e.metricsInfo.responseTime>0,i=r?Je(e.metricsInfo.responseTime):``,a=e.metricsInfo.lastResponseTime!==null&&!isNaN(e.metricsInfo.lastResponseTime)&&e.metricsInfo.lastResponseTime>0,o=a?Je(e.metricsInfo.lastResponseTime):``,s=e.metricsInfo.linesAdded!==null&&e.metricsInfo.linesAdded>0,c=s?`${e.metricsInfo.linesAdded}`:``,l=e.metricsInfo.linesRemoved!==null&&e.metricsInfo.linesRemoved>0,u=l?`${e.metricsInfo.linesRemoved}`:``;return{response:r?`${t.metrics_response} ${i}`:``,responseIcon:r?t.metrics_response:``,responseVal:i,lastResponse:a?`${t.metrics_last_response} ${o}`:`${t.metrics_last_response} --`,lastResponseIcon:t.metrics_last_response,lastResponseVal:a?o:`--`,added:s?`${t.metrics_lines_added}${c}`:``,addedIcon:s?t.metrics_lines_added:``,addedVal:c,removed:l?`${t.metrics_lines_removed}${u}`:``,removedIcon:l?t.metrics_lines_removed:``,removedVal:u}}function Vt(e,t){let n=Bt(e,t),r=[n.response,n.lastResponse,n.added,n.removed].filter(Boolean);return r.length>0?r.join(` · `):``}function Ht(e,t){let n={icon:``,duration:``,durationIcon:``,durationVal:``,messages:``,messagesIcon:``,messagesVal:``};if(!e.metricsInfo)return n;let r=e.metricsInfo.sessionDuration!==null&&e.metricsInfo.sessionDuration>0,i=r?We(e.metricsInfo.sessionDuration):``,a=e.metricsInfo.messageCount!==null&&e.metricsInfo.messageCount>0,o=a?`${e.metricsInfo.messageCount}`:``;return{icon:t.activity,duration:r?`${t.metrics_duration} ${i}`:``,durationIcon:r?t.metrics_duration:``,durationVal:i,messages:a?`${t.metrics_messages} ${o}`:``,messagesIcon:a?t.metrics_messages:``,messagesVal:o}}function Ut(e,t){let n=Ht(e,t),r=[n.duration,n.messages].filter(Boolean);return r.length>0?r.join(` · `):``}function Wt(e,t){if(!e.gitInfo)return{icon:``,headVal:``,branch:``,status:``,ahead:``,behind:``,working:``,head:``};let n;n=e.gitInfo.status===`conflicts`?t.git_conflicts:e.gitInfo.status===`dirty`?t.git_dirty:t.git_clean;let r=e.gitInfo.ahead>0?`${t.git_ahead}${e.gitInfo.ahead}`:``,i=e.gitInfo.behind>0?`${t.git_behind}${e.gitInfo.behind}`:``,a=[];e.gitInfo.staged&&e.gitInfo.staged>0&&a.push(`+${e.gitInfo.staged}`),e.gitInfo.unstaged&&e.gitInfo.unstaged>0&&a.push(`~${e.gitInfo.unstaged}`),e.gitInfo.untracked&&e.gitInfo.untracked>0&&a.push(`?${e.gitInfo.untracked}`);let o=a.length>0?`(${a.join(` `)})`:``,s=[t.branch,e.gitInfo.branch,n];r&&s.push(r),i&&s.push(i);let c=[e.gitInfo.branch,n];return r&&c.push(r),i&&c.push(i),{icon:t.branch,headVal:c.join(` `),branch:e.gitInfo.branch,status:n,ahead:r,behind:i,working:o,head:s.join(` `)}}function Gt(e,t){let n=Wt(e,t);if(!n.icon)return``;let r=`${n.icon} ${n.branch} ${n.status}`;return n.ahead&&(r+=` ${n.ahead}`),n.behind&&(r+=`${n.behind}`),n.working&&(r+=` ${n.working}`),r}function Kt(e,t,n){return{icon:n.dir,value:qt(e,t)}}function qt(e,t){let n=kt(e.hookData),r=t.display.lines.map(e=>e.segments.directory).find(e=>e?.enabled),i=r?.style??(r?.showBasename?`basename`:`fish`);if(i===`basename`){let e=n.includes(`/`)?`/`:`\\`;return n.split(e).pop()||n}return i===`full`?n:qe(n)}function Jt(e,t){return e.hookData.version?{icon:t.version,value:`v${e.hookData.version}`}:{icon:``,value:``}}function Yt(e,t){let n=Jt(e,t);return n.icon?`${n.icon} ${n.value}`:``}function Xt(e){return e.tmuxSessionId?{label:`tmux`,value:e.tmuxSessionId}:{label:``,value:``}}function Zt(e){let t=Xt(e);return t.label?`${t.label}:${t.value}`:``}function Qt(e){let t=e.display.lines.map(e=>e.segments.env).find(e=>e?.enabled);if(!t||!t.variable)return{prefix:``,value:``};let n=globalThis.process?.env?.[t.variable];return n?{prefix:(t.prefix??t.variable)||``,value:n}:{prefix:``,value:``}}function $t(e){let t=Qt(e);return t.value?t.prefix?`${t.prefix}:${t.value}`:t.value:``}function Y(e,t,n,r,i,a){for(let[o,s]of Object.entries(n)){let n=`${t}.${o}`,c=a?.[n]??a?.[t]??r;e[n]=s?R(s,c,i):``}}function en(e,t,n){let r=t.indexOf(`.`),i=r===-1?t:t.slice(0,r);return e.items.map(e=>{let t=e.match(/^\{(.+)\}$/);return t?n[`${i}.${t[1]}`]??``:e?R(e,``,``):``}).filter(Boolean)}function tn(e,t,n,r){if(e.length===0)return``;if(n===`between`&&r!==void 0&&e.length>1){let n=e.reduce((e,t)=>e+L(t),0),i=Math.max(t*(e.length-1),r-n),a=Math.floor(i/(e.length-1)),o=i%(e.length-1),s=e[0];for(let t=1;t<e.length;t++)s+=` `.repeat(a+(t<=o?1:0))+e[t];return s}return e.join(` `.repeat(t))}function nn(e,t){let{sym:n,config:r,reset:i,colors:a}=t,o=a.partFg,s=(e,t)=>e?R(e,t,i):``,c={},l=Ke(e.hookData.model?.display_name||`Claude`).toLowerCase(),u=o?.model??a.modelFg;if(c.model=s(`${n.model} ${l}`,u),Y(c,`model`,{icon:n.model,value:l},a.modelFg,i,o),c.context=Ot(e,t.contentWidth,n,i,a)??``,Y(c,`context`,wt(e,n),e.contextInfo?G(e.contextInfo.usablePercentage,a.contextFg,a):a.contextFg,i,o),e.blockInfo){let t=o?.block??a.blockFg;c.block=s(q(e.blockInfo,n,r),t),Y(c,`block`,Pt(e.blockInfo,n,r),a.blockFg,i,o)}else c.block=``;if(e.usageInfo){let t=o?.session??a.sessionFg;c.session=s(Lt(e.usageInfo,n,r),t),Y(c,`session`,It(e.usageInfo,n,r),a.sessionFg,i,o)}else c.session=``;if(e.todayInfo){let t=o?.today??a.todayFg;c.today=s(zt(e.todayInfo,n,r),t),Y(c,`today`,Rt(e.todayInfo,n,r),a.todayFg,i,o)}else c.today=``;let d=e.hookData.rate_limits?.seven_day;if(d){let e=o?.weekly??a.weeklyFg;c.weekly=s(J(d,n),e),Y(c,`weekly`,Ft(d,n),a.weeklyFg,i,o)}else c.weekly=``;let f=o?.git??a.gitFg;c.git=s(Gt(e,n),f),Y(c,`git`,Wt(e,n),a.gitFg,i,o);let p=o?.dir??a.modeFg;c.dir=s(qt(e,r),p),Y(c,`dir`,Kt(e,r,n),a.modeFg,i,o);let m=o?.version??a.versionFg;c.version=s(Yt(e,n),m),Y(c,`version`,Jt(e,n),a.versionFg,i,o);let h=o?.tmux??a.tmuxFg;c.tmux=s(Zt(e),h),Y(c,`tmux`,Xt(e),a.tmuxFg,i,o);let g=o?.metrics??a.metricsFg;c.metrics=s(Vt(e,n),g),Y(c,`metrics`,Bt(e,n),a.metricsFg,i,o);let _=o?.activity??a.metricsFg;c.activity=s(Ut(e,n),_),Y(c,`activity`,Ht(e,n),a.metricsFg,i,o);let v=o?.env??a.envFg;c.env=s($t(r),v),Y(c,`env`,Qt(r),a.envFg,i,o);let y={},b=r.display.tui?.segments;if(b)for(let[e,t]of Object.entries(b)){let n=en(t,e,c),r=t.gap??1,i=t.justify??`start`;y[e]={items:n,gap:r,justify:i},c[e]=tn(n,r,i===`between`?`start`:i)}return{data:c,templates:y}}function rn(e){let{lines:t,data:n,box:r,contentWidth:i,innerWidth:a,sym:o,config:s,reset:c,colors:l}=e,u=At(n,o,s,c,l);u.length>0&&t.push(V(r,St(u,i),a))}function an(e){let{lines:t,data:n,box:r,contentWidth:i,innerWidth:a,sym:o,config:s,reset:c,colors:l}=e,u=Mt(n,o,c,l),d=Nt(n,o,s,c,l),f=u.join(` `),p=d.join(` · `);(f||p)&&(t.push(H(r,a)),t.push(V(r,U(f,p,i),a)))}function on(e){let{lines:t,data:n,box:r,contentWidth:i,innerWidth:a,sym:o,config:s,reset:c,colors:l}=e,u=[],d=[];n.blockInfo&&u.push(R(q(n.blockInfo,o,s),l.blockFg,c));let f=n.hookData.rate_limits?.seven_day;f&&u.push(R(J(f,o),l.weeklyFg,c)),n.todayInfo&&u.push(R(zt(n.todayInfo,o,s),l.todayFg,c)),n.usageInfo&&d.push(R(Lt(n.usageInfo,o,s),l.sessionFg,c));let p=jt(n,o);p.length>0&&d.push(R(p.join(` · `),l.metricsFg,c)),u.length>0&&t.push(V(r,St(u,i),a)),d.length>0&&t.push(V(r,U(d[0]??``,d[1]??``,i),a))}function sn(e){let{lines:t,data:n,box:r,contentWidth:i,innerWidth:a,sym:o,config:s,reset:c,colors:l}=e,u=Mt(n,o,c,l);u.length>0&&(t.push(H(r,a)),t.push(V(r,U(u[0]??``,u[1]??``,i),a)));let d=Nt(n,o,s,c,l);d.length>0&&(t.push(H(r,a)),t.push(V(r,d.join(` · `),a)))}function cn(e){let{lines:t,data:n,box:r,contentWidth:i,innerWidth:a,sym:o,config:s,reset:c,colors:l}=e;n.blockInfo&&t.push(V(r,R(q(n.blockInfo,o,s),l.blockFg,c),a));let u=n.hookData.rate_limits?.seven_day;u&&t.push(V(r,R(J(u,o),l.weeklyFg,c),a));let d=[];n.usageInfo&&d.push(R(`${o.session_cost} ${M(n.usageInfo.session.cost)}`,l.sessionFg,c)),n.todayInfo&&d.push(R(`${o.today_cost} ${M(n.todayInfo.cost)} today`,l.todayFg,c)),d.length>0&&t.push(V(r,U(d[0]??``,d[1]??``,i),a))}function ln(e){let{lines:t,data:n,box:r,contentWidth:i,innerWidth:a,sym:o,config:s,reset:c,colors:l}=e,u=Mt(n,o,c,l);u.length>0&&(t.push(H(r,a)),t.push(V(r,U(u[0]??``,u[1]??``,i),a)));let d=Nt(n,o,s,c,l);d.length>0&&t.push(V(r,d.join(` · `),a))}const un=new Set([`context`,`context.bar`,`block.bar`,`weekly.bar`]);function X(e){return e.length===1&&e[0].segment===`---`}function Z(e){if(!e.endsWith(`fr`))return 0;let t=parseInt(e.replace(`fr`,``),10);return!isNaN(t)&&t>0?t:0}function dn(e,t,n){let r=Math.floor(e/t.length),i=e-r*t.length;for(let e of t)n[e]=n[e]+r+(i>0?1:0),i>0&&i--}function fn(e,t,n,r){let i=0;for(let r=0;r<n;r++)i+=e[t+r]??0;return n>1&&(i+=(n-1)*r),i}function pn(e,t){let n;for(let r of e)t>=r.minWidth&&(!n||r.minWidth>n.minWidth)&&(n=r);if(n)return n;let r=e[0];for(let t=1;t<e.length;t++)e[t].minWidth<r.minWidth&&(r=e[t]);return r}function mn(e){let t=[];for(let n of e){let e=n.trim();if(e===`---`){t.push([{segment:`---`,spanStart:!0,spanSize:1}]);continue}let r=e.split(/\s+/),i=[],a=0;for(;a<r.length;){let e=r[a],t=1;for(;a+t<r.length&&r[a+t]===e;)t++;i.push({segment:e,spanStart:!0,spanSize:t});for(let n=1;n<t;n++)i.push({segment:e,spanStart:!1,spanSize:0});a+=t}t.push(i)}return t}function hn(e,t){let n=e.map(e=>X(e)?e:e.map(e=>e.segment===`.`||e.segment===`---`||t[e.segment]?e:{segment:`.`,spanStart:!0,spanSize:1})).map(e=>{if(X(e))return e;let t=e.map(e=>e.segment),n=[],r=0;for(;r<t.length;){let e=t[r],i=1;for(;r+i<t.length&&t[r+i]===e;)i++;n.push({segment:e,spanStart:!0,spanSize:i});for(let t=1;t<i;t++)n.push({segment:e,spanStart:!1,spanSize:0});r+=i}return n}).filter(e=>X(e)?!0:e.some(e=>e.segment!==`.`)),r=[];for(let e=0;e<n.length;e++){let t=n[e];if(!X(t)){r.push(t);continue}r.length!==0&&(X(r[r.length-1])||r.push(t))}return r.length>0&&X(r[r.length-1])&&r.pop(),r}function gn(e,t,n,r){let i=Array.from({length:e}).fill(0);for(let a of t)if(!X(a))for(let t=0;t<a.length;t++){let o=a[t];if(!o.spanStart||o.spanSize!==1||o.segment===`.`||t>=e||r?.has(o.segment))continue;let s=L(n[o.segment]||``);s>i[t]&&(i[t]=s)}return i}function _n(e,t,n,r,i,a){let o=e.length,s=gn(o,t,n,a),c=Array.from({length:o}).fill(0);for(let t=0;t<o;t++)e[t]===`auto`&&(c[t]=s[t]);for(let t=0;t<o;t++){let n=e[t];if(n===`auto`||n.endsWith(`fr`))continue;let r=parseInt(n,10);!isNaN(r)&&r>0&&(c[t]=r)}for(let t=0;t<o;t++)c[t]<1&&!e[t].endsWith(`fr`)&&(c[t]=1);let l=Math.max(0,o-1)*i,u=c.reduce((e,t)=>e+t,0),d=Math.max(0,r-u-l),f=0;for(let t of e)f+=Z(t);if(f>0){let t=d/f,n=[],r=0;for(let i=0;i<o;i++){let a=Z(e[i]);if(a>0){let e=Math.floor(t*a);c[i]=e,r+=e,n.push(i)}}let i=d-r;for(let e=0;i>0&&e<n.length;e++)c[n[e]]+=1,i--}return c}function vn(e,t,n,r,i,a){let o=e.length,s=gn(o,t,n,a),c=Array.from({length:o});for(let t=0;t<o;t++){let n=e[t];if(n!==`auto`&&!n.endsWith(`fr`)){let e=parseInt(n,10);c[t]=!isNaN(e)&&e>0?e:s[t]}else c[t]=s[t]}for(let i of t)if(!X(i))for(let t=0;t<i.length;t++){let a=i[t];if(!a.spanStart||a.spanSize<=1||a.segment===`.`)continue;let o=L(n[a.segment]||``),s=fn(c,t,a.spanSize,r);if(o>s){let n=o-s,r=[];for(let n=0;n<a.spanSize;n++)Z(e[t+n])>0&&r.push(t+n);if(r.length>0)dn(n,r,c);else{let e=[];for(let n=0;n<a.spanSize;n++)e.push(t+n);dn(n,e,c)}}}for(let e=0;e<o;e++)c[e]<1&&(c[e]=1);let l=0;for(let e=0;e<o;e++)l+=c[e];let u=Math.max(0,o-1)*r,d=2+Math.max(0,1-i)*2,f=o*i*2;return{panelWidth:l+u+d+f,colWidths:c}}function yn(e,t,n){switch(n){case`right`:return yt(e,t);case`center`:return bt(e,t);default:return z(e,t)}}function bn(e,t,n,r,i,a=0,o){let s=[],c=L(i),l=a;for(let i=0;i<e.length;i++){let a=e[i];if(!a.spanStart)continue;let u=fn(t,i,a.spanSize,c),d=i+a.spanSize-1,f=n[i]===`right`?o?.[i]??0:0,p=n[d]===`left`?o?.[d]??0:0,m=l-f,h=l-p,g=0;for(let e=i;e<d;e++){let t=n[e]===`left`?o?.[e]??0:0,r=n[e+1]===`right`?o?.[e+1]??0:0;g+=l-t+(l-r)}let _=u+g;if(a.segment===`.`)s.push(` `.repeat(_+m+h));else{let e=yn(B(r[a.segment]||``,_),_,n[i]||`left`),t=m>0?` `.repeat(m):``,o=h>0?` `.repeat(h):``;s.push(t+e+o)}}return s.join(i)}function xn(e,t,n){let r=n||e.horizontal;return e.teeLeft+r.repeat(t)+e.teeRight}function Sn(e,t,n,r,i){let a=e.minWidth??32,o=e.maxWidth??1/0,s=e.separator?.column??` `,c=e.separator?.divider,l=L(s),u=e.fitContent??!1,d=e.padding?.horizontal??0,f=e.widthReserve??45,p=Math.min(o,Math.max(a,r-f)),m=pn(e.breakpoints,p),h;h=u?o===1/0?r:Math.min(r,o):p;let g=hn(mn(m.areas),t);if(g.length===0)return{lines:[],panelWidth:h};let _,v=new Set(un);if(e.segments)for(let t of Object.keys(e.segments))v.add(t);if(u){let e=vn(m.columns,g,t,l,d,v);h=Math.min(o,Math.max(a,e.panelWidth)),_=e.colWidths;let n=h-e.panelWidth;if(n>0){let e=0;for(let t of m.columns)e+=Z(t);if(e>0){let t=[],r=0;for(let i=0;i<_.length;i++){let a=Z(m.columns[i]);if(a>0){let o=Math.floor(n*a/e);_[i]+=o,r+=o,t.push(i)}}let i=n-r;for(let e=0;i>0&&e<t.length;e++)_[t[e]]+=1,i--}}}else{let e=h-2-Math.max(0,1-d)*2-m.columns.length*d*2;_=_n(m.columns,g,t,e,l,v)}let y=h-2,b=Math.max(1,d)-d,x=b>0?` `.repeat(b):``,S=y-b*2,C=m.align||m.columns.map(()=>`left`),w=Array(m.columns.length).fill(0);if(d>0){let e=Array(m.columns.length).fill(0);for(let n of g)if(!X(n))for(let r=0;r<n.length;r++){let i=n[r];if(!i.spanStart||i.spanSize!==1||i.segment===`.`||v.has(i.segment))continue;let a=L(t[i.segment]||``);a>e[r]&&(e[r]=a)}let n=0;for(let t=0;t<m.columns.length;t++){if(Z(m.columns[t])>0||e[t]<=0)continue;let r=_[t]-e[t];r<=0||(w[t]=Math.min(d,r),n+=w[t])}if(n>0){let e=0;for(let t of m.columns)e+=Z(t);if(e>0){let t=[],r=0;for(let i=0;i<_.length;i++){let a=Z(m.columns[i]);if(a>0){let o=Math.floor(n*a/e);_[i]+=o,r+=o,t.push(i)}}let i=n-r;for(let e=0;i>0&&e<t.length;e++)_[t[e]]+=1,i--}}}function ee(e,t){let n=0;for(let r=e;r<e+t-1;r++){let e=C[r]===`left`?w[r]??0:0,t=C[r+1]===`right`?w[r+1]??0:0;n+=d-e+(d-t)}return n}if(i){let e=new Set;for(let n of g)if(!X(n))for(let r=0;r<n.length;r++){let a=n[r];if(!a.spanStart||a.segment===`.`||a.segment===`---`||e.has(a.segment))continue;e.add(a.segment);let o=fn(_,r,a.spanSize,l),s=ee(r,a.spanSize),c=i(a.segment,o+s);c!==void 0&&(t[a.segment]=c)}}let te=hn(g,t);if(te.length===0)return{lines:[],panelWidth:h};let T=[];for(let e of te)if(X(e))T.push(xn(n,y,c));else{let r=z(B(bn(e,_,C,t,s,d,w),S),S);T.push(n.vertical+x+r+x+n.vertical)}return{lines:T,panelWidth:h}}const Cn=`\x1B[?2026h`,wn=`\x1B[?2026l`,Tn=`\x1B[0m`;function En(e){return e>=80?`wide`:e>=55?`medium`:`narrow`}function Dn(e){return e&&e>0?Math.max(32,e):80}async function On(e,t,n,r,i,a){let o=(i.display.charset||`unicode`)===`text`?lt:ot,s=e.colors;if(i.display.tui){let r=i.display.tui,c=r.terminalWidth??a?.rawTerminalWidth??120,l;l=typeof r.box==`string`?I[r.box]??t:r.box?{...t,...r.box}:t;let u=Math.max(r.minWidth??32,c-(r.widthReserve??45))-2,d=u-2,f=nn(e,{lines:[],data:e,box:l,contentWidth:d,innerWidth:u,sym:o,config:i,reset:n,colors:s}),p=f.data,m=f.templates,h=s.partFg,g=Sn(r,p,l,c,(t,r)=>{if(t===`context`)return Ot(e,r,o,n,s)??``;if(t===`context.bar`)return Tt(e,r,o,n,s,h);if(t===`block.bar`)return Et(e,r,o,n,s,i,h);if(t===`weekly.bar`)return Dt(e,r,o,n,s,h);let a=m[t];if(a)return tn(a.items,a.gap,a.justify,r)}),_=g.panelWidth-2,v=r.footer?.left?W(r.footer.left,e,p):void 0,y=r.footer?.right?W(r.footer.right,e,p):void 0,b=[];return b.push(Ct(e,l,_,r.title,p)),b.push(...g.lines),b.push(xt(l,_,v,y)),Cn+b.map(e=>Tn+e).join(`
|
|
8
|
-
`)+wn}let c=Dn(r),l=c-2,u=l-2,d=En(c),f=[];f.push(Ct(e,t,l));let p=Ot(e,u,o,n,s);p&&f.push(V(t,p,l));let m={lines:f,data:e,box:t,contentWidth:u,innerWidth:l,sym:o,config:i,reset:n,colors:s};return d===`wide`?(rn(m),an(m)):d===`medium`?(on(m),sn(m)):(cn(m),ln(m)),f.push(xt(t,l)),Cn+f.map(e=>Tn+e).join(`
|
|
9
|
-
`)+
|
|
10
|
-
`)}
|
|
11
|
-
`)}async generateTuiStatusline(e){let t=this.getThemeColors(),n=_t(),r=e.workspace?.current_dir||e.cwd||`/`,i=(this.config.display.charset||`unicode`)===`text`?ct:st,a=this.config.display.lines.map(e=>e.segments.context).find(e=>e?.enabled)?.autocompactBuffer??33e3,o=await Promise.allSettled([this.usageProvider.getUsageInfo(e.session_id,e),this.blockProvider.getActiveBlockInfo(e),this.todayProvider.getTodayInfo(),this.contextProvider.getContextInfo(e,a),this.metricsProvider.getMetricsInfo(e.session_id,e),this.gitService.getGitInfo(r,{showSha:!1,showWorkingTree:!0,showOperation:!1,showTag:!1,showTimeSinceCommit:!1,showStashCount:!1,showUpstream:!1,showRepoName:!1},e.workspace?.project_dir),this.tmuxService.getSessionId()]),s=e=>e.status===`fulfilled`?e.value:null,[c,l,u,d,f,p,m]=[s(o[0]),s(o[1]),s(o[2]),s(o[3]),s(o[4]),s(o[5]),s(o[6])];return On({hookData:e,usageInfo:c,blockInfo:l,todayInfo:u,contextInfo:d,metricsInfo:f,gitInfo:p,tmuxSessionId:m,colors:t},i,t.reset,n,this.config,{rawTerminalWidth:vt()})}calculateSegmentWidth(e,t){let n=this.config.display.style===`capsule`,r=L(e.text),i=(this.config.display.padding??1)*2;return n?r+(2+i+(t?0:1)):r+(1+i)}buildLineFromSegments(e,t){let n=this.config.display.style===`capsule`,r=t.reset;for(let i=0;i<e.length;i++){let a=e[i];if(!a)continue;let o=i===0,s=i===e.length-1?null:e[i+1];n&&!o&&(r+=` `),r+=this.formatSegment(a.bgColor,a.fgColor,a.text,s?.bgColor,t)}return r}async renderLine(e,t,n,r,i,a,o){let s=this.getThemeColors(),c=t.workspace?.current_dir||t.cwd||`/`,l=Object.entries(e.segments).filter(([e,t])=>t?.enabled).map(([e,t])=>({type:e,config:t})),u=[];for(let e of l){let l=await this.renderSegment(e,t,n,r,i,a,o,s,c);l&&u.push({type:e.type,text:l.text,bgColor:l.bgColor,fgColor:l.fgColor})}return this.buildLineFromSegments(u,s)}async renderSegment(e,t,n,r,i,a,o,s,c){return e.type===`directory`?this.segmentRenderer.renderDirectory(t,s,e.config):e.type===`model`?this.segmentRenderer.renderModel(t,s):e.type===`git`?await this.renderGitSegment(e.config,t,s,c):e.type===`session`?this.renderSessionSegment(e.config,n,s):e.type===`sessionId`?t.session_id?this.segmentRenderer.renderSessionId(t.session_id,s,e.config):null:e.type===`tmux`?await this.renderTmuxSegment(s):e.type===`context`?this.renderContextSegment(e.config,a,s):e.type===`metrics`?this.renderMetricsSegment(e.config,o,r,s):e.type===`block`?this.renderBlockSegment(e.config,r,s):e.type===`today`?this.renderTodaySegment(e.config,i,s):e.type===`version`?this.renderVersionSegment(e.config,t,s):e.type===`env`?this.segmentRenderer.renderEnv(s,e.config):e.type===`weekly`?this.segmentRenderer.renderWeekly(t,s,e.config):null}async renderGitSegment(e,t,n,r){if(!this.needsSegmentInfo(`git`))return null;let i=await this.gitService.getGitInfo(r,{showSha:e?.showSha,showWorkingTree:e?.showWorkingTree,showOperation:e?.showOperation,showTag:e?.showTag,showTimeSinceCommit:e?.showTimeSinceCommit,showStashCount:e?.showStashCount,showUpstream:e?.showUpstream,showRepoName:e?.showRepoName},t.workspace?.project_dir);return i?this.segmentRenderer.renderGit(i,n,e):null}renderSessionSegment(e,t,n){return t?this.segmentRenderer.renderSession(t,n,e):null}async renderTmuxSegment(e){if(!this.needsSegmentInfo(`tmux`))return null;let t=await this.tmuxService.getSessionId();return this.segmentRenderer.renderTmux(t,e)}renderContextSegment(e,t,n){return this.needsSegmentInfo(`context`)?this.segmentRenderer.renderContext(t,n,e):null}renderMetricsSegment(e,t,n,r){return this.segmentRenderer.renderMetrics(t,r,e)}renderBlockSegment(e,t,n){return t?this.segmentRenderer.renderBlock(t,n,e):null}renderTodaySegment(e,t,n){if(!t)return null;let r=e?.type||`cost`;return this.segmentRenderer.renderToday(t,n,r)}renderVersionSegment(e,t,n){return this.segmentRenderer.renderVersion(t,n,e)}initializeSymbols(){let e=this.config.display.style,t=this.config.display.charset||`unicode`,n=e===`minimal`,r=e===`capsule`,i=t===`text`?lt:ot;return{right:n?``:r?i.right_rounded:i.right,left:r?i.left_rounded:``,branch:i.branch,model:i.model,git_clean:i.git_clean,git_dirty:i.git_dirty,git_conflicts:i.git_conflicts,git_ahead:i.git_ahead,git_behind:i.git_behind,git_worktree:i.git_worktree,git_tag:i.git_tag,git_sha:i.git_sha,git_upstream:i.git_upstream,git_stash:i.git_stash,git_time:i.git_time,session_cost:i.session_cost,block_cost:i.block_cost,today_cost:i.today_cost,context_time:i.context_time,metrics_response:i.metrics_response,metrics_last_response:i.metrics_last_response,metrics_duration:i.metrics_duration,metrics_messages:i.metrics_messages,metrics_lines_added:i.metrics_lines_added,metrics_lines_removed:i.metrics_lines_removed,metrics_burn:i.metrics_burn,version:i.version,bar_filled:i.bar_filled,bar_empty:i.bar_empty,env:i.env,session_id:i.session_id,weekly_cost:i.weekly_cost}}getThemeColors(){let e=this.config.theme,t,n=this.config.display.colorCompatibility||`auto`,r=n===`auto`?T():n;if(e===`custom`){if(t=this.config.colors?.custom,!t)throw Error(`Custom theme selected but no colors provided in configuration`)}else t=D(e,r),t||=(console.warn(`Built-in theme '${e}' not found, falling back to 'dark' theme`),D(`dark`,r));let i=(e,t)=>r===`none`?``:r===`ansi`?ee(e,t):r===`ansi256`?w(e,t):S(e,t),a=D(`dark`,r),o=this.config.display.style===`tui`,s=e===`light`?`#f0f0f0`:`#1e1e1e`,c=e=>{let n=a[e],r=t[e],c={fg:r?.fg||n.fg,bg:r?.bg||n.bg},l=c.fg;return o&&te(l,s)<60&&(l=c.bg),{bg:i(c.bg,!0),fg:i(l,!1)}},l=c(`directory`),u=c(`git`),d=c(`model`),f=c(`session`),p=c(`block`),m=c(`today`),h=c(`tmux`),g=c(`context`),_=c(`contextWarning`),v=c(`contextCritical`),y=c(`metrics`),b=c(`version`),x=c(`env`),C=c(`weekly`);return{reset:r===`none`?``:`\x1B[0m`,modeBg:l.bg,modeFg:l.fg,gitBg:u.bg,gitFg:u.fg,modelBg:d.bg,modelFg:d.fg,sessionBg:f.bg,sessionFg:f.fg,blockBg:p.bg,blockFg:p.fg,todayBg:m.bg,todayFg:m.fg,tmuxBg:h.bg,tmuxFg:h.fg,contextBg:g.bg,contextFg:g.fg,contextWarningBg:_.bg,contextWarningFg:_.fg,contextCriticalBg:v.bg,contextCriticalFg:v.fg,metricsBg:y.bg,metricsFg:y.fg,versionBg:b.bg,versionFg:b.fg,envBg:x.bg,envFg:x.fg,weeklyBg:C.bg,weeklyFg:C.fg,partFg:e===`custom`?this.resolvePartColors(i):{}}}resolvePartColors(e){let t=this.config.colors?.custom;if(!t)return{};let n={};for(let r of Object.keys(t)){let i=t[r];i?.fg&&(n[r]=e(i.fg,!1))}return n}getSegmentBgColor(e,t){switch(e){case`directory`:return t.modeBg;case`git`:return t.gitBg;case`model`:return t.modelBg;case`session`:case`sessionId`:return t.sessionBg;case`block`:return t.blockBg;case`today`:return t.todayBg;case`tmux`:return t.tmuxBg;case`context`:return t.contextBg;case`metrics`:return t.metricsBg;case`version`:return t.versionBg;case`env`:return t.envBg;case`weekly`:return t.weeklyBg;default:return t.modeBg}}formatSegment(e,t,n,r,i){let a=this.config.display.style===`capsule`,o=` `.repeat(this.config.display.padding??1);if(a){let r=this.config.display.colorCompatibility||`auto`,a=C(e,(r===`auto`?T():r)===`ansi`);return`${`${a}${this.symbols.left}${i.reset}`}${`${e}${t}${o}${n}${o}${i.reset}`}${`${a}${this.symbols.right}${i.reset}`}`}let s=`${e}${t}${o}${n}${o}`,c=this.config.display.colorCompatibility||`auto`,l=(c===`auto`?T():c)===`ansi`;if(r){let t=C(e,l);s+=`${i.reset}${r}${t}${this.symbols.right}`}else s+=`${i.reset}${C(e,l)}${this.symbols.right}${i.reset}`;return s}};const An={theme:`dark`,display:{style:`minimal`,charset:`unicode`,colorCompatibility:`auto`,autoWrap:!0,padding:1,lines:[{segments:{directory:{enabled:!0,style:`basename`},git:{enabled:!0,showSha:!1,showWorkingTree:!1,showOperation:!1,showTag:!1,showTimeSinceCommit:!1,showStashCount:!1,showUpstream:!1,showRepoName:!1},model:{enabled:!0},session:{enabled:!0,type:`tokens`,costSource:`calculated`},today:{enabled:!0,type:`cost`},block:{enabled:!1,type:`cost`,burnType:`cost`,displayStyle:`text`},weekly:{enabled:!1,displayStyle:`text`},version:{enabled:!1},tmux:{enabled:!1},sessionId:{enabled:!1,showIdLabel:!0},context:{enabled:!0,showPercentageOnly:!1,displayStyle:`text`,autocompactBuffer:33e3},metrics:{enabled:!1,showResponseTime:!0,showLastResponseTime:!0,showDuration:!0,showMessageCount:!0,showLinesAdded:!0,showLinesRemoved:!0}}}]},budget:{session:{warningThreshold:80},today:{warningThreshold:80,amount:50},block:{warningThreshold:80,amount:15}},modelContextLimits:{default:2e5,sonnet:2e5,opus:2e5}},jn=new Set([`context`,`block`,`session`,`today`,`weekly`,`git`,`dir`,`model`,`version`,`tmux`,`metrics`,`activity`,`env`]),Mn={session:[`icon`,`label`,`cost`,`tokens`,`budget`],block:[`icon`,`label`,`value`,`time`,`budget`,`bar`],today:[`icon`,`cost`,`label`,`budget`],weekly:[`icon`,`label`,`pct`,`time`,`bar`],git:[`icon`,`headVal`,`branch`,`status`,`ahead`,`behind`,`working`,`head`],context:[`icon`,`label`,`bar`,`pct`,`tokens`],metrics:[`response`,`responseIcon`,`responseVal`,`lastResponse`,`lastResponseIcon`,`lastResponseVal`,`added`,`addedIcon`,`addedVal`,`removed`,`removedIcon`,`removedVal`],activity:[`icon`,`duration`,`durationIcon`,`durationVal`,`messages`,`messagesIcon`,`messagesVal`],model:[`icon`,`value`],version:[`icon`,`value`],tmux:[`label`,`value`],dir:[`icon`,`value`],env:[`prefix`,`value`]};function Nn(e){if(e===`.`||e===`---`||jn.has(e))return!0;let t=e.indexOf(`.`);if(t===-1)return!1;let n=e.slice(0,t),r=e.slice(t+1);if(!n||!r)return!1;let i=Mn[n];return i?i.includes(r):!1}function Pn(e){return[`light`,`dark`,`nord`,`tokyo-night`,`rose-pine`,`gruvbox`,`custom`].includes(e)}function Fn(e){return e===`minimal`||e===`powerline`||e===`capsule`||e===`tui`}function In(e){return e===`unicode`||e===`text`}function Q(e,t){for(let n=0;n<e.length;n++){let r=e[n];if(r===t&&n+1<e.length)return e[n+1];if(r?.startsWith(`${t}=`))return r.split(`=`)[1]}}function $(e,t){let n={...e};for(let e in t){let r=t[e];r!==void 0&&(typeof r==`object`&&r&&!Array.isArray(r)?n[e]=$(n[e]||{},r):n[e]=r)}return n}function Ln(e,t){return e?o.existsSync(e)?e:null:[...t?[l.join(t,`.claude-powerline.json`)]:[],l.join(process.cwd(),`.claude-powerline.json`),l.join(m.homedir(),`.claude`,`claude-powerline.json`),l.join(m.homedir(),`.config`,`claude-powerline`,`config.json`)].find(o.existsSync)||null}function Rn(e){try{let t=o.readFileSync(e,`utf-8`);return JSON.parse(t)}catch(t){throw Error(`Failed to load config file ${e}: ${t instanceof Error?t.message:String(t)}`)}}function zn(){let e={},t={},n=process.env.CLAUDE_POWERLINE_THEME;n&&Pn(n)&&(e.theme=n);let r=process.env.CLAUDE_POWERLINE_STYLE;return r&&(Fn(r)?t.style=r:(console.warn(`Invalid display style '${r}' from environment variable, falling back to 'minimal'`),t.style=`minimal`)),Object.keys(t).length>0&&(e.display=t),e}function Bn(){return process.env.CLAUDE_POWERLINE_CONFIG}function Vn(e){let t={},n={},r=Q(e,`--theme`);r&&Pn(r)&&(t.theme=r);let i=Q(e,`--style`);i&&(Fn(i)?n.style=i:(console.warn(`Invalid display style '${i}' from CLI argument, falling back to 'minimal'`),n.style=`minimal`));let a=Q(e,`--charset`);return a&&(In(a)?n.charset=a:(console.warn(`Invalid charset '${a}' from CLI argument, falling back to 'unicode'`),n.charset=`unicode`)),Object.keys(n).length>0&&(t.display=n),t}function Hn(e){if(typeof e.box==`string`&&!I[e.box]){let t=Object.keys(I).join(`, `);return`unknown box preset "${e.box}" (valid: ${t})`}if(!e.breakpoints||!Array.isArray(e.breakpoints)||e.breakpoints.length===0)return`grid config must have at least one breakpoint`;let t=new Set;for(let n=0;n<e.breakpoints.length;n++){let r=e.breakpoints[n],i=`breakpoint[${n}]`;if(typeof r.minWidth!=`number`||r.minWidth<0)return`${i}: minWidth must be a non-negative number`;if(t.has(r.minWidth))return`${i}: duplicate minWidth ${r.minWidth} (each breakpoint must have a unique minWidth)`;if(t.add(r.minWidth),!r.areas||!Array.isArray(r.areas)||r.areas.length===0)return`${i}: areas must be a non-empty array of strings`;if(!r.columns||!Array.isArray(r.columns)||r.columns.length===0)return`${i}: columns must be a non-empty array`;let a=r.columns.length;for(let e of r.columns){if(typeof e!=`string`)return`${i}: column definition must be a string`;if(!/^(\d+fr|\d+|auto)$/.test(e))return`${i}: invalid column definition "${e}" (use "auto", "Nfr", or a fixed integer)`}if(r.align!==void 0){if(!Array.isArray(r.align))return`${i}: align must be an array`;if(r.align.length!==a)return`${i}: align length (${r.align.length}) must match columns length (${a})`;for(let e of r.align)if(e!==`left`&&e!==`center`&&e!==`right`)return`${i}: invalid align value "${e}"`}let o=new Set;for(let t=0;t<r.areas.length;t++){let n=r.areas[t];if(n.trim()===`---`)continue;let s=n.trim().split(/\s+/);if(s.length!==a)return`${i}: row "${n}" has ${s.length} cells but expected ${a} columns`;let c=e.segments?new Set(Object.keys(e.segments)):new Set,l=``,u=``;for(let e of s){if(e!==`.`){if(!Nn(e)&&!c.has(e))return`${i}: unknown segment name "${e}"`;if(e!==u&&o.has(e))return`${i}: segment "${e}" appears on multiple rows`}e!==l&&(u=e),l=e}let d=new Map;for(let e=0;e<s.length;e++){let t=s[e];if(t===`.`||t===`---`)continue;let r=d.get(t);if(r!==void 0&&r!==e-1)return`${i}: segment "${t}" has non-contiguous span in row "${n}"`;d.set(t,e)}for(let e of s)e!==`.`&&e!==`---`&&o.add(e)}}if(e.segments)for(let[t,n]of Object.entries(e.segments)){if(!n.items||!Array.isArray(n.items))return`segments["${t}"]: items must be an array`;if(n.justify!==void 0&&n.justify!==`start`&&n.justify!==`between`)return`segments["${t}"]: invalid justify value "${n.justify}" (use "start" or "between")`}return null}function Un(e=process.argv,t){let n=JSON.parse(JSON.stringify(An)),r=Q(e,`--config`)||Bn(),i=Ln(r?.startsWith(`~`)?r.replace(`~`,m.homedir()):r,t);if(i)try{let e=Rn(i);n=$(n,e)}catch(e){console.warn(`Warning: ${e instanceof Error?e.message:String(e)}`)}n.display?.style&&!Fn(n.display.style)&&(console.warn(`Invalid display style '${n.display.style}' in config file, falling back to 'minimal'`),n.display.style=`minimal`),n.display?.charset&&!In(n.display.charset)&&(console.warn(`Invalid charset '${n.display.charset}' in config file, falling back to 'unicode'`),n.display.charset=`unicode`),n.theme&&!Pn(n.theme)&&(console.warn(`Invalid theme '${n.theme}' in config file, falling back to 'dark'`),n.theme=`dark`);let a=zn();n=$(n,a);let o=Vn(e);if(n=$(n,o),n.display?.tui){let e=Hn(n.display.tui);e&&(process.stderr.write(`Warning: invalid grid config: ${e}. Falling back to hardcoded layout.\n`),delete n.display.tui)}return n}const Wn=Un;function Gn(){console.log(`
|
|
2
|
+
import e from"node:process";import{json as t}from"node:stream/consumers";import n from"node:tty";import{exec as r,execSync as i}from"node:child_process";import{promisify as a}from"node:util";import o,{createReadStream as s,existsSync as c}from"node:fs";import l,{dirname as u,join as d}from"node:path";import{get as f}from"node:https";import{URL as p}from"node:url";import m,{homedir as h}from"node:os";import{createHash as g}from"node:crypto";import{setTimeout as _}from"node:timers/promises";import{readFile as v,readdir as y,stat as b}from"node:fs/promises";import{createInterface as x}from"node:readline";function S(e,t){if(t&&(e.toLowerCase()===`transparent`||e.toLowerCase()===`none`))return`\x1B[49m`;let n=parseInt(e.slice(1,3),16),r=parseInt(e.slice(3,5),16),i=parseInt(e.slice(5,7),16);return`\x1b[${t?`48`:`38`};2;${n};${r};${i}m`}function C(e,t=!1){if(!e||e===``)return``;let n=e.match(/48;2;(\d+);(\d+);(\d+)/);if(n)return`\x1b[38;2;${n[1]};${n[2]};${n[3]}m`;if(t)return`\x1B[37m`;if(e.includes(`\x1B[`)&&e.includes(`m`)){let t=e.match(/\[(\d+)m/);if(t&&t[1]){let e=parseInt(t[1],10);if(e>=40&&e<=47||e>=100&&e<=107)return`\x1b[${e-10}m`}}return e.replace(`48`,`38`)}function w(e,t){if(t&&(e.toLowerCase()===`transparent`||e.toLowerCase()===`none`))return`\x1B[49m`;let n=((e,t,n)=>e===t&&t===n?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(n/255*5))(parseInt(e.slice(1,3),16),parseInt(e.slice(3,5),16),parseInt(e.slice(5,7),16));return`\x1b[${t?`48`:`38`};5;${n}m`}function ee(e,t){if(t&&(e.toLowerCase()===`transparent`||e.toLowerCase()===`none`))return`\x1B[49m`;if(t)return``;let n=parseInt(e.slice(1,3),16),r=parseInt(e.slice(3,5),16),i=parseInt(e.slice(5,7),16);return r>n&&r>i&&r>120?`\x1B[32m`:n>r&&n>i&&n>120?`\x1B[31m`:i>n&&i>r&&i>120?`\x1B[34m`:(n+r+i)/3>150?`\x1B[37m`:`\x1B[90m`}function T(e,t){let n=parseInt(e.slice(1,3),16),r=parseInt(e.slice(3,5),16),i=parseInt(e.slice(5,7),16),a=parseInt(t.slice(1,3),16),o=parseInt(t.slice(3,5),16),s=parseInt(t.slice(5,7),16);return Math.sqrt((n-a)**2+(r-o)**2+(i-s)**2)}function E(){let{env:t}=e,r=!0;t.NO_COLOR&&t.NO_COLOR!==``&&(r=!1);let i=t.FORCE_COLOR;if(i&&i!==``)return i===`false`||i===`0`?`none`:i===`true`||i===`1`?`ansi`:i===`2`?`ansi256`:i===`3`?`truecolor`:`ansi`;if(!r||t.TERM===`dumb`)return`none`;if(t.CI)return[`GITHUB_ACTIONS`,`GITEA_ACTIONS`,`CIRCLECI`].some(e=>e in t)?`truecolor`:`ansi`;if(t.COLORTERM===`truecolor`||[`xterm-kitty`,`xterm-ghostty`,`wezterm`,`alacritty`,`foot`,`contour`].includes(t.TERM||``))return`truecolor`;if(t.TERM_PROGRAM)switch(t.TERM_PROGRAM){case`iTerm.app`:return`truecolor`;case`Apple_Terminal`:return`ansi256`;case`vscode`:return`truecolor`;case`Tabby`:return`truecolor`}if(/-256(color)?$/i.test(t.TERM||``))return`ansi256`;if(/-truecolor$/i.test(t.TERM||``))return`truecolor`;if(/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(t.TERM||``)||t.COLORTERM)return`ansi`;if(n?.WriteStream?.prototype?.hasColors)try{if(!n.WriteStream.prototype.hasColors())return`none`;let e=n.WriteStream.prototype.hasColors(256);return n.WriteStream.prototype.hasColors(16777216)?`truecolor`:e?`ansi256`:`ansi`}catch{}return`ansi`}const D={directory:{bg:`#8b4513`,fg:`#ffffff`},git:{bg:`#404040`,fg:`#ffffff`},model:{bg:`#2d2d2d`,fg:`#ffffff`},session:{bg:`#202020`,fg:`#00ffff`},block:{bg:`#2a2a2a`,fg:`#87ceeb`},today:{bg:`#1a1a1a`,fg:`#98fb98`},tmux:{bg:`#2f4f2f`,fg:`#90ee90`},context:{bg:`#4a5568`,fg:`#cbd5e0`},contextWarning:{bg:`#92400e`,fg:`#fbbf24`},contextCritical:{bg:`#991b1b`,fg:`#fca5a5`},metrics:{bg:`#374151`,fg:`#d1d5db`},version:{bg:`#3a3a4a`,fg:`#b8b8d0`},env:{bg:`#2d2d3d`,fg:`#d0a0d0`},weekly:{bg:`#2a2a3a`,fg:`#a0c4e8`},agent:{bg:`#2a2a4a`,fg:`#b0a8e0`},thinking:{bg:`#2a2a3a`,fg:`#c792ea`},cacheTimer:{bg:`#1f3a1f`,fg:`#90ee90`}},O={directory:{bg:`#af5f00`,fg:`#ffffff`},git:{bg:`#444444`,fg:`#ffffff`},model:{bg:`#3a3a3a`,fg:`#ffffff`},session:{bg:`#262626`,fg:`#00ffff`},block:{bg:`#303030`,fg:`#87ceeb`},today:{bg:`#1c1c1c`,fg:`#87ff87`},tmux:{bg:`#444444`,fg:`#87ff87`},context:{bg:`#585858`,fg:`#d0d0d0`},contextWarning:{bg:`#af5f00`,fg:`#ffaf00`},contextCritical:{bg:`#870000`,fg:`#ff8787`},metrics:{bg:`#4e4e4e`,fg:`#d0d0d0`},version:{bg:`#444444`,fg:`#d7afff`},env:{bg:`#3a3a3a`,fg:`#d787d7`},weekly:{bg:`#303030`,fg:`#87afd7`},agent:{bg:`#3a3a5f`,fg:`#afafd7`},thinking:{bg:`#2a2a3a`,fg:`#d787ff`},cacheTimer:{bg:`#1c2e1c`,fg:`#87ff87`}},k={directory:{bg:`#d75f00`,fg:`#ffffff`},git:{bg:`#585858`,fg:`#ffffff`},model:{bg:`#444444`,fg:`#ffffff`},session:{bg:`#303030`,fg:`#00ffff`},block:{bg:`#3a3a3a`,fg:`#5fafff`},today:{bg:`#262626`,fg:`#00ff00`},tmux:{bg:`#585858`,fg:`#00ff00`},context:{bg:`#808080`,fg:`#ffffff`},contextWarning:{bg:`#d75f00`,fg:`#ffff00`},contextCritical:{bg:`#af0000`,fg:`#ff0000`},metrics:{bg:`#666666`,fg:`#ffffff`},version:{bg:`#585858`,fg:`#af87ff`},env:{bg:`#444444`,fg:`#ff87ff`},weekly:{bg:`#3a3a3a`,fg:`#5fafff`},agent:{bg:`#444444`,fg:`#af87ff`},thinking:{bg:`#444444`,fg:`#ff87ff`},cacheTimer:{bg:`#2f4f2f`,fg:`#00ff00`}},te={directory:{bg:`#ff6b47`,fg:`#ffffff`},git:{bg:`#4fb3d9`,fg:`#ffffff`},model:{bg:`#87ceeb`,fg:`#000000`},session:{bg:`#da70d6`,fg:`#ffffff`},block:{bg:`#6366f1`,fg:`#ffffff`},today:{bg:`#10b981`,fg:`#ffffff`},tmux:{bg:`#32cd32`,fg:`#ffffff`},context:{bg:`#718096`,fg:`#ffffff`},contextWarning:{bg:`#d97706`,fg:`#ffffff`},contextCritical:{bg:`#dc2626`,fg:`#ffffff`},metrics:{bg:`#6b7280`,fg:`#ffffff`},version:{bg:`#8b7dd8`,fg:`#ffffff`},env:{bg:`#d45dbf`,fg:`#ffffff`},weekly:{bg:`#4f46e5`,fg:`#ffffff`},agent:{bg:`#7c3aed`,fg:`#ffffff`},thinking:{bg:`#7c3aed`,fg:`#ffffff`},cacheTimer:{bg:`#059669`,fg:`#ffffff`}},ne={directory:{bg:`#ff5f5f`,fg:`#ffffff`},git:{bg:`#5fafff`,fg:`#ffffff`},model:{bg:`#87d7ff`,fg:`#000000`},session:{bg:`#ff5fff`,fg:`#ffffff`},block:{bg:`#5f5fff`,fg:`#ffffff`},today:{bg:`#00d787`,fg:`#ffffff`},tmux:{bg:`#00ff5f`,fg:`#ffffff`},context:{bg:`#808080`,fg:`#ffffff`},contextWarning:{bg:`#d78700`,fg:`#ffffff`},contextCritical:{bg:`#d70000`,fg:`#ffffff`},metrics:{bg:`#767676`,fg:`#ffffff`},version:{bg:`#af87ff`,fg:`#ffffff`},env:{bg:`#d787af`,fg:`#ffffff`},weekly:{bg:`#5f5fff`,fg:`#ffffff`},agent:{bg:`#8787d7`,fg:`#ffffff`},thinking:{bg:`#8700d7`,fg:`#ffffff`},cacheTimer:{bg:`#00875f`,fg:`#ffffff`}},re={directory:{bg:`#ff5f5f`,fg:`#ffffff`},git:{bg:`#5fafff`,fg:`#ffffff`},model:{bg:`#87d7ff`,fg:`#000000`},session:{bg:`#ff5fff`,fg:`#ffffff`},block:{bg:`#5f5fff`,fg:`#ffffff`},today:{bg:`#00d787`,fg:`#ffffff`},tmux:{bg:`#00ff5f`,fg:`#ffffff`},context:{bg:`#808080`,fg:`#ffffff`},contextWarning:{bg:`#d78700`,fg:`#ffffff`},contextCritical:{bg:`#d70000`,fg:`#ffffff`},metrics:{bg:`#767676`,fg:`#ffffff`},version:{bg:`#af87ff`,fg:`#ffffff`},env:{bg:`#d787af`,fg:`#ffffff`},weekly:{bg:`#5f5fff`,fg:`#ffffff`},agent:{bg:`#5f5fff`,fg:`#ffffff`},thinking:{bg:`#8700d7`,fg:`#ffffff`},cacheTimer:{bg:`#00875f`,fg:`#ffffff`}},ie={directory:{bg:`#434c5e`,fg:`#d8dee9`},git:{bg:`#3b4252`,fg:`#a3be8c`},model:{bg:`#4c566a`,fg:`#81a1c1`},session:{bg:`#2e3440`,fg:`#88c0d0`},block:{bg:`#3b4252`,fg:`#81a1c1`},today:{bg:`#2e3440`,fg:`#8fbcbb`},tmux:{bg:`#2e3440`,fg:`#8fbcbb`},context:{bg:`#5e81ac`,fg:`#eceff4`},contextWarning:{bg:`#d08770`,fg:`#2e3440`},contextCritical:{bg:`#bf616a`,fg:`#eceff4`},metrics:{bg:`#b48ead`,fg:`#2e3440`},version:{bg:`#434c5e`,fg:`#88c0d0`},env:{bg:`#3b4252`,fg:`#b48ead`},weekly:{bg:`#3b4252`,fg:`#88c0d0`},agent:{bg:`#4c566a`,fg:`#b48ead`},thinking:{bg:`#3b4252`,fg:`#b48ead`},cacheTimer:{bg:`#3b4252`,fg:`#a3be8c`}},ae={directory:{bg:`#5f87af`,fg:`#e4e4e4`},git:{bg:`#4e4e4e`,fg:`#87d787`},model:{bg:`#6c6c6c`,fg:`#87afd7`},session:{bg:`#3a3a3a`,fg:`#5fafaf`},block:{bg:`#4e4e4e`,fg:`#87afd7`},today:{bg:`#3a3a3a`,fg:`#5fd7d7`},tmux:{bg:`#3a3a3a`,fg:`#5fd7d7`},context:{bg:`#5f87d7`,fg:`#ffffff`},contextWarning:{bg:`#d7875f`,fg:`#3a3a3a`},contextCritical:{bg:`#d75f5f`,fg:`#ffffff`},metrics:{bg:`#d787af`,fg:`#3a3a3a`},version:{bg:`#5f87af`,fg:`#5fafaf`},env:{bg:`#4e4e4e`,fg:`#d787af`},weekly:{bg:`#4e4e4e`,fg:`#5fafaf`},agent:{bg:`#6c6c6c`,fg:`#d787af`},thinking:{bg:`#4e4e4e`,fg:`#d787af`},cacheTimer:{bg:`#4e4e4e`,fg:`#87af87`}},oe={directory:{bg:`#0087af`,fg:`#ffffff`},git:{bg:`#585858`,fg:`#87d700`},model:{bg:`#808080`,fg:`#87afff`},session:{bg:`#444444`,fg:`#00d7d7`},block:{bg:`#585858`,fg:`#87afff`},today:{bg:`#444444`,fg:`#00ffff`},tmux:{bg:`#444444`,fg:`#00ffff`},context:{bg:`#0087ff`,fg:`#ffffff`},contextWarning:{bg:`#d78700`,fg:`#000000`},contextCritical:{bg:`#d75f5f`,fg:`#ffffff`},metrics:{bg:`#ff87d7`,fg:`#444444`},version:{bg:`#0087af`,fg:`#00d7d7`},env:{bg:`#585858`,fg:`#ff87af`},weekly:{bg:`#585858`,fg:`#00d7d7`},agent:{bg:`#808080`,fg:`#ff87af`},thinking:{bg:`#585858`,fg:`#ff87d7`},cacheTimer:{bg:`#585858`,fg:`#87d787`}},se={directory:{bg:`#2f334d`,fg:`#82aaff`},git:{bg:`#1e2030`,fg:`#c3e88d`},model:{bg:`#191b29`,fg:`#fca7ea`},session:{bg:`#222436`,fg:`#86e1fc`},block:{bg:`#2d3748`,fg:`#7aa2f7`},today:{bg:`#1a202c`,fg:`#4fd6be`},tmux:{bg:`#191b29`,fg:`#4fd6be`},context:{bg:`#414868`,fg:`#c0caf5`},contextWarning:{bg:`#ff9e64`,fg:`#1a1b26`},contextCritical:{bg:`#f7768e`,fg:`#1a1b26`},metrics:{bg:`#3d59a1`,fg:`#c0caf5`},version:{bg:`#292e42`,fg:`#bb9af7`},env:{bg:`#24283b`,fg:`#fca7ea`},weekly:{bg:`#24283b`,fg:`#7dcfff`},agent:{bg:`#2d2b55`,fg:`#bb9af7`},thinking:{bg:`#2f2a3d`,fg:`#bb9af7`},cacheTimer:{bg:`#1f2e2a`,fg:`#9ece6a`}},ce={directory:{bg:`#444478`,fg:`#87afff`},git:{bg:`#262640`,fg:`#afff87`},model:{bg:`#1c1c30`,fg:`#ff87ff`},session:{bg:`#3a3a50`,fg:`#5fd7ff`},block:{bg:`#4e4e68`,fg:`#5f87ff`},today:{bg:`#262640`,fg:`#00d7af`},tmux:{bg:`#1c1c30`,fg:`#00d7af`},context:{bg:`#5f5f87`,fg:`#d7d7ff`},contextWarning:{bg:`#ffaf5f`,fg:`#262626`},contextCritical:{bg:`#ff5f87`,fg:`#262626`},metrics:{bg:`#5f5faf`,fg:`#d7d7ff`},version:{bg:`#444460`,fg:`#d787ff`},env:{bg:`#303050`,fg:`#ff87ff`},weekly:{bg:`#303050`,fg:`#5fd7ff`},agent:{bg:`#5f5f87`,fg:`#af87ff`},thinking:{bg:`#444460`,fg:`#d787ff`},cacheTimer:{bg:`#1c3a30`,fg:`#87d787`}},le={directory:{bg:`#5f5faf`,fg:`#87afff`},git:{bg:`#303050`,fg:`#87ff87`},model:{bg:`#262640`,fg:`#ff87ff`},session:{bg:`#444470`,fg:`#00d7ff`},block:{bg:`#666680`,fg:`#5f87ff`},today:{bg:`#303050`,fg:`#00d787`},tmux:{bg:`#262640`,fg:`#00d787`},context:{bg:`#808080`,fg:`#ffffff`},contextWarning:{bg:`#ffaf00`,fg:`#000000`},contextCritical:{bg:`#ff5f5f`,fg:`#000000`},metrics:{bg:`#8787d7`,fg:`#ffffff`},version:{bg:`#585870`,fg:`#d787ff`},env:{bg:`#444470`,fg:`#ff87ff`},weekly:{bg:`#444470`,fg:`#00d7ff`},agent:{bg:`#5f5faf`,fg:`#d787ff`},thinking:{bg:`#585870`,fg:`#d787ff`},cacheTimer:{bg:`#305050`,fg:`#00d787`}},ue={directory:{bg:`#26233a`,fg:`#c4a7e7`},git:{bg:`#1f1d2e`,fg:`#9ccfd8`},model:{bg:`#191724`,fg:`#ebbcba`},session:{bg:`#26233a`,fg:`#f6c177`},block:{bg:`#2a273f`,fg:`#eb6f92`},today:{bg:`#232136`,fg:`#9ccfd8`},tmux:{bg:`#26233a`,fg:`#908caa`},context:{bg:`#393552`,fg:`#e0def4`},contextWarning:{bg:`#f6c177`,fg:`#191724`},contextCritical:{bg:`#eb6f92`,fg:`#191724`},metrics:{bg:`#524f67`,fg:`#e0def4`},version:{bg:`#2a273f`,fg:`#c4a7e7`},env:{bg:`#21202e`,fg:`#eb6f92`},weekly:{bg:`#21202e`,fg:`#c4a7e7`},agent:{bg:`#2a273f`,fg:`#c4a7e7`},thinking:{bg:`#26223a`,fg:`#c4a7e7`},cacheTimer:{bg:`#1f2d2e`,fg:`#9ccfd8`}},de={directory:{bg:`#444444`,fg:`#d787d7`},git:{bg:`#262626`,fg:`#87d7d7`},model:{bg:`#1c1c1c`,fg:`#ffaf87`},session:{bg:`#444444`,fg:`#d7af5f`},block:{bg:`#4e4e4e`,fg:`#ff5f87`},today:{bg:`#3a3a3a`,fg:`#87d7d7`},tmux:{bg:`#444444`,fg:`#9e9e9e`},context:{bg:`#585858`,fg:`#e4e4e4`},contextWarning:{bg:`#d7af5f`,fg:`#1c1c1c`},contextCritical:{bg:`#ff5f87`,fg:`#1c1c1c`},metrics:{bg:`#767676`,fg:`#e4e4e4`},version:{bg:`#4e4e4e`,fg:`#d787d7`},env:{bg:`#303030`,fg:`#ff5f87`},weekly:{bg:`#303030`,fg:`#d787d7`},agent:{bg:`#4e4e4e`,fg:`#d787d7`},thinking:{bg:`#303030`,fg:`#d787d7`},cacheTimer:{bg:`#303030`,fg:`#87d7d7`}},fe={directory:{bg:`#585858`,fg:`#ff87ff`},git:{bg:`#303030`,fg:`#00d7d7`},model:{bg:`#262626`,fg:`#ffaf87`},session:{bg:`#585858`,fg:`#d7af00`},block:{bg:`#666666`,fg:`#ff5f87`},today:{bg:`#444444`,fg:`#00d7d7`},tmux:{bg:`#585858`,fg:`#bcbcbc`},context:{bg:`#808080`,fg:`#ffffff`},contextWarning:{bg:`#d7af00`,fg:`#000000`},contextCritical:{bg:`#ff5f5f`,fg:`#000000`},metrics:{bg:`#a8a8a8`,fg:`#000000`},version:{bg:`#666666`,fg:`#ff87ff`},env:{bg:`#444444`,fg:`#ff5f87`},weekly:{bg:`#444444`,fg:`#ff87ff`},agent:{bg:`#666666`,fg:`#ff87ff`},thinking:{bg:`#444444`,fg:`#ff87ff`},cacheTimer:{bg:`#444444`,fg:`#00d7d7`}},pe={directory:{bg:`#504945`,fg:`#ebdbb2`},git:{bg:`#3c3836`,fg:`#b8bb26`},model:{bg:`#665c54`,fg:`#83a598`},session:{bg:`#282828`,fg:`#8ec07c`},block:{bg:`#3c3836`,fg:`#83a598`},today:{bg:`#282828`,fg:`#fabd2f`},tmux:{bg:`#282828`,fg:`#fe8019`},context:{bg:`#458588`,fg:`#ebdbb2`},contextWarning:{bg:`#d79921`,fg:`#282828`},contextCritical:{bg:`#cc241d`,fg:`#ebdbb2`},metrics:{bg:`#d3869b`,fg:`#282828`},version:{bg:`#504945`,fg:`#8ec07c`},env:{bg:`#3c3836`,fg:`#d3869b`},weekly:{bg:`#3c3836`,fg:`#8ec07c`},agent:{bg:`#504945`,fg:`#d3869b`},thinking:{bg:`#3c3046`,fg:`#d3869b`},cacheTimer:{bg:`#3c3836`,fg:`#b8bb26`}},me={directory:{bg:`#585858`,fg:`#ffffaf`},git:{bg:`#444444`,fg:`#afaf00`},model:{bg:`#6c6c6c`,fg:`#87afaf`},session:{bg:`#303030`,fg:`#87af87`},block:{bg:`#444444`,fg:`#87afaf`},today:{bg:`#303030`,fg:`#ffaf00`},tmux:{bg:`#303030`,fg:`#ff8700`},context:{bg:`#5f8787`,fg:`#ffffaf`},contextWarning:{bg:`#d7af00`,fg:`#303030`},contextCritical:{bg:`#d70000`,fg:`#ffffaf`},metrics:{bg:`#d787af`,fg:`#303030`},version:{bg:`#585858`,fg:`#87af87`},env:{bg:`#444444`,fg:`#d787af`},weekly:{bg:`#444444`,fg:`#87af87`},agent:{bg:`#6c6c6c`,fg:`#d787af`},thinking:{bg:`#444444`,fg:`#d787af`},cacheTimer:{bg:`#444444`,fg:`#afaf00`}},he={directory:{bg:`#808080`,fg:`#ffff00`},git:{bg:`#585858`,fg:`#00ff00`},model:{bg:`#808080`,fg:`#00afff`},session:{bg:`#444444`,fg:`#00d787`},block:{bg:`#585858`,fg:`#00afff`},today:{bg:`#444444`,fg:`#ffaf00`},tmux:{bg:`#444444`,fg:`#ff8700`},context:{bg:`#008787`,fg:`#ffffff`},contextWarning:{bg:`#d7af00`,fg:`#000000`},contextCritical:{bg:`#d70000`,fg:`#ffffff`},metrics:{bg:`#ff87af`,fg:`#444444`},version:{bg:`#808080`,fg:`#00d787`},env:{bg:`#585858`,fg:`#ff87af`},weekly:{bg:`#585858`,fg:`#00d787`},agent:{bg:`#808080`,fg:`#ff87af`},thinking:{bg:`#808080`,fg:`#ff87af`},cacheTimer:{bg:`#585858`,fg:`#ffff00`}},ge={dark:D,"dark-ansi256":O,"dark-ansi":k,light:te,"light-ansi256":ne,"light-ansi":re,nord:ie,"nord-ansi256":ae,"nord-ansi":oe,"tokyo-night":se,"tokyo-night-ansi256":ce,"tokyo-night-ansi":le,"rose-pine":ue,"rose-pine-ansi256":de,"rose-pine-ansi":fe,gruvbox:pe,"gruvbox-ansi256":me,"gruvbox-ansi":he};function _e(e,t){let n=ge[e];if(!n)return null;if(t===`none`||t===`ansi`){let t=ge[`${e}-ansi`];if(t)return t}if(t===`ansi256`){let t=ge[`${e}-ansi256`];if(t)return t}return n}function A(e,...t){process.env.CLAUDE_POWERLINE_DEBUG&&console.error(`[DEBUG] ${e}`,...t)}const ve=a(r);var ye=class{isGitRepo(e){try{return o.existsSync(l.join(e,`.git`))}catch{return!1}}async execGitAsync(e,t){return ve(e,{...t,env:{...process.env,GIT_OPTIONAL_LOCKS:`0`}})}async findGitRoot(e){try{return(await this.execGitAsync(`git rev-parse --show-toplevel`,{cwd:e,encoding:`utf8`,timeout:2e3})).stdout.trim()||null}catch{return null}}async getGitInfo(e,t={},n){let r,i=this.isWorktree(e);if(i)r=e;else if(n&&this.isGitRepo(n))r=n;else if(this.isGitRepo(e))r=e;else{let t=await this.findGitRoot(e);if(!t)return null;r=t}try{let e=await this.getStatusWithBranchAsync(r),n=await this.getAheadBehindAsync(r),a={branch:e.branch||`detached`,status:e.status,ahead:n.ahead,behind:n.behind};t.showWorkingTree&&e.workingTree&&(a.staged=e.workingTree.staged,a.unstaged=e.workingTree.unstaged,a.untracked=e.workingTree.untracked,a.conflicts=e.workingTree.conflicts);let o={},s={};t.showSha&&(o.sha=this.getShaAsync(r)),t.showTag&&(o.tag=this.getNearestTagAsync(r)),t.showTimeSinceCommit&&(o.timeSinceCommit=this.getTimeSinceLastCommitAsync(r)),t.showStashCount&&(s.stashCount=this.getStashCountAsync(r)),t.showUpstream&&(s.upstream=this.getUpstreamAsync(r)),t.showRepoName&&(s.repoName=this.getRepoNameAsync(r));let c=new Map;for(let[e,t]of Object.entries(o))try{let n=await t;c.set(e,n)}catch{}return Object.keys(s).length>0&&(await Promise.allSettled(Object.entries(s).map(async([e,t])=>({key:e,value:await t})))).forEach(e=>{e.status===`fulfilled`&&c.set(e.value.key,e.value.value)}),t.showSha&&(a.sha=c.get(`sha`)||void 0),t.showOperation&&(a.operation=this.getOngoingOperation(r)||void 0),t.showTag&&(a.tag=c.get(`tag`)||void 0),t.showTimeSinceCommit&&(a.timeSinceCommit=c.get(`timeSinceCommit`)||void 0),t.showStashCount&&(a.stashCount=c.get(`stashCount`)||0),t.showUpstream&&(a.upstream=c.get(`upstream`)||void 0),t.showRepoName&&(a.repoName=c.get(`repoName`)||void 0,a.isWorktree=i),a}catch{return null}}async getShaAsync(e){try{return(await this.execGitAsync(`git rev-parse --short=7 HEAD`,{cwd:e,encoding:`utf8`,timeout:2e3})).stdout.trim()||null}catch{return null}}resolveGitDir(e){let t=l.join(e,`.git`);if(o.existsSync(t)&&o.statSync(t).isFile()){let n=o.readFileSync(t,`utf-8`).match(/^gitdir:\s*(.+)$/m);if(n?.[1])return l.resolve(e,n[1].trim())}return t}getOngoingOperation(e){try{let t=this.resolveGitDir(e);return o.existsSync(l.join(t,`MERGE_HEAD`))?`MERGE`:o.existsSync(l.join(t,`CHERRY_PICK_HEAD`))?`CHERRY-PICK`:o.existsSync(l.join(t,`REVERT_HEAD`))?`REVERT`:o.existsSync(l.join(t,`BISECT_LOG`))?`BISECT`:o.existsSync(l.join(t,`rebase-merge`))||o.existsSync(l.join(t,`rebase-apply`))?`REBASE`:null}catch{return null}}async getNearestTagAsync(e){try{return(await this.execGitAsync(`git describe --tags --abbrev=0`,{cwd:e,encoding:`utf8`,timeout:2e3})).stdout.trim()||null}catch{return null}}async getTimeSinceLastCommitAsync(e){try{let t=(await this.execGitAsync(`git log -1 --format=%ct`,{cwd:e,encoding:`utf8`,timeout:2e3})).stdout.trim();if(!t)return null;let n=parseInt(t)*1e3;return Math.floor((Date.now()-n)/1e3)}catch{return null}}async getStashCountAsync(e){try{let t=(await this.execGitAsync(`git stash list`,{cwd:e,encoding:`utf8`,timeout:2e3})).stdout.trim();return t?t.split(`
|
|
3
|
+
`).length:0}catch{return 0}}async getUpstreamAsync(e){try{return(await this.execGitAsync(`git rev-parse --abbrev-ref @{u}`,{cwd:e,encoding:`utf8`,timeout:2e3})).stdout.trim()||null}catch{return null}}async getRepoNameAsync(e){try{let t=(await this.execGitAsync(`git config --get remote.origin.url`,{cwd:e,encoding:`utf8`,timeout:2e3})).stdout.trim();return t&&t.match(/\/([^/]+?)(\.git)?$/)?.[1]||l.basename(e)}catch{return l.basename(e)}}isWorktree(e){try{let t=l.join(e,`.git`);return!!(o.existsSync(t)&&o.statSync(t).isFile())}catch{return!1}}async getStatusWithBranchAsync(e){try{A(`[GIT-EXEC] Running git status in ${e}`);let t=(await this.execGitAsync(`git status --porcelain -b`,{cwd:e,encoding:`utf8`,timeout:2e3})).stdout.split(`
|
|
4
|
+
`),n=null,r=`clean`,i=0,a=0,o=0,s=0;for(let e of t)if(e){if(e.startsWith(`## `)){let t=e.substring(3).split(`...`)[0];t&&t!==`HEAD (no branch)`&&(n=t);continue}if(e.length>=2){let t=e.charAt(0),n=e.charAt(1);if(t===`?`&&n===`?`){o++,r===`clean`&&(r=`dirty`);continue}let c=t+n;if([`DD`,`AU`,`UD`,`UA`,`DU`,`AA`,`UU`].includes(c)){s++,r=`conflicts`;continue}t!==` `&&t!==`?`&&(i++,r===`clean`&&(r=`dirty`)),n!==` `&&n!==`?`&&(a++,r===`clean`&&(r=`dirty`))}}return{branch:n||await this.getFallbackBranch(e),status:r,workingTree:{staged:i,unstaged:a,untracked:o,conflicts:s}}}catch(t){return A(`Git status with branch command failed in ${e}:`,t),{branch:await this.getFallbackBranch(e),status:`clean`}}}async getFallbackBranch(e){try{let t=(await this.execGitAsync(`git branch --show-current`,{cwd:e,encoding:`utf8`,timeout:2e3})).stdout.trim();if(t)return t}catch{try{let t=(await this.execGitAsync(`git symbolic-ref --short HEAD`,{cwd:e,encoding:`utf8`,timeout:2e3})).stdout.trim();if(t)return t}catch{return null}}return null}async getAheadBehindAsync(e){try{A(`[GIT-EXEC] Running git ahead/behind in ${e}`);let[t,n]=await Promise.all([this.execGitAsync(`git rev-list --count @{u}..HEAD`,{cwd:e,encoding:`utf8`,timeout:2e3}),this.execGitAsync(`git rev-list --count HEAD..@{u}`,{cwd:e,encoding:`utf8`,timeout:2e3})]);return{ahead:parseInt(t.stdout.trim())||0,behind:parseInt(n.stdout.trim())||0}}catch(t){return A(`Git ahead/behind command failed in ${e}:`,t),{ahead:0,behind:0}}}};const be=a(r);var xe=class{async getSessionId(){try{if(!process.env.TMUX_PANE)return A(`TMUX_PANE not set, not in tmux session`),null;A(`Getting tmux session ID, TMUX_PANE: ${process.env.TMUX_PANE}`);let e=(await be(`tmux display-message -p '#S'`,{encoding:`utf8`,timeout:1e3})).stdout.trim();return A(`Tmux session ID: ${e||`empty`}`),e||null}catch(e){return A(`Error getting tmux session ID:`,e),null}}isInTmux(){return!!process.env.TMUX_PANE}};function Se(e){let t=e.effort?.level;return typeof t==`string`&&t.trim()||null}function Ce(e){let t=e.thinking?.enabled;return typeof t==`boolean`?t:null}function we(){let e=[],t=process.env.CLAUDE_CONFIG_DIR;if(t&&t.split(`,`).forEach(t=>{let n=t.trim();c(n)&&e.push(n)}),e.length===0){let t=h(),n=d(t,`.config`,`claude`),r=d(t,`.claude`);c(n)&&e.push(n),c(r)&&e.push(r)}return e}async function Te(e){let t=[];for(let n of e){let e=d(n,`projects`);if(c(e))try{let n=await y(e,{withFileTypes:!0});for(let r of n)if(r.isDirectory()){let n=d(e,r.name);t.push(n)}}catch(t){A(`Failed to read projects directory ${e}:`,t)}}return t}async function Ee(e){let t=await Te(we());for(let n of t){let t=d(n,`${e}.jsonl`);if(c(t))return t}return null}async function De(e,t){let n=[],r=d(t,e,`subagents`);try{let t=(await y(r)).filter(e=>e.startsWith(`agent-`)&&e.endsWith(`.jsonl`));for(let i of t){let t=d(r,i);try{let r=(await v(t,`utf-8`)).split(`
|
|
5
|
+
`)[0];r&&JSON.parse(r).sessionId===e&&n.push(t)}catch{A(`Failed to check agent file ${t}`)}}}catch(e){A(`Failed to read subagents directory ${r}:`,e)}return n}async function Oe(e){try{return(await b(e)).mtime}catch{return null}}function ke(e){let t=e.message?.id||(typeof e.raw.message==`object`&&e.raw.message!==null&&`id`in e.raw.message?e.raw.message.id:void 0),n=`requestId`in e.raw?e.raw.requestId:void 0;return!t||!n?null:`${t}:${n}`}async function j(e){try{let t=(await b(e)).size,n;return t>1048576?(A(`Using streaming parser for large file ${e} (${Math.round(t/1024)}KB)`),n=await je(e)):n=await Ae(e),A(`Parsed ${n.length} entries from ${e}`),n}catch(t){return A(`Failed to read file ${e}:`,t),[]}}async function Ae(e){let t=(await v(e,`utf-8`)).trim().split(`
|
|
6
|
+
`).filter(e=>e.trim()),n=[];for(let e of t)try{let t=JSON.parse(e);if(!t.timestamp)continue;let r={timestamp:new Date(t.timestamp),message:t.message,costUSD:typeof t.costUSD==`number`?t.costUSD:void 0,isSidechain:t.isSidechain===!0,raw:t};n.push(r)}catch(e){A(`Failed to parse JSONL line: ${e}`);continue}return n}async function je(e){return new Promise((t,n)=>{let r=[],i=s(e,{encoding:`utf8`}),a=x({input:i,crlfDelay:1/0});a.on(`line`,e=>{let t=e.trim();if(t)try{let e=JSON.parse(t);if(!e.timestamp)return;let n={timestamp:new Date(e.timestamp),message:e.message,costUSD:typeof e.costUSD==`number`?e.costUSD:void 0,isSidechain:e.isSidechain===!0,raw:e};r.push(n)}catch(e){A(`Failed to parse JSONL line: ${e}`)}}),a.on(`close`,()=>{t(r)}),a.on(`error`,t=>{A(`Streaming parser error for ${e}:`,t),n(t)}),i.on(`error`,t=>{A(`File stream error for ${e}:`,t),n(t)})})}async function Me(e){try{let t=await Oe(e);return t?{filePath:e,mtime:t}:null}catch{return null}}async function Ne(e,t){try{let n=await y(e,{withFileTypes:!0}),r=n.filter(e=>!e.isDirectory()&&e.name.endsWith(`.jsonl`)).map(t=>Me(d(e,t.name))),i=n.filter(e=>e.isDirectory()).map(async t=>{let n=d(e,t.name,`subagents`);try{return(await y(n)).filter(e=>e.startsWith(`agent-`)&&e.endsWith(`.jsonl`)).map(e=>Me(d(n,e)))}catch{return[]}}),[a,o]=await Promise.all([Promise.all(r),Promise.all(i).then(e=>Promise.all(e.flat()))]);return[...a,...o].filter(e=>e!==null&&(!t||t(e.filePath,e.mtime)))}catch(t){return A(`Failed to read project directory ${e}:`,t),[]}}async function Pe(e,t,n=!1){let r=await Te(we()),i=new Set,a=r.map(e=>Ne(e,t)),o=(await Promise.all(a)).flat().filter(e=>e!==null);n&&o.sort((e,t)=>t.mtime.getTime()-e.mtime.getTime());let s=o.map(e=>e.filePath),c=[],l=s.map(async t=>(await j(t)).filter(t=>!e||e(t))),u=await Promise.all(l);for(let e of u)c.push(...e);c.sort((e,t)=>e.timestamp.getTime()-t.timestamp.getTime());let d=[];for(let e of c){let t=ke(e);t&&i.has(t)||(t&&i.add(t),d.push(e))}return d}var M=class{static CACHE_DIR=l.join(h(),`.claude`,`powerline`);static USAGE_CACHE_DIR=l.join(this.CACHE_DIR,`usage`);static LOCKS_DIR=l.join(this.CACHE_DIR,`locks`);static isLocked(e){let t=l.join(this.LOCKS_DIR,e);if(!o.existsSync(t))return!1;try{let n=o.readFileSync(t,`utf-8`),r=parseInt(n.trim(),10);if(isNaN(r))return A(`Invalid PID in lock file ${e}, removing stale lock`),o.unlinkSync(t),!1;try{return process.kill(r,0),!0}catch(n){return n.code===`ESRCH`?(A(`Removing stale lock file ${e} for dead process ${r}`),o.unlinkSync(t),!1):(A(`Error checking process ${r} for lock ${e}:`,n),!0)}}catch(t){return A(`Error reading lock file ${e}:`,t),!0}}static async acquireLock(e,t=5e3){await this.ensureCacheDirectories();let n=l.join(this.LOCKS_DIR,e),r=Date.now(),i=String(process.pid);for(;Date.now()-r<t;)try{return await o.promises.writeFile(n,i,{flag:`wx`}),A(`Lock acquired for ${e}`),!0}catch(e){if(e.code===`EEXIST`)await _(50);else throw e}return A(`Failed to acquire lock for ${e} within ${t}ms`),!1}static async releaseLock(e){let t=l.join(this.LOCKS_DIR,e);try{await o.promises.unlink(t),A(`Lock released for ${e}`)}catch(t){t.code!==`ENOENT`&&A(`Error releasing lock for ${e}:`,t)}}static async ensureCacheDirectories(){try{await Promise.all([o.promises.mkdir(this.CACHE_DIR,{recursive:!0}),o.promises.mkdir(this.USAGE_CACHE_DIR,{recursive:!0}),o.promises.mkdir(this.LOCKS_DIR,{recursive:!0})])}catch(e){A(`Failed to create cache directories:`,e)}}static createProjectHash(e){return g(`md5`).update(e).digest(`hex`).substring(0,8)}static async getUsageCache(e,t){await this.ensureCacheDirectories();let n=l.join(this.USAGE_CACHE_DIR,`${e}.json`),r=`${e}.usage.lock`;for(let i=0;i<3;i++){if(this.isLocked(r)){A(`Cache for ${e} is locked, waiting...`),await _(75);continue}try{let r=await o.promises.readFile(n,`utf-8`),i=JSON.parse(r);return!t||i.timestamp>=t?(A(`[CACHE-HIT] ${e} disk cache: found`),this.deserializeDates(i.data)):(A(`${e} cache outdated: cache=${i.timestamp}, latest=${t}`),null)}catch(t){if(t.code===`ENOENT`)return A(`No shared ${e} usage cache found`),null;A(`Attempt ${i+1} failed to read ${e} cache: ${t.message}. Retrying...`),await _(75)}}return A(`Failed to read ${e} cache after 3 attempts.`),null}static deserializeDates(e){return Array.isArray(e)?e.map(e=>({...e,timestamp:new Date(e.timestamp)})):e}static async setUsageCache(e,t,n){let r=`${e}.usage.lock`;if(!await this.acquireLock(r)){A(`Could not acquire lock to set usage cache for ${e}`);return}try{await this.ensureCacheDirectories();let r=l.join(this.USAGE_CACHE_DIR,`${e}.json`),i=JSON.stringify({data:t,timestamp:n||Date.now()});await o.promises.writeFile(r,i,`utf-8`),A(`[CACHE-SET] ${e} disk cache stored`)}catch(t){A(`Failed to save ${e} usage cache:`,t)}finally{await this.releaseLock(r)}}static async getLatestTranscriptMtime(){try{let e=await Te(we()),t=0;for(let n of e)try{let e=(await o.promises.readdir(n)).filter(e=>e.endsWith(`.jsonl`));for(let r of e){let e=await Oe(l.join(n,r));e&&e.getTime()>t&&(t=e.getTime())}}catch(e){A(`Failed to read project directory ${n}:`,e);continue}return t}catch(e){return A(`Failed to get latest transcript mtime:`,e),Date.now()}}};const N={"claude-haiku-4-5-20251001":{name:`Claude Haiku 4.5`,input:1,output:5,cache_write_5m:1.25,cache_write_1h:2,cache_read:.1},"claude-haiku-4-5":{name:`Claude Haiku 4.5`,input:1,output:5,cache_write_5m:1.25,cache_write_1h:2,cache_read:.1},"claude-opus-4-20250514":{name:`Claude Opus 4`,input:15,output:75,cache_write_5m:18.75,cache_write_1h:30,cache_read:1.5},"claude-opus-4-1":{name:`Claude Opus 4.1`,input:15,output:75,cache_write_5m:18.75,cache_write_1h:30,cache_read:1.5},"claude-opus-4-1-20250805":{name:`Claude Opus 4.1`,input:15,output:75,cache_write_5m:18.75,cache_write_1h:30,cache_read:1.5},"claude-sonnet-4-20250514":{name:`Claude Sonnet 4`,input:3,output:15,cache_write_5m:3.75,cache_write_1h:6,cache_read:.3},"claude-4-opus-20250514":{name:`Claude 4 Opus`,input:15,output:75,cache_write_5m:18.75,cache_write_1h:30,cache_read:1.5},"claude-4-sonnet-20250514":{name:`Claude 4 Sonnet`,input:3,output:15,cache_write_5m:3.75,cache_write_1h:6,cache_read:.3},"claude-sonnet-4-5":{name:`Claude Sonnet 4.5`,input:3,output:15,cache_write_5m:3.75,cache_write_1h:6,cache_read:.3},"claude-sonnet-4-5-20250929":{name:`Claude Sonnet 4.5`,input:3,output:15,cache_write_5m:3.75,cache_write_1h:6,cache_read:.3},"claude-opus-4-5":{name:`Claude Opus 4.5`,input:5,output:25,cache_write_5m:6.25,cache_write_1h:10,cache_read:.5},"claude-opus-4-5-20251101":{name:`Claude Opus 4.5`,input:5,output:25,cache_write_5m:6.25,cache_write_1h:10,cache_read:.5},"claude-opus-4-6":{name:`Claude Opus 4.6`,input:5,output:25,cache_write_5m:6.25,cache_write_1h:10,cache_read:.5},"claude-opus-4-6-20260205":{name:`Claude Opus 4.6`,input:5,output:25,cache_write_5m:6.25,cache_write_1h:10,cache_read:.5},"claude-sonnet-4-6":{name:`Claude Sonnet 4.6`,input:3,output:15,cache_write_5m:3.75,cache_write_1h:6,cache_read:.3}};var Fe=class{static executionCache=null;static modelPricingCache=new Map;static GITHUB_PRICING_URL=`https://raw.githubusercontent.com/Owloops/claude-powerline/main/pricing.json`;static async loadDiskCache(){let e=Date.now()-1440*60*1e3;return await M.getUsageCache(`pricing`,e)}static async saveDiskCache(e){await M.setUsageCache(`pricing`,e)}static async fetchPricingData(){return new Promise(e=>{let t=new p(this.GITHUB_PRICING_URL),n=f({hostname:t.hostname,path:t.pathname,headers:{"User-Agent":`claude-powerline`,"Cache-Control":`no-cache`},timeout:5e3},t=>{if(t.statusCode!==200){A(`HTTP ${t.statusCode}: ${t.statusMessage}`),e(null);return}let r=``,i=0;t.on(`data`,t=>{if(i+=t.length,i>1048576){A(`Response too large`),n.destroy(),e(null);return}r+=t}),t.on(`end`,()=>{try{let t=JSON.parse(r),n=t._meta,i={};for(let[e,n]of Object.entries(t))e!==`_meta`&&(i[e]=n);this.validatePricingData(i)?(A(`Fetched fresh pricing from GitHub for ${Object.keys(i).length} models`),A(`Pricing last updated: ${n?.updated||`unknown`}`),e(i)):(A(`Invalid pricing data structure`),e(null))}catch(t){A(`Failed to parse JSON:`,t),e(null)}}),t.on(`error`,t=>{A(`Response error:`,t),e(null)})});n.on(`error`,t=>{A(`Request error:`,t),e(null)}),n.on(`timeout`,()=>{A(`Request timeout`),n.destroy(),e(null)}),n.end()})}static async getCurrentPricing(){if(this.executionCache!==null)return A(`[CACHE-HIT] Pricing execution cache: ${Object.keys(this.executionCache).length} models`),this.executionCache;let e=await this.loadDiskCache();if(e)return A(`[CACHE-HIT] Pricing disk cache: ${Object.keys(e).length} models`),this.executionCache=e,A(`[CACHE-SET] Pricing execution cache stored: ${Object.keys(e).length} models`),e;let t=await this.fetchPricingData();return t?(await this.saveDiskCache(t),A(`[CACHE-SET] Pricing disk cache stored: ${Object.keys(t).length} models`),this.executionCache=t,A(`[CACHE-SET] Pricing execution cache stored: ${Object.keys(t).length} models`),t):(A(`[CACHE-FALLBACK] Using offline pricing data: ${Object.keys(N).length} models`),this.executionCache=N,A(`[CACHE-SET] Pricing execution cache stored: ${Object.keys(N).length} models`),N)}static validatePricingData(e){if(!e||typeof e!=`object`)return!1;for(let[,t]of Object.entries(e)){if(!t||typeof t!=`object`)return!1;let e=t;if(typeof e.input!=`number`||typeof e.output!=`number`||typeof e.cache_read!=`number`)return!1}return!0}static async getModelPricing(e){if(this.modelPricingCache.has(e))return A(`[CACHE-HIT] Model pricing cache: ${e}`),this.modelPricingCache.get(e);let t=await this.getCurrentPricing(),n;return n=t[e]?t[e]:this.fuzzyMatchModel(e,t),this.modelPricingCache.set(e,n),A(`[CACHE-SET] Model pricing cache: ${e}`),n}static fuzzyMatchModel(e,t){let n=e.toLowerCase();for(let[e,r]of Object.entries(t))if(e.toLowerCase()===n)return r;for(let{pattern:e,fallback:r}of[{pattern:[`opus-4-6`,`claude-opus-4-6`],fallback:`claude-opus-4-6-20260205`},{pattern:[`opus-4-5`,`claude-opus-4-5`],fallback:`claude-opus-4-5-20251101`},{pattern:[`opus-4-1`,`claude-opus-4-1`],fallback:`claude-opus-4-1-20250805`},{pattern:[`opus-4`,`claude-opus-4`],fallback:`claude-opus-4-20250514`},{pattern:[`sonnet-4-6`,`sonnet-4.6`,`claude-sonnet-4-6`],fallback:`claude-sonnet-4-6`},{pattern:[`sonnet-4.5`,`4-5-sonnet`,`sonnet-4-5`],fallback:`claude-sonnet-4-5-20250929`},{pattern:[`sonnet-4`,`claude-sonnet-4`],fallback:`claude-sonnet-4-20250514`},{pattern:[`haiku-4.5`,`4-5-haiku`,`haiku-4-5`],fallback:`claude-haiku-4-5-20251001`},{pattern:[`haiku`],fallback:`claude-haiku-4-5-20251001`},{pattern:[`opus`],fallback:`claude-opus-4-20250514`},{pattern:[`sonnet`],fallback:`claude-sonnet-4-5-20250929`}])if(e.some(e=>n.includes(e))&&t[r])return t[r];return t[`claude-sonnet-4-5-20250929`]||{name:`${e} (Unknown Model)`,input:3,cache_write_5m:3.75,cache_write_1h:6,cache_read:.3,output:15}}static async calculateCostForEntry(e){let t=e.message?.usage;if(!t)return 0;let n=this.extractModelId(e),r=await this.getModelPricing(n),i=t.input_tokens||0,a=t.output_tokens||0,o=t.cache_creation_input_tokens||0,s=t.cache_read_input_tokens||0,c=i/1e6*r.input,l=a/1e6*r.output,u=s/1e6*r.cache_read,d=o/1e6*r.cache_write_5m;return c+l+d+u}static extractModelId(e){if(e.model&&typeof e.model==`string`)return e.model;let t=e.message;if(t?.model){let e=t.model;if(typeof e==`string`)return e;let n=e;return(typeof n?.id==`string`?n.id:null)||`claude-sonnet-4-5-20250929`}return e.model_id&&typeof e.model_id==`string`?e.model_id:`claude-sonnet-4-5-20250929`}};function Ie(e){return{timestamp:e.timestamp.toISOString(),message:{usage:{input_tokens:e.message?.usage?.input_tokens||0,output_tokens:e.message?.usage?.output_tokens||0,cache_creation_input_tokens:e.message?.usage?.cache_creation_input_tokens,cache_read_input_tokens:e.message?.usage?.cache_read_input_tokens}},costUSD:e.costUSD}}var Le=class{async getSessionUsage(e){try{let t=await Ee(e);if(!t)return A(`No transcript found for session: ${e}`),null;A(`Found transcript at: ${t}`);let n=await j(t),r=await De(e,u(t));A(`Found ${r.length} agent transcripts for session`);for(let e of r){let t=await j(e);n.push(...t)}if(n.length===0)return{totalCost:0,entries:[]};let i=[],a=0;for(let e of n)if(e.message?.usage){let t=Ie(e);if(t.costUSD!==void 0)a+=t.costUSD;else{let n=await Fe.calculateCostForEntry(e.raw);t.costUSD=n,a+=n}i.push(t)}return A(`Parsed ${i.length} usage entries, total cost: $${a.toFixed(4)}`),{totalCost:a,entries:i}}catch(t){return A(`Error reading session usage for ${e}:`,t),null}}calculateTokenBreakdown(e){return e.reduce((e,t)=>({input:e.input+(t.message.usage.input_tokens||0),output:e.output+(t.message.usage.output_tokens||0),cacheCreation:e.cacheCreation+(t.message.usage.cache_creation_input_tokens||0),cacheRead:e.cacheRead+(t.message.usage.cache_read_input_tokens||0)}),{input:0,output:0,cacheCreation:0,cacheRead:0})}async getSessionInfo(e,t){let n=await this.getSessionUsage(e);if(!n||n.entries.length===0)return{cost:null,calculatedCost:null,officialCost:null,tokens:null,tokenBreakdown:null};let r=this.calculateTokenBreakdown(n.entries),i=r.input+r.output+r.cacheCreation+r.cacheRead,a=n.totalCost,o=t?.cost?.total_cost_usd??null;return{cost:a??o,calculatedCost:a,officialCost:o,tokens:i,tokenBreakdown:r}}},Re=class{sessionProvider=new Le;async getUsageInfo(e,t){try{return A(`Starting usage info retrieval for session: ${e}`),{session:await this.sessionProvider.getSessionInfo(e,t)}}catch(t){return A(`Error getting usage info for session ${e}:`,t),{session:{cost:null,calculatedCost:null,officialCost:null,tokens:null,tokenBreakdown:null}}}}},ze=class{thresholds={LOW:50,MEDIUM:80};config;constructor(e){this.config=e}getContextUsageThresholds(){return this.thresholds}getContextLimit(e){let t=this.config.modelContextLimits||{default:2e5};return t[this.getModelType(e)]||t.default||2e5}getModelType(e){let t=e.toLowerCase();return t.includes(`sonnet`)?`sonnet`:t.includes(`opus`)?`opus`:`default`}calculatePercentages(e,t,n=33e3){let r=Math.min(100,Math.max(0,Math.round(e/t*100))),i=Math.max(1,t-n),a=Math.min(100,Math.max(0,Math.round(e/i*100)));return{percentage:r,usablePercentage:a,contextLeftPercentage:Math.max(0,100-a),usableTokens:i}}calculateContextFromHookData(e,t=33e3){let n=e.context_window?.current_usage;if(!n)return A(`No current_usage in hook data, falling back to transcript parsing`),null;let r=e.context_window?.context_window_size||2e5,i=(n.input_tokens||0)+(n.cache_creation_input_tokens||0)+(n.cache_read_input_tokens||0);A(`Native current_usage: input=${n.input_tokens}, cache_create=${n.cache_creation_input_tokens}, cache_read=${n.cache_read_input_tokens}, total=${i} (limit: ${r})`);let a=e.context_window?.used_percentage,o=this.calculatePercentages(i,r,t);return a!=null&&(o.percentage=Math.round(a),A(`Using native used_percentage: ${a}%`)),{totalTokens:i,maxTokens:r,...o}}async calculateContextTokensFromTranscript(e,t,n=33e3){try{A(`Calculating context tokens from transcript: ${e}`);let r=await j(e);if(r.length===0)return A(`No entries in transcript`),null;let i=null;for(let e=r.length-1;e>=0;e--){let t=r[e];if(t&&t.message?.usage?.input_tokens&&t.isSidechain!==!0){i=t,A(`Context segment: Found most recent entry at ${t.timestamp.toISOString()}, stopping search`);break}}if(i?.message?.usage){let e=i.message.usage,r=(e.input_tokens||0)+(e.cache_read_input_tokens||0)+(e.cache_creation_input_tokens||0),a=t?this.getContextLimit(t):2e5;return A(`Most recent main chain context: ${r} tokens (limit: ${a})`),{totalTokens:r,maxTokens:a,...this.calculatePercentages(r,a,n)}}return A(`No main chain entries with usage data found`),null}catch(e){return A(`Error reading transcript: ${e instanceof Error?e.message:String(e)}`),null}}async getContextInfo(e,t=33e3){return this.calculateContextFromHookData(e,t)||this.calculateContextTokensFromTranscript(e.transcript_path,e.model?.id,t)}},Be=class{async loadTranscriptEntries(e){try{let t=await Ee(e);if(!t)return A(`No transcript found for session: ${e}`),[];A(`Loading transcript from: ${t}`);let n=(await v(t,`utf-8`)).trim().split(`
|
|
7
|
+
`).filter(e=>e.trim()),r=[];for(let e of n)try{let t=JSON.parse(e);if(t.isSidechain===!0)continue;r.push(t)}catch(e){A(`Failed to parse JSONL line: ${e}`);continue}return A(`Loaded ${r.length} transcript entries`),r}catch(t){return A(`Error loading transcript for ${e}:`,t),[]}}calculateMessageCount(e){return e.filter(e=>{let t=e.type||e.message?.role||e.message?.type,n=e.type===`user`&&e.message?.content?.[0]?.type===`tool_result`;return t===`user`&&!n}).length}calculateLastResponseTime(e){if(e.length===0)return null;let t=e.slice(-20),n=null,r=null;for(let e of t)if(e.timestamp)try{let t=new Date(e.timestamp),i=e.type||e.message?.role||e.message?.type,a=e.type===`user`&&e.message?.content?.[0]?.type===`tool_result`;if(i===`user`&&!a)n=t;else if(i===`assistant`&&n){let e=(t.getTime()-n.getTime())/1e3;e>.1&&e<300&&(r=e)}}catch{continue}return r}async getMetricsInfo(e,t){try{if(A(`Getting metrics from hook data for session: ${e}`),!t.cost)return A(`No cost data available in hook data`),{responseTime:null,lastResponseTime:null,sessionDuration:null,messageCount:null,linesAdded:null,linesRemoved:null};let n=await this.loadTranscriptEntries(e),r=this.calculateMessageCount(n),i=this.calculateLastResponseTime(n);return{responseTime:t.cost.total_api_duration_ms/1e3,lastResponseTime:i,sessionDuration:t.cost.total_duration_ms/1e3,messageCount:r,linesAdded:t.cost.total_lines_added,linesRemoved:t.cost.total_lines_removed}}catch(t){return A(`Error getting metrics from hook data for session ${e}:`,t),{responseTime:null,lastResponseTime:null,sessionDuration:null,messageCount:null,linesAdded:null,linesRemoved:null}}}},Ve=class{async getCacheTimerInfo(e){let t=e?.transcript_path;if(!t)return A(`CacheTimer: no transcript_path in hookData`),null;let n=await this.lastUserTimestamp(t)??await this.fileMtime(t);return n===null?null:{elapsedSeconds:Math.max(0,Math.floor((Date.now()-n)/1e3))}}async lastUserTimestamp(e){try{let t=(await v(e,`utf-8`)).split(`
|
|
8
|
+
`);for(let e=t.length-1;e>=0;e--){let n=t[e]?.trim();if(n)try{let e=JSON.parse(n);if((e.type||e.message?.role||e.message?.type)!==`user`||!e.timestamp)continue;let t=Date.parse(e.timestamp);if(Number.isNaN(t))continue;return t}catch{continue}}return null}catch(t){return A(`CacheTimer: readFile failed for ${e}: ${String(t)}`),null}}async fileMtime(e){try{let{mtime:t}=await b(e);return t.getTime()}catch(t){return A(`CacheTimer: stat failed for ${e}: ${String(t)}`),null}}};function P(e){return e===null?`$0.00`:e<.01?`<$0.01`:`$${e.toFixed(2)}`}function He(e){return e===null||e===0?`0 tokens`:e>=1e6?`${(e/1e6).toFixed(1)}M tokens`:e>=1e3?`${(e/1e3).toFixed(1)}K tokens`:`${e} tokens`}function Ue(e){if(!e)return`0 tokens`;let t=[];if(e.input>0&&t.push(`${F(e.input)} in`),e.output>0&&t.push(`${F(e.output)} out`),e.cacheCreation>0||e.cacheRead>0){let n=e.cacheCreation+e.cacheRead;t.push(`${F(n)} cached`)}return t.length>0?t.join(` + `):`0 tokens`}function We(e){return e<60?`${e}s`:e<3600?`${Math.floor(e/60)}m`:e<86400?`${Math.floor(e/3600)}h`:e<604800?`${Math.floor(e/86400)}d`:`${Math.floor(e/604800)}w`}function Ge(e){return e<60?`${e.toFixed(0)}s`:e<3600?`${(e/60).toFixed(0)}m`:e<86400?`${(e/3600).toFixed(1)}h`:`${(e/86400).toFixed(1)}d`}const Ke=/^(?:(?:global|apac|au|eu|us|us-east-\d|us-west-\d|eu-west-\d|eu-central-\d)\.)?(?:anthropic\.|azure_ai\/|bedrock\/|vertex_ai\/)?claude-(?:(?<family>opus|sonnet|haiku)-(?<newMajor>\d+)(?:-(?<newMinor>\d))?|(?<oldMajor>\d+)(?:-(?<oldMinor>\d))?-(?<oldFamily>opus|sonnet|haiku))(?:[-@]\d{8})?(?:-v\d+:\d+)?(?:-latest)?$/i;function qe(e){if(!e)return`Claude`;let t=e.trim().match(Ke);if(!t?.groups)return e;let{family:n,newMajor:r,newMinor:i,oldMajor:a,oldMinor:o,oldFamily:s}=t.groups,c=n||s,l=r||a,u=i||o;return c&&l?`${c.charAt(0).toUpperCase()+c.slice(1).toLowerCase()} ${u?`${l}.${u}`:l}`:e}function Je(e){let t=e.includes(`/`)?`/`:`\\`,n=e.split(t);return n.map((e,t)=>t===n.length-1||e===`~`||e===``?e:e.charAt(0)).join(t)}function Ye(e){return e<60?`${e.toFixed(1)}s`:`${(e/60).toFixed(1)}m`}function F(e){return He(e).replace(` tokens`,``)}function Xe(e,t){let n=t??globalThis.process?.env?.HOME??globalThis.process?.env?.USERPROFILE;return n&&e.startsWith(n)?e.replace(n,`~`):e}function Ze(e){let t=Math.floor(e/60),n=e%60;return t>0?`${t}h ${n}m left`:`${n}m left`}function Qe(e){if(e>=1440){let t=Math.floor(e/1440),n=Math.floor(e%1440/60);return n>0?`${t}d ${n}h`:`${t}d`}else if(e>=60){let t=Math.floor(e/60),n=e%60;return n>0?`${t}h ${n}m`:`${t}h`}return`${e}m`}function $e(e){return Math.round(Math.max(0,e*1e3-Date.now())/6e4)}function et(e){return e>=3600?`1h+`:e>=300?`${Math.floor(e/60)}m`:`${Math.floor(e/60)}:${Math.floor(e%60).toString().padStart(2,`0`)}`}function tt(e,t){return!t||t<=0||e<0?null:Math.min(100,e/t*100)}function nt(e,t,n=80){let r=tt(e,t);if(r===null)return{percentage:null,isWarning:!1,displayText:``};let i=`${r.toFixed(0)}%`,a=r>=n,o=``;return o=a?` !${i}`:r>=50?` +${i}`:` ${i}`,{percentage:r,isWarning:a,displayText:o}}function rt(e,t,n){return n===`tokens`?t:e}function I(e,t,n){if(!n?.amount||n.amount<=0)return{suppressAll:!1,showBase:!0,percentText:``,percentageOnly:!1};let r=n.showValue??!0,i=n.showPercentage??!0,a=rt(e,t,n.type);return a===null?{suppressAll:!1,showBase:!0,percentText:``,percentageOnly:!1}:!r&&!i?{suppressAll:!0,showBase:!1,percentText:``,percentageOnly:!1}:{suppressAll:!1,showBase:r,percentText:i?nt(a,n.amount,n.warningThreshold).displayText.trimStart():``,percentageOnly:!r}}function it(e,t){return t??e??!0}function at(e,t){for(let n of e.display.lines){let e=n.segments[t];if(e?.showIcon!==void 0)return e.showIcon}}function L(e,t){return it(e.display?.showIcons,at(e,t))}const ot={ball:{filled:`─`,empty:`─`,marker:`●`},blocks:{filled:`█`,empty:`░`},"blocks-line":{filled:`█`,empty:`─`},capped:{filled:`━`,empty:`┄`,cap:`╸`},dots:{filled:`●`,empty:`○`},filled:{filled:`■`,empty:`□`},geometric:{filled:`▰`,empty:`▱`},line:{filled:`━`,empty:`┄`},squares:{filled:`◼`,empty:`◻`}};var st=class{constructor(e,t){this.config=e,this.symbols=t}leadingIcon(e,t){return it(this.config.display?.showIcons,t?.showIcon)?`${e} `:``}renderDirectory(e,t,n){let r=e.worktree?.original_cwd||void 0,i=r??(e.workspace?.current_dir||e.cwd||`/`),a=r??e.workspace?.project_dir,o=n?.style??(n?.showBasename?`basename`:`full`);if(o===`basename`)return{text:i.split(/[\\/]/).pop()||`root`,bgColor:t.modeBg,fgColor:t.modeFg};let s=Xe(i),c=a&&Xe(a),l=this.getDisplayDirectoryName(s,c);return o===`fish`&&(l=Je(l)),{text:l,bgColor:t.modeBg,fgColor:t.modeFg}}renderGit(e,t,n){if(!e)return null;let r=[];n?.showRepoName&&e.repoName&&(r.push(e.repoName),e.isWorktree&&r.push(this.symbols.git_worktree)),n?.showOperation&&e.operation&&r.push(`[${e.operation}]`);let i=it(this.config.display?.showIcons,n?.showIcon);if(r.push(i?`${this.symbols.branch} ${e.branch}`:e.branch),n?.showTag&&e.tag&&r.push(`${this.symbols.git_tag} ${e.tag}`),n?.showSha&&e.sha&&r.push(`${this.symbols.git_sha} ${e.sha}`),n?.showAheadBehind!==!1&&(e.ahead>0&&e.behind>0?r.push(`${this.symbols.git_ahead}${e.ahead}${this.symbols.git_behind}${e.behind}`):e.ahead>0?r.push(`${this.symbols.git_ahead}${e.ahead}`):e.behind>0&&r.push(`${this.symbols.git_behind}${e.behind}`)),n?.showWorkingTree){let t=[];e.staged&&e.staged>0&&t.push(`+${e.staged}`),e.unstaged&&e.unstaged>0&&t.push(`~${e.unstaged}`),e.untracked&&e.untracked>0&&t.push(`?${e.untracked}`),e.conflicts&&e.conflicts>0&&t.push(`!${e.conflicts}`),t.length>0&&r.push(`(${t.join(` `)})`)}if(n?.showUpstream&&e.upstream&&r.push(`${this.symbols.git_upstream}${e.upstream}`),n?.showStashCount&&e.stashCount&&e.stashCount>0&&r.push(`${this.symbols.git_stash} ${e.stashCount}`),n?.showTimeSinceCommit&&e.timeSinceCommit!==void 0){let t=We(e.timeSinceCommit);r.push(`${this.symbols.git_time} ${t}`)}let a=this.symbols.git_clean;return e.status===`conflicts`?a=this.symbols.git_conflicts:e.status===`dirty`&&(a=this.symbols.git_dirty),r.push(a),{text:r.join(` `),bgColor:t.gitBg,fgColor:t.gitFg}}renderModel(e,t,n){let r=qe(e.model?.display_name||`Claude`);return{text:`${this.leadingIcon(this.symbols.model,n)}${r}`,bgColor:t.modelBg,fgColor:t.modelFg}}renderSession(e,t,n){let r=n?.type||`cost`,i=n?.costSource,a=this.config.budget?.session,o=this.formatUsageWithBudget(i===`calculated`?e.session.calculatedCost:i===`official`?e.session.officialCost:e.session.cost,e.session.tokens,e.session.tokenBreakdown,r,a);return o===null?null:{text:`${this.leadingIcon(this.symbols.session_cost,n)}${o}`,bgColor:t.sessionBg,fgColor:t.sessionFg}}renderSessionId(e,t,n){return{text:n?.showIdLabel===!1?e:`${this.leadingIcon(this.symbols.session_id,n)}${e}`,bgColor:t.sessionBg,fgColor:t.sessionFg}}renderTmux(e,t){return e?{text:`tmux:${e}`,bgColor:t.tmuxBg,fgColor:t.tmuxFg}:{text:`tmux:none`,bgColor:t.tmuxBg,fgColor:t.tmuxFg}}renderContext(e,t,n){let r=n?.displayStyle??`text`,i=r===`text`?`remaining`:`used`,a=n?.percentageMode??i,o=this.resolveBarStyleDef(r),s=a===`remaining`?`100%`:`0%`;if(!e)return o?{text:`${o.empty.repeat(10)} ${s}`,bgColor:t.contextBg,fgColor:t.contextFg}:{text:`${this.leadingIcon(this.symbols.context_time,n)}0 (${s})`,bgColor:t.contextBg,fgColor:t.contextFg};let c=t.contextBg,l=t.contextFg,u=t.contextBold;e.contextLeftPercentage<=20?(c=t.contextCriticalBg,l=t.contextCriticalFg,u=t.contextCriticalBold):e.contextLeftPercentage<=40&&(c=t.contextWarningBg,l=t.contextWarningFg,u=t.contextWarningBold);let d=a===`remaining`?e.contextLeftPercentage:e.usablePercentage,f=Math.round(e.usablePercentage/100*10),p=10-f;if(o){let t=this.buildBar(o,f,p,10);return{text:n?.showPercentageOnly?`${t} ${d}%`:`${t} ${e.totalTokens.toLocaleString()} (${d}%)`,bgColor:c,fgColor:l,bold:u}}let m=this.leadingIcon(this.symbols.context_time,n);return{text:n?.showPercentageOnly?`${m}${d}%`:`${m}${e.totalTokens.toLocaleString()} (${d}%)`,bgColor:c,fgColor:l,bold:u}}buildBar(e,t,n,r){if(e.marker){let n=Math.min(t,r-1);return e.filled.repeat(n)+e.marker+e.empty.repeat(r-n-1)}return e.cap?t===0?e.cap+e.empty.repeat(r-1):t>=r?e.filled.repeat(r):e.filled.repeat(t-1)+e.cap+e.empty.repeat(n):e.filled.repeat(t)+e.empty.repeat(n)}resolveBarStyleDef(e){return e===`bar`?{filled:this.symbols.bar_filled,empty:this.symbols.bar_empty}:ot[e]??null}formatPercentageWithBar(e,t,n){let r=t??`text`,i=this.resolveBarStyleDef(r);if(i){let t=Math.round(e/100*10),r=10-t,a=this.buildBar(i,t,r,10);return n?`${a} ${e}% (${n})`:`${a} ${e}%`}return n?`${e}% (${n})`:`${e}%`}renderMetrics(e,t,n){if(!e)return{text:`${this.symbols.metrics_response} new`,bgColor:t.metricsBg,fgColor:t.metricsFg};let r=[];if(n?.showLastResponseTime&&e.lastResponseTime!==null){let t=e.lastResponseTime<60?`${e.lastResponseTime.toFixed(1)}s`:`${(e.lastResponseTime/60).toFixed(1)}m`;r.push(`${this.symbols.metrics_last_response} ${t}`)}if(n?.showResponseTime!==!1&&e.responseTime!==null){let t=e.responseTime<60?`${e.responseTime.toFixed(1)}s`:`${(e.responseTime/60).toFixed(1)}m`;r.push(`${this.symbols.metrics_response} ${t}`)}if(n?.showDuration!==!1&&e.sessionDuration!==null){let t=Ge(e.sessionDuration);r.push(`${this.symbols.metrics_duration} ${t}`)}return n?.showMessageCount!==!1&&e.messageCount!==null&&r.push(`${this.symbols.metrics_messages} ${e.messageCount}`),n?.showLinesAdded!==!1&&e.linesAdded!==null&&e.linesAdded>0&&r.push(`${this.symbols.metrics_lines_added} ${e.linesAdded}`),n?.showLinesRemoved!==!1&&e.linesRemoved!==null&&e.linesRemoved>0&&r.push(`${this.symbols.metrics_lines_removed} ${e.linesRemoved}`),r.length===0?{text:`${this.symbols.metrics_response} active`,bgColor:t.metricsBg,fgColor:t.metricsFg}:{text:r.join(` `),bgColor:t.metricsBg,fgColor:t.metricsFg}}renderBlock(e,t,n){let r=Math.round(e.nativeUtilization),i=Qe(e.timeRemaining),a=this.config.budget?.block?.warningThreshold??80,o=t.blockBg,s=t.blockFg,c=t.blockBold;return r>=a?(o=t.contextCriticalBg,s=t.contextCriticalFg,c=t.contextCriticalBold):r>=50&&(o=t.contextWarningBg,s=t.contextWarningFg,c=t.contextWarningBold),{text:`${this.leadingIcon(this.symbols.block_cost,n)}${this.formatPercentageWithBar(r,n?.displayStyle,i)}`,bgColor:o,fgColor:s,bold:c}}renderWeekly(e,t,n){let r=e.rate_limits?.seven_day;if(!r)return null;let i=Math.round(r.used_percentage),a=Qe($e(r.resets_at)),o=t.weeklyBg,s=t.weeklyFg,c=t.weeklyBold;return i>=80?(o=t.contextCriticalBg,s=t.contextCriticalFg,c=t.contextCriticalBold):i>=50&&(o=t.contextWarningBg,s=t.contextWarningFg,c=t.contextWarningBold),{text:`${this.leadingIcon(this.symbols.weekly_cost,n)}${this.formatPercentageWithBar(i,n?.displayStyle,a)}`,bgColor:o,fgColor:s,bold:c}}renderToday(e,t,n){let r=typeof n==`string`?{enabled:!0,type:n}:n,i=r?.type??`cost`,a=this.config.budget?.today,o=this.formatUsageWithBudget(e.cost,e.tokens,e.tokenBreakdown,i,a);return o===null?null:{text:`${this.leadingIcon(this.symbols.today_cost,r)}${o}`,bgColor:t.todayBg,fgColor:t.todayFg}}getDisplayDirectoryName(e,t){return e.startsWith(`~`)?e:t&&t!==e&&e.startsWith(t)?e.slice(t.length+1)||t.split(/[\\/]/).pop()||`project`:e}formatUsageDisplay(e,t,n,r){switch(r){case`cost`:return P(e);case`tokens`:return He(t);case`both`:return`${P(e)} (${He(t)})`;case`breakdown`:return Ue(n);default:return P(e)}}formatUsageWithBudget(e,t,n,r,i){let a=I(e,t,i);if(a.suppressAll)return null;if(!a.showBase)return a.percentText;let o=this.formatUsageDisplay(e,t,n,r);return a.percentText?`${o} ${a.percentText}`:o}renderVersion(e,t,n){return e.version?{text:`${this.leadingIcon(this.symbols.version,n)}v${e.version}`,bgColor:t.versionBg,fgColor:t.versionFg}:null}renderEnv(e,t){let n=globalThis.process?.env?.[t.variable];if(!n)return null;let r=t.prefix??t.variable,i=this.leadingIcon(this.symbols.env,t);return{text:r?`${i}${r}: ${n}`:`${i}${n}`,bgColor:e.envBg,fgColor:e.envFg}}renderAgent(e,t,n){let r=e.agent?.name;if(typeof r!=`string`)return null;let i=r.trim();return i?{text:`${this.leadingIcon(this.symbols.agent,n)}${n?.showLabel?`agent: ${i}`:i}`,bgColor:t.agentBg,fgColor:t.agentFg}:null}renderThinking(e,t,n){let r=n?.showEnabled??!0,i=n?.showEffort??!0;if(!r&&!i)return null;let a=r?Ce(e):null,o=i?Se(e):null,s=[];return a!==null&&s.push(a?`On`:`Off`),o&&s.push(o),s.length===0?null:{text:`${this.leadingIcon(this.symbols.thinking,n)}${s.join(` · `)}`,bgColor:t.thinkingBg,fgColor:t.thinkingFg}}renderCacheTimer(e,t,n){let r=e.elapsedSeconds,i=`${this.leadingIcon(this.symbols.cache_timer,n)}${et(r)}`,a=t.cacheTimerBg,o=t.cacheTimerFg,s=t.cacheTimerBold;return r>=300?(a=t.contextCriticalBg,o=t.contextCriticalFg,s=t.contextCriticalBold):r>=180&&(a=t.contextWarningBg,o=t.contextWarningFg,s=t.contextWarningBold),{text:i,bgColor:a,fgColor:o,bold:s}}},ct=class{async getActiveBlockInfo(e){let t=e?.rate_limits?.five_hour;if(!t)return A(`Block segment: No native rate_limits data available`),null;let n=$e(t.resets_at);return A(`Block segment: Using native rate_limits: ${t.used_percentage}%, resets in ${n}m`),{nativeUtilization:t.used_percentage,timeRemaining:n}}};function R(e){return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`}function lt(e){return e.inputTokens+e.outputTokens+e.cacheCreationInputTokens+e.cacheReadInputTokens}function ut(e){return{timestamp:e.timestamp,usage:{inputTokens:e.message?.usage?.input_tokens||0,outputTokens:e.message?.usage?.output_tokens||0,cacheCreationInputTokens:e.message?.usage?.cache_creation_input_tokens||0,cacheReadInputTokens:e.message?.usage?.cache_read_input_tokens||0},costUSD:e.costUSD||0,model:e.message?.model||`unknown`}}var dt=class{async loadTodayEntries(){let e=R(new Date);A(`Today segment: Loading entries for date ${e}`);let t=await M.getLatestTranscriptMtime(),n=await M.getUsageCache(`today`,t);if(n)return A(`Using shared today usage cache`),n;let r=new Date;r.setDate(r.getDate()-1),r.setHours(0,0,0,0);let i=(e,t)=>t>=r,a=new Date;a.setHours(0,0,0,0);let o=await Pe(e=>e.timestamp>=a,i,!0),s=[],c=0;for(let t of o)if(R(t.timestamp)===e&&t.message?.usage){let e=ut(t);!e.costUSD&&t.raw&&(e.costUSD=await Fe.calculateCostForEntry(t.raw)),s.push(e),c++}return A(`Today segment: Found ${c} entries for today (${e})`),await M.setUsageCache(`today`,s,t),s}async getTodayEntries(){try{return await this.loadTodayEntries()}catch(e){return A(`Error loading today's entries:`,e),[]}}async getTodayInfo(){try{let e=await this.getTodayEntries();if(e.length===0)return{cost:null,tokens:null,tokenBreakdown:null,date:R(new Date)};let t=e.reduce((e,t)=>e+t.costUSD,0),n=e.reduce((e,t)=>e+lt(t.usage),0),r=e.reduce((e,t)=>({input:e.input+t.usage.inputTokens,output:e.output+t.usage.outputTokens,cacheCreation:e.cacheCreation+t.usage.cacheCreationInputTokens,cacheRead:e.cacheRead+t.usage.cacheReadInputTokens}),{input:0,output:0,cacheCreation:0,cacheRead:0});return A(`Today segment: $${t.toFixed(2)}, ${n} tokens total`),{cost:t,tokens:n,tokenBreakdown:r,date:R(new Date)}}catch(e){return A(`Error getting today's info:`,e),{cost:null,tokens:null,tokenBreakdown:null,date:R(new Date)}}}};const ft={right:``,left_rounded:``,right_rounded:``,branch:`⎇`,model:`✱`,git_clean:`✓`,git_dirty:`●`,git_conflicts:`⚠`,git_ahead:`↑`,git_behind:`↓`,git_worktree:`⧉`,git_tag:`⌂`,git_sha:`♯`,git_upstream:`→`,git_stash:`⧇`,git_time:`◷`,session_cost:`§`,block_cost:`◱`,today_cost:`☉`,context_time:`◔`,metrics_response:`⧖`,metrics_last_response:`Δ`,metrics_duration:`⧗`,metrics_messages:`◆`,metrics_lines_added:`+`,metrics_lines_removed:`-`,metrics_burn:`↗`,version:`◈`,bar_filled:`▪`,bar_empty:`▫`,env:`⚙`,session_id:`⌗`,weekly_cost:`◑`,dir:`📁`,activity:`⚡`,agent:`◇`,thinking:`✦`,cache_timer:`◴`},pt={topLeft:`╭`,topRight:`╮`,bottomLeft:`╰`,bottomRight:`╯`,horizontal:`─`,vertical:`│`,teeLeft:`├`,teeRight:`┤`},mt={topLeft:`+`,topRight:`+`,bottomLeft:`+`,bottomRight:`+`,horizontal:`-`,vertical:`|`,teeLeft:`+`,teeRight:`+`},ht={rounded:pt,square:{topLeft:`┌`,topRight:`┐`,bottomLeft:`└`,bottomRight:`┘`,horizontal:`─`,vertical:`│`,teeLeft:`├`,teeRight:`┤`},heavy:{topLeft:`┏`,topRight:`┓`,bottomLeft:`┗`,bottomRight:`┛`,horizontal:`━`,vertical:`┃`,teeLeft:`┣`,teeRight:`┫`},double:{topLeft:`╔`,topRight:`╗`,bottomLeft:`╚`,bottomRight:`╝`,horizontal:`═`,vertical:`║`,teeLeft:`╠`,teeRight:`╣`},dashed:{topLeft:`╭`,topRight:`╮`,bottomLeft:`╰`,bottomRight:`╯`,horizontal:`┄`,vertical:`┊`,teeLeft:`├`,teeRight:`┤`},"heavy-dashed":{topLeft:`┏`,topRight:`┓`,bottomLeft:`┗`,bottomRight:`┛`,horizontal:`┅`,vertical:`┇`,teeLeft:`┣`,teeRight:`┫`},mixed:{topLeft:`┍`,topRight:`┑`,bottomLeft:`┕`,bottomRight:`┙`,horizontal:`━`,vertical:`│`,teeLeft:`┝`,teeRight:`┥`},ascii:mt,invisible:{topLeft:` `,topRight:` `,bottomLeft:` `,bottomRight:` `,horizontal:` `,vertical:` `,teeLeft:` `,teeRight:` `}},gt={right:``,left_rounded:``,right_rounded:``,branch:`~`,model:`M`,git_clean:`=`,git_dirty:`*`,git_conflicts:`!`,git_ahead:`^`,git_behind:`v`,git_worktree:`W`,git_tag:`T`,git_sha:`#`,git_upstream:`>>`,git_stash:`S`,git_time:`@`,session_cost:`S`,block_cost:`B`,today_cost:`D`,context_time:`C`,metrics_response:`R`,metrics_last_response:`L`,metrics_duration:`T`,metrics_messages:`#`,metrics_lines_added:`+`,metrics_lines_removed:`-`,metrics_burn:`~/h`,version:`V`,bar_filled:`=`,bar_empty:`-`,env:`$`,session_id:`#`,weekly_cost:`W`,dir:`D`,activity:`A`,agent:`&`,thinking:`T`,cache_timer:`C!`},_t=RegExp(`\x1B\\[[0-9;]*m`,`g`),vt=RegExp(`(\x1B\\[[0-9;]*m)`);function yt(e){return e.replace(_t,``)}function z(e){return yt(e).length}const bt=/^[a-zA-Z0-9/]+$/;function xt(){if(process.platform===`win32`)return null;let e=process.pid.toString();for(let t=0;t<10;t++)try{let t=i(`ps -o ppid=,tty= -p ${e}`,{encoding:`utf8`,stdio:[`pipe`,`pipe`,`ignore`]}).trim().split(/\s+/),n=t[0],r=t[1];if(r&&r!==`?`&&r!==`??`&&bt.test(r))return r;if(!n||n===`1`||n===`0`)break;e=n}catch{break}return null}function St(){try{let e=i(`mode con`,{encoding:`utf8`,stdio:[`pipe`,`pipe`,`ignore`],windowsHide:!0}).match(/Columns:\s*(\d+)/i);if(e?.[1]){let t=parseInt(e[1],10);if(!isNaN(t)&&t>0)return t}}catch{}return null}function Ct(){let e=xt();if(e)try{let t=i(`stty size < /dev/${e}`,{encoding:`utf8`,stdio:[`pipe`,`pipe`,`ignore`],shell:`/bin/sh`}).trim().split(` `)[1];if(t){let e=parseInt(t,10);if(!isNaN(e)&&e>0)return e}}catch{}try{let e=i(`tput cols 2>/dev/null`,{encoding:`utf8`,stdio:[`pipe`,`pipe`,`ignore`]}).trim(),t=parseInt(e,10);if(!isNaN(t)&&t>0)return t}catch{}return null}function wt(){let e=e=>Math.max(1,e-45),t=process.env.COLUMNS;if(t){let n=parseInt(t,10);if(!isNaN(n)&&n>0)return e(n)}if(process.stdout.columns&&process.stdout.columns>0)return e(process.stdout.columns);if(process.platform===`win32`){let t=St();if(t)return e(t)}let n=Ct();return n?e(n):null}function Tt(){return process.platform===`win32`?St():Ct()}function B(e,t,n,r=!1){let i=r&&n!==``;return!t&&!i?e:i?`${t}\x1b[1m${e}\x1b[22m${n}`:`${t}${e}${n}`}function Et(e,t){let n=z(e);return n>=t?e:e+` `.repeat(t-n)}function Dt(e,t){let n=z(e);return n>=t?e:` `.repeat(t-n)+e}function Ot(e,t){let n=z(e);if(n>=t)return e;let r=t-n,i=Math.floor(r/2),a=r-i;return` `.repeat(i)+e+` `.repeat(a)}function V(e,t){if(yt(e).length<=t)return e;let n=0,r=``,i=e.split(vt);for(let e of i){if(e.startsWith(`\x1B`)){r+=e;continue}for(let i of e){if(n>=t-1)return r+=`…\x1B[0m`,r;r+=i,n++}}return r}function H(e,t,n){let r=n-2,i=Et(V(t,r),r);return e.vertical+` `+i+` `+e.vertical}function U(e,t){return e.teeLeft+e.horizontal.repeat(t)+e.teeRight}function kt(e,t,n,r){if(!n&&!r)return e.bottomLeft+e.horizontal.repeat(t)+e.bottomRight;let i=n?` ${n} `:``,a=r?` ${r} `:``,o=z(i),s=z(a);if(o+s>t){let e=Math.max(0,t-s);if(o>e&&(i=V(i,e),o=z(i)),o+s>t){let e=Math.max(0,t-o);a=V(a,e),s=z(a)}}let c=t-o-s;return e.bottomLeft+i+e.horizontal.repeat(Math.max(0,c))+a+e.bottomRight}function At(e,t){if(e.length===0)return``;if(e.length===1)return e[0]??``;let n=e.map(e=>z(e)),r=t-n.reduce((e,t)=>e+t,0),i=Math.max(2,Math.floor(r/(e.length-1))),a=Array.from({length:e.length});a[e.length-1]=n[e.length-1]??0;for(let t=e.length-2;t>=0;t--)a[t]=(a[t+1]??0)+(n[t]??0);let o=e[0]??``,s=n[0]??0;for(let r=1;r<e.length;r++){let c=t-s-(a[r]??0)-(e.length-1-r)*2,l=Math.max(2,Math.min(i,c));o+=` `.repeat(l)+(e[r]??``),s+=l+(n[r]??0)}return o}function W(e,t,n){if(!t)return e;if(!e)return t;let r=z(e),i=z(t),a=n-r-i;return a<2?`${e} ${t}`:e+` `.repeat(a)+t}function G(e,t,n){let r=qe(t.hookData.model?.display_name||`Claude`).toLowerCase();return e.replace(/\{([^}]+)\}/g,(e,t)=>{if(n){let e=n[t];if(e!==void 0)return e}return t===`model`?r:``})}function jt(e,t,n,r,i){let a=r?.left??`{model}`,o=r?.right,s=G(a,e,i),c=s?` ${s} `:``,l=z(c);if(!o){let e=n-l;return t.topLeft+c+t.horizontal.repeat(Math.max(0,e))+t.topRight}let u=G(o,e,i),d=u?` ${u} `:``,f=z(d),p=c,m=l,h=d,g=f;if(m+g>n){let e=Math.max(0,n-g);if(m>e&&(p=V(p,e),m=z(p)),m+g>n){let e=Math.max(0,n-m);h=V(h,e),g=z(h)}}let _=n-m-g;if(_<2){let e=n-m;return t.topLeft+p+t.horizontal.repeat(Math.max(0,e))+t.topRight}return t.topLeft+p+t.horizontal.repeat(_)+h+t.topRight}function K(e,t,n,r,i=60,a=80){return e>=a?{fg:r.contextCriticalFg,bold:r.contextCriticalBold}:e>=i?{fg:r.contextWarningFg,bold:r.contextWarningBold}:{fg:t,bold:n}}function Mt(e,t,n,r,i,a=!1){t=Math.max(5,t);let o=Math.max(0,Math.min(t,Math.round(e/100*t))),s=t-o;return B(n.bar_filled.repeat(o)+n.bar_empty.repeat(s),i,r,a)}function Nt(e,t,n=!0){if(!e.contextInfo)return{icon:``,label:`context`,bar:``,pct:``,tokens:``};let r=e.contextInfo.usablePercentage,i=F(e.contextInfo.totalTokens),a=F(e.contextInfo.maxTokens);return{icon:n?t.context_time:``,label:`context`,bar:` `,pct:`${r}%`,tokens:`${i}/${a}`}}function Pt(e,t,n,r,i,a){if(!e.contextInfo)return``;let o=e.contextInfo.usablePercentage,{fg:s,bold:c}=K(o,a?.[`context.bar`]??a?.context??i.contextFg,i.contextBold,i);return Mt(o,t,n,r,s,c)}function Ft(e,t,n,r,i,a,o){if(!e.blockInfo)return``;let s=e.blockInfo.nativeUtilization,c=a.budget?.block?.warningThreshold??80,{fg:l,bold:u}=K(s,o?.[`block.bar`]??o?.block??i.blockFg,i.blockBold,i,50,c);return Mt(s,t,n,r,l,u)}function It(e,t,n,r,i,a){let o=e.hookData.rate_limits?.seven_day;if(!o)return``;let s=o.used_percentage,{fg:c,bold:l}=K(s,a?.[`weekly.bar`]??a?.weekly??i.weeklyFg,i.weeklyBold,i);return Mt(s,t,n,r,c,l)}function Lt(e,t,n,r,i){if(!e.contextInfo)return null;let a=e.contextInfo.usablePercentage,o=` ${a}% ${F(e.contextInfo.totalTokens)}/${F(e.contextInfo.maxTokens)}`,s=Math.max(5,t-o.length),c=Math.max(0,Math.min(s,Math.round(a/100*s))),l=s-c,u=n.bar_filled.repeat(c)+n.bar_empty.repeat(l),{fg:d,bold:f}=K(a,i.contextFg,i.contextBold,i);return B(`${u}${o}`,d,r,f)}function Rt(e){return Xe(e.workspace?.current_dir||e.cwd||`/`)}function zt(e,t,n,r,i){let a=[];e.blockInfo&&a.push(B(q(e.blockInfo,t,n,L(n,`block`)),i.blockFg,r,i.blockBold));let o=e.hookData.rate_limits?.seven_day;if(o&&a.push(B(J(o,t,L(n,`weekly`)),i.weeklyFg,r,i.weeklyBold)),e.usageInfo){let o=Kt(e.usageInfo,t,n,L(n,`session`));o&&a.push(B(o,i.sessionFg,r,i.sessionBold))}if(e.todayInfo){let o=Jt(e.todayInfo,t,n,L(n,`today`));o&&a.push(B(o,i.todayFg,r,i.todayBold))}let s=Bt(e,t);return s.length>0&&a.push(B(s.join(` · `),i.metricsFg,r,i.metricsBold)),a}function Bt(e,t){let n=[];return e.metricsInfo&&(e.metricsInfo.sessionDuration!==null&&e.metricsInfo.sessionDuration>0&&n.push(`${t.metrics_duration} ${Ge(e.metricsInfo.sessionDuration)}`),e.metricsInfo.messageCount!==null&&e.metricsInfo.messageCount>0&&n.push(`${t.metrics_messages} ${e.metricsInfo.messageCount}`)),n}function Vt(e,t,n,r,i){let a=[],o=en(e,t,L(i,`git`));o&&a.push(B(o,r.gitFg,n,r.gitBold));let s=Je(Rt(e.hookData));return a.push(B(s,r.modeFg,n,r.modeBold)),a}function Ht(e,t,n,r,i){let a=[],o=an(e,t,L(n,`version`));o&&a.push(B(o,i.versionFg,r,i.versionBold));let s=un(e,t,n.display.lines.map(e=>e.segments.thinking).find(e=>e?.enabled),L(n,`thinking`));if(s&&a.push(B(s,i.thinkingFg,r,i.thinkingBold)),n.display.lines.some(e=>e.segments.cacheTimer?.enabled)&&e.cacheTimerInfo){let o=fn(e,t,L(n,`cacheTimer`));if(o){let{fg:t,bold:n}=pn(e.cacheTimerInfo.elapsedSeconds,i);a.push(B(o,t,r,n))}}if(e.tmuxSessionId&&a.push(B(`tmux:${e.tmuxSessionId}`,i.tmuxFg,r,i.tmuxBold)),e.metricsInfo){let n=[];e.metricsInfo.responseTime!==null&&!isNaN(e.metricsInfo.responseTime)&&e.metricsInfo.responseTime>0&&n.push(`${t.metrics_response} ${Ye(e.metricsInfo.responseTime)}`),e.metricsInfo.linesAdded!==null&&e.metricsInfo.linesAdded>0&&n.push(`${t.metrics_lines_added}${e.metricsInfo.linesAdded}`),e.metricsInfo.linesRemoved!==null&&e.metricsInfo.linesRemoved>0&&n.push(`${t.metrics_lines_removed}${e.metricsInfo.linesRemoved}`),n.length>0&&a.push(B(n.join(` · `),i.metricsFg,r,i.metricsBold))}let c=n.display.lines.map(e=>e.segments.env).find(e=>e?.enabled);if(c&&c.variable){let e=globalThis.process?.env?.[c.variable];if(e){let t=c.prefix??c.variable;a.push(B(t?`${t}:${e}`:e,i.envFg,r,i.envBold))}}return a}function Ut(e,t,n,r=!0){let i=`${Math.round(e.nativeUtilization)}%`,a=Ze(e.timeRemaining);return{icon:r?t.block_cost:``,label:`block`,value:i,time:a,budget:``,bar:` `}}function q(e,t,n,r=!0){let i=Ut(e,t,n,r),a=i.icon?`${i.icon} ${i.value}`:i.value??``;return i.time&&(a+=` · ${i.time}`),i.budget&&(a+=i.budget),a}function Wt(e,t,n=!0){let r=`${Math.round(e.used_percentage)}%`,i=Qe($e(e.resets_at));return{icon:n?t.weekly_cost:``,label:`weekly`,pct:r,time:i,bar:` `}}function J(e,t,n=!0){let r=Wt(e,t,n),i=r.icon?`${r.icon} ${r.pct}`:r.pct??``;return r.time&&(i+=` · ${r.time}`),i}function Gt(e,t,n,r=!0){let i=I(e.session.cost,e.session.tokens,n.budget?.session);if(i.suppressAll)return{icon:``,label:``,cost:``,tokens:``,budget:``};let a=e.session.tokens,o=i.showBase&&a!==null&&a>0?F(a):``;return{icon:r?t.session_cost:``,label:i.percentageOnly?``:`session`,cost:i.showBase?P(e.session.cost):``,tokens:o,budget:i.percentText?` ${i.percentText}`:``}}function Kt(e,t,n,r=!0){let i=I(e.session.cost,e.session.tokens,n.budget?.session);if(i.suppressAll)return``;let a=r?t.session_cost:``;if(!i.showBase)return a?`${a} ${i.percentText}`:i.percentText;let o=P(e.session.cost),s=e.session.tokens,c=a?`${a} ${o}`:o;return s!==null&&s>0&&(c+=` · ${F(s)}`),i.percentText&&(c+=` ${i.percentText}`),c}function qt(e,t,n,r=!0){let i=I(e.cost,e.tokens,n.budget?.today);return i.suppressAll?{icon:``,label:``,cost:``,budget:``}:{icon:r?t.today_cost:``,cost:i.showBase?P(e.cost):``,label:i.percentageOnly?``:`today`,budget:i.percentText?` ${i.percentText}`:``}}function Jt(e,t,n,r=!0){let i=I(e.cost,e.tokens,n.budget?.today);if(i.suppressAll)return``;let a=r?t.today_cost:``;if(!i.showBase)return a?`${a} ${i.percentText}`:i.percentText;let o=P(e.cost),s=a?`${a} ${o} today`:`${o} today`;return i.percentText&&(s+=` ${i.percentText}`),s}function Yt(e,t){let n={response:``,responseIcon:``,responseVal:``,lastResponse:``,lastResponseIcon:``,lastResponseVal:``,added:``,addedIcon:``,addedVal:``,removed:``,removedIcon:``,removedVal:``};if(!e.metricsInfo)return n;let r=e.metricsInfo.responseTime!==null&&!isNaN(e.metricsInfo.responseTime)&&e.metricsInfo.responseTime>0,i=r?Ye(e.metricsInfo.responseTime):``,a=e.metricsInfo.lastResponseTime!==null&&!isNaN(e.metricsInfo.lastResponseTime)&&e.metricsInfo.lastResponseTime>0,o=a?Ye(e.metricsInfo.lastResponseTime):``,s=e.metricsInfo.linesAdded!==null&&e.metricsInfo.linesAdded>0,c=s?`${e.metricsInfo.linesAdded}`:``,l=e.metricsInfo.linesRemoved!==null&&e.metricsInfo.linesRemoved>0,u=l?`${e.metricsInfo.linesRemoved}`:``;return{response:r?`${t.metrics_response} ${i}`:``,responseIcon:r?t.metrics_response:``,responseVal:i,lastResponse:a?`${t.metrics_last_response} ${o}`:`${t.metrics_last_response} --`,lastResponseIcon:t.metrics_last_response,lastResponseVal:a?o:`--`,added:s?`${t.metrics_lines_added}${c}`:``,addedIcon:s?t.metrics_lines_added:``,addedVal:c,removed:l?`${t.metrics_lines_removed}${u}`:``,removedIcon:l?t.metrics_lines_removed:``,removedVal:u}}function Xt(e,t){let n=Yt(e,t),r=[n.response,n.lastResponse,n.added,n.removed].filter(Boolean);return r.length>0?r.join(` · `):``}function Zt(e,t){let n={icon:``,duration:``,durationIcon:``,durationVal:``,messages:``,messagesIcon:``,messagesVal:``};if(!e.metricsInfo)return n;let r=e.metricsInfo.sessionDuration!==null&&e.metricsInfo.sessionDuration>0,i=r?Ge(e.metricsInfo.sessionDuration):``,a=e.metricsInfo.messageCount!==null&&e.metricsInfo.messageCount>0,o=a?`${e.metricsInfo.messageCount}`:``;return{icon:t.activity,duration:r?`${t.metrics_duration} ${i}`:``,durationIcon:r?t.metrics_duration:``,durationVal:i,messages:a?`${t.metrics_messages} ${o}`:``,messagesIcon:a?t.metrics_messages:``,messagesVal:o}}function Qt(e,t){let n=Zt(e,t),r=[n.duration,n.messages].filter(Boolean);return r.length>0?r.join(` · `):``}function $t(e,t,n=!0){if(!e.gitInfo)return{icon:``,headVal:``,branch:``,status:``,ahead:``,behind:``,working:``,head:``};let r;r=e.gitInfo.status===`conflicts`?t.git_conflicts:e.gitInfo.status===`dirty`?t.git_dirty:t.git_clean;let i=e.gitInfo.ahead>0?`${t.git_ahead}${e.gitInfo.ahead}`:``,a=e.gitInfo.behind>0?`${t.git_behind}${e.gitInfo.behind}`:``,o=[];e.gitInfo.staged&&e.gitInfo.staged>0&&o.push(`+${e.gitInfo.staged}`),e.gitInfo.unstaged&&e.gitInfo.unstaged>0&&o.push(`~${e.gitInfo.unstaged}`),e.gitInfo.untracked&&e.gitInfo.untracked>0&&o.push(`?${e.gitInfo.untracked}`);let s=o.length>0?`(${o.join(` `)})`:``,c=[];n&&c.push(t.branch),c.push(e.gitInfo.branch,r),i&&c.push(i),a&&c.push(a);let l=[e.gitInfo.branch,r];return i&&l.push(i),a&&l.push(a),{icon:n?t.branch:``,headVal:l.join(` `),branch:e.gitInfo.branch,status:r,ahead:i,behind:a,working:s,head:c.join(` `)}}function en(e,t,n=!0){let r=$t(e,t,n);if(!r.branch)return``;let i=r.icon?`${r.icon} ${r.branch} ${r.status}`:`${r.branch} ${r.status}`;return r.ahead&&(i+=` ${r.ahead}`),r.behind&&(i+=`${r.behind}`),r.working&&(i+=` ${r.working}`),i}function tn(e,t,n,r=!0){return{icon:r?n.dir:``,value:nn(e,t)}}function nn(e,t){let n=Rt(e.hookData),r=t.display.lines.map(e=>e.segments.directory).find(e=>e?.enabled),i=r?.style??(r?.showBasename?`basename`:`fish`);if(i===`basename`){let e=n.includes(`/`)?`/`:`\\`;return n.split(e).pop()||n}return i===`full`?n:Je(n)}function rn(e,t,n=!0){return e.hookData.version?{icon:n?t.version:``,value:`v${e.hookData.version}`}:{icon:``,value:``}}function an(e,t,n=!0){let r=rn(e,t,n);return r.value?r.icon?`${r.icon} ${r.value}`:r.value:``}function on(e,t,n=!0){let r=e.hookData.agent?.name;if(typeof r!=`string`)return{icon:``,name:``};let i=r.trim();return i?{icon:n?t.agent:``,name:i}:{icon:``,name:``}}function sn(e,t,n,r=!0){let i=on(e,t,r);if(!i.name)return``;let a=n.display.lines.map(e=>e.segments.agent).find(e=>e?.enabled)?.showLabel?`agent: ${i.name}`:i.name;return i.icon?`${i.icon} ${a}`:a}function cn(e,t){let n=t?.showEnabled??!0,r=t?.showEffort??!0;if(!n&&!r)return``;let i=n?Ce(e.hookData):null,a=r?Se(e.hookData):null,o=[];return i!==null&&o.push(i?`On`:`Off`),a&&o.push(a),o.join(` · `)}function ln(e,t,n,r=!0){let i=n?.showEnabled??!0,a=n?.showEffort??!0,o=i?Ce(e.hookData):null,s=a?Se(e.hookData):null,c=o===null?``:o?`On`:`Off`,l=s??``;return{icon:(c!==``||l!==``)&&r?t.thinking:``,enabled:c,effort:l}}function un(e,t,n,r=!0){let i=cn(e,n);return i?r?`${t.thinking} ${i}`:i:``}function dn(e,t,n=!0){return e.cacheTimerInfo?{icon:n?t.cache_timer:``,value:et(e.cacheTimerInfo.elapsedSeconds)}:{icon:``,value:``}}function fn(e,t,n=!0){let r=dn(e,t,n);return r.value?r.icon?`${r.icon} ${r.value}`:r.value:``}function pn(e,t){return e>=300?{fg:t.contextCriticalFg,bold:t.contextCriticalBold}:e>=180?{fg:t.contextWarningFg,bold:t.contextWarningBold}:{fg:t.cacheTimerFg,bold:t.cacheTimerBold}}function mn(e){return e.tmuxSessionId?{label:`tmux`,value:e.tmuxSessionId}:{label:``,value:``}}function hn(e){let t=mn(e);return t.label?`${t.label}:${t.value}`:``}function gn(e){let t=e.display.lines.map(e=>e.segments.env).find(e=>e?.enabled);if(!t||!t.variable)return{prefix:``,value:``};let n=globalThis.process?.env?.[t.variable];return n?{prefix:(t.prefix??t.variable)||``,value:n}:{prefix:``,value:``}}function _n(e){let t=gn(e);return t.value?t.prefix?`${t.prefix}:${t.value}`:t.value:``}function Y(e,t,n,r,i,a,o=!1){for(let[s,c]of Object.entries(n)){let n=`${t}.${s}`,l=a?.[n]??a?.[t]??r;e[n]=c?B(c,l,i,o):``}}function vn(e,t,n){let r=t.indexOf(`.`),i=r===-1?t:t.slice(0,r);return e.items.map(e=>{let t=e.match(/^\{(.+)\}$/);return t?n[`${i}.${t[1]}`]??``:e?B(e,``,``):``}).filter(Boolean)}function yn(e,t,n,r){if(e.length===0)return``;if(n===`between`&&r!==void 0&&e.length>1){let n=e.reduce((e,t)=>e+z(t),0),i=Math.max(t*(e.length-1),r-n),a=Math.floor(i/(e.length-1)),o=i%(e.length-1),s=e[0];for(let t=1;t<e.length;t++)s+=` `.repeat(a+(t<=o?1:0))+e[t];return s}return e.join(` `.repeat(t))}function bn(e,t){let{sym:n,config:r,reset:i,colors:a}=t,o=a.partFg,s=(e,t,n=!1)=>e?B(e,t,i,n):``,c={},l={model:L(r,`model`),context:L(r,`context`),block:L(r,`block`),session:L(r,`session`),today:L(r,`today`),weekly:L(r,`weekly`),git:L(r,`git`),directory:L(r,`directory`),version:L(r,`version`),agent:L(r,`agent`),thinking:L(r,`thinking`),cacheTimer:L(r,`cacheTimer`)},u=qe(e.hookData.model?.display_name||`Claude`).toLowerCase(),d=o?.model??a.modelFg,f=l.model?n.model:``;c.model=s(f?`${f} ${u}`:u,d,a.modelBold),Y(c,`model`,{icon:f,value:u},a.modelFg,i,o,a.modelBold),c.context=Lt(e,t.contentWidth,n,i,a)??``;let p=Nt(e,n,l.context),m=e.contextInfo?K(e.contextInfo.usablePercentage,a.contextFg,a.contextBold,a):{fg:a.contextFg,bold:a.contextBold};if(Y(c,`context`,p,m.fg,i,o,m.bold),e.blockInfo){let t=o?.block??a.blockFg;c.block=s(q(e.blockInfo,n,r,l.block),t,a.blockBold),Y(c,`block`,Ut(e.blockInfo,n,r,l.block),a.blockFg,i,o,a.blockBold)}else c.block=``;if(e.usageInfo){let t=o?.session??a.sessionFg;c.session=s(Kt(e.usageInfo,n,r,l.session),t,a.sessionBold),Y(c,`session`,Gt(e.usageInfo,n,r,l.session),a.sessionFg,i,o,a.sessionBold)}else c.session=``;if(e.todayInfo){let t=o?.today??a.todayFg;c.today=s(Jt(e.todayInfo,n,r,l.today),t,a.todayBold),Y(c,`today`,qt(e.todayInfo,n,r,l.today),a.todayFg,i,o,a.todayBold)}else c.today=``;let h=e.hookData.rate_limits?.seven_day;if(h){let e=o?.weekly??a.weeklyFg;c.weekly=s(J(h,n,l.weekly),e,a.weeklyBold),Y(c,`weekly`,Wt(h,n,l.weekly),a.weeklyFg,i,o,a.weeklyBold)}else c.weekly=``;let g=o?.git??a.gitFg;c.git=s(en(e,n,l.git),g,a.gitBold),Y(c,`git`,$t(e,n,l.git),a.gitFg,i,o,a.gitBold);let _=o?.dir??a.modeFg;c.dir=s(nn(e,r),_,a.modeBold),Y(c,`dir`,tn(e,r,n,l.directory),a.modeFg,i,o,a.modeBold);let v=o?.version??a.versionFg;c.version=s(an(e,n,l.version),v,a.versionBold),Y(c,`version`,rn(e,n,l.version),a.versionFg,i,o,a.versionBold);let y=o?.tmux??a.tmuxFg;c.tmux=s(hn(e),y,a.tmuxBold),Y(c,`tmux`,mn(e),a.tmuxFg,i,o,a.tmuxBold);let b=o?.metrics??a.metricsFg;c.metrics=s(Xt(e,n),b,a.metricsBold),Y(c,`metrics`,Yt(e,n),a.metricsFg,i,o,a.metricsBold);let x=o?.activity??a.metricsFg;c.activity=s(Qt(e,n),x,a.metricsBold),Y(c,`activity`,Zt(e,n),a.metricsFg,i,o,a.metricsBold);let S=o?.env??a.envFg;c.env=s(_n(r),S,a.envBold),Y(c,`env`,gn(r),a.envFg,i,o,a.envBold);let C=o?.agent??a.agentFg;c.agent=s(sn(e,n,r,l.agent),C,a.agentBold),Y(c,`agent`,on(e,n,l.agent),a.agentFg,i,o,a.agentBold);let w=r.display.lines.map(e=>e.segments.thinking).find(e=>e?.enabled),ee=o?.thinking??a.thinkingFg;c.thinking=s(un(e,n,w,l.thinking),ee,a.thinkingBold),Y(c,`thinking`,ln(e,n,w,l.thinking),a.thinkingFg,i,o,a.thinkingBold);let T=pn(e.cacheTimerInfo?.elapsedSeconds??0,a),E=o?.cacheTimer??T.fg;c.cacheTimer=s(fn(e,n,l.cacheTimer),E,T.bold),Y(c,`cacheTimer`,dn(e,n,l.cacheTimer),T.fg,i,o,T.bold);let D={},O=r.display.tui?.segments;if(O)for(let[e,t]of Object.entries(O)){let n=vn(t,e,c),r=t.gap??1,i=t.justify??`start`;D[e]={items:n,gap:r,justify:i},c[e]=yn(n,r,i===`between`?`start`:i)}return{data:c,templates:D}}function xn(e){let{lines:t,data:n,box:r,contentWidth:i,innerWidth:a,sym:o,config:s,reset:c,colors:l}=e,u=zt(n,o,s,c,l);u.length>0&&t.push(H(r,At(u,i),a))}function Sn(e){let{lines:t,data:n,box:r,contentWidth:i,innerWidth:a,sym:o,config:s,reset:c,colors:l}=e,u=Vt(n,o,c,l,s),d=Ht(n,o,s,c,l),f=u.join(` `),p=d.join(` · `);(f||p)&&(t.push(U(r,a)),t.push(H(r,W(f,p,i),a)))}function Cn(e){let{lines:t,data:n,box:r,contentWidth:i,innerWidth:a,sym:o,config:s,reset:c,colors:l}=e,u=[],d=[],f=L(s,`block`),p=L(s,`weekly`),m=L(s,`today`),h=L(s,`session`);n.blockInfo&&u.push(B(q(n.blockInfo,o,s,f),l.blockFg,c,l.blockBold));let g=n.hookData.rate_limits?.seven_day;g&&u.push(B(J(g,o,p),l.weeklyFg,c,l.weeklyBold)),n.todayInfo&&u.push(B(Jt(n.todayInfo,o,s,m),l.todayFg,c,l.todayBold)),n.usageInfo&&d.push(B(Kt(n.usageInfo,o,s,h),l.sessionFg,c,l.sessionBold));let _=Bt(n,o);_.length>0&&d.push(B(_.join(` · `),l.metricsFg,c,l.metricsBold)),u.length>0&&t.push(H(r,At(u,i),a)),d.length>0&&t.push(H(r,W(d[0]??``,d[1]??``,i),a))}function wn(e){let{lines:t,data:n,box:r,contentWidth:i,innerWidth:a,sym:o,config:s,reset:c,colors:l}=e,u=Vt(n,o,c,l,s);u.length>0&&(t.push(U(r,a)),t.push(H(r,W(u[0]??``,u[1]??``,i),a)));let d=Ht(n,o,s,c,l);d.length>0&&(t.push(U(r,a)),t.push(H(r,d.join(` · `),a)))}function Tn(e){let{lines:t,data:n,box:r,contentWidth:i,innerWidth:a,sym:o,config:s,reset:c,colors:l}=e,u=L(s,`block`),d=L(s,`weekly`),f=L(s,`session`),p=L(s,`today`);n.blockInfo&&t.push(H(r,B(q(n.blockInfo,o,s,u),l.blockFg,c,l.blockBold),a));let m=n.hookData.rate_limits?.seven_day;m&&t.push(H(r,B(J(m,o,d),l.weeklyFg,c,l.weeklyBold),a));let h=[];if(n.usageInfo){let e=f?`${o.session_cost} ${P(n.usageInfo.session.cost)}`:P(n.usageInfo.session.cost);h.push(B(e,l.sessionFg,c,l.sessionBold))}if(n.todayInfo){let e=p?`${o.today_cost} ${P(n.todayInfo.cost)} today`:`${P(n.todayInfo.cost)} today`;h.push(B(e,l.todayFg,c,l.todayBold))}h.length>0&&t.push(H(r,W(h[0]??``,h[1]??``,i),a))}function En(e){let{lines:t,data:n,box:r,contentWidth:i,innerWidth:a,sym:o,config:s,reset:c,colors:l}=e,u=Vt(n,o,c,l,s);u.length>0&&(t.push(U(r,a)),t.push(H(r,W(u[0]??``,u[1]??``,i),a)));let d=Ht(n,o,s,c,l);d.length>0&&t.push(H(r,d.join(` · `),a))}const Dn=new Set([`context`,`context.bar`,`block.bar`,`weekly.bar`]);function X(e){return e.length===1&&e[0].segment===`---`}function Z(e){if(!e.endsWith(`fr`))return 0;let t=parseInt(e.replace(`fr`,``),10);return!isNaN(t)&&t>0?t:0}function On(e,t,n){let r=Math.floor(e/t.length),i=e-r*t.length;for(let e of t)n[e]=n[e]+r+(i>0?1:0),i>0&&i--}function kn(e,t,n,r){let i=0;for(let r=0;r<n;r++)i+=e[t+r]??0;return n>1&&(i+=(n-1)*r),i}function An(e,t){let n;for(let r of e)t>=r.minWidth&&(!n||r.minWidth>n.minWidth)&&(n=r);if(n)return n;let r=e[0];for(let t=1;t<e.length;t++)e[t].minWidth<r.minWidth&&(r=e[t]);return r}function jn(e){let t=[];for(let n of e){let e=n.trim();if(e===`---`){t.push([{segment:`---`,spanStart:!0,spanSize:1}]);continue}let r=e.split(/\s+/),i=[],a=0;for(;a<r.length;){let e=r[a],t=1;for(;a+t<r.length&&r[a+t]===e;)t++;i.push({segment:e,spanStart:!0,spanSize:t});for(let n=1;n<t;n++)i.push({segment:e,spanStart:!1,spanSize:0});a+=t}t.push(i)}return t}function Mn(e,t){let n=e.map(e=>X(e)?e:e.map(e=>e.segment===`.`||e.segment===`---`||t[e.segment]?e:{segment:`.`,spanStart:!0,spanSize:1})).map(e=>{if(X(e))return e;let t=e.map(e=>e.segment),n=[],r=0;for(;r<t.length;){let e=t[r],i=1;for(;r+i<t.length&&t[r+i]===e;)i++;n.push({segment:e,spanStart:!0,spanSize:i});for(let t=1;t<i;t++)n.push({segment:e,spanStart:!1,spanSize:0});r+=i}return n}).filter(e=>X(e)?!0:e.some(e=>e.segment!==`.`)),r=[];for(let e=0;e<n.length;e++){let t=n[e];if(!X(t)){r.push(t);continue}r.length!==0&&(X(r[r.length-1])||r.push(t))}return r.length>0&&X(r[r.length-1])&&r.pop(),r}function Nn(e,t,n,r){let i=Array.from({length:e}).fill(0);for(let a of t)if(!X(a))for(let t=0;t<a.length;t++){let o=a[t];if(!o.spanStart||o.spanSize!==1||o.segment===`.`||t>=e||r?.has(o.segment))continue;let s=z(n[o.segment]||``);s>i[t]&&(i[t]=s)}return i}function Pn(e,t,n,r,i,a){let o=e.length,s=Nn(o,t,n,a),c=Array.from({length:o}).fill(0);for(let t=0;t<o;t++)e[t]===`auto`&&(c[t]=s[t]);for(let t=0;t<o;t++){let n=e[t];if(n===`auto`||n.endsWith(`fr`))continue;let r=parseInt(n,10);!isNaN(r)&&r>0&&(c[t]=r)}for(let t=0;t<o;t++)c[t]<1&&!e[t].endsWith(`fr`)&&(c[t]=1);let l=Math.max(0,o-1)*i,u=c.reduce((e,t)=>e+t,0),d=Math.max(0,r-u-l),f=0;for(let t of e)f+=Z(t);if(f>0){let t=d/f,n=[],r=0;for(let i=0;i<o;i++){let a=Z(e[i]);if(a>0){let e=Math.floor(t*a);c[i]=e,r+=e,n.push(i)}}let i=d-r;for(let e=0;i>0&&e<n.length;e++)c[n[e]]+=1,i--}return c}function Fn(e,t,n,r,i,a){let o=e.length,s=Nn(o,t,n,a),c=Array.from({length:o});for(let t=0;t<o;t++){let n=e[t];if(n!==`auto`&&!n.endsWith(`fr`)){let e=parseInt(n,10);c[t]=!isNaN(e)&&e>0?e:s[t]}else c[t]=s[t]}for(let i of t)if(!X(i))for(let t=0;t<i.length;t++){let a=i[t];if(!a.spanStart||a.spanSize<=1||a.segment===`.`)continue;let o=z(n[a.segment]||``),s=kn(c,t,a.spanSize,r);if(o>s){let n=o-s,r=[];for(let n=0;n<a.spanSize;n++)Z(e[t+n])>0&&r.push(t+n);if(r.length>0)On(n,r,c);else{let e=[];for(let n=0;n<a.spanSize;n++)e.push(t+n);On(n,e,c)}}}for(let e=0;e<o;e++)c[e]<1&&(c[e]=1);let l=0;for(let e=0;e<o;e++)l+=c[e];let u=Math.max(0,o-1)*r,d=2+Math.max(0,1-i)*2,f=o*i*2;return{panelWidth:l+u+d+f,colWidths:c}}function In(e,t,n){switch(n){case`right`:return Dt(e,t);case`center`:return Ot(e,t);default:return Et(e,t)}}function Ln(e,t,n,r,i,a=0,o){let s=[],c=z(i),l=a;for(let i=0;i<e.length;i++){let a=e[i];if(!a.spanStart)continue;let u=kn(t,i,a.spanSize,c),d=i+a.spanSize-1,f=n[i]===`right`?o?.[i]??0:0,p=n[d]===`left`?o?.[d]??0:0,m=l-f,h=l-p,g=0;for(let e=i;e<d;e++){let t=n[e]===`left`?o?.[e]??0:0,r=n[e+1]===`right`?o?.[e+1]??0:0;g+=l-t+(l-r)}let _=u+g;if(a.segment===`.`)s.push(` `.repeat(_+m+h));else{let e=In(V(r[a.segment]||``,_),_,n[i]||`left`),t=m>0?` `.repeat(m):``,o=h>0?` `.repeat(h):``;s.push(t+e+o)}}return s.join(i)}function Rn(e,t,n){let r=n||e.horizontal;return e.teeLeft+r.repeat(t)+e.teeRight}function zn(e,t,n,r,i){let a=e.minWidth??32,o=e.maxWidth??1/0,s=e.separator?.column??` `,c=e.separator?.divider,l=z(s),u=e.fitContent??!1,d=e.padding?.horizontal??0,f=e.widthReserve??45,p=Math.min(o,Math.max(a,r-f)),m=An(e.breakpoints,p),h;h=u?o===1/0?r:Math.min(r,o):p;let g=Mn(jn(m.areas),t);if(g.length===0)return{lines:[],panelWidth:h};let _,v=new Set(Dn);if(e.segments)for(let t of Object.keys(e.segments))v.add(t);if(u){let e=Fn(m.columns,g,t,l,d,v);h=Math.min(o,Math.max(a,e.panelWidth)),_=e.colWidths;let n=h-e.panelWidth;if(n>0){let e=0;for(let t of m.columns)e+=Z(t);if(e>0){let t=[],r=0;for(let i=0;i<_.length;i++){let a=Z(m.columns[i]);if(a>0){let o=Math.floor(n*a/e);_[i]+=o,r+=o,t.push(i)}}let i=n-r;for(let e=0;i>0&&e<t.length;e++)_[t[e]]+=1,i--}}}else{let e=h-2-Math.max(0,1-d)*2-m.columns.length*d*2;_=Pn(m.columns,g,t,e,l,v)}let y=h-2,b=Math.max(1,d)-d,x=b>0?` `.repeat(b):``,S=y-b*2,C=m.align||m.columns.map(()=>`left`),w=Array(m.columns.length).fill(0);if(d>0){let e=Array(m.columns.length).fill(0);for(let n of g)if(!X(n))for(let r=0;r<n.length;r++){let i=n[r];if(!i.spanStart||i.spanSize!==1||i.segment===`.`||v.has(i.segment))continue;let a=z(t[i.segment]||``);a>e[r]&&(e[r]=a)}let n=0;for(let t=0;t<m.columns.length;t++){if(Z(m.columns[t])>0||e[t]<=0)continue;let r=_[t]-e[t];r<=0||(w[t]=Math.min(d,r),n+=w[t])}if(n>0){let e=0;for(let t of m.columns)e+=Z(t);if(e>0){let t=[],r=0;for(let i=0;i<_.length;i++){let a=Z(m.columns[i]);if(a>0){let o=Math.floor(n*a/e);_[i]+=o,r+=o,t.push(i)}}let i=n-r;for(let e=0;i>0&&e<t.length;e++)_[t[e]]+=1,i--}}}function ee(e,t){let n=0;for(let r=e;r<e+t-1;r++){let e=C[r]===`left`?w[r]??0:0,t=C[r+1]===`right`?w[r+1]??0:0;n+=d-e+(d-t)}return n}if(i){let e=new Set;for(let n of g)if(!X(n))for(let r=0;r<n.length;r++){let a=n[r];if(!a.spanStart||a.segment===`.`||a.segment===`---`||e.has(a.segment))continue;e.add(a.segment);let o=kn(_,r,a.spanSize,l),s=ee(r,a.spanSize),c=i(a.segment,o+s);c!==void 0&&(t[a.segment]=c)}}let T=Mn(g,t);if(T.length===0)return{lines:[],panelWidth:h};let E=[];for(let e of T)if(X(e))E.push(Rn(n,y,c));else{let r=Et(V(Ln(e,_,C,t,s,d,w),S),S);E.push(n.vertical+x+r+x+n.vertical)}return{lines:E,panelWidth:h}}const Bn=`\x1B[?2026h`,Vn=`\x1B[?2026l`,Hn=`\x1B[0m`;function Un(e){return e>=80?`wide`:e>=55?`medium`:`narrow`}function Wn(e){return e&&e>0?Math.max(32,e):80}async function Gn(e,t,n,r,i,a){let o=(i.display.charset||`unicode`)===`text`?gt:ft,s=e.colors;if(i.display.tui){let r=i.display.tui,c=r.terminalWidth??a?.rawTerminalWidth??120,l;l=typeof r.box==`string`?ht[r.box]??t:r.box?{...t,...r.box}:t;let u=Math.max(r.minWidth??32,c-(r.widthReserve??45))-2,d=u-2,f=bn(e,{lines:[],data:e,box:l,contentWidth:d,innerWidth:u,sym:o,config:i,reset:n,colors:s}),p=f.data,m=f.templates,h=s.partFg,g=zn(r,p,l,c,(t,r)=>{if(t===`context`)return Lt(e,r,o,n,s)??``;if(t===`context.bar`)return Pt(e,r,o,n,s,h);if(t===`block.bar`)return Ft(e,r,o,n,s,i,h);if(t===`weekly.bar`)return It(e,r,o,n,s,h);let a=m[t];if(a)return yn(a.items,a.gap,a.justify,r)}),_=g.panelWidth-2,v=r.footer?.left?G(r.footer.left,e,p):void 0,y=r.footer?.right?G(r.footer.right,e,p):void 0,b=[];return b.push(jt(e,l,_,r.title,p)),b.push(...g.lines),b.push(kt(l,_,v,y)),Bn+b.map(e=>Hn+e).join(`
|
|
9
|
+
`)+Vn}let c=Wn(r),l=c-2,u=l-2,d=Un(c),f=[];f.push(jt(e,t,l));let p=Lt(e,u,o,n,s);p&&f.push(H(t,p,l));let m={lines:f,data:e,box:t,contentWidth:u,innerWidth:l,sym:o,config:i,reset:n,colors:s};return d===`wide`?(xn(m),Sn(m)):d===`medium`?(Cn(m),wn(m)):(Tn(m),En(m)),f.push(kt(t,l)),Bn+f.map(e=>Hn+e).join(`
|
|
10
|
+
`)+Vn}var Kn=class{symbols;_usageProvider;_blockProvider;_todayProvider;_contextProvider;_gitService;_tmuxService;_metricsProvider;_cacheTimerProvider;_segmentRenderer;constructor(e){this.config=e,this.symbols=this.initializeSymbols()}get usageProvider(){return this._usageProvider||=new Re,this._usageProvider}get blockProvider(){return this._blockProvider||=new ct,this._blockProvider}get todayProvider(){return this._todayProvider||=new dt,this._todayProvider}get contextProvider(){return this._contextProvider||=new ze(this.config),this._contextProvider}get gitService(){return this._gitService||=new ye,this._gitService}get tmuxService(){return this._tmuxService||=new xe,this._tmuxService}get metricsProvider(){return this._metricsProvider||=new Be,this._metricsProvider}get cacheTimerProvider(){return this._cacheTimerProvider||=new Ve,this._cacheTimerProvider}get segmentRenderer(){return this._segmentRenderer||=new st(this.config,this.symbols),this._segmentRenderer}needsSegmentInfo(e){return this.config.display.lines.some(t=>t.segments[e]?.enabled)}async generateStatusline(e){if(this.config.display.style===`tui`)return this.generateTuiStatusline(e);let t=this.needsSegmentInfo(`session`)?await this.usageProvider.getUsageInfo(e.session_id,e):null,n=this.needsSegmentInfo(`block`)?await this.blockProvider.getActiveBlockInfo(e):null,r=this.needsSegmentInfo(`today`)?await this.todayProvider.getTodayInfo():null,i=this.config.display.lines.map(e=>e.segments.context).find(e=>e?.enabled)?.autocompactBuffer??33e3,a=this.needsSegmentInfo(`context`)?await this.contextProvider.getContextInfo(e,i):null,o=this.needsSegmentInfo(`metrics`)?await this.metricsProvider.getMetricsInfo(e.session_id,e):null,s=this.needsSegmentInfo(`cacheTimer`)?await this.cacheTimerProvider.getCacheTimerInfo(e):null;return this.config.display.autoWrap?this.generateAutoWrapStatusline(e,t,n,r,a,o,s):(await Promise.all(this.config.display.lines.map(i=>this.renderLine(i,e,t,n,r,a,o,s)))).filter(e=>e.length>0).join(`
|
|
11
|
+
`)}async generateAutoWrapStatusline(e,t,n,r,i,a,o){let s=this.getThemeColors(),c=e.workspace?.current_dir||e.cwd||`/`,l=wt(),u=[];for(let d of this.config.display.lines){let f=Object.entries(d.segments).filter(([e,t])=>t?.enabled).map(([e,t])=>({type:e,config:t})),p=[];for(let l of f){let u=await this.renderSegment(l,e,t,n,r,i,a,o,s,c);u&&p.push({type:l.type,text:u.text,bgColor:u.bgColor,fgColor:u.fgColor,bold:u.bold})}if(p.length===0)continue;if(!l||l<=0){u.push(this.buildLineFromSegments(p,s));continue}let m=[],h=0;for(let e of p){let t=this.calculateSegmentWidth(e,m.length===0);m.length>0&&h+t>l&&(u.push(this.buildLineFromSegments(m,s)),m=[],h=0),m.push(e),h+=t}m.length>0&&u.push(this.buildLineFromSegments(m,s))}return u.join(`
|
|
12
|
+
`)}async generateTuiStatusline(e){let t=this.getThemeColors(),n=wt(),r=e.workspace?.current_dir||e.cwd||`/`,i=(this.config.display.charset||`unicode`)===`text`?mt:pt,a=this.config.display.lines.map(e=>e.segments.context).find(e=>e?.enabled)?.autocompactBuffer??33e3,o=await Promise.allSettled([this.usageProvider.getUsageInfo(e.session_id,e),this.blockProvider.getActiveBlockInfo(e),this.todayProvider.getTodayInfo(),this.contextProvider.getContextInfo(e,a),this.metricsProvider.getMetricsInfo(e.session_id,e),this.gitService.getGitInfo(r,{showSha:!1,showWorkingTree:!0,showOperation:!1,showTag:!1,showTimeSinceCommit:!1,showStashCount:!1,showUpstream:!1,showRepoName:!1},e.workspace?.project_dir),this.tmuxService.getSessionId(),this.cacheTimerProvider.getCacheTimerInfo(e)]),s=e=>e.status===`fulfilled`?e.value:null,[c,l,u,d,f,p,m,h]=[s(o[0]),s(o[1]),s(o[2]),s(o[3]),s(o[4]),s(o[5]),s(o[6]),s(o[7])];return Gn({hookData:e,usageInfo:c,blockInfo:l,todayInfo:u,contextInfo:d,metricsInfo:f,gitInfo:p,cacheTimerInfo:h,tmuxSessionId:m,colors:t},i,t.reset,n,this.config,{rawTerminalWidth:Tt()})}calculateSegmentWidth(e,t){let n=this.config.display.style===`capsule`,r=z(e.text),i=(this.config.display.padding??1)*2;return n?r+(2+i+(t?0:1)):r+(1+i)}buildLineFromSegments(e,t){let n=this.config.display.style===`capsule`,r=t.reset;for(let i=0;i<e.length;i++){let a=e[i];if(!a)continue;let o=i===0,s=i===e.length-1?null:e[i+1];n&&!o&&(r+=` `);let c=a.bold??this.getSegmentBoldFlag(a.type,t);r+=this.formatSegment(a.bgColor,a.fgColor,a.text,s?.bgColor,t,c)}return r}async renderLine(e,t,n,r,i,a,o,s){let c=this.getThemeColors(),l=t.workspace?.current_dir||t.cwd||`/`,u=Object.entries(e.segments).filter(([e,t])=>t?.enabled).map(([e,t])=>({type:e,config:t})),d=[];for(let e of u){let u=await this.renderSegment(e,t,n,r,i,a,o,s,c,l);u&&d.push({type:e.type,text:u.text,bgColor:u.bgColor,fgColor:u.fgColor,bold:u.bold})}return this.buildLineFromSegments(d,c)}async renderSegment(e,t,n,r,i,a,o,s,c,l){return e.type===`directory`?this.segmentRenderer.renderDirectory(t,c,e.config):e.type===`model`?this.segmentRenderer.renderModel(t,c,e.config):e.type===`git`?await this.renderGitSegment(e.config,t,c,l):e.type===`session`?this.renderSessionSegment(e.config,n,c):e.type===`sessionId`?t.session_id?this.segmentRenderer.renderSessionId(t.session_id,c,e.config):null:e.type===`tmux`?await this.renderTmuxSegment(c):e.type===`context`?this.renderContextSegment(e.config,a,c):e.type===`metrics`?this.renderMetricsSegment(e.config,o,r,c):e.type===`block`?this.renderBlockSegment(e.config,r,c):e.type===`today`?this.renderTodaySegment(e.config,i,c):e.type===`version`?this.renderVersionSegment(e.config,t,c):e.type===`env`?this.segmentRenderer.renderEnv(c,e.config):e.type===`weekly`?this.segmentRenderer.renderWeekly(t,c,e.config):e.type===`agent`?this.segmentRenderer.renderAgent(t,c,e.config):e.type===`thinking`?this.segmentRenderer.renderThinking(t,c,e.config):e.type===`cacheTimer`&&s?this.segmentRenderer.renderCacheTimer(s,c,e.config):null}async renderGitSegment(e,t,n,r){if(!this.needsSegmentInfo(`git`))return null;let i=await this.gitService.getGitInfo(r,{showSha:e?.showSha,showWorkingTree:e?.showWorkingTree,showOperation:e?.showOperation,showTag:e?.showTag,showTimeSinceCommit:e?.showTimeSinceCommit,showStashCount:e?.showStashCount,showUpstream:e?.showUpstream,showRepoName:e?.showRepoName},t.workspace?.project_dir);return i?this.segmentRenderer.renderGit(i,n,e):null}renderSessionSegment(e,t,n){return t?this.segmentRenderer.renderSession(t,n,e):null}async renderTmuxSegment(e){if(!this.needsSegmentInfo(`tmux`))return null;let t=await this.tmuxService.getSessionId();return this.segmentRenderer.renderTmux(t,e)}renderContextSegment(e,t,n){return this.needsSegmentInfo(`context`)?this.segmentRenderer.renderContext(t,n,e):null}renderMetricsSegment(e,t,n,r){return this.segmentRenderer.renderMetrics(t,r,e)}renderBlockSegment(e,t,n){return t?this.segmentRenderer.renderBlock(t,n,e):null}renderTodaySegment(e,t,n){return t?this.segmentRenderer.renderToday(t,n,e):null}renderVersionSegment(e,t,n){return this.segmentRenderer.renderVersion(t,n,e)}initializeSymbols(){let e=this.config.display.style,t=this.config.display.charset||`unicode`,n=e===`minimal`,r=e===`capsule`,i=t===`text`?gt:ft;return{right:n?``:r?i.right_rounded:i.right,left:r?i.left_rounded:``,branch:i.branch,model:i.model,git_clean:i.git_clean,git_dirty:i.git_dirty,git_conflicts:i.git_conflicts,git_ahead:i.git_ahead,git_behind:i.git_behind,git_worktree:i.git_worktree,git_tag:i.git_tag,git_sha:i.git_sha,git_upstream:i.git_upstream,git_stash:i.git_stash,git_time:i.git_time,session_cost:i.session_cost,block_cost:i.block_cost,today_cost:i.today_cost,context_time:i.context_time,metrics_response:i.metrics_response,metrics_last_response:i.metrics_last_response,metrics_duration:i.metrics_duration,metrics_messages:i.metrics_messages,metrics_lines_added:i.metrics_lines_added,metrics_lines_removed:i.metrics_lines_removed,metrics_burn:i.metrics_burn,version:i.version,bar_filled:i.bar_filled,bar_empty:i.bar_empty,env:i.env,session_id:i.session_id,weekly_cost:i.weekly_cost,agent:i.agent,thinking:i.thinking,cache_timer:i.cache_timer}}getThemeColors(){let e=this.config.theme,t,n=this.config.display.colorCompatibility||`auto`,r=n===`auto`?E():n;if(e===`custom`){if(t=this.config.colors?.custom,!t)throw Error(`Custom theme selected but no colors provided in configuration`)}else t=_e(e,r),t||=(console.warn(`Built-in theme '${e}' not found, falling back to 'dark' theme`),_e(`dark`,r));let i=(e,t)=>r===`none`?``:r===`ansi`?ee(e,t):r===`ansi256`?w(e,t):S(e,t),a=_e(`dark`,r),o=this.config.display.style===`tui`,s=e===`light`?`#f0f0f0`:`#1e1e1e`,c=e=>{let n=a[e],c=t[e],l={fg:c?.fg||n.fg,bg:c?.bg||n.bg},u=l.fg;o&&T(u,s)<60&&(u=l.bg);let d=r!==`none`&&!!(c?.bold??n.bold);return{bg:i(l.bg,!0),fg:i(u,!1),bold:d}},l=c(`directory`),u=c(`git`),d=c(`model`),f=c(`session`),p=c(`block`),m=c(`today`),h=c(`tmux`),g=c(`context`),_=c(`contextWarning`),v=c(`contextCritical`),y=c(`metrics`),b=c(`version`),x=c(`env`),C=c(`weekly`),D=c(`agent`),O=c(`thinking`),k=c(`cacheTimer`);return{reset:r===`none`?``:`\x1B[0m`,modeBg:l.bg,modeFg:l.fg,modeBold:l.bold,gitBg:u.bg,gitFg:u.fg,gitBold:u.bold,modelBg:d.bg,modelFg:d.fg,modelBold:d.bold,sessionBg:f.bg,sessionFg:f.fg,sessionBold:f.bold,blockBg:p.bg,blockFg:p.fg,blockBold:p.bold,todayBg:m.bg,todayFg:m.fg,todayBold:m.bold,tmuxBg:h.bg,tmuxFg:h.fg,tmuxBold:h.bold,contextBg:g.bg,contextFg:g.fg,contextBold:g.bold,contextWarningBg:_.bg,contextWarningFg:_.fg,contextWarningBold:_.bold,contextCriticalBg:v.bg,contextCriticalFg:v.fg,contextCriticalBold:v.bold,metricsBg:y.bg,metricsFg:y.fg,metricsBold:y.bold,versionBg:b.bg,versionFg:b.fg,versionBold:b.bold,envBg:x.bg,envFg:x.fg,envBold:x.bold,weeklyBg:C.bg,weeklyFg:C.fg,weeklyBold:C.bold,agentBg:D.bg,agentFg:D.fg,agentBold:D.bold,thinkingBg:O.bg,thinkingFg:O.fg,thinkingBold:O.bold,cacheTimerBg:k.bg,cacheTimerFg:k.fg,cacheTimerBold:k.bold,partFg:e===`custom`?this.resolvePartColors(i):{}}}resolvePartColors(e){let t=this.config.colors?.custom;if(!t)return{};let n={};for(let r of Object.keys(t)){let i=t[r];i?.fg&&(n[r]=e(i.fg,!1))}return n}getSegmentBgColor(e,t){switch(e){case`directory`:return t.modeBg;case`git`:return t.gitBg;case`model`:return t.modelBg;case`session`:case`sessionId`:return t.sessionBg;case`block`:return t.blockBg;case`today`:return t.todayBg;case`tmux`:return t.tmuxBg;case`context`:return t.contextBg;case`metrics`:return t.metricsBg;case`version`:return t.versionBg;case`env`:return t.envBg;case`weekly`:return t.weeklyBg;case`agent`:return t.agentBg;case`thinking`:return t.thinkingBg;case`cacheTimer`:return t.cacheTimerBg;default:return t.modeBg}}getSegmentBoldFlag(e,t){switch(e){case`directory`:return t.modeBold;case`git`:return t.gitBold;case`model`:return t.modelBold;case`session`:case`sessionId`:return t.sessionBold;case`block`:return t.blockBold;case`today`:return t.todayBold;case`tmux`:return t.tmuxBold;case`context`:return t.contextBold;case`metrics`:return t.metricsBold;case`version`:return t.versionBold;case`env`:return t.envBold;case`weekly`:return t.weeklyBold;case`agent`:return t.agentBold;case`thinking`:return t.thinkingBold;case`cacheTimer`:return t.cacheTimerBold;default:return t.modeBold}}formatSegment(e,t,n,r,i,a){let o=this.config.display.style===`capsule`,s=` `.repeat(this.config.display.padding??1),c=a&&i.reset!==``,l=c?`\x1B[1m`:``,u=c?`\x1B[22m`:``;if(o){let r=this.config.display.colorCompatibility||`auto`,a=C(e,(r===`auto`?E():r)===`ansi`);return`${`${a}${this.symbols.left}${i.reset}`}${`${e}${t}${l}${s}${n}${s}${u}${i.reset}`}${`${a}${this.symbols.right}${i.reset}`}`}let d=`${e}${t}${l}${s}${n}${s}${u}`,f=this.config.display.colorCompatibility||`auto`,p=(f===`auto`?E():f)===`ansi`;if(r){let t=C(e,p);d+=`${i.reset}${r}${t}${this.symbols.right}`}else d+=`${i.reset}${C(e,p)}${this.symbols.right}${i.reset}`;return d}};const qn={theme:`dark`,display:{style:`minimal`,charset:`unicode`,colorCompatibility:`auto`,autoWrap:!0,padding:1,lines:[{segments:{directory:{enabled:!0,style:`basename`},git:{enabled:!0,showSha:!1,showWorkingTree:!1,showOperation:!1,showTag:!1,showTimeSinceCommit:!1,showStashCount:!1,showUpstream:!1,showRepoName:!1},model:{enabled:!0},session:{enabled:!0,type:`tokens`,costSource:`calculated`},today:{enabled:!0,type:`cost`},block:{enabled:!1,type:`cost`,burnType:`cost`,displayStyle:`text`},weekly:{enabled:!1,displayStyle:`text`},version:{enabled:!1},tmux:{enabled:!1},sessionId:{enabled:!1,showIdLabel:!0},context:{enabled:!0,showPercentageOnly:!1,displayStyle:`text`,autocompactBuffer:33e3},metrics:{enabled:!1,showResponseTime:!0,showLastResponseTime:!0,showDuration:!0,showMessageCount:!0,showLinesAdded:!0,showLinesRemoved:!0},agent:{enabled:!0,showLabel:!1},thinking:{enabled:!1,showEnabled:!0,showEffort:!0},cacheTimer:{enabled:!1}}}]},budget:{session:{warningThreshold:80},today:{warningThreshold:80,amount:50},block:{warningThreshold:80,amount:15}},modelContextLimits:{default:2e5,sonnet:2e5,opus:2e5}},Jn=new Set([`context`,`block`,`session`,`today`,`weekly`,`git`,`dir`,`model`,`version`,`tmux`,`metrics`,`activity`,`env`,`agent`,`thinking`,`cacheTimer`]),Yn={session:[`icon`,`label`,`cost`,`tokens`,`budget`],block:[`icon`,`label`,`value`,`time`,`budget`,`bar`],today:[`icon`,`cost`,`label`,`budget`],weekly:[`icon`,`label`,`pct`,`time`,`bar`],git:[`icon`,`headVal`,`branch`,`status`,`ahead`,`behind`,`working`,`head`],context:[`icon`,`label`,`bar`,`pct`,`tokens`],metrics:[`response`,`responseIcon`,`responseVal`,`lastResponse`,`lastResponseIcon`,`lastResponseVal`,`added`,`addedIcon`,`addedVal`,`removed`,`removedIcon`,`removedVal`],activity:[`icon`,`duration`,`durationIcon`,`durationVal`,`messages`,`messagesIcon`,`messagesVal`],model:[`icon`,`value`],version:[`icon`,`value`],tmux:[`label`,`value`],dir:[`icon`,`value`],env:[`prefix`,`value`],agent:[`icon`,`name`],thinking:[`icon`,`enabled`,`effort`],cacheTimer:[`icon`,`value`]};function Xn(e){if(e===`.`||e===`---`||Jn.has(e))return!0;let t=e.indexOf(`.`);if(t===-1)return!1;let n=e.slice(0,t),r=e.slice(t+1);if(!n||!r)return!1;let i=Yn[n];return i?i.includes(r):!1}function Zn(e){return[`light`,`dark`,`nord`,`tokyo-night`,`rose-pine`,`gruvbox`,`custom`].includes(e)}function Qn(e){return e===`minimal`||e===`powerline`||e===`capsule`||e===`tui`}function $n(e){return e===`unicode`||e===`text`}function Q(e,t){for(let n=0;n<e.length;n++){let r=e[n];if(r===t&&n+1<e.length)return e[n+1];if(r?.startsWith(`${t}=`))return r.split(`=`)[1]}}function $(e,t){let n={...e};for(let e in t){let r=t[e];r!==void 0&&(typeof r==`object`&&r&&!Array.isArray(r)?n[e]=$(n[e]||{},r):n[e]=r)}return n}function er(e,t){return e?o.existsSync(e)?e:null:[...t?[l.join(t,`.claude-powerline.json`)]:[],l.join(process.cwd(),`.claude-powerline.json`),l.join(m.homedir(),`.claude`,`claude-powerline.json`),l.join(m.homedir(),`.config`,`claude-powerline`,`config.json`)].find(o.existsSync)||null}function tr(e){try{let t=o.readFileSync(e,`utf-8`);return JSON.parse(t)}catch(t){throw Error(`Failed to load config file ${e}: ${t instanceof Error?t.message:String(t)}`)}}function nr(){let e={},t={},n=process.env.CLAUDE_POWERLINE_THEME;n&&Zn(n)&&(e.theme=n);let r=process.env.CLAUDE_POWERLINE_STYLE;return r&&(Qn(r)?t.style=r:(console.warn(`Invalid display style '${r}' from environment variable, falling back to 'minimal'`),t.style=`minimal`)),Object.keys(t).length>0&&(e.display=t),e}function rr(){return process.env.CLAUDE_POWERLINE_CONFIG}function ir(e){let t={},n={},r=Q(e,`--theme`);r&&Zn(r)&&(t.theme=r);let i=Q(e,`--style`);i&&(Qn(i)?n.style=i:(console.warn(`Invalid display style '${i}' from CLI argument, falling back to 'minimal'`),n.style=`minimal`));let a=Q(e,`--charset`);return a&&($n(a)?n.charset=a:(console.warn(`Invalid charset '${a}' from CLI argument, falling back to 'unicode'`),n.charset=`unicode`)),Object.keys(n).length>0&&(t.display=n),t}function ar(e){if(typeof e.box==`string`&&!ht[e.box]){let t=Object.keys(ht).join(`, `);return`unknown box preset "${e.box}" (valid: ${t})`}if(!e.breakpoints||!Array.isArray(e.breakpoints)||e.breakpoints.length===0)return`grid config must have at least one breakpoint`;let t=new Set;for(let n=0;n<e.breakpoints.length;n++){let r=e.breakpoints[n],i=`breakpoint[${n}]`;if(typeof r.minWidth!=`number`||r.minWidth<0)return`${i}: minWidth must be a non-negative number`;if(t.has(r.minWidth))return`${i}: duplicate minWidth ${r.minWidth} (each breakpoint must have a unique minWidth)`;if(t.add(r.minWidth),!r.areas||!Array.isArray(r.areas)||r.areas.length===0)return`${i}: areas must be a non-empty array of strings`;if(!r.columns||!Array.isArray(r.columns)||r.columns.length===0)return`${i}: columns must be a non-empty array`;let a=r.columns.length;for(let e of r.columns){if(typeof e!=`string`)return`${i}: column definition must be a string`;if(!/^(\d+fr|\d+|auto)$/.test(e))return`${i}: invalid column definition "${e}" (use "auto", "Nfr", or a fixed integer)`}if(r.align!==void 0){if(!Array.isArray(r.align))return`${i}: align must be an array`;if(r.align.length!==a)return`${i}: align length (${r.align.length}) must match columns length (${a})`;for(let e of r.align)if(e!==`left`&&e!==`center`&&e!==`right`)return`${i}: invalid align value "${e}"`}let o=new Set;for(let t=0;t<r.areas.length;t++){let n=r.areas[t];if(n.trim()===`---`)continue;let s=n.trim().split(/\s+/);if(s.length!==a)return`${i}: row "${n}" has ${s.length} cells but expected ${a} columns`;let c=e.segments?new Set(Object.keys(e.segments)):new Set,l=``,u=``;for(let e of s){if(e!==`.`){if(!Xn(e)&&!c.has(e))return`${i}: unknown segment name "${e}"`;if(e!==u&&o.has(e))return`${i}: segment "${e}" appears on multiple rows`}e!==l&&(u=e),l=e}let d=new Map;for(let e=0;e<s.length;e++){let t=s[e];if(t===`.`||t===`---`)continue;let r=d.get(t);if(r!==void 0&&r!==e-1)return`${i}: segment "${t}" has non-contiguous span in row "${n}"`;d.set(t,e)}for(let e of s)e!==`.`&&e!==`---`&&o.add(e)}}if(e.segments)for(let[t,n]of Object.entries(e.segments)){if(!n.items||!Array.isArray(n.items))return`segments["${t}"]: items must be an array`;if(n.justify!==void 0&&n.justify!==`start`&&n.justify!==`between`)return`segments["${t}"]: invalid justify value "${n.justify}" (use "start" or "between")`}return null}function or(e=process.argv,t){let n=JSON.parse(JSON.stringify(qn)),r=Q(e,`--config`)||rr(),i=er(r?.startsWith(`~`)?r.replace(`~`,m.homedir()):r,t);if(i)try{let e=tr(i);n=$(n,e)}catch(e){console.warn(`Warning: ${e instanceof Error?e.message:String(e)}`)}n.display?.style&&!Qn(n.display.style)&&(console.warn(`Invalid display style '${n.display.style}' in config file, falling back to 'minimal'`),n.display.style=`minimal`),n.display?.charset&&!$n(n.display.charset)&&(console.warn(`Invalid charset '${n.display.charset}' in config file, falling back to 'unicode'`),n.display.charset=`unicode`),n.theme&&!Zn(n.theme)&&(console.warn(`Invalid theme '${n.theme}' in config file, falling back to 'dark'`),n.theme=`dark`);let a=nr();n=$(n,a);let o=ir(e);if(n=$(n,o),n.display?.tui){let e=ar(n.display.tui);e&&(process.stderr.write(`Warning: invalid grid config: ${e}. Falling back to hardcoded layout.\n`),delete n.display.tui)}return n}const sr=or;function cr(){console.log(`
|
|
12
13
|
claude-powerline - Beautiful powerline statusline for Claude Code
|
|
13
14
|
|
|
14
15
|
Usage: claude-powerline [options]
|
|
@@ -27,7 +28,7 @@ Claude Code Options (for settings.json):
|
|
|
27
28
|
|
|
28
29
|
See example config at: https://github.com/Owloops/claude-powerline/blob/main/.claude-powerline.json
|
|
29
30
|
|
|
30
|
-
`)}async function
|
|
31
|
+
`)}async function lr(){try{(e.argv.includes(`--help`)||e.argv.includes(`-h`))&&(cr(),e.exit(0)),e.stdin.isTTY===!0&&(console.error(`Error: This tool requires input from Claude Code
|
|
31
32
|
|
|
32
33
|
claude-powerline is designed to be used as a Claude Code statusLine command.
|
|
33
34
|
It reads hook data from stdin and outputs formatted statusline.
|
|
@@ -43,4 +44,4 @@ Add to ~/.claude/settings.json:
|
|
|
43
44
|
Run with --help for more options.
|
|
44
45
|
|
|
45
46
|
To test output manually:
|
|
46
|
-
echo '{"session_id":"test-session","workspace":{"project_dir":"/path/to/project"},"model":{"id":"claude-sonnet-4-5","display_name":"Claude"}}' | claude-powerline --style=powerline`),e.exit(1)),
|
|
47
|
+
echo '{"session_id":"test-session","workspace":{"project_dir":"/path/to/project"},"model":{"id":"claude-sonnet-4-5","display_name":"Claude"}}' | claude-powerline --style=powerline`),e.exit(1)),A(`Working directory: ${e.cwd()}`),A(`Process args:`,e.argv);let n=await t(e.stdin);A(`Received hook data:`,JSON.stringify(n,null,2)),n||(console.error(`Error: No input data received from stdin`),cr(),e.exit(1));let r=n.workspace?.project_dir,i=await new Kn(sr(e.argv,r)).generateStatusline(n);console.log(i)}catch(t){let n=t instanceof Error?t.message:String(t);console.error(`Error generating statusline:`,n),e.exit(1)}}lr();export{};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@owloops/claude-powerline",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.26.0",
|
|
4
4
|
"description": "Beautiful vim-style powerline statusline for Claude Code with real-time usage tracking, git integration, and custom themes",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.mjs",
|
package/src/browser.ts
CHANGED
|
@@ -32,6 +32,7 @@ export type { ContextInfo } from "./segments/context";
|
|
|
32
32
|
export type { MetricsInfo } from "./segments/metrics";
|
|
33
33
|
export type { BlockInfo } from "./segments/block";
|
|
34
34
|
export type { TodayInfo } from "./segments/today";
|
|
35
|
+
export type { CacheTimerInfo } from "./segments/cacheTimer";
|
|
35
36
|
|
|
36
37
|
export type {
|
|
37
38
|
SegmentConfig,
|
|
@@ -47,6 +48,9 @@ export type {
|
|
|
47
48
|
SessionIdSegmentConfig,
|
|
48
49
|
EnvSegmentConfig,
|
|
49
50
|
WeeklySegmentConfig,
|
|
51
|
+
AgentSegmentConfig,
|
|
52
|
+
ThinkingSegmentConfig,
|
|
53
|
+
CacheTimerSegmentConfig,
|
|
50
54
|
PowerlineSymbols,
|
|
51
55
|
SegmentData,
|
|
52
56
|
BarDisplayStyle,
|
|
@@ -135,6 +139,7 @@ export {
|
|
|
135
139
|
formatTimeRemaining,
|
|
136
140
|
formatLongTimeRemaining,
|
|
137
141
|
minutesUntilReset,
|
|
142
|
+
formatCacheTimerElapsed,
|
|
138
143
|
} from "./utils/formatters";
|
|
139
144
|
export { getBudgetStatus } from "./utils/budget";
|
|
140
145
|
|
package/src/config/defaults.ts
CHANGED
|
@@ -54,6 +54,9 @@ export const DEFAULT_CONFIG: PowerlineConfig = {
|
|
|
54
54
|
showLinesAdded: true,
|
|
55
55
|
showLinesRemoved: true,
|
|
56
56
|
},
|
|
57
|
+
agent: { enabled: true, showLabel: false },
|
|
58
|
+
thinking: { enabled: false, showEnabled: true, showEffort: true },
|
|
59
|
+
cacheTimer: { enabled: false },
|
|
57
60
|
},
|
|
58
61
|
},
|
|
59
62
|
],
|
package/src/config/loader.ts
CHANGED
|
@@ -20,6 +20,9 @@ import type {
|
|
|
20
20
|
SessionIdSegmentConfig,
|
|
21
21
|
EnvSegmentConfig,
|
|
22
22
|
WeeklySegmentConfig,
|
|
23
|
+
AgentSegmentConfig,
|
|
24
|
+
ThinkingSegmentConfig,
|
|
25
|
+
CacheTimerSegmentConfig,
|
|
23
26
|
} from "../segments/renderer";
|
|
24
27
|
|
|
25
28
|
export interface LineConfig {
|
|
@@ -37,6 +40,9 @@ export interface LineConfig {
|
|
|
37
40
|
sessionId?: SessionIdSegmentConfig;
|
|
38
41
|
env?: EnvSegmentConfig;
|
|
39
42
|
weekly?: WeeklySegmentConfig;
|
|
43
|
+
agent?: AgentSegmentConfig;
|
|
44
|
+
thinking?: ThinkingSegmentConfig;
|
|
45
|
+
cacheTimer?: CacheTimerSegmentConfig;
|
|
40
46
|
};
|
|
41
47
|
}
|
|
42
48
|
|
|
@@ -47,6 +53,7 @@ export interface DisplayConfig {
|
|
|
47
53
|
colorCompatibility?: "auto" | "ansi" | "ansi256" | "truecolor";
|
|
48
54
|
autoWrap?: boolean;
|
|
49
55
|
padding?: number;
|
|
56
|
+
showIcons?: boolean;
|
|
50
57
|
tui?: TuiGridConfig;
|
|
51
58
|
}
|
|
52
59
|
|
|
@@ -54,6 +61,8 @@ export interface BudgetItemConfig {
|
|
|
54
61
|
amount?: number;
|
|
55
62
|
warningThreshold?: number;
|
|
56
63
|
type?: "cost" | "tokens";
|
|
64
|
+
showPercentage?: boolean;
|
|
65
|
+
showValue?: boolean;
|
|
57
66
|
}
|
|
58
67
|
|
|
59
68
|
export interface BudgetConfig {
|