@owloops/claude-powerline 1.24.4 → 1.25.1

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.
Files changed (46) hide show
  1. package/dist/browser.d.ts +676 -0
  2. package/dist/browser.js +3 -0
  3. package/dist/index.mjs +10 -10
  4. package/package.json +9 -1
  5. package/plugin/templates/config-tui-compact.json +4 -4
  6. package/plugin/templates/config-tui-full.json +5 -5
  7. package/plugin/templates/config-tui-standard.json +5 -5
  8. package/src/browser.ts +203 -0
  9. package/src/config/defaults.ts +79 -0
  10. package/src/config/loader.ts +462 -0
  11. package/src/index.ts +90 -0
  12. package/src/powerline.ts +904 -0
  13. package/src/segments/block.ts +31 -0
  14. package/src/segments/context.ts +221 -0
  15. package/src/segments/git.ts +492 -0
  16. package/src/segments/index.ts +25 -0
  17. package/src/segments/metrics.ts +175 -0
  18. package/src/segments/pricing.ts +454 -0
  19. package/src/segments/renderer.ts +796 -0
  20. package/src/segments/session.ts +207 -0
  21. package/src/segments/tmux.ts +35 -0
  22. package/src/segments/today.ts +191 -0
  23. package/src/themes/dark.ts +52 -0
  24. package/src/themes/gruvbox.ts +52 -0
  25. package/src/themes/index.ts +131 -0
  26. package/src/themes/light.ts +52 -0
  27. package/src/themes/nord.ts +52 -0
  28. package/src/themes/rose-pine.ts +52 -0
  29. package/src/themes/tokyo-night.ts +52 -0
  30. package/src/tui/grid.ts +712 -0
  31. package/src/tui/index.ts +4 -0
  32. package/src/tui/layouts.ts +285 -0
  33. package/src/tui/primitives.ts +175 -0
  34. package/src/tui/renderer.ts +206 -0
  35. package/src/tui/sections.ts +1080 -0
  36. package/src/tui/types.ts +181 -0
  37. package/src/utils/budget.ts +47 -0
  38. package/src/utils/cache.ts +247 -0
  39. package/src/utils/claude.ts +489 -0
  40. package/src/utils/color-support.ts +118 -0
  41. package/src/utils/colors.ts +120 -0
  42. package/src/utils/constants.ts +176 -0
  43. package/src/utils/formatters.ts +160 -0
  44. package/src/utils/logger.ts +5 -0
  45. package/src/utils/terminal-width.ts +117 -0
  46. package/src/utils/terminal.ts +11 -0
package/dist/index.mjs CHANGED
@@ -1,14 +1,14 @@
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 ee(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 S(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 te(){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`}function ne(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 re(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 ie(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)}const ae={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`}},oe={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`}},se={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`}},ce={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`}},le={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`}},ue={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`}},de={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`}},fe={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`}},pe={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`}},me={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`}},he={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`}},ge={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`}},_e={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`}},ve={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`}},ye={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`}},be={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`}},xe={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`}},Se={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`}},Ce={dark:ae,"dark-ansi256":oe,"dark-ansi":se,light:ce,"light-ansi256":le,"light-ansi":ue,nord:de,"nord-ansi256":fe,"nord-ansi":pe,"tokyo-night":me,"tokyo-night-ansi256":he,"tokyo-night-ansi":ge,"rose-pine":_e,"rose-pine-ansi256":ve,"rose-pine-ansi":ye,gruvbox:be,"gruvbox-ansi256":xe,"gruvbox-ansi":Se};function we(e,t){let n=Ce[e];if(!n)return null;if(t===`none`||t===`ansi`){let t=Ce[`${e}-ansi`];if(t)return t}if(t===`ansi256`){let t=Ce[`${e}-ansi256`];if(t)return t}return n}function C(e,...t){process.env.CLAUDE_POWERLINE_DEBUG&&console.error(`[DEBUG] ${e}`,...t)}const Te=a(r);var Ee=class{isGitRepo(e){try{return o.existsSync(l.join(e,`.git`))}catch{return!1}}async execGitAsync(e,t){return Te(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{C(`[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 C(`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{C(`[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 C(`Git ahead/behind command failed in ${e}:`,t),{ahead:0,behind:0}}}};const De=a(r);var Oe=class{async getSessionId(){try{if(!process.env.TMUX_PANE)return C(`TMUX_PANE not set, not in tmux session`),null;C(`Getting tmux session ID, TMUX_PANE: ${process.env.TMUX_PANE}`);let e=(await De(`tmux display-message -p '#S'`,{encoding:`utf8`,timeout:1e3})).stdout.trim();return C(`Tmux session ID: ${e||`empty`}`),e||null}catch(e){return C(`Error getting tmux session ID:`,e),null}}isInTmux(){return!!process.env.TMUX_PANE}};function w(){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 ke(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){C(`Failed to read projects directory ${e}:`,t)}}return t}async function Ae(e){let t=await ke(w());for(let n of t){let t=d(n,`${e}.jsonl`);if(c(t))return t}return null}async function je(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{C(`Failed to check agent file ${t}`)}}}catch(e){C(`Failed to read subagents directory ${r}:`,e)}return n}async function Me(e){try{return(await b(e)).mtime}catch{return null}}function Ne(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 T(e){try{let t=(await b(e)).size,n;return t>1048576?(C(`Using streaming parser for large file ${e} (${Math.round(t/1024)}KB)`),n=await Fe(e)):n=await Pe(e),C(`Parsed ${n.length} entries from ${e}`),n}catch(t){return C(`Failed to read file ${e}:`,t),[]}}async function Pe(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){C(`Failed to parse JSONL line: ${e}`);continue}return n}async function Fe(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){C(`Failed to parse JSONL line: ${e}`)}}),a.on(`close`,()=>{t(r)}),a.on(`error`,t=>{C(`Streaming parser error for ${e}:`,t),n(t)}),i.on(`error`,t=>{C(`File stream error for ${e}:`,t),n(t)})})}async function Ie(e){try{let t=await Me(e);return t?{filePath:e,mtime:t}:null}catch{return null}}async function Le(e,t){try{let n=await y(e,{withFileTypes:!0}),r=n.filter(e=>!e.isDirectory()&&e.name.endsWith(`.jsonl`)).map(t=>Ie(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=>Ie(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 C(`Failed to read project directory ${e}:`,t),[]}}async function Re(e,t,n=!1){let r=await ke(w()),i=new Set,a=r.map(e=>Le(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 T(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=Ne(e);t&&i.has(t)||(t&&i.add(t),d.push(e))}return d}var E=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 C(`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`?(C(`Removing stale lock file ${e} for dead process ${r}`),o.unlinkSync(t),!1):(C(`Error checking process ${r} for lock ${e}:`,n),!0)}}catch(t){return C(`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`}),C(`Lock acquired for ${e}`),!0}catch(e){if(e.code===`EEXIST`)await _(50);else throw e}return C(`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),C(`Lock released for ${e}`)}catch(t){t.code!==`ENOENT`&&C(`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){C(`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)){C(`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?(C(`[CACHE-HIT] ${e} disk cache: found`),this.deserializeDates(i.data)):(C(`${e} cache outdated: cache=${i.timestamp}, latest=${t}`),null)}catch(t){if(t.code===`ENOENT`)return C(`No shared ${e} usage cache found`),null;C(`Attempt ${i+1} failed to read ${e} cache: ${t.message}. Retrying...`),await _(75)}}return C(`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)){C(`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`),C(`[CACHE-SET] ${e} disk cache stored`)}catch(t){C(`Failed to save ${e} usage cache:`,t)}finally{await this.releaseLock(r)}}static async getLatestTranscriptMtime(){try{let e=await ke(w()),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 Me(l.join(n,r));e&&e.getTime()>t&&(t=e.getTime())}}catch(e){C(`Failed to read project directory ${n}:`,e);continue}return t}catch(e){return C(`Failed to get latest transcript mtime:`,e),Date.now()}}};const D={"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 ze=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 E.getUsageCache(`pricing`,e)}static async saveDiskCache(e){await E.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){C(`HTTP ${t.statusCode}: ${t.statusMessage}`),e(null);return}let r=``,i=0;t.on(`data`,t=>{if(i+=t.length,i>1048576){C(`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)?(C(`Fetched fresh pricing from GitHub for ${Object.keys(i).length} models`),C(`Pricing last updated: ${n?.updated||`unknown`}`),e(i)):(C(`Invalid pricing data structure`),e(null))}catch(t){C(`Failed to parse JSON:`,t),e(null)}}),t.on(`error`,t=>{C(`Response error:`,t),e(null)})});n.on(`error`,t=>{C(`Request error:`,t),e(null)}),n.on(`timeout`,()=>{C(`Request timeout`),n.destroy(),e(null)}),n.end()})}static async getCurrentPricing(){if(this.executionCache!==null)return C(`[CACHE-HIT] Pricing execution cache: ${Object.keys(this.executionCache).length} models`),this.executionCache;let e=await this.loadDiskCache();if(e)return C(`[CACHE-HIT] Pricing disk cache: ${Object.keys(e).length} models`),this.executionCache=e,C(`[CACHE-SET] Pricing execution cache stored: ${Object.keys(e).length} models`),e;let t=await this.fetchPricingData();return t?(await this.saveDiskCache(t),C(`[CACHE-SET] Pricing disk cache stored: ${Object.keys(t).length} models`),this.executionCache=t,C(`[CACHE-SET] Pricing execution cache stored: ${Object.keys(t).length} models`),t):(C(`[CACHE-FALLBACK] Using offline pricing data: ${Object.keys(D).length} models`),this.executionCache=D,C(`[CACHE-SET] Pricing execution cache stored: ${Object.keys(D).length} models`),D)}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 C(`[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),C(`[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 Be(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 Ve=class{async getSessionUsage(e){try{let t=await Ae(e);if(!t)return C(`No transcript found for session: ${e}`),null;C(`Found transcript at: ${t}`);let n=await T(t),r=await je(e,u(t));C(`Found ${r.length} agent transcripts for session`);for(let e of r){let t=await T(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=Be(e);if(t.costUSD!==void 0)a+=t.costUSD;else{let n=await ze.calculateCostForEntry(e.raw);t.costUSD=n,a+=n}i.push(t)}return C(`Parsed ${i.length} usage entries, total cost: $${a.toFixed(4)}`),{totalCost:a,entries:i}}catch(t){return C(`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}}},He=class{sessionProvider=new Ve;async getUsageInfo(e,t){try{return C(`Starting usage info retrieval for session: ${e}`),{session:await this.sessionProvider.getSessionInfo(e,t)}}catch(t){return C(`Error getting usage info for session ${e}:`,t),{session:{cost:null,calculatedCost:null,officialCost:null,tokens:null,tokenBreakdown:null}}}}},Ue=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 C(`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);C(`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),C(`Using native used_percentage: ${a}%`)),{totalTokens:i,maxTokens:r,...o}}async calculateContextTokensFromTranscript(e,t,n=33e3){try{C(`Calculating context tokens from transcript: ${e}`);let r=await T(e);if(r.length===0)return C(`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,C(`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 C(`Most recent main chain context: ${r} tokens (limit: ${a})`),{totalTokens:r,maxTokens:a,...this.calculatePercentages(r,a,n)}}return C(`No main chain entries with usage data found`),null}catch(e){return C(`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)}},We=class{async loadTranscriptEntries(e){try{let t=await Ae(e);if(!t)return C(`No transcript found for session: ${e}`),[];C(`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){C(`Failed to parse JSONL line: ${e}`);continue}return C(`Loaded ${r.length} transcript entries`),r}catch(t){return C(`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(C(`Getting metrics from hook data for session: ${e}`),!t.cost)return C(`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 C(`Error getting metrics from hook data for session ${e}:`,t),{responseTime:null,lastResponseTime:null,sessionDuration:null,messageCount:null,linesAdded:null,linesRemoved:null}}}};function O(e){return e===null?`$0.00`:e<.01?`<$0.01`:`$${e.toFixed(2)}`}function k(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 Ge(e){if(!e)return`0 tokens`;let t=[];if(e.input>0&&t.push(`${P(e.input)} in`),e.output>0&&t.push(`${P(e.output)} out`),e.cacheCreation>0||e.cacheRead>0){let n=e.cacheCreation+e.cacheRead;t.push(`${P(n)} cached`)}return t.length>0?t.join(` + `):`0 tokens`}function Ke(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 A(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 qe=/^(?:(?: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 j(e){if(!e)return`Claude`;let t=e.trim().match(qe);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 M(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 N(e){return e<60?`${e.toFixed(1)}s`:`${(e/60).toFixed(1)}m`}function P(e){return k(e).replace(` tokens`,``)}function Je(e){let t=process.env.HOME||process.env.USERPROFILE;return t&&e.startsWith(t)?e.replace(t,`~`):e}function Ye(e){let t=Math.floor(e/60),n=e%60;return t>0?`${t}h ${n}m left`:`${n}m left`}function Xe(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 Ze(e){return Math.round(Math.max(0,e*1e3-Date.now())/6e4)}function Qe(e,t){return!t||t<=0||e<0?null:Math.min(100,e/t*100)}function $e(e,t,n=80){let r=Qe(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:l.basename(r)||`root`,bgColor:t.modeBg,fgColor:t.modeFg};let o=Je(r),s=i&&Je(i),c=this.getDisplayDirectoryName(o,s);return a===`fish`&&(c=M(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=Ke(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=j(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=A(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=Xe(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=Xe(Ze(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)||l.basename(t)||`project`:e}formatUsageDisplay(e,t,n,r){switch(r){case`cost`:return O(e);case`tokens`:return k(t);case`both`:return`${O(e)} (${k(t)})`;case`breakdown`:return Ge(n);default:return O(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+$e(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=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 C(`Block segment: No native rate_limits data available`),null;let n=Ze(t.resets_at);return C(`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);C(`Today segment: Loading entries for date ${e}`);let t=await E.getLatestTranscriptMtime(),n=await E.getUsageCache(`today`,t);if(n)return C(`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 Re(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 ze.calculateCostForEntry(t.raw)),s.push(e),c++}return C(`Today segment: Found ${c} entries for today (${e})`),await E.setUsageCache(`today`,s,t),s}async getTodayEntries(){try{return await this.loadTodayEntries()}catch(e){return C(`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 C(`Today segment: $${t.toFixed(2)}, ${n} tokens total`),{cost:t,tokens:n,tokenBreakdown:r,date:F(new Date)}}catch(e){return C(`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:`◑`},st={topLeft:`╭`,topRight:`╮`,bottomLeft:`╰`,bottomRight:`╯`,horizontal:`─`,vertical:`│`,teeLeft:`├`,teeRight:`┤`},ct={topLeft:`+`,topRight:`+`,bottomLeft:`+`,bottomRight:`+`,horizontal:`-`,vertical:`|`,teeLeft:`+`,teeRight:`+`},lt={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:` `}},ut={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`},dt=RegExp(`\x1B\\[[0-9;]*m`,`g`),ft=RegExp(`(\x1B\\[[0-9;]*m)`),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 yt(e){return e.replace(dt,``)}function I(e){return yt(e).length}function L(e,t,n){return t?`${t}${e}${n}`:e}function R(e,t){let n=I(e);return n>=t?e:e+` `.repeat(t-n)}function bt(e,t){let n=I(e);return n>=t?e:` `.repeat(t-n)+e}function xt(e,t){let n=I(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 z(e,t){if(yt(e).length<=t)return e;let n=0,r=``,i=e.split(ft);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 B(e,t,n){let r=n-2,i=R(z(t,r),r);return e.vertical+` `+i+` `+e.vertical}function V(e,t){return e.teeLeft+e.horizontal.repeat(t)+e.teeRight}function St(e,t,n,r){if(!n&&!r)return e.bottomLeft+e.horizontal.repeat(t)+e.bottomRight;let i=n?` ${n} `:``,a=r?` ${r} `:``,o=I(i),s=I(a);if(o+s>t){let e=Math.max(0,t-s);if(o>e&&(i=z(i,e),o=I(i)),o+s>t){let e=Math.max(0,t-o);a=z(a,e),s=I(a)}}let c=t-o-s;return e.bottomLeft+i+e.horizontal.repeat(Math.max(0,c))+a+e.bottomRight}function Ct(e,t){if(e.length===0)return``;if(e.length===1)return e[0]??``;let n=e.map(e=>I(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 H(e,t,n){if(!t)return e;if(!e)return t;let r=I(e),i=I(t),a=n-r-i;return a<2?`${e} ${t}`:e+` `.repeat(a)+t}function U(e,t,n){let r=j(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 wt(e,t,n,r,i){let a=r?.left??`{model}`,o=r?.right===void 0?`claude-powerline`:r.right,s=o!==!1,c=U(a,e,i),l=c?` ${c} `:``,u=I(l);if(!s||!o){let e=n-u;return t.topLeft+l+t.horizontal.repeat(Math.max(0,e))+t.topRight}let d=U(o,e,i),f=d?` ${d} `:``,p=I(f),m=l,h=u,g=f,_=p;if(h+_>n){let e=Math.max(0,n-_);if(h>e&&(m=z(m,e),h=I(m)),h+_>n){let e=Math.max(0,n-h);g=z(g,e),_=I(g)}}let v=n-h-_;if(v<2){let e=n-h;return t.topLeft+m+t.horizontal.repeat(Math.max(0,e))+t.topRight}return t.topLeft+m+t.horizontal.repeat(v)+g+t.topRight}function W(e,t,n,r=60,i=80){return e>=i?n.contextCriticalFg:e>=r?n.contextWarningFg:t}function G(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 L(n.bar_filled.repeat(a)+n.bar_empty.repeat(o),i,r)}function Tt(e,t){if(!e.contextInfo)return{icon:``,bar:``,pct:``,tokens:``};let n=e.contextInfo.usablePercentage,r=P(e.contextInfo.totalTokens),i=P(e.contextInfo.maxTokens);return{icon:t.context_time,bar:` `,pct:`${n}%`,tokens:`${r}/${i}`}}function Et(e,t,n,r,i,a){if(!e.contextInfo)return``;let o=e.contextInfo.usablePercentage;return G(o,t,n,r,W(o,a?.[`context.bar`]??a?.context??i.contextFg,i))}function Dt(e,t,n,r,i,a,o){if(!e.blockInfo)return``;let s=e.blockInfo.nativeUtilization,c=a.budget?.block?.warningThreshold??80;return G(s,t,n,r,W(s,o?.[`block.bar`]??o?.block??i.blockFg,i,50,c))}function Ot(e,t,n,r,i,a){let o=e.hookData.rate_limits?.seven_day;if(!o)return``;let s=o.used_percentage;return G(s,t,n,r,W(s,a?.[`weekly.bar`]??a?.weekly??i.weeklyFg,i))}function kt(e,t,n,r,i){if(!e.contextInfo)return null;let a=e.contextInfo.usablePercentage,o=` ${a}% ${P(e.contextInfo.totalTokens)}/${P(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=W(a,i.contextFg,i);return L(`${u}${o}`,d,r)}function At(e){return Je(e.workspace?.current_dir||e.cwd||`/`)}function jt(e,t,n,r,i){let a=[];e.blockInfo&&a.push(L(K(e.blockInfo,t,n),i.blockFg,r));let o=e.hookData.rate_limits?.seven_day;o&&a.push(L(q(o,t),i.weeklyFg,r)),e.usageInfo&&a.push(L(Rt(e.usageInfo,t,n),i.sessionFg,r)),e.todayInfo&&a.push(L(J(e.todayInfo,t,n),i.todayFg,r));let s=Mt(e,t);return s.length>0&&a.push(L(s.join(` · `),i.metricsFg,r)),a}function Mt(e,t){let n=[];return e.metricsInfo&&(e.metricsInfo.sessionDuration!==null&&e.metricsInfo.sessionDuration>0&&n.push(`${t.metrics_duration} ${A(e.metricsInfo.sessionDuration)}`),e.metricsInfo.messageCount!==null&&e.metricsInfo.messageCount>0&&n.push(`${t.metrics_messages} ${e.metricsInfo.messageCount}`)),n}function Nt(e,t,n,r){let i=[],a=Gt(e,t);a&&i.push(L(a,r.gitFg,n));let o=M(At(e.hookData));return i.push(L(o,r.modeFg,n)),i}function Pt(e,t,n,r,i){let a=[];if(e.hookData.version&&a.push(L(`${t.version} v${e.hookData.version}`,i.versionFg,r)),e.tmuxSessionId&&a.push(L(`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} ${N(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(L(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=process.env[o.variable];if(e){let t=o.prefix??o.variable;a.push(L(t?`${t}:${e}`:e,i.envFg,r))}}return a}function Ft(e,t,n){let r=`${Math.round(e.nativeUtilization)}%`,i=Ye(e.timeRemaining);return{icon:t.block_cost,value:r,time:i,budget:``,bar:` `}}function K(e,t,n){let r=Ft(e,t,n),i=`${r.icon} ${r.value}`;return r.time&&(i+=` · ${r.time}`),r.budget&&(i+=r.budget),i}function It(e,t){let n=`${Math.round(e.used_percentage)}%`,r=Xe(Ze(e.resets_at));return{icon:t.weekly_cost,pct:n,time:r,bar:` `}}function q(e,t){let n=It(e,t),r=`${n.icon} ${n.pct}`;return n.time&&(r+=` · ${n.time}`),r}function Lt(e,t,n){let r=e.session.tokens,i=r!==null&&r>0?P(r):``,a=``,o=n.budget?.session;return o?.amount&&e.session.cost!==null&&(a=$e(e.session.cost,o.amount,o.warningThreshold||80).displayText),{icon:t.session_cost,cost:O(e.session.cost),tokens:i,budget:a}}function Rt(e,t,n){let r=Lt(e,t,n),i=`${r.icon} ${r.cost}`;return r.tokens&&(i+=` · ${r.tokens}`),r.budget&&(i+=r.budget),i}function zt(e,t,n){let r=``,i=n.budget?.today;return i?.amount&&e.cost!==null&&(r=$e(e.cost,i.amount,i.warningThreshold||80).displayText),{icon:t.today_cost,cost:O(e.cost),label:`today`,budget:r}}function J(e,t,n){let r=zt(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?N(e.metricsInfo.responseTime):``,a=e.metricsInfo.lastResponseTime!==null&&!isNaN(e.metricsInfo.lastResponseTime)&&e.metricsInfo.lastResponseTime>0,o=a?N(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={duration:``,durationIcon:``,durationVal:``,messages:``,messagesIcon:``,messagesVal:``};if(!e.metricsInfo)return n;let r=e.metricsInfo.sessionDuration!==null&&e.metricsInfo.sessionDuration>0,i=r?A(e.metricsInfo.sessionDuration):``,a=e.metricsInfo.messageCount!==null&&e.metricsInfo.messageCount>0,o=a?`${e.metricsInfo.messageCount}`:``;return{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:``,branch:``,status:``,ahead:``,behind:``,working:``};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];return r&&s.push(r),i&&s.push(i),{icon:t.branch,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){return{value:qt(e,t)}}function qt(e,t){let n=At(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:M(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=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?L(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?L(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+I(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?L(e,t,i):``,c={},l=j(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=kt(e,t.contentWidth,n,i,a)??``,Y(c,`context`,Tt(e,n),e.contextInfo?W(e.contextInfo.usablePercentage,a.contextFg,a):a.contextFg,i,o),e.blockInfo){let t=o?.block??a.blockFg;c.block=s(K(e.blockInfo,n,r),t),Y(c,`block`,Ft(e.blockInfo,n,r),a.blockFg,i,o)}else c.block=``;if(e.usageInfo){let t=o?.session??a.sessionFg;c.session=s(Rt(e.usageInfo,n,r),t),Y(c,`session`,Lt(e.usageInfo,n,r),a.sessionFg,i,o)}else c.session=``;if(e.todayInfo){let t=o?.today??a.todayFg;c.today=s(J(e.todayInfo,n,r),t),Y(c,`today`,zt(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(q(d,n),e),Y(c,`weekly`,It(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),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=jt(n,o,s,c,l);u.length>0&&t.push(B(r,Ct(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=Nt(n,o,c,l),d=Pt(n,o,s,c,l),f=u.join(` `),p=d.join(` · `);(f||p)&&(t.push(V(r,a)),t.push(B(r,H(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(L(K(n.blockInfo,o,s),l.blockFg,c));let f=n.hookData.rate_limits?.seven_day;f&&u.push(L(q(f,o),l.weeklyFg,c)),n.todayInfo&&u.push(L(J(n.todayInfo,o,s),l.todayFg,c)),n.usageInfo&&d.push(L(Rt(n.usageInfo,o,s),l.sessionFg,c));let p=Mt(n,o);p.length>0&&d.push(L(p.join(` · `),l.metricsFg,c)),u.length>0&&t.push(B(r,Ct(u,i),a)),d.length>0&&t.push(B(r,H(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=Nt(n,o,c,l);u.length>0&&(t.push(V(r,a)),t.push(B(r,H(u[0]??``,u[1]??``,i),a)));let d=Pt(n,o,s,c,l);d.length>0&&(t.push(V(r,a)),t.push(B(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(B(r,L(K(n.blockInfo,o,s),l.blockFg,c),a));let u=n.hookData.rate_limits?.seven_day;u&&t.push(B(r,L(q(u,o),l.weeklyFg,c),a));let d=[];n.usageInfo&&d.push(L(`${o.session_cost} ${O(n.usageInfo.session.cost)}`,l.sessionFg,c)),n.todayInfo&&d.push(L(`${o.today_cost} ${O(n.todayInfo.cost)} today`,l.todayFg,c)),d.length>0&&t.push(B(r,H(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=Nt(n,o,c,l);u.length>0&&(t.push(V(r,a)),t.push(B(r,H(u[0]??``,u[1]??``,i),a)));let d=Pt(n,o,s,c,l);d.length>0&&t.push(B(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=I(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)}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--}for(let e=0;e<o;e++)c[e]<1&&(c[e]=1);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=I(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)}}}if(i>0){let t=0;for(let n of e)t+=Z(n);if(t>0){let n=[],r=0;for(let a=0;a<o;a++){let o=Z(e[a]);if(o>0){let e=Math.floor(i*o/t);c[a]=c[a]+e,r+=e,n.push(a)}}let a=i-r;for(let e=0;a>0&&e<n.length;e++)c[n[e]]+=1,a--}}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;return{panelWidth:l+u+4,colWidths:c}}function yn(e,t,n){switch(n){case`right`:return bt(e,t);case`center`:return xt(e,t);default:return R(e,t)}}function bn(e,t,n,r,i){let a=[],o=I(i);for(let i=0;i<e.length;i++){let s=e[i];if(!s.spanStart)continue;let c=fn(t,i,s.spanSize,o);if(s.segment===`.`)a.push(` `.repeat(c));else{let e=z(r[s.segment]||``,c),t=n[i]||`left`;a.push(yn(e,c,t))}}return a.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=I(s),u=e.fitContent??!1,d=e.padding?.horizontal??0,f;if(u)f=o===1/0?r:Math.min(r,o);else{let t=e.widthReserve??45;f=Math.min(o,Math.max(a,r-t))}let p=pn(e.breakpoints,f),m=hn(mn(p.areas),t);if(m.length===0)return{lines:[],panelWidth:f};let h,g=new Set(un);if(e.segments)for(let t of Object.keys(e.segments))g.add(t);if(u){let e=vn(p.columns,m,t,l,d,g);f=Math.min(o,Math.max(a,e.panelWidth)),h=e.colWidths;let n=f-e.panelWidth;if(n>0){let e=0;for(let t of p.columns)e+=Z(t);if(e>0){let t=[],r=0;for(let i=0;i<h.length;i++){let a=Z(p.columns[i]);if(a>0){let o=Math.floor(n*a/e);h[i]+=o,r+=o,t.push(i)}}let i=n-r;for(let e=0;i>0&&e<t.length;e++)h[t[e]]+=1,i--}}}else{let e=f-2-2;h=_n(p.columns,m,t,e,l,g)}let _=f-2,v=_-2,y=p.align||p.columns.map(()=>`left`);if(i){let e=new Set;for(let n of m)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(h,r,a.spanSize,l),s=i(a.segment,o);s!==void 0&&(t[a.segment]=s)}}let b=hn(m,t);if(b.length===0)return{lines:[],panelWidth:f};let x=[];for(let e of b)if(X(e))x.push(xn(n,_,c));else{let r=R(z(bn(e,h,y,t,s),v),v);x.push(n.vertical+` `+r+` `+n.vertical)}return{lines:x,panelWidth:f}}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){let a=(i.display.charset||`unicode`)===`text`?ut:ot,o=e.colors;if(i.display.tui){let r=i.display.tui,s=r.terminalWidth??vt()??120,c;c=typeof r.box==`string`?lt[r.box]??t:r.box?{...t,...r.box}:t;let l=Math.max(r.minWidth??32,s-(r.widthReserve??45))-2,u=l-2,d=nn(e,{lines:[],data:e,box:c,contentWidth:u,innerWidth:l,sym:a,config:i,reset:n,colors:o}),f=d.data,p=d.templates,m=o.partFg,h=Sn(r,f,c,s,(t,r)=>{if(t===`context`)return kt(e,r,a,n,o)??``;if(t===`context.bar`)return Et(e,r,a,n,o,m);if(t===`block.bar`)return Dt(e,r,a,n,o,i,m);if(t===`weekly.bar`)return Ot(e,r,a,n,o,m);let s=p[t];if(s)return tn(s.items,s.gap,s.justify,r)}),g=h.panelWidth-2,_=r.footer?.left?U(r.footer.left,e,f):void 0,v=r.footer?.right?U(r.footer.right,e,f):void 0,y=[];return y.push(wt(e,c,g,r.title,f)),y.push(...h.lines),y.push(St(c,g,_,v)),Cn+y.map(e=>Tn+e).join(`
8
- `)+wn}let s=Dn(r),c=s-2,l=c-2,u=En(s),d=[];d.push(wt(e,t,c));let f=kt(e,l,a,n,o);f&&d.push(B(t,f,c));let p={lines:d,data:e,box:t,contentWidth:l,innerWidth:c,sym:a,config:i,reset:n,colors:o};return u===`wide`?(rn(p),an(p)):u===`medium`?(on(p),sn(p)):(cn(p),ln(p)),d.push(St(t,c)),Cn+d.map(e=>Tn+e).join(`
9
- `)+wn}var kn=class{symbols;_usageProvider;_blockProvider;_todayProvider;_contextProvider;_gitService;_tmuxService;_metricsProvider;_segmentRenderer;constructor(e){this.config=e,this.symbols=this.initializeSymbols()}get usageProvider(){return this._usageProvider||=new He,this._usageProvider}get blockProvider(){return this._blockProvider||=new nt,this._blockProvider}get todayProvider(){return this._todayProvider||=new at,this._todayProvider}get contextProvider(){return this._contextProvider||=new Ue(this.config),this._contextProvider}get gitService(){return this._gitService||=new Ee,this._gitService}get tmuxService(){return this._tmuxService||=new Oe,this._tmuxService}get metricsProvider(){return this._metricsProvider||=new We,this._metricsProvider}get segmentRenderer(){return this._segmentRenderer||=new tt(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;return this.config.display.autoWrap?this.generateAutoWrapStatusline(e,t,n,r,a,o):(await Promise.all(this.config.display.lines.map(i=>this.renderLine(i,e,t,n,r,a,o)))).filter(e=>e.length>0).join(`
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{O(`[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 O(`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{O(`[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 O(`Git ahead/behind command failed in ${e}:`,t),{ahead:0,behind:0}}}};const Se=a(r);var Ce=class{async getSessionId(){try{if(!process.env.TMUX_PANE)return O(`TMUX_PANE not set, not in tmux session`),null;O(`Getting tmux session ID, TMUX_PANE: ${process.env.TMUX_PANE}`);let e=(await Se(`tmux display-message -p '#S'`,{encoding:`utf8`,timeout:1e3})).stdout.trim();return O(`Tmux session ID: ${e||`empty`}`),e||null}catch(e){return O(`Error getting tmux session ID:`,e),null}}isInTmux(){return!!process.env.TMUX_PANE}};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){O(`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{O(`Failed to check agent file ${t}`)}}}catch(e){O(`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 k(e){try{let t=(await b(e)).size,n;return t>1048576?(O(`Using streaming parser for large file ${e} (${Math.round(t/1024)}KB)`),n=await je(e)):n=await Ae(e),O(`Parsed ${n.length} entries from ${e}`),n}catch(t){return O(`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){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
+ `)+wn}var kn=class{symbols;_usageProvider;_blockProvider;_todayProvider;_contextProvider;_gitService;_tmuxService;_metricsProvider;_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 nt,this._blockProvider}get todayProvider(){return this._todayProvider||=new at,this._todayProvider}get contextProvider(){return this._contextProvider||=new ze(this.config),this._contextProvider}get gitService(){return this._gitService||=new xe,this._gitService}get tmuxService(){return this._tmuxService||=new Ce,this._tmuxService}get metricsProvider(){return this._metricsProvider||=new Be,this._metricsProvider}get segmentRenderer(){return this._segmentRenderer||=new tt(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;return this.config.display.autoWrap?this.generateAutoWrapStatusline(e,t,n,r,a,o):(await Promise.all(this.config.display.lines.map(i=>this.renderLine(i,e,t,n,r,a,o)))).filter(e=>e.length>0).join(`
10
10
  `)}async generateAutoWrapStatusline(e,t,n,r,i,a){let o=this.getThemeColors(),s=e.workspace?.current_dir||e.cwd||`/`,c=_t(),l=[];for(let u of this.config.display.lines){let d=Object.entries(u.segments).filter(([e,t])=>t?.enabled).map(([e,t])=>({type:e,config:t})),f=[];for(let c of d){let l=await this.renderSegment(c,e,t,n,r,i,a,o,s);l&&f.push({type:c.type,text:l.text,bgColor:l.bgColor,fgColor:l.fgColor})}if(f.length===0)continue;if(!c||c<=0){l.push(this.buildLineFromSegments(f,o));continue}let p=[],m=0;for(let e of f){let t=this.calculateSegmentWidth(e,p.length===0);p.length>0&&m+t>c&&(l.push(this.buildLineFromSegments(p,o)),p=[],m=0),p.push(e),m+=t}p.length>0&&l.push(this.buildLineFromSegments(p,o))}return l.join(`
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)}calculateSegmentWidth(e,t){let n=this.config.display.style===`capsule`,r=I(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`?ut: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`?te():n;if(e===`custom`){if(t=this.config.colors?.custom,!t)throw Error(`Custom theme selected but no colors provided in configuration`)}else t=we(e,r),t||=(console.warn(`Built-in theme '${e}' not found, falling back to 'dark' theme`),we(`dark`,r));let i=(e,t)=>r===`none`?``:r===`ansi`?re(e,t):r===`ansi256`?ne(e,t):ee(e,t),a=we(`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&&ie(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`),S=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:S.bg,weeklyFg:S.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=S(e,(r===`auto`?te():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`?te():c)===`ansi`;if(r){let t=S(e,l);s+=`${i.reset}${r}${t}${this.symbols.right}`}else s+=`${i.reset}${S(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`,`cost`,`tokens`,`budget`],block:[`icon`,`value`,`time`,`budget`,`bar`],today:[`icon`,`cost`,`label`,`budget`],weekly:[`icon`,`pct`,`time`,`bar`],git:[`icon`,`branch`,`status`,`ahead`,`behind`,`working`,`head`],context:[`icon`,`bar`,`pct`,`tokens`],metrics:[`response`,`responseIcon`,`responseVal`,`lastResponse`,`lastResponseIcon`,`lastResponseVal`,`added`,`addedIcon`,`addedVal`,`removed`,`removedIcon`,`removedVal`],activity:[`duration`,`durationIcon`,`durationVal`,`messages`,`messagesIcon`,`messagesVal`],model:[`icon`,`value`],version:[`icon`,`value`],tmux:[`label`,`value`],dir:[`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`&&!lt[e.box]){let t=Object.keys(lt).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(`
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(`
12
12
  claude-powerline - Beautiful powerline statusline for Claude Code
13
13
 
14
14
  Usage: claude-powerline [options]
@@ -43,4 +43,4 @@ Add to ~/.claude/settings.json:
43
43
  Run with --help for more options.
44
44
 
45
45
  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)),C(`Working directory: ${e.cwd()}`),C(`Process args:`,e.argv);let n=await t(e.stdin);C(`Received hook data:`,JSON.stringify(n,null,2)),n||(console.error(`Error: No input data received from stdin`),Gn(),e.exit(1));let r=n.workspace?.project_dir,i=await new kn(Wn(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)}}Kn();export{};
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)),O(`Working directory: ${e.cwd()}`),O(`Process args:`,e.argv);let n=await t(e.stdin);O(`Received hook data:`,JSON.stringify(n,null,2)),n||(console.error(`Error: No input data received from stdin`),Gn(),e.exit(1));let r=n.workspace?.project_dir,i=await new kn(Wn(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)}}Kn();export{};
package/package.json CHANGED
@@ -1,10 +1,17 @@
1
1
  {
2
2
  "name": "@owloops/claude-powerline",
3
- "version": "1.24.4",
3
+ "version": "1.25.1",
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",
7
7
  "module": "./dist/index.mjs",
8
+ "exports": {
9
+ ".": "./dist/index.mjs",
10
+ "./browser": {
11
+ "types": "./dist/browser.d.ts",
12
+ "import": "./dist/browser.js"
13
+ }
14
+ },
8
15
  "bin": {
9
16
  "claude-powerline": "./bin/claude-powerline"
10
17
  },
@@ -45,6 +52,7 @@
45
52
  "dist",
46
53
  "bin",
47
54
  "plugin",
55
+ "src",
48
56
  "README.md",
49
57
  "LICENSE"
50
58
  ],
@@ -7,9 +7,9 @@
7
7
  "autoWrap": true,
8
8
  "tui": {
9
9
  "fitContent": true,
10
- "minWidth": 50,
11
- "padding": { "horizontal": 2 },
12
- "separator": { "column": " " },
10
+ "minWidth": 30,
11
+ "padding": { "horizontal": 1 },
12
+ "separator": { "column": "" },
13
13
  "title": {
14
14
  "left": "{model}",
15
15
  "right": "{dir}"
@@ -18,7 +18,7 @@
18
18
  {
19
19
  "minWidth": 0,
20
20
  "areas": [
21
- "git.icon git.head . git.working",
21
+ "git.icon git.headVal . git.working",
22
22
  "---",
23
23
  "context.icon context.bar context.pct context.tokens"
24
24
  ],
@@ -8,8 +8,8 @@
8
8
  "tui": {
9
9
  "fitContent": true,
10
10
  "minWidth": 60,
11
- "padding": { "horizontal": 2 },
12
- "separator": { "column": " " },
11
+ "padding": { "horizontal": 1 },
12
+ "separator": { "column": "" },
13
13
  "title": {
14
14
  "left": "{model.icon} {model.value}",
15
15
  "right": "{dir}"
@@ -19,7 +19,7 @@
19
19
  "right": "{metrics.lastResponse}"
20
20
  },
21
21
  "segments": {
22
- "git.info": {
22
+ "git.headVal": {
23
23
  "items": ["{branch}", "{status}", "{ahead}", "{behind}"],
24
24
  "gap": 1
25
25
  }
@@ -28,13 +28,13 @@
28
28
  {
29
29
  "minWidth": 55,
30
30
  "areas": [
31
- "git.icon git.info git.info . git.working",
31
+ "git.icon git.headVal git.headVal git.headVal git.working",
32
32
  "---",
33
33
  "context.icon context.bar context.bar context.pct context.tokens",
34
34
  "block.icon block.bar block.bar block.value block.time",
35
35
  "weekly.icon weekly.bar weekly.bar weekly.pct weekly.time",
36
36
  "---",
37
- "session session . today today"
37
+ "session session session today today"
38
38
  ],
39
39
  "columns": ["auto", "1fr", "auto", "auto", "auto"],
40
40
  "align": ["left", "left", "right", "right", "right"]
@@ -7,15 +7,15 @@
7
7
  "autoWrap": true,
8
8
  "tui": {
9
9
  "fitContent": true,
10
- "minWidth": 55,
11
- "padding": { "horizontal": 2 },
12
- "separator": { "column": " " },
10
+ "minWidth": 45,
11
+ "padding": { "horizontal": 1 },
12
+ "separator": { "column": "" },
13
13
  "title": {
14
14
  "left": "{model}",
15
15
  "right": "{dir}"
16
16
  },
17
17
  "segments": {
18
- "git.info": {
18
+ "git.headVal": {
19
19
  "items": ["{branch}", "{status}", "{ahead}", "{behind}"],
20
20
  "gap": 1
21
21
  }
@@ -24,7 +24,7 @@
24
24
  {
25
25
  "minWidth": 0,
26
26
  "areas": [
27
- "git.icon git.info git.info . git.working",
27
+ "git.icon git.headVal git.headVal git.headVal git.working",
28
28
  "---",
29
29
  "context.icon context.bar context.bar context.pct context.tokens",
30
30
  "block.icon block.bar block.bar block.value block.time"