@promptctl/cc-candybar 1.129.3 → 1.129.5

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 (2) hide show
  1. package/dist/index.mjs +31 -31
  2. package/package.json +5 -5
package/dist/index.mjs CHANGED
@@ -165,7 +165,7 @@ Config tooling:
165
165
  `)||null}function Rk(e){switch(e.kind){case`chain`:return e.unchecked.map(e=>`Config location could not be checked: ${e.path} — ${e.error}`);case`missing`:return[`Config file not found: ${e.path} — rendering the bundled default until it appears`];case`unreadable`:return[`Config file could not be read: ${e.path} — ${e.error} — rendering the bundled default until it can be`]}}function zk(e,t){let n=Mk(e,t).filter(e=>Ak(e)===`present`),r=new Map;for(let e of n){let t=l.dirname(e),n=l.basename(e).replace(/\.(json5|json)$/,``),i=l.join(t,n);r.has(i)||r.set(i,[]),r.get(i).push(e)}let i=[...r.values()].filter(e=>e.length>1);return i.length===0?null:`config-extension collision: ${i.map(e=>{let[t,...n]=e;return`${t} shadows ${n.join(`, `)}`}).join(`; `)} — remove the duplicate`}function Bk(e){return`plugin ${e.path} was not loaded: ${e.reason}`}const Vk=new Set([`data`,`segments`,`helpers`,`actions`]),Hk=`plugin.json5`,Uk=/^[a-z][a-z0-9_]*$/;function Wk(e){let t=l.basename(l.dirname(e));return Uk.test(t)?t:void 0}const Gk=`plugins.`;function Kk(e){return`${Gk}${e}.data`}function qk(e){try{return{ok:!0,value:e()}}catch(e){return{ok:!1,reason:Jk(e)}}}function Jk(e){return e instanceof pu?e.issues.map(e=>e.path===``||e.message.includes(e.path)?e.message:`${e.path}: ${e.message}`).join(`; `):e instanceof Error?e.message:String(e)}function Yk(e,t){return e.map(e=>l.resolve(l.dirname(t),jk(e)))}function Xk(e,t,n,i){let a=new Map;return e.reduce((e,n)=>{let o=Wk(n),s=(t,r)=>{let i=new Map(e.rendering);return o!==void 0&&r!==e.config&&i.delete(o),{...e,config:r,rendering:i,dropped:[...e.dropped,{path:n,plugin:o,reason:t}]}};if(l.basename(n)!==`plugin.json5`){let t=`a plugin is a folder holding its ${Hk}, and the folder's name is the plugin's: move this file to <dir>/<name>/${Hk} and list that`;return s(t,o===void 0?e.config:$k(Qk(e.config,o),o,{path:n,plugin:o,reason:t}))}if(o===void 0)return s(`its folder "${l.basename(l.dirname(n))}" is not a plugin name (one matching ${Uk}: it prefixes every name the plugin declares)`,e.config);let c=a.get(o);if(c!==void 0)return s(`plugin "${o}" is already listed, from ${c}`,e.config);a.set(o,n);let u=Qk(e.config,o),d=qk(()=>{let a=r.readFileSync(n,`utf-8`),s=Id(aA(n,o,{source:a,json:at.default.parse(a)},t),u);return i(s,o,u!==e.config),s});if(d.ok)return{...e,config:d.value,loaded:[...e.loaded,n],rendering:new Map([...e.rendering,[o,n]])};let f={path:n,plugin:o,reason:d.reason};return s(d.reason,$k(u,o,f))},{config:n.config,rendering:n.rendering,loaded:[],dropped:[]})}function Zk(e){let t=`${Gk}${e}.`;return e=>e.startsWith(t)}function Qk(e,t){let n=Zk(t),r=e=>Object.fromEntries(Object.entries(e).filter(([e])=>!n(e)));return[e.variables,e.segments,e.helpers,e.actions].some(e=>Object.keys(e).some(n))?{...e,variables:r(e.variables),segments:r(e.segments),helpers:r(e.helpers),actions:r(e.actions)}:e}function $k(e,t,n){return{...e,variables:{...e.variables,[Kk(t)]:{kind:`dropped`,reason:Bk(n),definition:n.path}}}}function eA(e){return e.startsWith(`plugins.`)?e.slice(8).split(`.`)[0]:void 0}function tA(e,t){let n=new Set([...Object.keys(e.config.variables),...Object.keys(e.config.segments)].map(eA)),r=[...t,...e.dropped].filter(e=>e.plugin===void 0).map(e=>({definition:e.path,notice:Bk(e)}));return t=>{let i=eA(t);if(i===void 0)return[];let a=e.config.variables[Kk(i)];return a?.kind===`dropped`?[{definition:a.definition,notice:a.reason}]:n.has(i)?[]:r}}function nA(e,t){let n=Nb(e.presets).flatMap(t=>[...wu(Ib(e,t).node)]).flatMap(e=>e.kind===`segment`?[e]:[]),r=[...new Set([...n.map(e=>e.name),...Object.keys(e.segments)])].map(e=>({name:e,cause:t(e)})).filter(({cause:e})=>e.length>0),i=Object.fromEntries(r.map(({name:e,cause:t})=>[e,rA(e,t.map(e=>e.notice),n.filter(t=>t.name===e))])),a=t=>{let n=eA(t),r=n===void 0?void 0:e.variables[Kk(n)];return r?.kind===`dropped`?{definition:r.definition,notice:r.reason}:void 0},o=Object.values(e.variables).some(e=>e.kind===`dropped`),s=o?Object.values(e.segments).flatMap(e=>[`template`,`bg`,`fg`,`when`].flatMap(t=>e[t]===void 0?[]:[e[t]])):[],c=o?Object.values(e.actions).flatMap(e=>`do`in e?[...e.do]:[]):[],l=(e,t)=>[...new Set(e)].flatMap(e=>{let n=e in t?void 0:a(e);return n===void 0?[]:[[e,n]]}),u=l([...s.flatMap(t=>Dx(t,e.helpers).map(e=>e.name)),...c],e.actions),d=l(s.flatMap(t=>[...kx(t,e.helpers)]),e.helpers),f=new Set([...r.flatMap(({cause:e})=>e.map(e=>e.definition)),...[...u,...d].map(([,e])=>e.definition)]);return{config:{...e,segments:{...e.segments,...i},actions:{...e.actions,...Object.fromEntries(u.map(([e])=>[e,{copy:`{{ .${Kk(eA(e)??``)} }}`}]))},helpers:{...e.helpers,...Object.fromEntries(d.map(([e,t])=>[e,`{{ fail ${JSON.stringify(t.notice)} }}`]))}},reached:f}}function rA(e,t,n){let r=`⚠ ${e}: ${t.join(`; `)}`,i=new Map;for(let e of n)for(let[t,n]of Object.entries(e.settings??{})){let e=i.get(t);i.set(t,e===void 0?[n]:[...e,n])}let a=Object.fromEntries([...i].map(([e,t])=>[e,iA(e,t)]));return{template:`{{ ${JSON.stringify(r)} }}`,bg:`error`,description:`stands in for a segment whose plugin did not load`,settings:a}}function iA(e,t){let[n]=t,r=t.filter(e=>typeof e==`number`);return typeof n==`boolean`?{label:e,domain:`bool`,default:n}:typeof n==`number`?{label:e,domain:{min:Math.min(...r),max:Math.max(...r),step:1},default:n}:{label:e,domain:[...new Set(t.map(String))],default:n}}function aA(e,t,{source:n,json:r},{checkout:i}){let a=[],o=()=>{throw new pu(e,a)};if(!Qu(r))return a.push({path:``,message:`a plugin definition must be an object, got ${$u(r)}`}),o();for(let e of Object.keys(r))Vk.has(e)||a.push({path:e,message:e===`plugin`?`a plugin definition does not name itself: its name is its folder's ("${t}") — remove "plugin"`:`a plugin definition may not declare "${e}". Expected only: ${[...Vk].join(`, `)}`});let s=cA(r.data,e,i,a);if(Qu(r.segments)||a.push({path:`segments`,message:`"segments" must be an object naming the plugin's segments`}),a.length>0||s===void 0)return o();let c={source:n,issues:a,allowedPalettes:new Set(jc()),groups:[]},l=Wf(c,`data`,{[Kk(t)]:{kind:`file`,path:s,parse:{json:!0},cache:{watch_file:s},default:{}}});for(let[e,t]of Object.entries(r.segments))Qu(t)&&`vars`in t&&a.push({path:`segments.${e}.vars`,message:`a plugin segment may not declare "vars": a plugin's only source is its data file`});let u={variables:l,segments:sA(t,Jp(c,r.segments,new Set)),helpers:sA(t,ZO(c,r.helpers)),actions:sA(t,rO(c,r.actions))};for(let[e,t]of oA(u))try{Xb.parse(t)}catch(t){a.push({path:e,message:`Template parse error in ${e}: ${t.message}`})}return a.length>0&&o(),u}function*oA(e){for(let[t,n]of Object.entries(e.segments??{}))for(let e of[`template`,`bg`,`fg`,`when`]){let r=n[e];r!==void 0&&(yield[`segments.${t}.${e}`,r])}for(let[t,n]of Object.entries(e.helpers??{}))yield[`helpers.${t}`,`{{ define "${t}" }}${n}{{ end }}`];for(let[t,n]of Object.entries(e.actions??{}))`copy`in n&&(yield[`actions.${t}.copy`,n.copy]),`open`in n&&(yield[`actions.${t}.open`,n.open]),`preset`in n&&n.preset===`delete`&&(yield[`actions.${t}.name`,n.name])}function sA(e,t){return Object.fromEntries(Object.entries(t).map(([t,n])=>[`${Gk}${e}.${t}`,n]))}function cA(e,t,n,r){if(typeof e==`string`&&e!==``)return l.resolve(l.dirname(t),jk(e));if(Qu(e)&&Object.keys(e).length===1&&typeof e.checkout==`string`&&e.checkout!==``){let t=e.checkout;if(l.isAbsolute(t)||t.startsWith(`~`)||l.normalize(t).split(l.sep)[0]===`..`){r.push({path:`data.checkout`,message:`data.checkout "${t}" must be a path inside the checkout, relative to its root (like ".lit/statusline.json"): no absolute path, "~" or ".."`});return}if(n===null){r.push({path:`data.checkout`,message:`data is read from the session's checkout, and this load has no session`});return}return l.resolve(n.root,t)}if(Qu(e)&&`project`in e){r.push({path:`data.project`,message:`data: { project } is now data: { checkout }: the same path, relative to the root of the git checkout the session works in (a linked worktree is its own checkout)`});return}r.push({path:`data`,message:`"data" must be the path of the plugin's JSON data file relative to this definition, or { checkout: "<path>" } relative to the root of the session's checkout`})}function lA(e){let t=(process.env.XDG_DATA_DIRS||uA()).split(`:`).filter(e=>e!==``),n=process.env.XDG_DATA_HOME||l.join(h.homedir(),`.local`,`share`),r=[...[...t].reverse().map(e=>l.join(e,`cc-candybar`,`plugins`)),l.join(n,`cc-candybar`,`plugins`),...e===null?[]:[l.join(e,`.cc-candybar`,`plugins`)]];return r.filter((e,t)=>r.lastIndexOf(e)===t)}function uA(){let e=`/usr/local/share:/usr/share`;return process.platform===`darwin`?`${l.join(process.env.HOMEBREW_PREFIX||`/opt/homebrew`,`share`)}:${e}`:e}function dA(e){let t=lA(e),n=new Map,r=[],i=[];for(let e of t){let t=fA(e);if(`error`in t){r.push(t);continue}for(let r of t.folders)n.delete(r),n.set(r,l.join(e,r,Hk));for(let n of t.files)i.push({path:l.join(e,n),plugin:void 0,reason:`a plugin is a folder holding its ${Hk}: move this file to ${l.join(e,`<name>`,Hk)}`})}return{roots:t,definitions:[...n.values()],unchecked:r,strays:i}}function fA(e){try{let t=r.readdirSync(e,{withFileTypes:!0}).filter(e=>!e.name.startsWith(`.`)).sort((e,t)=>e.name<t.name?-1:+(e.name>t.name)),n=t=>t.isDirectory()||pA(e,t);return{folders:t.filter(n).map(e=>e.name),files:t.filter(e=>!n(e)).map(e=>e.name)}}catch(t){return t.code===`ENOENT`?{folders:[],files:[]}:{path:e,error:t.message}}}function pA(e,t){if(!t.isSymbolicLink())return!1;try{return r.statSync(l.join(e,t.name)).isDirectory()}catch{return!0}}function mA(e,t,n,i){return e===null?{...CA,config:Id(CA.raw,t)}:gA(e,r.readFileSync(e,`utf-8`),t,n,i)}const hA={projectDir:null,checkout:null,beneath:{dropped:[],rendering:new Map}};function gA(e,t,n,r,i){let a=EA(e,t,i,(t,a)=>{let o=Xk(Yk(t,e),r,{config:n,rendering:r.beneath.rendering},(t,n,r)=>xA(t,n,r,e,i)),s=tA(o,r.beneath.dropped);return{inherited:new Set([...qp(o.config),...a.filter(e=>s(e).length>0)]),layer:{plugins:o,owning:s}}}),{plugins:o,owning:s}=a.layer,c=nA(Id(a.raw,o.config),s);return{source:t,raw:a.raw,warnings:[...a.warnings,...o.dropped.map(Bk)],plugins:{loaded:o.loaded,dropped:o.dropped,reached:c.reached,rendering:o.rendering},config:c.config}}const _A=new WeakMap;function vA(e,t,n,r){let i=JSON.stringify([[...r??[]].sort(),e.map(e=>[e,yA(e)])]),a=_A.get(n)??new Map;_A.set(n,a);let o=JSON.stringify([t.projectDir,t.checkout?.root??null]),s=a.get(o);if(s?.key===i)return s.layer;let c=Xk(e,t,{config:n,rendering:new Map},(e,t,n)=>xA(e,t,n,`<installed plugins>`,r));return a.set(o,{key:i,layer:c}),c}function yA(e){try{let t=r.statSync(e);return`${t.ino}:${t.size}:${t.mtimeMs}`}catch(e){return e.code??`unreadable`}}function bA(e,t,n,i,a=e=>r.readFileSync(e,`utf-8`),o){let s={projectDir:i.projectDir,checkout:i.cwd===null?null:BS(i.cwd)},c=dA(s.projectDir),l=vA(c.definitions,s,t,o),u={...l,dropped:[...l.dropped,...c.strays]};n.warned(c.unchecked.map(e=>`Plugin folder could not be listed: ${e.path} — ${e.error}`));let d=u.config,f=[];for(let t of e){n.entered(t);let e=f.at(-1)?.plugins,r=gA(t,a(t),f.at(-1)?.config??d,{...s,beneath:{dropped:[...u.dropped,...f.flatMap(e=>e.plugins.dropped)],rendering:e?.rendering??u.rendering}},o);n.warned(r.warnings),f.push({...r,path:t})}let p=new Set(f.flatMap(e=>[...e.plugins.reached])),m=e=>p.has(e.path),h=u.dropped.filter(m),g=u.dropped.filter(e=>!m(e));n.warned(h.map(Bk));let _={checkout:s.checkout,roots:c.roots,loaded:u.loaded,dropped:h,unreached:g,reached:p,rendering:f.at(-1)?.plugins.rendering??u.rendering},v=f.at(-1);if(v===void 0)return{layers:f,base:d,installed:_,config:wA(mA(null,d,hA),`<default>`,o)};try{return{layers:f,base:d,installed:_,config:wA(v,v.path,o)}}catch(e){for(let e of f.slice(0,-1))n.entered(e.path),wA(e,e.path,o);throw n.entered(v.path),e}}function xA(e,t,n,r,i){if(n){wA(SA(e),r,i);return}let a=Zk(t),o=[],s={source:``,issues:o,allowedPalettes:new Set,groups:[]};if(Tk(s,e,jx(e),a),Dk(s,e,a),o.length>0)throw new pu(r,o)}function SA(e){return{config:e,raw:{root:e.root,presets:e.presets},source:``}}const CA={raw:{},source:``,warnings:[],plugins:{loaded:[],dropped:[],reached:new Set,rendering:new Map}};function wA({config:e,raw:t,source:n},r=`<config>`,i=new Set(jc())){let a=[],o={source:n,issues:a,allowedPalettes:i,groups:[]};if(rk(o,e,t),Dk(o,e),a.length>0)throw new pu(r,a);let s=Yb(e,a);if(a.length>0)throw new pu(r,a);return $D(yD(s))}function TA(e,t,n=new Set(jc()),r=DA){return EA(e,t,n,()=>({inherited:r,layer:null})).raw}function EA(e,t,n,r){let i=OA(e,t),a=gu(e,t),o=a===null?[]:[a],s=[],c={source:t,issues:s,allowedPalettes:n??new Set(jc()),groups:[]};if(!Qu(i))throw new pu(e,[{path:``,message:`Config root must be an object, got ${$u(i)}`}],o);let{inherited:l,layer:u}=r(i.plugins===void 0?[]:jA({...c,issues:[]},i.plugins)??[],Qu(i.segments)?Object.keys(i.segments):[]),d=kA(c,i,l);if(s.length>0)throw new pu(e,s,o);return{raw:d,warnings:o,layer:u}}const DA=new Set;function OA(e,t){try{return at.default.parse(t)}catch(t){let n=t;throw new pu(e,[{path:``,message:`JSON5 syntax error: ${n.message}`,line:n.lineNumber,col:n.columnNumber}])}}function kA(e,t,n){for(let n of Object.keys(t))AA.has(n)||e.issues.push({path:n,message:`Unknown top-level key "${n}". Expected one of: ${[...AA].join(`, `)}`,line:G(e.source,[n])});let r={};return t.globals!==void 0&&(r.globals=Ef(e,`globals`,t.globals)),t.variables!==void 0&&(r.variables=Wf(e,`variables`,t.variables)),t.segments!==void 0&&(r.segments=Jp(e,t.segments,n)),t.layout!==void 0&&e.issues.push({path:`layout`,message:`"layout" is no longer supported — use "root" with the A-grammar instead.
166
166
  Replace: layout: [["seg1", "seg2"], ["seg3"]]
167
167
  With: root: { v: [{ h: ["seg1", "seg2"] }, "seg3"] }
168
- Single-row example: root: { h: ["seg1", "seg2"] }`,line:G(e.source,[`layout`])}),t.root!==void 0&&(r.root=_m(e,`root`,t.root)),t.actions!==void 0&&(r.actions=rO(e,t.actions)),t.looks!==void 0&&e.issues.push({path:`looks`,message:`"looks" was renamed "styles" — move the block under styles: { … } (and globals.look to globals.style)`,line:G(e.source,[`looks`])}),t.styles!==void 0&&(r.styles=JO(e,t.styles)),t.themeDefaults!==void 0&&(r.themeDefaults=Tf(e,t.themeDefaults)),t.presets!==void 0&&(r.presets=XO(e,t.presets)),t.editGlobals!==void 0&&(r.editGlobals=kf(e,`editGlobals`,t.editGlobals)),t.helpers!==void 0&&(r.helpers=ZO(e,t.helpers)),t.plugins!==void 0&&(r.plugins=jA(e,t.plugins)),Tm(e,r),qb(e,r),lx(e,r),Op(e,r,wp,`the global settings menu`),r}const AA=new Set([`globals`,`variables`,`segments`,`layout`,`looks`,`root`,`actions`,`styles`,`themeDefaults`,`presets`,`editGlobals`,`helpers`,`plugins`]);function jA(e,t){if(Array.isArray(t)&&t.every(e=>typeof e==`string`&&e!==``))return t;e.issues.push({path:`plugins`,message:`"plugins" must be a list of plugin definition paths, got ${$u(t)}`,line:G(e.source,[`plugins`])})}function MA(e){let t=RA(e.termCols),n=RA(e.termRows),r=zA(e.ssh),i=IA(e.tmux),a=FA(e.configEnv),o=PA(e.claudeConfigDir),s=NA(e.mementoEnv);return{...t!==void 0&&{termCols:t},...n!==void 0&&{termRows:n},...r!==void 0&&{ssh:r},...i!==void 0&&{tmux:i},...a!==void 0&&{configEnv:a},...o!==void 0&&{claudeConfigDir:o},...s!==void 0&&{mementoEnv:s}}}function NA(e){if(typeof e!=`object`||!e||Array.isArray(e))return;let t=e,n=$e.filter(e=>t[e]!==void 0);return n.every(e=>PA(t[e])!==void 0)?Object.fromEntries(n.map(e=>[e,t[e]])):void 0}function PA(e){return typeof e==`string`&&l.isAbsolute(e)?e:void 0}function FA(e){return typeof e==`string`&&e!==``?jk(e):void 0}function IA(e){if(e===null)return null;if(typeof e!=`object`)return;let{socket:t,pane:n,truecolor:r}=e;if(!(typeof t!=`string`||t===``)&&!(typeof n!=`string`||n===``)&&!(r!==null&&(typeof r!=`string`||r===``)))return{socket:t,pane:n,truecolor:r}}const LA=1e4;function RA(e){if(typeof e!=`number`||!Number.isFinite(e))return;let t=Math.floor(e);if(!(t<=0))return t>LA?LA:t}function zA(e){return typeof e==`boolean`?e:void 0}function BA(e){return typeof e==`string`&&e!==``&&e.length<=64?e:null}var VA=class extends Error{constructor(e){super(e),this.name=`ProtocolError`}};function HA(e){let t=Buffer.from(JSON.stringify(e),`utf8`),n=Buffer.alloc(4);return n.writeUInt32BE(t.length,0),Buffer.concat([n,t])}function UA(e,t){let n=Buffer.alloc(0);return function(r){for(n=Buffer.concat([n,r]);n.length>=4;){let r=n.readUInt32BE(0);if(r>16777216){t(new VA(`frame too large: ${r}`));return}if(n.length<4+r)return;let i=n.subarray(4,4+r);n=n.subarray(4+r);try{e(JSON.parse(i.toString(`utf8`)))}catch(e){let n=new VA(e instanceof Error?e.message:String(e));e instanceof Error&&(n.cause=e),t(n);return}}}}function WA(e,t,n){return new Promise((r,i)=>{let a=!1,o=t=>{if(!a){a=!0,clearTimeout(s),e.removeAllListeners();try{t()}catch{}}},s=setTimeout(()=>{o(()=>{e.destroy(),i(Error(`TIMEOUT`))})},n),c=UA(e=>o(()=>r(e)),e=>o(()=>i(e)));e.on(`data`,c),e.on(`error`,e=>o(()=>i(e))),e.on(`close`,()=>o(()=>i(Error(`socket closed before response`)))),e.write(HA(t))})}async function GA(e,t,n){let r=null;try{r=await XA(ze(),t.connectMs);let i=await WA(r,{v:3,...e},t.budgetMs);return JA(e.kind,i,n)}catch(e){return YA(e)}finally{r&&r.destroy()}}function KA(e,t){return typeof e==`string`?e:t}function qA(e){return typeof e==`number`&&Number.isInteger(e)&&e>=0?e:0}function JA(e,t,n){let r=t;if(r.ok===!0){let r=n(t);return r===void 0?{kind:`permanent`,cause:`malformed_response`,message:`ok response without payload for "${e}" request`}:{kind:`ok`,value:r}}let i=KA(r.error,`(no error message)`);switch(r.code){case`VERSION_MISMATCH`:return{kind:`permanent`,cause:`version_mismatch`,clientV:3,daemonV:qA(r.daemonV)};case`TIMEOUT`:return{kind:`transient`,cause:`timeout`,message:i};case`BAD_REQUEST`:return{kind:`permanent`,cause:`bad_request`,message:i};case`RENDER_FAILED`:return{kind:`permanent`,cause:`render_failed`,message:i};default:return{kind:`permanent`,cause:`malformed_response`,message:`unknown error code: ${String(r.code)}`}}}function YA(e){if(e instanceof VA||e instanceof SyntaxError)return{kind:`permanent`,cause:`malformed_response`,message:e instanceof Error?e.message:String(e)};let t=e instanceof Error?e.message:String(e);return t===`CONNECT_TIMEOUT`||t===`TIMEOUT`?{kind:`transient`,cause:`timeout`,message:t}:t.includes(`ECONNREFUSED`)||t.includes(`ENOENT`)||t.includes(`ENOTSOCK`)?{kind:`transient`,cause:`unreachable`,message:t}:{kind:`transient`,cause:`io_error`,message:t}}function XA(e,t){return new Promise((n,r)=>{let i=x.createConnection({path:e}),a=setTimeout(()=>{i.destroy(),r(Error(`CONNECT_TIMEOUT`))},t);i.once(`connect`,()=>{clearTimeout(a),n(i)}),i.once(`error`,e=>{clearTimeout(a),r(e)})})}function ZA(e){if(e.kind===`transient`)return`daemon unavailable (${e.cause}: ${e.message})\nHint: daemon may not be running. Run \`cc-candybar\` once to spawn it.`;switch(e.cause){case`version_mismatch`:{let t=e.daemonV===0?`unknown`:`v${e.daemonV}`;return`daemon protocol mismatch (client v${e.clientV} ≠ daemon ${t})`}case`bad_request`:case`render_failed`:case`malformed_response`:return`daemon error (${e.cause}): ${e.message}`}}const QA=`1.129.3`,$A={connectMs:50,budgetMs:150},ej={connectMs:50,budgetMs:200};function tj(e){let t=e.output;return typeof t==`string`?t:void 0}function nj(e,t,n,r){return GA({kind:`render`,hookData:e,args:t,cwd:n,...r},$A,tj)}function rj(e,t){return GA({kind:`click`,verb:e,value:t,clientVersion:QA},ej,tj)}function ij(e){let t=[];for(let n of e){let e=n.read();if(e.kind===`text`)return`# memory report from: ${n.name}\n${e.text}`;t.push(`# ${n.name}: unavailable — ${e.reason}`)}return[`# memory report: no probe answered`,...t.length>0?t:[`# no probe is known for this platform`]].join(`
168
+ Single-row example: root: { h: ["seg1", "seg2"] }`,line:G(e.source,[`layout`])}),t.root!==void 0&&(r.root=_m(e,`root`,t.root)),t.actions!==void 0&&(r.actions=rO(e,t.actions)),t.looks!==void 0&&e.issues.push({path:`looks`,message:`"looks" was renamed "styles" — move the block under styles: { … } (and globals.look to globals.style)`,line:G(e.source,[`looks`])}),t.styles!==void 0&&(r.styles=JO(e,t.styles)),t.themeDefaults!==void 0&&(r.themeDefaults=Tf(e,t.themeDefaults)),t.presets!==void 0&&(r.presets=XO(e,t.presets)),t.editGlobals!==void 0&&(r.editGlobals=kf(e,`editGlobals`,t.editGlobals)),t.helpers!==void 0&&(r.helpers=ZO(e,t.helpers)),t.plugins!==void 0&&(r.plugins=jA(e,t.plugins)),Tm(e,r),qb(e,r),lx(e,r),Op(e,r,wp,`the global settings menu`),r}const AA=new Set([`globals`,`variables`,`segments`,`layout`,`looks`,`root`,`actions`,`styles`,`themeDefaults`,`presets`,`editGlobals`,`helpers`,`plugins`]);function jA(e,t){if(Array.isArray(t)&&t.every(e=>typeof e==`string`&&e!==``))return t;e.issues.push({path:`plugins`,message:`"plugins" must be a list of plugin definition paths, got ${$u(t)}`,line:G(e.source,[`plugins`])})}function MA(e){let t=RA(e.termCols),n=RA(e.termRows),r=zA(e.ssh),i=IA(e.tmux),a=FA(e.configEnv),o=PA(e.claudeConfigDir),s=NA(e.mementoEnv);return{...t!==void 0&&{termCols:t},...n!==void 0&&{termRows:n},...r!==void 0&&{ssh:r},...i!==void 0&&{tmux:i},...a!==void 0&&{configEnv:a},...o!==void 0&&{claudeConfigDir:o},...s!==void 0&&{mementoEnv:s}}}function NA(e){if(typeof e!=`object`||!e||Array.isArray(e))return;let t=e,n=$e.filter(e=>t[e]!==void 0);return n.every(e=>PA(t[e])!==void 0)?Object.fromEntries(n.map(e=>[e,t[e]])):void 0}function PA(e){return typeof e==`string`&&l.isAbsolute(e)?e:void 0}function FA(e){return typeof e==`string`&&e!==``?jk(e):void 0}function IA(e){if(e===null)return null;if(typeof e!=`object`)return;let{socket:t,pane:n,truecolor:r}=e;if(!(typeof t!=`string`||t===``)&&!(typeof n!=`string`||n===``)&&!(r!==null&&(typeof r!=`string`||r===``)))return{socket:t,pane:n,truecolor:r}}const LA=1e4;function RA(e){if(typeof e!=`number`||!Number.isFinite(e))return;let t=Math.floor(e);if(!(t<=0))return t>LA?LA:t}function zA(e){return typeof e==`boolean`?e:void 0}function BA(e){return typeof e==`string`&&e!==``&&e.length<=64?e:null}var VA=class extends Error{constructor(e){super(e),this.name=`ProtocolError`}};function HA(e){let t=Buffer.from(JSON.stringify(e),`utf8`),n=Buffer.alloc(4);return n.writeUInt32BE(t.length,0),Buffer.concat([n,t])}function UA(e,t){let n=Buffer.alloc(0);return function(r){for(n=Buffer.concat([n,r]);n.length>=4;){let r=n.readUInt32BE(0);if(r>16777216){t(new VA(`frame too large: ${r}`));return}if(n.length<4+r)return;let i=n.subarray(4,4+r);n=n.subarray(4+r);try{e(JSON.parse(i.toString(`utf8`)))}catch(e){let n=new VA(e instanceof Error?e.message:String(e));e instanceof Error&&(n.cause=e),t(n);return}}}}function WA(e,t,n){return new Promise((r,i)=>{let a=!1,o=t=>{if(!a){a=!0,clearTimeout(s),e.removeAllListeners();try{t()}catch{}}},s=setTimeout(()=>{o(()=>{e.destroy(),i(Error(`TIMEOUT`))})},n),c=UA(e=>o(()=>r(e)),e=>o(()=>i(e)));e.on(`data`,c),e.on(`error`,e=>o(()=>i(e))),e.on(`close`,()=>o(()=>i(Error(`socket closed before response`)))),e.write(HA(t))})}async function GA(e,t,n){let r=null;try{r=await XA(ze(),t.connectMs);let i=await WA(r,{v:3,...e},t.budgetMs);return JA(e.kind,i,n)}catch(e){return YA(e)}finally{r&&r.destroy()}}function KA(e,t){return typeof e==`string`?e:t}function qA(e){return typeof e==`number`&&Number.isInteger(e)&&e>=0?e:0}function JA(e,t,n){let r=t;if(r.ok===!0){let r=n(t);return r===void 0?{kind:`permanent`,cause:`malformed_response`,message:`ok response without payload for "${e}" request`}:{kind:`ok`,value:r}}let i=KA(r.error,`(no error message)`);switch(r.code){case`VERSION_MISMATCH`:return{kind:`permanent`,cause:`version_mismatch`,clientV:3,daemonV:qA(r.daemonV)};case`TIMEOUT`:return{kind:`transient`,cause:`timeout`,message:i};case`BAD_REQUEST`:return{kind:`permanent`,cause:`bad_request`,message:i};case`RENDER_FAILED`:return{kind:`permanent`,cause:`render_failed`,message:i};default:return{kind:`permanent`,cause:`malformed_response`,message:`unknown error code: ${String(r.code)}`}}}function YA(e){if(e instanceof VA||e instanceof SyntaxError)return{kind:`permanent`,cause:`malformed_response`,message:e instanceof Error?e.message:String(e)};let t=e instanceof Error?e.message:String(e);return t===`CONNECT_TIMEOUT`||t===`TIMEOUT`?{kind:`transient`,cause:`timeout`,message:t}:t.includes(`ECONNREFUSED`)||t.includes(`ENOENT`)||t.includes(`ENOTSOCK`)?{kind:`transient`,cause:`unreachable`,message:t}:{kind:`transient`,cause:`io_error`,message:t}}function XA(e,t){return new Promise((n,r)=>{let i=x.createConnection({path:e}),a=setTimeout(()=>{i.destroy(),r(Error(`CONNECT_TIMEOUT`))},t);i.once(`connect`,()=>{clearTimeout(a),n(i)}),i.once(`error`,e=>{clearTimeout(a),r(e)})})}function ZA(e){if(e.kind===`transient`)return`daemon unavailable (${e.cause}: ${e.message})\nHint: daemon may not be running. Run \`cc-candybar\` once to spawn it.`;switch(e.cause){case`version_mismatch`:{let t=e.daemonV===0?`unknown`:`v${e.daemonV}`;return`daemon protocol mismatch (client v${e.clientV} ≠ daemon ${t})`}case`bad_request`:case`render_failed`:case`malformed_response`:return`daemon error (${e.cause}): ${e.message}`}}const QA=`1.129.5`,$A={connectMs:50,budgetMs:150},ej={connectMs:50,budgetMs:200};function tj(e){let t=e.output;return typeof t==`string`?t:void 0}function nj(e,t,n,r){return GA({kind:`render`,hookData:e,args:t,cwd:n,...r},$A,tj)}function rj(e,t){return GA({kind:`click`,verb:e,value:t,clientVersion:QA},ej,tj)}function ij(e){let t=[];for(let n of e){let e=n.read();if(e.kind===`text`)return`# memory report from: ${n.name}\n${e.text}`;t.push(`# ${n.name}: unavailable — ${e.reason}`)}return[`# memory report: no probe answered`,...t.length>0?t:[`# no probe is known for this platform`]].join(`
169
169
  `)}function aj(e,t){return e===`darwin`?[oj(`footprint`,[`-p`,String(t)]),oj(`vmmap`,[`--summary`,String(t)])]:e===`linux`?[sj(`/proc/self/smaps_rollup`),sj(`/proc/self/status`)]:[]}function oj(e,t){return{name:`${e} ${t.join(` `)}`,read:()=>{let n=O({bin:e,args:[...t],timeoutMs:5e3,category:`limits.memory-report`});return n.ok?n.stdout.trim().length>0?{kind:`text`,text:n.stdout}:{kind:`unavailable`,reason:`exited 0 but printed nothing`}:{kind:`unavailable`,reason:`${n.reason}${n.error===void 0?``:`: ${n.error}`}${cj(n.stderr)}`}}}}function sj(e){return{name:e,read:()=>{try{let t=r.readFileSync(e,`utf8`);return t.trim().length>0?{kind:`text`,text:t}:{kind:`unavailable`,reason:`empty file`}}catch(e){return{kind:`unavailable`,reason:e.message}}}}}function cj(e){let t=e.split(`
170
170
  `).map(e=>e.trim()).find(e=>e.length>0);return t===void 0?``:` (${t})`}const lj=`CC_CANDYBAR_RSS_LIMIT_MB`;function uj(e){let t=e[lj];if(t===void 0)return 512;let n=/^\d+$/.test(t)?Number(t):NaN;if(!Number.isSafeInteger(n)||n<=0)throw Error(`${lj} must be a positive integer (MB), got ${JSON.stringify(t)}`);return n}function dj(e){return uj(e)*2}const fj=1024*1024;function pj(e){return uj(e)*fj}const mj={memoryReport:{prefix:`memory-`,suffix:`.txt`},heapSnapshot:{prefix:`heap-`,suffix:`.heapsnapshot`}};function hj(e,t,n){let{prefix:r,suffix:i}=mj[t];return l.join(e,`${r}${n}${i}`)}function gj(e){for(let t of Object.keys(mj)){let{prefix:n,suffix:r}=mj[t];if(e.startsWith(n)&&e.endsWith(r))return t}return null}function _j(e){let t=e.rssLimitBytes??512*fj,n=e.snapshotsKeep??3,r=!1;function i(){if(r)return!0;let{rss:i,heapTotal:a}=e.memoryBytes();if(i<=t)return!1;r=!0,e.log(`warn`,`RSS ${i} > limit ${t} (v8 heap ${a}); recording memory then shutting down`);let o=`${new Date(e.now()).toISOString().replace(/[:.]/g,`-`)}-${e.pid}`;return vj(e.log,`memory report`,()=>{let t=hj(e.snapshotDir,`memoryReport`,o);e.writeMemoryReport(t,e.captureMemoryReport()),e.log(`info`,`memory report written: ${t}`)}),vj(e.log,`heap snapshot`,()=>{let t=hj(e.snapshotDir,`heapSnapshot`,o);e.log(`info`,`heap snapshot written: ${e.writeHeapSnapshot(t)}`)}),vj(e.log,`artifact rotation`,()=>{bj(e.listArtifacts(),n,e.removeFile)}),e.shutdown(0),!0}function a(){let{rss:n,heapTotal:r}=e.memoryBytes();return n>t*.75?`rss ${n} approaching limit ${t} (v8 heap ${r})`:null}function o(e=6e4){let t=setInterval(()=>{i()},e);return t.unref(),{disarm:()=>clearInterval(t)}}return{checkRss:i,describeNextRestart:a,arm:o}}function vj(e,t,n){try{n()}catch(n){e(`warn`,`${t} failed: ${n.message}`)}}function yj(e){let t=e.slice(e.lastIndexOf(`/`)+1),n=gj(t);if(n===null)return t;let{prefix:r,suffix:i}=mj[n];return t.slice(r.length,t.length-i.length)}function bj(e,t,n){let r=new Map;for(let t of e){let e=yj(t),n=r.get(e);n===void 0?r.set(e,[t]):n.push(t)}let i=[...r.keys()].sort((e,t)=>t.localeCompare(e));for(let e of i.slice(t))for(let t of r.get(e)??[])try{n(t)}catch{}}function xj(e,t,n={}){let i=Re();return{now:()=>Date.now(),pid:process.pid,snapshotDir:i,log:Z,memoryBytes:()=>{let e=process.memoryUsage();return{rss:e.rss,heapTotal:e.heapTotal}},captureMemoryReport:()=>ij(aj(process.platform,process.pid)),writeMemoryReport:(e,t)=>r.writeFileSync(e,t,{mode:384}),writeHeapSnapshot:e=>re.writeHeapSnapshot(e),listArtifacts:()=>{try{return r.readdirSync(i).filter(e=>gj(e)!==null).map(e=>l.join(i,e))}catch{return[]}},removeFile:e=>r.unlinkSync(e),shutdown:t,startedAtMs:e,...n}}function Sj(e={}){if(Rj()!==null)return;let n=e.spawn??zj,r=Fj();if(r.kind===`contended`){let e=wj();e!==null&&e>2e3&&(t.stderr.write(`cc-candybar: spawn-lock held ${e}ms (likely crashed holder) — spawning unlocked\n`),Cj(n));return}if(r.kind===`error`){t.stderr.write(`cc-candybar: spawn-lock unavailable (${r.reason}) — spawning unlocked\n`),Cj(n);return}try{Cj(n)}finally{Lj()}}function Cj(e){jj()&&Tj(e)}function wj(){try{let e=r.statSync(Je());return Date.now()-e.mtimeMs}catch{return null}}function Tj(e){try{e()||t.stderr.write(`cc-candybar: daemon spawn returned false (unable to resolve script path?)
171
171
  `)}catch(e){t.stderr.write(`cc-candybar: daemon spawn failed: ${e.message}\n`)}}function Ej(e,t){return e===null?{kind:`allow`}:e<-1e4?{kind:`allow-future-garbage`,futureMs:-e}:e<t?{kind:`deny`}:{kind:`allow`}}function Dj(e){return Math.min(3e3*2**Math.min(Math.max(e,0),5),6e4)}function Oj(e){try{let t=r.readFileSync(e,`utf8`).trim(),n=Number(t);return!Number.isInteger(n)||n<0?0:Math.min(n,5)}catch{return 0}}function kj(e,n){try{r.mkdirSync(l.dirname(e),{recursive:!0}),r.writeFileSync(e,String(n),{mode:384})}catch(e){t.stderr.write(`cc-candybar: could not record spawn.backoff: ${e.message}\n`)}}function Aj(){try{r.unlinkSync(Xe())}catch(e){e.code!==`ENOENT`&&t.stderr.write(`cc-candybar: could not reset spawn.backoff: ${e.message}\n`)}}function jj(){let e=Ye(),n=Xe(),r=Oj(n),i=Ej(Mj(e),Dj(r));return i.kind===`deny`?!1:(i.kind===`allow-future-garbage`&&t.stderr.write(`cc-candybar: spawn.cooldown mtime is ${i.futureMs}ms in the future — ignoring and spawning\n`),Nj(e),kj(n,Math.min(r+1,5)),!0)}function Mj(e){try{return Date.now()-r.statSync(e).mtimeMs}catch{return null}}function Nj(e){try{r.mkdirSync(l.dirname(e),{recursive:!0}),r.writeFileSync(e,`${t.pid} ${Date.now()}\n`,{mode:384})}catch(e){t.stderr.write(`cc-candybar: could not record spawn.cooldown: ${e.message}\n`)}}let Pj=null;function Fj(){let e=Je();for(let n=0;n<2;n++){try{let n=r.openSync(e,`wx`,384);try{r.writeSync(n,JSON.stringify({pid:t.pid,ts:Date.now()}))}catch{}return Pj={fd:n,path:e},{kind:`held`}}catch(t){let n=t.code;if(n!==`EEXIST`)return{kind:`error`,reason:`openSync(${e}): ${n??t.message}`}}if(!Ij(e))return{kind:`contended`};try{r.unlinkSync(e)}catch(e){if(e.code!==`ENOENT`)return{kind:`error`,reason:`unlink stale spawn.lock: ${e.message}`}}}return{kind:`contended`}}function Ij(e){try{let t=r.statSync(e);return Date.now()-t.mtimeMs>1e4}catch{return!0}}function Lj(){if(!Pj)return;let{fd:e,path:t}=Pj;Pj=null;try{r.closeSync(e)}catch{}try{r.unlinkSync(t)}catch{}}function Rj(){try{return r.mkdirSync(Re(),{recursive:!0}),null}catch(e){return`mkdir ${Re()}: ${e.message}`}}function zj(){let e=t.execPath,n=t.argv[1];return n?Me({bin:e,args:[`--max-old-space-size=${dj(t.env)}`,n,`daemon`],category:`daemon-spawn`}).ok:!1}const Bj=`cc-candybar`,Vj=`dispatch`,Hj=`set-state`,Uj=`step-state`,Wj=`copy`,Gj=`open-vscode`,Kj=`toolbar-toggle`,qj=`show-config-error`,Jj=`show-config-warning`,Yj=`set-config`,Xj=`step-config`,Zj=`save`,Qj=`save-preset`,$j=`save-theme-default`,eM=`delete-preset`,tM=`reset-config`,nM=`apply-layout-op`,rM=`undo`,iM=`redo`,aM=`back`,oM=`rewind`,sM=`apply-update`,cM=`doctor-run`,lM=`doctor-fix`,uM=`doctor-probe`,dM=`ceiling`,fM=`slash`;function pM(e){return e.map(encodeURIComponent).join(`/`)}function mM(e){return e.length===0?[]:e.split(`/`).map(decodeURIComponent)}function hM(e){return`${Bj}://${Vj}/${e.map(e=>`e=${encodeURIComponent(`${e.verb}/${pM(e.args)}`)}`).join(`&`)}`}function gM(e){return new T(e).getAll(`e`).map(bM)}const _M=new Set([Hj,tM]);function vM(e){return e.reduce((e,t)=>{let n=e.at(-1),r=n&&yM(n,t);return r?[...e.slice(0,-1),r]:[...e,t]},[])}function yM(e,t){if(e.verb!==t.verb||!_M.has(e.verb))return;let[n,r]=[bM(e.value),bM(t.value)];return n.verb===r.verb?{verb:e.verb,value:`${n.verb}/${n.value}/${r.value}`}:void 0}function bM(e){let t=e.indexOf(`/`);return t===-1?{verb:e,value:``}:{verb:e.slice(0,t),value:e.slice(t+1)}}const xM=/^[A-Za-z0-9_./,:@%+-][A-Za-z0-9_./,:@%+=-]*$/;function SM(e){return`'${e.replaceAll(`'`,`'\\''`)}'`}function CM(e){return xM.test(e)?e:SM(e)}const wM=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/;function TM(e){let t=wM.exec(e);return t?{kind:`ok`,value:[Number(t[1]),Number(t[2]),Number(t[3])]}:{kind:`failed`,reason:`"${e}" is not a release version (expected MAJOR.MINOR.PATCH)`}}function EM(e){return e.join(`.`)}function DM([e,t,n],[r,i,a]){return e-r||t-i||n-a}const OM=`@promptctl/cc-candybar`;async function kM(e,t,n){let r=`${n}/-/package/${encodeURIComponent(e)}/dist-tags`;try{let e=await t(r,{signal:AbortSignal.timeout(5e3)});if(!e.ok)return X(`registry responded ${e.status} for ${r}`);let n=await e.json();return typeof n.latest==`string`?TM(n.latest):Y}catch(e){return X(e instanceof Error?e.message:String(e))}}function AM(e,t){let n=TM(e);if(n.kind===`failed`)return{kind:`unchecked`,installed:e,reason:n.reason};switch(t.kind){case`failed`:return{kind:`unchecked`,installed:e,reason:t.reason};case`absent`:return{kind:`unchecked`,installed:e,reason:"the registry lists no `latest` dist-tag"};case`ok`:{let e=DM(n.value,t.value);return e<0?{kind:`stale`,installed:n.value,latest:t.value}:e>0?{kind:`ahead`,installed:n.value,latest:t.value}:{kind:`current`,installed:n.value}}}}function jM(e,t){switch(t.kind){case`current`:return{stream:`stdout`,text:`✓ cc-candybar ${EM(t.installed)} is the latest release.\n`};case`ahead`:return{stream:`stdout`,text:`cc-candybar ${EM(t.installed)} is newer than the registry's latest release (${EM(t.latest)}): an unpublished build.\n`};case`stale`:{let n=EM(t.latest);return{stream:`stderr`,text:`⚠ cc-candybar ${EM(t.installed)} was staged, but the latest release is ${n}.\n pnpm's release-age gate (minimumReleaseAge) and its dlx cache can both\n resolve \`@latest\` to an older release without saying so.\n To install ${n} now, name it explicitly:\n pnpm dlx ${e}@${n} install\n`}}case`unchecked`:return{stream:`stderr`,text:`⚠ Could not check for a cc-candybar release newer than ${t.installed} (${t.reason}); the registry check was skipped.\n`}}}const MM=`CCCandybarURLHandler`,NM=[],PM={"darwin-arm64":`@promptctl/cc-candybar-darwin-arm64`,"darwin-x64":`@promptctl/cc-candybar-darwin-x64`,"linux-x64":`@promptctl/cc-candybar-linux-x64`,"linux-arm64":`@promptctl/cc-candybar-linux-arm64`};function FM(e,t){return[e,...t].map(CM).join(` `)}function IM(){return l.join(h.homedir(),`Applications`,`${MM}.app`)}function LM(){if(process.platform!==`darwin`)throw Error(`URL handler installation requires macOS (found platform: ${process.platform}).`)}function RM(){if(process.platform===`darwin`)return l.join(h.homedir(),`Library`,`Application Support`,`CCCandybar`);let e=process.env.XDG_DATA_HOME??l.join(h.homedir(),`.local`,`share`);return l.join(e,`cc-candybar`)}function zM(){return l.join(RM(),`bin`,`cc-candybar`)}function BM(){return l.join(RM(),`dist`,`index.mjs`)}function VM(e,t){return[`on open location L`,`\tdo shell script "'${e.replace(/"/g,`\\"`)}' '${t.replace(/"/g,`\\"`)}' url-handle " & quoted form of L`,`end open location`].join(`
@@ -180,8 +180,8 @@ Config tooling:
180
180
  `))throw Error(`renderStripCells: rich-js strip output did not end its last line`);return s.slice(0,-1)}function aP(e){return Math.min(20,e??20)}const oP={heading:`ERROR`,glyph:`⚠`,colors:NN},sP={heading:`WARNING`,glyph:`⚠`,colors:PN},cP={heading:`UPDATE`,glyph:`⬆`,colors:PN};function lP(e,t){return{text:ON(e),link:t}}function uP(e,t,n){let[r,...i]=[dP(e,oP,qj),t,dP(n,sP,Jj)].flat();return r===void 0?null:{channels:[r,...i]}}function dP(e,t,n){let r=hM([{verb:n,args:[e]}]),[i,...a]=e.split(/\r\n|\r|\n/).map(e=>lP(e,r)).filter(e=>e.text!==``).map(e=>[e]);return i===void 0?[]:[{severity:t,message:e,lines:[i,...a]}]}function fP(e){return e.channels.map(e=>`${e.severity.heading}\n${e.message}\n`).join(`
181
181
  `)}function pP(e,t,n,r){if(t===null)return e;let i=mP(r),a=t.channels.flatMap(e=>hP(e,i)),o=n.failedConfigFile!==null||a.length>r.rowCap,s=a.slice(0,r.rowCap-Number(o)),c=o?[gP(t,n,a.length-s.length,i)]:[],l=[...s,...c].join(`
182
182
  `);return e?`${l}\n${e}`:l}function mP(e){return{endcaps:`plain`,separator:``,width:e.width,wrap:!0,padding:0,charset:`unicode`,colorCompatibility:e.colorCompatibility}}function hP(e,t){let n=new H({bgcolor:e.severity.colors.bg,color:e.severity.colors.fg}),r=Kt(Math.max(2,t.width-1)),i=(e,t)=>new W(`${e} `,{style:t,end:``,overflow:`ignore`});return e.lines.flatMap((a,o)=>iP([i(o===0?e.severity.glyph:` `,n.withLink(a[0].link)),...a.flatMap(e=>{let t=n.withLink(e.link);return e.text.split(` `).flatMap(e=>Zt(e,r)).map(e=>i(e,t))})],t).split(`
183
- `))}function gP(e,t,n,r){let{colors:i}=e.channels[0].severity,{fullText:a,failedConfigFile:o}=t,s=new H({bgcolor:i.bg,color:i.fg}),c=(e,t)=>new W(e,{style:t,end:``,overflow:`ignore`}),l=n>0?[c(`${n} more rows · `,s),a.kind===`file`?c(`open full text`,s.withLink(ae(a.path).href)):c(`full text unavailable: ${ON(a.reason)}`,s)]:[],u=o===null?[]:[c(`${l.length>0?` · `:``}open `,s),c(ON(o),s.withLink(ae(o).href))],d=[c(`↳ `,s),...l,...u.slice(0,-1)],f=d.reduce((e,t)=>e+t.cellLength,0),p=u.slice(-1).map(e=>e.truncate(Math.max(1,r.width-f),{mode:`middle`})),m=W.fromFragments([...d,...p]).truncate(r.width);return m.overflow=`ignore`,iP([m],r)}const _P=e=>!e.startsWith(`.`)&&!e.endsWith(`~`);function vP(e,t){return t.isSymbolicLink()?Buffer.from(r.readlinkSync(e)):r.readFileSync(e)}function yP(e,t){return r.readdirSync(t).filter(_P).sort().flatMap(n=>{let i=l.join(t,n),a=r.lstatSync(i,{throwIfNoEntry:!1});return a===void 0?[]:a.isDirectory()?yP(e,i):[[l.relative(e,i).split(l.sep).join(`/`),vP(i,a)]]})}function bP(e){let t=oe.createHash(`sha256`);for(let[n,r]of yP(e,e))t.update(n).update(`\0`).update(r).update(`\0`);return t.digest(`hex`)}const xP=e=>e.slice(0,7);function SP(e){return l.dirname(l.dirname(e))}function CP(){return{version:QA,digest:`541ed7a9e09a347653d4f8b0ca7a49681eec52120091f1614e594a990482b970`}}function wP(e){let t=JSON.parse(r.readFileSync(l.join(e,`package.json`),`utf8`)),n=typeof t==`object`&&t?t.version:void 0;if(typeof n!=`string`)throw Error(`${l.join(e,`package.json`)} has no version string`);return n}function TP(e,t){try{let n=SP(E(e)),i=l.join(n,`src`);if(!r.existsSync(i))return{kind:`not-source-checkout`};let a=t(),o=bP(i);return o===a.digest?{kind:`current`,root:n,stamp:a}:{kind:`stale`,root:n,source:{version:wP(n),digest:o},running:a}}catch(e){return{kind:`unchecked`,reason:e.message}}}var $=class extends Error{constructor(e){super(e),this.name=`BadVerbArgs`}};function EP(e){return e.op===`remove`?`remove:${e.target}`:`insert:${e.segment}:${e.anchor}:${e.relation}`}function DP(e){let t=e.split(`:`);return t[0]===`remove`&&t.length===2&&t[1]?{op:`remove`,target:t[1]}:t[0]===`insert`&&t.length===4&&t[1]&&t[2]&&(t[3]===`before`||t[3]===`after`)?{op:`insert`,segment:t[1],anchor:t[2],relation:t[3]}:null}function OP(e,t,n){let r=Su(e,new Set(n.map(xu).filter(e=>e.includes(t)).flat()));return r===e?{seg:e}:{seg:e,id:r}}const kP=/^-?\d+$/;function AP(e,t,n=`set-state`){let r=e.filter(e=>e.includes(`/`));if(r.length>0)throw Error(`makeAllowListValidator(${t}): values contain "/" — the ${n} wire shape splits values on "/" so slash-bearing options cannot be addressed. Offending values: ${r.join(`, `)}`);if(e.includes(``))throw Error(`makeAllowListValidator(${t}): empty string is not a writable option — the validator rejects empty input before the allow-list check, so an "" in the allowed list could be rendered but never delivered. Remove "" from the allowed list.`);let i=new Set(e),a=[...e];return e=>e?i.has(e)?{ok:!0,value:e}:{ok:!1,reason:`unknown ${t} "${e}" (have: ${a.join(`, `)})`}:{ok:!1,reason:`${t} value is required`}}function jP(e){return t=>{if(!t)return{ok:!1,reason:`${e} value is required`};if(!kP.test(t))return{ok:!1,reason:`${e} must be an integer, got "${t}"`};let n=t[0]===`-`,r=(n?t.slice(1):t).replace(/^0+/,``);return r===``?{ok:!0,value:`0`}:{ok:!0,value:n?`-${r}`:r}}}function MP(e,t,n){return r=>r?kP.test(r)?{ok:!0,value:String(Math.max(e,Math.min(t,parseInt(r,10))))}:{ok:!1,reason:`${n} must be an integer, got "${r}"`}:{ok:!1,reason:`${n} value is required`}}function NP(e,t,n=`state`){let r=t.filter(e=>e.kind===`range`),i=t.some(e=>e.kind===`int`),a=t.flatMap(e=>e.kind===`allow-list`?e.allowed:[]);if(r.length===0&&!i)return{kind:`allow-list`,allowed:[...new Set(a)]};let o=a.filter(e=>!kP.test(e));if(o.length>0)throw Error(`${n} action table: key "${e}" is an integer spec (a paged cursor or a bounded value) but a click writes non-integer value(s) to it (${o.join(`, `)}). A ${n} key has one key shape — point that click at a distinct key, or write an integer.`);if(i&&r.length>0)throw Error(`${n} action table: key "${e}" is declared as both a paged cursor (int) and a bounded value (range) — a ${n} key has one key shape. Use distinct keys.`);if(r.length>0){let t=Math.min(...r.map(e=>e.min)),i=Math.max(...r.map(e=>e.max)),o=a.filter(e=>{let n=parseInt(e,10);return n<t||n>i});if(o.length>0)throw Error(`${n} action table: key "${e}" is a bounded range [${t},${i}] but a click writes out-of-range value(s) to it (${o.join(`, `)}). The range gate would clamp them, storing a different value than the click renders — write an in-range integer, or point that click at a distinct key.`);return{kind:`range`,min:t,max:i}}return{kind:`int`}}function PP(e){return e===`config`?`set-config`:`set-state`}function FP(e,t,n){return t.kind===`int`?jP(`menu page "${e}"`):t.kind===`range`?MP(t.min,t.max,`${n} stepper "${e}"`):AP(t.allowed,`${n} "${e}"`,PP(n))}function IP(e,t=`state`){let n=new Map;for(let{key:t,spec:r}of e){let e=n.get(t);e?e.push(r):n.set(t,[r])}return[...n].map(([e,n])=>({key:e,spec:NP(e,n,t)}))}function LP(e,t,n,r){let i=new Map(Object.entries(e)),a=new Map,o=new Set(t.map(e=>e.key));for(let{key:e,spec:t}of n)if(o.has(e)&&t.kind!==`allow-list`)throw Error(`${r} gate: key "${e}" is written by the daemon's own links as one of a list of values, and cannot be declared as ${t.kind===`int`?`a paged cursor (int)`:`a bounded value (range)`}. Use a distinct key.`);let s=[...t.map(({key:e,allowed:t})=>({key:e,spec:{kind:`allow-list`,allowed:t}})),...n];for(let{key:t,spec:n}of IP(s,r)){if(!t)throw Error(`${r} gate: key is required`);if(t.includes(`/`))throw Error(`${r} gate: key "${t}" contains "/" — the wire shape splits on "/" so a slash-bearing key cannot be addressed. Use a slash-free key.`);if(Object.hasOwn(e,t))throw Error(`${r} gate: key "${t}" is a built-in ${r} key and cannot be re-claimed (built-in keys: ${Object.keys(e).join(`, `)})`);i.set(t,FP(t,n,r)),n.kind===`range`&&a.set(t,{min:n.min,max:n.max})}return{validate(e,t){let n=i.get(e);return n?n(t):{ok:!1,reason:`unknown ${r} key "${e}" (have: ${[...i.keys()].join(`, `)})`}},listKeys:()=>[...i.keys()],rangeParamsFor:e=>a.get(e)??null}}function RP(e,t,n){let r=[],i=0,a=new WeakMap;return{register(n,a){let o={key:n,allowed:a};LP(e,[o],[],t),r.push(o),i++;let s=!0;return()=>{s&&(s=!1,r.splice(r.indexOf(o),1),i++)}},gateFor(o){let s=a.get(o);if(s?.epoch===i)return s.gate;let c=LP(e,r,n(o),t);return a.set(o,{epoch:i,gate:c}),c}}}const zP=RP({},`config`,KP);function BP(e,t){return zP.register(e,t)}function VP(e){return zP.gateFor(e)}function HP(e,t){return`persist`in e?`to`in e?[{key:e.persist,spec:{kind:`allow-list`,allowed:[e.to]}}]:`from`in e?[{key:e.persist,spec:{kind:`allow-list`,allowed:Tw(e.from,t).members}}]:`cycle`in e?[{key:e.persist,spec:{kind:`allow-list`,allowed:e.cycle}}]:`removeSegment`in e?[{key:e.persist,spec:{kind:`allow-list`,allowed:[EP({op:`remove`,target:e.removeSegment})]}}]:`insertSegment`in e?[{key:e.persist,spec:{kind:`allow-list`,allowed:[EP({op:`insert`,segment:e.insertSegment,anchor:e.anchor,relation:e.relation})]}}]:`insertSegmentFrom`in e?[{key:e.persist,spec:{kind:`allow-list`,allowed:Tw(e.insertSegmentFrom,t).members.map(t=>EP({op:`insert`,segment:t,anchor:e.anchor,relation:e.relation}))}}]:[{key:e.persist,spec:{kind:`range`,min:e.min,max:e.max}}]:[]}function UP(e,t){let n=Pf(e).get(t);return n===void 0?null:String(n)}function WP(e){let t=new Set;for(let n of Object.values(e.actions)){`reset`in n&&t.add(n.reset);let e=`persist`in n?Hw(n.persist):null;e?.scope===`preset-root`&&t.add(Rw(e.preset))}return[...t].map(e=>({key:e,spec:{kind:`allow-list`,allowed:[]}}))}function GP(e){let t=FD(e);return[...WP(e),...Object.values(e.actions).flatMap(e=>HP(e,t))]}function KP(e){return IP(GP(e),`config`)}const qP={},JP=MT(`commands.`),YP=KT(`autocompact.`,e=>`{{ template "formatTokenCount" ${e} }}`),XP=`trimPrefix "/" (trimPrefix .project_dir .current_dir)`,ZP=`{{ \$dir := .current_dir }}{{ if and (ne .home "") (or (eq .home .current_dir) (hasPrefix (printf "%s/" .home) .current_dir)) }}{{ \$dir = printf "~%s" (trimPrefix .home .current_dir) }}{{ else }}{{ if or (eq .project_dir .current_dir) (hasPrefix (printf "%s/" .project_dir) .current_dir) }}{{ $dir = ternary (${XP}) (basename .project_dir) (ne (${XP}) "") }}{{ end }}{{ end }}{{ action "copyDir" (abbreviatePath \$dir) }}`,QP=`{{ ${rT} }}`,$P={min:0,max:100,step:5},eF={warnAt:{label:`warning at %`,domain:$P,default:50},errorAt:{label:`error at %`,domain:{...$P,atLeast:`warnAt`},default:80}};function tF(e){return{budget:{label:`budget $`,domain:{min:0,max:1e4,step:5},default:e},warnAt:{label:`warning at %`,domain:$P,default:80}}}const nF={globals:{palette:`tokyo-night`},variables:{...JP.variables,...QC,current_dir:{kind:`input`,path:`workspace.current_dir`,default:`?`},"model.display_name":{kind:`input`,path:`model.display_name`,default:``},version:{kind:`input`,path:`version`,default:``},home:{kind:`input`,path:`home`,default:``},"tmux.session":{kind:`input`,path:`tmux.session`,default:``},"host.name":{kind:`input`,path:`host.name`,default:``},"host.user":{kind:`input`,path:`host.user`,default:``},"host.ssh":{kind:`input`,path:`host.ssh`,type:`boolean`,default:!1},"git.repoName":{kind:`input`,path:`git.repoName`,default:``},"git.branch":{kind:`input`,path:`git.branch`,default:``},"git.sha":{kind:`input`,path:`git.sha`,default:``},"git.ahead":{kind:`input`,path:`git.ahead`,type:`number`,default:0},"git.behind":{kind:`input`,path:`git.behind`,type:`number`,default:0},"git.staged":{kind:`input`,path:`git.staged`,type:`number`,default:0},"git.unstaged":{kind:`input`,path:`git.unstaged`,type:`number`,default:0},"git.untracked":{kind:`input`,path:`git.untracked`,type:`number`,default:0},"git.conflicts":{kind:`input`,path:`git.conflicts`,type:`number`,default:0},"git.upstream":{kind:`input`,path:`git.upstream`,default:``},"git.stash":{kind:`input`,path:`git.stash`,type:`number`,default:0},"git.status":{kind:`input`,path:`git.status`,default:`clean`},"git.operation":{kind:`input`,path:`git.operation`,default:``},"git.timeSinceCommit":{kind:`input`,path:`git.timeSinceCommit`,type:`number`,default:0},"git.color.branch":{kind:`literal`,value:`primary`},"git.color.staged":{kind:`literal`,value:`success`},"git.color.unstaged":{kind:`literal`,value:`warning`},"git.color.untracked":{kind:`literal`,value:`accent`},"git.color.conflicts":{kind:`literal`,value:`error`},"git.color.ahead":{kind:`literal`,value:`success`},"git.color.behind":{kind:`literal`,value:`warning`},"git.color.stash":{kind:`literal`,value:`accent`},"git.detail":{kind:`state`,key:`git-detail`,default:`collapsed`},"git.prNumber":{kind:`input`,path:`git.prNumber`,type:`number`,default:0},"git.prState":{kind:`input`,path:`git.prState`,default:``},"git.prUrl":{kind:`input`,path:`git.prUrl`,default:``},"git.prError":{kind:`input`,path:`git.prError`,default:``},"cache.expiresAt":{kind:`input`,path:`cache.expiresAt`,type:`number`,default:0},"session.cost":{kind:`input`,path:`session.cost`,type:`number`,default:0},"session.tokens":{kind:`input`,path:`session.tokens`,type:`number`,default:0},"today.cost":{kind:`input`,path:`today.cost`,type:`number`,default:0},"today.tokens":{kind:`input`,path:`today.tokens`,type:`number`,default:0},"block.nativeUtilization":{kind:`input`,path:`block.nativeUtilization`,type:`number`,default:0},"block.resetsAt":{kind:`input`,path:`block.resetsAt`,type:`number`,default:0},"weekly.percentage":{kind:`input`,path:`weekly.percentage`,type:`number`,default:0},"weekly.resetsAt":{kind:`input`,path:`weekly.resetsAt`,type:`number`,default:0},"burn.costPerHour":{kind:`input`,path:`burn.costPerHour`,type:`number`,default:-1},"block.etaMinutes":{kind:`input`,path:`block.etaMinutes`,type:`number`,default:-1},"weekly.etaMinutes":{kind:`input`,path:`weekly.etaMinutes`,type:`number`,default:-1},"speed.input":{kind:`input`,path:`speed.input`,type:`number`,default:-1},"speed.output":{kind:`input`,path:`speed.output`,type:`number`,default:-1},"speed.total":{kind:`input`,path:`speed.total`,type:`number`,default:-1},"speed.history":{kind:`input`,path:`speed.history`,type:`string`,default:``},"context.totalTokens":{kind:`input`,path:`context.totalTokens`,type:`number`,default:0},"context.contextLeft":{kind:`input`,path:`context.contextLeft`,type:`number`,default:100},"memento.ceiling":{kind:`input`,path:`memento.ceiling`,type:`number`,default:-1},"memento.off":{kind:`input`,path:`memento.off`,type:`boolean`,default:!1},"memento.session":{kind:`input`,path:`memento.session`,default:``},"memento.error":{kind:`input`,path:`memento.error`,default:``},"metrics.lastResponseTime":{kind:`input`,path:`metrics.lastResponseTime`,type:`number`,default:0},"metrics.responseTime":{kind:`input`,path:`metrics.responseTime`,type:`number`,default:0},"metrics.sessionDuration":{kind:`input`,path:`metrics.sessionDuration`,type:`number`,default:0},"metrics.messageCount":{kind:`input`,path:`metrics.messageCount`,type:`number`,default:0},"metrics.linesAdded":{kind:`input`,path:`metrics.linesAdded`,type:`number`,default:0},"metrics.linesRemoved":{kind:`input`,path:`metrics.linesRemoved`,type:`number`,default:0},"activity.command":{kind:`input`,path:`activity.command`,type:`string`,default:``},"activity.todo.total":{kind:`input`,path:`activity.todo.total`,type:`number`,default:0},"activity.todo.completed":{kind:`input`,path:`activity.todo.completed`,type:`number`,default:0},"activity.todo.position":{kind:`input`,path:`activity.todo.position`,type:`number`,default:0},"activity.todo.active":{kind:`input`,path:`activity.todo.active`,type:`string`,default:``},"activity.tool.running":{kind:`input`,path:`activity.tool.running`,type:`string`,default:``},"activity.tool.done":{kind:`input`,path:`activity.tool.done`,type:`string`,default:``}},segments:{directory:{group:`location`,description:"The current directory, shortened fish-style — `~` under home, project-relative inside the project. Click to copy the full path.",template:ZP},model:{group:`model-context`,description:`The active model's display name.`,template:`✱ {{ formatModelName .model.display_name }}`,when:`{{ ne .model.display_name "" }}`},sessionId:{group:`session-tools`,description:`The session id, truncated to 8 characters.`,template:`⌗{{ trunc 8 .session.id }}`,when:`{{ ne .session.id "" }}`},version:{group:`model-context`,description:`The Claude Code version reported in the hook payload.`,template:`◈ v{{ .version }}`,when:`{{ ne .version "" }}`},tmux:{group:`location`,description:`The tmux session name; hidden when not inside tmux.`,template:`tmux:{{ .tmux.session | default "none" }}`,when:`{{ ne .tmux.session "" }}`},host:{group:`location`,description:`user@host on a warning background, shown only over SSH.`,template:`⇄ {{ .host.user | default "?" }}@{{ .host.name | default "?" }}`,bg:`warning`,when:`{{ .host.ssh }}`},gitaculous:{group:`git`,description:`The git state: a summary (branch, ahead/behind, S/U/? flags) that the arrow at its right edge expands to every fact — repo, in-progress operation, sha, upstream ±, stash count, time since the last commit.`,template:`{{ if eq .git.detail "expanded" }}{{ template "gitExpanded" . }}{{ else }}{{ template "gitCollapsed" . }}{{ end }} {{ action "gitDetail" "▸" "◂" }}`,fg:QP,when:`{{ ne .git.branch "" }}`,settings:{aheadBehind:{label:`ahead/behind`,domain:`bool`,default:!0},flags:{label:`dirty flags`,domain:`bool`,default:!0},operation:{label:`operation`,domain:`bool`,default:!0},repo:{label:`repo name`,domain:`bool`,default:!0},sha:{label:`commit hash`,domain:`bool`,default:!0},stash:{label:`stash`,domain:`bool`,default:!0},upstream:{label:`upstream`,domain:`bool`,default:!0},age:{label:`time since commit`,domain:`bool`,default:!0}}},gitPr:{group:`git`,description:"The pull request open for this branch, as a link; `⚠ PR` when the forge lookup failed.",template:`{{ if ne .git.prUrl "" }}{{ link .git.prUrl (printf "⇆ #%v" .git.prNumber) }}{{ else }}⚠ PR{{ end }}`,when:`{{ or (ne .git.prUrl "") (ne .git.prError "") }}`},toolbar:{group:`session-tools`,description:`Quick actions: copy the session id, and open the project, transcript or repo.`,template:xT(``).template},commands:{group:`session-tools`,description:`Type /compact, /model or /clear into this session; /clear asks for a second click. Hidden when not inside tmux.`,template:JP.template,when:JP.when},themeSwitcher:{group:`session-tools`,description:"`◀ <theme> ▶`: the theme the bar is wearing; ◀ and ▶ switch this session to the previous or next theme, wrapping at the ends.",template:`{{ carousel "stepTheme" 0 }}`},session:{group:`cost-limits`,description:`This session's cost and token total, with a budget warning once a budget is configured.`,template:`§ {{ template "formatCost" .session.cost }} ({{ template "formatTokens" .session.tokens }}){{ template "budgetStatus" (dict "cost" .session.cost "budget" .settings.budget "warn" .settings.warnAt) }}`,settings:tF(0)},today:{group:`cost-limits`,description:`Today's cost and tokens across every session, with a budget warning once a budget is configured.`,template:`☉ {{ template "formatCost" .today.cost }} ({{ template "formatTokens" .today.tokens }}){{ template "budgetStatus" (dict "cost" .today.cost "budget" .settings.budget "warn" .settings.warnAt) }}`,settings:tF(50)},block:{group:`cost-limits`,description:`The 5-hour rate-limit block: percent used and time to reset, heating to warning then error.`,template:`◱ {{ round .block.nativeUtilization }}% ({{ template "formatResetCountdown" .block.resetsAt }})`,bg:`{{ ramp (round .block.nativeUtilization) "step" 0 (tint) .settings.warnAt "warning" .settings.errorAt "error" }}`,settings:eF,when:`{{ gt .block.resetsAt 0 }}`},weekly:{group:`cost-limits`,description:`The weekly rate-limit quota: percent used and time to reset, heating to warning then error.`,template:`◑ {{ round .weekly.percentage }}% ({{ template "formatResetCountdown" .weekly.resetsAt }})`,bg:`{{ ramp (round .weekly.percentage) "step" 0 (tint) .settings.warnAt "warning" .settings.errorAt "error" }}`,settings:eF,when:`{{ gt .weekly.resetsAt 0 }}`},burnrate:{group:`cost-limits`,description:`Spend per hour, with the projected time to the 5-hour and weekly limits.`,template:`⚡ {{ template "formatRate" .burn.costPerHour }} · {{ template "formatEta" .block.etaMinutes }} to 5h · {{ template "formatEta" .weekly.etaMinutes }} to wk`,bg:`{{ ramp .block.etaMinutes "step" -1 (tint) 0 "error" .settings.errorWithin "warning" .settings.warnWithin (tint) }}`,settings:{errorWithin:{label:`error within (min)`,domain:{min:0,max:300,step:5},default:30},warnWithin:{label:`warning within (min)`,domain:{min:0,max:300,step:5,atLeast:`errorWithin`},default:60}},when:`{{ or (gt .block.resetsAt 0) (gt .weekly.resetsAt 0) }}`},speed:{group:`activity`,description:`Token throughput for the latest exchange: output, input, and total.`,template:`⇅ out {{ template "formatSpeed" .speed.output }} · in {{ template "formatSpeed" .speed.input }} · tot {{ template "formatSpeed" .speed.total }}`,when:`{{ gt .session.tokens 0 }}`},tokenSparkline:{group:`activity`,description:`A sparkline of recent token throughput.`,template:`⚡ {{ sparkline .speed.history 24 }}`,when:`{{ ne .speed.history "" }}`},cacheTimer:{group:`activity`,description:"Minutes until the prompt cache expires, or `cold` once it has.",template:`◴ {{ if le (minutesUntilReset .cache.expiresAt) 0 }}cold{{ else }}{{ minutesUntilReset .cache.expiresAt }}m{{ end }}`,fg:`{{ readableOn (color (cascade (minutesUntilReset .cache.expiresAt) "0:error" "9:warning" "21:foreground")) (bgOf) ${tc} }}`,when:`{{ gt .cache.expiresAt 0 }}`},context:{group:`model-context`,description:`Context used, in tokens and percent remaining, heating as it fills.`,template:`◔ {{ formatInteger .context.totalTokens }} ({{ .context.contextLeft }}%)`,bg:`{{ ramp .context.contextLeft "step" 0 "error" 21 "warning" 41 (tint) }}`,when:`{{ gt .context.totalTokens 0 }}`},ceiling:{group:`model-context`,description:`The memento plugin's context ceiling for this session: − and + move it by 100K, ∞ lifts it, ↺ drops this session's own setting.`,template:`{{ if ne .memento.error "" }}⌈ ⚠ {{ .memento.error }} {{ action "ceiling.clear" "↺" }}{{ else }}⌈ {{ if .memento.off }}off{{ else }}{{ template "formatTokenCount" .memento.ceiling }} {{ action "ceiling.lower" "−" }} {{ action "ceiling.raise" "+" }} {{ action "ceiling.off" "∞" }}{{ end }}{{ if ne .memento.session "" }} {{ action "ceiling.clear" "↺" }}{{ end }}{{ end }}`,bg:`{{ if ne .memento.error "" }}{{ color "error" }}{{ else }}{{ tint }}{{ end }}`,when:`{{ or (ge .memento.ceiling 0) (ne .memento.error "") }}`},autocompact:{group:`model-context`,description:`Claude Code's auto-compact window: − and + move it by 100K, ↺ returns it to auto. Clicks type /autocompact into this session, so the controls show only inside tmux.`,template:YP.template,bg:YP.bg,when:YP.when},metrics:{group:`activity`,description:`Response times, session duration, message count, and lines added/removed.`,template:`{{ if .metrics.lastResponseTime }} Δ {{ template "formatResponseTime" .metrics.lastResponseTime }}{{ end }}{{ if .metrics.responseTime }} ⧖ {{ template "formatResponseTime" .metrics.responseTime }}{{ end }}{{ if .metrics.sessionDuration }} ⧗ {{ template "formatDuration" .metrics.sessionDuration }}{{ end }}{{ if .metrics.messageCount }} ◆ {{ .metrics.messageCount }}{{ end }}{{ if .metrics.linesAdded }} + {{ .metrics.linesAdded }}{{ end }}{{ if .metrics.linesRemoved }} - {{ .metrics.linesRemoved }}{{ end }} `,when:`{{ or (gt .metrics.lastResponseTime 0.0) (gt .metrics.responseTime 0.0) (gt .metrics.sessionDuration 0.0) (gt .metrics.messageCount 0) (gt .metrics.linesAdded 0) (gt .metrics.linesRemoved 0) }}`},activity:{group:`activity`,description:`What Claude is doing: the slash command that opened the turn, the in-progress todo, and the tools in flight.`,template:`{{ if .activity.command }} ⌘ {{ .activity.command }}{{ end }}{{ if .activity.todo.total }}{{ if .activity.todo.active }} ☐ {{ .activity.todo.position }}/{{ .activity.todo.total }} {{ abbrev 32 .activity.todo.active }}{{ else }} ☑ {{ .activity.todo.completed }}/{{ .activity.todo.total }}{{ end }}{{ end }}{{ if .activity.tool.running }} ⟳ {{ template "formatToolTally" .activity.tool.running }}{{ end }}{{ if .activity.tool.done }} ✓ {{ template "formatToolTally" .activity.tool.done }}{{ end }} `,when:`{{ or (ne .activity.command "") (gt .activity.todo.total 0) (ne .activity.tool.running "") (ne .activity.tool.done "") }}`}},root:{rows:{identity:{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`host`},{kind:`segment`,name:`directory`},{kind:`segment`,name:`gitaculous`}]},status:{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`model`},{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`context`},{kind:`segment`,name:`ceiling`},{kind:`segment`,name:`autocompact`}]},{kind:`segment`,name:`cacheTimer`},{kind:`segment`,name:`block`},{kind:`segment`,name:`weekly`},{kind:`segment`,name:`activity`}]}}},actions:{...xT(``).actions,...JP.actions,copyDir:{copy:`{{ .current_dir }}`},stepTheme:{set:`theme`,from:`themes`},gitDetail:{set:`git-detail`,cycle:[`collapsed`,`expanded`]},"ceiling.raise":{ceiling:`set`,to:`+100_000`},"ceiling.lower":{ceiling:`set`,to:`-100_000`},"ceiling.off":{ceiling:`set`,to:`off`},"ceiling.clear":{ceiling:`clear`},...YP.actions},styles:{none:{hueShift:0,chromaScale:1,lightnessScale:1,lightnessShift:0},vivid:{hueShift:0,chromaScale:1.35,lightnessScale:1,lightnessShift:0},muted:{hueShift:0,chromaScale:.55,lightnessScale:1,lightnessShift:0},dim:{hueShift:0,chromaScale:1,lightnessScale:.85,lightnessShift:0},bright:{hueShift:0,chromaScale:1,lightnessScale:1,lightnessShift:.08},inverted:{hueShift:0,chromaScale:1,lightnessScale:-1,lightnessShift:1}},themeDefaults:qP,presets:{default:{},compact:{root:{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`directory`},{kind:`segment`,name:`gitaculous`},{kind:`segment`,name:`context`}]},globals:{padding:0}},verbose:{root:{kind:`container`,direction:`vertical`,children:[{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`directory`},{kind:`segment`,name:`gitaculous`},{kind:`segment`,name:`gitPr`}]},{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`model`},{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`context`},{kind:`segment`,name:`ceiling`},{kind:`segment`,name:`autocompact`}]},{kind:`segment`,name:`cacheTimer`},{kind:`segment`,name:`block`},{kind:`segment`,name:`weekly`},{kind:`segment`,name:`burnrate`}]},{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`speed`},{kind:`segment`,name:`tokenSparkline`}]}]}},zen:{root:{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`directory`},{kind:`segment`,name:`context`}]},globals:{endcaps:`plain`,style:`dim`}},git:{root:{kind:`container`,direction:`vertical`,children:[{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`host`},{kind:`segment`,name:`directory`},{kind:`segment`,name:`gitaculous`},{kind:`segment`,name:`gitPr`}]},{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`model`},{kind:`segment`,name:`context`},{kind:`segment`,name:`activity`}]}]}},usage:{root:{kind:`container`,direction:`vertical`,children:[{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`model`},{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`context`},{kind:`segment`,name:`ceiling`},{kind:`segment`,name:`autocompact`}]},{kind:`segment`,name:`cacheTimer`}]},{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`block`},{kind:`segment`,name:`weekly`},{kind:`segment`,name:`burnrate`}]},{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`session`},{kind:`segment`,name:`today`},{kind:`segment`,name:`speed`},{kind:`segment`,name:`tokenSparkline`}]}]}},dense:{root:{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`host`},{kind:`segment`,name:`directory`},{kind:`segment`,name:`gitaculous`},{kind:`segment`,name:`model`},{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`context`},{kind:`segment`,name:`ceiling`},{kind:`segment`,name:`autocompact`}]},{kind:`segment`,name:`cacheTimer`},{kind:`segment`,name:`block`},{kind:`segment`,name:`weekly`},{kind:`segment`,name:`session`},{kind:`segment`,name:`activity`}]},globals:{padding:0}}},editGlobals:{endcaps:`plain`,default_separator:` | `},helpers:{gitPaint:`{{ fg (readableOn (color .color) (bgOf) ${tc}) .text }}`,gitCollapsed:`{{ template "gitBranch" . }}{{ template "gitAheadBehind" . }}{{ template "gitFlags" . }}`,gitExpanded:`(git){{ template "gitRepo" . }}{{ template "gitOperation" . }}{{ template "gitSha" . }}{{ template "gitFlags" . }} {{ template "gitBranch" . }}{{ template "gitUpstream" . }}{{ template "gitStash" . }}{{ template "gitAge" . }}`,gitBranch:`⎇ {{ template "gitPaint" (dict "color" .git.color.branch "text" .git.branch) }}`,gitRepo:`{{ if and .settings.repo (ne .git.repoName "") }} {{ .git.repoName }}{{ end }}`,gitOperation:`{{ if and .settings.operation (ne .git.operation "") }} [{{ .git.operation }}]{{ end }}`,gitSha:`{{ if and .settings.sha (ne .git.sha "") }} {{ .git.sha }}{{ end }}`,gitFlags:`{{ if and .settings.flags (or (gt .git.staged 0) (gt .git.unstaged 0) (gt .git.untracked 0) (gt .git.conflicts 0)) }} {{ if gt .git.staged 0 }}{{ template "gitPaint" (dict "color" .git.color.staged "text" "S") }}{{ end }}{{ if gt .git.unstaged 0 }}{{ template "gitPaint" (dict "color" .git.color.unstaged "text" "U") }}{{ end }}{{ if gt .git.untracked 0 }}{{ template "gitPaint" (dict "color" .git.color.untracked "text" "?") }}{{ end }}{{ if gt .git.conflicts 0 }}{{ template "gitPaint" (dict "color" .git.color.conflicts "text" (printf "!%v" .git.conflicts)) }}{{ end }}{{ end }}`,gitAheadBehind:`{{ if and .settings.aheadBehind (or (gt .git.ahead 0) (gt .git.behind 0)) }} {{ if gt .git.ahead 0 }}{{ template "gitPaint" (dict "color" .git.color.ahead "text" (printf "+%v" .git.ahead)) }}{{ end }}{{ if and (gt .git.ahead 0) (gt .git.behind 0) }}/{{ end }}{{ if gt .git.behind 0 }}{{ template "gitPaint" (dict "color" .git.color.behind "text" (printf "-%v" .git.behind)) }}{{ end }}{{ end }}`,gitUpstream:`{{ if and .settings.upstream (ne .git.upstream "") }} [{{ .git.upstream }}{{ template "gitAheadBehind" . }}]{{ end }}`,gitStash:`{{ if and .settings.stash (gt .git.stash 0) }} {{ template "gitPaint" (dict "color" .git.color.stash "text" (printf "(%v stashed)" .git.stash)) }}{{ end }}`,gitAge:`{{ if and .settings.age (gt .git.timeSinceCommit 0) }} ◷ {{ template "formatTimeSince" .git.timeSinceCommit }}{{ end }}`,formatCost:'{{ if lt . 0.01 }}<$0.01{{ else }}${{ printf "%.2f" . }}{{ end }}',formatTokenCount:qT(`.`),formatTokens:`{{ template "formatTokenCount" . }} tokens`,formatToolTally:`{{ $names := splitList "," . }}{{ range $i, $pair := $names }}{{ if lt $i 2 }}{{ if $i }} {{ end }}{{ $kv := splitList ":" $pair }}{{ index $kv 0 }}{{ if ne (index $kv 1) "1" }}×{{ index $kv 1 }}{{ end }}{{ end }}{{ end }}{{ if gt (len $names) 2 }} +{{ sub (len $names) 2 }}{{ end }}`,formatRate:`{{ if lt . 0 }}—/hr{{ else }}{{ template "formatCost" . }}/hr{{ end }}`,formatEta:`{{ if lt . 0 }}—{{ else }}{{ template "formatLongTimeRemaining" . }}{{ end }}`,formatSpeed:`{{ if lt . 0 }}—{{ else }}{{ template "formatTokenCount" (round .) }}/s{{ end }}`,formatTokenBreakdown:`{{ $first := true }}{{ if gt .input 0 }}{{ template "formatTokenCount" .input }} in{{ $first = false }}{{ end }}{{ if gt .output 0 }}{{ if not $first }} + {{ end }}{{ template "formatTokenCount" .output }} out{{ $first = false }}{{ end }}{{ if or (gt .cacheCreation 0) (gt .cacheRead 0) }}{{ if not $first }} + {{ end }}{{ template "formatTokenCount" (add .cacheCreation .cacheRead) }} cached{{ $first = false }}{{ end }}{{ if $first }}0 tokens{{ end }}`,budgetStatus:`{{ if or (le .budget 0) (lt .cost 0) }}{{ else }}{{ $pct := minf 100 (mulf (divf .cost .budget) 100) }}{{ $p := printf "%.0f%%" $pct }}{{ if ge $pct .warn }} !{{ $p }}{{ else }}{{ if ge $pct 50 }} +{{ $p }}{{ else }} {{ $p }}{{ end }}{{ end }}{{ end }}`,formatTimeSince:`{{ if lt . 60 }}{{ . }}s{{ else if lt . 3600 }}{{ div . 60 }}m{{ else if lt . 86400 }}{{ div . 3600 }}h{{ else if lt . 604800 }}{{ div . 86400 }}d{{ else }}{{ div . 604800 }}w{{ end }}`,formatDuration:`{{ if lt . 60 }}{{ printf "%.0f" . }}s{{ else if lt . 3600 }}{{ printf "%.0f" (divf . 60) }}m{{ else if lt . 86400 }}{{ printf "%.1f" (divf . 3600) }}h{{ else }}{{ printf "%.1f" (divf . 86400) }}d{{ end }}`,formatResponseTime:`{{ if lt . 60 }}{{ printf "%.1f" . }}s{{ else }}{{ printf "%.1f" (divf . 60) }}m{{ end }}`,formatLongTimeRemaining:`{{ if ge . 1440 }}{{ $d := div . 1440 }}{{ $h := div (mod . 1440) 60 }}{{ if gt $h 0 }}{{ $d }}d {{ $h }}h{{ else }}{{ $d }}d{{ end }}{{ else if ge . 60 }}{{ $h := div . 60 }}{{ $m := mod . 60 }}{{ if gt $m 0 }}{{ $h }}h {{ $m }}m{{ else }}{{ $h }}h{{ end }}{{ else }}{{ . }}m{{ end }}`,formatResetCountdown:`{{ template "formatLongTimeRemaining" (add 1 (minutesUntilReset .)) }}`}},rF=new Set([nF.globals.palette,...Object.keys(nF.themeDefaults),...Object.values(nF.segments).map(e=>e.palette)].filter(e=>e!==void 0)),iF=Id(TA(`<default>`,JSON.stringify(nF),rF),nF),aF=Nb(iF.presets);function oF(e){return aF.includes(e)}const sF=Object.freeze({});function cF(e,t){return e.kind===`decided`?t[e.name]??sF:sF}function lF(e,t){return{...e,...Object.fromEntries(ku.map(n=>[n,e[n]??t[n]]))}}function uF(e){if(!e)return 0;try{return s(e).mtimeMs}catch{return 0}}const dF=new class{slots;head=null;tail=null;constructor(e){this.slots=e}async run(e){await this.acquire();try{return await e()}finally{this.release()}}async acquire(){if(this.slots>0){this.slots--;return}await new Promise(e=>{let t={wake:e,next:null};this.tail?this.tail.next=t:this.head=t,this.tail=t})}release(){let e=this.head;if(!e){this.slots++;return}this.head=e.next,this.head||(this.tail=null),e.wake()}}(8);function fF(e){return((...t)=>dF.run(()=>e(...t)))}const pF=fF(ee),mF=fF(C),hF=fF(w);async function gF(e,t){return dF.run(async()=>{let n=null;try{n=await S(e,`r`);let{size:r,mtimeMs:i,ino:a}=await n.stat(),o=t!==void 0&&(a!==t.ino||r<t.offset),s=o||t===void 0?0:t.offset;if(s>=r)return J({buf:Buffer.alloc(0),start:s,size:r,mtimeMs:i,ino:a,reset:o});let c=Buffer.alloc(r-s),l=0;for(;l<c.length;){let{bytesRead:e}=await n.read(c,l,c.length-l,s+l);if(e===0)break;l+=e}return J({buf:l===c.length?c:c.subarray(0,l),start:s,size:r,mtimeMs:i,ino:a,reset:o})}catch(t){return t.code===`ENOENT`?Y:X(`readAppended ${e}: ${t instanceof Error?t.message:String(t)}`)}finally{await n?.close().catch(e=>{D(`transcript-fs: close failed: ${e instanceof Error?e.message:String(e)}`)})}})}async function _F(e,t){return dF.run(async()=>{let n=null;try{n=await S(e,`r`);let{size:r}=await n.stat(),i=Math.max(0,r-t),a=Buffer.alloc(r-i),o=0;for(;o<a.length;){let{bytesRead:e}=await n.read(a,o,a.length-o,i+o);if(e===0)break;o+=e}return J({buf:o===a.length?a:a.subarray(0,o),fromStart:i===0})}catch(t){return t.code===`ENOENT`?Y:X(`readTail ${e}: ${t instanceof Error?t.message:String(t)}`)}finally{await n?.close().catch(e=>{D(`transcript-fs: close failed: ${e instanceof Error?e.message:String(e)}`)})}})}const vF=/"(?:cache_read_input_tokens|cache_creation_input_tokens)":[1-9]/;function yF(e){let t;try{t=JSON.parse(e)}catch{return null}let n=t.message?.usage;if(!((n?.cache_read_input_tokens??0)>0||(n?.cache_creation_input_tokens??0)>0))return null;let r=t.timestamp==null?NaN:Date.parse(t.timestamp);return Number.isNaN(r)?null:r}async function bF(e){let t=await xF(e);return t.kind===`ok`?J(Math.floor((t.value+36e5)/1e3)):t}async function xF(e){for(let t of[65536,1048576]){let n=await _F(e,t);if(n.kind!==`ok`)return n;let r=SF(n.value.buf,n.value.fromStart);if(r!=null)return J(r);if(n.value.fromStart)return Y}return Y}function SF(e,t){let n=e.toString(`utf8`).split(`
184
- `),r=+!t;for(let e=n.length-1;e>=r;e--){let t=n[e];if(!t||!vF.test(t))continue;let r=yF(t);if(r!=null)return r}return null}function CF(e,t){return{...e,claudeConfigDir:PT(t.claudeConfigDir),env:t.mementoEnv}}const wF=l.join(`lib`,`ceiling_config.py`),TF=l.join(`skills`,`ceiling`,`bin`,`ceiling`);function EF(e,t){let n=typeof e==`object`&&e?e.plugins:void 0;if(typeof n!=`object`||!n)throw Error(`${t} has no "plugins" object`);return Object.entries(n).filter(([e])=>e.split(`@`)[0]===`memento`).flatMap(([e,n])=>{if(!Array.isArray(n))throw Error(`${t}: "${e}" is not a list of installs`);return n.map(n=>{let{scope:r,installPath:i,projectPath:a}=n??{};if(typeof r!=`string`||typeof i!=`string`)throw Error(`${t}: an install of "${e}" has no scope/path`);return typeof a==`string`?{key:e,scope:r,installPath:i,projectPath:a}:{key:e,scope:r,installPath:i}})})}function DF(e,t){let n=!0;for(let i of e){if(!r.existsSync(i))continue;let e;try{e=JSON.parse(r.readFileSync(i,`utf8`))?.enabledPlugins?.[t]}catch(e){return X(`memento lookup: ${i}: ${e.message}`)}typeof e==`boolean`&&(n=e)}return J(n)}function OF(e,t){if(!r.existsSync(e))return Y;let n;try{n=EF(JSON.parse(r.readFileSync(e,`utf8`)),e)}catch(e){return X(`memento lookup: ${e.message}`)}let i=n.find(e=>e.projectPath===t)??n.find(e=>e.scope===`user`);if(i===void 0)return Y;let a=DF([l.join(l.dirname(l.dirname(e)),`settings.json`),l.join(t,`.claude`,`settings.json`),l.join(t,`.claude`,`settings.local.json`)],i.key);if(a.kind!==`ok`)return a;if(!a.value)return Y;let o=[wF,TF].filter(e=>!r.existsSync(l.join(i.installPath,e)));return o.length===0?J(i.installPath):X(`memento at ${i.installPath} has no ${o.join(` or `)} — upgrade the plugin`)}function kF(e,t=process.env){let n=new Set([`CLAUDE_PROJECT_DIR`,`CLAUDE_CODE_SESSION_ID`,...e.env===void 0?[]:$e]);return{...Object.fromEntries(Object.entries(t).filter(([e])=>!n.has(e))),...e.env,CLAUDE_CODE_SESSION_ID:e.sessionId,CLAUDE_PROJECT_DIR:e.projectDir||e.cwd}}function AF(e){return e.stderr.trim()||e.error||`${e.reason}${e.exitCode===null?``:` (exit ${e.exitCode})`}`}function jF(e){let t;try{t=JSON.parse(e)}catch{return X(`memento read: not JSON: ${e.trim()}`)}let{ceiling:n,session:r}=t??{},i=n===`off`||typeof n==`number`&&n>=0?n:void 0;return i!==void 0&&(r===null||typeof r==`string`)?J({ceiling:i,session:r}):X(`memento read: unexpected answer: ${e.trim()}`)}async function MF(e,t){let n=await je({bin:`python3`,args:[`-c`,`
183
+ `))}function gP(e,t,n,r){let{colors:i}=e.channels[0].severity,{fullText:a,failedConfigFile:o}=t,s=new H({bgcolor:i.bg,color:i.fg}),c=(e,t)=>new W(e,{style:t,end:``,overflow:`ignore`}),l=n>0?[c(`${n} more rows · `,s),a.kind===`file`?c(`open full text`,s.withLink(ae(a.path).href)):c(`full text unavailable: ${ON(a.reason)}`,s)]:[],u=o===null?[]:[c(`${l.length>0?` · `:``}open `,s),c(ON(o),s.withLink(ae(o).href))],d=[c(`↳ `,s),...l,...u.slice(0,-1)],f=d.reduce((e,t)=>e+t.cellLength,0),p=u.slice(-1).map(e=>e.truncate(Math.max(1,r.width-f),{mode:`middle`})),m=W.fromFragments([...d,...p]).truncate(r.width);return m.overflow=`ignore`,iP([m],r)}const _P=e=>!e.startsWith(`.`)&&!e.endsWith(`~`);function vP(e,t){return t.isSymbolicLink()?Buffer.from(r.readlinkSync(e)):r.readFileSync(e)}function yP(e,t){return r.readdirSync(t).filter(_P).sort().flatMap(n=>{let i=l.join(t,n),a=r.lstatSync(i,{throwIfNoEntry:!1});return a===void 0?[]:a.isDirectory()?yP(e,i):[[l.relative(e,i).split(l.sep).join(`/`),vP(i,a)]]})}function bP(e){let t=oe.createHash(`sha256`);for(let[n,r]of yP(e,e))t.update(n).update(`\0`).update(r).update(`\0`);return t.digest(`hex`)}const xP=e=>e.slice(0,7);function SP(e){return l.dirname(l.dirname(e))}function CP(){return{version:QA,digest:`72a58c36eb529a68de65c00226eaa9a5ec9e2f45579529810bd30cb34f0ff2f0`}}function wP(e){let t=JSON.parse(r.readFileSync(l.join(e,`package.json`),`utf8`)),n=typeof t==`object`&&t?t.version:void 0;if(typeof n!=`string`)throw Error(`${l.join(e,`package.json`)} has no version string`);return n}function TP(e,t){try{let n=SP(E(e)),i=l.join(n,`src`);if(!r.existsSync(i))return{kind:`not-source-checkout`};let a=t(),o=bP(i);return o===a.digest?{kind:`current`,root:n,stamp:a}:{kind:`stale`,root:n,source:{version:wP(n),digest:o},running:a}}catch(e){return{kind:`unchecked`,reason:e.message}}}var $=class extends Error{constructor(e){super(e),this.name=`BadVerbArgs`}};function EP(e){return e.op===`remove`?`remove:${e.target}`:`insert:${e.segment}:${e.anchor}:${e.relation}`}function DP(e){let t=e.split(`:`);return t[0]===`remove`&&t.length===2&&t[1]?{op:`remove`,target:t[1]}:t[0]===`insert`&&t.length===4&&t[1]&&t[2]&&(t[3]===`before`||t[3]===`after`)?{op:`insert`,segment:t[1],anchor:t[2],relation:t[3]}:null}function OP(e,t,n){let r=Su(e,new Set(n.map(xu).filter(e=>e.includes(t)).flat()));return r===e?{seg:e}:{seg:e,id:r}}const kP=/^-?\d+$/;function AP(e,t,n=`set-state`){let r=e.filter(e=>e.includes(`/`));if(r.length>0)throw Error(`makeAllowListValidator(${t}): values contain "/" — the ${n} wire shape splits values on "/" so slash-bearing options cannot be addressed. Offending values: ${r.join(`, `)}`);if(e.includes(``))throw Error(`makeAllowListValidator(${t}): empty string is not a writable option — the validator rejects empty input before the allow-list check, so an "" in the allowed list could be rendered but never delivered. Remove "" from the allowed list.`);let i=new Set(e),a=[...e];return e=>e?i.has(e)?{ok:!0,value:e}:{ok:!1,reason:`unknown ${t} "${e}" (have: ${a.join(`, `)})`}:{ok:!1,reason:`${t} value is required`}}function jP(e){return t=>{if(!t)return{ok:!1,reason:`${e} value is required`};if(!kP.test(t))return{ok:!1,reason:`${e} must be an integer, got "${t}"`};let n=t[0]===`-`,r=(n?t.slice(1):t).replace(/^0+/,``);return r===``?{ok:!0,value:`0`}:{ok:!0,value:n?`-${r}`:r}}}function MP(e,t,n){return r=>r?kP.test(r)?{ok:!0,value:String(Math.max(e,Math.min(t,parseInt(r,10))))}:{ok:!1,reason:`${n} must be an integer, got "${r}"`}:{ok:!1,reason:`${n} value is required`}}function NP(e,t,n=`state`){let r=t.filter(e=>e.kind===`range`),i=t.some(e=>e.kind===`int`),a=t.flatMap(e=>e.kind===`allow-list`?e.allowed:[]);if(r.length===0&&!i)return{kind:`allow-list`,allowed:[...new Set(a)]};let o=a.filter(e=>!kP.test(e));if(o.length>0)throw Error(`${n} action table: key "${e}" is an integer spec (a paged cursor or a bounded value) but a click writes non-integer value(s) to it (${o.join(`, `)}). A ${n} key has one key shape — point that click at a distinct key, or write an integer.`);if(i&&r.length>0)throw Error(`${n} action table: key "${e}" is declared as both a paged cursor (int) and a bounded value (range) — a ${n} key has one key shape. Use distinct keys.`);if(r.length>0){let t=Math.min(...r.map(e=>e.min)),i=Math.max(...r.map(e=>e.max)),o=a.filter(e=>{let n=parseInt(e,10);return n<t||n>i});if(o.length>0)throw Error(`${n} action table: key "${e}" is a bounded range [${t},${i}] but a click writes out-of-range value(s) to it (${o.join(`, `)}). The range gate would clamp them, storing a different value than the click renders — write an in-range integer, or point that click at a distinct key.`);return{kind:`range`,min:t,max:i}}return{kind:`int`}}function PP(e){return e===`config`?`set-config`:`set-state`}function FP(e,t,n){return t.kind===`int`?jP(`menu page "${e}"`):t.kind===`range`?MP(t.min,t.max,`${n} stepper "${e}"`):AP(t.allowed,`${n} "${e}"`,PP(n))}function IP(e,t=`state`){let n=new Map;for(let{key:t,spec:r}of e){let e=n.get(t);e?e.push(r):n.set(t,[r])}return[...n].map(([e,n])=>({key:e,spec:NP(e,n,t)}))}function LP(e,t,n,r){let i=new Map(Object.entries(e)),a=new Map,o=new Set(t.map(e=>e.key));for(let{key:e,spec:t}of n)if(o.has(e)&&t.kind!==`allow-list`)throw Error(`${r} gate: key "${e}" is written by the daemon's own links as one of a list of values, and cannot be declared as ${t.kind===`int`?`a paged cursor (int)`:`a bounded value (range)`}. Use a distinct key.`);let s=[...t.map(({key:e,allowed:t})=>({key:e,spec:{kind:`allow-list`,allowed:t}})),...n];for(let{key:t,spec:n}of IP(s,r)){if(!t)throw Error(`${r} gate: key is required`);if(t.includes(`/`))throw Error(`${r} gate: key "${t}" contains "/" — the wire shape splits on "/" so a slash-bearing key cannot be addressed. Use a slash-free key.`);if(Object.hasOwn(e,t))throw Error(`${r} gate: key "${t}" is a built-in ${r} key and cannot be re-claimed (built-in keys: ${Object.keys(e).join(`, `)})`);i.set(t,FP(t,n,r)),n.kind===`range`&&a.set(t,{min:n.min,max:n.max})}return{validate(e,t){let n=i.get(e);return n?n(t):{ok:!1,reason:`unknown ${r} key "${e}" (have: ${[...i.keys()].join(`, `)})`}},listKeys:()=>[...i.keys()],rangeParamsFor:e=>a.get(e)??null}}function RP(e,t,n){let r=[],i=0,a=new WeakMap;return{register(n,a){let o={key:n,allowed:a};LP(e,[o],[],t),r.push(o),i++;let s=!0;return()=>{s&&(s=!1,r.splice(r.indexOf(o),1),i++)}},gateFor(o){let s=a.get(o);if(s?.epoch===i)return s.gate;let c=LP(e,r,n(o),t);return a.set(o,{epoch:i,gate:c}),c}}}const zP=RP({},`config`,KP);function BP(e,t){return zP.register(e,t)}function VP(e){return zP.gateFor(e)}function HP(e,t){return`persist`in e?`to`in e?[{key:e.persist,spec:{kind:`allow-list`,allowed:[e.to]}}]:`from`in e?[{key:e.persist,spec:{kind:`allow-list`,allowed:Tw(e.from,t).members}}]:`cycle`in e?[{key:e.persist,spec:{kind:`allow-list`,allowed:e.cycle}}]:`removeSegment`in e?[{key:e.persist,spec:{kind:`allow-list`,allowed:[EP({op:`remove`,target:e.removeSegment})]}}]:`insertSegment`in e?[{key:e.persist,spec:{kind:`allow-list`,allowed:[EP({op:`insert`,segment:e.insertSegment,anchor:e.anchor,relation:e.relation})]}}]:`insertSegmentFrom`in e?[{key:e.persist,spec:{kind:`allow-list`,allowed:Tw(e.insertSegmentFrom,t).members.map(t=>EP({op:`insert`,segment:t,anchor:e.anchor,relation:e.relation}))}}]:[{key:e.persist,spec:{kind:`range`,min:e.min,max:e.max}}]:[]}function UP(e,t){let n=Pf(e).get(t);return n===void 0?null:String(n)}function WP(e){let t=new Set;for(let n of Object.values(e.actions)){`reset`in n&&t.add(n.reset);let e=`persist`in n?Hw(n.persist):null;e?.scope===`preset-root`&&t.add(Rw(e.preset))}return[...t].map(e=>({key:e,spec:{kind:`allow-list`,allowed:[]}}))}function GP(e){let t=FD(e);return[...WP(e),...Object.values(e.actions).flatMap(e=>HP(e,t))]}function KP(e){return IP(GP(e),`config`)}const qP={},JP=MT(`commands.`),YP=KT(`autocompact.`,e=>`{{ template "formatTokenCount" ${e} }}`),XP=`trimPrefix "/" (trimPrefix .project_dir .current_dir)`,ZP=`{{ \$dir := .current_dir }}{{ if and (ne .home "") (or (eq .home .current_dir) (hasPrefix (printf "%s/" .home) .current_dir)) }}{{ \$dir = printf "~%s" (trimPrefix .home .current_dir) }}{{ else }}{{ if or (eq .project_dir .current_dir) (hasPrefix (printf "%s/" .project_dir) .current_dir) }}{{ $dir = ternary (${XP}) (basename .project_dir) (ne (${XP}) "") }}{{ end }}{{ end }}{{ action "copyDir" (abbreviatePath \$dir) }}`,QP=`{{ ${rT} }}`,$P={min:0,max:100,step:5},eF={warnAt:{label:`warning at %`,domain:$P,default:50},errorAt:{label:`error at %`,domain:{...$P,atLeast:`warnAt`},default:80}};function tF(e){return{budget:{label:`budget $`,domain:{min:0,max:1e4,step:5},default:e},warnAt:{label:`warning at %`,domain:$P,default:80}}}const nF={globals:{palette:`tokyo-night`},variables:{...JP.variables,...QC,current_dir:{kind:`input`,path:`workspace.current_dir`,default:`?`},"model.display_name":{kind:`input`,path:`model.display_name`,default:``},version:{kind:`input`,path:`version`,default:``},home:{kind:`input`,path:`home`,default:``},"tmux.session":{kind:`input`,path:`tmux.session`,default:``},"host.name":{kind:`input`,path:`host.name`,default:``},"host.user":{kind:`input`,path:`host.user`,default:``},"host.ssh":{kind:`input`,path:`host.ssh`,type:`boolean`,default:!1},"git.repoName":{kind:`input`,path:`git.repoName`,default:``},"git.branch":{kind:`input`,path:`git.branch`,default:``},"git.sha":{kind:`input`,path:`git.sha`,default:``},"git.ahead":{kind:`input`,path:`git.ahead`,type:`number`,default:0},"git.behind":{kind:`input`,path:`git.behind`,type:`number`,default:0},"git.staged":{kind:`input`,path:`git.staged`,type:`number`,default:0},"git.unstaged":{kind:`input`,path:`git.unstaged`,type:`number`,default:0},"git.untracked":{kind:`input`,path:`git.untracked`,type:`number`,default:0},"git.conflicts":{kind:`input`,path:`git.conflicts`,type:`number`,default:0},"git.upstream":{kind:`input`,path:`git.upstream`,default:``},"git.stash":{kind:`input`,path:`git.stash`,type:`number`,default:0},"git.status":{kind:`input`,path:`git.status`,default:`clean`},"git.operation":{kind:`input`,path:`git.operation`,default:``},"git.timeSinceCommit":{kind:`input`,path:`git.timeSinceCommit`,type:`number`,default:0},"git.color.branch":{kind:`literal`,value:`primary`},"git.color.staged":{kind:`literal`,value:`success`},"git.color.unstaged":{kind:`literal`,value:`warning`},"git.color.untracked":{kind:`literal`,value:`accent`},"git.color.conflicts":{kind:`literal`,value:`error`},"git.color.ahead":{kind:`literal`,value:`success`},"git.color.behind":{kind:`literal`,value:`warning`},"git.color.stash":{kind:`literal`,value:`accent`},"git.detail":{kind:`state`,key:`git-detail`,default:`collapsed`},"git.prNumber":{kind:`input`,path:`git.prNumber`,type:`number`,default:0},"git.prState":{kind:`input`,path:`git.prState`,default:``},"git.prUrl":{kind:`input`,path:`git.prUrl`,default:``},"git.prError":{kind:`input`,path:`git.prError`,default:``},"cache.expiresAt":{kind:`input`,path:`cache.expiresAt`,type:`number`,default:0},"session.cost":{kind:`input`,path:`session.cost`,type:`number`,default:0},"session.tokens":{kind:`input`,path:`session.tokens`,type:`number`,default:0},"today.cost":{kind:`input`,path:`today.cost`,type:`number`,default:0},"today.tokens":{kind:`input`,path:`today.tokens`,type:`number`,default:0},"block.nativeUtilization":{kind:`input`,path:`block.nativeUtilization`,type:`number`,default:0},"block.resetsAt":{kind:`input`,path:`block.resetsAt`,type:`number`,default:0},"weekly.percentage":{kind:`input`,path:`weekly.percentage`,type:`number`,default:0},"weekly.resetsAt":{kind:`input`,path:`weekly.resetsAt`,type:`number`,default:0},"burn.costPerHour":{kind:`input`,path:`burn.costPerHour`,type:`number`,default:-1},"block.etaMinutes":{kind:`input`,path:`block.etaMinutes`,type:`number`,default:-1},"weekly.etaMinutes":{kind:`input`,path:`weekly.etaMinutes`,type:`number`,default:-1},"speed.input":{kind:`input`,path:`speed.input`,type:`number`,default:-1},"speed.output":{kind:`input`,path:`speed.output`,type:`number`,default:-1},"speed.total":{kind:`input`,path:`speed.total`,type:`number`,default:-1},"speed.history":{kind:`input`,path:`speed.history`,type:`string`,default:``},"context.totalTokens":{kind:`input`,path:`context.totalTokens`,type:`number`,default:0},"context.contextLeft":{kind:`input`,path:`context.contextLeft`,type:`number`,default:100},"memento.ceiling":{kind:`input`,path:`memento.ceiling`,type:`number`,default:-1},"memento.off":{kind:`input`,path:`memento.off`,type:`boolean`,default:!1},"memento.session":{kind:`input`,path:`memento.session`,default:``},"memento.error":{kind:`input`,path:`memento.error`,default:``},"metrics.lastResponseTime":{kind:`input`,path:`metrics.lastResponseTime`,type:`number`,default:0},"metrics.responseTime":{kind:`input`,path:`metrics.responseTime`,type:`number`,default:0},"metrics.sessionDuration":{kind:`input`,path:`metrics.sessionDuration`,type:`number`,default:0},"metrics.messageCount":{kind:`input`,path:`metrics.messageCount`,type:`number`,default:0},"metrics.linesAdded":{kind:`input`,path:`metrics.linesAdded`,type:`number`,default:0},"metrics.linesRemoved":{kind:`input`,path:`metrics.linesRemoved`,type:`number`,default:0},"activity.command":{kind:`input`,path:`activity.command`,type:`string`,default:``},"activity.todo.total":{kind:`input`,path:`activity.todo.total`,type:`number`,default:0},"activity.todo.completed":{kind:`input`,path:`activity.todo.completed`,type:`number`,default:0},"activity.todo.position":{kind:`input`,path:`activity.todo.position`,type:`number`,default:0},"activity.todo.active":{kind:`input`,path:`activity.todo.active`,type:`string`,default:``},"activity.tool.running":{kind:`input`,path:`activity.tool.running`,type:`string`,default:``},"activity.tool.done":{kind:`input`,path:`activity.tool.done`,type:`string`,default:``}},segments:{directory:{group:`location`,description:"The current directory, shortened fish-style — `~` under home, project-relative inside the project. Click to copy the full path.",template:ZP},model:{group:`model-context`,description:`The active model's display name.`,template:`✱ {{ formatModelName .model.display_name }}`,when:`{{ ne .model.display_name "" }}`},sessionId:{group:`session-tools`,description:`The session id, truncated to 8 characters.`,template:`⌗{{ trunc 8 .session.id }}`,when:`{{ ne .session.id "" }}`},version:{group:`model-context`,description:`The Claude Code version reported in the hook payload.`,template:`◈ v{{ .version }}`,when:`{{ ne .version "" }}`},tmux:{group:`location`,description:`The tmux session name; hidden when not inside tmux.`,template:`tmux:{{ .tmux.session | default "none" }}`,when:`{{ ne .tmux.session "" }}`},host:{group:`location`,description:`user@host on a warning background, shown only over SSH.`,template:`⇄ {{ .host.user | default "?" }}@{{ .host.name | default "?" }}`,bg:`warning`,when:`{{ .host.ssh }}`},gitaculous:{group:`git`,description:`The git state: a summary (branch, ahead/behind, S/U/? flags) that the arrow at its right edge expands to every fact — repo, in-progress operation, sha, upstream ±, stash count, time since the last commit.`,template:`{{ if eq .git.detail "expanded" }}{{ template "gitExpanded" . }}{{ else }}{{ template "gitCollapsed" . }}{{ end }} {{ action "gitDetail" "▸" "◂" }}`,fg:QP,when:`{{ ne .git.branch "" }}`,settings:{aheadBehind:{label:`ahead/behind`,domain:`bool`,default:!0},flags:{label:`dirty flags`,domain:`bool`,default:!0},operation:{label:`operation`,domain:`bool`,default:!0},repo:{label:`repo name`,domain:`bool`,default:!0},sha:{label:`commit hash`,domain:`bool`,default:!0},stash:{label:`stash`,domain:`bool`,default:!0},upstream:{label:`upstream`,domain:`bool`,default:!0},age:{label:`time since commit`,domain:`bool`,default:!0}}},gitPr:{group:`git`,description:"The pull request open for this branch, as a link; `⚠ PR` when the forge lookup failed.",template:`{{ if ne .git.prUrl "" }}{{ link .git.prUrl (printf "⇆ #%v" .git.prNumber) }}{{ else }}⚠ PR{{ end }}`,when:`{{ or (ne .git.prUrl "") (ne .git.prError "") }}`},toolbar:{group:`session-tools`,description:`Quick actions: copy the session id, and open the project, transcript or repo.`,template:xT(``).template},commands:{group:`session-tools`,description:`Type /compact, /model or /clear into this session; /clear asks for a second click. Hidden when not inside tmux.`,template:JP.template,when:JP.when},themeSwitcher:{group:`session-tools`,description:"`◀ <theme> ▶`: the theme the bar is wearing; ◀ and ▶ switch this session to the previous or next theme, wrapping at the ends.",template:`{{ carousel "stepTheme" 0 }}`},session:{group:`cost-limits`,description:`This session's cost and token total, with a budget warning once a budget is configured.`,template:`§ {{ template "formatCost" .session.cost }} ({{ template "formatTokens" .session.tokens }}){{ template "budgetStatus" (dict "cost" .session.cost "budget" .settings.budget "warn" .settings.warnAt) }}`,settings:tF(0)},today:{group:`cost-limits`,description:`Today's cost and tokens across every session, with a budget warning once a budget is configured.`,template:`☉ {{ template "formatCost" .today.cost }} ({{ template "formatTokens" .today.tokens }}){{ template "budgetStatus" (dict "cost" .today.cost "budget" .settings.budget "warn" .settings.warnAt) }}`,settings:tF(50)},block:{group:`cost-limits`,description:`The 5-hour rate-limit block: percent used and time to reset, heating to warning then error.`,template:`◱ {{ round .block.nativeUtilization }}% ({{ template "formatResetCountdown" .block.resetsAt }})`,bg:`{{ ramp (round .block.nativeUtilization) "step" 0 (tint) .settings.warnAt "warning" .settings.errorAt "error" }}`,settings:eF,when:`{{ gt .block.resetsAt 0 }}`},weekly:{group:`cost-limits`,description:`The weekly rate-limit quota: percent used and time to reset, heating to warning then error.`,template:`◑ {{ round .weekly.percentage }}% ({{ template "formatResetCountdown" .weekly.resetsAt }})`,bg:`{{ ramp (round .weekly.percentage) "step" 0 (tint) .settings.warnAt "warning" .settings.errorAt "error" }}`,settings:eF,when:`{{ gt .weekly.resetsAt 0 }}`},burnrate:{group:`cost-limits`,description:`Spend per hour, with the projected time to the 5-hour and weekly limits.`,template:`⚡ {{ template "formatRate" .burn.costPerHour }} · {{ template "formatEta" .block.etaMinutes }} to 5h · {{ template "formatEta" .weekly.etaMinutes }} to wk`,bg:`{{ ramp .block.etaMinutes "step" -1 (tint) 0 "error" .settings.errorWithin "warning" .settings.warnWithin (tint) }}`,settings:{errorWithin:{label:`error within (min)`,domain:{min:0,max:300,step:5},default:30},warnWithin:{label:`warning within (min)`,domain:{min:0,max:300,step:5,atLeast:`errorWithin`},default:60}},when:`{{ or (gt .block.resetsAt 0) (gt .weekly.resetsAt 0) }}`},speed:{group:`activity`,description:`Token throughput for the latest exchange: output, input, and total.`,template:`⇅ out {{ template "formatSpeed" .speed.output }} · in {{ template "formatSpeed" .speed.input }} · tot {{ template "formatSpeed" .speed.total }}`,when:`{{ gt .session.tokens 0 }}`},tokenSparkline:{group:`activity`,description:`A sparkline of recent token throughput.`,template:`⚡ {{ sparkline .speed.history 24 }}`,when:`{{ ne .speed.history "" }}`},cacheTimer:{group:`activity`,description:"Minutes until the prompt cache expires, or `cold` once it has.",template:`◴ {{ if le (minutesUntilReset .cache.expiresAt) 0 }}cold{{ else }}{{ minutesUntilReset .cache.expiresAt }}m{{ end }}`,fg:`{{ readableOn (color (cascade (minutesUntilReset .cache.expiresAt) "0:error" "9:warning" "21:foreground")) (bgOf) ${tc} }}`,when:`{{ gt .cache.expiresAt 0 }}`},context:{group:`model-context`,description:`Context used, in tokens and percent remaining, heating as it fills.`,template:`◔ {{ formatInteger .context.totalTokens }} ({{ .context.contextLeft }}%)`,bg:`{{ ramp .context.contextLeft "step" 0 "error" 21 "warning" 41 (tint) }}`,when:`{{ gt .context.totalTokens 0 }}`},ceiling:{group:`model-context`,description:`The memento plugin's context ceiling for this session: − and + move it by 100K, ∞ lifts it, ↺ drops this session's own setting.`,template:`{{ if ne .memento.error "" }}⌈ ⚠ {{ .memento.error }} {{ action "ceiling.clear" "↺" }}{{ else }}⌈ {{ if .memento.off }}off{{ else }}{{ template "formatTokenCount" .memento.ceiling }} {{ action "ceiling.lower" "−" }} {{ action "ceiling.raise" "+" }} {{ action "ceiling.off" "∞" }}{{ end }}{{ if ne .memento.session "" }} {{ action "ceiling.clear" "↺" }}{{ end }}{{ end }}`,bg:`{{ if ne .memento.error "" }}{{ color "error" }}{{ else }}{{ tint }}{{ end }}`,when:`{{ or (ge .memento.ceiling 0) (ne .memento.error "") }}`},autocompact:{group:`model-context`,description:`Claude Code's auto-compact window: − and + move it by 100K, ↺ returns it to auto. Clicks type /autocompact into this session, so the controls show only inside tmux.`,template:YP.template,bg:YP.bg,when:YP.when},metrics:{group:`activity`,description:`Response times, session duration, message count, and lines added/removed.`,template:`{{ if .metrics.lastResponseTime }} Δ {{ template "formatResponseTime" .metrics.lastResponseTime }}{{ end }}{{ if .metrics.responseTime }} ⧖ {{ template "formatResponseTime" .metrics.responseTime }}{{ end }}{{ if .metrics.sessionDuration }} ⧗ {{ template "formatDuration" .metrics.sessionDuration }}{{ end }}{{ if .metrics.messageCount }} ◆ {{ .metrics.messageCount }}{{ end }}{{ if .metrics.linesAdded }} + {{ .metrics.linesAdded }}{{ end }}{{ if .metrics.linesRemoved }} - {{ .metrics.linesRemoved }}{{ end }} `,when:`{{ or (gt .metrics.lastResponseTime 0.0) (gt .metrics.responseTime 0.0) (gt .metrics.sessionDuration 0.0) (gt .metrics.messageCount 0) (gt .metrics.linesAdded 0) (gt .metrics.linesRemoved 0) }}`},activity:{group:`activity`,description:`What Claude is doing: the slash command that opened the turn, the in-progress todo, and the tools in flight.`,template:`{{ if .activity.command }} ⌘ {{ .activity.command }}{{ end }}{{ if .activity.todo.total }}{{ if .activity.todo.active }} ☐ {{ .activity.todo.position }}/{{ .activity.todo.total }} {{ abbrev 32 .activity.todo.active }}{{ else }} ☑ {{ .activity.todo.completed }}/{{ .activity.todo.total }}{{ end }}{{ end }}{{ if .activity.tool.running }} ⟳ {{ template "formatToolTally" .activity.tool.running }}{{ end }}{{ if .activity.tool.done }} ✓ {{ template "formatToolTally" .activity.tool.done }}{{ end }} `,when:`{{ or (ne .activity.command "") (gt .activity.todo.total 0) (ne .activity.tool.running "") (ne .activity.tool.done "") }}`}},root:{rows:{identity:{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`host`},{kind:`segment`,name:`directory`},{kind:`segment`,name:`gitaculous`}]},status:{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`model`},{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`context`},{kind:`segment`,name:`ceiling`},{kind:`segment`,name:`autocompact`}]},{kind:`segment`,name:`cacheTimer`},{kind:`segment`,name:`block`},{kind:`segment`,name:`weekly`},{kind:`segment`,name:`activity`}]}}},actions:{...xT(``).actions,...JP.actions,copyDir:{copy:`{{ .current_dir }}`},stepTheme:{set:`theme`,from:`themes`},gitDetail:{set:`git-detail`,cycle:[`collapsed`,`expanded`]},"ceiling.raise":{ceiling:`set`,to:`+100_000`},"ceiling.lower":{ceiling:`set`,to:`-100_000`},"ceiling.off":{ceiling:`set`,to:`off`},"ceiling.clear":{ceiling:`clear`},...YP.actions},styles:{none:{hueShift:0,chromaScale:1,lightnessScale:1,lightnessShift:0},vivid:{hueShift:0,chromaScale:1.35,lightnessScale:1,lightnessShift:0},muted:{hueShift:0,chromaScale:.55,lightnessScale:1,lightnessShift:0},dim:{hueShift:0,chromaScale:1,lightnessScale:.85,lightnessShift:0},bright:{hueShift:0,chromaScale:1,lightnessScale:1,lightnessShift:.08},inverted:{hueShift:0,chromaScale:1,lightnessScale:-1,lightnessShift:1}},themeDefaults:qP,presets:{default:{},compact:{root:{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`directory`},{kind:`segment`,name:`gitaculous`},{kind:`segment`,name:`context`}]},globals:{padding:0}},verbose:{root:{kind:`container`,direction:`vertical`,children:[{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`directory`},{kind:`segment`,name:`gitaculous`},{kind:`segment`,name:`gitPr`}]},{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`model`},{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`context`},{kind:`segment`,name:`ceiling`},{kind:`segment`,name:`autocompact`}]},{kind:`segment`,name:`cacheTimer`},{kind:`segment`,name:`block`},{kind:`segment`,name:`weekly`},{kind:`segment`,name:`burnrate`}]},{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`speed`},{kind:`segment`,name:`tokenSparkline`}]}]}},zen:{root:{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`directory`},{kind:`segment`,name:`context`}]},globals:{endcaps:`plain`,style:`dim`}},git:{root:{kind:`container`,direction:`vertical`,children:[{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`host`},{kind:`segment`,name:`directory`},{kind:`segment`,name:`gitaculous`},{kind:`segment`,name:`gitPr`}]},{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`model`},{kind:`segment`,name:`context`},{kind:`segment`,name:`activity`}]}]}},usage:{root:{kind:`container`,direction:`vertical`,children:[{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`model`},{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`context`},{kind:`segment`,name:`ceiling`},{kind:`segment`,name:`autocompact`}]},{kind:`segment`,name:`cacheTimer`}]},{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`block`},{kind:`segment`,name:`weekly`},{kind:`segment`,name:`burnrate`}]},{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`session`},{kind:`segment`,name:`today`},{kind:`segment`,name:`speed`},{kind:`segment`,name:`tokenSparkline`}]}]}},dense:{root:{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`host`},{kind:`segment`,name:`directory`},{kind:`segment`,name:`gitaculous`},{kind:`segment`,name:`model`},{kind:`container`,direction:`horizontal`,children:[{kind:`segment`,name:`context`},{kind:`segment`,name:`ceiling`},{kind:`segment`,name:`autocompact`}]},{kind:`segment`,name:`cacheTimer`},{kind:`segment`,name:`block`},{kind:`segment`,name:`weekly`},{kind:`segment`,name:`session`},{kind:`segment`,name:`activity`}]},globals:{padding:0}}},editGlobals:{endcaps:`plain`,default_separator:` | `},helpers:{gitPaint:`{{ fg (readableOn (color .color) (bgOf) ${tc}) .text }}`,gitCollapsed:`{{ template "gitBranch" . }}{{ template "gitAheadBehind" . }}{{ template "gitFlags" . }}`,gitExpanded:`(git){{ template "gitRepo" . }}{{ template "gitOperation" . }}{{ template "gitSha" . }}{{ template "gitFlags" . }} {{ template "gitBranch" . }}{{ template "gitUpstream" . }}{{ template "gitStash" . }}{{ template "gitAge" . }}`,gitBranch:`⎇ {{ template "gitPaint" (dict "color" .git.color.branch "text" .git.branch) }}`,gitRepo:`{{ if and .settings.repo (ne .git.repoName "") }} {{ .git.repoName }}{{ end }}`,gitOperation:`{{ if and .settings.operation (ne .git.operation "") }} [{{ .git.operation }}]{{ end }}`,gitSha:`{{ if and .settings.sha (ne .git.sha "") }} {{ .git.sha }}{{ end }}`,gitFlags:`{{ if and .settings.flags (or (gt .git.staged 0) (gt .git.unstaged 0) (gt .git.untracked 0) (gt .git.conflicts 0)) }} {{ if gt .git.staged 0 }}{{ template "gitPaint" (dict "color" .git.color.staged "text" "S") }}{{ end }}{{ if gt .git.unstaged 0 }}{{ template "gitPaint" (dict "color" .git.color.unstaged "text" "U") }}{{ end }}{{ if gt .git.untracked 0 }}{{ template "gitPaint" (dict "color" .git.color.untracked "text" "?") }}{{ end }}{{ if gt .git.conflicts 0 }}{{ template "gitPaint" (dict "color" .git.color.conflicts "text" (printf "!%v" .git.conflicts)) }}{{ end }}{{ end }}`,gitAheadBehind:`{{ if and .settings.aheadBehind (or (gt .git.ahead 0) (gt .git.behind 0)) }} {{ if gt .git.ahead 0 }}{{ template "gitPaint" (dict "color" .git.color.ahead "text" (printf "+%v" .git.ahead)) }}{{ end }}{{ if and (gt .git.ahead 0) (gt .git.behind 0) }}/{{ end }}{{ if gt .git.behind 0 }}{{ template "gitPaint" (dict "color" .git.color.behind "text" (printf "-%v" .git.behind)) }}{{ end }}{{ end }}`,gitUpstream:`{{ if and .settings.upstream (ne .git.upstream "") }} [{{ .git.upstream }}{{ template "gitAheadBehind" . }}]{{ end }}`,gitStash:`{{ if and .settings.stash (gt .git.stash 0) }} {{ template "gitPaint" (dict "color" .git.color.stash "text" (printf "(%v stashed)" .git.stash)) }}{{ end }}`,gitAge:`{{ if and .settings.age (gt .git.timeSinceCommit 0) }} ◷ {{ template "formatTimeSince" .git.timeSinceCommit }}{{ end }}`,formatCost:'{{ if lt . 0.01 }}<$0.01{{ else }}${{ printf "%.2f" . }}{{ end }}',formatTokenCount:qT(`.`),formatTokens:`{{ template "formatTokenCount" . }} tokens`,formatToolTally:`{{ $names := splitList "," . }}{{ range $i, $pair := $names }}{{ if lt $i 2 }}{{ if $i }} {{ end }}{{ $kv := splitList ":" $pair }}{{ index $kv 0 }}{{ if ne (index $kv 1) "1" }}×{{ index $kv 1 }}{{ end }}{{ end }}{{ end }}{{ if gt (len $names) 2 }} +{{ sub (len $names) 2 }}{{ end }}`,formatRate:`{{ if lt . 0 }}—/hr{{ else }}{{ template "formatCost" . }}/hr{{ end }}`,formatEta:`{{ if lt . 0 }}—{{ else }}{{ template "formatLongTimeRemaining" . }}{{ end }}`,formatSpeed:`{{ if lt . 0 }}—{{ else }}{{ template "formatTokenCount" (round .) }}/s{{ end }}`,formatTokenBreakdown:`{{ $first := true }}{{ if gt .input 0 }}{{ template "formatTokenCount" .input }} in{{ $first = false }}{{ end }}{{ if gt .output 0 }}{{ if not $first }} + {{ end }}{{ template "formatTokenCount" .output }} out{{ $first = false }}{{ end }}{{ if or (gt .cacheCreation 0) (gt .cacheRead 0) }}{{ if not $first }} + {{ end }}{{ template "formatTokenCount" (add .cacheCreation .cacheRead) }} cached{{ $first = false }}{{ end }}{{ if $first }}0 tokens{{ end }}`,budgetStatus:`{{ if or (le .budget 0) (lt .cost 0) }}{{ else }}{{ $pct := minf 100 (mulf (divf .cost .budget) 100) }}{{ $p := printf "%.0f%%" $pct }}{{ if ge $pct .warn }} !{{ $p }}{{ else }}{{ if ge $pct 50 }} +{{ $p }}{{ else }} {{ $p }}{{ end }}{{ end }}{{ end }}`,formatTimeSince:`{{ if lt . 60 }}{{ . }}s{{ else if lt . 3600 }}{{ div . 60 }}m{{ else if lt . 86400 }}{{ div . 3600 }}h{{ else if lt . 604800 }}{{ div . 86400 }}d{{ else }}{{ div . 604800 }}w{{ end }}`,formatDuration:`{{ if lt . 60 }}{{ printf "%.0f" . }}s{{ else if lt . 3600 }}{{ printf "%.0f" (divf . 60) }}m{{ else if lt . 86400 }}{{ printf "%.1f" (divf . 3600) }}h{{ else }}{{ printf "%.1f" (divf . 86400) }}d{{ end }}`,formatResponseTime:`{{ if lt . 60 }}{{ printf "%.1f" . }}s{{ else }}{{ printf "%.1f" (divf . 60) }}m{{ end }}`,formatLongTimeRemaining:`{{ if ge . 1440 }}{{ $d := div . 1440 }}{{ $h := div (mod . 1440) 60 }}{{ if gt $h 0 }}{{ $d }}d {{ $h }}h{{ else }}{{ $d }}d{{ end }}{{ else if ge . 60 }}{{ $h := div . 60 }}{{ $m := mod . 60 }}{{ if gt $m 0 }}{{ $h }}h {{ $m }}m{{ else }}{{ $h }}h{{ end }}{{ else }}{{ . }}m{{ end }}`,formatResetCountdown:`{{ template "formatLongTimeRemaining" (add 1 (minutesUntilReset .)) }}`}},rF=new Set([nF.globals.palette,...Object.keys(nF.themeDefaults),...Object.values(nF.segments).map(e=>e.palette)].filter(e=>e!==void 0)),iF=Id(TA(`<default>`,JSON.stringify(nF),rF),nF),aF=Nb(iF.presets);function oF(e){return aF.includes(e)}const sF=Object.freeze({});function cF(e,t){return e.kind===`decided`?t[e.name]??sF:sF}function lF(e,t){return{...e,...Object.fromEntries(ku.map(n=>[n,e[n]??t[n]]))}}function uF(e){if(!e)return``;try{return dF(s(e))}catch{return``}}function dF(e){return`${e.mtimeMs}:${e.size}`}const fF=new class{slots;head=null;tail=null;constructor(e){this.slots=e}async run(e){await this.acquire();try{return await e()}finally{this.release()}}async acquire(){if(this.slots>0){this.slots--;return}await new Promise(e=>{let t={wake:e,next:null};this.tail?this.tail.next=t:this.head=t,this.tail=t})}release(){let e=this.head;if(!e){this.slots++;return}this.head=e.next,this.head||(this.tail=null),e.wake()}}(8);function pF(e){return((...t)=>fF.run(()=>e(...t)))}const mF=pF(ee),hF=pF(C),gF=pF(w);async function _F(e,t){return fF.run(async()=>{let n=null;try{n=await S(e,`r`);let r=await n.stat(),{size:i,ino:a}=r,o=dF(r),s=t!==void 0&&(a!==t.ino||i<t.offset),c=s||t===void 0?0:t.offset;if(c>=i)return J({buf:Buffer.alloc(0),start:c,size:i,stamp:o,ino:a,reset:s});let l=Buffer.alloc(i-c),u=0;for(;u<l.length;){let{bytesRead:e}=await n.read(l,u,l.length-u,c+u);if(e===0)break;u+=e}return J({buf:u===l.length?l:l.subarray(0,u),start:c,size:i,stamp:o,ino:a,reset:s})}catch(t){return t.code===`ENOENT`?Y:X(`readAppended ${e}: ${t instanceof Error?t.message:String(t)}`)}finally{await n?.close().catch(e=>{D(`transcript-fs: close failed: ${e instanceof Error?e.message:String(e)}`)})}})}async function vF(e,t){return fF.run(async()=>{let n=null;try{n=await S(e,`r`);let{size:r}=await n.stat(),i=Math.max(0,r-t),a=Buffer.alloc(r-i),o=0;for(;o<a.length;){let{bytesRead:e}=await n.read(a,o,a.length-o,i+o);if(e===0)break;o+=e}return J({buf:o===a.length?a:a.subarray(0,o),fromStart:i===0})}catch(t){return t.code===`ENOENT`?Y:X(`readTail ${e}: ${t instanceof Error?t.message:String(t)}`)}finally{await n?.close().catch(e=>{D(`transcript-fs: close failed: ${e instanceof Error?e.message:String(e)}`)})}})}const yF=/"(?:cache_read_input_tokens|cache_creation_input_tokens)":[1-9]/;function bF(e){let t;try{t=JSON.parse(e)}catch{return null}let n=t.message?.usage;if(!((n?.cache_read_input_tokens??0)>0||(n?.cache_creation_input_tokens??0)>0))return null;let r=t.timestamp==null?NaN:Date.parse(t.timestamp);return Number.isNaN(r)?null:r}async function xF(e){let t=await SF(e);return t.kind===`ok`?J(Math.floor((t.value+36e5)/1e3)):t}async function SF(e){for(let t of[65536,1048576]){let n=await vF(e,t);if(n.kind!==`ok`)return n;let r=CF(n.value.buf,n.value.fromStart);if(r!=null)return J(r);if(n.value.fromStart)return Y}return Y}function CF(e,t){let n=e.toString(`utf8`).split(`
184
+ `),r=+!t;for(let e=n.length-1;e>=r;e--){let t=n[e];if(!t||!yF.test(t))continue;let r=bF(t);if(r!=null)return r}return null}function wF(e,t){return{...e,claudeConfigDir:PT(t.claudeConfigDir),env:t.mementoEnv}}const TF=l.join(`lib`,`ceiling_config.py`),EF=l.join(`skills`,`ceiling`,`bin`,`ceiling`);function DF(e,t){let n=typeof e==`object`&&e?e.plugins:void 0;if(typeof n!=`object`||!n)throw Error(`${t} has no "plugins" object`);return Object.entries(n).filter(([e])=>e.split(`@`)[0]===`memento`).flatMap(([e,n])=>{if(!Array.isArray(n))throw Error(`${t}: "${e}" is not a list of installs`);return n.map(n=>{let{scope:r,installPath:i,projectPath:a}=n??{};if(typeof r!=`string`||typeof i!=`string`)throw Error(`${t}: an install of "${e}" has no scope/path`);return typeof a==`string`?{key:e,scope:r,installPath:i,projectPath:a}:{key:e,scope:r,installPath:i}})})}function OF(e,t){let n=!0;for(let i of e){if(!r.existsSync(i))continue;let e;try{e=JSON.parse(r.readFileSync(i,`utf8`))?.enabledPlugins?.[t]}catch(e){return X(`memento lookup: ${i}: ${e.message}`)}typeof e==`boolean`&&(n=e)}return J(n)}function kF(e,t){if(!r.existsSync(e))return Y;let n;try{n=DF(JSON.parse(r.readFileSync(e,`utf8`)),e)}catch(e){return X(`memento lookup: ${e.message}`)}let i=n.find(e=>e.projectPath===t)??n.find(e=>e.scope===`user`);if(i===void 0)return Y;let a=OF([l.join(l.dirname(l.dirname(e)),`settings.json`),l.join(t,`.claude`,`settings.json`),l.join(t,`.claude`,`settings.local.json`)],i.key);if(a.kind!==`ok`)return a;if(!a.value)return Y;let o=[TF,EF].filter(e=>!r.existsSync(l.join(i.installPath,e)));return o.length===0?J(i.installPath):X(`memento at ${i.installPath} has no ${o.join(` or `)} — upgrade the plugin`)}function AF(e,t=process.env){let n=new Set([`CLAUDE_PROJECT_DIR`,`CLAUDE_CODE_SESSION_ID`,...e.env===void 0?[]:$e]);return{...Object.fromEntries(Object.entries(t).filter(([e])=>!n.has(e))),...e.env,CLAUDE_CODE_SESSION_ID:e.sessionId,CLAUDE_PROJECT_DIR:e.projectDir||e.cwd}}function jF(e){return e.stderr.trim()||e.error||`${e.reason}${e.exitCode===null?``:` (exit ${e.exitCode})`}`}function MF(e){let t;try{t=JSON.parse(e)}catch{return X(`memento read: not JSON: ${e.trim()}`)}let{ceiling:n,session:r}=t??{},i=n===`off`||typeof n==`number`&&n>=0?n:void 0;return i!==void 0&&(r===null||typeof r==`string`)?J({ceiling:i,session:r}):X(`memento read: unexpected answer: ${e.trim()}`)}async function NF(e,t){let n=await je({bin:`python3`,args:[`-c`,`
185
185
  import json, math, sys
186
186
  sys.path.insert(0, sys.argv[1])
187
187
  from ceiling_config import CONFIG_NAME, anchored, ceiling_in, in_force, session_directory
@@ -190,41 +190,41 @@ ceiling = in_force(directory, anchored(sys.argv[3]))
190
190
  layer = ceiling_in(directory / CONFIG_NAME)
191
191
  print(json.dumps({"ceiling": "off" if ceiling == math.inf else ceiling,
192
192
  "session": layer.text if layer else None}))
193
- `,l.join(e,`lib`),t.sessionId,t.cwd],env:kF(t),timeoutMs:3e3,category:`memento.read`});return n.ok?jF(n.stdout):X(AF(n))}function NF(e,t,n){let r=O({bin:l.join(e,TF),args:n.kind===`set`?[`set`,`session`,n.to]:[`clear`,`session`],env:kF(t),timeoutMs:5e3,category:`memento.move`});if(!r.ok)throw Error(AF(r))}function PF(){return{locate:e=>OF(IT(e.claudeConfigDir),e.projectDir),read:MF,move:NF}}function FF(e,t,n){let r=n===void 0?``:`CLAUDE_CONFIG_DIR=${CM(n)} `,i=e.added_dirs.map(e=>` --add-dir ${CM(e)}`).join(``);return`cd ${CM(e.project_dir)} && ${r}claude --resume ${CM(t)}${i}`}function IF(e,t,n){let r=Pb(t(`preset`),e.globals.preset,e.presets),i=Lb(e,r),a=t(`edit.mode`)===`arrange`?e.editGlobals:{},o=vw(a.palette,t(`theme`),i.palette),s=lF(i,cF(o,e.themeDefaults));return{preset:r,presetCustomized:n(r),theme:o,style:Uc(a.style,t(`style`),s.style,e.styles),effect:Yc(a.effect,t(`effect`),s.effect),endcaps:el(a.endcaps,t(`endcaps`),s.endcaps),variation:cl(a.variation,t(`variation`),s.variation),shade:dl(a.shade,t(`shade`),s.shade),separator:a.default_separator??s.default_separator,autoWrap:yl(a.autoWrap,t(`autoWrap`),s.autoWrap),padding:Sl(a.padding,t(`padding`),s.padding),charset:a.charset??s.charset??`unicode`,updateNotice:bl(a.updateNotice,t(`updateNotice`),s.updateNotice),transitions:xl(a.transitions,t(`transitions`),s.transitions),colorCompatibility:a.colorCompatibility??s.colorCompatibility??`truecolor`}}function LF(e,t){return{endcaps:e.endcaps,separator:e.separator,colorCompatibility:e.colorCompatibility,wrap:e.autoWrap,padding:e.padding,charset:e.charset,width:t}}function RF(e){return{theme:e.theme,style:e.style,effect:e.effect,preset:e.preset,variation:e.variation,shade:e.shade,transitions:e.transitions}}function zF(e){return{preset:{effective:e.preset,customized:e.presetCustomized,bundled:oF(e.preset)},endcaps:{effective:e.endcaps},variation:{effective:e.variation},shade:{effective:e.shade},charset:{effective:e.charset},colorCompatibility:{effective:e.colorCompatibility},autoWrap:{effective:e.autoWrap},padding:{effective:e.padding},updateNotice:{effective:e.updateNotice},transitions:{effective:e.transitions}}}const BF=10*1e3;function VF(e,t,n,r){let i=n-(t*1e3-r);if(i<3e5||e<=0)return;let a=e/i,o=(100-e)/a;return Math.max(0,Math.round(o/6e4))}function HF(e,t){if(!(t<60))return e*3600/t}function UF(e,t,n,r){let i=r-t;if(i<50||i>BF)return;let a=n-e;if(!(a<=0))return a*1e3/i}function WF(e){let{prev:t,cur:n}=e;if(t===void 0)return;let r=UF(t.input,t.atMs,n.input,n.atMs),i=UF(t.output,t.atMs,n.output,n.atMs),a=UF(t.total,t.atMs,n.total,n.atMs);if(!(r===void 0&&i===void 0&&a===void 0))return{...r!==void 0&&{input:r},...i!==void 0&&{output:i},...a!==void 0&&{total:a}}}function GF(e){let{samples:t}=e,n=[];for(let e=1;e<t.length;e++){let r=t[e-1],i=t[e],a=i.atMs-r.atMs;if(a<50||a>BF)continue;let o=UF(r.total,r.atMs,i.total,i.atMs);n.push(o??0)}if(n.length!==0)return n.join(`,`)}function KF(e){let t=e.indexOf(`.`);return t<0?e:e.slice(0,t)}function qF(e){let t=[],n=(e,n)=>{try{let e=n();return e===``?void 0:e}catch(n){t.push(`host.${e}: ${String(n)}`);return}},r=n(`name`,()=>KF(h.hostname())),i=n(`user`,()=>h.userInfo().username);return{host:{...r!==void 0&&{name:r},...i!==void 0&&{user:i},...e.ssh!==void 0&&{ssh:e.ssh}},failures:t}}function JF(e,t){let n=new Map;for(let[t,r]of Object.entries(e.variables))n.set(t,r);for(let[t,r]of Object.entries(e.segments))if(r.vars)for(let[e,i]of Object.entries(r.vars))n.set(`${t}.${e}`,i);let r=[],i=new Set,a=t=>Cx(t,e.helpers).keys(),o=Lb(e,t);for(let e of Ic){let t=o[e];if(Lc(t))for(let e of a(t))r.push(e)}for(let n of wu(Ib(e,t).node)){if(n.when)for(let e of a(n.when))r.push(e);if(n.kind!==`segment`)continue;let t=e.segments[n.name];if(t){for(let e of[t.template,t.when,t.bg,t.fg])if(e)for(let t of a(e))r.push(t)}}let s=new Set;for(;r.length>0;){let e=r.pop();for(let t of XF(n,e)){if(i.has(t))continue;i.add(t);let e=n.get(t);if(e){if(e.kind===`input`)s.add(e.path);else if(e.kind===`template`)for(let t of a(e.template))r.push(t)}}}return s}function YF(e){let t=new Map;return n=>{let r=t.get(n);if(r!==void 0)return r;let i=JF(e,n);return t.set(n,i),i}}function XF(e,t){let n=t;for(;n.length>0;){if(e.has(n))return[n];let t=n.lastIndexOf(`.`);if(t<0)break;n=n.slice(0,t)}let r=`${t}.`,i=[];for(let t of e.keys())t.startsWith(r)&&i.push(t);return i}function ZF(e,t){for(let n of e)if(n===t||n.startsWith(t+`.`))return!0;return!1}function QF(e){let t=t=>e.has(t),n=t(`git.staged`)||t(`git.unstaged`)||t(`git.untracked`)||t(`git.conflicts`);return{...t(`git.sha`)&&{showSha:!0},...n&&{showWorkingTree:!0},...t(`git.stash`)&&{showStashCount:!0},...t(`git.upstream`)&&{showUpstream:!0},...t(`git.repoName`)&&{showRepoName:!0},...t(`git.repoUrl`)&&{showRepoUrl:!0},...t(`git.operation`)&&{showOperation:!0},...t(`git.timeSinceCommit`)&&{showTimeSinceCommit:!0},...(t(`git.prNumber`)||t(`git.prState`)||t(`git.prUrl`)||t(`git.prError`))&&{showPullRequest:!0}}}async function $F(e,t,n,r,i,a,o,{configPath:s,...c}){let l=e=>ZF(i,e),u=OC(t).getTime(),d=o.tmux??null,f=(e,t,n)=>t?n().catch(t=>X(`${e}: ${String(t)}`)):Promise.resolve(Y),[p,m,h,g,_,v,y,b,x,S,C]=await Promise.all([f(`git`,l(`git`),()=>n.gitProvider.getGitInfo(r??e.workspace?.current_dir,QF(i),e.workspace?.project_dir)),f(`session`,l(`session.cost`)||l(`session.tokens`)||l(`burn`),()=>n.usageStore.getUsageInfo(e.session_id,e)),f(`today`,l(`today`),()=>n.usageStore.getTodayInfo(e,o.claudeConfigDir,t)),f(`context`,l(`context`)||l(`autocompact`),()=>n.contextProvider.getContextInfo(e)),f(`metrics`,l(`metrics`)||l(`burn`),()=>n.metricsProvider.getMetricsInfo(e.session_id,e)),f(`activity`,l(`activity`),()=>n.activityProvider.getActivityInfo(e.session_id,e)),f(`tmux`,l(`tmux.session`),()=>d===null?Promise.resolve(Y):n.tmuxService.getSessionName(d)),f(`cache`,l(`cache`),()=>bF(e.transcript_path)),f(`speed`,l(`speed`),()=>n.usageStore.observeSpeed(e.session_id,e.transcript_path,u)),f(`memento`,l(`memento`),()=>n.mementoProvider.getCeiling(CF({sessionId:e.session_id,projectDir:e.workspace?.project_dir??``,cwd:r??e.workspace?.current_dir??``},o))),f(`autocompact`,l(`autocompact`),()=>Promise.resolve(n.autoCompact(FT(PT(o.claudeConfigDir)))))]),ee=[],w=e=>{if(e.kind===`failed`){ee.push(e.reason);return}return e.kind===`ok`?e.value:void 0},te=sI(p,u);ee.push(...te.failures);let ne=qF(o);ee.push(...ne.failures);let re=w(m),ie=w(h),T=w(g),E=w(_),ae=w(v),oe=w(y),se=w(b),ce=nI(S);S.kind===`failed`&&ee.push(`memento: ${S.reason}`);let le=eI(C,T?.maxTokens);C.kind===`failed`&&ee.push(`autocompact: ${C.reason}`);for(let e of ee)n.log(`warn`,`provider fetch failed: ${e}`);let ue=e.rate_limits?.five_hour,de=e.rate_limits?.seven_day,fe=ue?VF(ue.used_percentage,ue.resets_at,18e6,u):void 0,pe=de?VF(de.used_percentage,de.resets_at,6048e5,u):void 0,me=re?.session.cost,he=E?.sessionDuration,ge=l(`burn`)&&me!=null&&he!=null?HF(me,he):void 0,_e=w(x),ve=_e===void 0?void 0:WF(_e),ye=_e===void 0?void 0:GF(_e),be=ve!==void 0||ye!==void 0?{...ve,...ye!==void 0&&{history:ye}}:void 0,D=oI(process.env.HOME??process.env.USERPROFILE),xe=e.workspace?{...e.workspace,current_dir:oI(e.workspace.current_dir)??``,project_dir:oI(e.workspace.project_dir)??``,added_dirs:(e.workspace.added_dirs??[]).map(e=>oI(e)??e)}:e.workspace,Se=re===void 0?void 0:aI({cost:re.session.cost,tokens:re.session.tokens}),Ce=ie===void 0?void 0:{cost:ie.cost,tokens:ie.tokens},we=E===void 0?void 0:aI({lastResponseTime:E.lastResponseTime,responseTime:E.responseTime,sessionDuration:E.sessionDuration,messageCount:E.messageCount,nonPrompts:E.nonPrompts,linesAdded:E.linesAdded,linesRemoved:E.linesRemoved}),Te=ae===void 0?void 0:rI(ae);return{...e,...xe!==void 0&&{workspace:xe},...D!==void 0&&{home:D},...te.git!==void 0&&{git:te.git},...d!==null&&{tmux:{pane:d.pane,...oe!==void 0&&{session:oe}}},host:ne.host,...zF(a),history:n.history(e.session_id),navigation:{back:n.navigation(e.session_id)},...c,...s!==null&&{configPath:s},resumeCommand:FF(xe,e.session_id,o.claudeConfigDir),...Se!==void 0&&{session:Se},...Ce!==void 0&&{today:Ce},...ge!==void 0&&{burn:{costPerHour:ge}},...be!==void 0&&{speed:be},...l(`block`)&&ue!==void 0&&{block:{nativeUtilization:ue.used_percentage,resetsAt:ue.resets_at,...fe!==void 0&&{etaMinutes:fe}}},...de!==void 0&&{weekly:{percentage:de.used_percentage,resetsAt:de.resets_at,...pe!==void 0&&{etaMinutes:pe}}},...se!==void 0&&{cache:{expiresAt:se}},...T!==void 0&&{context:{totalTokens:T.totalTokens,contextLeft:T.contextLeftPercentage}},...we!==void 0&&{metrics:we},...Te!==void 0&&{activity:Te},...ce!==void 0&&{memento:ce},...le!==void 0&&{autocompact:le}}}function eI(e,t){switch(e.kind){case`absent`:return;case`failed`:return{error:e.reason};case`ok`:return GT(e.value,t)}}const tI=e=>e.trim().split(`
194
- `).at(-1).trim();function nI(e){switch(e.kind){case`absent`:return;case`failed`:return{error:tI(e.reason)};case`ok`:{let{ceiling:t,session:n}=e.value;return{ceiling:t===`off`?0:t,off:t===`off`,session:n??``}}}}function rI(e){let t=e.todos.findIndex(e=>e.active),n=e.todos.length===0?void 0:{total:e.todos.length,completed:e.todos.filter(e=>e.done).length,...t>=0&&{position:t+1,active:e.todos[t].text}},r=iI(e.running),i=iI(e.done),a=r===void 0&&i===void 0?void 0:{...r!==void 0&&{running:r},...i!==void 0&&{done:i}};if(!(e.command===null&&n===void 0&&a===void 0))return{...e.command!==null&&{command:e.command},...n!==void 0&&{todo:n},...a!==void 0&&{tool:a}}}function iI(e){return e.length===0?void 0:e.map(e=>`${e.name}:${e.count}`).join(`,`)}function aI(e){let t={},n=!1;for(let r of Object.keys(e)){let i=e[r];i!=null&&(t[r]=i,n=!0)}return n?t:void 0}function oI(e){return e===void 0||e.length===0||l.sep!==`\\`?e:e.replace(/\\/g,`/`)}function sI(e,t){if(e.kind===`absent`)return{failures:[]};if(e.kind===`failed`)return{failures:[e.reason]};let n=e.value,r=[],i=(e,t)=>{if(!(t===void 0||t.kind===`absent`)){if(t.kind===`failed`){r.push(`git.${e}: ${t.reason}`);return}return t.value}},a=i(`aheadBehind`,n.aheadBehind),o=i(`sha`,n.sha),s=i(`operation`,n.operation),c=i(`timeSinceCommit`,n.committedAt),l=c===void 0?void 0:Math.floor((t-c)/1e3),u=i(`stash`,n.stashCount),d=i(`upstream`,n.upstream),f=i(`repoName`,n.repoName),p=i(`repoUrl`,n.repoUrl),m=n.pullRequest,h={};return m?.kind===`ok`?(h.prNumber=m.value.number,h.prState=m.value.state,h.prUrl=m.value.url):m?.kind===`failed`&&(r.push(`git.pr: ${m.reason}`),h.prError=m.reason),{git:{branch:n.branch,status:n.status,...a!==void 0&&{ahead:a.ahead,behind:a.behind},...n.workingTree!==void 0&&{staged:n.workingTree.staged,unstaged:n.workingTree.unstaged,untracked:n.workingTree.untracked,conflicts:n.workingTree.conflicts},...o!==void 0&&{sha:o},...s!==void 0&&{operation:s},...l!==void 0&&{timeSinceCommit:l},...u!==void 0&&{stash:u},...d!==void 0&&{upstream:d},...f!==void 0&&{repoName:f},...p!==void 0&&{repoUrl:p},...h},failures:r}}const cI={theme:e=>e.theme.kind===`decided`?e.theme.name:null,preset:e=>e.preset,style:e=>e.style.kind===`decided`?e.style.name:null,effect:e=>e.effect.kind===`decided`?e.effect.name:null,endcaps:e=>e.endcaps,variation:e=>e.variation,shade:e=>e.shade,transitions:e=>e.transitions?fl:pl,autoWrap:e=>e.autoWrap?fl:pl,padding:e=>String(e.padding),updateNotice:e=>e.updateNotice?fl:pl},lI=Object.entries(ew),uI=new Set(tw.map(e=>e.sessionKey)),dI=()=>!1;function fI(e,t){return IF(e,e=>uI.has(e)?t(e):null,dI)}const pI=[`preset`,`theme`];function mI(e,t,n){let r=new Set(pI.slice(0,n).map(e=>ew[e].sessionKey));return IF(e,e=>r.has(e)?t(e):null,dI)}function hI(e,t){let n=Array.from({length:pI.length+1},(n,r)=>mI(e,t,r));return e=>{let t=pI.indexOf(e);return n[t===-1?pI.length:t]}}function gI(e,t,n,r){return e.flatMap(([e,i])=>{let a=cI[e](t);return a===null||a===cI[e](n(e))?[]:[{...i,value:a,target:r(i)}]})}function _I(e,t,n){return cI[n](fI(e,t))}function vI(e,t){let n=fI(e,t);return gI(lI,n,hI(e,t),t=>yI(e,n.preset,t.configKey))}function yI(e,t,n){return n in(Fb(e.presets,t).globals??{})?Vw(t,n):n}function bI(e,t,n){let r=Pb(t(ew.preset.sessionKey),e.globals.preset,e.presets),i=Hw(n);return{key:i?.scope===`globals`?yI(e,r,i.field):n,globals:Lb(e,r)}}function xI(e,t){let{preset:n}=fI(e,t);return wI(e,n).flatMap(({id:e,setting:r,key:i,decl:a,saved:o})=>{let s=t(i),c=s===null?void 0:Hu(a,s);return c===void 0||Vu(c)===Vu(o)?[]:[{preset:n,id:e,setting:r,key:i,value:c}]})}function SI(e,t,n){let r=new Map(n.map(e=>[e.key,e.value]));return Nb(e.presets).flatMap(n=>{let i=wI(e,n);return[...new Set(i.filter(e=>r.has(e.key)).map(e=>e.id))].flatMap(e=>{let n=i.filter(t=>t.id===e);return zu(Object.fromEntries(n.map(e=>[e.setting,e.decl])),Object.fromEntries(n.map(e=>{let n=r.get(e.key)??t(e.key),i=n===null?void 0:Hu(e.decl,n);return[e.setting,i??e.saved]}))).map(({message:t})=>`placement "${e}": ${t}`)})})}const CI=new WeakMap;function wI(e,t){let n=CI.get(e)??new Map;CI.set(e,n);let r=n.get(t);if(r!==void 0)return r;let i=[...wu(Ib(e,t).node)].flatMap(t=>t.kind!==`segment`||t.drafts===void 0?[]:Object.entries(t.drafts).map(([n,{id:r,key:i}])=>{let a=Lu(e.segments[t.name])[n];return{id:r,setting:n,key:i,decl:a,saved:t.settings?.[n]??a.default}})),a=[...new Map(i.map(e=>[e.key,e])).values()];return n.set(t,a),a}function TI(e,t){let n=fI(e,t);return{from:n.preset,globals:Fb(e.presets,n.preset).globals??{},picks:gI(lI.filter(([e])=>e!==`preset`),n,hI(e,t),e=>e.configKey),placements:xI(e,t)}}function EI(e,t){return IF({...e,globals:{palette:t},presets:{}},()=>null,dI)}function DI(e,t){let n=fI(e,t),r=cI.theme(n);if(r===null)return{kind:`rule`};let i=EI(e,r),a=Lb(e,n.preset),o=Object.fromEntries(ku.map(e=>[e,cI[e](a[e]===void 0?n:i)]));return{kind:`look`,theme:r,look:o,differs:ku.some(e=>o[e]!==cI[e](i))}}function OI(e){return{sessionKeys:tw.filter(t=>t.configKey===e).map(e=>e.sessionKey),fileKeys:[e,...xf(e)?aF.map(t=>Vw(t,e)):[],...Bw(e)?jc().map(t=>zw(t,e)):[]]}}function kI(e){return new Set(tw.map(e=>e.configKey).filter(t=>OI(t).fileKeys.some(t=>MI(e,jI(t)))))}function AI(e,t,n){let r=vI(e,n),i=new Set(r.map(e=>e.configKey)),a=ow(e=>i.has(ew[e].configKey)||t.has(ew[e].configKey)),o=DI(e,n);return{unsaved:r.length+xI(e,n).length,resettable:a,themeDefault:o.kind===`look`&&o.differs?{differs:!0,theme:o.theme}:{differs:!1}}}function jI(e){let t=Hw(e);if(t===null||t.scope===`preset-root`)throw Error(`reset layer "${e}" is not a value path`);return Uw(t)}function MI(e,t){let[n,...r]=t;return n===void 0?e!==void 0:typeof e==`object`&&!!e&&MI(e[n],r)}const NI=jc(),PI=new Set(NI),FI=new Set(Xc),II=e=>e?PI.has(e)?{ok:!0,value:e}:{ok:!1,reason:`unknown theme "${e}" (have: ${NI.join(`, `)})`}:{ok:!1,reason:`theme name is required`},LI=e=>e?FI.has(e)?{ok:!0,value:e}:{ok:!1,reason:`unknown endcaps "${e}" (have: ${Xc.join(`, `)})`}:{ok:!1,reason:`endcaps name is required`},RI=new Set([`1`,`true`]),zI=new Set([`0`,`false`]),BI={endcaps:LI,theme:II,"toolbar-expanded":e=>RI.has(e)?{ok:!0,value:`1`}:zI.has(e)?{ok:!0,value:``}:{ok:!1,reason:`expected boolean-ish (1, 0, true, false), got "${e}"`}},VI=RP(BI,`state`,JI);function HI(e,t){return VI.register(e,t)}function UI(e){return VI.gateFor(e)}function WI(e,t){return`set`in e?`to`in e?[{key:e.set,spec:{kind:`allow-list`,allowed:[e.to]}}]:`from`in e?[{key:e.set,spec:{kind:`allow-list`,allowed:Tw(e.from,t).members}}]:`int`in e?[{key:e.set,spec:{kind:`int`}}]:`cycle`in e?[{key:e.set,spec:{kind:`allow-list`,allowed:e.cycle}}]:[{key:e.set,spec:{kind:`range`,min:e.min,max:e.max}}]:[]}function GI(e){return e.filter(e=>e.spec.kind!==`allow-list`||!Object.hasOwn(BI,e.key))}function KI(e,t,n){let r=sw.get(n);if(r!==void 0)return _I(e,t,r);let i=Object.values(e.variables).find(e=>e.kind===`state`&&e.key===n);return i?.kind===`state`?i.default??null:null}function qI(e){let t=FD(e);return GI(Object.values(e.actions).flatMap(e=>WI(e,t)))}function JI(e){return IP(qI(e))}const YI=`update.dismissed`,XI=`updateNotice`,ZI=ew.updateNotice.sessionKey;function QI(e){return e.kind===`source`?e.newer.digest:EM(e.newer)}const $I=e=>`${e.version} [${xP(e.digest)}]`;function eL(e){switch(e.kind){case`source`:return{headline:`Newer source`,newer:$I(e.newer),running:$I(e.running),act:`rebuild`,busy:`rebuilding…`,command:{bin:`pnpm`,args:[`build`],cwd:e.root}};case`release`:return{headline:`Newer release`,newer:EM(e.newer),running:EM(e.running),act:`upgrade`,busy:`upgrading…`,command:{bin:`pnpm`,args:[`dlx`,`${OM}@${EM(e.newer)}`,`install`]}}}}const tL={kind:`idle`},nL={kind:`running`};function rL(e,t,n){if(e===null)return[];let r=QI(e);if(!n.enabled||n.dismissed===r)return[];let i=eL(e),a=`${i.headline}: ${i.newer}. You're on ${i.running}.`,o=t.kind===`failed`&&t.identity===r?[`${i.act} failed: ${t.reason}`]:[],s=[a,...o].join(`
195
- `),c=hM([{verb:Jj,args:[s]}]),l=t.kind===`running`?lP(`[${i.busy}]`,c):lP(`[${i.act}]`,hM([{verb:sM,args:[n.sessionId]}]));return[{severity:cP,message:s,lines:[[lP(a,c),l,lP(`[dismiss]`,hM([{verb:Hj,args:[n.sessionId,YI,r]}])),lP(`[disable]`,hM([{verb:Yj,args:[n.sessionId,XI,`false`]},{verb:Hj,args:[n.sessionId,ZI,`false`]}]))],...o.map(e=>[lP(e,c)])]}]}function iL(e,t){return e.kind===`stale`?{kind:`source`,root:e.root,newer:e.source,running:e.running}:e.kind===`not-source-checkout`&&t!==null&&t.kind===`stale`?{kind:`release`,newer:t.latest,running:t.installed}:null}function aL(e){switch(e.kind){case`current`:return[`info`,`build: current ${$I(e.stamp)}`];case`stale`:return[`info`,`build: stale — source ${$I(e.source)}, running ${$I(e.running)}`];case`not-source-checkout`:return[`info`,`build: not a source checkout`];case`unchecked`:return[`warn`,`build: unchecked: ${e.reason}`]}}function oL(e){switch(e.kind){case`current`:return[`info`,`release: current ${EM(e.installed)}`];case`stale`:return[`info`,`release: stale — latest ${EM(e.latest)}, running ${EM(e.installed)}`];case`ahead`:return[`info`,`release: ahead — running ${EM(e.installed)}, latest ${EM(e.latest)}`];case`unchecked`:return[`warn`,`release: unchecked: ${e.reason}`]}}function sL(e){let t=null;return([n,r])=>{r!==t&&(t=r,e(n,r))}}const cL=e=>e.split(/\r?\n/).map(e=>e.trim()).filter(e=>e!==``).at(-1);function lL(e){let t=e.exitCode===null?``:` (exit ${e.exitCode})`,n=cL(e.stderr)??e.error??cL(e.stdout)??`no output`;return`${e.reason}${t}: ${n}`}function uL(){let e=[BP(XI,[`false`]),HI(ZI,[`false`]),HI(YI,[])];return()=>e.forEach(e=>e())}function dL(e){let{entryUrl:t,intervalMs:n,releaseIntervalMs:r,registryUrl:i,fetchImpl:a,onApplied:o,log:s}=e,c={kind:`unchecked`,reason:`not sampled yet`},l=null,u=tL,d=null,f=sL(s),p=sL(s),m=()=>iL(c,l);function h(){let e=m(),t=e===null?null:QI(e);(d===null?null:d.identity)!==t&&(d?.dispose(),d=t===null?null:{identity:t,dispose:HI(YI,[t])})}function g(){c=TP(t,CP),f(aL(c)),h()}async function _(){l=AM(QA,await kM(OM,a,i)),p(oL(l)),h()}return{arm(){uL(),g(),setInterval(g,n).unref(),c.kind===`not-source-checkout`&&(_(),setInterval(()=>void _(),r).unref())},notice:e=>rL(m(),u,e),act(){let e=m();if(e===null)throw new $(`apply-update: nothing newer is known to apply`);let t=eL(e);if(u.kind===`running`)throw new $(`apply-update: already ${t.busy}`);u=nL,s(`info`,`apply-update: ${t.act} — ${t.command.bin} ${t.command.args?.join(` `)??``}`),je({...t.command,category:`update.apply`,timeoutMs:6e5}).then(n=>{if(n.ok){u=tL,s(`info`,`apply-update: ${t.act} succeeded`),g(),o();return}let r=lL(n);u={kind:`failed`,identity:QI(e),reason:r},s(`error`,`apply-update: ${t.act} failed: ${r}`)})}}}var fL=class{static CACHE_DIR=Le();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(!r.existsSync(t))return!1;try{let n=r.readFileSync(t,`utf-8`),i=parseInt(n.trim(),10);if(isNaN(i))return D(`Invalid PID in lock file ${e}, removing stale lock`),r.unlinkSync(t),!1;try{return process.kill(i,0),!0}catch(n){return n.code===`ESRCH`?(D(`Removing stale lock file ${e} for dead process ${i}`),r.unlinkSync(t),!1):(D(`Error checking process ${i} for lock ${e}:`,n),!0)}}catch(t){return D(`Error reading lock file ${e}:`,t),!0}}static async acquireLock(e,t=5e3){await this.ensureCacheDirectories();let n=l.join(this.LOCKS_DIR,e),i=Date.now(),a=String(process.pid);for(;Date.now()-i<t;)try{return await r.promises.writeFile(n,a,{flag:`wx`}),D(`Lock acquired for ${e}`),!0}catch(e){if(e.code===`EEXIST`)await ue(50);else throw e}return D(`Failed to acquire lock for ${e} within ${t}ms`),!1}static async releaseLock(e){let t=l.join(this.LOCKS_DIR,e);try{await r.promises.unlink(t),D(`Lock released for ${e}`)}catch(t){t.code!==`ENOENT`&&D(`Error releasing lock for ${e}:`,t)}}static async ensureCacheDirectories(){try{await Promise.all([r.promises.mkdir(this.CACHE_DIR,{recursive:!0}),r.promises.mkdir(this.USAGE_CACHE_DIR,{recursive:!0}),r.promises.mkdir(this.LOCKS_DIR,{recursive:!0})])}catch(e){D(`Failed to create cache directories:`,e)}}static createProjectHash(e){return se(`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`),i=`${e}.usage.lock`;for(let a=0;a<3;a++){if(this.isLocked(i)){D(`Cache for ${e} is locked, waiting...`),await ue(75);continue}try{let i=await r.promises.readFile(n,`utf-8`),a=JSON.parse(i);return!t||a.timestamp>=t?(D(`[CACHE-HIT] ${e} disk cache: found`),this.deserializeDates(a.data)):(D(`${e} cache outdated: cache=${a.timestamp}, latest=${t}`),null)}catch(t){if(t.code===`ENOENT`)return D(`No shared ${e} usage cache found`),null;D(`Attempt ${a+1} failed to read ${e} cache: ${t.message}. Retrying...`),await ue(75)}}return D(`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 i=`${e}.usage.lock`;if(!await this.acquireLock(i)){D(`Could not acquire lock to set usage cache for ${e}`);return}try{await this.ensureCacheDirectories();let i=l.join(this.USAGE_CACHE_DIR,`${e}.json`),a=JSON.stringify({data:t,timestamp:n||Date.now()});await r.promises.writeFile(i,a,`utf-8`),D(`[CACHE-SET] ${e} disk cache stored`)}catch(t){D(`Failed to save ${e} usage cache:`,t)}finally{await this.releaseLock(i)}}};const pL={"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 mL=class{static executionCache=null;static modelPricingCache=new Map;static GITHUB_PRICING_URL=`https://raw.githubusercontent.com/promptctl/cc-candybar/main/pricing.json`;static async loadDiskCache(){let e=Date.now()-1440*60*1e3;return await fL.getUsageCache(`pricing`,e)}static async saveDiskCache(e){await fL.setUsageCache(`pricing`,e)}static async fetchPricingData(){return new Promise(e=>{let t=new ie(this.GITHUB_PRICING_URL),n=le({hostname:t.hostname,path:t.pathname,headers:{"User-Agent":`cc-candybar`,"Cache-Control":`no-cache`},timeout:5e3},t=>{if(t.statusCode!==200){D(`HTTP ${t.statusCode}: ${t.statusMessage}`),e(null);return}let r=``,i=0;t.on(`data`,t=>{if(i+=t.length,i>1048576){D(`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)?(D(`Fetched fresh pricing from GitHub for ${Object.keys(i).length} models`),D(`Pricing last updated: ${n?.updated||`unknown`}`),e(i)):(D(`Invalid pricing data structure`),e(null))}catch(t){D(`Failed to parse JSON:`,t),e(null)}}),t.on(`error`,t=>{D(`Response error:`,t),e(null)})});n.on(`error`,t=>{D(`Request error:`,t),e(null)}),n.on(`timeout`,()=>{D(`Request timeout`),n.destroy(),e(null)}),n.end()})}static async getCurrentPricing(){if(this.executionCache!==null)return D(`[CACHE-HIT] Pricing execution cache: ${Object.keys(this.executionCache).length} models`),this.executionCache;let e=await this.loadDiskCache();if(e)return D(`[CACHE-HIT] Pricing disk cache: ${Object.keys(e).length} models`),this.executionCache=e,D(`[CACHE-SET] Pricing execution cache stored: ${Object.keys(e).length} models`),e;let t=await this.fetchPricingData();return t?(await this.saveDiskCache(t),D(`[CACHE-SET] Pricing disk cache stored: ${Object.keys(t).length} models`),this.executionCache=t,D(`[CACHE-SET] Pricing execution cache stored: ${Object.keys(t).length} models`),t):(D(`[CACHE-FALLBACK] Using offline pricing data: ${Object.keys(pL).length} models`),this.executionCache=pL,D(`[CACHE-SET] Pricing execution cache stored: ${Object.keys(pL).length} models`),pL)}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 D(`[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),D(`[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`}};const hL=/<command-name>\s*([^<\s][^<]*?)\s*<\/command-name>/;function gL(e){if(typeof e==`string`)return hL.exec(e)?.[1]}function _L(e){let t=e?.todos;if(!Array.isArray(t))return;let n=[];for(let e of t){if(typeof e!=`object`||!e)continue;let{content:t,activeForm:r,status:i}=e,a=i===`in_progress`,o=a&&typeof r==`string`?r:t;typeof o==`string`&&n.push({text:o,active:a,done:i===`completed`})}return n}function vL(e){return typeof e==`string`?e:Array.isArray(e)?e.find(e=>typeof e==`object`&&!!e&&e.type===`text`&&typeof e.text==`string`)?.text??``:``}function yL(e,t){let n=e.message?.content,r=[],i=[],a;if(Array.isArray(n))for(let e of n){if(typeof e!=`object`||!e)continue;let t=e;switch(t.type){case`tool_use`:{let{id:e,name:n}=t;if(typeof e!=`string`||typeof n!=`string`)break;r.push({id:e,name:n}),n===`TodoWrite`&&(a=_L(t.input)??a);break}case`tool_result`:{let e=t.tool_use_id;typeof e==`string`&&i.push(e);break}default:break}}let o=t===`prompt`?gL(vL(n)):void 0;if(!(r.length===0&&i.length===0&&a===void 0&&o===void 0))return{...r.length>0&&{started:r},...i.length>0&&{finished:i},...a!==void 0&&{todos:a},...o!==void 0&&{command:o}}}function bL(e){if(e!==void 0)return[e];let t=g();return[p(t,`.config`,`claude`),p(t,`.claude`)].filter(e=>a(e))}async function xL(e){let t=[];for(let n of e){let e=p(n,`projects`);if(a(e))try{let n=await pF(e,{withFileTypes:!0});for(let r of n)if(r.isDirectory()){let n=p(e,r.name);t.push(n)}}catch(t){D(`Failed to read projects directory ${e}:`,t)}}return t}async function SL(e,t,n){let r=[],i=p(t,e,`subagents`);try{let t=(await pF(i)).filter(e=>e.startsWith(`agent-`)&&e.endsWith(`.jsonl`));for(let a of t){let t=p(i,a);if(n?.has(t)){r.push(t);continue}try{let n=(await mF(t,`utf-8`)).split(`
196
- `)[0];n&&JSON.parse(n).sessionId===e&&r.push(t)}catch{D(`Failed to check agent file ${t}`)}}}catch(e){D(`Failed to read subagents directory ${i}:`,e)}return r}function CL(e){let t=e.message;if((e.type||t?.role||t?.type)!==`user`)return;if(TL(t)===`tool_result`)return`tool-result`;let n=typeof e.origin==`object`&&e.origin!==null?e.origin.kind:void 0;if(n!==void 0&&n!==`human`)return`turn`;let r=vL(t?.content).trimStart();return r.startsWith(`[Request interrupted by user`)?`interrupt`:e.isMeta===!0||e.isCompactSummary===!0||wL.test(r)?`claude-code`:`prompt`}const wL=/^<(?:command-name|local-command-std(?:out|err)|bash-(?:input|stdout|stderr))>/;function TL(e){let t=e?.content;return Array.isArray(t)&&typeof t[0]==`object`&&t[0]?t[0].type:void 0}const EL=new Map;async function DL(e){try{let t=await hF(e),n=t.size,r=EL.get(e);if(r&&r.mtime===t.mtimeMs&&r.size===n)return D(`[parse-cache] hit ${e}`),EL.delete(e),EL.set(e,r),r.entries;let i;return n>1048576?(D(`Using streaming parser for large file ${e} (${Math.round(n/1024)}KB)`),i=await ML(e)):i=await AL(e),D(`Parsed ${i.length} entries from ${e}`),n>5242880?i:(EL.delete(e),EL.size>=16&&EL.delete(EL.keys().next().value),EL.set(e,{mtime:t.mtimeMs,size:n,entries:i}),i)}catch(t){if(t.code===`ENOENT`)return D(`Transcript not present yet: ${e}`),[];throw t}}function OL(e){if(!e.timestamp)return null;let t=e.message,n=t?.usage,r=CL(e);return{timestamp:new Date(e.timestamp),type:typeof e.type==`string`?e.type:void 0,message:t?{id:typeof t.id==`string`?t.id:void 0,model:typeof t.model==`string`?t.model:void 0,usage:n,role:typeof t.role==`string`?t.role:void 0,type:typeof t.type==`string`?t.type:void 0}:void 0,costUSD:typeof e.costUSD==`number`?e.costUSD:void 0,isSidechain:e.isSidechain===!0,userEntry:r,activity:yL(e,r),raw:{model:typeof e.model==`string`?e.model:void 0,message:t?{id:typeof t.id==`string`?t.id:void 0,model:typeof t.model==`string`?t.model:void 0,usage:n}:void 0,requestId:typeof e.requestId==`string`?e.requestId:void 0}}}function kL(e){let t=[];for(let n of e.split(`
197
- `))if(n.trim())try{let e=OL(JSON.parse(n));e&&t.push(e)}catch(e){D(`Failed to parse JSONL line: ${e}`);continue}return t}async function AL(e){return kL(await mF(e,`utf-8`))}async function jL(e,t){let n=await gF(e,t===void 0?void 0:{offset:t.offset,ino:t.ino});if(n.kind!==`ok`)return n;let{buf:r,start:i,mtimeMs:a,ino:o,reset:s}=n.value,c=r.lastIndexOf(10);return J(c<0?{entries:[],cursor:{offset:i,mtimeMs:a,ino:o},reset:s}:{entries:kL(r.subarray(0,c+1).toString(`utf-8`)),cursor:{offset:i+c+1,mtimeMs:a,ino:o},reset:s})}async function ML(e){return new Promise((t,n)=>{let r=[],a=i(e,{encoding:`utf8`}),o=de({input:a,crlfDelay:1/0});o.on(`line`,e=>{let t=e.trim();if(t)try{let e=OL(JSON.parse(t));e&&r.push(e)}catch(e){D(`Failed to parse JSONL line: ${e}`)}}),o.on(`close`,()=>{t(r)}),o.on(`error`,t=>{D(`Streaming parser error for ${e}:`,t),n(t)}),a.on(`error`,t=>{D(`File stream error for ${e}:`,t),n(t)})})}var NL=class{inflight=new Map;run(e,t){return this.inflight.get(e)??this.start(e,t)}start(e,t){let n=t();this.inflight.set(e,n);let r=()=>{this.inflight.get(e)===n&&this.inflight.delete(e)};return n.then(r,r),n}get size(){return this.inflight.size}};function PL(e,t){let n=e?e.input+e.cacheCreation+e.cacheRead:0,r=e?e.output:0;return{input:n,output:r,total:n+r,atMs:t}}const FL=new Map,IL={cost:0,input:0,output:0,cacheCreation:0,cacheRead:0},LL={cost:null,calculatedCost:null,officialCost:null,tokens:null,tokenBreakdown:null};function RL(e){return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`}function zL(){let e=new Date;return e.setHours(0,0,0,0),e.setDate(e.getDate()-1),e.getTime()}function BL(){return{input:0,output:0,cacheCreation:0,cacheRead:0}}async function VL(e,t,n,r){let i=RL(new Date(zL())),a=e&&!t?e:void 0,o=a?.entries??0,s=a?.cost??0,c=a?{...a.breakdown}:BL(),l=new Map;if(a)for(let[e,t]of a.days)e>=i&&l.set(e,{...t});for(let e of n){let t=e.message?.usage;if(!t)continue;o++;let n=e.costUSD??await mL.calculateCostForEntry(e.raw);s+=n,c.input+=t.input_tokens||0,c.output+=t.output_tokens||0,c.cacheCreation+=t.cache_creation_input_tokens||0,c.cacheRead+=t.cache_read_input_tokens||0;let r=RL(new Date(e.timestamp));if(r<i)continue;let a=l.get(r)??{...IL};a.cost+=n,a.input+=t.input_tokens||0,a.output+=t.output_tokens||0,a.cacheCreation+=t.cache_creation_input_tokens||0,a.cacheRead+=t.cache_read_input_tokens||0,l.set(r,a)}return{cursor:r,entries:o,cost:s,breakdown:c,days:l}}function HL(e){let t=0,n=0,r=BL(),i=new Map;for(let a of e.values()){t+=a.entries,n+=a.cost,r.input+=a.breakdown.input,r.output+=a.breakdown.output,r.cacheCreation+=a.breakdown.cacheCreation,r.cacheRead+=a.breakdown.cacheRead;for(let[e,t]of a.days){let n=i.get(e)??{...IL};n.cost+=t.cost,n.input+=t.input,n.output+=t.output,n.cacheCreation+=t.cacheCreation,n.cacheRead+=t.cacheRead,i.set(e,n)}}if(t===0)return{sessionInfo:LL,days:i};let a=r.input+r.output+r.cacheCreation+r.cacheRead;return{sessionInfo:{cost:n,calculatedCost:n,officialCost:null,tokens:a,tokenBreakdown:r},days:i}}async function UL(e,t,n){let r=0,i=async()=>{for(;r<e.length;){let t=e[r++];await n(t)}},a=Math.min(t,e.length);await Promise.all(Array.from({length:a},i))}var WL=class{entries=new Map;flight=new NL;seeded=new Map;seededDay=``;speedRings=new Map;speedFlight=new NL;staleAgeMs;log;hits=0;misses=0;sweeps=0;seeds=0;sweepTimer=null;constructor(e={}){this.log=e.logger??pC,this.staleAgeMs=e.staleAgeMs??864e5;let t=e.sweepIntervalMs??3e5;t>0&&(this.sweepTimer=setInterval(()=>this.sweepStale(),t),this.sweepTimer.unref())}getStats(){return{size:this.entries.size,hits:this.hits,misses:this.misses,sweeps:this.sweeps,seeds:this.seeds}}async getUsageInfo(e,t){let n=await this.ingest(e,t?.transcript_path);if(n.kind===`failed`)return n;let r=n.kind===`ok`?n.value.sessionInfo:LL,i=t?.cost?.total_cost_usd??null;return J({session:{...r,cost:i??r.cost,officialCost:i}})}async getTodayInfo(e,t,n){let r=RL(OC(n)),i=bL(t);try{await this.ensureSeeded(r,i)}catch(e){return X(`usage seed: ${e instanceof Error?e.message:String(e)}`)}let a=await this.ingest(e?.session_id??``,e?.transcript_path);if(a.kind===`failed`)return a;let o=i.map(e=>p(e,`projects`)+m),s={...IL},c=!1;for(let[t,n]of this.entries){let i=n.transcriptPath??``,a=t===e?.session_id||o.some(e=>i.startsWith(e))?n.days:FL;c||=a.has(r);let l=a.get(r)??IL;s.cost+=l.cost,s.input+=l.input,s.output+=l.output,s.cacheCreation+=l.cacheCreation,s.cacheRead+=l.cacheRead}return c?J({cost:s.cost,tokens:s.input+s.output+s.cacheCreation+s.cacheRead,tokenBreakdown:{input:s.input,output:s.output,cacheCreation:s.cacheCreation,cacheRead:s.cacheRead},date:r}):Y}async observeSpeed(e,t,n){let r=uF(t);return this.speedFlight.run(`${e}:${r}`,async()=>{let i=await this.ingest(e,t,r);if(i.kind===`failed`)return i;let a=PL(i.kind===`ok`?i.value.sessionInfo.tokenBreakdown:null,n),o=this.speedRings.get(e)??[],s;for(let e of o)e.atMs<a.atMs&&(s===void 0||e.atMs>s.atMs)&&(s=e);return o.push(a),o.sort((e,t)=>e.atMs-t.atMs),o.length>64&&o.shift(),this.speedRings.set(e,o),J({...s!==void 0&&{prev:s},cur:a,samples:[...o]})})}async ingest(e,t,n){if(!e)return Y;let r=n??uF(t),i=this.entries.get(e);if(i&&r!==0&&i.transcriptMtime===r)return i.lastSeenAt=Date.now(),this.hits++,J(i);if(!t)return i?J(i):Y;this.misses++;let a;try{a=await this.flight.run(`${e}:${r}`,()=>this.refold(e,t,this.entries.get(e)))}catch(t){return X(`usage refold (${e}): ${t instanceof Error?t.message:String(t)}`)}if(a.kind!==`ok`)return a;let o={files:a.value.files,sessionInfo:a.value.sessionInfo,days:a.value.days,transcriptMtime:a.value.mainMtime,transcriptPath:t,lastSeenAt:Date.now()};return this.entries.set(e,o),J(o)}async refold(e,t,n){let r=await SL(e,d(t),n===void 0?void 0:new Set(n.files.keys())),i=new Map,a=0;for(let e of[t,...r]){let r=n?.files.get(e),o=await jL(e,r?.cursor);if(o.kind===`failed`)return o;if(o.kind===`absent`){r&&i.set(e,r);continue}let{entries:s,cursor:c,reset:l}=o.value;i.set(e,await VL(r,l,s,c)),e===t&&(a=c.mtimeMs)}return J({files:i,...HL(i),mainMtime:a})}ensureSeeded(e,t){this.seededDay!==e&&(this.seeded.clear(),this.seededDay=e);let n=t.join(`\0`),r=this.seeded.get(n);if(r)return r;let i=this.seed(t);return this.seeded.set(n,i),i.catch(()=>{this.seeded.get(n)===i&&this.seeded.delete(n)}),i}async seed(e){let t=zL(),n=await xL(e),r=[];for(let e of n){let n;try{n=await pF(e)}catch{continue}for(let i of n){if(!i.endsWith(`.jsonl`))continue;let n=p(e,i),a;try{a=(await hF(n)).mtimeMs}catch{continue}a<t||r.push({sessionId:i.slice(0,-6),path:n,mtime:a})}}await UL(r,8,async e=>{let t=await this.ingest(e.sessionId,e.path,e.mtime);t.kind===`failed`&&this.log(`warn`,`usageStore seed: ${t.reason}`)}),this.seeds++,this.log(`info`,`usageStore seed sessions=${r.length} dirs=${e.join(`,`)}`)}sweepStale(){let e=Date.now(),t=0,n=0;for(let[r,i]of this.entries)if(!(e-i.lastSeenAt<=this.staleAgeMs)){if(i.days.has(this.seededDay)){n++;continue}this.entries.delete(r),this.speedRings.delete(r),t++}return t>0&&this.sweeps++,(t>0||n>0)&&this.log(`info`,`usageStore sweep dropped=${t} held=${n}`),t}close(){this.sweepTimer&&=(clearInterval(this.sweepTimer),null),this.entries.clear(),this.seeded.clear(),this.speedRings.clear()}},GL=class{thresholds={LOW:50,MEDIUM:80};getContextUsageThresholds(){return this.thresholds}ratioPercentages(e,t){let n=Math.min(100,Math.max(0,Math.round(e/t*100)));return{percentage:n,contextLeftPercentage:Math.max(0,100-n)}}calculateContextFromHookData(e){let t=e.context_window;if(!t?.current_usage)return D(`No current_usage in hook data, falling back to transcript parsing`),null;let n=t.current_usage,r=t.context_window_size,i=(n.input_tokens||0)+(n.cache_creation_input_tokens||0)+(n.cache_read_input_tokens||0);D(`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=this.ratioPercentages(i,r);return{totalTokens:i,maxTokens:r,percentage:t.used_percentage==null?a.percentage:Math.round(t.used_percentage),contextLeftPercentage:t.remaining_percentage==null?a.contextLeftPercentage:Math.round(t.remaining_percentage)}}async calculateContextTokensFromTranscript(e,t){try{D(`Calculating context tokens from transcript: ${e}`);let n=await DL(e);if(n.length===0)return D(`No entries in transcript`),Y;let r=null;for(let e=n.length-1;e>=0;e--){let t=n[e];if(t&&t.message?.usage?.input_tokens&&t.isSidechain!==!0){r=t,D(`Context segment: Found most recent entry at ${t.timestamp.toISOString()}, stopping search`);break}}if(r?.message?.usage){let e=r.message.usage,n=(e.input_tokens||0)+(e.cache_read_input_tokens||0)+(e.cache_creation_input_tokens||0);return D(`Most recent main chain context: ${n} tokens (limit: ${t})`),J({totalTokens:n,maxTokens:t,...this.ratioPercentages(n,t)})}return D(`No main chain entries with usage data found`),Y}catch(e){return X(`context transcript: ${e instanceof Error?e.message:String(e)}`)}}async getContextInfo(e){let t=this.calculateContextFromHookData(e);if(t)return J(t);let n=e.context_window?.context_window_size??2e5;return this.calculateContextTokensFromTranscript(e.transcript_path,n)}},KL=class{states=new Map;constructor(e,t,n=256){this.empty=e,this.step=t,this.maxSessions=n}async read(e,t){let n=this.states.get(e),r=uF(t);if(n&&r!==0&&n.cursor.mtimeMs===r)return this.touch(e,n),{kind:`ok`,value:n.value};let i=await jL(t,n?.cursor);if(i.kind===`failed`)return i;if(i.kind===`absent`)return{kind:`ok`,value:n?.value??this.empty};let{entries:a,cursor:o,reset:s}=i.value,c=s||n===void 0?this.empty:n.value;for(let e of a)c=this.step(c,e);for(this.touch(e,{cursor:o,value:c});this.states.size>this.maxSessions;){let e=this.states.keys().next().value;if(e===void 0)break;this.states.delete(e)}return{kind:`ok`,value:c}}touch(e,t){this.states.delete(e),this.states.set(e,t)}};const qL={messageCount:0,nonPrompts:0,recent:[]},JL=new Set([`turn`,`interrupt`,`claude-code`]);function YL(e,t){if(t.isSidechain)return e;let n=[...e.recent,t];return{messageCount:e.messageCount+ +(t.userEntry===`prompt`),nonPrompts:e.nonPrompts+ +!!JL.has(t.userEntry),recent:n.length>20?n.slice(-20):n}}function XL(e){let t=null,n=null;for(let r of e){let e=r.type||r.message?.role||r.message?.type;if(r.userEntry===`prompt`||r.userEntry===`turn`)t=r.timestamp;else if(e===`assistant`&&t){let e=(r.timestamp.getTime()-t.getTime())/1e3;e>.1&&e<300&&(n=e)}}return n}var ZL=class{fold=new KL(qL,YL);async getMetricsInfo(e,t){if(D(`Getting metrics from hook data for session: ${e}`),!t.cost)return Y;let n=await this.fold.read(e,t.transcript_path);return n.kind===`failed`?X(`metrics (${e}): ${n.reason}`):J({responseTime:t.cost.total_api_duration_ms/1e3,lastResponseTime:XL(n.value.recent),sessionDuration:t.cost.total_duration_ms/1e3,messageCount:n.value.messageCount,nonPrompts:n.value.nonPrompts,linesAdded:t.cost.total_lines_added,linesRemoved:t.cost.total_lines_removed})}};const QL={command:null,todos:[],pending:[],done:[]};function $L(e,t){let n=e.findIndex(e=>e.name===t);return n<0?[...e,{name:t,count:1}]:e.map((e,t)=>t===n?{name:e.name,count:e.count+1}:e)}function eR(e,t){switch(t.userEntry){case`prompt`:return{...e,command:t.activity?.command??null,pending:[],done:[]};case`interrupt`:return{...e,pending:[]};case`turn`:case`tool-result`:case`claude-code`:case void 0:return e}}function tR(e,t){if(t.isSidechain)return e;let n=eR(e,t),r=t.activity;if(r===void 0)return n;let i=n.pending,a=n.done;r.started!==void 0&&(i=[...i,...r.started]);for(let e of r.finished??[]){let t=i.findIndex(t=>t.id===e);t<0||(a=$L(a,i[t].name),i=[...i.slice(0,t),...i.slice(t+1)])}return{...n,pending:i,done:a,todos:r.todos??n.todos}}function nR(e){return{command:e.command,todos:e.todos,running:e.pending.reduce((e,t)=>$L(e,t.name),[]),done:e.done}}var rR=class{fold=new KL(QL,tR);async getActivityInfo(e,t){let n=await this.fold.read(e,t.transcript_path);return n.kind===`failed`?X(`activity (${e}): ${n.reason}`):J(nR(n.value))}};function iR(e,t,n,r){return{bin:`tmux`,args:[`-S`,e.socket,...n],timeoutMs:2e3,category:t,stdinInput:r}}function aR(e,t){if(e.ok)return{kind:`ok`,stdout:e.stdout};if(e.reason===`rate-limited`)return{kind:`rate-limited`,reason:e.error??`rate-limited`};let n=e.error??[e.reason,e.stderr.trim()].filter(e=>e!==``).join(`: `);return{kind:`failed`,reason:`tmux ${t[0]} failed (${n})`}}function oR(e,t,n,r){return aR(O(iR(e,t,n,r)),n)}async function sR(e,t,n){return aR(await je(iR(e,t,n)),n)}const cR=e=>`${e.socket}\n${e.pane}`;var lR=class{names=new Map;asking=new NL;constructor(e=Date.now){this.now=e}getSessionName(e){let t=cR(e),n=this.names.get(t);if(n&&this.now()-n.at<3e4)return Promise.resolve(n.outcome);let r=this.asking.run(t,()=>this.ask(t,e));return n?Promise.resolve(n.outcome):r}async ask(e,t){D(`Getting tmux session name for pane ${t.pane} on ${t.socket}`);let n=await sR(t,`tmux`,[`display-message`,`-p`,`-t`,t.pane,`#S`]),r=n.kind===`ok`?n.stdout.trim():``,i=n.kind===`ok`?r?J(r):Y:X(n.reason);for(this.names.delete(e),this.names.set(e,{outcome:i,at:this.now()});this.names.size>64;)this.names.delete(this.names.keys().next().value);return i}};const uR=e=>JSON.stringify([e.sessionId,e.projectDir,e.cwd,e.claudeConfigDir,e.env===void 0?null:$e.map(t=>e.env?.[t]??null)]);var dR=class{readings=new Map;inFlight=new Map;constructor(e,t=Date.now){this.edge=e,this.now=t}getCeiling(e){let t=uR(e),n=this.readings.get(t);if(n&&this.now()-n.at<1e4)return Promise.resolve(n.outcome);let r=this.inFlight.get(t)??this.fetch(t,e);return n?Promise.resolve(n.outcome):r}fetch(e,t){let n=this.edge.locate(t),r=(n.kind===`ok`?this.edge.read(n.value,t):Promise.resolve(n)).then(t=>{if(this.inFlight.get(e)!==r)return t;for(this.readings.delete(e),this.readings.set(e,{outcome:t,at:this.now()});this.readings.size>64;)this.readings.delete(this.readings.keys().next().value);return t}).finally(()=>{this.inFlight.get(e)===r&&this.inFlight.delete(e)});return this.inFlight.set(e,r),r}move(e,t){let n=this.edge.locate(e);if(n.kind!==`ok`)throw Error(n.kind===`failed`?n.reason:`memento is not installed or not enabled for this project`);let r=uR(e);try{this.edge.move(n.value,e,t)}finally{this.readings.delete(r),this.inFlight.delete(r),this.fetch(r,e)}}};function fR(e){return{gitProvider:new SC({watchers:e.watchers,logger:e.logger}),usageStore:new WL({logger:e.logger}),contextProvider:new GL,metricsProvider:new ZL,activityProvider:new rR,tmuxService:new lR,mementoProvider:new dR(PF()),autoCompact:WT,log:e.logger}}function pR(e,t){return e===void 0?!0:e.evaluate(t).map(e=>e.plain).join(``)!==`false`}function mR(e,t){let n=W.fromFragments(e);return n.end=``,n.overflow=`ignore`,t!==void 0&&!t.isNull&&(n.style=t),n}function hR(e,t,n){e.cellLength>t?e.truncate(t,{mode:n.truncate,marker:`…`}):e.cellLength<t&&e.align(n.justify,t)}function gR({lead:e,text:t,trail:n}){return[...e===void 0?[]:[e],t,...n===void 0?[]:[n]]}function _R({text:e,placement:t,lead:n,trail:r}){return{text:vR(e),placement:t,...n!==void 0&&{lead:vR(n)},...r!==void 0&&{trail:vR(r)}}}function vR(e){let t=e.blankCopy(e.plain);t.style=IN(e.style).clearMetaAndLinks();for(let{start:n,end:r,style:i}of e.spans)t.stylize(IN(i).clearMetaAndLinks(),n,r);return t}function yR(e){let t=gR(e);if(t.length===1)return e.text;let n=mR(t);return n.style=e.text.style,n}function bR(e,t){let{width:n,justify:r,truncate:i,baseStyle:a,padding:o,placement:s,lead:c=[],trail:l=[]}=t;if(e.length===0)return[];let u=mR(e,a).pad(o),d=new W(` `.repeat(o)),f={placement:s,...c.length>0&&{lead:mR([d,...c],a)},...l.length>0&&{trail:mR([...l,d],a)}};if(n===`auto`)return[{text:u,...f}];let p={justify:r,truncate:i};return n===`fill`?[{text:u,fill:p,...f}]:(hR(u,n,p),[{text:u,...f}])}function xR(e,t){let n=()=>e.map(e=>({owner:yR(e),placement:e.placement})),r=[];if(e.forEach(({fill:e},t)=>{e!==void 0&&r.push({at:t,how:e})}),r.length===0||!Number.isFinite(t.width))return n();let i=iP(e.map(yR),t).split(`
198
- `);if(i.length>1)return n();let a=Math.max(0,t.width-JN(i[0]??``)),o=Math.floor(a/r.length),s=a-o*r.length;return r.forEach(({at:t,how:n},i)=>{let a=o+(i===r.length-1?s:0),{text:c}=e[t];hR(c,c.cellLength+a,n)}),n()}function SR(e,t){let n=[],r=[],i=()=>{if(!r.length)return;let e=CR(r,t);e.plain.length>0&&n.push(e),r=[]};for(let a of e){let e={frag:a,style:IN(a.style)};if(e.style.link){i();let r=CR([e],t);r.plain.length>0&&n.push(r)}else r.push(e)}return i(),n}function CR(e,t){let n=t!==void 0&&!t.isNull?t:void 0,r=e.map(e=>wR(e.frag,n?n.add(e.style):e.style)),i=W.fromFragments(r);return i.end=``,i.overflow=`ignore`,r.length===1?i.style=r[0].style:n!==void 0&&(i.style=n),i}function wR(e,t){let n=e.copy();return n.style=t,n}function TR(e,t){if(e.look===void 0)throw Error(`${t} read the render's look before any render resolved one`);return e.look}function ER(e,t,n,r){let i=new Map,a=Object.entries(t);for(let[t,o]of[...a.filter(([,e])=>!(`do`in e)),...a.filter(([,e])=>`do`in e)])i.set(t,DR(e,t,o,n,r,i));return i}function DR(e,t,n,r,i,a){if(`set`in n){let e=r.get(n.set)??n.set;if(`to`in n)return{kind:`set-literal`,key:n.set,value:n.to,stateVar:e};if(`from`in n){let t=Tw(n.from,i);return{kind:`set-option`,key:n.set,stateVar:e,options:[...t.members],paletteOf:t.paletteOf,library:t.library}}return`int`in n?{kind:`set-int`,key:n.set,stateVar:e}:`cycle`in n?{kind:`set-cycle`,key:n.set,stateVar:e,members:n.cycle}:{kind:`set-bounded`,key:n.set,by:n.by}}if(`persist`in n){let e=iw.get(n.persist)??n.persist;if(`to`in n)return{kind:`persist-literal`,key:n.persist,value:n.to,stateVar:e};if(`from`in n){let t=Tw(n.from,i);return{kind:`persist-option`,key:n.persist,stateVar:e,options:[...t.members],paletteOf:t.paletteOf,library:t.library}}if(`cycle`in n)return{kind:`persist-cycle`,key:n.persist,stateVar:e,members:n.cycle};if(`removeSegment`in n)return{kind:`layout-op`,key:n.persist,op:{op:`remove`,target:n.removeSegment}};if(`insertSegment`in n)return{kind:`layout-op`,key:n.persist,op:{op:`insert`,segment:n.insertSegment,anchor:n.anchor,relation:n.relation}};if(`insertSegmentFrom`in n){let e=Tw(n.insertSegmentFrom,i);return{kind:`layout-op-option`,key:n.persist,anchor:n.anchor,relation:n.relation,options:[...e.members],paletteOf:e.paletteOf,library:e.library}}return{kind:`persist-bounded`,key:n.persist,by:n.by}}if(`copy`in n)return{kind:`copy`,text:AR(e,n.copy,t)};if(`open`in n)return{kind:`open`,target:AR(e,n.open,t)};if(`reset`in n)return{kind:`reset`,key:n.reset};if(`doctor`in n)return n.doctor===`run`?{kind:`doctor-run`}:{kind:`doctor-fix`,check:n.check};if(`ceiling`in n)return{kind:`ceiling`,args:tO(n)};if(`slash`in n)return{kind:`slash`,line:n.slash};if(`undo`in n)return{kind:`undo`};if(`redo`in n)return{kind:`redo`};if(`back`in n)return{kind:`back`};if(`rewind`in n)return{kind:`rewind`};if(`save`in n)return{kind:`save`};if(`preset`in n)return n.preset===`save`?{kind:`preset-save`}:{kind:`preset-delete`,name:AR(e,n.name,t)};if(`themeDefault`in n)return{kind:`theme-default-save`};let[o,...s]=n.do.map(e=>{let n=a.get(e);if(n===void 0)throw Error(`action "${t}" fires "${e}", which is not declared in this config`);return n});return{kind:`do`,head:o,rest:s}}function OR(e){return e.kind===`do`?OR(e.head):e}function kR(e){switch(OR(e).kind){case`set-option`:case`set-int`:case`persist-option`:case`layout-op-option`:return!0;case`set-literal`:case`set-bounded`:case`set-cycle`:case`copy`:case`open`:case`persist-literal`:case`persist-bounded`:case`persist-cycle`:case`reset`:case`layout-op`:case`undo`:case`redo`:case`back`:case`rewind`:case`save`:case`preset-save`:case`preset-delete`:case`theme-default-save`:case`doctor-run`:case`doctor-fix`:case`ceiling`:case`slash`:case`do`:return!1}}function AR(e,t,n){try{return e(t)}catch(e){throw Error(`Template parse error in actions.${n}: ${e.message}`,{cause:e})}}function jR(e,t){return e.has(t)?Bx(e.read(t)):``}function MR(e,t){return e.evaluate(t).map(e=>e.plain).join(``)}function NR(e,t,n,r){let i=new W(e,{style:H.combine([r,new H({link:t,bold:n})])});return i.overflow=`ignore`,i.end=``,i}function PR(e,t){return Math.max(e.members.indexOf(jR(t,e.stateVar)),0)}function FR(e,t,n,r,i){switch(e.kind){case`set-literal`:{let t=jR(r,e.stateVar);return{effects:[{verb:Hj,args:[i,e.key,e.value]}],active:t===e.value}}case`set-option`:{let a=n??t,o=jR(r,e.stateVar);return{effects:[{verb:Hj,args:[i,e.key,a]}],active:o===a}}case`set-int`:{let a=n??t,o=jR(r,e.stateVar);return{effects:[{verb:Hj,args:[i,e.key,a]}],active:o===a}}case`set-cycle`:{let t=e.members[(PR(e,r)+1)%e.members.length];return{effects:[{verb:Hj,args:[i,e.key,t]}],active:!1}}case`set-bounded`:return{effects:[{verb:Uj,args:[i,e.key,String(e.by)]}],active:!1};case`copy`:return{effects:[{verb:Wj,args:[MR(e.text,NS(r))]}],active:!1};case`open`:return{effects:[{verb:Gj,args:[MR(e.target,NS(r))]}],active:!1};case`persist-literal`:{let t=jR(r,e.stateVar);return{effects:[{verb:Yj,args:[i,e.key,e.value]}],active:t===e.value}}case`persist-option`:{let a=n??t,o=jR(r,e.stateVar);return{effects:[{verb:Yj,args:[i,e.key,a]}],active:o===a}}case`persist-cycle`:{let t=e.members[(PR(e,r)+1)%e.members.length];return{effects:[{verb:Yj,args:[i,e.key,t]}],active:!1}}case`persist-bounded`:return{effects:[{verb:Xj,args:[i,e.key,String(e.by)]}],active:!1};case`reset`:return{effects:[{verb:tM,args:[i,e.key]}],active:!1};case`undo`:return{effects:[{verb:rM,args:[i]}],active:!1};case`redo`:return{effects:[{verb:iM,args:[i]}],active:!1};case`back`:return{effects:[{verb:aM,args:[i]}],active:!1};case`rewind`:return{effects:[{verb:oM,args:[i]}],active:!1};case`save`:return{effects:[{verb:Zj,args:[i]}],active:!1};case`preset-save`:return{effects:[{verb:Qj,args:[i]}],active:!1};case`theme-default-save`:return{effects:[{verb:$j,args:[i]}],active:!1};case`preset-delete`:return{effects:[{verb:eM,args:[i,MR(e.name,NS(r))]}],active:!1};case`doctor-run`:return{effects:[{verb:cM,args:[i]}],active:!1};case`doctor-fix`:return{effects:[{verb:lM,args:[i,e.check]}],active:!1};case`ceiling`:return{effects:[{verb:dM,args:[i,...e.args]}],active:!1};case`slash`:return{effects:[{verb:fM,args:[i,e.line]}],active:!1};case`layout-op`:return{effects:[{verb:nM,args:[i,e.key,EP(e.op)]}],active:!1};case`do`:{let a=FR(e.head,t,n,r,i);return{effects:[...a.effects,...e.rest.flatMap(e=>FR(e,t,void 0,r,i).effects)],active:a.active}}case`layout-op-option`:{let r={op:`insert`,segment:n??t,anchor:e.anchor,relation:e.relation};return{effects:[{verb:nM,args:[i,e.key,EP(r)]}],active:!1}}}}function IR(e,t,n,r){if(n.length===0)throw Error(`action "${e}" needs a display (the clickable text)`);if(t.kind===`set-cycle`||t.kind===`persist-cycle`)return{display:Ud(`action "${e}"`,n,t.members.length,PR(t,r)),boundValue:void 0};if(n.length>2)throw Error(`action "${e}" takes a display and an optional bound value, got ${n.length} arguments (per-state displays are a cycle action's form)`);return{display:n[0],boundValue:n[1]}}function LR(e,t,n){let r=n.compiled.get(e);if(!r)throw Error(`action "${e}" is not declared in this config`);let i=n.store,{display:a,boundValue:o}=IR(e,OR(r),t,i),{effects:s,active:c}=FR(r,a,o,i,jR(i,`session.id`));return NR(a,hM(s),c)}function RR(e){return{action:{fn:(t,...n)=>LR(t,n,e),argTypes:[`string`,`string`],arity:{kind:`variadic`},returnType:`T`}}}function zR(e,t){return NR(`✕`,hM([{verb:Hj,args:[jR(e,`session.id`),t,Bd]}]),!1)}function BR(e,t,n){return new H({bgcolor:L.fromRgba(t),color:L.fromRgba(nc(e,t,n))})}function VR({tint:e,text:t}){return new H({bgcolor:L.fromRgba(e),color:L.fromRgba(t)})}function HR(e,t,n){return new H({color:L.fromRgba(Or(Ks(e,`warning`),t,tc,n))})}function UR(e,t,n){return H.combine([BR(e,t,n),HR(e,t,n)])}function WR(e,t,n){return BR(e.palette,Sc(e.palette,e.disclosure,[t],n),n)}function GR(e,t,n,r,i,a){return r===void 0?n=>WR(e,{...n,distribution:t},i):(e,t)=>KR(r(t,n),a,i)}function KR(e,t,n){return new H({bgcolor:L.fromRgba(t),color:L.fromRgba(Or(Ks(e,`primary`),t,4.5,n))})}function qR(e,t,n){let r=t.map(t=>({label:t.label,indices:e.flatMap((e,n)=>e.group===t.id?[n]:[])})).filter(e=>e.indices.length>0);if(r.reduce((e,t)=>e+t.indices.length,0)!==e.length){let n=new Set(t.map(e=>e.id)),r=e.flatMap((e,t)=>n.has(e.group)?[]:[`#${t} (group "${e.group}")`]);throw Error(`library: ${r.join(`, `)} name a group the domain does not list (${[...n].join(`, `)})`)}return n?r.flatMap(e=>JR(e.indices,8).map(t=>[{label:e.label,indices:t}])):[r]}function JR(e,t){return Array.from({length:Math.ceil(e.length/t)},(n,r)=>e.slice(r*t,(r+1)*t))}function YR(e,t){return new W(e).truncate(t,{marker:`…`}).plain}function XR(e){return{current:null,drawnAt:e}}function ZR(e,t,n,r,i,a,o){let s={segName:t,placementId:n,palette:r,disclosure:i,tint:a,text:o,bg:void 0,drops:[]};return e.current=s,s}function QR(e,t){let n=e.current;if(n===null)throw Error(`${t} is only available inside a segment's templates — there is no active segment here. Segment-scoped functions cannot be used in variable declarations or layout-node "when" predicates, which are evaluated outside any segment.`);return n}function $R(e){return new W(e).cellLength}function ez(e){return Math.max(1,e.width-e.chromeCols-2*e.padding)}function tz(e){return Math.max(1,ez(e)-($R(`✕`)+2*e.padding+e.seamCols))}function nz(e,t,n){if(!Number.isFinite(t))return e.length>0?[e.map((e,t)=>t)]:[];let r=Math.max(1,t-n),i=[],a=[],o=0;for(let t=0;t<e.length;t++){let n=e[t];a.length===0?(a=[t],o=n):o+1+n<=r?(a.push(t),o+=1+n):(i.push(a),a=[t],o=n)}return a.length>0&&i.push(a),i}function rz(e,t,n){let r=$R(`←`)+1+$R(`→`)+1,i=nz(e,t,n);return(i.length>1?nz(e,t,n+r):i).map(e=>[{label:``,indices:e}])}function iz(e,t){let n=[];for(let t of e)n.length>0&&n.push(new W(` `)),n.push(t);let r=W.fromFragments(n);return r.overflow=t?`ignore`:void 0,r.end=``,r}function az(e,t,n,r){let i=e.compiled.get(t);if(!i||i.kind!==n)throw Error(`picker references action "${t}" which must be ${r}, got ${i?`a ${i.kind} action`:`no such action`}`);return i}function oz(e,t,n){let r=e.compiled.get(t),i=r&&OR(r);if(!i||i.kind!==`set-option`&&i.kind!==`persist-option`&&i.kind!==`layout-op-option`)throw Error(`${n} references action "${t}" which must be a set-option, persist-option, or layout-op-option action ({ set, from }, { persist, from }, or { persist, insertSegmentFrom, anchor, relation }), got ${i?`a ${i.kind} action`:`no such action`}`);return i}function sz(e,t,n,r,i,a,o){let s=oz(i,e,`picker`),c=i.compiled.get(e),l=i.store,u=jR(l,`session.id`),d=`stateVar`in s?jR(l,s.stateVar):void 0,f=r?n.kind===`led`?tz(i):ez(i):1/0,p=n.kind===`led`?0:$R(`✕`)+1,m=s.library&&{groups:s.library.groups,entries:s.options.map(s.library.entry)},h=m===void 0?rz(s.options.map($R),f,p):qR(m.entries,m.groups,r),g=parseInt(jR(l,t.stateVar),10),_=Number.isInteger(g)?Math.max(0,Math.min(g,h.length-1)):0,v=h[_]??[],y=e=>hM([{verb:Hj,args:[u,t.key,String(e)]}]),b=n.kind===`led`?[]:[{verb:Hj,args:[u,...n.writes.flatMap(([e,t])=>[e,t])]}],x=n.kind===`own`&&n.onPick?b:[],S=e=>hM([...FR(c,e,e,l,u).effects,...x]),C=(e,t)=>{let n=s.options[e];return NR(t,S(n),n===d,a({index:e,count:s.options.length},n))},ee=n.kind===`led`?[]:[NR(`✕`,hM(b),!1,o)];_>0&&ee.push(NR(`←`,y(_-1),!1));let w=_<h.length-1?[NR(`→`,y(_+1),!1)]:[];if(m===void 0){let e=v.flatMap(e=>e.indices);return[iz([...ee,...e.map(e=>C(e,s.options[e])),...w],r)]}let te=new H({bold:!0}),ne=h.length>1?` ${_+1}/${h.length}`:``,re=v.length===1?[new W(`${v[0].label}${ne}`,{style:te})]:[],ie=[iz([...ee,...re,...w],r)];for(let e of v){v.length>1&&ie.push(iz([new W(e.label,{style:te})],r));let t=Math.max(...e.indices.map(e=>$R(s.options[e])));for(let n of e.indices){let e=s.options[n],i=m.entries[n].description,a=i===void 0?void 0:ON(i),o=` `.repeat(t-$R(e)+2),c=a===void 0?e:`${e}${o}${a}`;ie.push(iz([C(n,YR(c,f))],r))}}return ie}function cz(e,t){return{picker:{fn:(n,r,i,a,o,...s)=>{DS(`picker "${n}"`,[`closeOnPick`,`paged`,`inBody`],s);let c=az(e,r,`set-int`,`an int action ({ set, int: true })`);if(o===!0&&i===!0)throw Error(`{{ picker "${n}" … }} sets both closeOnPick and inBody; a picker in a body is closed by the body's ✕, so it has no close to fold into a pick`);let l=oz(e,n,`picker`);if(l.library!==void 0)throw Error(`{{ picker "${n}" … }} ranges a catalogue domain, which lays out as one row per member; a catalogue renders in a {{ menu }} body`);let u=QR(t,`{{ picker }}`);if(u.bg===void 0)throw Error(`{{ picker }} is not available while segments.${u.segName}'s own "bg:" is being evaluated — a picker is drawn on that background`);let[d]=sz(n,{key:c.key,stateVar:c.stateVar},o===!0?{kind:`led`}:{kind:`own`,writes:[[c.key,`-1`]],onPick:i===!0},a===!0,e,GR(u,Ps(void 0),TR(e,`{{ picker }}`),l.paletteOf,t.drawnAt(),u.bg),HR(u.palette,u.bg,t.drawnAt()));return d},argTypes:[`string`,`string`,`bool`],arity:{kind:`variadic`},returnType:`T`}}}function lz(e,t,n,r,i){let a=Math.min(Math.floor((t-1)/2),i),o=n,s=0;for(;s<a;){let t=o+$R(e(-(s+1)))+1+$R(e(s+1))+1;if(t>r)break;o=t,s+=1}return s}function uz(e,t,n,r,i,a){if(!(`stateVar`in t))throw Error(`carousel references action "${e}", which inserts a segment and holds no current value to centre on — a carousel needs a { set, from } or { persist, from } action`);let o=n.store;if(!o.has(t.stateVar))throw Error(`carousel references action "${e}", whose key "${t.stateVar}" no variable reads back, so there is no current value to centre on — declare { kind: "state", key: "${t.stateVar}" } among the variables`);let s=n.compiled.get(e),c=jR(o,`session.id`),{options:l}=t,u=l.length;if(u===0)return iz([],!0);let d=jR(o,t.stateVar),f=Math.max(l.indexOf(d),0),p=e=>((f+e)%u+u)%u,m=e=>l[p(e)],h=new Map,g=e=>{let t=h.get(e);if(t!==void 0)return t;let n=hM(FR(s,m(e),m(e),o,c).effects);return h.set(e,n),n},_=e=>NR(m(e),g(e),m(e)===d,r({index:p(e),count:u},m(e))),v=a===void 0?_(0):NR(m(0),hM(FR(n.compiled.get(a),m(0),void 0,o,c).effects),!1),y=lz(m,u,$R(`◀`)+1+v.cellLength+1+$R(`▶`),tz(n),i),b=e=>Array.from({length:y},(t,n)=>_(e*(n+1)));return iz([...b(-1).reverse(),NR(`◀`,g(-1),!1),v,NR(`▶`,g(1),!1),...b(1)],!0)}function dz(e,t){return{carousel:{fn:(n,...r)=>{let[i,a,...o]=r;if(DS(`carousel "${n}"`,[`neighbours`,`centre`],o),i!==void 0&&!(Number.isInteger(i)&&i>=0))throw Error(`carousel "${n}": neighbours must be a whole number ≥ 0 (0 shows only ◀ CURRENT ▶), got ${String(i)}`);if(a!==void 0&&!(typeof a==`string`&&e.compiled.has(a)))throw Error(`carousel "${n}": centre must name a declared action, got ${JSON.stringify(a)}`);if(a!==void 0&&kR(e.compiled.get(a)))throw Error(`carousel "${n}": centre "${a}" writes a value the template binds, and the centre binds none — name an action that writes a fixed value, a cycle, or a do of them`);let s=i??1/0,c=oz(e,n,`carousel`),l=QR(t,`{{ carousel }}`);if(l.bg===void 0)throw Error(`{{ carousel }} is not available while segments.${l.segName}'s own "bg:" is being evaluated — a carousel is drawn on that background`);return uz(n,c,e,GR(l,Ps(void 0),TR(e,`{{ carousel }}`),c.paletteOf,t.drawnAt(),l.bg),s,a)},argTypes:[`string`,`value`],arity:{kind:`variadic`},returnType:`T`}}}const fz=[`~/code`,`main`,`opus`,`42%`,`5m`,`$1.20`];function pz(e,t,n,r){let i=mc(e,n,r),a=(t,n)=>({text:t,colour:n,ink:nc(e,n,r)});return[ks(t).map((n,i)=>{let a=qs(e,n);return{text:fz[i%fz.length],colour:a,ink:t.shade.text(e,n.hue,a,r)}}),[a(`▾ open`,i.state),a(`menu`,i.plane)],[a(`warn`,Ks(e,`warning`)),a(`error`,Ks(e,`error`))]]}function mz(e,t,n,r,i){let a=pz(e,t,n,r).flatMap((e,t)=>e.map(({text:e,colour:n,ink:r},i)=>({gap:t>0&&i===0?` `:``,cell:new W(` ${e} `,{style:VR({tint:n,text:r})})}))),o=[],s=0;for(let{gap:e,cell:t}of a){if(s+=e.length+t.cellLength,s>i)break;e!==``&&o.push(new W(e)),o.push(t)}let c=W.fromFragments(o);return c.overflow=`ignore`,c.end=``,c}function hz(e,t){return{themePreview:{fn:()=>{let{palette:n,decor:r}=TR(e,`{{ themePreview }}`);return mz(n,r,{...QR(t,`{{ themePreview }}`).disclosure,depth:0},t.drawnAt(),tz(e))},argTypes:[],arity:{kind:`exact`},returnType:`T`}}}const gz=e=>e.slice(e.lastIndexOf(`.`)+1),_z=(e,t)=>{let n=new W(gz(e));return n.truncate(t,{marker:`…`}),n.plain};function vz(e,t){let n=e.map(e=>e.map(({name:e})=>$R(gz(e)))),r=e=>n.every(n=>n.reduce((t,n)=>t+Math.min(n,e)+2,0)<=t),i=Math.max(1,...n.flat());for(;i>1&&!r(i);)--i;return i}function yz(e,t,n,r){let i=vz(e,r),a=e.map(e=>{let a=[],o=0;for(let{name:s,address:c,palette:l}of e){let e=new W(` ${_z(s,i)} `,{style:VR(Ec(l,{kind:`bar`,decor:t,address:c},n))});if(o+=e.cellLength,o>r)break;a.push(e)}return a}),o=W.fromFragments(a.flatMap((e,t)=>t===0?e:[new W(`
199
- `),...e]));return o.overflow=`ignore`,o.end=``,o}function bz(e,t){return{layoutPreview:{fn:()=>yz(e.layout(),TR(e,`{{ layoutPreview }}`).decor,t.drawnAt(),tz(e)),argTypes:[],arity:{kind:`exact`},returnType:`T`}}}function xz(e,t,n,r){let i=QR(r.activeSegment,`{{ menu }}`),a=r.action,o=Cb(i.placementId,e,n.key),s=Eb(o),c=Sb(e),l=jR(a.store,o)===c,u=jR(a.store,`session.id`),d=l?Bd:c,f=NR(Ud(`{{ menu "${e}" }}`,t,2,+!!l),hM([{verb:Hj,args:[u,o,d,s,`0`]}]),!1);return i.drops.push(...l?(()=>{let t=r.activeSegment.drawnAt(),c=mc(i.palette,i.disclosure,t).plane;return sz(e,{key:s,stateVar:s},{kind:`own`,writes:[[o,Bd],[s,`0`]],onPick:n.closeOnPick},n.paged,a,GR(i,n.distribution,TR(a,`{{ menu }}`),oz(a,e,`menu`).paletteOf,t,c),HR(i.palette,c,t))})():[]),f}const Sz=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function Cz(e,t){let n=t[t.length-1],r=Sz(n)?n:void 0,i=r===void 0?t:t.slice(0,-1),a=i.findIndex(e=>typeof e!=`string`);if(a!==-1)throw Error(`{{ menu "${e}" }} display #${a+1} is not text (${JSON.stringify(i[a])}) — a menu binds its trigger text, then an optional trailing (dict …) of options`);return{displays:i,options:Ab(r??{})}}function wz(e){return{menu:{fn:(t,...n)=>{let{displays:r,options:i}=Cz(t,n);return xz(t,r,i,e)},argTypes:[`string`,`value`],arity:{kind:`variadic`},returnType:`T`}}}function Tz(e){let{value:t,max:n,width:r,filled:i,empty:a,colourAt:o}=e,s=Ez(t,n,r),c=[];for(let e=0;e<r;e++){let t=e<s,l=t&&o!==void 0?o(e*n/r):void 0;c.push(new W(t?i:a,{style:l===void 0?void 0:new H({color:l})}))}let l=W.fromFragments(c);return l.end=``,l.overflow=`ignore`,l}function Ez(e,t,n){return!Number.isFinite(e)||!Number.isFinite(t)||t<=0?0:Math.min(n,Math.max(0,Math.round(e/t*n)))}function Dz(e){let t={fn:(()=>{let t=QR(e,`{{ bgOf }}`);if(t.bg===void 0)throw Error(`{{ bgOf }} is not available while segments.${t.segName}'s own "bg:" is being evaluated — the background is what that template computes. Reach for a palette color there instead, e.g. bg: '{{ darken (color "surface") 1 }}'.`);return t.bg.hex}),argTypes:[],arity:{kind:`exact`},returnType:`string`},n={fn:(()=>QR(e,`{{ tint }}`).tint.hex),argTypes:[],arity:{kind:`exact`},returnType:`string`},r={fn:((t,n)=>{let{palette:r}=QR(e,`{{ keptOn }}`),i=yr(r,t),a=yr(r,n),o=P(Ar(i,F.TRUECOLOR),Ar(a,F.TRUECOLOR)),s=Math.min(tc,Math.max(o,3));return(kr(i,e.drawnAt(),(e,t)=>P(e,t(a))>=s)??i).hex}),argTypes:[`string`,`string`],arity:{kind:`exact`},returnType:`string`},i=pS(()=>QR(e,`{{ color }} / {{ ramp }} / {{ gauge }}`).palette),a={fn:((e,t,n,r,a,o,...s)=>{let c=o===void 0?void 0:[o,...Oz(s)];return Tz({value:e,max:t,width:n,filled:r,empty:a,colourAt:c===void 0?void 0:e=>String(i.ramp.fn(e,...c))})}),argTypes:[`float`,`float`,`int`,`string`,`string`,`string`],arity:{kind:`variadic`},returnType:`T`};return{...i,bgOf:t,tint:n,keptOn:r,gauge:a}}function Oz(e){return e.flatMap(e=>{let t=e.indexOf(`:`),n=t<0?NaN:Number(e.slice(0,t));if(!Number.isFinite(n))throw Error(`{{ gauge }} stop "${e}" must be "<position>:<colour>", e.g. "80:error" or "80:#ff0000"`);return[n,e.slice(t+1)]})}function kz(e){let t=[],n=[];for(let r of e){if(!r.contains(`
193
+ `,l.join(e,`lib`),t.sessionId,t.cwd],env:AF(t),timeoutMs:3e3,category:`memento.read`});return n.ok?MF(n.stdout):X(jF(n))}function PF(e,t,n){let r=O({bin:l.join(e,EF),args:n.kind===`set`?[`set`,`session`,n.to]:[`clear`,`session`],env:AF(t),timeoutMs:5e3,category:`memento.move`});if(!r.ok)throw Error(jF(r))}function FF(){return{locate:e=>kF(IT(e.claudeConfigDir),e.projectDir),read:NF,move:PF}}function IF(e,t,n){let r=n===void 0?``:`CLAUDE_CONFIG_DIR=${CM(n)} `,i=e.added_dirs.map(e=>` --add-dir ${CM(e)}`).join(``);return`cd ${CM(e.project_dir)} && ${r}claude --resume ${CM(t)}${i}`}function LF(e,t,n){let r=Pb(t(`preset`),e.globals.preset,e.presets),i=Lb(e,r),a=t(`edit.mode`)===`arrange`?e.editGlobals:{},o=vw(a.palette,t(`theme`),i.palette),s=lF(i,cF(o,e.themeDefaults));return{preset:r,presetCustomized:n(r),theme:o,style:Uc(a.style,t(`style`),s.style,e.styles),effect:Yc(a.effect,t(`effect`),s.effect),endcaps:el(a.endcaps,t(`endcaps`),s.endcaps),variation:cl(a.variation,t(`variation`),s.variation),shade:dl(a.shade,t(`shade`),s.shade),separator:a.default_separator??s.default_separator,autoWrap:yl(a.autoWrap,t(`autoWrap`),s.autoWrap),padding:Sl(a.padding,t(`padding`),s.padding),charset:a.charset??s.charset??`unicode`,updateNotice:bl(a.updateNotice,t(`updateNotice`),s.updateNotice),transitions:xl(a.transitions,t(`transitions`),s.transitions),colorCompatibility:a.colorCompatibility??s.colorCompatibility??`truecolor`}}function RF(e,t){return{endcaps:e.endcaps,separator:e.separator,colorCompatibility:e.colorCompatibility,wrap:e.autoWrap,padding:e.padding,charset:e.charset,width:t}}function zF(e){return{theme:e.theme,style:e.style,effect:e.effect,preset:e.preset,variation:e.variation,shade:e.shade,transitions:e.transitions}}function BF(e){return{preset:{effective:e.preset,customized:e.presetCustomized,bundled:oF(e.preset)},endcaps:{effective:e.endcaps},variation:{effective:e.variation},shade:{effective:e.shade},charset:{effective:e.charset},colorCompatibility:{effective:e.colorCompatibility},autoWrap:{effective:e.autoWrap},padding:{effective:e.padding},updateNotice:{effective:e.updateNotice},transitions:{effective:e.transitions}}}const VF=10*1e3;function HF(e,t,n,r){let i=n-(t*1e3-r);if(i<3e5||e<=0)return;let a=e/i,o=(100-e)/a;return Math.max(0,Math.round(o/6e4))}function UF(e,t){if(!(t<60))return e*3600/t}function WF(e,t,n,r){let i=r-t;if(i<50||i>VF)return;let a=n-e;if(!(a<=0))return a*1e3/i}function GF(e){let{prev:t,cur:n}=e;if(t===void 0)return;let r=WF(t.input,t.atMs,n.input,n.atMs),i=WF(t.output,t.atMs,n.output,n.atMs),a=WF(t.total,t.atMs,n.total,n.atMs);if(!(r===void 0&&i===void 0&&a===void 0))return{...r!==void 0&&{input:r},...i!==void 0&&{output:i},...a!==void 0&&{total:a}}}function KF(e){let{samples:t}=e,n=[];for(let e=1;e<t.length;e++){let r=t[e-1],i=t[e],a=i.atMs-r.atMs;if(a<50||a>VF)continue;let o=WF(r.total,r.atMs,i.total,i.atMs);n.push(o??0)}if(n.length!==0)return n.join(`,`)}function qF(e){let t=e.indexOf(`.`);return t<0?e:e.slice(0,t)}function JF(e){let t=[],n=(e,n)=>{try{let e=n();return e===``?void 0:e}catch(n){t.push(`host.${e}: ${String(n)}`);return}},r=n(`name`,()=>qF(h.hostname())),i=n(`user`,()=>h.userInfo().username);return{host:{...r!==void 0&&{name:r},...i!==void 0&&{user:i},...e.ssh!==void 0&&{ssh:e.ssh}},failures:t}}function YF(e,t){let n=new Map;for(let[t,r]of Object.entries(e.variables))n.set(t,r);for(let[t,r]of Object.entries(e.segments))if(r.vars)for(let[e,i]of Object.entries(r.vars))n.set(`${t}.${e}`,i);let r=[],i=new Set,a=t=>Cx(t,e.helpers).keys(),o=Lb(e,t);for(let e of Ic){let t=o[e];if(Lc(t))for(let e of a(t))r.push(e)}for(let n of wu(Ib(e,t).node)){if(n.when)for(let e of a(n.when))r.push(e);if(n.kind!==`segment`)continue;let t=e.segments[n.name];if(t){for(let e of[t.template,t.when,t.bg,t.fg])if(e)for(let t of a(e))r.push(t)}}let s=new Set;for(;r.length>0;){let e=r.pop();for(let t of ZF(n,e)){if(i.has(t))continue;i.add(t);let e=n.get(t);if(e){if(e.kind===`input`)s.add(e.path);else if(e.kind===`template`)for(let t of a(e.template))r.push(t)}}}return s}function XF(e){let t=new Map;return n=>{let r=t.get(n);if(r!==void 0)return r;let i=YF(e,n);return t.set(n,i),i}}function ZF(e,t){let n=t;for(;n.length>0;){if(e.has(n))return[n];let t=n.lastIndexOf(`.`);if(t<0)break;n=n.slice(0,t)}let r=`${t}.`,i=[];for(let t of e.keys())t.startsWith(r)&&i.push(t);return i}function QF(e,t){for(let n of e)if(n===t||n.startsWith(t+`.`))return!0;return!1}function $F(e){let t=t=>e.has(t),n=t(`git.staged`)||t(`git.unstaged`)||t(`git.untracked`)||t(`git.conflicts`);return{...t(`git.sha`)&&{showSha:!0},...n&&{showWorkingTree:!0},...t(`git.stash`)&&{showStashCount:!0},...t(`git.upstream`)&&{showUpstream:!0},...t(`git.repoName`)&&{showRepoName:!0},...t(`git.repoUrl`)&&{showRepoUrl:!0},...t(`git.operation`)&&{showOperation:!0},...t(`git.timeSinceCommit`)&&{showTimeSinceCommit:!0},...(t(`git.prNumber`)||t(`git.prState`)||t(`git.prUrl`)||t(`git.prError`))&&{showPullRequest:!0}}}async function eI(e,t,n,r,i,a,o,{configPath:s,...c}){let l=e=>QF(i,e),u=OC(t).getTime(),d=o.tmux??null,f=(e,t,n)=>t?n().catch(t=>X(`${e}: ${String(t)}`)):Promise.resolve(Y),[p,m,h,g,_,v,y,b,x,S,C]=await Promise.all([f(`git`,l(`git`),()=>n.gitProvider.getGitInfo(r??e.workspace?.current_dir,$F(i),e.workspace?.project_dir)),f(`session`,l(`session.cost`)||l(`session.tokens`)||l(`burn`),()=>n.usageStore.getUsageInfo(e.session_id,e)),f(`today`,l(`today`),()=>n.usageStore.getTodayInfo(e,o.claudeConfigDir,t)),f(`context`,l(`context`)||l(`autocompact`),()=>n.contextProvider.getContextInfo(e)),f(`metrics`,l(`metrics`)||l(`burn`),()=>n.metricsProvider.getMetricsInfo(e.session_id,e)),f(`activity`,l(`activity`),()=>n.activityProvider.getActivityInfo(e.session_id,e)),f(`tmux`,l(`tmux.session`),()=>d===null?Promise.resolve(Y):n.tmuxService.getSessionName(d)),f(`cache`,l(`cache`),()=>xF(e.transcript_path)),f(`speed`,l(`speed`),()=>n.usageStore.observeSpeed(e.session_id,e.transcript_path,u)),f(`memento`,l(`memento`),()=>n.mementoProvider.getCeiling(wF({sessionId:e.session_id,projectDir:e.workspace?.project_dir??``,cwd:r??e.workspace?.current_dir??``},o))),f(`autocompact`,l(`autocompact`),()=>Promise.resolve(n.autoCompact(FT(PT(o.claudeConfigDir)))))]),ee=[],w=e=>{if(e.kind===`failed`){ee.push(e.reason);return}return e.kind===`ok`?e.value:void 0},te=cI(p,u);ee.push(...te.failures);let ne=JF(o);ee.push(...ne.failures);let re=w(m),ie=w(h),T=w(g),E=w(_),ae=w(v),oe=w(y),se=w(b),ce=rI(S);S.kind===`failed`&&ee.push(`memento: ${S.reason}`);let le=tI(C,T?.maxTokens);C.kind===`failed`&&ee.push(`autocompact: ${C.reason}`);for(let e of ee)n.log(`warn`,`provider fetch failed: ${e}`);let ue=e.rate_limits?.five_hour,de=e.rate_limits?.seven_day,fe=ue?HF(ue.used_percentage,ue.resets_at,18e6,u):void 0,pe=de?HF(de.used_percentage,de.resets_at,6048e5,u):void 0,me=re?.session.cost,he=E?.sessionDuration,ge=l(`burn`)&&me!=null&&he!=null?UF(me,he):void 0,_e=w(x),ve=_e===void 0?void 0:GF(_e),ye=_e===void 0?void 0:KF(_e),be=ve!==void 0||ye!==void 0?{...ve,...ye!==void 0&&{history:ye}}:void 0,D=sI(process.env.HOME??process.env.USERPROFILE),xe=e.workspace?{...e.workspace,current_dir:sI(e.workspace.current_dir)??``,project_dir:sI(e.workspace.project_dir)??``,added_dirs:(e.workspace.added_dirs??[]).map(e=>sI(e)??e)}:e.workspace,Se=re===void 0?void 0:oI({cost:re.session.cost,tokens:re.session.tokens}),Ce=ie===void 0?void 0:{cost:ie.cost,tokens:ie.tokens},we=E===void 0?void 0:oI({lastResponseTime:E.lastResponseTime,responseTime:E.responseTime,sessionDuration:E.sessionDuration,messageCount:E.messageCount,nonPrompts:E.nonPrompts,linesAdded:E.linesAdded,linesRemoved:E.linesRemoved}),Te=ae===void 0?void 0:iI(ae);return{...e,...xe!==void 0&&{workspace:xe},...D!==void 0&&{home:D},...te.git!==void 0&&{git:te.git},...d!==null&&{tmux:{pane:d.pane,...oe!==void 0&&{session:oe}}},host:ne.host,...BF(a),history:n.history(e.session_id),navigation:{back:n.navigation(e.session_id)},...c,...s!==null&&{configPath:s},resumeCommand:IF(xe,e.session_id,o.claudeConfigDir),...Se!==void 0&&{session:Se},...Ce!==void 0&&{today:Ce},...ge!==void 0&&{burn:{costPerHour:ge}},...be!==void 0&&{speed:be},...l(`block`)&&ue!==void 0&&{block:{nativeUtilization:ue.used_percentage,resetsAt:ue.resets_at,...fe!==void 0&&{etaMinutes:fe}}},...de!==void 0&&{weekly:{percentage:de.used_percentage,resetsAt:de.resets_at,...pe!==void 0&&{etaMinutes:pe}}},...se!==void 0&&{cache:{expiresAt:se}},...T!==void 0&&{context:{totalTokens:T.totalTokens,contextLeft:T.contextLeftPercentage}},...we!==void 0&&{metrics:we},...Te!==void 0&&{activity:Te},...ce!==void 0&&{memento:ce},...le!==void 0&&{autocompact:le}}}function tI(e,t){switch(e.kind){case`absent`:return;case`failed`:return{error:e.reason};case`ok`:return GT(e.value,t)}}const nI=e=>e.trim().split(`
194
+ `).at(-1).trim();function rI(e){switch(e.kind){case`absent`:return;case`failed`:return{error:nI(e.reason)};case`ok`:{let{ceiling:t,session:n}=e.value;return{ceiling:t===`off`?0:t,off:t===`off`,session:n??``}}}}function iI(e){let t=e.todos.findIndex(e=>e.active),n=e.todos.length===0?void 0:{total:e.todos.length,completed:e.todos.filter(e=>e.done).length,...t>=0&&{position:t+1,active:e.todos[t].text}},r=aI(e.running),i=aI(e.done),a=r===void 0&&i===void 0?void 0:{...r!==void 0&&{running:r},...i!==void 0&&{done:i}};if(!(e.command===null&&n===void 0&&a===void 0))return{...e.command!==null&&{command:e.command},...n!==void 0&&{todo:n},...a!==void 0&&{tool:a}}}function aI(e){return e.length===0?void 0:e.map(e=>`${e.name}:${e.count}`).join(`,`)}function oI(e){let t={},n=!1;for(let r of Object.keys(e)){let i=e[r];i!=null&&(t[r]=i,n=!0)}return n?t:void 0}function sI(e){return e===void 0||e.length===0||l.sep!==`\\`?e:e.replace(/\\/g,`/`)}function cI(e,t){if(e.kind===`absent`)return{failures:[]};if(e.kind===`failed`)return{failures:[e.reason]};let n=e.value,r=[],i=(e,t)=>{if(!(t===void 0||t.kind===`absent`)){if(t.kind===`failed`){r.push(`git.${e}: ${t.reason}`);return}return t.value}},a=i(`aheadBehind`,n.aheadBehind),o=i(`sha`,n.sha),s=i(`operation`,n.operation),c=i(`timeSinceCommit`,n.committedAt),l=c===void 0?void 0:Math.floor((t-c)/1e3),u=i(`stash`,n.stashCount),d=i(`upstream`,n.upstream),f=i(`repoName`,n.repoName),p=i(`repoUrl`,n.repoUrl),m=n.pullRequest,h={};return m?.kind===`ok`?(h.prNumber=m.value.number,h.prState=m.value.state,h.prUrl=m.value.url):m?.kind===`failed`&&(r.push(`git.pr: ${m.reason}`),h.prError=m.reason),{git:{branch:n.branch,status:n.status,...a!==void 0&&{ahead:a.ahead,behind:a.behind},...n.workingTree!==void 0&&{staged:n.workingTree.staged,unstaged:n.workingTree.unstaged,untracked:n.workingTree.untracked,conflicts:n.workingTree.conflicts},...o!==void 0&&{sha:o},...s!==void 0&&{operation:s},...l!==void 0&&{timeSinceCommit:l},...u!==void 0&&{stash:u},...d!==void 0&&{upstream:d},...f!==void 0&&{repoName:f},...p!==void 0&&{repoUrl:p},...h},failures:r}}const lI={theme:e=>e.theme.kind===`decided`?e.theme.name:null,preset:e=>e.preset,style:e=>e.style.kind===`decided`?e.style.name:null,effect:e=>e.effect.kind===`decided`?e.effect.name:null,endcaps:e=>e.endcaps,variation:e=>e.variation,shade:e=>e.shade,transitions:e=>e.transitions?fl:pl,autoWrap:e=>e.autoWrap?fl:pl,padding:e=>String(e.padding),updateNotice:e=>e.updateNotice?fl:pl},uI=Object.entries(ew),dI=new Set(tw.map(e=>e.sessionKey)),fI=()=>!1;function pI(e,t){return LF(e,e=>dI.has(e)?t(e):null,fI)}const mI=[`preset`,`theme`];function hI(e,t,n){let r=new Set(mI.slice(0,n).map(e=>ew[e].sessionKey));return LF(e,e=>r.has(e)?t(e):null,fI)}function gI(e,t){let n=Array.from({length:mI.length+1},(n,r)=>hI(e,t,r));return e=>{let t=mI.indexOf(e);return n[t===-1?mI.length:t]}}function _I(e,t,n,r){return e.flatMap(([e,i])=>{let a=lI[e](t);return a===null||a===lI[e](n(e))?[]:[{...i,value:a,target:r(i)}]})}function vI(e,t,n){return lI[n](pI(e,t))}function yI(e,t){let n=pI(e,t);return _I(uI,n,gI(e,t),t=>bI(e,n.preset,t.configKey))}function bI(e,t,n){return n in(Fb(e.presets,t).globals??{})?Vw(t,n):n}function xI(e,t,n){let r=Pb(t(ew.preset.sessionKey),e.globals.preset,e.presets),i=Hw(n);return{key:i?.scope===`globals`?bI(e,r,i.field):n,globals:Lb(e,r)}}function SI(e,t){let{preset:n}=pI(e,t);return TI(e,n).flatMap(({id:e,setting:r,key:i,decl:a,saved:o})=>{let s=t(i),c=s===null?void 0:Hu(a,s);return c===void 0||Vu(c)===Vu(o)?[]:[{preset:n,id:e,setting:r,key:i,value:c}]})}function CI(e,t,n){let r=new Map(n.map(e=>[e.key,e.value]));return Nb(e.presets).flatMap(n=>{let i=TI(e,n);return[...new Set(i.filter(e=>r.has(e.key)).map(e=>e.id))].flatMap(e=>{let n=i.filter(t=>t.id===e);return zu(Object.fromEntries(n.map(e=>[e.setting,e.decl])),Object.fromEntries(n.map(e=>{let n=r.get(e.key)??t(e.key),i=n===null?void 0:Hu(e.decl,n);return[e.setting,i??e.saved]}))).map(({message:t})=>`placement "${e}": ${t}`)})})}const wI=new WeakMap;function TI(e,t){let n=wI.get(e)??new Map;wI.set(e,n);let r=n.get(t);if(r!==void 0)return r;let i=[...wu(Ib(e,t).node)].flatMap(t=>t.kind!==`segment`||t.drafts===void 0?[]:Object.entries(t.drafts).map(([n,{id:r,key:i}])=>{let a=Lu(e.segments[t.name])[n];return{id:r,setting:n,key:i,decl:a,saved:t.settings?.[n]??a.default}})),a=[...new Map(i.map(e=>[e.key,e])).values()];return n.set(t,a),a}function EI(e,t){let n=pI(e,t);return{from:n.preset,globals:Fb(e.presets,n.preset).globals??{},picks:_I(uI.filter(([e])=>e!==`preset`),n,gI(e,t),e=>e.configKey),placements:SI(e,t)}}function DI(e,t){return LF({...e,globals:{palette:t},presets:{}},()=>null,fI)}function OI(e,t){let n=pI(e,t),r=lI.theme(n);if(r===null)return{kind:`rule`};let i=DI(e,r),a=Lb(e,n.preset),o=Object.fromEntries(ku.map(e=>[e,lI[e](a[e]===void 0?n:i)]));return{kind:`look`,theme:r,look:o,differs:ku.some(e=>o[e]!==lI[e](i))}}function kI(e){return{sessionKeys:tw.filter(t=>t.configKey===e).map(e=>e.sessionKey),fileKeys:[e,...xf(e)?aF.map(t=>Vw(t,e)):[],...Bw(e)?jc().map(t=>zw(t,e)):[]]}}function AI(e){return new Set(tw.map(e=>e.configKey).filter(t=>kI(t).fileKeys.some(t=>NI(e,MI(t)))))}function jI(e,t,n){let r=yI(e,n),i=new Set(r.map(e=>e.configKey)),a=ow(e=>i.has(ew[e].configKey)||t.has(ew[e].configKey)),o=OI(e,n);return{unsaved:r.length+SI(e,n).length,resettable:a,themeDefault:o.kind===`look`&&o.differs?{differs:!0,theme:o.theme}:{differs:!1}}}function MI(e){let t=Hw(e);if(t===null||t.scope===`preset-root`)throw Error(`reset layer "${e}" is not a value path`);return Uw(t)}function NI(e,t){let[n,...r]=t;return n===void 0?e!==void 0:typeof e==`object`&&!!e&&NI(e[n],r)}const PI=jc(),FI=new Set(PI),II=new Set(Xc),LI=e=>e?FI.has(e)?{ok:!0,value:e}:{ok:!1,reason:`unknown theme "${e}" (have: ${PI.join(`, `)})`}:{ok:!1,reason:`theme name is required`},RI=e=>e?II.has(e)?{ok:!0,value:e}:{ok:!1,reason:`unknown endcaps "${e}" (have: ${Xc.join(`, `)})`}:{ok:!1,reason:`endcaps name is required`},zI=new Set([`1`,`true`]),BI=new Set([`0`,`false`]),VI={endcaps:RI,theme:LI,"toolbar-expanded":e=>zI.has(e)?{ok:!0,value:`1`}:BI.has(e)?{ok:!0,value:``}:{ok:!1,reason:`expected boolean-ish (1, 0, true, false), got "${e}"`}},HI=RP(VI,`state`,YI);function UI(e,t){return HI.register(e,t)}function WI(e){return HI.gateFor(e)}function GI(e,t){return`set`in e?`to`in e?[{key:e.set,spec:{kind:`allow-list`,allowed:[e.to]}}]:`from`in e?[{key:e.set,spec:{kind:`allow-list`,allowed:Tw(e.from,t).members}}]:`int`in e?[{key:e.set,spec:{kind:`int`}}]:`cycle`in e?[{key:e.set,spec:{kind:`allow-list`,allowed:e.cycle}}]:[{key:e.set,spec:{kind:`range`,min:e.min,max:e.max}}]:[]}function KI(e){return e.filter(e=>e.spec.kind!==`allow-list`||!Object.hasOwn(VI,e.key))}function qI(e,t,n){let r=sw.get(n);if(r!==void 0)return vI(e,t,r);let i=Object.values(e.variables).find(e=>e.kind===`state`&&e.key===n);return i?.kind===`state`?i.default??null:null}function JI(e){let t=FD(e);return KI(Object.values(e.actions).flatMap(e=>GI(e,t)))}function YI(e){return IP(JI(e))}const XI=`update.dismissed`,ZI=`updateNotice`,QI=ew.updateNotice.sessionKey;function $I(e){return e.kind===`source`?e.newer.digest:EM(e.newer)}const eL=e=>`${e.version} [${xP(e.digest)}]`;function tL(e){switch(e.kind){case`source`:return{headline:`Newer source`,newer:eL(e.newer),running:eL(e.running),act:`rebuild`,busy:`rebuilding…`,command:{bin:`pnpm`,args:[`build`],cwd:e.root}};case`release`:return{headline:`Newer release`,newer:EM(e.newer),running:EM(e.running),act:`upgrade`,busy:`upgrading…`,command:{bin:`pnpm`,args:[`dlx`,`${OM}@${EM(e.newer)}`,`install`]}}}}const nL={kind:`idle`},rL={kind:`running`};function iL(e,t,n){if(e===null)return[];let r=$I(e);if(!n.enabled||n.dismissed===r)return[];let i=tL(e),a=`${i.headline}: ${i.newer}. You're on ${i.running}.`,o=t.kind===`failed`&&t.identity===r?[`${i.act} failed: ${t.reason}`]:[],s=[a,...o].join(`
195
+ `),c=hM([{verb:Jj,args:[s]}]),l=t.kind===`running`?lP(`[${i.busy}]`,c):lP(`[${i.act}]`,hM([{verb:sM,args:[n.sessionId]}]));return[{severity:cP,message:s,lines:[[lP(a,c),l,lP(`[dismiss]`,hM([{verb:Hj,args:[n.sessionId,XI,r]}])),lP(`[disable]`,hM([{verb:Yj,args:[n.sessionId,ZI,`false`]},{verb:Hj,args:[n.sessionId,QI,`false`]}]))],...o.map(e=>[lP(e,c)])]}]}function aL(e,t){return e.kind===`stale`?{kind:`source`,root:e.root,newer:e.source,running:e.running}:e.kind===`not-source-checkout`&&t!==null&&t.kind===`stale`?{kind:`release`,newer:t.latest,running:t.installed}:null}function oL(e){switch(e.kind){case`current`:return[`info`,`build: current ${eL(e.stamp)}`];case`stale`:return[`info`,`build: stale — source ${eL(e.source)}, running ${eL(e.running)}`];case`not-source-checkout`:return[`info`,`build: not a source checkout`];case`unchecked`:return[`warn`,`build: unchecked: ${e.reason}`]}}function sL(e){switch(e.kind){case`current`:return[`info`,`release: current ${EM(e.installed)}`];case`stale`:return[`info`,`release: stale — latest ${EM(e.latest)}, running ${EM(e.installed)}`];case`ahead`:return[`info`,`release: ahead — running ${EM(e.installed)}, latest ${EM(e.latest)}`];case`unchecked`:return[`warn`,`release: unchecked: ${e.reason}`]}}function cL(e){let t=null;return([n,r])=>{r!==t&&(t=r,e(n,r))}}const lL=e=>e.split(/\r?\n/).map(e=>e.trim()).filter(e=>e!==``).at(-1);function uL(e){let t=e.exitCode===null?``:` (exit ${e.exitCode})`,n=lL(e.stderr)??e.error??lL(e.stdout)??`no output`;return`${e.reason}${t}: ${n}`}function dL(){let e=[BP(ZI,[`false`]),UI(QI,[`false`]),UI(XI,[])];return()=>e.forEach(e=>e())}function fL(e){let{entryUrl:t,intervalMs:n,releaseIntervalMs:r,registryUrl:i,fetchImpl:a,onApplied:o,log:s}=e,c={kind:`unchecked`,reason:`not sampled yet`},l=null,u=nL,d=null,f=cL(s),p=cL(s),m=()=>aL(c,l);function h(){let e=m(),t=e===null?null:$I(e);(d===null?null:d.identity)!==t&&(d?.dispose(),d=t===null?null:{identity:t,dispose:UI(XI,[t])})}function g(){c=TP(t,CP),f(oL(c)),h()}async function _(){l=AM(QA,await kM(OM,a,i)),p(sL(l)),h()}return{arm(){dL(),g(),setInterval(g,n).unref(),c.kind===`not-source-checkout`&&(_(),setInterval(()=>void _(),r).unref())},notice:e=>iL(m(),u,e),act(){let e=m();if(e===null)throw new $(`apply-update: nothing newer is known to apply`);let t=tL(e);if(u.kind===`running`)throw new $(`apply-update: already ${t.busy}`);u=rL,s(`info`,`apply-update: ${t.act} — ${t.command.bin} ${t.command.args?.join(` `)??``}`),je({...t.command,category:`update.apply`,timeoutMs:6e5}).then(n=>{if(n.ok){u=nL,s(`info`,`apply-update: ${t.act} succeeded`),g(),o();return}let r=uL(n);u={kind:`failed`,identity:$I(e),reason:r},s(`error`,`apply-update: ${t.act} failed: ${r}`)})}}}var pL=class{static CACHE_DIR=Le();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(!r.existsSync(t))return!1;try{let n=r.readFileSync(t,`utf-8`),i=parseInt(n.trim(),10);if(isNaN(i))return D(`Invalid PID in lock file ${e}, removing stale lock`),r.unlinkSync(t),!1;try{return process.kill(i,0),!0}catch(n){return n.code===`ESRCH`?(D(`Removing stale lock file ${e} for dead process ${i}`),r.unlinkSync(t),!1):(D(`Error checking process ${i} for lock ${e}:`,n),!0)}}catch(t){return D(`Error reading lock file ${e}:`,t),!0}}static async acquireLock(e,t=5e3){await this.ensureCacheDirectories();let n=l.join(this.LOCKS_DIR,e),i=Date.now(),a=String(process.pid);for(;Date.now()-i<t;)try{return await r.promises.writeFile(n,a,{flag:`wx`}),D(`Lock acquired for ${e}`),!0}catch(e){if(e.code===`EEXIST`)await ue(50);else throw e}return D(`Failed to acquire lock for ${e} within ${t}ms`),!1}static async releaseLock(e){let t=l.join(this.LOCKS_DIR,e);try{await r.promises.unlink(t),D(`Lock released for ${e}`)}catch(t){t.code!==`ENOENT`&&D(`Error releasing lock for ${e}:`,t)}}static async ensureCacheDirectories(){try{await Promise.all([r.promises.mkdir(this.CACHE_DIR,{recursive:!0}),r.promises.mkdir(this.USAGE_CACHE_DIR,{recursive:!0}),r.promises.mkdir(this.LOCKS_DIR,{recursive:!0})])}catch(e){D(`Failed to create cache directories:`,e)}}static createProjectHash(e){return se(`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`),i=`${e}.usage.lock`;for(let a=0;a<3;a++){if(this.isLocked(i)){D(`Cache for ${e} is locked, waiting...`),await ue(75);continue}try{let i=await r.promises.readFile(n,`utf-8`),a=JSON.parse(i);return!t||a.timestamp>=t?(D(`[CACHE-HIT] ${e} disk cache: found`),this.deserializeDates(a.data)):(D(`${e} cache outdated: cache=${a.timestamp}, latest=${t}`),null)}catch(t){if(t.code===`ENOENT`)return D(`No shared ${e} usage cache found`),null;D(`Attempt ${a+1} failed to read ${e} cache: ${t.message}. Retrying...`),await ue(75)}}return D(`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 i=`${e}.usage.lock`;if(!await this.acquireLock(i)){D(`Could not acquire lock to set usage cache for ${e}`);return}try{await this.ensureCacheDirectories();let i=l.join(this.USAGE_CACHE_DIR,`${e}.json`),a=JSON.stringify({data:t,timestamp:n||Date.now()});await r.promises.writeFile(i,a,`utf-8`),D(`[CACHE-SET] ${e} disk cache stored`)}catch(t){D(`Failed to save ${e} usage cache:`,t)}finally{await this.releaseLock(i)}}};const mL={"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 hL=class{static executionCache=null;static modelPricingCache=new Map;static GITHUB_PRICING_URL=`https://raw.githubusercontent.com/promptctl/cc-candybar/main/pricing.json`;static async loadDiskCache(){let e=Date.now()-1440*60*1e3;return await pL.getUsageCache(`pricing`,e)}static async saveDiskCache(e){await pL.setUsageCache(`pricing`,e)}static async fetchPricingData(){return new Promise(e=>{let t=new ie(this.GITHUB_PRICING_URL),n=le({hostname:t.hostname,path:t.pathname,headers:{"User-Agent":`cc-candybar`,"Cache-Control":`no-cache`},timeout:5e3},t=>{if(t.statusCode!==200){D(`HTTP ${t.statusCode}: ${t.statusMessage}`),e(null);return}let r=``,i=0;t.on(`data`,t=>{if(i+=t.length,i>1048576){D(`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)?(D(`Fetched fresh pricing from GitHub for ${Object.keys(i).length} models`),D(`Pricing last updated: ${n?.updated||`unknown`}`),e(i)):(D(`Invalid pricing data structure`),e(null))}catch(t){D(`Failed to parse JSON:`,t),e(null)}}),t.on(`error`,t=>{D(`Response error:`,t),e(null)})});n.on(`error`,t=>{D(`Request error:`,t),e(null)}),n.on(`timeout`,()=>{D(`Request timeout`),n.destroy(),e(null)}),n.end()})}static async getCurrentPricing(){if(this.executionCache!==null)return D(`[CACHE-HIT] Pricing execution cache: ${Object.keys(this.executionCache).length} models`),this.executionCache;let e=await this.loadDiskCache();if(e)return D(`[CACHE-HIT] Pricing disk cache: ${Object.keys(e).length} models`),this.executionCache=e,D(`[CACHE-SET] Pricing execution cache stored: ${Object.keys(e).length} models`),e;let t=await this.fetchPricingData();return t?(await this.saveDiskCache(t),D(`[CACHE-SET] Pricing disk cache stored: ${Object.keys(t).length} models`),this.executionCache=t,D(`[CACHE-SET] Pricing execution cache stored: ${Object.keys(t).length} models`),t):(D(`[CACHE-FALLBACK] Using offline pricing data: ${Object.keys(mL).length} models`),this.executionCache=mL,D(`[CACHE-SET] Pricing execution cache stored: ${Object.keys(mL).length} models`),mL)}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 D(`[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),D(`[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`}};const gL=/<command-name>\s*([^<\s][^<]*?)\s*<\/command-name>/;function _L(e){if(typeof e==`string`)return gL.exec(e)?.[1]}function vL(e){let t=e?.todos;if(!Array.isArray(t))return;let n=[];for(let e of t){if(typeof e!=`object`||!e)continue;let{content:t,activeForm:r,status:i}=e,a=i===`in_progress`,o=a&&typeof r==`string`?r:t;typeof o==`string`&&n.push({text:o,active:a,done:i===`completed`})}return n}function yL(e){return typeof e==`string`?e:Array.isArray(e)?e.find(e=>typeof e==`object`&&!!e&&e.type===`text`&&typeof e.text==`string`)?.text??``:``}function bL(e,t){let n=e.message?.content,r=[],i=[],a;if(Array.isArray(n))for(let e of n){if(typeof e!=`object`||!e)continue;let t=e;switch(t.type){case`tool_use`:{let{id:e,name:n}=t;if(typeof e!=`string`||typeof n!=`string`)break;r.push({id:e,name:n}),n===`TodoWrite`&&(a=vL(t.input)??a);break}case`tool_result`:{let e=t.tool_use_id;typeof e==`string`&&i.push(e);break}default:break}}let o=t===`prompt`?_L(yL(n)):void 0;if(!(r.length===0&&i.length===0&&a===void 0&&o===void 0))return{...r.length>0&&{started:r},...i.length>0&&{finished:i},...a!==void 0&&{todos:a},...o!==void 0&&{command:o}}}function xL(e){if(e!==void 0)return[e];let t=g();return[p(t,`.config`,`claude`),p(t,`.claude`)].filter(e=>a(e))}async function SL(e){let t=[];for(let n of e){let e=p(n,`projects`);if(a(e))try{let n=await mF(e,{withFileTypes:!0});for(let r of n)if(r.isDirectory()){let n=p(e,r.name);t.push(n)}}catch(t){D(`Failed to read projects directory ${e}:`,t)}}return t}async function CL(e,t,n){let r=[],i=p(t,e,`subagents`);try{let t=(await mF(i)).filter(e=>e.startsWith(`agent-`)&&e.endsWith(`.jsonl`));for(let a of t){let t=p(i,a);if(n?.has(t)){r.push(t);continue}try{let n=(await hF(t,`utf-8`)).split(`
196
+ `)[0];n&&JSON.parse(n).sessionId===e&&r.push(t)}catch{D(`Failed to check agent file ${t}`)}}}catch(e){D(`Failed to read subagents directory ${i}:`,e)}return r}function wL(e){let t=e.message;if((e.type||t?.role||t?.type)!==`user`)return;if(EL(t)===`tool_result`)return`tool-result`;let n=typeof e.origin==`object`&&e.origin!==null?e.origin.kind:void 0;if(n!==void 0&&n!==`human`)return`turn`;let r=yL(t?.content).trimStart();return r.startsWith(`[Request interrupted by user`)?`interrupt`:e.isMeta===!0||e.isCompactSummary===!0||TL.test(r)?`claude-code`:`prompt`}const TL=/^<(?:command-name|local-command-std(?:out|err)|bash-(?:input|stdout|stderr))>/;function EL(e){let t=e?.content;return Array.isArray(t)&&typeof t[0]==`object`&&t[0]?t[0].type:void 0}const DL=new Map;async function OL(e){try{let t=await gF(e),n=t.size,r=DL.get(e);if(r&&r.mtime===t.mtimeMs&&r.size===n)return D(`[parse-cache] hit ${e}`),DL.delete(e),DL.set(e,r),r.entries;let i;return n>1048576?(D(`Using streaming parser for large file ${e} (${Math.round(n/1024)}KB)`),i=await NL(e)):i=await jL(e),D(`Parsed ${i.length} entries from ${e}`),n>5242880?i:(DL.delete(e),DL.size>=16&&DL.delete(DL.keys().next().value),DL.set(e,{mtime:t.mtimeMs,size:n,entries:i}),i)}catch(t){if(t.code===`ENOENT`)return D(`Transcript not present yet: ${e}`),[];throw t}}function kL(e){if(!e.timestamp)return null;let t=e.message,n=t?.usage,r=wL(e);return{timestamp:new Date(e.timestamp),type:typeof e.type==`string`?e.type:void 0,message:t?{id:typeof t.id==`string`?t.id:void 0,model:typeof t.model==`string`?t.model:void 0,usage:n,role:typeof t.role==`string`?t.role:void 0,type:typeof t.type==`string`?t.type:void 0}:void 0,costUSD:typeof e.costUSD==`number`?e.costUSD:void 0,isSidechain:e.isSidechain===!0,userEntry:r,activity:bL(e,r),raw:{model:typeof e.model==`string`?e.model:void 0,message:t?{id:typeof t.id==`string`?t.id:void 0,model:typeof t.model==`string`?t.model:void 0,usage:n}:void 0,requestId:typeof e.requestId==`string`?e.requestId:void 0}}}function AL(e){let t=[];for(let n of e.split(`
197
+ `))if(n.trim())try{let e=kL(JSON.parse(n));e&&t.push(e)}catch(e){D(`Failed to parse JSONL line: ${e}`);continue}return t}async function jL(e){return AL(await hF(e,`utf-8`))}async function ML(e,t){let n=await _F(e,t===void 0?void 0:{offset:t.offset,ino:t.ino});if(n.kind!==`ok`)return n;let{buf:r,start:i,stamp:a,ino:o,reset:s}=n.value,c=r.lastIndexOf(10);return J(c<0?{entries:[],cursor:{offset:i,stamp:a,ino:o},reset:s}:{entries:AL(r.subarray(0,c+1).toString(`utf-8`)),cursor:{offset:i+c+1,stamp:a,ino:o},reset:s})}async function NL(e){return new Promise((t,n)=>{let r=[],a=i(e,{encoding:`utf8`}),o=de({input:a,crlfDelay:1/0});o.on(`line`,e=>{let t=e.trim();if(t)try{let e=kL(JSON.parse(t));e&&r.push(e)}catch(e){D(`Failed to parse JSONL line: ${e}`)}}),o.on(`close`,()=>{t(r)}),o.on(`error`,t=>{D(`Streaming parser error for ${e}:`,t),n(t)}),a.on(`error`,t=>{D(`File stream error for ${e}:`,t),n(t)})})}var PL=class{inflight=new Map;run(e,t){return this.inflight.get(e)??this.start(e,t)}start(e,t){let n=t();this.inflight.set(e,n);let r=()=>{this.inflight.get(e)===n&&this.inflight.delete(e)};return n.then(r,r),n}get size(){return this.inflight.size}};function FL(e,t){let n=e?e.input+e.cacheCreation+e.cacheRead:0,r=e?e.output:0;return{input:n,output:r,total:n+r,atMs:t}}const IL=new Map,LL={cost:0,input:0,output:0,cacheCreation:0,cacheRead:0},RL={cost:null,calculatedCost:null,officialCost:null,tokens:null,tokenBreakdown:null};function zL(e){return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`}function BL(){let e=new Date;return e.setHours(0,0,0,0),e.setDate(e.getDate()-1),e.getTime()}function VL(){return{input:0,output:0,cacheCreation:0,cacheRead:0}}async function HL(e,t,n,r){let i=zL(new Date(BL())),a=e&&!t?e:void 0,o=a?.entries??0,s=a?.cost??0,c=a?{...a.breakdown}:VL(),l=new Map;if(a)for(let[e,t]of a.days)e>=i&&l.set(e,{...t});for(let e of n){let t=e.message?.usage;if(!t)continue;o++;let n=e.costUSD??await hL.calculateCostForEntry(e.raw);s+=n,c.input+=t.input_tokens||0,c.output+=t.output_tokens||0,c.cacheCreation+=t.cache_creation_input_tokens||0,c.cacheRead+=t.cache_read_input_tokens||0;let r=zL(new Date(e.timestamp));if(r<i)continue;let a=l.get(r)??{...LL};a.cost+=n,a.input+=t.input_tokens||0,a.output+=t.output_tokens||0,a.cacheCreation+=t.cache_creation_input_tokens||0,a.cacheRead+=t.cache_read_input_tokens||0,l.set(r,a)}return{cursor:r,entries:o,cost:s,breakdown:c,days:l}}function UL(e){let t=0,n=0,r=VL(),i=new Map;for(let a of e.values()){t+=a.entries,n+=a.cost,r.input+=a.breakdown.input,r.output+=a.breakdown.output,r.cacheCreation+=a.breakdown.cacheCreation,r.cacheRead+=a.breakdown.cacheRead;for(let[e,t]of a.days){let n=i.get(e)??{...LL};n.cost+=t.cost,n.input+=t.input,n.output+=t.output,n.cacheCreation+=t.cacheCreation,n.cacheRead+=t.cacheRead,i.set(e,n)}}if(t===0)return{sessionInfo:RL,days:i};let a=r.input+r.output+r.cacheCreation+r.cacheRead;return{sessionInfo:{cost:n,calculatedCost:n,officialCost:null,tokens:a,tokenBreakdown:r},days:i}}async function WL(e,t,n){let r=0,i=async()=>{for(;r<e.length;){let t=e[r++];await n(t)}},a=Math.min(t,e.length);await Promise.all(Array.from({length:a},i))}var GL=class{sessions=new Map;flight=new PL;seeded=new Map;seededDay=``;rescanIntervalMs;speedFlight=new PL;staleAgeMs;log;renderTally={hits:0,misses:0};sweeps=0;scans={seed:0,rescan:0};sweepTimer=null;constructor(e={}){this.log=e.logger??pC,this.staleAgeMs=e.staleAgeMs??864e5,this.rescanIntervalMs=e.rescanIntervalMs??6e4;let t=e.sweepIntervalMs??3e5;t>0&&(this.sweepTimer=setInterval(()=>this.sweepStale(),t),this.sweepTimer.unref())}getStats(){return{size:this.sessions.size,hits:this.renderTally.hits,misses:this.renderTally.misses,sweeps:this.sweeps,seeds:this.scans.seed,rescans:this.scans.rescan}}async getUsageInfo(e,t){let n=await this.ingest(e,t?.transcript_path,this.renderTally);if(n.kind===`failed`)return n;let r=n.kind===`ok`?n.value.sessionInfo:RL,i=t?.cost?.total_cost_usd??null;return J({session:{...r,cost:i??r.cost,officialCost:i}})}async getTodayInfo(e,t,n){let r=zL(OC(n)),i=xL(t);try{await this.ensureSeeded(r,i,n*1e3)}catch(e){return X(`usage seed: ${e instanceof Error?e.message:String(e)}`)}let a=await this.ingest(e?.session_id??``,e?.transcript_path,this.renderTally);if(a.kind===`failed`)return a;let o=i.map(e=>p(e,`projects`)+m),s={...LL},c=!1;for(let[t,{record:n}]of this.sessions){let i=n?.transcriptPath??``,a=t===e?.session_id||o.some(e=>i.startsWith(e))?n?.days??IL:IL;c||=a.has(r);let l=a.get(r)??LL;s.cost+=l.cost,s.input+=l.input,s.output+=l.output,s.cacheCreation+=l.cacheCreation,s.cacheRead+=l.cacheRead}return c?J({cost:s.cost,tokens:s.input+s.output+s.cacheCreation+s.cacheRead,tokenBreakdown:{input:s.input,output:s.output,cacheCreation:s.cacheCreation,cacheRead:s.cacheRead},date:r}):Y}async observeSpeed(e,t,n){if(!e)return Y;let r=uF(t);return this.speedFlight.run(`${e}:${r}`,async()=>{let i=await this.ingest(e,t,this.renderTally,r);if(i.kind===`failed`)return i;let a=FL(i.kind===`ok`?i.value.sessionInfo.tokenBreakdown:null,n),{ring:o}=this.hold(e),s;for(let e of o)e.atMs<a.atMs&&(s===void 0||e.atMs>s.atMs)&&(s=e);return o.push(a),o.sort((e,t)=>e.atMs-t.atMs),o.length>64&&o.shift(),J({...s!==void 0&&{prev:s},cur:a,samples:[...o]})})}async ingest(e,t,n,r){if(!e)return Y;let i=r??uF(t),a=this.see(e)?.record;if(a&&i!==``&&a.transcriptStamp===i)return n.hits++,J(a);if(!t)return a?J(a):Y;n.misses++;let o;try{o=await this.flight.run(`${e}:${i}`,async()=>{let n=this.sessions.get(e)?.record;return{prior:n,outcome:await this.refold(e,t,n)}})}catch(t){return X(`usage refold (${e}): ${t instanceof Error?t.message:String(t)}`)}let{prior:s,outcome:c}=o;if(c.kind!==`ok`)return c;let l={files:c.value.files,sessionInfo:c.value.sessionInfo,days:c.value.days,transcriptStamp:c.value.mainStamp,transcriptPath:t};return this.sessions.get(e)?.record===s&&(this.hold(e).record=l),J(l)}see(e){let t=this.sessions.get(e);return t&&(t.lastSeenAt=Date.now()),t}hold(e){let t=this.see(e);if(t)return t;let n={lastSeenAt:Date.now(),record:void 0,ring:[]};return this.sessions.set(e,n),n}async refold(e,t,n){let r=await CL(e,d(t),n===void 0?void 0:new Set(n.files.keys())),i=new Map,a=``;for(let e of[t,...r]){let r=n?.files.get(e),o=await ML(e,r?.cursor);if(o.kind===`failed`)return o;if(o.kind===`absent`){r&&i.set(e,r);continue}let{entries:s,cursor:c,reset:l}=o.value;i.set(e,await HL(r,l,s,c)),e===t&&(a=c.stamp)}return J({files:i,...UL(i),mainStamp:a})}ensureSeeded(e,t,n){this.seededDay!==e&&(this.seeded.clear(),this.seededDay=e);let r=t.join(`\0`),i=this.seeded.get(r);if(!i){let e=this.seed(t,`seed`),i={done:e,scanning:e,startedAtMs:n};return this.seeded.set(r,i),this.settle(r,i,e),e}return i.scanning===void 0&&n-i.startedAtMs>=this.rescanIntervalMs&&(i.startedAtMs=n,i.scanning=this.seed(t,`rescan`),this.settle(r,i,i.scanning)),i.done}settle(e,t,n){n.then(()=>{t.scanning=void 0},n=>{this.log(`warn`,`usageStore scan: ${n instanceof Error?n.message:String(n)}`),this.seeded.get(e)===t&&this.seeded.delete(e)})}async scanned(){await Promise.allSettled([...this.seeded.values()].map(e=>e.scanning))}async seed(e,t){let n=Date.now(),r=BL(),i=await SL(e),a=[];for(let e of i){let t;try{t=await mF(e)}catch{continue}for(let n of t){if(!n.endsWith(`.jsonl`))continue;let t=p(e,n),i;try{i=await gF(t)}catch{continue}i.mtimeMs<r||a.push({sessionId:n.slice(0,-6),path:t,stamp:dF(i)})}}let o={hits:0,misses:0};await WL(a,8,async e=>{let n=await this.ingest(e.sessionId,e.path,o,e.stamp);n.kind===`failed`&&this.log(`warn`,`usageStore ${t}: ${n.reason}`)}),this.log(`info`,`usageStore ${t} sessions=${a.length} read=${o.misses} dirs=${e.join(`,`)} ms=${Date.now()-n}`),this.scans[t]++}sweepStale(){let e=Date.now(),t=0,n=0,r=0;for(let[i,{lastSeenAt:a,record:o}]of this.sessions)if(!(e-a<=this.staleAgeMs)){if(o?.days.has(this.seededDay)){n++;continue}this.sessions.delete(i),t++,o===void 0&&r++}return t>0&&this.sweeps++,(t>0||n>0)&&this.log(`info`,`usageStore sweep dropped=${t} noRecord=${r} held=${n}`),t}close(){this.sweepTimer&&=(clearInterval(this.sweepTimer),null),this.sessions.clear(),this.seeded.clear()}},KL=class{thresholds={LOW:50,MEDIUM:80};getContextUsageThresholds(){return this.thresholds}ratioPercentages(e,t){let n=Math.min(100,Math.max(0,Math.round(e/t*100)));return{percentage:n,contextLeftPercentage:Math.max(0,100-n)}}calculateContextFromHookData(e){let t=e.context_window;if(!t?.current_usage)return D(`No current_usage in hook data, falling back to transcript parsing`),null;let n=t.current_usage,r=t.context_window_size,i=(n.input_tokens||0)+(n.cache_creation_input_tokens||0)+(n.cache_read_input_tokens||0);D(`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=this.ratioPercentages(i,r);return{totalTokens:i,maxTokens:r,percentage:t.used_percentage==null?a.percentage:Math.round(t.used_percentage),contextLeftPercentage:t.remaining_percentage==null?a.contextLeftPercentage:Math.round(t.remaining_percentage)}}async calculateContextTokensFromTranscript(e,t){try{D(`Calculating context tokens from transcript: ${e}`);let n=await OL(e);if(n.length===0)return D(`No entries in transcript`),Y;let r=null;for(let e=n.length-1;e>=0;e--){let t=n[e];if(t&&t.message?.usage?.input_tokens&&t.isSidechain!==!0){r=t,D(`Context segment: Found most recent entry at ${t.timestamp.toISOString()}, stopping search`);break}}if(r?.message?.usage){let e=r.message.usage,n=(e.input_tokens||0)+(e.cache_read_input_tokens||0)+(e.cache_creation_input_tokens||0);return D(`Most recent main chain context: ${n} tokens (limit: ${t})`),J({totalTokens:n,maxTokens:t,...this.ratioPercentages(n,t)})}return D(`No main chain entries with usage data found`),Y}catch(e){return X(`context transcript: ${e instanceof Error?e.message:String(e)}`)}}async getContextInfo(e){let t=this.calculateContextFromHookData(e);if(t)return J(t);let n=e.context_window?.context_window_size??2e5;return this.calculateContextTokensFromTranscript(e.transcript_path,n)}},qL=class{states=new Map;constructor(e,t,n=256){this.empty=e,this.step=t,this.maxSessions=n}async read(e,t){let n=this.states.get(e),r=uF(t);if(n&&r!==``&&n.cursor.stamp===r)return this.touch(e,n),{kind:`ok`,value:n.value};let i=await ML(t,n?.cursor);if(i.kind===`failed`)return i;if(i.kind===`absent`)return{kind:`ok`,value:n?.value??this.empty};let{entries:a,cursor:o,reset:s}=i.value,c=s||n===void 0?this.empty:n.value;for(let e of a)c=this.step(c,e);for(this.touch(e,{cursor:o,value:c});this.states.size>this.maxSessions;){let e=this.states.keys().next().value;if(e===void 0)break;this.states.delete(e)}return{kind:`ok`,value:c}}touch(e,t){this.states.delete(e),this.states.set(e,t)}};const JL={messageCount:0,nonPrompts:0,recent:[]},YL=new Set([`turn`,`interrupt`,`claude-code`]);function XL(e,t){if(t.isSidechain)return e;let n=[...e.recent,t];return{messageCount:e.messageCount+ +(t.userEntry===`prompt`),nonPrompts:e.nonPrompts+ +!!YL.has(t.userEntry),recent:n.length>20?n.slice(-20):n}}function ZL(e){let t=null,n=null;for(let r of e){let e=r.type||r.message?.role||r.message?.type;if(r.userEntry===`prompt`||r.userEntry===`turn`)t=r.timestamp;else if(e===`assistant`&&t){let e=(r.timestamp.getTime()-t.getTime())/1e3;e>.1&&e<300&&(n=e)}}return n}var QL=class{fold=new qL(JL,XL);async getMetricsInfo(e,t){if(D(`Getting metrics from hook data for session: ${e}`),!t.cost)return Y;let n=await this.fold.read(e,t.transcript_path);return n.kind===`failed`?X(`metrics (${e}): ${n.reason}`):J({responseTime:t.cost.total_api_duration_ms/1e3,lastResponseTime:ZL(n.value.recent),sessionDuration:t.cost.total_duration_ms/1e3,messageCount:n.value.messageCount,nonPrompts:n.value.nonPrompts,linesAdded:t.cost.total_lines_added,linesRemoved:t.cost.total_lines_removed})}};const $L={command:null,todos:[],pending:[],done:[]};function eR(e,t){let n=e.findIndex(e=>e.name===t);return n<0?[...e,{name:t,count:1}]:e.map((e,t)=>t===n?{name:e.name,count:e.count+1}:e)}function tR(e,t){switch(t.userEntry){case`prompt`:return{...e,command:t.activity?.command??null,pending:[],done:[]};case`interrupt`:return{...e,pending:[]};case`turn`:case`tool-result`:case`claude-code`:case void 0:return e}}function nR(e,t){if(t.isSidechain)return e;let n=tR(e,t),r=t.activity;if(r===void 0)return n;let i=n.pending,a=n.done;r.started!==void 0&&(i=[...i,...r.started]);for(let e of r.finished??[]){let t=i.findIndex(t=>t.id===e);t<0||(a=eR(a,i[t].name),i=[...i.slice(0,t),...i.slice(t+1)])}return{...n,pending:i,done:a,todos:r.todos??n.todos}}function rR(e){return{command:e.command,todos:e.todos,running:e.pending.reduce((e,t)=>eR(e,t.name),[]),done:e.done}}var iR=class{fold=new qL($L,nR);async getActivityInfo(e,t){let n=await this.fold.read(e,t.transcript_path);return n.kind===`failed`?X(`activity (${e}): ${n.reason}`):J(rR(n.value))}};function aR(e,t,n,r){return{bin:`tmux`,args:[`-S`,e.socket,...n],timeoutMs:2e3,category:t,stdinInput:r}}function oR(e,t){if(e.ok)return{kind:`ok`,stdout:e.stdout};if(e.reason===`rate-limited`)return{kind:`rate-limited`,reason:e.error??`rate-limited`};let n=e.error??[e.reason,e.stderr.trim()].filter(e=>e!==``).join(`: `);return{kind:`failed`,reason:`tmux ${t[0]} failed (${n})`}}function sR(e,t,n,r){return oR(O(aR(e,t,n,r)),n)}async function cR(e,t,n){return oR(await je(aR(e,t,n)),n)}const lR=e=>`${e.socket}\n${e.pane}`;var uR=class{names=new Map;asking=new PL;constructor(e=Date.now){this.now=e}getSessionName(e){let t=lR(e),n=this.names.get(t);if(n&&this.now()-n.at<3e4)return Promise.resolve(n.outcome);let r=this.asking.run(t,()=>this.ask(t,e));return n?Promise.resolve(n.outcome):r}async ask(e,t){D(`Getting tmux session name for pane ${t.pane} on ${t.socket}`);let n=await cR(t,`tmux`,[`display-message`,`-p`,`-t`,t.pane,`#S`]),r=n.kind===`ok`?n.stdout.trim():``,i=n.kind===`ok`?r?J(r):Y:X(n.reason);for(this.names.delete(e),this.names.set(e,{outcome:i,at:this.now()});this.names.size>64;)this.names.delete(this.names.keys().next().value);return i}};const dR=e=>JSON.stringify([e.sessionId,e.projectDir,e.cwd,e.claudeConfigDir,e.env===void 0?null:$e.map(t=>e.env?.[t]??null)]);var fR=class{readings=new Map;inFlight=new Map;constructor(e,t=Date.now){this.edge=e,this.now=t}getCeiling(e){let t=dR(e),n=this.readings.get(t);if(n&&this.now()-n.at<1e4)return Promise.resolve(n.outcome);let r=this.inFlight.get(t)??this.fetch(t,e);return n?Promise.resolve(n.outcome):r}fetch(e,t){let n=this.edge.locate(t),r=(n.kind===`ok`?this.edge.read(n.value,t):Promise.resolve(n)).then(t=>{if(this.inFlight.get(e)!==r)return t;for(this.readings.delete(e),this.readings.set(e,{outcome:t,at:this.now()});this.readings.size>64;)this.readings.delete(this.readings.keys().next().value);return t}).finally(()=>{this.inFlight.get(e)===r&&this.inFlight.delete(e)});return this.inFlight.set(e,r),r}move(e,t){let n=this.edge.locate(e);if(n.kind!==`ok`)throw Error(n.kind===`failed`?n.reason:`memento is not installed or not enabled for this project`);let r=dR(e);try{this.edge.move(n.value,e,t)}finally{this.readings.delete(r),this.inFlight.delete(r),this.fetch(r,e)}}};function pR(e){return{gitProvider:new SC({watchers:e.watchers,logger:e.logger}),usageStore:new GL({logger:e.logger}),contextProvider:new KL,metricsProvider:new QL,activityProvider:new iR,tmuxService:new uR,mementoProvider:new fR(FF()),autoCompact:WT,log:e.logger}}function mR(e,t){return e===void 0?!0:e.evaluate(t).map(e=>e.plain).join(``)!==`false`}function hR(e,t){let n=W.fromFragments(e);return n.end=``,n.overflow=`ignore`,t!==void 0&&!t.isNull&&(n.style=t),n}function gR(e,t,n){e.cellLength>t?e.truncate(t,{mode:n.truncate,marker:`…`}):e.cellLength<t&&e.align(n.justify,t)}function _R({lead:e,text:t,trail:n}){return[...e===void 0?[]:[e],t,...n===void 0?[]:[n]]}function vR({text:e,placement:t,lead:n,trail:r}){return{text:yR(e),placement:t,...n!==void 0&&{lead:yR(n)},...r!==void 0&&{trail:yR(r)}}}function yR(e){let t=e.blankCopy(e.plain);t.style=IN(e.style).clearMetaAndLinks();for(let{start:n,end:r,style:i}of e.spans)t.stylize(IN(i).clearMetaAndLinks(),n,r);return t}function bR(e){let t=_R(e);if(t.length===1)return e.text;let n=hR(t);return n.style=e.text.style,n}function xR(e,t){let{width:n,justify:r,truncate:i,baseStyle:a,padding:o,placement:s,lead:c=[],trail:l=[]}=t;if(e.length===0)return[];let u=hR(e,a).pad(o),d=new W(` `.repeat(o)),f={placement:s,...c.length>0&&{lead:hR([d,...c],a)},...l.length>0&&{trail:hR([...l,d],a)}};if(n===`auto`)return[{text:u,...f}];let p={justify:r,truncate:i};return n===`fill`?[{text:u,fill:p,...f}]:(gR(u,n,p),[{text:u,...f}])}function SR(e,t){let n=()=>e.map(e=>({owner:bR(e),placement:e.placement})),r=[];if(e.forEach(({fill:e},t)=>{e!==void 0&&r.push({at:t,how:e})}),r.length===0||!Number.isFinite(t.width))return n();let i=iP(e.map(bR),t).split(`
198
+ `);if(i.length>1)return n();let a=Math.max(0,t.width-JN(i[0]??``)),o=Math.floor(a/r.length),s=a-o*r.length;return r.forEach(({at:t,how:n},i)=>{let a=o+(i===r.length-1?s:0),{text:c}=e[t];gR(c,c.cellLength+a,n)}),n()}function CR(e,t){let n=[],r=[],i=()=>{if(!r.length)return;let e=wR(r,t);e.plain.length>0&&n.push(e),r=[]};for(let a of e){let e={frag:a,style:IN(a.style)};if(e.style.link){i();let r=wR([e],t);r.plain.length>0&&n.push(r)}else r.push(e)}return i(),n}function wR(e,t){let n=t!==void 0&&!t.isNull?t:void 0,r=e.map(e=>TR(e.frag,n?n.add(e.style):e.style)),i=W.fromFragments(r);return i.end=``,i.overflow=`ignore`,r.length===1?i.style=r[0].style:n!==void 0&&(i.style=n),i}function TR(e,t){let n=e.copy();return n.style=t,n}function ER(e,t){if(e.look===void 0)throw Error(`${t} read the render's look before any render resolved one`);return e.look}function DR(e,t,n,r){let i=new Map,a=Object.entries(t);for(let[t,o]of[...a.filter(([,e])=>!(`do`in e)),...a.filter(([,e])=>`do`in e)])i.set(t,OR(e,t,o,n,r,i));return i}function OR(e,t,n,r,i,a){if(`set`in n){let e=r.get(n.set)??n.set;if(`to`in n)return{kind:`set-literal`,key:n.set,value:n.to,stateVar:e};if(`from`in n){let t=Tw(n.from,i);return{kind:`set-option`,key:n.set,stateVar:e,options:[...t.members],paletteOf:t.paletteOf,library:t.library}}return`int`in n?{kind:`set-int`,key:n.set,stateVar:e}:`cycle`in n?{kind:`set-cycle`,key:n.set,stateVar:e,members:n.cycle}:{kind:`set-bounded`,key:n.set,by:n.by}}if(`persist`in n){let e=iw.get(n.persist)??n.persist;if(`to`in n)return{kind:`persist-literal`,key:n.persist,value:n.to,stateVar:e};if(`from`in n){let t=Tw(n.from,i);return{kind:`persist-option`,key:n.persist,stateVar:e,options:[...t.members],paletteOf:t.paletteOf,library:t.library}}if(`cycle`in n)return{kind:`persist-cycle`,key:n.persist,stateVar:e,members:n.cycle};if(`removeSegment`in n)return{kind:`layout-op`,key:n.persist,op:{op:`remove`,target:n.removeSegment}};if(`insertSegment`in n)return{kind:`layout-op`,key:n.persist,op:{op:`insert`,segment:n.insertSegment,anchor:n.anchor,relation:n.relation}};if(`insertSegmentFrom`in n){let e=Tw(n.insertSegmentFrom,i);return{kind:`layout-op-option`,key:n.persist,anchor:n.anchor,relation:n.relation,options:[...e.members],paletteOf:e.paletteOf,library:e.library}}return{kind:`persist-bounded`,key:n.persist,by:n.by}}if(`copy`in n)return{kind:`copy`,text:jR(e,n.copy,t)};if(`open`in n)return{kind:`open`,target:jR(e,n.open,t)};if(`reset`in n)return{kind:`reset`,key:n.reset};if(`doctor`in n)return n.doctor===`run`?{kind:`doctor-run`}:{kind:`doctor-fix`,check:n.check};if(`ceiling`in n)return{kind:`ceiling`,args:tO(n)};if(`slash`in n)return{kind:`slash`,line:n.slash};if(`undo`in n)return{kind:`undo`};if(`redo`in n)return{kind:`redo`};if(`back`in n)return{kind:`back`};if(`rewind`in n)return{kind:`rewind`};if(`save`in n)return{kind:`save`};if(`preset`in n)return n.preset===`save`?{kind:`preset-save`}:{kind:`preset-delete`,name:jR(e,n.name,t)};if(`themeDefault`in n)return{kind:`theme-default-save`};let[o,...s]=n.do.map(e=>{let n=a.get(e);if(n===void 0)throw Error(`action "${t}" fires "${e}", which is not declared in this config`);return n});return{kind:`do`,head:o,rest:s}}function kR(e){return e.kind===`do`?kR(e.head):e}function AR(e){switch(kR(e).kind){case`set-option`:case`set-int`:case`persist-option`:case`layout-op-option`:return!0;case`set-literal`:case`set-bounded`:case`set-cycle`:case`copy`:case`open`:case`persist-literal`:case`persist-bounded`:case`persist-cycle`:case`reset`:case`layout-op`:case`undo`:case`redo`:case`back`:case`rewind`:case`save`:case`preset-save`:case`preset-delete`:case`theme-default-save`:case`doctor-run`:case`doctor-fix`:case`ceiling`:case`slash`:case`do`:return!1}}function jR(e,t,n){try{return e(t)}catch(e){throw Error(`Template parse error in actions.${n}: ${e.message}`,{cause:e})}}function MR(e,t){return e.has(t)?Bx(e.read(t)):``}function NR(e,t){return e.evaluate(t).map(e=>e.plain).join(``)}function PR(e,t,n,r){let i=new W(e,{style:H.combine([r,new H({link:t,bold:n})])});return i.overflow=`ignore`,i.end=``,i}function FR(e,t){return Math.max(e.members.indexOf(MR(t,e.stateVar)),0)}function IR(e,t,n,r,i){switch(e.kind){case`set-literal`:{let t=MR(r,e.stateVar);return{effects:[{verb:Hj,args:[i,e.key,e.value]}],active:t===e.value}}case`set-option`:{let a=n??t,o=MR(r,e.stateVar);return{effects:[{verb:Hj,args:[i,e.key,a]}],active:o===a}}case`set-int`:{let a=n??t,o=MR(r,e.stateVar);return{effects:[{verb:Hj,args:[i,e.key,a]}],active:o===a}}case`set-cycle`:{let t=e.members[(FR(e,r)+1)%e.members.length];return{effects:[{verb:Hj,args:[i,e.key,t]}],active:!1}}case`set-bounded`:return{effects:[{verb:Uj,args:[i,e.key,String(e.by)]}],active:!1};case`copy`:return{effects:[{verb:Wj,args:[NR(e.text,NS(r))]}],active:!1};case`open`:return{effects:[{verb:Gj,args:[NR(e.target,NS(r))]}],active:!1};case`persist-literal`:{let t=MR(r,e.stateVar);return{effects:[{verb:Yj,args:[i,e.key,e.value]}],active:t===e.value}}case`persist-option`:{let a=n??t,o=MR(r,e.stateVar);return{effects:[{verb:Yj,args:[i,e.key,a]}],active:o===a}}case`persist-cycle`:{let t=e.members[(FR(e,r)+1)%e.members.length];return{effects:[{verb:Yj,args:[i,e.key,t]}],active:!1}}case`persist-bounded`:return{effects:[{verb:Xj,args:[i,e.key,String(e.by)]}],active:!1};case`reset`:return{effects:[{verb:tM,args:[i,e.key]}],active:!1};case`undo`:return{effects:[{verb:rM,args:[i]}],active:!1};case`redo`:return{effects:[{verb:iM,args:[i]}],active:!1};case`back`:return{effects:[{verb:aM,args:[i]}],active:!1};case`rewind`:return{effects:[{verb:oM,args:[i]}],active:!1};case`save`:return{effects:[{verb:Zj,args:[i]}],active:!1};case`preset-save`:return{effects:[{verb:Qj,args:[i]}],active:!1};case`theme-default-save`:return{effects:[{verb:$j,args:[i]}],active:!1};case`preset-delete`:return{effects:[{verb:eM,args:[i,NR(e.name,NS(r))]}],active:!1};case`doctor-run`:return{effects:[{verb:cM,args:[i]}],active:!1};case`doctor-fix`:return{effects:[{verb:lM,args:[i,e.check]}],active:!1};case`ceiling`:return{effects:[{verb:dM,args:[i,...e.args]}],active:!1};case`slash`:return{effects:[{verb:fM,args:[i,e.line]}],active:!1};case`layout-op`:return{effects:[{verb:nM,args:[i,e.key,EP(e.op)]}],active:!1};case`do`:{let a=IR(e.head,t,n,r,i);return{effects:[...a.effects,...e.rest.flatMap(e=>IR(e,t,void 0,r,i).effects)],active:a.active}}case`layout-op-option`:{let r={op:`insert`,segment:n??t,anchor:e.anchor,relation:e.relation};return{effects:[{verb:nM,args:[i,e.key,EP(r)]}],active:!1}}}}function LR(e,t,n,r){if(n.length===0)throw Error(`action "${e}" needs a display (the clickable text)`);if(t.kind===`set-cycle`||t.kind===`persist-cycle`)return{display:Ud(`action "${e}"`,n,t.members.length,FR(t,r)),boundValue:void 0};if(n.length>2)throw Error(`action "${e}" takes a display and an optional bound value, got ${n.length} arguments (per-state displays are a cycle action's form)`);return{display:n[0],boundValue:n[1]}}function RR(e,t,n){let r=n.compiled.get(e);if(!r)throw Error(`action "${e}" is not declared in this config`);let i=n.store,{display:a,boundValue:o}=LR(e,kR(r),t,i),{effects:s,active:c}=IR(r,a,o,i,MR(i,`session.id`));return PR(a,hM(s),c)}function zR(e){return{action:{fn:(t,...n)=>RR(t,n,e),argTypes:[`string`,`string`],arity:{kind:`variadic`},returnType:`T`}}}function BR(e,t){return PR(`✕`,hM([{verb:Hj,args:[MR(e,`session.id`),t,Bd]}]),!1)}function VR(e,t,n){return new H({bgcolor:L.fromRgba(t),color:L.fromRgba(nc(e,t,n))})}function HR({tint:e,text:t}){return new H({bgcolor:L.fromRgba(e),color:L.fromRgba(t)})}function UR(e,t,n){return new H({color:L.fromRgba(Or(Ks(e,`warning`),t,tc,n))})}function WR(e,t,n){return H.combine([VR(e,t,n),UR(e,t,n)])}function GR(e,t,n){return VR(e.palette,Sc(e.palette,e.disclosure,[t],n),n)}function KR(e,t,n,r,i,a){return r===void 0?n=>GR(e,{...n,distribution:t},i):(e,t)=>qR(r(t,n),a,i)}function qR(e,t,n){return new H({bgcolor:L.fromRgba(t),color:L.fromRgba(Or(Ks(e,`primary`),t,4.5,n))})}function JR(e,t,n){let r=t.map(t=>({label:t.label,indices:e.flatMap((e,n)=>e.group===t.id?[n]:[])})).filter(e=>e.indices.length>0);if(r.reduce((e,t)=>e+t.indices.length,0)!==e.length){let n=new Set(t.map(e=>e.id)),r=e.flatMap((e,t)=>n.has(e.group)?[]:[`#${t} (group "${e.group}")`]);throw Error(`library: ${r.join(`, `)} name a group the domain does not list (${[...n].join(`, `)})`)}return n?r.flatMap(e=>YR(e.indices,8).map(t=>[{label:e.label,indices:t}])):[r]}function YR(e,t){return Array.from({length:Math.ceil(e.length/t)},(n,r)=>e.slice(r*t,(r+1)*t))}function XR(e,t){return new W(e).truncate(t,{marker:`…`}).plain}function ZR(e){return{current:null,drawnAt:e}}function QR(e,t,n,r,i,a,o){let s={segName:t,placementId:n,palette:r,disclosure:i,tint:a,text:o,bg:void 0,drops:[]};return e.current=s,s}function $R(e,t){let n=e.current;if(n===null)throw Error(`${t} is only available inside a segment's templates — there is no active segment here. Segment-scoped functions cannot be used in variable declarations or layout-node "when" predicates, which are evaluated outside any segment.`);return n}function ez(e){return new W(e).cellLength}function tz(e){return Math.max(1,e.width-e.chromeCols-2*e.padding)}function nz(e){return Math.max(1,tz(e)-(ez(`✕`)+2*e.padding+e.seamCols))}function rz(e,t,n){if(!Number.isFinite(t))return e.length>0?[e.map((e,t)=>t)]:[];let r=Math.max(1,t-n),i=[],a=[],o=0;for(let t=0;t<e.length;t++){let n=e[t];a.length===0?(a=[t],o=n):o+1+n<=r?(a.push(t),o+=1+n):(i.push(a),a=[t],o=n)}return a.length>0&&i.push(a),i}function iz(e,t,n){let r=ez(`←`)+1+ez(`→`)+1,i=rz(e,t,n);return(i.length>1?rz(e,t,n+r):i).map(e=>[{label:``,indices:e}])}function az(e,t){let n=[];for(let t of e)n.length>0&&n.push(new W(` `)),n.push(t);let r=W.fromFragments(n);return r.overflow=t?`ignore`:void 0,r.end=``,r}function oz(e,t,n,r){let i=e.compiled.get(t);if(!i||i.kind!==n)throw Error(`picker references action "${t}" which must be ${r}, got ${i?`a ${i.kind} action`:`no such action`}`);return i}function sz(e,t,n){let r=e.compiled.get(t),i=r&&kR(r);if(!i||i.kind!==`set-option`&&i.kind!==`persist-option`&&i.kind!==`layout-op-option`)throw Error(`${n} references action "${t}" which must be a set-option, persist-option, or layout-op-option action ({ set, from }, { persist, from }, or { persist, insertSegmentFrom, anchor, relation }), got ${i?`a ${i.kind} action`:`no such action`}`);return i}function cz(e,t,n,r,i,a,o){let s=sz(i,e,`picker`),c=i.compiled.get(e),l=i.store,u=MR(l,`session.id`),d=`stateVar`in s?MR(l,s.stateVar):void 0,f=r?n.kind===`led`?nz(i):tz(i):1/0,p=n.kind===`led`?0:ez(`✕`)+1,m=s.library&&{groups:s.library.groups,entries:s.options.map(s.library.entry)},h=m===void 0?iz(s.options.map(ez),f,p):JR(m.entries,m.groups,r),g=parseInt(MR(l,t.stateVar),10),_=Number.isInteger(g)?Math.max(0,Math.min(g,h.length-1)):0,v=h[_]??[],y=e=>hM([{verb:Hj,args:[u,t.key,String(e)]}]),b=n.kind===`led`?[]:[{verb:Hj,args:[u,...n.writes.flatMap(([e,t])=>[e,t])]}],x=n.kind===`own`&&n.onPick?b:[],S=e=>hM([...IR(c,e,e,l,u).effects,...x]),C=(e,t)=>{let n=s.options[e];return PR(t,S(n),n===d,a({index:e,count:s.options.length},n))},ee=n.kind===`led`?[]:[PR(`✕`,hM(b),!1,o)];_>0&&ee.push(PR(`←`,y(_-1),!1));let w=_<h.length-1?[PR(`→`,y(_+1),!1)]:[];if(m===void 0){let e=v.flatMap(e=>e.indices);return[az([...ee,...e.map(e=>C(e,s.options[e])),...w],r)]}let te=new H({bold:!0}),ne=h.length>1?` ${_+1}/${h.length}`:``,re=v.length===1?[new W(`${v[0].label}${ne}`,{style:te})]:[],ie=[az([...ee,...re,...w],r)];for(let e of v){v.length>1&&ie.push(az([new W(e.label,{style:te})],r));let t=Math.max(...e.indices.map(e=>ez(s.options[e])));for(let n of e.indices){let e=s.options[n],i=m.entries[n].description,a=i===void 0?void 0:ON(i),o=` `.repeat(t-ez(e)+2),c=a===void 0?e:`${e}${o}${a}`;ie.push(az([C(n,XR(c,f))],r))}}return ie}function lz(e,t){return{picker:{fn:(n,r,i,a,o,...s)=>{DS(`picker "${n}"`,[`closeOnPick`,`paged`,`inBody`],s);let c=oz(e,r,`set-int`,`an int action ({ set, int: true })`);if(o===!0&&i===!0)throw Error(`{{ picker "${n}" … }} sets both closeOnPick and inBody; a picker in a body is closed by the body's ✕, so it has no close to fold into a pick`);let l=sz(e,n,`picker`);if(l.library!==void 0)throw Error(`{{ picker "${n}" … }} ranges a catalogue domain, which lays out as one row per member; a catalogue renders in a {{ menu }} body`);let u=$R(t,`{{ picker }}`);if(u.bg===void 0)throw Error(`{{ picker }} is not available while segments.${u.segName}'s own "bg:" is being evaluated — a picker is drawn on that background`);let[d]=cz(n,{key:c.key,stateVar:c.stateVar},o===!0?{kind:`led`}:{kind:`own`,writes:[[c.key,`-1`]],onPick:i===!0},a===!0,e,KR(u,Ps(void 0),ER(e,`{{ picker }}`),l.paletteOf,t.drawnAt(),u.bg),UR(u.palette,u.bg,t.drawnAt()));return d},argTypes:[`string`,`string`,`bool`],arity:{kind:`variadic`},returnType:`T`}}}function uz(e,t,n,r,i){let a=Math.min(Math.floor((t-1)/2),i),o=n,s=0;for(;s<a;){let t=o+ez(e(-(s+1)))+1+ez(e(s+1))+1;if(t>r)break;o=t,s+=1}return s}function dz(e,t,n,r,i,a){if(!(`stateVar`in t))throw Error(`carousel references action "${e}", which inserts a segment and holds no current value to centre on — a carousel needs a { set, from } or { persist, from } action`);let o=n.store;if(!o.has(t.stateVar))throw Error(`carousel references action "${e}", whose key "${t.stateVar}" no variable reads back, so there is no current value to centre on — declare { kind: "state", key: "${t.stateVar}" } among the variables`);let s=n.compiled.get(e),c=MR(o,`session.id`),{options:l}=t,u=l.length;if(u===0)return az([],!0);let d=MR(o,t.stateVar),f=Math.max(l.indexOf(d),0),p=e=>((f+e)%u+u)%u,m=e=>l[p(e)],h=new Map,g=e=>{let t=h.get(e);if(t!==void 0)return t;let n=hM(IR(s,m(e),m(e),o,c).effects);return h.set(e,n),n},_=e=>PR(m(e),g(e),m(e)===d,r({index:p(e),count:u},m(e))),v=a===void 0?_(0):PR(m(0),hM(IR(n.compiled.get(a),m(0),void 0,o,c).effects),!1),y=uz(m,u,ez(`◀`)+1+v.cellLength+1+ez(`▶`),nz(n),i),b=e=>Array.from({length:y},(t,n)=>_(e*(n+1)));return az([...b(-1).reverse(),PR(`◀`,g(-1),!1),v,PR(`▶`,g(1),!1),...b(1)],!0)}function fz(e,t){return{carousel:{fn:(n,...r)=>{let[i,a,...o]=r;if(DS(`carousel "${n}"`,[`neighbours`,`centre`],o),i!==void 0&&!(Number.isInteger(i)&&i>=0))throw Error(`carousel "${n}": neighbours must be a whole number ≥ 0 (0 shows only ◀ CURRENT ▶), got ${String(i)}`);if(a!==void 0&&!(typeof a==`string`&&e.compiled.has(a)))throw Error(`carousel "${n}": centre must name a declared action, got ${JSON.stringify(a)}`);if(a!==void 0&&AR(e.compiled.get(a)))throw Error(`carousel "${n}": centre "${a}" writes a value the template binds, and the centre binds none — name an action that writes a fixed value, a cycle, or a do of them`);let s=i??1/0,c=sz(e,n,`carousel`),l=$R(t,`{{ carousel }}`);if(l.bg===void 0)throw Error(`{{ carousel }} is not available while segments.${l.segName}'s own "bg:" is being evaluated — a carousel is drawn on that background`);return dz(n,c,e,KR(l,Ps(void 0),ER(e,`{{ carousel }}`),c.paletteOf,t.drawnAt(),l.bg),s,a)},argTypes:[`string`,`value`],arity:{kind:`variadic`},returnType:`T`}}}const pz=[`~/code`,`main`,`opus`,`42%`,`5m`,`$1.20`];function mz(e,t,n,r){let i=mc(e,n,r),a=(t,n)=>({text:t,colour:n,ink:nc(e,n,r)});return[ks(t).map((n,i)=>{let a=qs(e,n);return{text:pz[i%pz.length],colour:a,ink:t.shade.text(e,n.hue,a,r)}}),[a(`▾ open`,i.state),a(`menu`,i.plane)],[a(`warn`,Ks(e,`warning`)),a(`error`,Ks(e,`error`))]]}function hz(e,t,n,r,i){let a=mz(e,t,n,r).flatMap((e,t)=>e.map(({text:e,colour:n,ink:r},i)=>({gap:t>0&&i===0?` `:``,cell:new W(` ${e} `,{style:HR({tint:n,text:r})})}))),o=[],s=0;for(let{gap:e,cell:t}of a){if(s+=e.length+t.cellLength,s>i)break;e!==``&&o.push(new W(e)),o.push(t)}let c=W.fromFragments(o);return c.overflow=`ignore`,c.end=``,c}function gz(e,t){return{themePreview:{fn:()=>{let{palette:n,decor:r}=ER(e,`{{ themePreview }}`);return hz(n,r,{...$R(t,`{{ themePreview }}`).disclosure,depth:0},t.drawnAt(),nz(e))},argTypes:[],arity:{kind:`exact`},returnType:`T`}}}const _z=e=>e.slice(e.lastIndexOf(`.`)+1),vz=(e,t)=>{let n=new W(_z(e));return n.truncate(t,{marker:`…`}),n.plain};function yz(e,t){let n=e.map(e=>e.map(({name:e})=>ez(_z(e)))),r=e=>n.every(n=>n.reduce((t,n)=>t+Math.min(n,e)+2,0)<=t),i=Math.max(1,...n.flat());for(;i>1&&!r(i);)--i;return i}function bz(e,t,n,r){let i=yz(e,r),a=e.map(e=>{let a=[],o=0;for(let{name:s,address:c,palette:l}of e){let e=new W(` ${vz(s,i)} `,{style:HR(Ec(l,{kind:`bar`,decor:t,address:c},n))});if(o+=e.cellLength,o>r)break;a.push(e)}return a}),o=W.fromFragments(a.flatMap((e,t)=>t===0?e:[new W(`
199
+ `),...e]));return o.overflow=`ignore`,o.end=``,o}function xz(e,t){return{layoutPreview:{fn:()=>bz(e.layout(),ER(e,`{{ layoutPreview }}`).decor,t.drawnAt(),nz(e)),argTypes:[],arity:{kind:`exact`},returnType:`T`}}}function Sz(e,t,n,r){let i=$R(r.activeSegment,`{{ menu }}`),a=r.action,o=Cb(i.placementId,e,n.key),s=Eb(o),c=Sb(e),l=MR(a.store,o)===c,u=MR(a.store,`session.id`),d=l?Bd:c,f=PR(Ud(`{{ menu "${e}" }}`,t,2,+!!l),hM([{verb:Hj,args:[u,o,d,s,`0`]}]),!1);return i.drops.push(...l?(()=>{let t=r.activeSegment.drawnAt(),c=mc(i.palette,i.disclosure,t).plane;return cz(e,{key:s,stateVar:s},{kind:`own`,writes:[[o,Bd],[s,`0`]],onPick:n.closeOnPick},n.paged,a,KR(i,n.distribution,ER(a,`{{ menu }}`),sz(a,e,`menu`).paletteOf,t,c),UR(i.palette,c,t))})():[]),f}const Cz=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function wz(e,t){let n=t[t.length-1],r=Cz(n)?n:void 0,i=r===void 0?t:t.slice(0,-1),a=i.findIndex(e=>typeof e!=`string`);if(a!==-1)throw Error(`{{ menu "${e}" }} display #${a+1} is not text (${JSON.stringify(i[a])}) — a menu binds its trigger text, then an optional trailing (dict …) of options`);return{displays:i,options:Ab(r??{})}}function Tz(e){return{menu:{fn:(t,...n)=>{let{displays:r,options:i}=wz(t,n);return Sz(t,r,i,e)},argTypes:[`string`,`value`],arity:{kind:`variadic`},returnType:`T`}}}function Ez(e){let{value:t,max:n,width:r,filled:i,empty:a,colourAt:o}=e,s=Dz(t,n,r),c=[];for(let e=0;e<r;e++){let t=e<s,l=t&&o!==void 0?o(e*n/r):void 0;c.push(new W(t?i:a,{style:l===void 0?void 0:new H({color:l})}))}let l=W.fromFragments(c);return l.end=``,l.overflow=`ignore`,l}function Dz(e,t,n){return!Number.isFinite(e)||!Number.isFinite(t)||t<=0?0:Math.min(n,Math.max(0,Math.round(e/t*n)))}function Oz(e){let t={fn:(()=>{let t=$R(e,`{{ bgOf }}`);if(t.bg===void 0)throw Error(`{{ bgOf }} is not available while segments.${t.segName}'s own "bg:" is being evaluated — the background is what that template computes. Reach for a palette color there instead, e.g. bg: '{{ darken (color "surface") 1 }}'.`);return t.bg.hex}),argTypes:[],arity:{kind:`exact`},returnType:`string`},n={fn:(()=>$R(e,`{{ tint }}`).tint.hex),argTypes:[],arity:{kind:`exact`},returnType:`string`},r={fn:((t,n)=>{let{palette:r}=$R(e,`{{ keptOn }}`),i=yr(r,t),a=yr(r,n),o=P(Ar(i,F.TRUECOLOR),Ar(a,F.TRUECOLOR)),s=Math.min(tc,Math.max(o,3));return(kr(i,e.drawnAt(),(e,t)=>P(e,t(a))>=s)??i).hex}),argTypes:[`string`,`string`],arity:{kind:`exact`},returnType:`string`},i=pS(()=>$R(e,`{{ color }} / {{ ramp }} / {{ gauge }}`).palette),a={fn:((e,t,n,r,a,o,...s)=>{let c=o===void 0?void 0:[o,...kz(s)];return Ez({value:e,max:t,width:n,filled:r,empty:a,colourAt:c===void 0?void 0:e=>String(i.ramp.fn(e,...c))})}),argTypes:[`float`,`float`,`int`,`string`,`string`,`string`],arity:{kind:`variadic`},returnType:`T`};return{...i,bgOf:t,tint:n,keptOn:r,gauge:a}}function kz(e){return e.flatMap(e=>{let t=e.indexOf(`:`),n=t<0?NaN:Number(e.slice(0,t));if(!Number.isFinite(n))throw Error(`{{ gauge }} stop "${e}" must be "<position>:<colour>", e.g. "80:error" or "80:#ff0000"`);return[n,e.slice(t+1)]})}function Az(e){let t=[],n=[];for(let r of e){if(!r.contains(`
200
200
  `)){n.push(r);continue}let e=r.split(`
201
- `);n.push(e[0]);for(let r=1;r<e.length;r++)t.push(n),n=[e[r]]}return t.push(n),t}function Az(e){let t=new Map;return e.map(e=>{let n=`${e.place}.${e.band}`,r=t.get(n)??0;return t.set(n,r+1),{line:e,row:`${n}#${r}`}})}function jz(e,t){let n=[],r=[],i;for(let a of t)(a.band===`own`?n:r).push(a),i??=a.cells.find(t=>t.placement.id===e)?.placement.ground;return{drawing:i===void 0?null:{own:r.length===0?n:[],ground:i},deeper:r}}function Mz(e){return{...e,cells:e.cells.map(_R)}}function Nz(e,t){let n=t.flatMap(e=>e.filter(e=>e.place===`above`)),r=t.map(e=>e.filter(e=>e.place===`flow`));return[...n,...Pz(e,r)]}function Pz(e,t){switch(e){case`vertical`:return t.flatMap(e=>e);case`horizontal`:return t.reduce((e,t)=>Math.max(e,t.length),0)===0?[]:[{cells:t.flatMap(e=>e[0]?.cells??[]),band:`own`,place:`flow`},...t.flatMap(e=>e.slice(1))]}}function Fz(e,t){let n=(e,r)=>t(e)?e.kind===`segment`?[{cells:[{name:e.name,address:r,settings:e.settings}],band:`own`,place:`flow`}]:Nz(e.direction,e.children.map((t,i)=>n(t,[...r,Iz(e,i)]))):[];return n(e,[]).map(e=>[...e.cells])}function Iz(e,t){return{index:t,count:e.children.length,distribution:e.distribution,axis:yu[e.direction]}}const Lz={compile(e,t){return{kind:`container`,direction:e.direction,when:t.when,distribution:Ps(e.distribution),children:e.children.map((e,n)=>t.compileChild(e,Tu(t.path,n)))}},render(e,t){return Nz(e.direction,e.children.map((n,r)=>t.renderChild(n,t.visible,Iz(e,r))))}},Rz={drop:e=>e.place,above:()=>`above`},zz={drop:(e,t)=>({lead:t(),stays:e}),above:e=>({lead:e.slice(0,1).flatMap(e=>e.cells),stays:e.slice(1)})},Bz={compile(e,t){return{kind:`segment`,when:t.when,name:e.name,id:bu(e),settings:t.placementSettings(e),...e.opens!==void 0&&{opens:{open:t.parse(Kd(e.opens.ref),`opens`),body:t.compileChild(e.opens.body,Eu(t.path)),key:e.opens.ref.key,placement:e.opens.placement}},...e.lead!==void 0&&{lead:t.parse(e.lead,`lead`)},...e.trail!==void 0&&{trail:t.parse(e.trail,`trail`)}}},render:(e,t)=>t.placed(e.id,Vz(e,t))};function Vz(e,t){let n=t.lookupSegment(e.name);if(!n)throw Error(`Layout segment "${e.name}" has no matching segment`);let{seg:r,compiled:i}=n;if(!t.visible)return[];let a=FS(t.scope,e.settings);try{if(!pR(i.when,a))return[];let n=fw(e.settings.theme,t.palette),o={id:e.id,effect:e.settings.effect,ground:Jw(n)},s=e.opens!==void 0&&pR(e.opens.open,t.scope),{styles:c,fragments:l,lead:u,trail:d,drops:f,open:p}=t.evaluateSegment(e,a,n,t.region,{bg:i.bg,fg:i.fg,body:i.template,lead:e.lead,trail:e.trail},s),m=p?c.trigger:c.closed,h={width:r.width??`auto`,justify:r.justify??`left`,truncate:r.truncate??`right`,baseStyle:m,padding:t.padding,placement:o},g=e.opens,_=g===void 0?[]:t.renderBody(g.body,s,c.disclosure).map(e=>({...e,place:Rz[g.placement](e)})),v=kz(SR(l,m)).map((e,t)=>({cells:bR(e,{...h,lead:t===0?SR(u,m):[],trail:t===0?SR(d,m):[]}),band:`own`,place:`flow`})),y=f.map(e=>({cells:bR(SR([e],c.band),{...h,baseStyle:c.band}),band:`deeper`,place:`flow`})),b=(e,t,n)=>bR(SR([e],t),{...h,width:`auto`,baseStyle:t,padding:n}),x=_.findIndex(e=>e.band===`own`),{lead:S,stays:C}=g!==void 0&&x!==-1?zz[g.placement](v,()=>b(t.closeDisclosure(g.key),c.close,t.padding)):{lead:[],stays:v},ee=S.flatMap(e=>b(new W(` `.repeat(gR(e).reduce((e,t)=>e+t.cellLength,0))),c.trigger,0)),w=(e,t)=>e.band===`own`?t===x?S:ee:[],te=_.map((e,t)=>({cells:[...w(e,t),...e.cells],band:`deeper`,place:e.place})),ne=[...C,...y];return t.perSegmentSink!==void 0&&t.perSegmentSink.set(e.id,[...ne.flatMap(e=>e.cells),..._.flatMap(w)].flatMap(gR)),[...ne,...te]}catch(n){let r=n.message??String(n);t.onSegmentError?.(e.id,r);let i=r.replace(/\s*\n\s*/g,` `);return[{cells:bR([new W(`⚠ ${e.id}: ${i}`,{end:``})],{width:`auto`,justify:`left`,truncate:`right`,padding:0,placement:{id:e.id,effect:`bar`,ground:Jw(t.palette)},lead:Hz(e.lead,e,a,t),trail:Hz(e.trail,e,a,t)}),band:`own`,place:`flow`}]}}function Hz(e,t,n,r){if(e===void 0)return[];try{return r.evaluateSegment(t,n,r.palette,r.region,{bg:void 0,fg:void 0,body:e,lead:void 0,trail:void 0},!1).fragments}catch(e){return r.onSegmentError?.(t.id,e.message??String(e)),[]}}const Uz={container:Lz,segment:Bz};function Wz(e){return Uz[e]}function Gz(e){if(`ttl`in e)return{kind:`ttl`,durationMs:AC(e.ttl)};if(`watch_file`in e)return{kind:`watch_file`,path:e.watch_file};if(`depends_on`in e)return{kind:`depends_on`,varNames:e.depends_on};if(`key`in e)return{kind:`key`,template:e.key};if(`never`in e)return{kind:`never`};throw Error(`Unknown CacheDecl discriminator — loader invariant violated: ${JSON.stringify(e)}`)}function Kz(e,t){switch(Au(e)){case`json`:return{kind:`json`,default:t};case`regex`:return{kind:`regex`,regex:new RegExp(e.regex),default:t};case`text`:return{kind:`text`,default:t}}}function qz(e,t,n,r){switch(n.kind){case`literal`:e.declareLiteral(t,n.value);break;case`dropped`:e.declareFailedDocument(t,n.reason);break;case`input`:e.declareInput(t,n.path,n.type??`string`,n.default);break;case`env`:e.declareEnv(t,n.name,n.default);break;case`file`:e.declareFile(t,n.path,{readMode:n.readMode,cache:Gz(n.cache),parse:Kz(n.parse,n.default)});break;case`shell`:e.declareShell(t,n.command,{cwd:r,cache:Gz(n.cache),parse:Kz(n.parse,n.default)});break;case`template`:e.declareTemplate(t,n.template,{varDefault:n.default});break;case`time`:e.declareTime(t,{format:n.layout,varDefault:n.default});break;case`git`:e.declareGit(t,{field:n.field,cwd:r,varDefault:n.default});break;case`state`:e.declareState(t,{key:n.key,...n.default!==void 0&&{varDefault:n.default}});break}}function Jz(e,t){let n=eh.EMPTY;for(let[r,i]of Object.entries(t))try{n=e.parse(`{{ define "${r}" }}${i}{{ end }}`,n).defines()}catch(e){throw Error(`Template parse error in helpers.${r}: ${e.message}`,{cause:e})}return n}const Yz=(e,t,n,r,i)=>{let a=lF(t,cF(n,e.themeDefaults));return{variation:Os[r??cl(void 0,null,a.variation)],shade:Es[i??dl(void 0,null,a.shade)]}};function Xz(e,t,n){let r=n.cwd,i={store:t.variableStore,compiled:new Map,chromeCols:nP({endcaps:`powerline`,charset:rl}),width:80,padding:1,seamCols:rP({endcaps:`powerline`,charset:rl}),layout:()=>[],look:void 0},a=XR(t.drawnAt),o={action:i,activeSegment:a},s=Object.keys(e.styles),c=Nb(e.presets),l=FD(e),u=MS({extraFuncs:{...RR(i),...cz(i,a),...dz(i,a),...hz(i,a),...bz(i,a),...wz(o),...Dz(a),styles:{fn:()=>s,argTypes:[],arity:{kind:`exact`}},presets:{fn:()=>c,argTypes:[],arity:{kind:`exact`}}},clock:t.now,drawnAt:t.drawnAt}),d=Jz(u,e.helpers),f=e=>u.parse(e,d),p=new Map,m=e=>{let t=p.get(e);if(t!==void 0)return t;let n=f(e);return p.set(e,n),n},h=new Map;for(let[t,n]of aw)n in e.variables&&h.set(t,n);for(let[t,n]of Object.entries(e.variables))n.kind===`state`&&!h.has(n.key)&&h.set(n.key,t);for(let[t,n]of Object.entries(e.segments))if(n.vars)for(let[e,r]of Object.entries(n.vars))r.kind===`state`&&!h.has(r.key)&&h.set(r.key,`${t}.${e}`);i.compiled=ER(f,e.actions,h,l);let g=[];for(let[n,i]of Object.entries(e.variables))try{qz(t,n,i,r)}catch(e){g.push(`Variable "${n}": ${e.message??String(e)}`)}for(let[n,i]of Object.entries(e.segments))if(i.vars)for(let[e,a]of Object.entries(i.vars))try{qz(t,`${n}.${e}`,a,r)}catch(t){g.push(`Variable "${n}.${e}": ${t.message??String(t)}`)}let _=Object.create(null);for(let[t,n]of Object.entries(e.segments)){let e=(e,n,r=f)=>{try{return r(e)}catch(e){throw Error(`Template parse error in segments.${t}.${n}: ${e.message}`,{cause:e})}};_[t]={when:n.when===void 0?void 0:e(n.when,`when`,m),template:e(n.template,`template`),bg:n.bg===void 0?void 0:e(n.bg,`bg`),fg:n.fg===void 0?void 0:e(n.fg,`fg`)}}let v=(e,t,n)=>{try{return m(e)}catch(e){throw Error(`Template parse error in ${t}.${n}: ${e.message}`,{cause:e})}},y=t.variableStore,b=t=>{let n=Lu(e.segments[t.name]),r=Object.create(null);for(let[e,i]of Object.entries(n))Object.defineProperty(r,e,{enumerable:!0,get:()=>Uu(t,e,i,e=>String(y.read(e.variable)))});return Object.freeze(r)},x=(e,t)=>{let n={path:t,when:e.when===void 0?void 0:v(e.when,t,`when`),parse:(e,n)=>v(e,t,n),compileChild:x,placementSettings:b};return Wz(e.kind).compile(e,n)},S=new Map;for(let t of c){let{node:n,path:r}=Ib(e,t);S.set(t,x(n,r))}let C=new Map(Ic.map(e=>[e,new Map])),ee=[[`globals`,e.globals],...Object.entries(e.presets).map(([e,t])=>[`presets.${e}.globals`,t.globals??{}])];for(let[e,t]of ee)for(let n of Ic){let r=t[n];if(!Lc(r))continue;let i=`${e}.${n}`,a=C.get(n),o=a.get(r);a.set(r,o===void 0?{where:i,template:Zz(f,i,r)}:{where:`${o.where}, ${i}`,template:o.template})}return{segments:_,roots:S,activeSegment:a,menuRuntime:o,globalExpressions:C,loadWarnings:g}}function Zz(e,t,n){try{return e(n)}catch(e){throw Error(`${t} is not a valid template: ${e instanceof Error?e.message:String(e)}`)}}function Qz(e,t,n){let r=e.globalExpressions.get(t).get(n);if(r===void 0)throw Error(`the ${t} rule ${JSON.stringify(n)} reached the render but no compiled template exists — registerDslConfig and the resolution disagree about isExpression`);return r}function $z(e,t){return e.template.evaluate(t).map(e=>e.plain).join(``)}function eB(e,t){return e.kind===`decided`?e.name:t}function tB(e,t,n,r,i,a,o,s,c){let{perSegmentSink:l,onSegmentError:u,onRenderWarning:d}=s??{},f=new Set;r.renderAt(a),r.drawAt(al(o.colorCompatibility));let{preset:p=jb}=c??{},m=Lb(e,p),h=c?.style??Hc(`none`,e.styles),g=c?.theme??vw(void 0,null,m.palette),_=Yz(e,m,g,c?.variation,c?.shade),v=c?.effect??Yc(void 0,null,m.effect),y=(e,t,n)=>({...i,term:{cols:o.width},theme:{effective:e},style:{effective:t},effect:{effective:n}});r.applyInput(y(eB(g,kc),eB(h,Bc),eB(v,Wc))),t.menuRuntime.action.chromeCols=nP(o),t.menuRuntime.action.padding=o.padding,t.menuRuntime.action.width=o.width,t.menuRuntime.action.seamCols=rP(o);let b=NS(n),x=zc(g,e=>{let n=Qz(t,`palette`,e);return _w($z(n,b),n.where,e=>d?.({kind:`theme-rule`,message:e}))}),S=zc(h,n=>Hc($z(Qz(t,`style`,n),b),e.styles)),C=zc(v,e=>Jc($z(Qz(t,`effect`,e),b)));(x!==g||S!==h||C!==v)&&r.applyInput(y(x.name,S.name,C.name));let ee=x.value,w=mw(ee,S.value);t.menuRuntime.action.look={basePalette:ee,palette:w,decor:_};let te=(c?.effects??new KN(``)).motion(C.value,a,{transitions:c?.transitions??xl(void 0,null,m.transitions),source:{config:t,preset:p,revision:r.stateRevision(),width:o.width},returned:jz,hold:Mz});l?.clear();let ne=n=>{let r=e.segments[n],i=t.segments[n];return r!==void 0&&i!==void 0?{seg:r,compiled:i}:void 0},re=(e,n,i,a,o,s)=>{try{let c=r.drawnAt(),{tint:l,text:u,disclosure:d}=Ec(i,a,c),p=ZR(t.activeSegment,e.name,e.id,i,d,l,u),m=Xw(p,c,o.bg,o.fg,n),h=()=>mc(i,d,c);s&&(p.bg=h().state);let g=o.body.evaluate(n),_=p.drops.length>0||s;if(_){let e=h();p.bg=e.state;for(let t of e.shortfalls)f.add(t)}let v=o.lead?.evaluate(n)??[],y=o.trail?.evaluate(n)??[];return{styles:{closed:m,get trigger(){return BR(i,h().state,c)},get band(){return BR(i,h().plane,c)},get close(){return UR(i,h().state,c)},disclosure:d},fragments:g,lead:v,trail:y,drops:p.drops,open:_}}finally{t.activeSegment.current=null}},ie=(e,t,r)=>{let i=t&&pR(e.when,b),a={scope:b,palette:w,visible:i,padding:o.padding,region:r,perSegmentSink:l,onSegmentError:u,evaluateSegment:re,lookupSegment:ne,renderChild:(e,t,n)=>ie(e,t,wc(r,n)),renderBody:(e,t,n)=>ie(e,i&&t,Tc(n)),closeDisclosure:e=>zR(n,e),placed:te.placed};return Wz(e.kind).render(e,a)},T=t.roots.get(p);if(T===void 0)throw Error(`Preset "${p}" has no compiled layout — registerDslConfig compiles one per declared preset and effectivePresetName collapses unknown names to "${jb}"; a miss here is merge/policy drift (have: ${[...t.roots.keys()].join(`, `)})`);let E=e=>{if(!pR(e.when,b))return!1;if(e.kind===`container`)return!0;if(KD(e.name)===void 0)return!1;try{return pR(t.segments[e.name].when,FS(b,e.settings))}catch{return!0}};t.menuRuntime.action.layout=()=>Fz(T,E).map(e=>e.flatMap(({name:e,address:t,settings:n})=>{let r=KD(e);return r===void 0?[]:[{name:r,address:t,palette:fw(n.theme,w)}]}));let ae=Az(ie(T,!0,Cc(_))).map(({line:e,row:t})=>{let n=xR(e.cells,o);return iP(n.map(e=>e.owner),o,te.row(t,n))}).join(`
202
- `);te.drawn();for(let e of f)d?.({kind:`band-floor`,message:e});return ae}function*nB(e){yield*Object.entries(e.variables??{});for(let[t,n]of Object.entries(e.segments??{}))for(let[e,r]of Object.entries(n.vars??{}))yield[`${t}.${e}`,r]}function*rB(e){for(let t of Object.values(e.segments))for(let e of[t.template,t.bg,t.fg,t.when])e!==void 0&&(yield e);for(let t of Nb(e.presets)){for(let n of wu(Ib(e,t).node))n.when!==void 0&&(yield n.when);let n=Lb(e,t);for(let e of Ic){let t=n[e];Lc(t)&&(yield t)}}for(let[,t]of nB(e))t.kind===`template`&&(yield t.template),Mu(t)&&t.cache&&`key`in t.cache&&(yield t.cache.key);for(let t of Object.values(e.actions))`copy`in t&&(yield t.copy),`open`in t&&(yield t.open),`preset`in t&&t.preset===`delete`&&(yield t.name)}function iB(e,t){return e===t||t.startsWith(`${e}.`)||e.startsWith(`${t}.`)}function aB(e,t){let n=new Set,r=new Set,i=new Set;for(let e of rB(t)){for(let r of Cx(e,t.helpers).keys())n.add(r);for(let{name:n}of Dx(e,t.helpers))r.add(n);for(let n of Ox(e,t.helpers))i.add(n)}for(let[,e]of nB(t))if(Mu(e)&&e.cache&&`depends_on`in e.cache)for(let t of e.cache.depends_on)n.add(t);let a=new Set(r);for(let e of r){let n=t.actions[e];if(n!==void 0&&`do`in n)for(let e of n.do)a.add(e)}let o=new Set,s=new Set;for(let e of a){let n=t.actions[e];if(n!==void 0&&(`set`in n&&o.add(n.set),`insertSegment`in n&&s.add(n.insertSegment),`insertSegmentFrom`in n&&Array.isArray(n.insertSegmentFrom)))for(let e of n.insertSegmentFrom)s.add(e)}for(let e of Nb(t.presets))for(let n of wu(Ib(t,e).node))n.kind===`segment`&&s.add(n.name);let c=(e,t)=>[...n].some(t=>iB(t,e))||t.kind===`state`&&o.has(t.key),l=e=>[...e].filter(e=>!Ep(e)),u=(e,t,n)=>l(t).filter(e=>!n(e)).map(t=>({kind:e,name:t})),d=new Map(nB(e));return[...u(`variable`,d.keys(),e=>c(e,d.get(e))),...u(`action`,Object.keys(e.actions??{}),e=>a.has(e)),...u(`helper`,Object.keys(e.helpers??{}),e=>i.has(e)),...u(`segment`,Object.keys(e.segments??{}),e=>s.has(e))]}var oB=class{kind=`box`;cell;lastChangedAt;constructor(e,t,n){this.name=e,this.type=t,fB(e,t,n,`initial value`),this.cell=Lx.observable.box(n,{deep:!1}),this.lastChangedAt=Date.now()}read(){return this.cell.get()}set(e){fB(this.name,this.type,e,`set value`),!Object.is(this.cell.get(),e)&&(this.cell.set(e),this.lastChangedAt=Date.now())}lastUpdatedMs(){return this.lastChangedAt}},sB=class{kind=`computed`;cell;constructor(e,t,n){this.name=e,this.type=t,this.cell=(0,Lx.computed)(()=>{let e=n();return fB(this.name,this.type,e,`computed result`),e},{keepAlive:!0})}read(){return this.cell.get()}lastUpdatedMs(){return null}},cB=class{kind=`document`;cell;lastChangedAt;constructor(e,t){this.name=e,this.cell=Lx.observable.box(dB(t),{deep:!1}),this.lastChangedAt=Date.now()}read(){return this.cell.get()}set(e){let t=dB(e);uB(this.cell.get(),t)||(this.cell.set(t),this.lastChangedAt=Date.now())}lastUpdatedMs(){return this.lastChangedAt}};function lB(e){return JSON.stringify(e)}function uB(e,t){return lB(e)===lB(t)}function dB(e){return e.kind===`ok`?{kind:`ok`,value:Rx(e.value)}:e}function fB(e,t,n,r){let i=zx(n);if(i!==t)throw TypeError(`Variable "${e}": ${r} type ${i} does not match declared type ${t}`)}var pB=class{nodes=new Map;defineBox(e,t,n){this.assertNotDefined(e),this.nodes.set(e,new oB(e,t,n))}defineDocument(e,t){this.assertNotDefined(e),this.nodes.set(e,new cB(e,t))}defineComputed(e,t,n){this.assertNotDefined(e);let r=e=>this.read(e);this.nodes.set(e,new sB(e,t,()=>n(r)))}read(e){return this.requireVar(e).read()}readDocument(e){let t=this.requireNode(e);if(t.kind!==`document`)throw TypeError(`Variable "${e}" is a ${t.kind}, not a document`);return t.read()}setDocument(e,t){let n=this.requireNode(e);if(n.kind!==`document`)throw TypeError(`Variable "${e}" is a ${n.kind}, not a document (use defineDocument to create one)`);(0,Lx.runInAction)(()=>n.set(t))}setBox(e,t){let n=this.requireNode(e);if(n.kind!==`box`)throw TypeError(`Variable "${e}" is a ${n.kind}, not a box (use defineBox to create a settable variable)`);(0,Lx.runInAction)(()=>n.set(t))}runInAction(e){(0,Lx.runInAction)(e)}has(e){return this.nodes.has(e)}getType(e){return this.requireVar(e).type}getKind(e){return this.requireNode(e).kind}changeKey(e){let t=this.requireNode(e);if(t.kind===`document`)return lB(t.read());try{return String(t.read())}catch(e){return`failed:${e instanceof Error?e.message:String(e)}`}}getNode(e){let t=this.requireNode(e);return t.kind===`document`?{name:t.name,kind:t.kind,read:()=>t.read(),lastUpdatedMs:()=>t.lastUpdatedMs()}:{name:t.name,type:t.type,kind:t.kind,read:()=>t.read(),lastUpdatedMs:()=>t.lastUpdatedMs()}}names(){return[...this.nodes.keys()]}requireNode(e){let t=this.nodes.get(e);if(!t)throw ReferenceError(`Unknown variable "${e}"`);return t}requireVar(e){let t=this.requireNode(e);if(t.kind===`document`)throw TypeError(`Variable "${e}" is a document; read its fields by path (.${e}.<field>)`);return t}assertNotDefined(e){if(this.nodes.has(e))throw Error(`Variable "${e}" is already declared`)}};function mB(e,{plugins:t,config:n}){let{checkout:r,loaded:i,dropped:a,unreached:o}=t,s=r===null?`-`:`${r.git?`git`:`dir`}:${r.root}`,c=e=>{let t=Wk(e),r=t===void 0?void 0:n.variables[Kk(t)];return r?.kind===`file`?r.path:`none`};return`config load ${e.join(` < `)||`<default>`}: plugins loaded=${i.length} dropped=${a.length} unplaced=${o.length} checkout=${s}`+i.map(e=>` +${e} data=${c(e)}`).join(``)+a.map(e=>` -${e.path} (${e.reason})`).join(``)+o.map(e=>` ~${e.path} (${e.reason})`).join(``)}function hB(e,t,n){return e+`\0`+t+`\0`+(n??``)}function gB(e,t){return new Set(Nb(e.presets).filter(n=>Ib(e,n).path===`root`?t.root!==void 0:t.presets?.[n]?.root!==void 0))}function _B(e,t){let n=new Map,{roots:r,loaded:i,dropped:a,unreached:o}=e.state.plugins;for(let t of[...Mk(e.projectDir,e.cwd,e.configFile),...r,...i,...[...a,...o].map(e=>e.path)]){let{dir:e,name:r}=Nx(t),i=n.has(e)?n.get(e):new Set;i?.add(r),n.set(e,i)}for(let e of r){let{dir:t,name:r,leaf:i}=Nx(l.join(e,`_`));i&&r===`_`&&n.set(t,null)}return{files:t,dirs:[...n.entries()].sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>t===null?{path:e}:{path:e,filenames:[...t].sort()})}}function vB(e){return e.filter(Boolean).join(`
203
- `)||null}function yB(e,t,n,r,i=()=>{}){let{layers:a,config:o,installed:s}=bA(t.layers,iF,{entered:i,warned:e=>n.push(...e)},{projectDir:t.projectDir,cwd:e});i(a.length===1?a[0].path:null);let c=a.at(-1)?.config??iF,l=a.find(e=>e.path===t.home)?.raw??{},u=new pB,d=new ZC(u,o.globals.default_empty_value??``,r.gitService,r.sessionState),f;try{f=Xz(o,d,{cwd:e}),n.push(...f.loadWarnings),UI(o),VP(o)}catch(e){throw d.dispose(),e}return{config:o,store:u,registry:d,compiled:f,neededInputPaths:YF(o),lastRenderCellsBySegment:new Map,authoredRoots:gB(c,l),fileHeldSettings:kI(l),unused:[...new Map(a.flatMap(e=>aB(e.raw,c)).map(e=>[`${e.kind}:${e.name}`,e])).values()],plugins:{checkout:s.checkout,roots:s.roots,loaded:[...s.rendering.values()],dropped:[...s.dropped,...a.flatMap(e=>e.plugins.dropped)],unreached:s.unreached,reached:s.reached,rendering:s.rendering}}}function bB(e,t,n,r){let i=Pk(e,t,n),a={layers:i.kind===`chain`?i.layers:[],home:i.home,projectDir:e},o=[zk(e,t),Lk(i)],s,c=null;try{s=yB(t,a,o,r,e=>{c=e})}catch(e){return e instanceof pu&&o.push(...e.warnings),{layers:a.layers,home:a.home,failedFile:c,warning:vB(o),state:null,error:e instanceof pu||e instanceof Error?e.message:String(e)}}return{layers:a.layers,home:a.home,warning:vB(o),state:s,error:null}}function xB(e,t,n){return yB(e,{layers:[],home:``,projectDir:t},[],n)}var SB=class{entries=new Map;deps;maxEntries;observers;constructor(e,t={}){this.deps=e,this.maxEntries=t.maxEntries??256,this.observers=t.observers??{}}getOrCreate(e,t,n){let r=hB(e,t,n),i=this.entries.get(r);if(i)return this.entries.delete(r),this.entries.set(r,i),i;let a=bB(e,t,n,this.deps);a.state!==null&&Z(`info`,mB(a.layers,a.state));let o={projectDir:e,cwd:t,configFile:n,configLayers:[],configHome:``,failedFile:null,lastError:a.error,lastWarning:a.warning,state:a.state??xB(t,e,this.deps),watcher:null,watcherKey:null};if(this.entries.set(r,o),this.entries.size>this.maxEntries){let e=this.entries.entries().next().value;if(e!==void 0){let[t,n]=e;n.state.registry.dispose(),n.watcher?.release(),this.entries.delete(t)}}return this.refreshWatcher(o,a),this.observers.onReload?.(o),o}reload(e,t,n){this.reloadInto(this.getOrCreate(e,t,n))}reloadInto(e){let t=bB(e.projectDir,e.cwd,e.configFile,this.deps);e.lastWarning=t.warning,e.lastError=t.error,t.state!==null&&(Z(`info`,mB(t.layers,t.state)),e.state.registry.dispose(),e.state=t.state),this.refreshWatcher(e,t),this.observers.onReload?.(e)}refreshWatcher(e,t){e.configLayers=t.layers,e.configHome=t.home,e.failedFile=t.error===null?null:t.failedFile;let n=_B(e,t.layers),r=`config:${e.projectDir}:${e.cwd}:${e.configFile??``}:${JSON.stringify(n)}`;e.watcher!==null&&e.watcherKey===r||(e.watcher?.release(),e.watcherKey=r,e.watcher=this.deps.watchers.acquire(r,n,()=>this.onConfigChanged(e)))}onConfigChanged(e){Z(`info`,`config change detected for entry projectDir=${e.projectDir} cwd=${e.cwd}`),this.reloadInto(e)}get size(){return this.entries.size}firstState(){return this.entries.values().next().value?.state??null}};const CB=16384;var wB=class{startedAt=new Date;requestsTotal=0;requestsErrored=0;requestsTimedOut=0;inFlight=0;watchersOpened=0;watchersClosed=0;watchersEvicted=0;subprocessTotal=0;subprocessInFlight=0;subprocessCount=new Map;subprocessHistogram=new Map;subprocessHistogramRotator=new Map;rollingTimestamps=[];rollingHead=0;launchStats={onStart:e=>{this.subprocessTotal++,this.subprocessInFlight++,this.subprocessCount.set(e,(this.subprocessCount.get(e)??0)+1),this.recordRollingNow()},onEnd:(e,t)=>{this.subprocessInFlight=Math.max(0,this.subprocessInFlight-1),this.recordDuration(e,t)}};recordRollingNow(){let e=Date.now();if(this.rollingTimestamps.length<CB){this.rollingTimestamps.push(e);return}this.rollingTimestamps[this.rollingHead]=e,this.rollingHead=(this.rollingHead+1)%CB}recordDuration(e,t){let n=this.subprocessHistogram.get(e);if(n||(n=[],this.subprocessHistogram.set(e,n)),n.length<16){n.push(t);return}let r=(this.subprocessHistogramRotator.get(e)??0)%16;n[r]=t,this.subprocessHistogramRotator.set(e,r+1)}snapshotSubprocesses(){let e=Date.now()-6e4,t=0;for(let n of this.rollingTimestamps)n>=e&&t++;let n={};for(let[e,t]of this.subprocessCount)t>0&&(n[e]=t);let r={},i={};for(let[e,t]of this.subprocessHistogram){if(t.length===0)continue;let n=[...t].sort((e,t)=>e-t),a=Math.floor(n.length*.5),o=Math.min(n.length-1,Math.floor(n.length*.99)),s=n[a],c=n[o];s!==void 0&&(r[e]=s),c!==void 0&&(i[e]=c)}return{total:this.subprocessTotal,inFlight:this.subprocessInFlight,lastMinute:t,byCategory:n,p50DurationMs:r,p99DurationMs:i}}snapshot(e){let t=process.memoryUsage();return{pid:process.pid,version:QA,protocolVersion:3,startedAt:this.startedAt.toISOString(),uptimeSec:Math.floor((Date.now()-this.startedAt.getTime())/1e3),rssBytes:t.rss,heapUsedBytes:t.heapUsed,heapTotalBytes:t.heapTotal,externalBytes:t.external,arrayBuffersBytes:t.arrayBuffers,requests:{total:this.requestsTotal,errored:this.requestsErrored,timedOut:this.requestsTimedOut,inFlight:this.inFlight},gitCache:e.gitCache,usageCache:e.usageCache,renderCache:{size:e.renderCacheSize},effectCache:e.effectCache,watchers:{active:e.watchersActive,opened:this.watchersOpened,closed:this.watchersClosed,evicted:this.watchersEvicted},subprocesses:this.snapshotSubprocesses(),nextRestartReason:e.nextRestartReason??null,handlerProbes:e.handlerProbes}}};function TB(e,t,n){let r=(r,i,a)=>{let o=i.filter(t).map(t=>({key:t,before:e.get(r,t)}));a();for(let{key:t,before:i}of o)n(r,t,i,e.get(r,t))};return{get:(t,n)=>e.get(t,n),revision:t=>e.revision(t),set:(t,n,i)=>r(t,[n],()=>e.set(t,n,i)),setBatch:(t,n)=>r(t,n.map(e=>e.key),()=>e.setBatch(t,n)),clear:(t,n)=>r(t,[n],()=>e.clear(t,n))}}const EB={load:()=>({}),save:()=>{},flush:()=>{}};var DB=class{sessions;storage;head=0;atom=(0,Lx.createAtom)(`SessionState`);constructor(e=EB,t=256){this.maxSessions=t,this.storage=e,this.sessions=new Map,this.hydrateFromStorage()}useStorage(e){this.storage=e,this.hydrateFromStorage()}hydrateFromStorage(){this.sessions=new Map(Object.entries(this.storage.load()).map(([e,t])=>[e,{values:new Map(Object.entries(t)),revision:++this.head}])),this.evictOldest(),this.persist()}get(e,t){this.atom.reportObserved();let n=this.sessions.get(e);return n?(this.touch(e,n),n.values.get(t)??null):null}revision(e){return this.atom.reportObserved(),this.sessions.get(e)?.revision??0}set(e,t,n){this.setBatch(e,[{key:t,value:n}])}setBatch(e,t){t.length!==0&&(0,Lx.runInAction)(()=>{let n=this.sessions.get(e)??{values:new Map,revision:0};t.some(({key:e,value:t})=>n.values.get(e)!==t)&&(n.revision=++this.head);for(let{key:e,value:r}of t)n.values.set(e,r);this.touch(e,n),this.evictOldest(),this.persist(),this.atom.reportChanged()})}clear(e,t){(0,Lx.runInAction)(()=>{let n=this.sessions.get(e);n&&(n.values.delete(t)&&(n.revision=++this.head),n.values.size===0?this.sessions.delete(e):this.touch(e,n)),this.persist(),this.atom.reportChanged()})}prune(e){(0,Lx.runInAction)(()=>{for(let t of this.sessions.keys())e.has(t)||this.sessions.delete(t);this.persist(),this.atom.reportChanged()})}touch(e,t){this.sessions.delete(e),this.sessions.set(e,t)}evictOldest(){let e=this.sessions.size-this.maxSessions;if(!(e<=0)){for(let t of this.sessions.keys())if(this.sessions.delete(t),--e===0)break}}flush(){this.storage.flush()}persist(){this.storage.save(this.serialize())}serialize(){let e=Object.create(null);for(let[t,{values:n}]of this.sessions)e[t]=Object.fromEntries(n);return e}};function OB(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;for(let t of Object.values(e)){if(typeof t!=`object`||!t||Array.isArray(t))return!1;for(let e of Object.values(t))if(typeof e!=`string`)return!1}return!0}var kB=class{timer=null;pending=null;constructor(e,t=500,n=pC){this.filePath=e,this.debounceMs=t,this.logger=n}load(){let e;try{e=r.readFileSync(this.filePath,`utf8`)}catch(e){let t=e.code;return t!==`ENOENT`&&this.logger(`warn`,`session-state read failed (${t}); starting empty`),{}}try{let t=JSON.parse(e);return OB(t)?t:(this.logger(`warn`,`session-state load: unexpected shape, starting empty`),{})}catch{return this.logger(`warn`,`session-state load: corrupt JSON, starting empty`),{}}}save(e){this.pending=e,!this.timer&&(this.timer=setTimeout(()=>this.flush(),this.debounceMs),this.timer.unref())}flush(){if(this.timer&&=(clearTimeout(this.timer),null),this.pending===null)return;let e=this.pending;try{r.mkdirSync(l.dirname(this.filePath),{recursive:!0});let t=`${this.filePath}.tmp`;r.writeFileSync(t,JSON.stringify(e),{mode:384}),r.chmodSync(t,384),r.renameSync(t,this.filePath),this.pending=null}catch(e){this.logger(`warn`,`session-state save failed: ${e.message}`)}}};const AB={default_empty_value:`string`,default_separator:`string`,palette:`string`,style:`string`,effect:`string`,preset:`string`,endcaps:`string`,variation:`string`,shade:`string`,autoWrap:`boolean`,padding:`number`,charset:`string`,updateNotice:`boolean`,transitions:`boolean`,colorCompatibility:`string`,menuGlyph:`string`},jB=new Set([`1`,`true`]),MB=new Set([`0`,`false`,``]);function NB(e,t){let n=iV(e),r=n.scope===`segment-palette`?`string`:AB[n.field];if(r===`string`)return JSON.stringify(t);if(r===`number`){let n=Number(t);if(!Number.isFinite(n))throw Error(`persistValueText: "${e}" expects a number, got "${t}"`);return String(n)}if(jB.has(t))return`true`;if(MB.has(t))return`false`;throw Error(`persistValueText: "${e}" expects boolean-ish (1, 0, true, false), got "${t}"`)}function PB(e){try{return r.readFileSync(e,`utf8`)}catch(e){if(e.code===`ENOENT`)return null;throw e}}function FB(e,t,n){try{if(t===null){r.rmSync(e,{force:!0});return}r.mkdirSync(l.dirname(e),{recursive:!0}),Pe(e,t)}catch(t){let r=`config write failed (${e}): ${t.message}`;throw n(`error`,r),Error(r)}}function IB(e){return/^\s*$/.test(e)?null:kl(e)}function LB(e,t){return e!==null&&jl(e,t)!==void 0}function RB(e){if(e.kind===`segment`)return e.when===void 0?e.name:{seg:e.name,when:e.when};if(e.kind===`container`){let{kind:t,direction:n,children:r,...i}=e;return{[n===`horizontal`?`h`:`v`]:r.map(RB),...i}}return e}function zB(e){if(!Od(e))return RB(e);let{rows:t,...n}=e;return{rows:Object.fromEntries(Object.entries(t).map(([e,t])=>[e,RB(t)])),...n}}const BB=nF,VB=BB.segments,HB=BB.presets,UB=BB.root;function WB(e,t,n,r){if(!LB(e,t)&&n===void 0)throw new $(`cannot edit ${r}: neither the config file nor the bundled default declares ${t.join(`.`)}`)}function GB(e,t){let n=Uw(t);return t.scope===`segment-palette`&&WB(e,[`segments`,t.segment],VB[t.segment],n.join(`.`)),n}function KB(e){return kl(zl(e))}function qB(){return Object.entries(UB.rows).map(([e,t])=>{let n=RB(t);return{path:[`root`],fragment:KB({rows:{[e]:n}}),unit:{path:[`root`,`rows`,e],value:n}}})}function JB(e,t){let n=e===null?void 0:jl(e,t);return n===void 0?null:{path:t,fragment:n,unit:null}}function YB(e,t){if(t===void 0)return null;let n=zB(t);return{path:e,fragment:KB(n),unit:{path:e,value:n}}}function XB(e,t){let n=[`presets`,t],r=[...n,`root`],i=HB[t];WB(e,n,i,r.join(`.`));let a=JB(e,r)??YB(r,i?.root);return a!==null&&ou(a.fragment)?a:null}function ZB(e,t){let n=au(t.fragment);return n===null?new Map([[`#`,{path:t.path,unit:t.unit,node:t.fragment}]]):new Map([...e,...n.map(e=>[e.key,{path:[...t.path,`rows`,e.key],unit:t.unit,node:e.value}])])}function QB(e,t){return[...qB(),JB(e,[`root`]),XB(e,t)].filter(e=>e!==null).reduce(ZB,new Map)}function $B(e,t,n){for(let{node:r,...i}of QB(e,t).values())if(cu(r,n))return i;throw new $(`${eV(e,t).join(`.`)} holds no placement "${n}" — the bar you clicked is stale (it reloads on the next render), or the action names a placement the layout never held`)}function eV(e,t){return XB(e,t)?.path??[`root`]}function tV(e,t){return t.scope===`preset-root`?eV(e,t.preset):Uw(t)}function nV(e,{unit:t}){return t===null?e:$l(e,t.path,zl(t.value),Ll)}function rV(e){let t=Hw(e);if(t===null)throw Error(`"${e}" is not a valid persist target`);return t}function iV(e){let t=rV(e);if(t.scope===`preset-root`)throw Error(`"${e}" names a layout, not a value`);return t}function aV(e,t,n,r,i){i(t,n,gV(t,r)),FB(t.path,r,e.logger),e.record(t.path,n,r)}function oV(e,t,n){let r=lV(e,t,n);if(r.length>0)throw new $(`refused: ${e.above.join(`, `)} sets ${r.join(`, `)} over ${e.path}, so this click would change nothing on the bar — edit it there`)}const sV=()=>{};function cV(e,t){try{return t()}catch(t){throw!(t instanceof $)||e.above.length===0?t:new $(`${t.message} — or it is declared by ${e.above.join(`, `)}, which the bar does not edit`)}}function lV(e,t,n){let r=uV(e,t);if(r===null)return[];let i=new Set(mV(pV(r),pV(n)));return mV(fV(e,r),fV(e,n)).filter(e=>!i.has(e))}function uV(e,t){try{return dV(e,t)}catch(e){if(e instanceof pu)return null;throw e}}function dV(e,t){return bA(t===null?e.above:[e.path,...e.above],iF,{entered:()=>{},warned:()=>{}},{projectDir:e.projectDir,cwd:e.cwd},n=>n===e.path&&t!==null?t:r.readFileSync(n,`utf8`))}function fV(e,t){let[n]=t.layers;return n?.path===e.path?n.config:t.base}function pV(e){return e.layers.at(-1)?.config??e.base}function mV(e,t,n=``){return!hV(e)||!hV(t)?JSON.stringify(e)===JSON.stringify(t)?[]:[n]:[...new Set([...Object.keys(e),...Object.keys(t)])].flatMap(r=>mV(e[r],t[r],n===``?r:`${n}.${r}`))}function hV(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function gV(e,t){try{return dV(e,t)}catch(e){throw e instanceof pu?new $(`refused: the config file would not load after this click — ${e.message}`):e}}function _V(e,t){let n=iV(t),r=IB(PB(e)??``),i=r===null?void 0:jl(r,Uw(n));return i!==void 0&&`value`in i?i.value:void 0}function vV(e,t,n){yV(e,t,n,[])}function yV(e,t,n,r){let i=PB(t.path),a=n.reduce((e,[t,n])=>$l(e,GB(IB(e),iV(t)),NB(t,n),Ll),i??``);aV(e,t,i,cV(t,()=>bV(a,t.path,r,e=>e)),oV)}function bV(e,t,n,r){return n.reduce((e,{preset:n,id:i,setting:a,value:o})=>{let s=r(e,n,i),c=$B(IB(s),n,i),l=fu(nV(s,c),c.path,i,a,zl(o));if(l===null)throw new $(`${c.path.join(`.`)} in ${t} has no placement "${i}" — the bar you clicked is stale (it reloads on the next render)`);return l},e)}function xV(e,t,n){let r=IB(e),i=[`presets`,t,`root`];for(let[a,{path:o,unit:s,node:c}]of QB(r,t)){if(!cu(c,n))continue;if(i.every((e,t)=>o[t]===e))return e;let l=s===null?Nl(e,c):zl(s.value);if(a!==`#`)return $l(e,[...i,`rows`,a],l,Ll);if(XB(r,t)!==null)throw new $(`cannot give preset "${t}" its own copy of ${o.join(`.`)}: it already stages rows of its own over that tree`);return $l(e,i,l,Ll)}return e}function SV(e,t){return tu(e,t,t[0]===`presets`&&t.length>2&&!oF(t[1])?2:0)}function CV(e,t,n){let r=n.map(rV),i=PB(t.path);if(i===null)return;let a=r.reduce((e,t)=>SV(e,tV(IB(e),t)),i);a!==i&&aV(e,t,i,a,sV)}function wV(e){let t=e===null?void 0:jl(e,[`presets`]);return t?.kind===`object`?t.entries.map(e=>e.key):[]}function TV(e,t){let n=new Set([...aF,...wV(e),...t.above.flatMap(e=>Object.keys(at.default.parse(r.readFileSync(e,`utf8`)).presets??{}))].map(bp));return Array.from({length:n.size+1},(e,t)=>`custom-${t+1}`).find(e=>!n.has(bp(e)))}function EV(e,t,n,r,i,a){let o=PB(t.path),s=IB(o??``),c=TV(s,t),l=[`presets`,c],u=cV(t,()=>XB(s,n)),d=[...u===null?[]:[[[...l,`root`],u.unit===null?Nl(o??``,u.fragment):zl(u.unit.value)]],...Object.keys(r).length===0?[]:[[[...l,`globals`],zl(r)]]],f=i.map(([e,t])=>{let n=Vw(c,e);return[GB(s,iV(n)),NB(n,t)]}),p=[...d,...f].reduce((e,[t,n])=>$l(e,t,n,Ll),$l(o??``,l,`{}`,Ll));return aV(e,t,o,cV(t,()=>bV(p,t.path,a.map(e=>({...e,preset:c})),xV)),oV),c}function DV(e,t,n,r){let i=PB(t.path);aV(e,t,i,$l(i??``,[`themeDefaults`,n],zl(r),Ll),oV)}function OV(e,t,n){if(oF(n))throw new $(`cannot delete preset "${n}": it is bundled — reset its settings instead`);let r=[`presets`,n],i=PB(t.path),a=IB(i??``);if(i===null||a===null||jl(a,r)===void 0)throw new $(`cannot delete preset "${n}": ${t.path} declares no ${r.join(`.`)} — the bar you clicked is stale; it reloads on the next render`);let o=jl(a,[`globals`,`preset`]);aV(e,t,i,[r,...o?.kind===`string`&&o.value===n?[[`globals`,`preset`]]:[]].reduce((e,t)=>SV(e,t),i),sV)}function kV(e,t,n,r){let i=rV(n);if(i.scope!==`preset-root`)throw Error(`"${n}" is not a "presets.<name>.root" target`);let a=PB(t.path),o=r.op===`remove`?r.target:r.anchor,s=cV(t,()=>$B(IB(a??``),i.preset,o)),c=nV(a??``,s),{after:l,placed:u}=AV(c,s.path,r,()=>{let e=gV(t,c).config;return Nb(e.presets).map(t=>Ib(e,t).node)});if(l===null)throw new $(`${s.path.join(`.`)} in ${t.path} has no placement "${o}" — the bar you clicked is stale (it reloads on the next render), or the action names a placement the layout never held`);return aV(e,t,a,l,oV),u}function AV(e,t,n,r){switch(n.op){case`remove`:return{after:uu(e,t,n.target),placed:null};case`insert`:{let i=OP(n.segment,n.anchor,r());return{after:du(e,t,i,n.anchor,n.relation),placed:i}}}}const jV={load:()=>({}),save:()=>{}},MV=new Set(tw.map(e=>e.sessionKey)),NV=e=>MV.has(e)||e.startsWith(rx),PV=8*1024*1024,FV={past:[],future:[]},IV=e=>e.kind===`session`?`session:${e.key}`:`file:${e.file}`;var LV=class{state=new Map;constructor(e,t,n=jV){this.sessionState=e,this.logger=t,this.storage=n,this.state=new Map(Object.entries(n.load()))}useStorage(e){this.storage=e,this.state=new Map(Object.entries(e.load()))}depth(e){let{past:t,future:n,savepoint:r}=this.state.get(e)??FV;return{undo:t.length,redo:n.length,sinceEdit:r?.net.length??0}}history(e){return this.state.get(e)??FV}begin(){let e=new Map,t=(t,n)=>{let r=e.get(t)??new Map,i=r.get(IV(n));r.set(IV(n),i===void 0?n:{...n,before:i.before}),e.set(t,r)},n=new Map;return{sessionState:TB(this.sessionState,e=>NV(e)||e===`edit.mode`,(e,r,i,a)=>{if(r===`edit.mode`){let t=n.get(e);n.set(e,{before:t===void 0?i:t.before,after:a});return}t(e,{kind:`session`,key:r,before:i,after:a})}),file:(e,n,r,i)=>t(e,{kind:`file`,file:n,before:r,after:i}),commit:()=>{let t=new Map(e),r=new Map(n);e.clear(),n.clear();for(let e of new Set([...t.keys(),...r.keys()])){let n=[...t.get(e)?.values()??[]].filter(e=>e.before!==e.after),i=this.history(e),a=n.length===0?i:GV(i,n),o=r.get(e),s=o===void 0?a:YV(a,o);s!==i&&this.put(e,s)}}}}undo(e){let t=this.history(e),n=t.past.at(-1);if(n===void 0)throw new $(`undo: nothing to undo`);return this.apply(e,n,`before`,`undo`,qV(t,n)),n}rewind(e){let t=this.history(e),{savepoint:n}=t;if(n===void 0)throw new $(`rewind: edit mode has no savepoint — nothing to cancel`);let r=n.net.filter(t=>this.read(e,t)!==t.after),i=new Set(r.map(IV)),a=n.net.filter(e=>!i.has(IV(e))),o=BV(XV(JV(t,n),i));if(this.apply(e,a,`before`,`rewind`,{past:o,future:[],savepoint:{at:o.length,net:[],below:[]}}),r.length>0)throw new $(`rewind: ${r.map(QV).join(`, `)} changed since edit mode opened — kept as it is; everything else edit mode changed was put back`);return a}redo(e){let t=this.history(e),{past:n,future:r}=t,i=r.at(-1);if(i===void 0)throw new $(`redo: nothing to redo`);let a=[...n,i],o=BV(a);return this.apply(e,i,`after`,`redo`,{past:o,future:r.slice(0,-1),...HV(t.savepoint,a.length-o.length,i)}),i}apply(e,t,n,r,i){let a=n===`before`?`after`:`before`,o=t.filter(t=>this.read(e,t)!==t[a]);if(o.length>0){let t=new Set(o.map(IV)),{past:n,future:i,savepoint:a}=this.history(e);throw this.put(e,{past:XV(n,t),future:XV(i,t),...a!==void 0&&{savepoint:{at:XV([...n,...[...i].reverse()].slice(0,a.at),t).length,net:a.net.filter(e=>!t.has(IV(e))),below:XV(a.below,t)}}}),new $(`${r}: ${o.map(QV).join(`, `)} changed since that edit — refusing to overwrite it; this session's undo history no longer steps it`)}let s=[];try{for(let r of t)this.write(e,r,r[n]),s.push(r);this.put(e,i)}catch(t){try{for(let t of s.reverse())this.write(e,t,t[a])}catch(e){throw Error(`${t.message}; and putting the step back failed, so it is half-applied: ${e.message}`)}throw t}}read(e,t){return t.kind===`session`?this.sessionState.get(e,t.key):PB(t.file)}write(e,t,n){t.kind===`file`?FB(t.file,n,this.logger):n===null?this.sessionState.clear(e,t.key):this.sessionState.set(e,t.key,n)}put(e,t){let n=new Map(this.state);for(n.delete(e),(t.past.length>0||t.future.length>0||t.savepoint!==void 0)&&n.set(e,t);n.size>32||RV(n)>PV;){let[e,t]=n.entries().next().value;n.size>1?n.delete(e):t.past.length+t.future.length>0?n.set(e,zV(t)):(this.logger(`warn`,`settings-history: edit mode's changes for session ${e} exceed ${PV} bytes; cancel is no longer available`),n.delete(e))}this.storage.save(Object.fromEntries(n)),this.state=n}};function RV(e){let t=0;for(let{past:n,future:r,savepoint:i}of e.values())for(let e of[...n,...r,...i===void 0?[]:[i.net,...i.below]])for(let n of e)t+=(n.before?.length??0)+(n.after?.length??0);return t}function zV({past:e,future:t,savepoint:n}){return e.length>0?{past:e.slice(1),future:t,...HV(n,1,[])}:{past:e,future:t.slice(1),...HV(n,0,[])}}function BV(e){return e.slice(-50)}const VV=e=>e===ax.member;function HV(e,t,n){return e===void 0?{}:{savepoint:{at:Math.max(0,e.at-t),net:UV(e.net,n),below:e.below}}}function UV(e,t){let n=new Map(e.map(e=>[IV(e),e]));for(let e of t){let t=n.get(IV(e));n.set(IV(e),t===void 0?e:{...t,after:e.after})}return[...n.values()].filter(e=>e.before!==e.after)}const WV=e=>e.map(e=>({...e,before:e.after,after:e.before}));function GV(e,t){let n=[...e.past,t],r=BV(n),{savepoint:i}=e,a=i===void 0?0:Math.max(0,i.at-e.past.length);return{past:r,future:[],...HV(i&&{at:Math.min(i.at,e.past.length),net:i.net,below:[...KV(e.future,a),...i.below]},n.length-r.length,t)}}function KV(e,t){let n=Math.min(t,e.length);return e.slice(e.length-n).reverse()}function qV(e,t){return{past:e.past.slice(0,-1),future:BV([...e.future,t]),...HV(e.savepoint,0,WV(t))}}function JV(e,t){let{past:n,future:r}=e,i=n.slice(0,t.at);return[...i,...KV(r,t.at-i.length),...t.below]}function YV(e,t){if(VV(t.after)&&!VV(t.before))return{...e,savepoint:{at:e.past.length,net:[],below:[]}};if(!VV(t.after)&&VV(t.before)){let{past:t,future:n}=e;return{past:t,future:n}}return e}function XV(e,t){return e.map(e=>e.filter(e=>!t.has(IV(e)))).filter(e=>e.length>0)}function ZV(e){return e.map(QV).join(`, `)}function QV(e){return e.kind===`session`?`session setting "${e.key}"`:e.file}function $V(e){if(typeof e!=`object`||!e)return!1;let t=e,n=e=>e===null||typeof e==`string`;return(t.kind===`session`&&typeof t.key==`string`||t.kind===`file`&&typeof t.file==`string`)&&n(t.before)&&n(t.after)}function eH(e){return Array.isArray(e)&&e.every(e=>Array.isArray(e)&&e.every($V))}function tH(e){if(typeof e!=`object`||!e)return!1;let t=e;return Number.isInteger(t.at)&&t.at>=0&&Array.isArray(t.net)&&t.net.every($V)&&eH(t.below)}function nH(e){if(typeof e!=`object`||!e)return!1;let t=e;return eH(t.past)&&eH(t.future)&&(t.savepoint===void 0||tH(t.savepoint))}function rH(e,t){let n=e=>e.kind===`file`||NV(e.key)?!0:(t.add(e.key),!1),r=e=>e.map(e=>e.filter(n)).filter(e=>e.length>0),{savepoint:i}=e,a=r(e.past),o=r(e.future);return i===void 0?{past:a,future:o}:{past:a,future:o,savepoint:{at:r(e.past.slice(0,i.at)).length,net:i.net.filter(n),below:r(i.below)}}}function iH(e,t){return{load:()=>{let n;try{n=r.readFileSync(e,`utf8`)}catch(e){let n=e.code;return n!==`ENOENT`&&t(`warn`,`settings-history read failed (${n}); starting empty`),{}}try{let e=JSON.parse(n);if(typeof e==`object`&&e&&!Array.isArray(e)&&Object.values(e).every(nH)){let n=new Set,r=Object.fromEntries(Object.entries(e).map(([e,t])=>[e,rH(t,n)]));return n.size>0&&t(`warn`,`settings-history load: dropped the changes to ${[...n].map(e=>`"${e}"`).join(`, `)}, no longer a setting`),r}}catch{}return t(`warn`,`settings-history load: unexpected shape, starting empty`),{}},save:n=>{try{r.mkdirSync(l.dirname(e),{recursive:!0}),Pe(e,JSON.stringify(n),384)}catch(e){let n=`settings-history write failed — the change landed but is not undoable: ${e.message}`;throw t(`error`,n),Error(n)}}}}const aH=e=>!NV(e)&&!TT(e)&&e!==`update.dismissed`;var oH=class{past=new Map;depth(e,t,n){return this.restorable(e,t,n).length}restorable(e,t,n){let r=new Map,i=n=>r.has(n)?r.get(n):t.get(e,n),a=[];for(let t of[...this.past.get(e)??[]].reverse())if(t.every(e=>i(e.key)===e.after&&(e.before===null||n.validate(e.key,e.before).ok))){a.unshift(t);for(let e of t)r.set(e.key,e.before)}return a}begin(e){let t=new Map;return{sessionState:TB(e,aH,(e,n,r,i)=>{let a=t.get(e)??new Map,o=a.get(n);a.set(n,{key:n,before:o?o.before:r,after:i}),t.set(e,a)}),commit:()=>{for(let[e,n]of t){let t=[...n.values()].filter(e=>e.before!==e.after);t.length>0&&this.push(e,t)}t.clear()}}}back(e,t,n){let r=this.past.get(e)??[],i=this.restorable(e,t,n),a=i.at(-1),o=r.length-i.length;if(a===void 0)throw this.put(e,i),new $(`back: nothing to go back to${o>0?` (${o} step(s) over a view since gone, discarded)`:``}`);return(0,Lx.runInAction)(()=>{let n=a.flatMap(({key:e,before:t})=>t===null?[]:[{key:e,value:t}]);n.length>0&&t.setBatch(e,n);for(let{key:n,before:r}of a)r===null&&t.clear(e,n)}),this.put(e,i.slice(0,-1)),{step:a,discarded:o}}push(e,t){let n=this.past.get(e)??[];this.put(e,[...n,t].slice(-20))}put(e,t){for(this.past.delete(e),t.length>0&&this.past.set(e,t);this.past.size>32;)this.past.delete(this.past.keys().next().value)}};function sH(e){let t=oR(e,`doctor.tmux`,[`display`,`-p`,`-t`,e.pane,`#{client_termfeatures}`]);return t.kind===`ok`?{kind:`ok`,value:t.stdout.trim().split(`,`).filter(e=>e!==``)}:{kind:`failed`,reason:t.reason}}function cH(e){return{probeTmux:sH,loadConfig:e}}function lH(e){let t={layers:e.layers,warnings:e.warning===null?[]:e.warning.split(`
204
- `)};return e.error===null?{...t,kind:`loaded`,unused:e.unused}:{...t,kind:`failed`,error:e.error}}function uH(e){let{env:t,statusLine:n}=RT(e);if(t!==void 0&&!zT(t))throw Error(`cannot read ${e}: \`env\` is not an object`);return{path:e,env:t??{},statusLine:n===void 0?{kind:`absent`}:zT(n)?{kind:`present`,refreshInterval:n.refreshInterval}:{kind:`not-an-object`,value:n}}}function dH(e,t){return t===void 0?{kind:`unreported`}:t===null?{kind:`outside`}:{kind:`inside`,hint:t,termfeatures:e.probeTmux(t)}}function fH(e){return{kind:`arrived`,handler:e,bar:QA}}function pH(e,t,n){let r=new Map;for(let i of wu(Ib(e,t).node)){if(i.kind!==`segment`)continue;let t=Lu(e.segments[i.name])[Fu],a=Uu(i,Fu,t,e=>n(e.key));a===`bar`||a===`none`||r.set(i.drafts?.effect?.id??bu(i),a)}return[...r].map(([e,t])=>({placement:e,effect:t}))}function mH(e,t,n,r){let i=e.loadConfig(n),a=IF(i.config,r,()=>!1);return{tmux:dH(e,t.tmux),config:lH(i),effect:a.effect,placementEffects:pH(i.config,a.preset,r),transitions:a.transitions,claudeSettings:uH(FT(PT(t.claudeConfigDir)))}}function hH(e,t){let n=t.claudeSettings.path;switch(e.kind){case`claude-settings`:{let i=$l(LT(n),e.path,JSON.stringify(e.value),Rl);return r.mkdirSync(l.dirname(n),{recursive:!0}),Pe(n,i),{...t,claudeSettings:uH(n)}}default:return e.kind}}const gH={connectMs:200,budgetMs:500};async function _H(e){let n=e.includes(`--json`),r=await vH();if(r.kind!==`ok`&&(t.stderr.write(`daemon-stats: ${ZA(r)}\n`),t.exit(1)),n){t.stdout.write(JSON.stringify(r.value,null,2)+`
205
- `);return}t.stdout.write(SH(r.value))}function vH(){return GA({kind:`stats`},gH,e=>`stats`in e?e.stats:void 0)}function yH(e){return e<1024?`${e}B`:e<1024*1024?`${(e/1024).toFixed(1)}KB`:`${(e/1024/1024).toFixed(1)}MB`}function bH(e,t){let n=e+t;return n===0?`n/a`:`${(e/n*100).toFixed(1)}%`}function xH(e){return e<60?`${e}s`:e<3600?`${Math.floor(e/60)}m${e%60}s`:`${Math.floor(e/3600)}h${Math.floor(e%3600/60)}m`}function SH(e){let t=[];t.push(`cc-candybar daemon stats`),t.push(``),t.push(`process`),t.push(` pid ${e.pid}`),t.push(` version ${e.version}`),t.push(` protocol ${e.protocolVersion}`),t.push(` startedAt ${e.startedAt}`),t.push(` uptime ${xH(e.uptimeSec)}`),t.push(` rss ${yH(e.rssBytes)}`),t.push(` heapUsed ${yH(e.heapUsedBytes)}`),t.push(` heapTotal ${yH(e.heapTotalBytes)}`),t.push(` external ${yH(e.externalBytes)}`),t.push(` arrayBuffers ${yH(e.arrayBuffersBytes)}`),t.push(``),t.push(`requests`),t.push(` total ${e.requests.total}`),t.push(` errored ${e.requests.errored}`),t.push(` timedOut ${e.requests.timedOut}`),t.push(` inFlight ${e.requests.inFlight}`),t.push(``),t.push(`gitCache`),t.push(` size ${e.gitCache.size}`),t.push(` hit rate ${bH(e.gitCache.hits,e.gitCache.misses)} (${e.gitCache.hits} / ${e.gitCache.hits+e.gitCache.misses})`),t.push(` invalidations ${e.gitCache.invalidations}`),t.push(``),t.push(`usageCache`),t.push(` size ${e.usageCache.size}`),t.push(` hit rate ${bH(e.usageCache.hits,e.usageCache.misses)} (${e.usageCache.hits} / ${e.usageCache.hits+e.usageCache.misses})`),t.push(` sweeps ${e.usageCache.sweeps}`),t.push(``),t.push(`renderCache`),t.push(` size ${e.renderCache.size}`),t.push(``),t.push(`effectCache`),t.push(` sessions ${e.effectCache.sessions}`),t.push(` effects ${e.effectCache.effects}`),t.push(``),t.push(`watchers`),t.push(` active ${e.watchers.active}`),t.push(` opened ${e.watchers.opened}`),t.push(` closed ${e.watchers.closed}`),t.push(` evicted ${e.watchers.evicted}`),t.push(``),t.push(`subprocesses`),t.push(` total ${e.subprocesses.total}`),t.push(` inFlight ${e.subprocesses.inFlight}`),t.push(` lastMinute ${e.subprocesses.lastMinute}`);let n=Object.entries(e.subprocesses.byCategory),r=n.reduce((e,[t])=>Math.max(e,t.length),13);for(let[i,a]of n){let n=e.subprocesses.p50DurationMs[i],o=e.subprocesses.p99DurationMs[i],s=n!==void 0&&o!==void 0?` (p50 ${n}ms · p99 ${o}ms)`:``;t.push(` ${i.padEnd(r)} ${a}${s}`)}return e.nextRestartReason&&(t.push(``),t.push(`nextRestart ${e.nextRestartReason}`)),t.join(`
201
+ `);n.push(e[0]);for(let r=1;r<e.length;r++)t.push(n),n=[e[r]]}return t.push(n),t}function jz(e){let t=new Map;return e.map(e=>{let n=`${e.place}.${e.band}`,r=t.get(n)??0;return t.set(n,r+1),{line:e,row:`${n}#${r}`}})}function Mz(e,t){let n=[],r=[],i;for(let a of t)(a.band===`own`?n:r).push(a),i??=a.cells.find(t=>t.placement.id===e)?.placement.ground;return{drawing:i===void 0?null:{own:r.length===0?n:[],ground:i},deeper:r}}function Nz(e){return{...e,cells:e.cells.map(vR)}}function Pz(e,t){let n=t.flatMap(e=>e.filter(e=>e.place===`above`)),r=t.map(e=>e.filter(e=>e.place===`flow`));return[...n,...Fz(e,r)]}function Fz(e,t){switch(e){case`vertical`:return t.flatMap(e=>e);case`horizontal`:return t.reduce((e,t)=>Math.max(e,t.length),0)===0?[]:[{cells:t.flatMap(e=>e[0]?.cells??[]),band:`own`,place:`flow`},...t.flatMap(e=>e.slice(1))]}}function Iz(e,t){let n=(e,r)=>t(e)?e.kind===`segment`?[{cells:[{name:e.name,address:r,settings:e.settings}],band:`own`,place:`flow`}]:Pz(e.direction,e.children.map((t,i)=>n(t,[...r,Lz(e,i)]))):[];return n(e,[]).map(e=>[...e.cells])}function Lz(e,t){return{index:t,count:e.children.length,distribution:e.distribution,axis:yu[e.direction]}}const Rz={compile(e,t){return{kind:`container`,direction:e.direction,when:t.when,distribution:Ps(e.distribution),children:e.children.map((e,n)=>t.compileChild(e,Tu(t.path,n)))}},render(e,t){return Pz(e.direction,e.children.map((n,r)=>t.renderChild(n,t.visible,Lz(e,r))))}},zz={drop:e=>e.place,above:()=>`above`},Bz={drop:(e,t)=>({lead:t(),stays:e}),above:e=>({lead:e.slice(0,1).flatMap(e=>e.cells),stays:e.slice(1)})},Vz={compile(e,t){return{kind:`segment`,when:t.when,name:e.name,id:bu(e),settings:t.placementSettings(e),...e.opens!==void 0&&{opens:{open:t.parse(Kd(e.opens.ref),`opens`),body:t.compileChild(e.opens.body,Eu(t.path)),key:e.opens.ref.key,placement:e.opens.placement}},...e.lead!==void 0&&{lead:t.parse(e.lead,`lead`)},...e.trail!==void 0&&{trail:t.parse(e.trail,`trail`)}}},render:(e,t)=>t.placed(e.id,Hz(e,t))};function Hz(e,t){let n=t.lookupSegment(e.name);if(!n)throw Error(`Layout segment "${e.name}" has no matching segment`);let{seg:r,compiled:i}=n;if(!t.visible)return[];let a=FS(t.scope,e.settings);try{if(!mR(i.when,a))return[];let n=fw(e.settings.theme,t.palette),o={id:e.id,effect:e.settings.effect,ground:Jw(n)},s=e.opens!==void 0&&mR(e.opens.open,t.scope),{styles:c,fragments:l,lead:u,trail:d,drops:f,open:p}=t.evaluateSegment(e,a,n,t.region,{bg:i.bg,fg:i.fg,body:i.template,lead:e.lead,trail:e.trail},s),m=p?c.trigger:c.closed,h={width:r.width??`auto`,justify:r.justify??`left`,truncate:r.truncate??`right`,baseStyle:m,padding:t.padding,placement:o},g=e.opens,_=g===void 0?[]:t.renderBody(g.body,s,c.disclosure).map(e=>({...e,place:zz[g.placement](e)})),v=Az(CR(l,m)).map((e,t)=>({cells:xR(e,{...h,lead:t===0?CR(u,m):[],trail:t===0?CR(d,m):[]}),band:`own`,place:`flow`})),y=f.map(e=>({cells:xR(CR([e],c.band),{...h,baseStyle:c.band}),band:`deeper`,place:`flow`})),b=(e,t,n)=>xR(CR([e],t),{...h,width:`auto`,baseStyle:t,padding:n}),x=_.findIndex(e=>e.band===`own`),{lead:S,stays:C}=g!==void 0&&x!==-1?Bz[g.placement](v,()=>b(t.closeDisclosure(g.key),c.close,t.padding)):{lead:[],stays:v},ee=S.flatMap(e=>b(new W(` `.repeat(_R(e).reduce((e,t)=>e+t.cellLength,0))),c.trigger,0)),w=(e,t)=>e.band===`own`?t===x?S:ee:[],te=_.map((e,t)=>({cells:[...w(e,t),...e.cells],band:`deeper`,place:e.place})),ne=[...C,...y];return t.perSegmentSink!==void 0&&t.perSegmentSink.set(e.id,[...ne.flatMap(e=>e.cells),..._.flatMap(w)].flatMap(_R)),[...ne,...te]}catch(n){let r=n.message??String(n);t.onSegmentError?.(e.id,r);let i=r.replace(/\s*\n\s*/g,` `);return[{cells:xR([new W(`⚠ ${e.id}: ${i}`,{end:``})],{width:`auto`,justify:`left`,truncate:`right`,padding:0,placement:{id:e.id,effect:`bar`,ground:Jw(t.palette)},lead:Uz(e.lead,e,a,t),trail:Uz(e.trail,e,a,t)}),band:`own`,place:`flow`}]}}function Uz(e,t,n,r){if(e===void 0)return[];try{return r.evaluateSegment(t,n,r.palette,r.region,{bg:void 0,fg:void 0,body:e,lead:void 0,trail:void 0},!1).fragments}catch(e){return r.onSegmentError?.(t.id,e.message??String(e)),[]}}const Wz={container:Rz,segment:Vz};function Gz(e){return Wz[e]}function Kz(e){if(`ttl`in e)return{kind:`ttl`,durationMs:AC(e.ttl)};if(`watch_file`in e)return{kind:`watch_file`,path:e.watch_file};if(`depends_on`in e)return{kind:`depends_on`,varNames:e.depends_on};if(`key`in e)return{kind:`key`,template:e.key};if(`never`in e)return{kind:`never`};throw Error(`Unknown CacheDecl discriminator — loader invariant violated: ${JSON.stringify(e)}`)}function qz(e,t){switch(Au(e)){case`json`:return{kind:`json`,default:t};case`regex`:return{kind:`regex`,regex:new RegExp(e.regex),default:t};case`text`:return{kind:`text`,default:t}}}function Jz(e,t,n,r){switch(n.kind){case`literal`:e.declareLiteral(t,n.value);break;case`dropped`:e.declareFailedDocument(t,n.reason);break;case`input`:e.declareInput(t,n.path,n.type??`string`,n.default);break;case`env`:e.declareEnv(t,n.name,n.default);break;case`file`:e.declareFile(t,n.path,{readMode:n.readMode,cache:Kz(n.cache),parse:qz(n.parse,n.default)});break;case`shell`:e.declareShell(t,n.command,{cwd:r,cache:Kz(n.cache),parse:qz(n.parse,n.default)});break;case`template`:e.declareTemplate(t,n.template,{varDefault:n.default});break;case`time`:e.declareTime(t,{format:n.layout,varDefault:n.default});break;case`git`:e.declareGit(t,{field:n.field,cwd:r,varDefault:n.default});break;case`state`:e.declareState(t,{key:n.key,...n.default!==void 0&&{varDefault:n.default}});break}}function Yz(e,t){let n=eh.EMPTY;for(let[r,i]of Object.entries(t))try{n=e.parse(`{{ define "${r}" }}${i}{{ end }}`,n).defines()}catch(e){throw Error(`Template parse error in helpers.${r}: ${e.message}`,{cause:e})}return n}const Xz=(e,t,n,r,i)=>{let a=lF(t,cF(n,e.themeDefaults));return{variation:Os[r??cl(void 0,null,a.variation)],shade:Es[i??dl(void 0,null,a.shade)]}};function Zz(e,t,n){let r=n.cwd,i={store:t.variableStore,compiled:new Map,chromeCols:nP({endcaps:`powerline`,charset:rl}),width:80,padding:1,seamCols:rP({endcaps:`powerline`,charset:rl}),layout:()=>[],look:void 0},a=ZR(t.drawnAt),o={action:i,activeSegment:a},s=Object.keys(e.styles),c=Nb(e.presets),l=FD(e),u=MS({extraFuncs:{...zR(i),...lz(i,a),...fz(i,a),...gz(i,a),...xz(i,a),...Tz(o),...Oz(a),styles:{fn:()=>s,argTypes:[],arity:{kind:`exact`}},presets:{fn:()=>c,argTypes:[],arity:{kind:`exact`}}},clock:t.now,drawnAt:t.drawnAt}),d=Yz(u,e.helpers),f=e=>u.parse(e,d),p=new Map,m=e=>{let t=p.get(e);if(t!==void 0)return t;let n=f(e);return p.set(e,n),n},h=new Map;for(let[t,n]of aw)n in e.variables&&h.set(t,n);for(let[t,n]of Object.entries(e.variables))n.kind===`state`&&!h.has(n.key)&&h.set(n.key,t);for(let[t,n]of Object.entries(e.segments))if(n.vars)for(let[e,r]of Object.entries(n.vars))r.kind===`state`&&!h.has(r.key)&&h.set(r.key,`${t}.${e}`);i.compiled=DR(f,e.actions,h,l);let g=[];for(let[n,i]of Object.entries(e.variables))try{Jz(t,n,i,r)}catch(e){g.push(`Variable "${n}": ${e.message??String(e)}`)}for(let[n,i]of Object.entries(e.segments))if(i.vars)for(let[e,a]of Object.entries(i.vars))try{Jz(t,`${n}.${e}`,a,r)}catch(t){g.push(`Variable "${n}.${e}": ${t.message??String(t)}`)}let _=Object.create(null);for(let[t,n]of Object.entries(e.segments)){let e=(e,n,r=f)=>{try{return r(e)}catch(e){throw Error(`Template parse error in segments.${t}.${n}: ${e.message}`,{cause:e})}};_[t]={when:n.when===void 0?void 0:e(n.when,`when`,m),template:e(n.template,`template`),bg:n.bg===void 0?void 0:e(n.bg,`bg`),fg:n.fg===void 0?void 0:e(n.fg,`fg`)}}let v=(e,t,n)=>{try{return m(e)}catch(e){throw Error(`Template parse error in ${t}.${n}: ${e.message}`,{cause:e})}},y=t.variableStore,b=t=>{let n=Lu(e.segments[t.name]),r=Object.create(null);for(let[e,i]of Object.entries(n))Object.defineProperty(r,e,{enumerable:!0,get:()=>Uu(t,e,i,e=>String(y.read(e.variable)))});return Object.freeze(r)},x=(e,t)=>{let n={path:t,when:e.when===void 0?void 0:v(e.when,t,`when`),parse:(e,n)=>v(e,t,n),compileChild:x,placementSettings:b};return Gz(e.kind).compile(e,n)},S=new Map;for(let t of c){let{node:n,path:r}=Ib(e,t);S.set(t,x(n,r))}let C=new Map(Ic.map(e=>[e,new Map])),ee=[[`globals`,e.globals],...Object.entries(e.presets).map(([e,t])=>[`presets.${e}.globals`,t.globals??{}])];for(let[e,t]of ee)for(let n of Ic){let r=t[n];if(!Lc(r))continue;let i=`${e}.${n}`,a=C.get(n),o=a.get(r);a.set(r,o===void 0?{where:i,template:Qz(f,i,r)}:{where:`${o.where}, ${i}`,template:o.template})}return{segments:_,roots:S,activeSegment:a,menuRuntime:o,globalExpressions:C,loadWarnings:g}}function Qz(e,t,n){try{return e(n)}catch(e){throw Error(`${t} is not a valid template: ${e instanceof Error?e.message:String(e)}`)}}function $z(e,t,n){let r=e.globalExpressions.get(t).get(n);if(r===void 0)throw Error(`the ${t} rule ${JSON.stringify(n)} reached the render but no compiled template exists — registerDslConfig and the resolution disagree about isExpression`);return r}function eB(e,t){return e.template.evaluate(t).map(e=>e.plain).join(``)}function tB(e,t){return e.kind===`decided`?e.name:t}function nB(e,t,n,r,i,a,o,s,c){let{perSegmentSink:l,onSegmentError:u,onRenderWarning:d}=s??{},f=new Set;r.renderAt(a),r.drawAt(al(o.colorCompatibility));let{preset:p=jb}=c??{},m=Lb(e,p),h=c?.style??Hc(`none`,e.styles),g=c?.theme??vw(void 0,null,m.palette),_=Xz(e,m,g,c?.variation,c?.shade),v=c?.effect??Yc(void 0,null,m.effect),y=(e,t,n)=>({...i,term:{cols:o.width},theme:{effective:e},style:{effective:t},effect:{effective:n}});r.applyInput(y(tB(g,kc),tB(h,Bc),tB(v,Wc))),t.menuRuntime.action.chromeCols=nP(o),t.menuRuntime.action.padding=o.padding,t.menuRuntime.action.width=o.width,t.menuRuntime.action.seamCols=rP(o);let b=NS(n),x=zc(g,e=>{let n=$z(t,`palette`,e);return _w(eB(n,b),n.where,e=>d?.({kind:`theme-rule`,message:e}))}),S=zc(h,n=>Hc(eB($z(t,`style`,n),b),e.styles)),C=zc(v,e=>Jc(eB($z(t,`effect`,e),b)));(x!==g||S!==h||C!==v)&&r.applyInput(y(x.name,S.name,C.name));let ee=x.value,w=mw(ee,S.value);t.menuRuntime.action.look={basePalette:ee,palette:w,decor:_};let te=(c?.effects??new KN(``)).motion(C.value,a,{transitions:c?.transitions??xl(void 0,null,m.transitions),source:{config:t,preset:p,revision:r.stateRevision(),width:o.width},returned:Mz,hold:Nz});l?.clear();let ne=n=>{let r=e.segments[n],i=t.segments[n];return r!==void 0&&i!==void 0?{seg:r,compiled:i}:void 0},re=(e,n,i,a,o,s)=>{try{let c=r.drawnAt(),{tint:l,text:u,disclosure:d}=Ec(i,a,c),p=QR(t.activeSegment,e.name,e.id,i,d,l,u),m=Xw(p,c,o.bg,o.fg,n),h=()=>mc(i,d,c);s&&(p.bg=h().state);let g=o.body.evaluate(n),_=p.drops.length>0||s;if(_){let e=h();p.bg=e.state;for(let t of e.shortfalls)f.add(t)}let v=o.lead?.evaluate(n)??[],y=o.trail?.evaluate(n)??[];return{styles:{closed:m,get trigger(){return VR(i,h().state,c)},get band(){return VR(i,h().plane,c)},get close(){return WR(i,h().state,c)},disclosure:d},fragments:g,lead:v,trail:y,drops:p.drops,open:_}}finally{t.activeSegment.current=null}},ie=(e,t,r)=>{let i=t&&mR(e.when,b),a={scope:b,palette:w,visible:i,padding:o.padding,region:r,perSegmentSink:l,onSegmentError:u,evaluateSegment:re,lookupSegment:ne,renderChild:(e,t,n)=>ie(e,t,wc(r,n)),renderBody:(e,t,n)=>ie(e,i&&t,Tc(n)),closeDisclosure:e=>BR(n,e),placed:te.placed};return Gz(e.kind).render(e,a)},T=t.roots.get(p);if(T===void 0)throw Error(`Preset "${p}" has no compiled layout — registerDslConfig compiles one per declared preset and effectivePresetName collapses unknown names to "${jb}"; a miss here is merge/policy drift (have: ${[...t.roots.keys()].join(`, `)})`);let E=e=>{if(!mR(e.when,b))return!1;if(e.kind===`container`)return!0;if(KD(e.name)===void 0)return!1;try{return mR(t.segments[e.name].when,FS(b,e.settings))}catch{return!0}};t.menuRuntime.action.layout=()=>Iz(T,E).map(e=>e.flatMap(({name:e,address:t,settings:n})=>{let r=KD(e);return r===void 0?[]:[{name:r,address:t,palette:fw(n.theme,w)}]}));let ae=jz(ie(T,!0,Cc(_))).map(({line:e,row:t})=>{let n=SR(e.cells,o);return iP(n.map(e=>e.owner),o,te.row(t,n))}).join(`
202
+ `);te.drawn();for(let e of f)d?.({kind:`band-floor`,message:e});return ae}function*rB(e){yield*Object.entries(e.variables??{});for(let[t,n]of Object.entries(e.segments??{}))for(let[e,r]of Object.entries(n.vars??{}))yield[`${t}.${e}`,r]}function*iB(e){for(let t of Object.values(e.segments))for(let e of[t.template,t.bg,t.fg,t.when])e!==void 0&&(yield e);for(let t of Nb(e.presets)){for(let n of wu(Ib(e,t).node))n.when!==void 0&&(yield n.when);let n=Lb(e,t);for(let e of Ic){let t=n[e];Lc(t)&&(yield t)}}for(let[,t]of rB(e))t.kind===`template`&&(yield t.template),Mu(t)&&t.cache&&`key`in t.cache&&(yield t.cache.key);for(let t of Object.values(e.actions))`copy`in t&&(yield t.copy),`open`in t&&(yield t.open),`preset`in t&&t.preset===`delete`&&(yield t.name)}function aB(e,t){return e===t||t.startsWith(`${e}.`)||e.startsWith(`${t}.`)}function oB(e,t){let n=new Set,r=new Set,i=new Set;for(let e of iB(t)){for(let r of Cx(e,t.helpers).keys())n.add(r);for(let{name:n}of Dx(e,t.helpers))r.add(n);for(let n of Ox(e,t.helpers))i.add(n)}for(let[,e]of rB(t))if(Mu(e)&&e.cache&&`depends_on`in e.cache)for(let t of e.cache.depends_on)n.add(t);let a=new Set(r);for(let e of r){let n=t.actions[e];if(n!==void 0&&`do`in n)for(let e of n.do)a.add(e)}let o=new Set,s=new Set;for(let e of a){let n=t.actions[e];if(n!==void 0&&(`set`in n&&o.add(n.set),`insertSegment`in n&&s.add(n.insertSegment),`insertSegmentFrom`in n&&Array.isArray(n.insertSegmentFrom)))for(let e of n.insertSegmentFrom)s.add(e)}for(let e of Nb(t.presets))for(let n of wu(Ib(t,e).node))n.kind===`segment`&&s.add(n.name);let c=(e,t)=>[...n].some(t=>aB(t,e))||t.kind===`state`&&o.has(t.key),l=e=>[...e].filter(e=>!Ep(e)),u=(e,t,n)=>l(t).filter(e=>!n(e)).map(t=>({kind:e,name:t})),d=new Map(rB(e));return[...u(`variable`,d.keys(),e=>c(e,d.get(e))),...u(`action`,Object.keys(e.actions??{}),e=>a.has(e)),...u(`helper`,Object.keys(e.helpers??{}),e=>i.has(e)),...u(`segment`,Object.keys(e.segments??{}),e=>s.has(e))]}var sB=class{kind=`box`;cell;lastChangedAt;constructor(e,t,n){this.name=e,this.type=t,pB(e,t,n,`initial value`),this.cell=Lx.observable.box(n,{deep:!1}),this.lastChangedAt=Date.now()}read(){return this.cell.get()}set(e){pB(this.name,this.type,e,`set value`),!Object.is(this.cell.get(),e)&&(this.cell.set(e),this.lastChangedAt=Date.now())}lastUpdatedMs(){return this.lastChangedAt}},cB=class{kind=`computed`;cell;constructor(e,t,n){this.name=e,this.type=t,this.cell=(0,Lx.computed)(()=>{let e=n();return pB(this.name,this.type,e,`computed result`),e},{keepAlive:!0})}read(){return this.cell.get()}lastUpdatedMs(){return null}},lB=class{kind=`document`;cell;lastChangedAt;constructor(e,t){this.name=e,this.cell=Lx.observable.box(fB(t),{deep:!1}),this.lastChangedAt=Date.now()}read(){return this.cell.get()}set(e){let t=fB(e);dB(this.cell.get(),t)||(this.cell.set(t),this.lastChangedAt=Date.now())}lastUpdatedMs(){return this.lastChangedAt}};function uB(e){return JSON.stringify(e)}function dB(e,t){return uB(e)===uB(t)}function fB(e){return e.kind===`ok`?{kind:`ok`,value:Rx(e.value)}:e}function pB(e,t,n,r){let i=zx(n);if(i!==t)throw TypeError(`Variable "${e}": ${r} type ${i} does not match declared type ${t}`)}var mB=class{nodes=new Map;defineBox(e,t,n){this.assertNotDefined(e),this.nodes.set(e,new sB(e,t,n))}defineDocument(e,t){this.assertNotDefined(e),this.nodes.set(e,new lB(e,t))}defineComputed(e,t,n){this.assertNotDefined(e);let r=e=>this.read(e);this.nodes.set(e,new cB(e,t,()=>n(r)))}read(e){return this.requireVar(e).read()}readDocument(e){let t=this.requireNode(e);if(t.kind!==`document`)throw TypeError(`Variable "${e}" is a ${t.kind}, not a document`);return t.read()}setDocument(e,t){let n=this.requireNode(e);if(n.kind!==`document`)throw TypeError(`Variable "${e}" is a ${n.kind}, not a document (use defineDocument to create one)`);(0,Lx.runInAction)(()=>n.set(t))}setBox(e,t){let n=this.requireNode(e);if(n.kind!==`box`)throw TypeError(`Variable "${e}" is a ${n.kind}, not a box (use defineBox to create a settable variable)`);(0,Lx.runInAction)(()=>n.set(t))}runInAction(e){(0,Lx.runInAction)(e)}has(e){return this.nodes.has(e)}getType(e){return this.requireVar(e).type}getKind(e){return this.requireNode(e).kind}changeKey(e){let t=this.requireNode(e);if(t.kind===`document`)return uB(t.read());try{return String(t.read())}catch(e){return`failed:${e instanceof Error?e.message:String(e)}`}}getNode(e){let t=this.requireNode(e);return t.kind===`document`?{name:t.name,kind:t.kind,read:()=>t.read(),lastUpdatedMs:()=>t.lastUpdatedMs()}:{name:t.name,type:t.type,kind:t.kind,read:()=>t.read(),lastUpdatedMs:()=>t.lastUpdatedMs()}}names(){return[...this.nodes.keys()]}requireNode(e){let t=this.nodes.get(e);if(!t)throw ReferenceError(`Unknown variable "${e}"`);return t}requireVar(e){let t=this.requireNode(e);if(t.kind===`document`)throw TypeError(`Variable "${e}" is a document; read its fields by path (.${e}.<field>)`);return t}assertNotDefined(e){if(this.nodes.has(e))throw Error(`Variable "${e}" is already declared`)}};function hB(e,{plugins:t,config:n}){let{checkout:r,loaded:i,dropped:a,unreached:o}=t,s=r===null?`-`:`${r.git?`git`:`dir`}:${r.root}`,c=e=>{let t=Wk(e),r=t===void 0?void 0:n.variables[Kk(t)];return r?.kind===`file`?r.path:`none`};return`config load ${e.join(` < `)||`<default>`}: plugins loaded=${i.length} dropped=${a.length} unplaced=${o.length} checkout=${s}`+i.map(e=>` +${e} data=${c(e)}`).join(``)+a.map(e=>` -${e.path} (${e.reason})`).join(``)+o.map(e=>` ~${e.path} (${e.reason})`).join(``)}function gB(e,t,n){return e+`\0`+t+`\0`+(n??``)}function _B(e,t){return new Set(Nb(e.presets).filter(n=>Ib(e,n).path===`root`?t.root!==void 0:t.presets?.[n]?.root!==void 0))}function vB(e,t){let n=new Map,{roots:r,loaded:i,dropped:a,unreached:o}=e.state.plugins;for(let t of[...Mk(e.projectDir,e.cwd,e.configFile),...r,...i,...[...a,...o].map(e=>e.path)]){let{dir:e,name:r}=Nx(t),i=n.has(e)?n.get(e):new Set;i?.add(r),n.set(e,i)}for(let e of r){let{dir:t,name:r,leaf:i}=Nx(l.join(e,`_`));i&&r===`_`&&n.set(t,null)}return{files:t,dirs:[...n.entries()].sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>t===null?{path:e}:{path:e,filenames:[...t].sort()})}}function yB(e){return e.filter(Boolean).join(`
203
+ `)||null}function bB(e,t,n,r,i=()=>{}){let{layers:a,config:o,installed:s}=bA(t.layers,iF,{entered:i,warned:e=>n.push(...e)},{projectDir:t.projectDir,cwd:e});i(a.length===1?a[0].path:null);let c=a.at(-1)?.config??iF,l=a.find(e=>e.path===t.home)?.raw??{},u=new mB,d=new ZC(u,o.globals.default_empty_value??``,r.gitService,r.sessionState),f;try{f=Zz(o,d,{cwd:e}),n.push(...f.loadWarnings),WI(o),VP(o)}catch(e){throw d.dispose(),e}return{config:o,store:u,registry:d,compiled:f,neededInputPaths:XF(o),lastRenderCellsBySegment:new Map,authoredRoots:_B(c,l),fileHeldSettings:AI(l),unused:[...new Map(a.flatMap(e=>oB(e.raw,c)).map(e=>[`${e.kind}:${e.name}`,e])).values()],plugins:{checkout:s.checkout,roots:s.roots,loaded:[...s.rendering.values()],dropped:[...s.dropped,...a.flatMap(e=>e.plugins.dropped)],unreached:s.unreached,reached:s.reached,rendering:s.rendering}}}function xB(e,t,n,r){let i=Pk(e,t,n),a={layers:i.kind===`chain`?i.layers:[],home:i.home,projectDir:e},o=[zk(e,t),Lk(i)],s,c=null;try{s=bB(t,a,o,r,e=>{c=e})}catch(e){return e instanceof pu&&o.push(...e.warnings),{layers:a.layers,home:a.home,failedFile:c,warning:yB(o),state:null,error:e instanceof pu||e instanceof Error?e.message:String(e)}}return{layers:a.layers,home:a.home,warning:yB(o),state:s,error:null}}function SB(e,t,n){return bB(e,{layers:[],home:``,projectDir:t},[],n)}var CB=class{entries=new Map;deps;maxEntries;observers;constructor(e,t={}){this.deps=e,this.maxEntries=t.maxEntries??256,this.observers=t.observers??{}}getOrCreate(e,t,n){let r=gB(e,t,n),i=this.entries.get(r);if(i)return this.entries.delete(r),this.entries.set(r,i),i;let a=xB(e,t,n,this.deps);a.state!==null&&Z(`info`,hB(a.layers,a.state));let o={projectDir:e,cwd:t,configFile:n,configLayers:[],configHome:``,failedFile:null,lastError:a.error,lastWarning:a.warning,state:a.state??SB(t,e,this.deps),watcher:null,watcherKey:null};if(this.entries.set(r,o),this.entries.size>this.maxEntries){let e=this.entries.entries().next().value;if(e!==void 0){let[t,n]=e;n.state.registry.dispose(),n.watcher?.release(),this.entries.delete(t)}}return this.refreshWatcher(o,a),this.observers.onReload?.(o),o}reload(e,t,n){this.reloadInto(this.getOrCreate(e,t,n))}reloadInto(e){let t=xB(e.projectDir,e.cwd,e.configFile,this.deps);e.lastWarning=t.warning,e.lastError=t.error,t.state!==null&&(Z(`info`,hB(t.layers,t.state)),e.state.registry.dispose(),e.state=t.state),this.refreshWatcher(e,t),this.observers.onReload?.(e)}refreshWatcher(e,t){e.configLayers=t.layers,e.configHome=t.home,e.failedFile=t.error===null?null:t.failedFile;let n=vB(e,t.layers),r=`config:${e.projectDir}:${e.cwd}:${e.configFile??``}:${JSON.stringify(n)}`;e.watcher!==null&&e.watcherKey===r||(e.watcher?.release(),e.watcherKey=r,e.watcher=this.deps.watchers.acquire(r,n,()=>this.onConfigChanged(e)))}onConfigChanged(e){Z(`info`,`config change detected for entry projectDir=${e.projectDir} cwd=${e.cwd}`),this.reloadInto(e)}get size(){return this.entries.size}firstState(){return this.entries.values().next().value?.state??null}};const wB=16384;var TB=class{startedAt=new Date;requestsTotal=0;requestsErrored=0;requestsTimedOut=0;inFlight=0;watchersOpened=0;watchersClosed=0;watchersEvicted=0;subprocessTotal=0;subprocessInFlight=0;subprocessCount=new Map;subprocessHistogram=new Map;subprocessHistogramRotator=new Map;rollingTimestamps=[];rollingHead=0;launchStats={onStart:e=>{this.subprocessTotal++,this.subprocessInFlight++,this.subprocessCount.set(e,(this.subprocessCount.get(e)??0)+1),this.recordRollingNow()},onEnd:(e,t)=>{this.subprocessInFlight=Math.max(0,this.subprocessInFlight-1),this.recordDuration(e,t)}};recordRollingNow(){let e=Date.now();if(this.rollingTimestamps.length<wB){this.rollingTimestamps.push(e);return}this.rollingTimestamps[this.rollingHead]=e,this.rollingHead=(this.rollingHead+1)%wB}recordDuration(e,t){let n=this.subprocessHistogram.get(e);if(n||(n=[],this.subprocessHistogram.set(e,n)),n.length<16){n.push(t);return}let r=(this.subprocessHistogramRotator.get(e)??0)%16;n[r]=t,this.subprocessHistogramRotator.set(e,r+1)}snapshotSubprocesses(){let e=Date.now()-6e4,t=0;for(let n of this.rollingTimestamps)n>=e&&t++;let n={};for(let[e,t]of this.subprocessCount)t>0&&(n[e]=t);let r={},i={};for(let[e,t]of this.subprocessHistogram){if(t.length===0)continue;let n=[...t].sort((e,t)=>e-t),a=Math.floor(n.length*.5),o=Math.min(n.length-1,Math.floor(n.length*.99)),s=n[a],c=n[o];s!==void 0&&(r[e]=s),c!==void 0&&(i[e]=c)}return{total:this.subprocessTotal,inFlight:this.subprocessInFlight,lastMinute:t,byCategory:n,p50DurationMs:r,p99DurationMs:i}}snapshot(e){let t=process.memoryUsage();return{pid:process.pid,version:QA,protocolVersion:3,startedAt:this.startedAt.toISOString(),uptimeSec:Math.floor((Date.now()-this.startedAt.getTime())/1e3),rssBytes:t.rss,heapUsedBytes:t.heapUsed,heapTotalBytes:t.heapTotal,externalBytes:t.external,arrayBuffersBytes:t.arrayBuffers,requests:{total:this.requestsTotal,errored:this.requestsErrored,timedOut:this.requestsTimedOut,inFlight:this.inFlight},gitCache:e.gitCache,usageCache:e.usageCache,renderCache:{size:e.renderCacheSize},effectCache:e.effectCache,watchers:{active:e.watchersActive,opened:this.watchersOpened,closed:this.watchersClosed,evicted:this.watchersEvicted},subprocesses:this.snapshotSubprocesses(),nextRestartReason:e.nextRestartReason??null,handlerProbes:e.handlerProbes}}};function EB(e,t,n){let r=(r,i,a)=>{let o=i.filter(t).map(t=>({key:t,before:e.get(r,t)}));a();for(let{key:t,before:i}of o)n(r,t,i,e.get(r,t))};return{get:(t,n)=>e.get(t,n),revision:t=>e.revision(t),set:(t,n,i)=>r(t,[n],()=>e.set(t,n,i)),setBatch:(t,n)=>r(t,n.map(e=>e.key),()=>e.setBatch(t,n)),clear:(t,n)=>r(t,[n],()=>e.clear(t,n))}}const DB={load:()=>({}),save:()=>{},flush:()=>{}};var OB=class{sessions;storage;head=0;atom=(0,Lx.createAtom)(`SessionState`);constructor(e=DB,t=256){this.maxSessions=t,this.storage=e,this.sessions=new Map,this.hydrateFromStorage()}useStorage(e){this.storage=e,this.hydrateFromStorage()}hydrateFromStorage(){this.sessions=new Map(Object.entries(this.storage.load()).map(([e,t])=>[e,{values:new Map(Object.entries(t)),revision:++this.head}])),this.evictOldest(),this.persist()}get(e,t){this.atom.reportObserved();let n=this.sessions.get(e);return n?(this.touch(e,n),n.values.get(t)??null):null}revision(e){return this.atom.reportObserved(),this.sessions.get(e)?.revision??0}set(e,t,n){this.setBatch(e,[{key:t,value:n}])}setBatch(e,t){t.length!==0&&(0,Lx.runInAction)(()=>{let n=this.sessions.get(e)??{values:new Map,revision:0};t.some(({key:e,value:t})=>n.values.get(e)!==t)&&(n.revision=++this.head);for(let{key:e,value:r}of t)n.values.set(e,r);this.touch(e,n),this.evictOldest(),this.persist(),this.atom.reportChanged()})}clear(e,t){(0,Lx.runInAction)(()=>{let n=this.sessions.get(e);n&&(n.values.delete(t)&&(n.revision=++this.head),n.values.size===0?this.sessions.delete(e):this.touch(e,n)),this.persist(),this.atom.reportChanged()})}prune(e){(0,Lx.runInAction)(()=>{for(let t of this.sessions.keys())e.has(t)||this.sessions.delete(t);this.persist(),this.atom.reportChanged()})}touch(e,t){this.sessions.delete(e),this.sessions.set(e,t)}evictOldest(){let e=this.sessions.size-this.maxSessions;if(!(e<=0)){for(let t of this.sessions.keys())if(this.sessions.delete(t),--e===0)break}}flush(){this.storage.flush()}persist(){this.storage.save(this.serialize())}serialize(){let e=Object.create(null);for(let[t,{values:n}]of this.sessions)e[t]=Object.fromEntries(n);return e}};function kB(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;for(let t of Object.values(e)){if(typeof t!=`object`||!t||Array.isArray(t))return!1;for(let e of Object.values(t))if(typeof e!=`string`)return!1}return!0}var AB=class{timer=null;pending=null;constructor(e,t=500,n=pC){this.filePath=e,this.debounceMs=t,this.logger=n}load(){let e;try{e=r.readFileSync(this.filePath,`utf8`)}catch(e){let t=e.code;return t!==`ENOENT`&&this.logger(`warn`,`session-state read failed (${t}); starting empty`),{}}try{let t=JSON.parse(e);return kB(t)?t:(this.logger(`warn`,`session-state load: unexpected shape, starting empty`),{})}catch{return this.logger(`warn`,`session-state load: corrupt JSON, starting empty`),{}}}save(e){this.pending=e,!this.timer&&(this.timer=setTimeout(()=>this.flush(),this.debounceMs),this.timer.unref())}flush(){if(this.timer&&=(clearTimeout(this.timer),null),this.pending===null)return;let e=this.pending;try{r.mkdirSync(l.dirname(this.filePath),{recursive:!0});let t=`${this.filePath}.tmp`;r.writeFileSync(t,JSON.stringify(e),{mode:384}),r.chmodSync(t,384),r.renameSync(t,this.filePath),this.pending=null}catch(e){this.logger(`warn`,`session-state save failed: ${e.message}`)}}};const jB={default_empty_value:`string`,default_separator:`string`,palette:`string`,style:`string`,effect:`string`,preset:`string`,endcaps:`string`,variation:`string`,shade:`string`,autoWrap:`boolean`,padding:`number`,charset:`string`,updateNotice:`boolean`,transitions:`boolean`,colorCompatibility:`string`,menuGlyph:`string`},MB=new Set([`1`,`true`]),NB=new Set([`0`,`false`,``]);function PB(e,t){let n=aV(e),r=n.scope===`segment-palette`?`string`:jB[n.field];if(r===`string`)return JSON.stringify(t);if(r===`number`){let n=Number(t);if(!Number.isFinite(n))throw Error(`persistValueText: "${e}" expects a number, got "${t}"`);return String(n)}if(MB.has(t))return`true`;if(NB.has(t))return`false`;throw Error(`persistValueText: "${e}" expects boolean-ish (1, 0, true, false), got "${t}"`)}function FB(e){try{return r.readFileSync(e,`utf8`)}catch(e){if(e.code===`ENOENT`)return null;throw e}}function IB(e,t,n){try{if(t===null){r.rmSync(e,{force:!0});return}r.mkdirSync(l.dirname(e),{recursive:!0}),Pe(e,t)}catch(t){let r=`config write failed (${e}): ${t.message}`;throw n(`error`,r),Error(r)}}function LB(e){return/^\s*$/.test(e)?null:kl(e)}function RB(e,t){return e!==null&&jl(e,t)!==void 0}function zB(e){if(e.kind===`segment`)return e.when===void 0?e.name:{seg:e.name,when:e.when};if(e.kind===`container`){let{kind:t,direction:n,children:r,...i}=e;return{[n===`horizontal`?`h`:`v`]:r.map(zB),...i}}return e}function BB(e){if(!Od(e))return zB(e);let{rows:t,...n}=e;return{rows:Object.fromEntries(Object.entries(t).map(([e,t])=>[e,zB(t)])),...n}}const VB=nF,HB=VB.segments,UB=VB.presets,WB=VB.root;function GB(e,t,n,r){if(!RB(e,t)&&n===void 0)throw new $(`cannot edit ${r}: neither the config file nor the bundled default declares ${t.join(`.`)}`)}function KB(e,t){let n=Uw(t);return t.scope===`segment-palette`&&GB(e,[`segments`,t.segment],HB[t.segment],n.join(`.`)),n}function qB(e){return kl(zl(e))}function JB(){return Object.entries(WB.rows).map(([e,t])=>{let n=zB(t);return{path:[`root`],fragment:qB({rows:{[e]:n}}),unit:{path:[`root`,`rows`,e],value:n}}})}function YB(e,t){let n=e===null?void 0:jl(e,t);return n===void 0?null:{path:t,fragment:n,unit:null}}function XB(e,t){if(t===void 0)return null;let n=BB(t);return{path:e,fragment:qB(n),unit:{path:e,value:n}}}function ZB(e,t){let n=[`presets`,t],r=[...n,`root`],i=UB[t];GB(e,n,i,r.join(`.`));let a=YB(e,r)??XB(r,i?.root);return a!==null&&ou(a.fragment)?a:null}function QB(e,t){let n=au(t.fragment);return n===null?new Map([[`#`,{path:t.path,unit:t.unit,node:t.fragment}]]):new Map([...e,...n.map(e=>[e.key,{path:[...t.path,`rows`,e.key],unit:t.unit,node:e.value}])])}function $B(e,t){return[...JB(),YB(e,[`root`]),ZB(e,t)].filter(e=>e!==null).reduce(QB,new Map)}function eV(e,t,n){for(let{node:r,...i}of $B(e,t).values())if(cu(r,n))return i;throw new $(`${tV(e,t).join(`.`)} holds no placement "${n}" — the bar you clicked is stale (it reloads on the next render), or the action names a placement the layout never held`)}function tV(e,t){return ZB(e,t)?.path??[`root`]}function nV(e,t){return t.scope===`preset-root`?tV(e,t.preset):Uw(t)}function rV(e,{unit:t}){return t===null?e:$l(e,t.path,zl(t.value),Ll)}function iV(e){let t=Hw(e);if(t===null)throw Error(`"${e}" is not a valid persist target`);return t}function aV(e){let t=iV(e);if(t.scope===`preset-root`)throw Error(`"${e}" names a layout, not a value`);return t}function oV(e,t,n,r,i){i(t,n,_V(t,r)),IB(t.path,r,e.logger),e.record(t.path,n,r)}function sV(e,t,n){let r=uV(e,t,n);if(r.length>0)throw new $(`refused: ${e.above.join(`, `)} sets ${r.join(`, `)} over ${e.path}, so this click would change nothing on the bar — edit it there`)}const cV=()=>{};function lV(e,t){try{return t()}catch(t){throw!(t instanceof $)||e.above.length===0?t:new $(`${t.message} — or it is declared by ${e.above.join(`, `)}, which the bar does not edit`)}}function uV(e,t,n){let r=dV(e,t);if(r===null)return[];let i=new Set(hV(mV(r),mV(n)));return hV(pV(e,r),pV(e,n)).filter(e=>!i.has(e))}function dV(e,t){try{return fV(e,t)}catch(e){if(e instanceof pu)return null;throw e}}function fV(e,t){return bA(t===null?e.above:[e.path,...e.above],iF,{entered:()=>{},warned:()=>{}},{projectDir:e.projectDir,cwd:e.cwd},n=>n===e.path&&t!==null?t:r.readFileSync(n,`utf8`))}function pV(e,t){let[n]=t.layers;return n?.path===e.path?n.config:t.base}function mV(e){return e.layers.at(-1)?.config??e.base}function hV(e,t,n=``){return!gV(e)||!gV(t)?JSON.stringify(e)===JSON.stringify(t)?[]:[n]:[...new Set([...Object.keys(e),...Object.keys(t)])].flatMap(r=>hV(e[r],t[r],n===``?r:`${n}.${r}`))}function gV(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function _V(e,t){try{return fV(e,t)}catch(e){throw e instanceof pu?new $(`refused: the config file would not load after this click — ${e.message}`):e}}function vV(e,t){let n=aV(t),r=LB(FB(e)??``),i=r===null?void 0:jl(r,Uw(n));return i!==void 0&&`value`in i?i.value:void 0}function yV(e,t,n){bV(e,t,n,[])}function bV(e,t,n,r){let i=FB(t.path),a=n.reduce((e,[t,n])=>$l(e,KB(LB(e),aV(t)),PB(t,n),Ll),i??``);oV(e,t,i,lV(t,()=>xV(a,t.path,r,e=>e)),sV)}function xV(e,t,n,r){return n.reduce((e,{preset:n,id:i,setting:a,value:o})=>{let s=r(e,n,i),c=eV(LB(s),n,i),l=fu(rV(s,c),c.path,i,a,zl(o));if(l===null)throw new $(`${c.path.join(`.`)} in ${t} has no placement "${i}" — the bar you clicked is stale (it reloads on the next render)`);return l},e)}function SV(e,t,n){let r=LB(e),i=[`presets`,t,`root`];for(let[a,{path:o,unit:s,node:c}]of $B(r,t)){if(!cu(c,n))continue;if(i.every((e,t)=>o[t]===e))return e;let l=s===null?Nl(e,c):zl(s.value);if(a!==`#`)return $l(e,[...i,`rows`,a],l,Ll);if(ZB(r,t)!==null)throw new $(`cannot give preset "${t}" its own copy of ${o.join(`.`)}: it already stages rows of its own over that tree`);return $l(e,i,l,Ll)}return e}function CV(e,t){return tu(e,t,t[0]===`presets`&&t.length>2&&!oF(t[1])?2:0)}function wV(e,t,n){let r=n.map(iV),i=FB(t.path);if(i===null)return;let a=r.reduce((e,t)=>CV(e,nV(LB(e),t)),i);a!==i&&oV(e,t,i,a,cV)}function TV(e){let t=e===null?void 0:jl(e,[`presets`]);return t?.kind===`object`?t.entries.map(e=>e.key):[]}function EV(e,t){let n=new Set([...aF,...TV(e),...t.above.flatMap(e=>Object.keys(at.default.parse(r.readFileSync(e,`utf8`)).presets??{}))].map(bp));return Array.from({length:n.size+1},(e,t)=>`custom-${t+1}`).find(e=>!n.has(bp(e)))}function DV(e,t,n,r,i,a){let o=FB(t.path),s=LB(o??``),c=EV(s,t),l=[`presets`,c],u=lV(t,()=>ZB(s,n)),d=[...u===null?[]:[[[...l,`root`],u.unit===null?Nl(o??``,u.fragment):zl(u.unit.value)]],...Object.keys(r).length===0?[]:[[[...l,`globals`],zl(r)]]],f=i.map(([e,t])=>{let n=Vw(c,e);return[KB(s,aV(n)),PB(n,t)]}),p=[...d,...f].reduce((e,[t,n])=>$l(e,t,n,Ll),$l(o??``,l,`{}`,Ll));return oV(e,t,o,lV(t,()=>xV(p,t.path,a.map(e=>({...e,preset:c})),SV)),sV),c}function OV(e,t,n,r){let i=FB(t.path);oV(e,t,i,$l(i??``,[`themeDefaults`,n],zl(r),Ll),sV)}function kV(e,t,n){if(oF(n))throw new $(`cannot delete preset "${n}": it is bundled — reset its settings instead`);let r=[`presets`,n],i=FB(t.path),a=LB(i??``);if(i===null||a===null||jl(a,r)===void 0)throw new $(`cannot delete preset "${n}": ${t.path} declares no ${r.join(`.`)} — the bar you clicked is stale; it reloads on the next render`);let o=jl(a,[`globals`,`preset`]);oV(e,t,i,[r,...o?.kind===`string`&&o.value===n?[[`globals`,`preset`]]:[]].reduce((e,t)=>CV(e,t),i),cV)}function AV(e,t,n,r){let i=iV(n);if(i.scope!==`preset-root`)throw Error(`"${n}" is not a "presets.<name>.root" target`);let a=FB(t.path),o=r.op===`remove`?r.target:r.anchor,s=lV(t,()=>eV(LB(a??``),i.preset,o)),c=rV(a??``,s),{after:l,placed:u}=jV(c,s.path,r,()=>{let e=_V(t,c).config;return Nb(e.presets).map(t=>Ib(e,t).node)});if(l===null)throw new $(`${s.path.join(`.`)} in ${t.path} has no placement "${o}" — the bar you clicked is stale (it reloads on the next render), or the action names a placement the layout never held`);return oV(e,t,a,l,sV),u}function jV(e,t,n,r){switch(n.op){case`remove`:return{after:uu(e,t,n.target),placed:null};case`insert`:{let i=OP(n.segment,n.anchor,r());return{after:du(e,t,i,n.anchor,n.relation),placed:i}}}}const MV={load:()=>({}),save:()=>{}},NV=new Set(tw.map(e=>e.sessionKey)),PV=e=>NV.has(e)||e.startsWith(rx),FV=8*1024*1024,IV={past:[],future:[]},LV=e=>e.kind===`session`?`session:${e.key}`:`file:${e.file}`;var RV=class{state=new Map;constructor(e,t,n=MV){this.sessionState=e,this.logger=t,this.storage=n,this.state=new Map(Object.entries(n.load()))}useStorage(e){this.storage=e,this.state=new Map(Object.entries(e.load()))}depth(e){let{past:t,future:n,savepoint:r}=this.state.get(e)??IV;return{undo:t.length,redo:n.length,sinceEdit:r?.net.length??0}}history(e){return this.state.get(e)??IV}begin(){let e=new Map,t=(t,n)=>{let r=e.get(t)??new Map,i=r.get(LV(n));r.set(LV(n),i===void 0?n:{...n,before:i.before}),e.set(t,r)},n=new Map;return{sessionState:EB(this.sessionState,e=>PV(e)||e===`edit.mode`,(e,r,i,a)=>{if(r===`edit.mode`){let t=n.get(e);n.set(e,{before:t===void 0?i:t.before,after:a});return}t(e,{kind:`session`,key:r,before:i,after:a})}),file:(e,n,r,i)=>t(e,{kind:`file`,file:n,before:r,after:i}),commit:()=>{let t=new Map(e),r=new Map(n);e.clear(),n.clear();for(let e of new Set([...t.keys(),...r.keys()])){let n=[...t.get(e)?.values()??[]].filter(e=>e.before!==e.after),i=this.history(e),a=n.length===0?i:KV(i,n),o=r.get(e),s=o===void 0?a:XV(a,o);s!==i&&this.put(e,s)}}}}undo(e){let t=this.history(e),n=t.past.at(-1);if(n===void 0)throw new $(`undo: nothing to undo`);return this.apply(e,n,`before`,`undo`,JV(t,n)),n}rewind(e){let t=this.history(e),{savepoint:n}=t;if(n===void 0)throw new $(`rewind: edit mode has no savepoint — nothing to cancel`);let r=n.net.filter(t=>this.read(e,t)!==t.after),i=new Set(r.map(LV)),a=n.net.filter(e=>!i.has(LV(e))),o=VV(ZV(YV(t,n),i));if(this.apply(e,a,`before`,`rewind`,{past:o,future:[],savepoint:{at:o.length,net:[],below:[]}}),r.length>0)throw new $(`rewind: ${r.map($V).join(`, `)} changed since edit mode opened — kept as it is; everything else edit mode changed was put back`);return a}redo(e){let t=this.history(e),{past:n,future:r}=t,i=r.at(-1);if(i===void 0)throw new $(`redo: nothing to redo`);let a=[...n,i],o=VV(a);return this.apply(e,i,`after`,`redo`,{past:o,future:r.slice(0,-1),...UV(t.savepoint,a.length-o.length,i)}),i}apply(e,t,n,r,i){let a=n===`before`?`after`:`before`,o=t.filter(t=>this.read(e,t)!==t[a]);if(o.length>0){let t=new Set(o.map(LV)),{past:n,future:i,savepoint:a}=this.history(e);throw this.put(e,{past:ZV(n,t),future:ZV(i,t),...a!==void 0&&{savepoint:{at:ZV([...n,...[...i].reverse()].slice(0,a.at),t).length,net:a.net.filter(e=>!t.has(LV(e))),below:ZV(a.below,t)}}}),new $(`${r}: ${o.map($V).join(`, `)} changed since that edit — refusing to overwrite it; this session's undo history no longer steps it`)}let s=[];try{for(let r of t)this.write(e,r,r[n]),s.push(r);this.put(e,i)}catch(t){try{for(let t of s.reverse())this.write(e,t,t[a])}catch(e){throw Error(`${t.message}; and putting the step back failed, so it is half-applied: ${e.message}`)}throw t}}read(e,t){return t.kind===`session`?this.sessionState.get(e,t.key):FB(t.file)}write(e,t,n){t.kind===`file`?IB(t.file,n,this.logger):n===null?this.sessionState.clear(e,t.key):this.sessionState.set(e,t.key,n)}put(e,t){let n=new Map(this.state);for(n.delete(e),(t.past.length>0||t.future.length>0||t.savepoint!==void 0)&&n.set(e,t);n.size>32||zV(n)>FV;){let[e,t]=n.entries().next().value;n.size>1?n.delete(e):t.past.length+t.future.length>0?n.set(e,BV(t)):(this.logger(`warn`,`settings-history: edit mode's changes for session ${e} exceed ${FV} bytes; cancel is no longer available`),n.delete(e))}this.storage.save(Object.fromEntries(n)),this.state=n}};function zV(e){let t=0;for(let{past:n,future:r,savepoint:i}of e.values())for(let e of[...n,...r,...i===void 0?[]:[i.net,...i.below]])for(let n of e)t+=(n.before?.length??0)+(n.after?.length??0);return t}function BV({past:e,future:t,savepoint:n}){return e.length>0?{past:e.slice(1),future:t,...UV(n,1,[])}:{past:e,future:t.slice(1),...UV(n,0,[])}}function VV(e){return e.slice(-50)}const HV=e=>e===ax.member;function UV(e,t,n){return e===void 0?{}:{savepoint:{at:Math.max(0,e.at-t),net:WV(e.net,n),below:e.below}}}function WV(e,t){let n=new Map(e.map(e=>[LV(e),e]));for(let e of t){let t=n.get(LV(e));n.set(LV(e),t===void 0?e:{...t,after:e.after})}return[...n.values()].filter(e=>e.before!==e.after)}const GV=e=>e.map(e=>({...e,before:e.after,after:e.before}));function KV(e,t){let n=[...e.past,t],r=VV(n),{savepoint:i}=e,a=i===void 0?0:Math.max(0,i.at-e.past.length);return{past:r,future:[],...UV(i&&{at:Math.min(i.at,e.past.length),net:i.net,below:[...qV(e.future,a),...i.below]},n.length-r.length,t)}}function qV(e,t){let n=Math.min(t,e.length);return e.slice(e.length-n).reverse()}function JV(e,t){return{past:e.past.slice(0,-1),future:VV([...e.future,t]),...UV(e.savepoint,0,GV(t))}}function YV(e,t){let{past:n,future:r}=e,i=n.slice(0,t.at);return[...i,...qV(r,t.at-i.length),...t.below]}function XV(e,t){if(HV(t.after)&&!HV(t.before))return{...e,savepoint:{at:e.past.length,net:[],below:[]}};if(!HV(t.after)&&HV(t.before)){let{past:t,future:n}=e;return{past:t,future:n}}return e}function ZV(e,t){return e.map(e=>e.filter(e=>!t.has(LV(e)))).filter(e=>e.length>0)}function QV(e){return e.map($V).join(`, `)}function $V(e){return e.kind===`session`?`session setting "${e.key}"`:e.file}function eH(e){if(typeof e!=`object`||!e)return!1;let t=e,n=e=>e===null||typeof e==`string`;return(t.kind===`session`&&typeof t.key==`string`||t.kind===`file`&&typeof t.file==`string`)&&n(t.before)&&n(t.after)}function tH(e){return Array.isArray(e)&&e.every(e=>Array.isArray(e)&&e.every(eH))}function nH(e){if(typeof e!=`object`||!e)return!1;let t=e;return Number.isInteger(t.at)&&t.at>=0&&Array.isArray(t.net)&&t.net.every(eH)&&tH(t.below)}function rH(e){if(typeof e!=`object`||!e)return!1;let t=e;return tH(t.past)&&tH(t.future)&&(t.savepoint===void 0||nH(t.savepoint))}function iH(e,t){let n=e=>e.kind===`file`||PV(e.key)?!0:(t.add(e.key),!1),r=e=>e.map(e=>e.filter(n)).filter(e=>e.length>0),{savepoint:i}=e,a=r(e.past),o=r(e.future);return i===void 0?{past:a,future:o}:{past:a,future:o,savepoint:{at:r(e.past.slice(0,i.at)).length,net:i.net.filter(n),below:r(i.below)}}}function aH(e,t){return{load:()=>{let n;try{n=r.readFileSync(e,`utf8`)}catch(e){let n=e.code;return n!==`ENOENT`&&t(`warn`,`settings-history read failed (${n}); starting empty`),{}}try{let e=JSON.parse(n);if(typeof e==`object`&&e&&!Array.isArray(e)&&Object.values(e).every(rH)){let n=new Set,r=Object.fromEntries(Object.entries(e).map(([e,t])=>[e,iH(t,n)]));return n.size>0&&t(`warn`,`settings-history load: dropped the changes to ${[...n].map(e=>`"${e}"`).join(`, `)}, no longer a setting`),r}}catch{}return t(`warn`,`settings-history load: unexpected shape, starting empty`),{}},save:n=>{try{r.mkdirSync(l.dirname(e),{recursive:!0}),Pe(e,JSON.stringify(n),384)}catch(e){let n=`settings-history write failed — the change landed but is not undoable: ${e.message}`;throw t(`error`,n),Error(n)}}}}const oH=e=>!PV(e)&&!TT(e)&&e!==`update.dismissed`;var sH=class{past=new Map;depth(e,t,n){return this.restorable(e,t,n).length}restorable(e,t,n){let r=new Map,i=n=>r.has(n)?r.get(n):t.get(e,n),a=[];for(let t of[...this.past.get(e)??[]].reverse())if(t.every(e=>i(e.key)===e.after&&(e.before===null||n.validate(e.key,e.before).ok))){a.unshift(t);for(let e of t)r.set(e.key,e.before)}return a}begin(e){let t=new Map;return{sessionState:EB(e,oH,(e,n,r,i)=>{let a=t.get(e)??new Map,o=a.get(n);a.set(n,{key:n,before:o?o.before:r,after:i}),t.set(e,a)}),commit:()=>{for(let[e,n]of t){let t=[...n.values()].filter(e=>e.before!==e.after);t.length>0&&this.push(e,t)}t.clear()}}}back(e,t,n){let r=this.past.get(e)??[],i=this.restorable(e,t,n),a=i.at(-1),o=r.length-i.length;if(a===void 0)throw this.put(e,i),new $(`back: nothing to go back to${o>0?` (${o} step(s) over a view since gone, discarded)`:``}`);return(0,Lx.runInAction)(()=>{let n=a.flatMap(({key:e,before:t})=>t===null?[]:[{key:e,value:t}]);n.length>0&&t.setBatch(e,n);for(let{key:n,before:r}of a)r===null&&t.clear(e,n)}),this.put(e,i.slice(0,-1)),{step:a,discarded:o}}push(e,t){let n=this.past.get(e)??[];this.put(e,[...n,t].slice(-20))}put(e,t){for(this.past.delete(e),t.length>0&&this.past.set(e,t);this.past.size>32;)this.past.delete(this.past.keys().next().value)}};function cH(e){let t=sR(e,`doctor.tmux`,[`display`,`-p`,`-t`,e.pane,`#{client_termfeatures}`]);return t.kind===`ok`?{kind:`ok`,value:t.stdout.trim().split(`,`).filter(e=>e!==``)}:{kind:`failed`,reason:t.reason}}function lH(e){return{probeTmux:cH,loadConfig:e}}function uH(e){let t={layers:e.layers,warnings:e.warning===null?[]:e.warning.split(`
204
+ `)};return e.error===null?{...t,kind:`loaded`,unused:e.unused}:{...t,kind:`failed`,error:e.error}}function dH(e){let{env:t,statusLine:n}=RT(e);if(t!==void 0&&!zT(t))throw Error(`cannot read ${e}: \`env\` is not an object`);return{path:e,env:t??{},statusLine:n===void 0?{kind:`absent`}:zT(n)?{kind:`present`,refreshInterval:n.refreshInterval}:{kind:`not-an-object`,value:n}}}function fH(e,t){return t===void 0?{kind:`unreported`}:t===null?{kind:`outside`}:{kind:`inside`,hint:t,termfeatures:e.probeTmux(t)}}function pH(e){return{kind:`arrived`,handler:e,bar:QA}}function mH(e,t,n){let r=new Map;for(let i of wu(Ib(e,t).node)){if(i.kind!==`segment`)continue;let t=Lu(e.segments[i.name])[Fu],a=Uu(i,Fu,t,e=>n(e.key));a===`bar`||a===`none`||r.set(i.drafts?.effect?.id??bu(i),a)}return[...r].map(([e,t])=>({placement:e,effect:t}))}function hH(e,t,n,r){let i=e.loadConfig(n),a=LF(i.config,r,()=>!1);return{tmux:fH(e,t.tmux),config:uH(i),effect:a.effect,placementEffects:mH(i.config,a.preset,r),transitions:a.transitions,claudeSettings:dH(FT(PT(t.claudeConfigDir)))}}function gH(e,t){let n=t.claudeSettings.path;switch(e.kind){case`claude-settings`:{let i=$l(LT(n),e.path,JSON.stringify(e.value),Rl);return r.mkdirSync(l.dirname(n),{recursive:!0}),Pe(n,i),{...t,claudeSettings:dH(n)}}default:return e.kind}}const _H={connectMs:200,budgetMs:500};async function vH(e){let n=e.includes(`--json`),r=await yH();if(r.kind!==`ok`&&(t.stderr.write(`daemon-stats: ${ZA(r)}\n`),t.exit(1)),n){t.stdout.write(JSON.stringify(r.value,null,2)+`
205
+ `);return}t.stdout.write(CH(r.value))}function yH(){return GA({kind:`stats`},_H,e=>`stats`in e?e.stats:void 0)}function bH(e){return e<1024?`${e}B`:e<1024*1024?`${(e/1024).toFixed(1)}KB`:`${(e/1024/1024).toFixed(1)}MB`}function xH(e,t){let n=e+t;return n===0?`n/a`:`${(e/n*100).toFixed(1)}%`}function SH(e){return e<60?`${e}s`:e<3600?`${Math.floor(e/60)}m${e%60}s`:`${Math.floor(e/3600)}h${Math.floor(e%3600/60)}m`}function CH(e){let t=[];t.push(`cc-candybar daemon stats`),t.push(``),t.push(`process`),t.push(` pid ${e.pid}`),t.push(` version ${e.version}`),t.push(` protocol ${e.protocolVersion}`),t.push(` startedAt ${e.startedAt}`),t.push(` uptime ${SH(e.uptimeSec)}`),t.push(` rss ${bH(e.rssBytes)}`),t.push(` heapUsed ${bH(e.heapUsedBytes)}`),t.push(` heapTotal ${bH(e.heapTotalBytes)}`),t.push(` external ${bH(e.externalBytes)}`),t.push(` arrayBuffers ${bH(e.arrayBuffersBytes)}`),t.push(``),t.push(`requests`),t.push(` total ${e.requests.total}`),t.push(` errored ${e.requests.errored}`),t.push(` timedOut ${e.requests.timedOut}`),t.push(` inFlight ${e.requests.inFlight}`),t.push(``),t.push(`gitCache`),t.push(` size ${e.gitCache.size}`),t.push(` hit rate ${xH(e.gitCache.hits,e.gitCache.misses)} (${e.gitCache.hits} / ${e.gitCache.hits+e.gitCache.misses})`),t.push(` invalidations ${e.gitCache.invalidations}`),t.push(``),t.push(`usageCache`),t.push(` size ${e.usageCache.size}`),t.push(` hit rate ${xH(e.usageCache.hits,e.usageCache.misses)} (${e.usageCache.hits} / ${e.usageCache.hits+e.usageCache.misses})`),t.push(` sweeps ${e.usageCache.sweeps}`),t.push(``),t.push(`renderCache`),t.push(` size ${e.renderCache.size}`),t.push(``),t.push(`effectCache`),t.push(` sessions ${e.effectCache.sessions}`),t.push(` effects ${e.effectCache.effects}`),t.push(``),t.push(`watchers`),t.push(` active ${e.watchers.active}`),t.push(` opened ${e.watchers.opened}`),t.push(` closed ${e.watchers.closed}`),t.push(` evicted ${e.watchers.evicted}`),t.push(``),t.push(`subprocesses`),t.push(` total ${e.subprocesses.total}`),t.push(` inFlight ${e.subprocesses.inFlight}`),t.push(` lastMinute ${e.subprocesses.lastMinute}`);let n=Object.entries(e.subprocesses.byCategory),r=n.reduce((e,[t])=>Math.max(e,t.length),13);for(let[i,a]of n){let n=e.subprocesses.p50DurationMs[i],o=e.subprocesses.p99DurationMs[i],s=n!==void 0&&o!==void 0?` (p50 ${n}ms · p99 ${o}ms)`:``;t.push(` ${i.padEnd(r)} ${a}${s}`)}return e.nextRestartReason&&(t.push(``),t.push(`nextRestart ${e.nextRestartReason}`)),t.join(`
206
206
  `)+`
207
- `}const CH=e=>({kind:`ok`,value:e}),wH=e=>({kind:`failed`,reason:e});var TH=class{arrivals=[];arrive(e){this.arrivals=[...this.arrivals,e].slice(-16)}list(){return this.arrivals}};const EH=/^[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}$/;function DH(e){return EH.test(e)?e:null}function OH(e){let t=e.opener();if(t.kind===`failed`)return t;if(t.value===null)return CH(null);let n=t.value,r=e.script(n);if(r.kind===`failed`)return CH({app:n,missing:wH(`its script could not be read (${r.reason})`)});let i=HM(r.value);return CH({app:n,missing:i===null?wH("its script is not one `cc-candybar install` wrote"):CH([i.node,i.script].filter(t=>!e.exists(t)))})}async function kH(e,t){let n=e.now()+5e3;for(;e.now()<n;){await e.pause();let n=await e.daemon(),r=n.kind===`ok`?n.value.arrivals.find(e=>e.nonce===t):void 0;if(n.kind===`ok`&&r!==void 0)return{kind:`arrived`,handler:r.handler,bar:n.value.version}}return null}async function AH(e){if(e.platform!==`darwin`)return{kind:`unsupported`};if(e.sockets.own!==e.sockets.handler)return{kind:`unprobed`,reason:`this shell's daemon is at ${e.sockets.own} (CC_CANDYBAR_SOCKET); the URL handler delivers links to ${e.sockets.handler}`};let t=await e.daemon();if(t.kind===`failed`)return{kind:`unprobed`,reason:`the daemon could not be asked whether a link arrives: ${t.reason}`};let n=e.nonce(),r=e.open(`${Bj}://${uM}/${n}`);return(r===null?await kH(e,n):null)??{kind:`lost`,unopened:r,opener:OH(e)}}function jH(e,t,n){let r=O({bin:t,args:[...n],category:e,timeoutMs:5e3});return r.ok?CH(r.stdout):wH(r.stderr.trim()||r.error||r.reason)}const MH=`ObjC.import("AppKit");var u = $.NSWorkspace.sharedWorkspace.URLForApplicationToOpenURL($.NSURL.URLWithString("${Bj}://probe"));u.isNil() ? "" : u.path.js`;async function NH(){let e=await vH();if(e.kind!==`ok`)return wH(ZA(e).split(`
208
- `).join(` — `));let{version:t,handlerProbes:n}=e.value;return Array.isArray(n)?CH({version:t,arrivals:n}):wH(`the running daemon (${t}) predates this check`)}function PH(){return{platform:process.platform,sockets:{own:ze(),handler:Be()},now:Date.now,nonce:ce,daemon:NH,open:e=>{let t=jH(`doctor.open`,`/usr/bin/open`,[`-g`,e]);return t.kind===`ok`?null:t.reason},pause:()=>new Promise(e=>setTimeout(e,100)),opener:()=>{let e=jH(`doctor.launch-services`,`/usr/bin/osascript`,[`-l`,`JavaScript`,`-e`,MH]);if(e.kind===`failed`)return e;let t=e.value.trim();return CH(t===``?null:t)},script:e=>jH(`doctor.osadecompile`,`/usr/bin/osadecompile`,[UM(e)]),exists:r.existsSync}}const FH=/^─{20,}/,IH=/^❯(\s|$)/,LH=/›\s*stashed$/;function RH(e){if(e.inMode)return{kind:`in-mode`};let t=e.screen.map(e=>e.trimEnd()),n=t.flatMap((e,t)=>FH.test(e)?[t]:[]).at(-2);return n===void 0||!IH.test(t[n+1]??``)?{kind:`no-prompt`}:LH.test(t[n-1]??``)?{kind:`stashed`}:{kind:`ready`}}const zH={"in-mode":`the Claude Code pane is in tmux copy mode — leave it (q) and click again`,stashed:`Claude Code is holding a stashed prompt (ctrl+s) — restore or send it, then click again`,"no-prompt":`Claude Code is not at its prompt (a dialog or picker is open) — close it and click again`};function BH(e,t,n){if(t===void 0)return{kind:`refused`,reason:`this session's statusline client reports no tmux facts (it predates this daemon) — rebuild or reinstall cc-candybar`};if(t===null)return{kind:`refused`,reason:`this Claude Code is not running inside tmux — the bar can only type into a tmux pane`};let r=RH(e.read(t));if(r.kind!==`ready`)return{kind:`refused`,reason:zH[r.kind]};let i=e.type(t,n);return i.kind===`typed`?{kind:`typed`,pane:t.pane}:i}const VH=`cc-candybar-slash`;function HH(e,t,n,r){let i=oR(e,t,n,r);if(i.kind===`failed`)throw Error(i.reason);return i}function UH(e){let t=HH(e,`claude-input.read`,[`display`,`-p`,`-t`,e.pane,`#{pane_in_mode}`,`;`,`capture-pane`,`-p`,`-t`,e.pane]);if(t.kind===`rate-limited`)throw Error(t.reason);let[n=``,...r]=t.stdout.split(`
209
- `);return{inMode:n!==`0`,screen:r}}function WH(e,t){let n=HH(e,`claude-input.type`,[`load-buffer`,`-b`,VH,`-`,`;`,`send-keys`,`-t`,e.pane,`C-s`,`;`,`paste-buffer`,`-p`,`-d`,`-b`,VH,`-t`,e.pane,`;`,`send-keys`,`-t`,e.pane,`Enter`],t);return n.kind===`ok`?{kind:`typed`}:{kind:`refused`,reason:`cc-candybar typed a command moments ago — click again in a second (${n.reason})`}}function GH(){return{read:UH,type:WH}}function KH(e){if(!e)throw new $(`session id is required`);if(e.includes(`/`)||e.includes(`..`))throw new $(`invalid session id "${e}"`);return e}function qH(e){return JH(()=>decodeURIComponent(e))}function JH(e){try{return e()}catch(e){throw e instanceof URIError?new $(`malformed wire encoding: ${e.message}`):e}}function YH(e,t){let n=O({bin:`/usr/bin/pbcopy`,stdinInput:e,category:`click.pbcopy`});if(!n.ok){if(n.reason===`rate-limited`){t.dlog(`warn`,`click.pbcopy rate-limited: ${n.error??``}`);return}throw Error(`pbcopy failed (${n.reason}, exit ${n.exitCode??`null`})`)}}const XH=(e,t)=>YH(qH(e),t),ZH=(e,t)=>{let n=O({bin:`/usr/bin/open`,args:[`-a`,`Visual Studio Code`,qH(e)],category:`click.open`});if(!n.ok){if(n.reason===`rate-limited`){t.dlog(`warn`,`click.open rate-limited: ${n.error??``}`);return}throw Error(`open -a "Visual Studio Code" failed (${n.reason}, exit ${n.exitCode??`null`})`)}},QH=(e,t)=>YH(qH(e),t),$H=(e,t)=>YH(qH(e),t),eU=(e,t)=>{let n=KH(qH(e));t.navigating.get(n,`toolbar-expanded`)?t.navigating.clear(n,`toolbar-expanded`):t.navigating.set(n,`toolbar-expanded`,`1`)},tU=(e,t)=>{let[n=``,...r]=JH(()=>mM(e)),i=KH(n),a=UI(pU(t,i));if(r.length===0)throw new $(`set-state: <key>/<value> is required (have keys: ${a.listKeys().join(`, `)})`);if(r.length%2!=0)throw new $(`set-state: expected even-count <key>/<value> pairs, got ${r.length} segment(s) after session id (have keys: ${a.listKeys().join(`, `)})`);let o=[];for(let e=0;e<r.length;e+=2){let t=r[e],n=r[e+1];if(!t)throw new $(`set-state: empty key at pair ${e/2+1} (expected <sessionId>/<key>/<value>[/<key>/<value>...] segments)`);let i=a.validate(t,n);if(!i.ok)throw new $(`set-state: pair ${e/2+1}: ${i.reason}`);o.push({key:t,value:i.value})}aU(t,i,`set-state`,o),t.navigating.setBatch(i,o);let s=o.map(e=>`${e.key}=${e.value}`).join(` `);t.dlog(`info`,`set-state: ${s} (session=${i})`)},nU=/^-?\d+$/;function rU(e,t,n,r){let i=e+t;return i>r?e===r?n:r:i<n?e===n?r:n:i}const iU=(e,t)=>{let[n=``,r=``,i=``]=JH(()=>mM(e)),a=KH(n);if(!r)throw new $(`step-state: <key> is required (shape: <sessionId>/<key>/<by>)`);if(!nU.test(i))throw new $(`step-state: delta must be an integer, got "${i}"`);let o=parseInt(i,10),s=pU(t,a),c=UI(s),l=c.rangeParamsFor(r);if(!l)throw new $(`step-state: key "${r}" is not a bounded (range) state key (have keys: ${c.listKeys().join(`, `)})`);let u=t.sessionState.get(a,r),d=u&&nU.test(u)?oU(l,parseInt(u,10)):sU(`step-state`,r,l,KI(s,e=>t.sessionState.get(a,e),r)),f=rU(d,o,l.min,l.max),p=c.validate(r,String(f));if(!p.ok)throw new $(`step-state: ${p.reason}`);aU(t,a,`step-state`,[{key:r,value:p.value}]),t.navigating.set(a,r,p.value),t.dlog(`info`,`step-state: ${r} ${d}→${p.value} (by ${o}, session=${a})`)};function aU(e,t,n,r){let i=r.filter(e=>e.key.startsWith(rx));if(i.length===0)return;let a=SI(pU(e,t),n=>e.sessionState.get(t,n),i);if(a.length>0)throw new $(`${n}: refused — ${a.join(`; `)}`)}function oU(e,t){return Math.max(e.min,Math.min(e.max,t))}function sU(e,t,n,r){if(r===null)return n.min;if(!nU.test(r))throw new $(`${e}: "${t}" shows ${JSON.stringify(r)} before any click, not an integer to step`);return oU(n,parseInt(r,10))}const cU=`render-origin`;function lU(e){return JSON.stringify(e)}function uU(e){let t;try{t=JSON.parse(e)}catch{throw new $(`render origin is not JSON: ${e}`)}if(typeof t!=`object`||!t)throw new $(`render origin is not an object: ${e}`);let{projectDir:n,cwd:r,configFile:i}=t;if(typeof n!=`string`||typeof r!=`string`||i!==null&&typeof i!=`string`)throw new $(`render origin has the wrong shape: ${e}`);return{projectDir:n,cwd:r,configFile:i}}function dU(e,t){let n=e.sessionState.get(t,cU);if(n===null)throw new $(`session ${t} has not rendered yet — no config to act on`);return uU(n)}function fU(e,t,n){let r=e.sessionState.get(t,cU);if(r===null)return;let i=uU(r),{path:a}=mU(i);n.some(e=>e.kind===`file`&&e.file===a)&&e.reloadConfig(i)}function pU(e,t){return e.configFor(dU(e,t))}function mU(e){return Ik(e.projectDir,e.cwd,e.configFile??void 0)}function hU(e,t){return{record:(n,r,i)=>e.journal.file(t,n,r,i),logger:e.dlog}}const gU=(e,t)=>{let[n=``,r=``,i=``]=JH(()=>mM(e)),a=KH(n),o=dU(t,a),s=t.configFor(o),c=VP(s);if(!r)throw new $(`set-config: <key>/<value> is required (have keys: ${c.listKeys().join(`, `)})`);let l=c.validate(r,i);if(!l.ok)throw new $(`set-config: ${l.reason}`);let u=mU(o),d=bI(s,e=>t.sessionState.get(a,e),r);vV(hU(t,a),u,[[d.key,l.value]]),t.reloadConfig(o),t.dlog(`info`,`set-config: ${d.key}=${l.value} → ${u.path} (session=${a})`)},_U=(e,t)=>{let[n=``,r=``,i=``]=JH(()=>mM(e)),a=KH(n);if(!r)throw new $(`step-config: <key> is required (shape: <sessionId>/<key>/<by>)`);if(!nU.test(i))throw new $(`step-config: delta must be an integer, got "${i}"`);let o=parseInt(i,10),s=dU(t,a),c=t.configFor(s),l=VP(c),u=l.rangeParamsFor(r);if(!u)throw new $(`step-config: key "${r}" is not a bounded (range) config key (have keys: ${l.listKeys().join(`, `)})`);let d=mU(s),f=bI(c,e=>t.sessionState.get(a,e),r),p=_V(d.path,f.key),m=typeof p==`number`?oU(u,p):sU(`step-config`,r,u,UP(f.globals,r)),h=rU(m,o,u.min,u.max),g=l.validate(r,String(h));if(!g.ok)throw new $(`step-config: ${g.reason}`);vV(hU(t,a),d,[[f.key,g.value]]),t.reloadConfig(s),t.dlog(`info`,`step-config: ${f.key} ${m}→${g.value} (by ${o}) → ${d.path} (session=${a})`)},vU=(e,t)=>{let[n=``]=JH(()=>mM(e)),r=KH(n),i=dU(t,r),a=t.configFor(i),o=e=>t.sessionState.get(r,e),s=vI(a,o),c=xI(a,o);if(s.length+c.length===0){t.dlog(`info`,`save: nothing unsaved (session=${r})`);return}let l=UI(a),u=s.map(e=>{let t=l.validate(e.sessionKey,e.value);if(!t.ok)throw new $(`save: ${t.reason}`);return[e.target,t.value]});bU(`save`,l,c);let d=mU(i);yV(hU(t,r),d,u,c),t.reloadConfig(i);for(let e of[...s.map(e=>e.sessionKey),...c.map(e=>e.key)])t.sessionState.clear(r,e);t.dlog(`info`,`save: ${[...u.map(([e,t])=>`${e}=${t}`),...c.map(yU)].join(` `)} → ${d.path} (session=${r})`)},yU=e=>`${e.preset}/${e.id}.settings.${e.setting}=${Vu(e.value)}`;function bU(e,t,n){for(let r of n){let n=t.validate(r.key,Vu(r.value));if(!n.ok)throw new $(`${e}: ${n.reason}`)}}const xU=(e,t)=>{let[n=``]=JH(()=>mM(e)),r=KH(n),i=dU(t,r),a=t.configFor(i),o=TI(a,e=>t.sessionState.get(r,e)),s=UI(a),c=o.picks.map(e=>{let t=s.validate(e.sessionKey,e.value);if(!t.ok)throw new $(`save-preset: ${t.reason}`);return[e.configKey,t.value]});bU(`save-preset`,s,o.placements);let l=mU(i),u=EV(hU(t,r),l,o.from,o.globals,c,o.placements);t.reloadConfig(i);for(let e of[...tw.map(e=>e.sessionKey),...o.placements.map(e=>e.key)])t.sessionState.clear(r,e);t.sessionState.set(r,ew.preset.sessionKey,u),t.dlog(`info`,`save-preset: ${[`${u} from=${o.from}`,...c.map(([e,t])=>`${e}=${t}`),...o.placements.map(yU)].join(` `)} → ${l.path} (session=${r})`)},SU=(e,t)=>{let[n=``]=JH(()=>mM(e)),r=KH(n),i=dU(t,r),a=DI(t.configFor(i),e=>t.sessionState.get(r,e));if(a.kind===`rule`)throw new $(`save-theme-default: the theme is chosen by a rule (globals.palette), so there is no name to save as a theme's default — pick one in the menu first`);let o=mU(i);DV(hU(t,r),o,a.theme,a.look),t.reloadConfig(i);let s=new Set(vI(t.configFor(i),e=>t.sessionState.get(r,e)).map(e=>e.sessionKey)),c=ku.map(e=>ew[e].sessionKey).filter(e=>!s.has(e));for(let e of c)t.sessionState.clear(r,e);t.dlog(`info`,`save-theme-default: ${a.theme} ${ku.map(e=>`${e}=${a.look[e]}`).join(` `)} → ${o.path} (session=${r})`)},CU=(e,t)=>{let[n=``,r=``]=JH(()=>mM(e)),i=KH(n);if(!r)throw new $(`delete-preset: <name> is required (shape: <sessionId>/<name>)`);let a=dU(t,i),o=mU(a);OV(hU(t,i),o,r),t.reloadConfig(a);let s=ew.preset.sessionKey;t.sessionState.get(i,s)===r&&t.sessionState.clear(i,s),t.dlog(`info`,`delete-preset: ${r} ← ${o.path} (session=${i})`)},wU=(e,t)=>{let[n=``,...r]=JH(()=>mM(e)),i=KH(n),a=dU(t,i),o=VP(t.configFor(a)).listKeys(),s=r.length===0?[``]:r.filter(e=>!o.includes(e));if(s.length>0)throw new $(`reset-config: unknown config key "${s.join(`", "`)}" (have: ${o.join(`, `)})`);let c=mU(a),l=r.map(OI),u=l.flatMap(e=>e.fileKeys),d=l.flatMap(e=>e.sessionKeys);CV(hU(t,i),c,u),t.reloadConfig(a);for(let e of d)t.sessionState.clear(i,e);t.dlog(`info`,`reset-config: ${[...u,...d.map(e=>`session:${e}`)].join(` `)} ← ${c.path} (session=${i})`)};function TU(e,t){let n=(e,t)=>[...wu(Ib(e,t).node)].filter(e=>e.kind===`segment`),r=new Set(Nb(t.presets).flatMap(e=>n(t,e).map(t=>ix(bp(e),bu(t)))));return Nb(e.presets).flatMap(t=>n(e,t).map(e=>({member:ix(bp(t),bu(e)),node:e})).filter(({member:e})=>!r.has(e)))}function EU(e,t){return e.flatMap(({member:e,node:n})=>[...Object.values(n.drafts??{}).map(e=>e.key),...e===t?[Qb]:[]])}const DU=(e,t)=>{let[n=``,r=``,i=``]=JH(()=>mM(e)),a=KH(n),o=dU(t,a),s=t.configFor(o),c=VP(s);if(!r)throw new $(`apply-layout-op: <key>/<op> is required (have: ${c.listKeys().join(`, `)})`);let l=c.validate(r,i);if(!l.ok)throw new $(`apply-layout-op: ${l.reason}`);let u=DP(l.value);if(u===null)throw new $(`apply-layout-op: "${l.value}" is not a layout op token`);let d=mU(o),f=kV(hU(t,a),d,r,u);t.reloadConfig(o);let p=EU(TU(s,t.configFor(o)),t.sessionState.get(a,Qb)).filter(e=>t.sessionState.get(a,e)!==null);for(let e of p)t.sessionState.clear(a,e);t.dlog(`info`,`apply-layout-op: ${r} ${l.value} → ${d.path} placed=${JSON.stringify(f)} released=${JSON.stringify(p)} (session=${a})`)},OU=(e,t)=>{let[n=``]=JH(()=>mM(e)),r=KH(n);t.journal.commit();let i=t.history.undo(r);fU(t,r,i),t.dlog(`info`,`undo: restored ${ZV(i)} (session=${r})`)},kU=(e,t)=>{let n=KH(qH(e)),{step:r,discarded:i}=t.navigation.back(n,t.sessionState,UI(pU(t,n))),a=r.map(e=>`${e.key}=${e.before??`∅`}`).join(` `);t.dlog(`info`,`back: ${a} discarded=${i} (session=${n})`)},AU=(e,t)=>{let n=KH(qH(e));t.journal.commit();let r=t.history.rewind(n);fU(t,n,r),t.dlog(`info`,`rewind: put back ${ZV(r)||`nothing`} as edit mode found it (session=${n})`)},jU=(e,t)=>{let[n=``]=JH(()=>mM(e)),r=KH(n);t.journal.commit();let i=t.history.redo(r);fU(t,r,i),t.dlog(`info`,`redo: re-applied ${ZV(i)} (session=${r})`)},MU=(e,t)=>{KH(qH(e)),t.applyUpdate()},NU=`client-hints`;function PU(e,t){let n=e.sessionState.get(t,NU);if(n===null)throw new $(`session ${t} has not rendered yet — no client facts are recorded for it`);let r;try{r=JSON.parse(n)}catch{throw new $(`client hints record is not JSON: ${n}`)}if(typeof r!=`object`||!r)throw new $(`client hints record is not an object: ${n}`);return MA(r)}function FU(e,t,n){let r=mT(n);e.sessionState.setBatch(t,yT(r)),e.dlog(`info`,`doctor: ${r.map(e=>`${e.check.name}=${e.verdict.ok?`ok`:`failed(${1+(e.verdict.more?.length??0)})`}`).join(` `)} (session=${t})`)}function IU(e,t){return{...mH(e.doctor,PU(e,t),dU(e,t),n=>e.sessionState.get(t,n)),urlHandler:fH(e.clientVersion)}}const LU=(e,t)=>{let n=KH(qH(e));FU(t,n,IU(t,n))},RU=(e,t)=>{let n=DH(qH(e));if(n===null)throw new $(`doctor-probe: the value is not a probe nonce`);t.probes.arrive({nonce:n,handler:t.clientVersion}),t.dlog(`info`,`doctor-probe: arrived nonce=${n} handler=${t.clientVersion??`unreported`}`)},zU=(e,t)=>{let[n=``,r=``]=JH(()=>mM(e)),i=KH(n),a=hT(r);if(a===void 0)throw new $(`doctor-fix: unknown check "${r}"`);let o=IU(t,i),s=a.probe(o);if(s.ok||s.fix===void 0)throw new $(`doctor-fix: ${a.label} — ${s.ok?`nothing to fix`:s.reason}`);let c=hH(s.fix,o);t.dlog(`info`,`doctor-fix: ${a.name} → ${s.fix.kind} ${s.fix.path.join(`.`)}=${JSON.stringify(s.fix.value)} (session=${i})`),FU(t,i,c)},BU=(e,t)=>{let[n=``,...r]=JH(()=>mM(e)),i=KH(n),a=dU(t,i),o=Object.values(t.configFor(a).actions).filter(e=>`ceiling`in e).find(e=>{let t=tO(e);return t.length===r.length&&t.every((e,t)=>e===r[t])});if(o===void 0)throw new $(`ceiling: "${r.join(` `)}" is not a move this config declares`);let s=o.ceiling===`set`?{kind:`set`,to:o.to}:{kind:`clear`},c=CF({sessionId:i,projectDir:a.projectDir,cwd:a.cwd},PU(t,i));t.memento.move(c,s),t.dlog(`info`,`ceiling: ${r.join(` `)} (session=${i} claudeConfigDir=${c.claudeConfigDir})`)},VU=(e,t)=>{let[n=``,r=``]=JH(()=>mM(e)),i=KH(n),a=Object.values(t.configFor(dU(t,i)).actions).filter(e=>`slash`in e),o=a.find(e=>e.slash===r);if(o===void 0)throw new $(`${JSON.stringify(r)} is not a command this config declares (it declares: ${[...new Set(a.map(e=>e.slash))].join(`, `)||`none`})`);let s=BH(t.claudeInput,PU(t,i).tmux,o.slash);if(s.kind===`refused`)throw t.dlog(`warn`,`slash: ${r} refused — ${s.reason} (session=${i})`),new $(`${r} was not typed: ${s.reason}`);t.dlog(`info`,`slash: typed ${r} into ${s.pane} (session=${i})`)},HU=`config-override`,UU=new Map([[Wj,XH],[`load-config`,(e,t)=>{let n=e.indexOf(`/`);if(n===-1)throw new $(`load-config: expected <sessionId>/<path> (missing separator)`);let r=KH(JH(()=>decodeURIComponent(e.slice(0,n)))),i=JH(()=>decodeURIComponent(e.slice(n+1))).trim();if(i!==``){if(!i.startsWith(`/`))throw new $(`load-config: path must be absolute, got "${i}"`);if(!/\.(json5?|json)$/.test(i))throw new $(`load-config: path must end with .json5 or .json, got "${i}"`)}i===``?(t.sessionState.clear(r,HU),t.dlog(`info`,`load-config: override cleared (session=${r})`)):(t.sessionState.set(r,HU,i),t.dlog(`info`,`load-config: ${i} (session=${r})`))}],[Gj,ZH],[Hj,tU],[Uj,iU],[Yj,gU],[Xj,_U],[tM,wU],[Zj,vU],[Qj,xU],[$j,SU],[eM,CU],[nM,DU],[rM,OU],[iM,jU],[aM,kU],[oM,AU],[qj,QH],[Jj,$H],[Kj,eU],[sM,MU],[cM,LU],[lM,zU],[uM,RU],[dM,BU],[fM,VU]]),WU=new Set([Hj,Uj,Yj,Xj,tM,Zj,Qj,$j,eM,nM,rM,iM,aM,oM,Kj,sM,cM,lM,dM,fM]),GU=(e,t)=>{let n=[],r=!1,i=null;for(let{verb:a,value:o}of vM(gM(e))){if(!i&&WU.has(a)){let e=mM(o);e.length>0&&e[0]&&(i=e[0])}let e=UU.get(a);if(!e){n.push(`unknown effect verb "${a}"`);continue}try{e(o,t)}catch(e){e instanceof $||(r=!0),n.push(`${a}: ${e instanceof Error?e.message:String(e)}`)}}if(n.length>0){i&&t.sessionState.set(i,`click.error`,n.join(`
210
- `));let e=`dispatch: ${n.join(`; `)}`;throw r?Error(e):new $(e)}};function KU(e){return(t,n)=>{let r=n.history.begin(),i=n.navigation.begin(r.sessionState),a=[];try{e(t,{...n,sessionState:r.sessionState,journal:r,navigating:i.sessionState})}catch(e){a.push(e)}i.commit();try{r.commit()}catch(e){a.push(e)}if(a.length===1)throw a[0];if(a.length>1)throw Error(a.map(e=>String(e.message??e)).join(`; `))}}const qU=new Map([...UU,[Vj,GU]].map(([e,t])=>[e,KU(t)]));Object.freeze([...qU.keys()]);const JU=new Set([`hook_event_name`,`session_id`,`session_name`,`transcript_path`,`cwd`,`model`,`workspace`,`version`,`output_style`,`cost`,`context_window`,`exceeds_200k_tokens`,`effort`,`thinking`,`rate_limits`,`vim`,`agent`,`worktree`]),YU=[[`session_id`,`string`],[`transcript_path`,`string`],[`cwd`,`string`],[`model`,`object`],[`model.id`,`string`],[`model.display_name`,`string`],[`workspace`,`object`],[`workspace.current_dir`,`string`],[`workspace.project_dir`,`string`]],XU=[[`workspace.added_dirs`,`string-list`]];function ZU(e){let t={missingRequired:[],typeMismatches:[],unknownTopLevelFields:[]},n=typeof e==`object`&&e&&!Array.isArray(e)?e:{};for(let[e,r]of YU){let i=eW(n,e);if(i==null)t.missingRequired.push(e);else{let n=QU(i);n!==r&&t.typeMismatches.push({path:e,expected:r,got:n})}}for(let[e,r]of XU){let i=eW(n,e),a=i===void 0?r:$U(i);a!==r&&t.typeMismatches.push({path:e,expected:r,got:a})}for(let e of Object.keys(n))JU.has(e)||t.unknownTopLevelFields.push(e);return{data:e,report:t}}function QU(e){return Array.isArray(e)?`array`:typeof e==`string`&&!e.isWellFormed()?`ill-formed string`:typeof e}function $U(e){return Array.isArray(e)&&e.every(e=>QU(e)===`string`)?`string-list`:QU(e)}function eW(e,t){let n=e;for(let e of t.split(`.`)){if(typeof n!=`object`||!n||Array.isArray(n))return;n=n[e]}return n}function tW(e,t){switch(e){case`vars`:return{what:e,vars:nW(t)};case`segments`:return{what:e,segments:sW(t)};case`config`:return{what:e,config:dW(t)}}}function nW(e){if(e===null)return[];let{store:t,registry:n,config:r}=e,i=aW(r),a=t.names().sort(),o=[];for(let e of a){let r=t.getNode(e),a=rW(r),s=n.getLastError(e);o.push({name:e,source:i.get(e)??null,...a,lastError:s===void 0?null:{timestampMs:s.timestamp,message:s.message},ageMs:iW(r.lastUpdatedMs())})}return o}function rW(e){if(e.kind!==`document`)try{return{type:e.type,value:e.read()}}catch(t){return{type:e.type,value:t instanceof Error?t.message:String(t)}}let t=e.read();switch(t.kind){case`ok`:return{type:`document`,value:JSON.stringify(t.value)};case`absent`:return{type:`document`,value:`(not yet scanned)`};case`failed`:return{type:`document`,value:t.reason}}}function iW(e){return e===null?null:Math.max(0,Date.now()-e)}function aW(e){let t=new Map;for(let[n,r]of Object.entries(e.variables))t.set(n,oW(r));for(let[n,r]of Object.entries(e.segments))if(r.vars)for(let[e,i]of Object.entries(r.vars))t.set(`${n}.${e}`,oW(i));return t}function oW(e){return e.kind}function sW(e){if(e===null)return[];let{store:t,config:n,lastRenderBySegment:r}=e,i=new Set(t.names()),a=lW(n),o=cW(n),s=[];for(let e of a){let t=n.segments[e];t&&s.push({name:e,description:t.description??null,template:t.template,referencedVars:uW(t.template,n.helpers,i),placements:(o.get(e)??[]).map(e=>({id:e,lastRender:r.get(e)??null}))})}return s}function cW(e){let t=new Map;for(let n of Nb(e.presets))for(let r of wu(Ib(e,n).node)){if(r.kind!==`segment`)continue;let e=t.get(r.name)??[],n=bu(r);e.includes(n)||t.set(r.name,[...e,n])}return t}function lW(e){let t=[],n=new Set;for(let r of wu(jd(e.root)))r.kind===`segment`&&e.segments[r.name]&&!n.has(r.name)&&(t.push(r.name),n.add(r.name));for(let r of Object.keys(e.segments))n.has(r)||(t.push(r),n.add(r));return t}function uW(e,t,n){let r=new Set;for(let i of Cx(e,t).keys()){if(n.has(i)){r.add(i);continue}let e=i.split(`.`);for(;e.length>1;){e.pop();let t=e.join(`.`);if(n.has(t)){r.add(t);break}}}return Array.from(r).sort()}function dW(e){return e===null?null:e.config}const fW=[`vars`,`segments`,`config`];function pW(e){return typeof e==`string`&&fW.includes(e)}function mW(e){return Math.max(1,e-2)}var hW=class{written=new Map;constructor(e){this.dir=e}pathFor(e){return l.join(this.dir,`${encodeURIComponent(e)}.txt`)}sync(e,t){let n=this.pathFor(e);if(t===(this.written.get(e)??null))return null;try{return t===null?(r.rmSync(n,{force:!0}),this.written.delete(e)):(r.mkdirSync(this.dir,{recursive:!0,mode:448}),r.writeFileSync(n,t,{mode:384}),this.written.set(e,t)),null}catch(e){return`${n}: ${e.message}`}}reset(){this.written.clear();try{return r.rmSync(this.dir,{recursive:!0,force:!0}),null}catch(e){return`${this.dir}: ${e.message}`}}};const gW=new wB,_W=new TH;ke(gW.launchStats);const vW=new hC({counters:gW,logger:Z}),yW=fR({watchers:vW,logger:Z}),{gitProvider:bW,usageStore:xW,mementoProvider:SW}=yW,CW=new DB,wW=new LV(CW,Z),TW=new oH,EW=new qN,DW=new hW(Ze()),OW=new SB({gitService:bW,sessionState:CW,watchers:vW},{observers:{onReload:e=>Z(`info`,`config loaded projectDir=${e.projectDir} cwd=${e.cwd} files=${e.configLayers.join(` < `)||`<bundled default>`} error=${e.lastError===null?`none`:JSON.stringify(e.lastError)} warning=${e.lastWarning===null?`none`:JSON.stringify(e.lastWarning)}`)}}),kW=60*1e3;function AW(){let e=import.meta.url,n=[];e.startsWith(`file://`)&&n.push(E(e)),t.argv[1]&&n.push(t.argv[1]);let i=new Map;for(let e of n)try{i.set(e,r.statSync(e).mtimeMs)}catch{}let a=null,o=()=>{for(let[e,t]of i)try{if(r.statSync(e).mtimeMs!==t){Z(`info`,`binary mtime changed (${e}); shutting down`),a&&clearInterval(a),KW(0);return}}catch(e){Z(`warn`,`bin stat failed: ${e.message}`)}};return{arm(){i.size!==0&&(a=setInterval(o,kW),a.unref())},checkNow:o}}const jW=AW(),MW=dL({entryUrl:import.meta.url,intervalMs:kW,releaseIntervalMs:216e5,registryUrl:t.env.CC_CANDYBAR_REGISTRY_URL??`https://registry.npmjs.org`,fetchImpl:fetch,onApplied:()=>jW.checkNow(),log:Z});let NW=null,PW=null,FW=0;function IW(){t.on(`uncaughtException`,e=>{Z(`error`,`uncaughtException: ${e.stack||e.message}`),KW(1)}),t.on(`unhandledRejection`,e=>{Z(`error`,`unhandledRejection: ${String(e)}`),KW(1)});for(let e of[`SIGINT`,`SIGTERM`,`SIGHUP`])t.on(e,()=>{Z(`info`,`received ${e}, shutting down`),KW(0)});try{FW=pj(t.env)}catch(e){Z(`error`,`refusing to boot: ${e.message}`),KW(1);return}NW=mN(t.pid);let e=wN(EN(NW));if(!e.decision.allow){Z(`warn`,`fork-bomb breaker: ${e.decision.reason}; refusing to boot`),KW(1);return}PW=e.registryPath,r.mkdirSync(Re(),{recursive:!0}),He(ze()),CW.useStorage(new kB(Ge(),500,Z)),wW.useStorage(iH(Ke(),Z)),_N({anchor:gN(t.env),isAlive:vN,onOrphaned:e=>{Z(`info`,`parent watchdog: ${e}; shutting down`),KW(0)}}),LW(x.createServer({allowHalfOpen:!1},e=>{qW(e)}),ze(),!1)}function LW(e,n,r){e.removeAllListeners(`error`),e.removeAllListeners(`listening`),e.once(`error`,i=>{if(i.code!==`EADDRINUSE`){Z(`error`,`server error: ${i.message}`),KW(1);return}if(r){Z(`info`,`lost rebind race; another daemon is alive — exiting`),t.exit(0);return}RW(e,n)}),e.listen(n,()=>zW(n))}function RW(e,n){let i=iN(aN(Ue(n)),(e,t)=>pN(e,t,{readStartTime:fN,pidAlive:vN}));if(i.kind===`attach-and-exit`){Z(`info`,`EADDRINUSE: ${i.reason} — exiting`),t.exit(0);return}Z(`warn`,`EADDRINUSE: ${i.reason} — unlinking stale socket and rebinding`);try{r.unlinkSync(n)}catch(e){if(e.code!==`ENOENT`){Z(`error`,`cannot unlink stale socket ${n}: ${e.message}`),KW(1);return}}LW(e,n,!0)}function zW(e){let n=cN(e);if(n.kind!==`present`){Z(`warn`,`no ownable socket at bind callback (${n.kind}); exiting`),KW(0);return}UW(e);try{r.chmodSync(e,384)}catch(e){Z(`warn`,`chmod socket failed: ${e.message}`)}Z(`info`,`daemon up: pid=${t.pid} v=3 sock=${e} heapCap=${Math.round(re.getHeapStatistics().heap_size_limit/1048576)}MB rssLimit=${Math.round(FW/1048576)}MB`),Aj();let i=DW.reset();i!==null&&Z(`warn`,`diagnostic dump wipe failed: ${i}`),jW.arm(),MW.arm(),HW(),BW(e,n.identity)}function BW(e,n){dN({bound:n,myPid:t.pid,readIdentity:()=>cN(e),readLease:()=>aN(Ue(e)),shutdown:e=>KW(e),log:Z}).arm()}let VW=null;function HW(){VW=_j(xj(gW.startedAt.getTime(),e=>KW(e),{rssLimitBytes:FW})),VW.arm()}function UW(e){let n=oN(Ue(e),{pid:t.pid,version:3,binPath:t.argv[1],startTime:NW});n!==null&&Z(`warn`,`lease write failed: ${n}`)}let WW=0,GW=!1;function KW(e){if(!GW){GW=!0,setTimeout(()=>t.kill(t.pid,`SIGKILL`),500);try{bW.close()}catch(e){Z(`warn`,`gitService close failed: ${e.message}`)}try{xW.close()}catch(e){Z(`warn`,`usageStore close failed: ${e.message}`)}try{vW.closeAll()}catch(e){Z(`warn`,`watcherRegistry close failed: ${e.message}`)}try{CW.flush()}catch(e){Z(`warn`,`sessionState flush failed: ${e.message}`)}sN(We(),t.pid),PW!==null&&TN(PW,t.pid,SN,e=>r.unlinkSync(e)),t.exit(e)}}function qW(e){WW++,gW.inFlight=WW;let t=!1,n=(n,r)=>{if(t){r!==null&&Z(`warn`,`exit-after-flush dropped: an earlier responder settled this socket`);return}t=!0;let i=r===null?void 0:()=>KW(r);try{e.end(HA(n),i)}catch(e){Z(`warn`,`response write failed: ${e.message}`),i?.()}},r=setTimeout(()=>{gW.requestsTimedOut++,n({ok:!1,error:`request exceeded 200ms`,code:`TIMEOUT`,daemonV:3},null)},200),i=UA(e=>{YW(e).then(e=>n(e.resp,e.exitAfterFlush)).catch(e=>{Z(`error`,`handler threw: ${e?.stack||e}`),n({ok:!1,error:String(e?.message||e),code:`RENDER_FAILED`,daemonV:3},null)})},e=>{Z(`warn`,`frame parse failed: ${e.message}`),n({ok:!1,error:e.message,code:`BAD_REQUEST`,daemonV:3},null)});e.on(`data`,i),e.on(`error`,e=>{Z(`warn`,`socket error: ${e.message}`)}),e.on(`close`,()=>{clearTimeout(r),WW=Math.max(0,WW-1),gW.inFlight=WW})}const JW=e=>({resp:e,exitAfterFlush:null});async function YW(e){if(!e||typeof e!=`object`||typeof e.v!=`number`)return JW({ok:!1,error:`malformed request`,code:`BAD_REQUEST`,daemonV:3});if(e.v!==3)return e.v>3?Z(`info`,`version mismatch: client=${e.v} > daemon=3; binary likely upgraded — exiting after the response flushes`):Z(`info`,`version mismatch: client=${e.v} < daemon=3; client is stale — staying up`),{resp:{ok:!1,error:`protocol v${e.v} not supported (daemon at v3)`,code:`VERSION_MISMATCH`,daemonV:3},exitAfterFlush:e.v>3?0:null};if(e.kind===`shutdown`)return{resp:{ok:!0,output:``},exitAfterFlush:0};if(e.kind===`stats`)return JW({ok:!0,stats:gW.snapshot({gitCache:bW.getStats(),usageCache:xW.getStats(),renderCacheSize:OW.size,effectCache:EW.getStats(),watchersActive:vW.size(),nextRestartReason:VW?.describeNextRestart()??null,handlerProbes:_W.list()})});if(e.kind===`render`){gW.requestsTotal++;let t=new Date,n=DC(t),r=t.getTime();try{let{report:t}=ZU(e.hookData);for(let e of t.unknownTopLevelFields)Z(`info`,`schema: unknown field '${e}' — Anthropic may have added it`);let i=[];for(let e of t.missingRequired)i.push(`missing required field '${e}'`);for(let{path:e,expected:n,got:r}of t.typeMismatches)i.push(`field '${e}' expected ${n}, got ${r}`);if(e.cwd===``&&i.push(`request 'cwd' is empty`),i.length>0)return gW.requestsErrored++,Z(`warn`,`BAD_REQUEST: ${i.join(`; `)}`),JW({ok:!1,error:`malformed hookData: ${i.join(`; `)}`,code:`BAD_REQUEST`,daemonV:3});let a=e.hookData.workspace.project_dir,{configFile:o,unknownFlagsError:s}=XW(e.args),c=e.hookData.session_id,l=MA(e),u=JSON.stringify(l);CW.get(c,`client-hints`)!==u&&CW.set(c,NU,u);let d=CW.get(c,`config-override`)??o??l.configEnv,f=OW.getOrCreate(a,e.cwd,d),p=lU({projectDir:a,cwd:e.cwd,configFile:d??null});CW.get(c,`render-origin`)!==p&&CW.set(c,cU,p);let m=l.termCols,h=mW(m??120),g=aP(l.termRows),{authoredRoots:_}=f.state,v=t=>CW.get(e.hookData.session_id,t),y=IF(f.state.config,v,e=>_.has(e)),b=await $F(e.hookData,n,{...tG,navigation:e=>TW.depth(e,CW,UI(f.state.config))},e.cwd,f.state.neededInputPaths(y.preset),y,l,{...AI(f.state.config,f.state.fileHeldSettings,v),configPath:f.configLayers.includes(f.configHome)?f.configHome:null}),x=[],S=LF(y,h),C=EW.of(c),ee=tB(f.state.config,f.state.compiled,f.state.store,f.state.registry,b,n,S,{perSegmentSink:f.state.lastRenderCellsBySegment,onRenderWarning:e=>x.push(e)},{...RF(y),effects:C}),w=CW.get(e.hookData.session_id,`click.error`);w&&CW.clear(e.hookData.session_id,`click.error`);let te=[s,f.lastError,w].filter(Boolean).join(`
211
- `),ne=MW.notice({sessionId:c,dismissed:CW.get(c,YI),enabled:y.updateNotice}),re=f.lastError===null?null:f.failedFile,ie=[...f.lastWarning===null?[]:[{kind:`load`,message:f.lastWarning}],...x],T=uP(te,ne,ie.map(e=>e.message).join(`
212
- `)),E=DW.sync(c,T===null?null:fP(T));E!==null&&Z(`warn`,`diagnostic dump failed: ${E}`);let ae=pP(ee,T,{fullText:E===null?{kind:`file`,path:DW.pathFor(c)}:{kind:`unavailable`,reason:E},failedConfigFile:re},{width:h,rowCap:g,colorCompatibility:y.colorCompatibility}),oe=Date.now()-r,se=bW.getStats(),ce=xW.getStats(),le=C.lastFrame(),ue=le.own.map(e=>`${e.placement}:${e.effect}@${e.t.toFixed(3)}`).join(`,`)||`-`,de=e=>e.map(e=>`${e.placement}@${e.t.toFixed(3)}`).join(`,`)||`-`,fe=ie.map(e=>e.kind).join(`,`)||`-`;return Z(`info`,`render sid=${e.hookData.session_id??`?`} at=${n.toFixed(3)} took=${oe}ms termCols=${m??`?`} termRows=${l.termRows??`?`} width=${h} git=${se.size}/${se.hits}h/${se.misses}m usage=${ce.size}/${ce.hits}h/${ce.misses}m effect=${le.effect} effectT=${le.t.toFixed(3)} effectRows=${le.made}made/${le.reused}reused effectOwn=${ue} fadeBasis=${le.basis} stateRev=${le.revision} fades=${de(le.fades)} leaves=${de(le.leaves)} prompts=${b.metrics?.messageCount??`-`} nonPrompts=${b.metrics?.nonPrompts??`-`} err=${te?`Y`:`N`} upd=${ne.length} warn=${fe}`),JW({ok:!0,output:ae+`
213
- `})}catch(e){throw gW.requestsErrored++,e}}if(e.kind===`click`)return JW(nG(e.verb,e.value,BA(e.clientVersion)));if(e.kind===`debug`){if(!pW(e.what))return JW({ok:!1,error:`unknown debug 'what': ${String(e.what)} (have: ${fW.join(`, `)})`,code:`BAD_REQUEST`,daemonV:3});let t=OW.firstState(),n=t===null?null:{store:t.store,registry:t.registry,config:t.config,compiled:t.compiled,lastRenderBySegment:e.what===`segments`?eG(t.lastRenderCellsBySegment,t.config.globals.charset??`unicode`,t.config.globals.colorCompatibility??`truecolor`):$W};return JW({ok:!0,debug:tW(e.what,n)})}return JW({ok:!1,error:`unknown kind`,code:`BAD_REQUEST`,daemonV:3})}function XW(e){let{values:t,tokens:n}=y({args:e.slice(1),options:{config:{type:`string`}},strict:!1,tokens:!0,allowPositionals:!0}),r=[...new Set((n??[]).filter(e=>e.kind===`option`&&e.name!==`config`).map(e=>`--${e.name}`))];return{configFile:FA(t.config),unknownFlagsError:r.length>0?`Unknown flags: ${r.join(`, `)}`:null}}const ZW={sessionState:CW,dlog:Z,applyUpdate:()=>MW.act(),doctor:cH(e=>{let t=[e.projectDir,e.cwd,e.configFile??void 0];OW.reload(...t);let n=OW.getOrCreate(...t);return{layers:n.configLayers,error:n.lastError,warning:n.lastWarning,unused:n.state.unused,config:n.state.config}}),probes:_W,memento:SW,claudeInput:GH(),history:wW,navigation:TW,configFor:e=>OW.getOrCreate(e.projectDir,e.cwd,e.configFile??void 0).state.config,reloadConfig:e=>OW.reload(e.projectDir,e.cwd,e.configFile??void 0)};ZW.reloadConfig;const QW={endcaps:`powerline`,colorCompatibility:`truecolor`,wrap:!0,padding:1,charset:rl,width:1/0},$W=new Map;function eG(e,t,n){let r=new Map;for(let[i,a]of e)r.set(i,iP(a,{...QW,charset:t,colorCompatibility:n}));return r}const tG={...yW,history:e=>wW.depth(e)};function nG(e,t,n){let r=qU.get(e);if(!r)return{ok:!1,error:`unknown click verb: ${e}`,code:`BAD_REQUEST`,daemonV:3};try{return r(t,{...ZW,clientVersion:n}),{ok:!0,output:``}}catch(e){let t=e instanceof $?`BAD_REQUEST`:`RENDER_FAILED`;return{ok:!1,error:String(e instanceof Error?e.message:e),code:t,daemonV:3}}}const rG={connectMs:200,budgetMs:500};async function iG(e,n){let r=n.includes(`--json`),i=await aG(e);if(i.kind!==`ok`&&(t.stderr.write(`${e}: ${ZA(i)}\n`),t.exit(1)),r){t.stdout.write(JSON.stringify(i.value,null,2)+`
214
- `);return}t.stdout.write(oG(i.value))}function aG(e){return GA({kind:`debug`,what:e},rG,e=>`debug`in e?e.debug:void 0)}function oG(e){switch(e.what){case`vars`:return sG(e.vars);case`segments`:return cG(e.segments);case`config`:return lG(e.config);default:return e}}function sG(e){if(e.length===0)return`no variables (DSL not active)
215
- `;let t=[`variables (${e.length})`,``],n=e.reduce((e,t)=>Math.max(e,t.name.length),4),r=e.reduce((e,t)=>Math.max(e,(t.source??`—`).length),6),i=e.reduce((e,t)=>Math.max(e,t.type.length),4);for(let a of e){let e=a.ageMs===null?``:` ${dG(a.ageMs)}`,o=a.lastError?` ✗ ${a.lastError.message}`:``;t.push(` ${a.name.padEnd(n)} ${(a.source??`—`).padEnd(r)} ${a.type.padEnd(i)} ${uG(a.value)}${e}${o}`)}return t.join(`
207
+ `}const wH=e=>({kind:`ok`,value:e}),TH=e=>({kind:`failed`,reason:e});var EH=class{arrivals=[];arrive(e){this.arrivals=[...this.arrivals,e].slice(-16)}list(){return this.arrivals}};const DH=/^[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}$/;function OH(e){return DH.test(e)?e:null}function kH(e){let t=e.opener();if(t.kind===`failed`)return t;if(t.value===null)return wH(null);let n=t.value,r=e.script(n);if(r.kind===`failed`)return wH({app:n,missing:TH(`its script could not be read (${r.reason})`)});let i=HM(r.value);return wH({app:n,missing:i===null?TH("its script is not one `cc-candybar install` wrote"):wH([i.node,i.script].filter(t=>!e.exists(t)))})}async function AH(e,t){let n=e.now()+5e3;for(;e.now()<n;){await e.pause();let n=await e.daemon(),r=n.kind===`ok`?n.value.arrivals.find(e=>e.nonce===t):void 0;if(n.kind===`ok`&&r!==void 0)return{kind:`arrived`,handler:r.handler,bar:n.value.version}}return null}async function jH(e){if(e.platform!==`darwin`)return{kind:`unsupported`};if(e.sockets.own!==e.sockets.handler)return{kind:`unprobed`,reason:`this shell's daemon is at ${e.sockets.own} (CC_CANDYBAR_SOCKET); the URL handler delivers links to ${e.sockets.handler}`};let t=await e.daemon();if(t.kind===`failed`)return{kind:`unprobed`,reason:`the daemon could not be asked whether a link arrives: ${t.reason}`};let n=e.nonce(),r=e.open(`${Bj}://${uM}/${n}`);return(r===null?await AH(e,n):null)??{kind:`lost`,unopened:r,opener:kH(e)}}function MH(e,t,n){let r=O({bin:t,args:[...n],category:e,timeoutMs:5e3});return r.ok?wH(r.stdout):TH(r.stderr.trim()||r.error||r.reason)}const NH=`ObjC.import("AppKit");var u = $.NSWorkspace.sharedWorkspace.URLForApplicationToOpenURL($.NSURL.URLWithString("${Bj}://probe"));u.isNil() ? "" : u.path.js`;async function PH(){let e=await yH();if(e.kind!==`ok`)return TH(ZA(e).split(`
208
+ `).join(` — `));let{version:t,handlerProbes:n}=e.value;return Array.isArray(n)?wH({version:t,arrivals:n}):TH(`the running daemon (${t}) predates this check`)}function FH(){return{platform:process.platform,sockets:{own:ze(),handler:Be()},now:Date.now,nonce:ce,daemon:PH,open:e=>{let t=MH(`doctor.open`,`/usr/bin/open`,[`-g`,e]);return t.kind===`ok`?null:t.reason},pause:()=>new Promise(e=>setTimeout(e,100)),opener:()=>{let e=MH(`doctor.launch-services`,`/usr/bin/osascript`,[`-l`,`JavaScript`,`-e`,NH]);if(e.kind===`failed`)return e;let t=e.value.trim();return wH(t===``?null:t)},script:e=>MH(`doctor.osadecompile`,`/usr/bin/osadecompile`,[UM(e)]),exists:r.existsSync}}const IH=/^─{20,}/,LH=/^❯(\s|$)/,RH=/›\s*stashed$/;function zH(e){if(e.inMode)return{kind:`in-mode`};let t=e.screen.map(e=>e.trimEnd()),n=t.flatMap((e,t)=>IH.test(e)?[t]:[]).at(-2);return n===void 0||!LH.test(t[n+1]??``)?{kind:`no-prompt`}:RH.test(t[n-1]??``)?{kind:`stashed`}:{kind:`ready`}}const BH={"in-mode":`the Claude Code pane is in tmux copy mode — leave it (q) and click again`,stashed:`Claude Code is holding a stashed prompt (ctrl+s) — restore or send it, then click again`,"no-prompt":`Claude Code is not at its prompt (a dialog or picker is open) — close it and click again`};function VH(e,t,n){if(t===void 0)return{kind:`refused`,reason:`this session's statusline client reports no tmux facts (it predates this daemon) — rebuild or reinstall cc-candybar`};if(t===null)return{kind:`refused`,reason:`this Claude Code is not running inside tmux — the bar can only type into a tmux pane`};let r=zH(e.read(t));if(r.kind!==`ready`)return{kind:`refused`,reason:BH[r.kind]};let i=e.type(t,n);return i.kind===`typed`?{kind:`typed`,pane:t.pane}:i}const HH=`cc-candybar-slash`;function UH(e,t,n,r){let i=sR(e,t,n,r);if(i.kind===`failed`)throw Error(i.reason);return i}function WH(e){let t=UH(e,`claude-input.read`,[`display`,`-p`,`-t`,e.pane,`#{pane_in_mode}`,`;`,`capture-pane`,`-p`,`-t`,e.pane]);if(t.kind===`rate-limited`)throw Error(t.reason);let[n=``,...r]=t.stdout.split(`
209
+ `);return{inMode:n!==`0`,screen:r}}function GH(e,t){let n=UH(e,`claude-input.type`,[`load-buffer`,`-b`,HH,`-`,`;`,`send-keys`,`-t`,e.pane,`C-s`,`;`,`paste-buffer`,`-p`,`-d`,`-b`,HH,`-t`,e.pane,`;`,`send-keys`,`-t`,e.pane,`Enter`],t);return n.kind===`ok`?{kind:`typed`}:{kind:`refused`,reason:`cc-candybar typed a command moments ago — click again in a second (${n.reason})`}}function KH(){return{read:WH,type:GH}}function qH(e){if(!e)throw new $(`session id is required`);if(e.includes(`/`)||e.includes(`..`))throw new $(`invalid session id "${e}"`);return e}function JH(e){return YH(()=>decodeURIComponent(e))}function YH(e){try{return e()}catch(e){throw e instanceof URIError?new $(`malformed wire encoding: ${e.message}`):e}}function XH(e,t){let n=O({bin:`/usr/bin/pbcopy`,stdinInput:e,category:`click.pbcopy`});if(!n.ok){if(n.reason===`rate-limited`){t.dlog(`warn`,`click.pbcopy rate-limited: ${n.error??``}`);return}throw Error(`pbcopy failed (${n.reason}, exit ${n.exitCode??`null`})`)}}const ZH=(e,t)=>XH(JH(e),t),QH=(e,t)=>{let n=O({bin:`/usr/bin/open`,args:[`-a`,`Visual Studio Code`,JH(e)],category:`click.open`});if(!n.ok){if(n.reason===`rate-limited`){t.dlog(`warn`,`click.open rate-limited: ${n.error??``}`);return}throw Error(`open -a "Visual Studio Code" failed (${n.reason}, exit ${n.exitCode??`null`})`)}},$H=(e,t)=>XH(JH(e),t),eU=(e,t)=>XH(JH(e),t),tU=(e,t)=>{let n=qH(JH(e));t.navigating.get(n,`toolbar-expanded`)?t.navigating.clear(n,`toolbar-expanded`):t.navigating.set(n,`toolbar-expanded`,`1`)},nU=(e,t)=>{let[n=``,...r]=YH(()=>mM(e)),i=qH(n),a=WI(mU(t,i));if(r.length===0)throw new $(`set-state: <key>/<value> is required (have keys: ${a.listKeys().join(`, `)})`);if(r.length%2!=0)throw new $(`set-state: expected even-count <key>/<value> pairs, got ${r.length} segment(s) after session id (have keys: ${a.listKeys().join(`, `)})`);let o=[];for(let e=0;e<r.length;e+=2){let t=r[e],n=r[e+1];if(!t)throw new $(`set-state: empty key at pair ${e/2+1} (expected <sessionId>/<key>/<value>[/<key>/<value>...] segments)`);let i=a.validate(t,n);if(!i.ok)throw new $(`set-state: pair ${e/2+1}: ${i.reason}`);o.push({key:t,value:i.value})}oU(t,i,`set-state`,o),t.navigating.setBatch(i,o);let s=o.map(e=>`${e.key}=${e.value}`).join(` `);t.dlog(`info`,`set-state: ${s} (session=${i})`)},rU=/^-?\d+$/;function iU(e,t,n,r){let i=e+t;return i>r?e===r?n:r:i<n?e===n?r:n:i}const aU=(e,t)=>{let[n=``,r=``,i=``]=YH(()=>mM(e)),a=qH(n);if(!r)throw new $(`step-state: <key> is required (shape: <sessionId>/<key>/<by>)`);if(!rU.test(i))throw new $(`step-state: delta must be an integer, got "${i}"`);let o=parseInt(i,10),s=mU(t,a),c=WI(s),l=c.rangeParamsFor(r);if(!l)throw new $(`step-state: key "${r}" is not a bounded (range) state key (have keys: ${c.listKeys().join(`, `)})`);let u=t.sessionState.get(a,r),d=u&&rU.test(u)?sU(l,parseInt(u,10)):cU(`step-state`,r,l,qI(s,e=>t.sessionState.get(a,e),r)),f=iU(d,o,l.min,l.max),p=c.validate(r,String(f));if(!p.ok)throw new $(`step-state: ${p.reason}`);oU(t,a,`step-state`,[{key:r,value:p.value}]),t.navigating.set(a,r,p.value),t.dlog(`info`,`step-state: ${r} ${d}→${p.value} (by ${o}, session=${a})`)};function oU(e,t,n,r){let i=r.filter(e=>e.key.startsWith(rx));if(i.length===0)return;let a=CI(mU(e,t),n=>e.sessionState.get(t,n),i);if(a.length>0)throw new $(`${n}: refused — ${a.join(`; `)}`)}function sU(e,t){return Math.max(e.min,Math.min(e.max,t))}function cU(e,t,n,r){if(r===null)return n.min;if(!rU.test(r))throw new $(`${e}: "${t}" shows ${JSON.stringify(r)} before any click, not an integer to step`);return sU(n,parseInt(r,10))}const lU=`render-origin`;function uU(e){return JSON.stringify(e)}function dU(e){let t;try{t=JSON.parse(e)}catch{throw new $(`render origin is not JSON: ${e}`)}if(typeof t!=`object`||!t)throw new $(`render origin is not an object: ${e}`);let{projectDir:n,cwd:r,configFile:i}=t;if(typeof n!=`string`||typeof r!=`string`||i!==null&&typeof i!=`string`)throw new $(`render origin has the wrong shape: ${e}`);return{projectDir:n,cwd:r,configFile:i}}function fU(e,t){let n=e.sessionState.get(t,lU);if(n===null)throw new $(`session ${t} has not rendered yet — no config to act on`);return dU(n)}function pU(e,t,n){let r=e.sessionState.get(t,lU);if(r===null)return;let i=dU(r),{path:a}=hU(i);n.some(e=>e.kind===`file`&&e.file===a)&&e.reloadConfig(i)}function mU(e,t){return e.configFor(fU(e,t))}function hU(e){return Ik(e.projectDir,e.cwd,e.configFile??void 0)}function gU(e,t){return{record:(n,r,i)=>e.journal.file(t,n,r,i),logger:e.dlog}}const _U=(e,t)=>{let[n=``,r=``,i=``]=YH(()=>mM(e)),a=qH(n),o=fU(t,a),s=t.configFor(o),c=VP(s);if(!r)throw new $(`set-config: <key>/<value> is required (have keys: ${c.listKeys().join(`, `)})`);let l=c.validate(r,i);if(!l.ok)throw new $(`set-config: ${l.reason}`);let u=hU(o),d=xI(s,e=>t.sessionState.get(a,e),r);yV(gU(t,a),u,[[d.key,l.value]]),t.reloadConfig(o),t.dlog(`info`,`set-config: ${d.key}=${l.value} → ${u.path} (session=${a})`)},vU=(e,t)=>{let[n=``,r=``,i=``]=YH(()=>mM(e)),a=qH(n);if(!r)throw new $(`step-config: <key> is required (shape: <sessionId>/<key>/<by>)`);if(!rU.test(i))throw new $(`step-config: delta must be an integer, got "${i}"`);let o=parseInt(i,10),s=fU(t,a),c=t.configFor(s),l=VP(c),u=l.rangeParamsFor(r);if(!u)throw new $(`step-config: key "${r}" is not a bounded (range) config key (have keys: ${l.listKeys().join(`, `)})`);let d=hU(s),f=xI(c,e=>t.sessionState.get(a,e),r),p=vV(d.path,f.key),m=typeof p==`number`?sU(u,p):cU(`step-config`,r,u,UP(f.globals,r)),h=iU(m,o,u.min,u.max),g=l.validate(r,String(h));if(!g.ok)throw new $(`step-config: ${g.reason}`);yV(gU(t,a),d,[[f.key,g.value]]),t.reloadConfig(s),t.dlog(`info`,`step-config: ${f.key} ${m}→${g.value} (by ${o}) → ${d.path} (session=${a})`)},yU=(e,t)=>{let[n=``]=YH(()=>mM(e)),r=qH(n),i=fU(t,r),a=t.configFor(i),o=e=>t.sessionState.get(r,e),s=yI(a,o),c=SI(a,o);if(s.length+c.length===0){t.dlog(`info`,`save: nothing unsaved (session=${r})`);return}let l=WI(a),u=s.map(e=>{let t=l.validate(e.sessionKey,e.value);if(!t.ok)throw new $(`save: ${t.reason}`);return[e.target,t.value]});xU(`save`,l,c);let d=hU(i);bV(gU(t,r),d,u,c),t.reloadConfig(i);for(let e of[...s.map(e=>e.sessionKey),...c.map(e=>e.key)])t.sessionState.clear(r,e);t.dlog(`info`,`save: ${[...u.map(([e,t])=>`${e}=${t}`),...c.map(bU)].join(` `)} → ${d.path} (session=${r})`)},bU=e=>`${e.preset}/${e.id}.settings.${e.setting}=${Vu(e.value)}`;function xU(e,t,n){for(let r of n){let n=t.validate(r.key,Vu(r.value));if(!n.ok)throw new $(`${e}: ${n.reason}`)}}const SU=(e,t)=>{let[n=``]=YH(()=>mM(e)),r=qH(n),i=fU(t,r),a=t.configFor(i),o=EI(a,e=>t.sessionState.get(r,e)),s=WI(a),c=o.picks.map(e=>{let t=s.validate(e.sessionKey,e.value);if(!t.ok)throw new $(`save-preset: ${t.reason}`);return[e.configKey,t.value]});xU(`save-preset`,s,o.placements);let l=hU(i),u=DV(gU(t,r),l,o.from,o.globals,c,o.placements);t.reloadConfig(i);for(let e of[...tw.map(e=>e.sessionKey),...o.placements.map(e=>e.key)])t.sessionState.clear(r,e);t.sessionState.set(r,ew.preset.sessionKey,u),t.dlog(`info`,`save-preset: ${[`${u} from=${o.from}`,...c.map(([e,t])=>`${e}=${t}`),...o.placements.map(bU)].join(` `)} → ${l.path} (session=${r})`)},CU=(e,t)=>{let[n=``]=YH(()=>mM(e)),r=qH(n),i=fU(t,r),a=OI(t.configFor(i),e=>t.sessionState.get(r,e));if(a.kind===`rule`)throw new $(`save-theme-default: the theme is chosen by a rule (globals.palette), so there is no name to save as a theme's default — pick one in the menu first`);let o=hU(i);OV(gU(t,r),o,a.theme,a.look),t.reloadConfig(i);let s=new Set(yI(t.configFor(i),e=>t.sessionState.get(r,e)).map(e=>e.sessionKey)),c=ku.map(e=>ew[e].sessionKey).filter(e=>!s.has(e));for(let e of c)t.sessionState.clear(r,e);t.dlog(`info`,`save-theme-default: ${a.theme} ${ku.map(e=>`${e}=${a.look[e]}`).join(` `)} → ${o.path} (session=${r})`)},wU=(e,t)=>{let[n=``,r=``]=YH(()=>mM(e)),i=qH(n);if(!r)throw new $(`delete-preset: <name> is required (shape: <sessionId>/<name>)`);let a=fU(t,i),o=hU(a);kV(gU(t,i),o,r),t.reloadConfig(a);let s=ew.preset.sessionKey;t.sessionState.get(i,s)===r&&t.sessionState.clear(i,s),t.dlog(`info`,`delete-preset: ${r} ← ${o.path} (session=${i})`)},TU=(e,t)=>{let[n=``,...r]=YH(()=>mM(e)),i=qH(n),a=fU(t,i),o=VP(t.configFor(a)).listKeys(),s=r.length===0?[``]:r.filter(e=>!o.includes(e));if(s.length>0)throw new $(`reset-config: unknown config key "${s.join(`", "`)}" (have: ${o.join(`, `)})`);let c=hU(a),l=r.map(kI),u=l.flatMap(e=>e.fileKeys),d=l.flatMap(e=>e.sessionKeys);wV(gU(t,i),c,u),t.reloadConfig(a);for(let e of d)t.sessionState.clear(i,e);t.dlog(`info`,`reset-config: ${[...u,...d.map(e=>`session:${e}`)].join(` `)} ← ${c.path} (session=${i})`)};function EU(e,t){let n=(e,t)=>[...wu(Ib(e,t).node)].filter(e=>e.kind===`segment`),r=new Set(Nb(t.presets).flatMap(e=>n(t,e).map(t=>ix(bp(e),bu(t)))));return Nb(e.presets).flatMap(t=>n(e,t).map(e=>({member:ix(bp(t),bu(e)),node:e})).filter(({member:e})=>!r.has(e)))}function DU(e,t){return e.flatMap(({member:e,node:n})=>[...Object.values(n.drafts??{}).map(e=>e.key),...e===t?[Qb]:[]])}const OU=(e,t)=>{let[n=``,r=``,i=``]=YH(()=>mM(e)),a=qH(n),o=fU(t,a),s=t.configFor(o),c=VP(s);if(!r)throw new $(`apply-layout-op: <key>/<op> is required (have: ${c.listKeys().join(`, `)})`);let l=c.validate(r,i);if(!l.ok)throw new $(`apply-layout-op: ${l.reason}`);let u=DP(l.value);if(u===null)throw new $(`apply-layout-op: "${l.value}" is not a layout op token`);let d=hU(o),f=AV(gU(t,a),d,r,u);t.reloadConfig(o);let p=DU(EU(s,t.configFor(o)),t.sessionState.get(a,Qb)).filter(e=>t.sessionState.get(a,e)!==null);for(let e of p)t.sessionState.clear(a,e);t.dlog(`info`,`apply-layout-op: ${r} ${l.value} → ${d.path} placed=${JSON.stringify(f)} released=${JSON.stringify(p)} (session=${a})`)},kU=(e,t)=>{let[n=``]=YH(()=>mM(e)),r=qH(n);t.journal.commit();let i=t.history.undo(r);pU(t,r,i),t.dlog(`info`,`undo: restored ${QV(i)} (session=${r})`)},AU=(e,t)=>{let n=qH(JH(e)),{step:r,discarded:i}=t.navigation.back(n,t.sessionState,WI(mU(t,n))),a=r.map(e=>`${e.key}=${e.before??`∅`}`).join(` `);t.dlog(`info`,`back: ${a} discarded=${i} (session=${n})`)},jU=(e,t)=>{let n=qH(JH(e));t.journal.commit();let r=t.history.rewind(n);pU(t,n,r),t.dlog(`info`,`rewind: put back ${QV(r)||`nothing`} as edit mode found it (session=${n})`)},MU=(e,t)=>{let[n=``]=YH(()=>mM(e)),r=qH(n);t.journal.commit();let i=t.history.redo(r);pU(t,r,i),t.dlog(`info`,`redo: re-applied ${QV(i)} (session=${r})`)},NU=(e,t)=>{qH(JH(e)),t.applyUpdate()},PU=`client-hints`;function FU(e,t){let n=e.sessionState.get(t,PU);if(n===null)throw new $(`session ${t} has not rendered yet — no client facts are recorded for it`);let r;try{r=JSON.parse(n)}catch{throw new $(`client hints record is not JSON: ${n}`)}if(typeof r!=`object`||!r)throw new $(`client hints record is not an object: ${n}`);return MA(r)}function IU(e,t,n){let r=mT(n);e.sessionState.setBatch(t,yT(r)),e.dlog(`info`,`doctor: ${r.map(e=>`${e.check.name}=${e.verdict.ok?`ok`:`failed(${1+(e.verdict.more?.length??0)})`}`).join(` `)} (session=${t})`)}function LU(e,t){return{...hH(e.doctor,FU(e,t),fU(e,t),n=>e.sessionState.get(t,n)),urlHandler:pH(e.clientVersion)}}const RU=(e,t)=>{let n=qH(JH(e));IU(t,n,LU(t,n))},zU=(e,t)=>{let n=OH(JH(e));if(n===null)throw new $(`doctor-probe: the value is not a probe nonce`);t.probes.arrive({nonce:n,handler:t.clientVersion}),t.dlog(`info`,`doctor-probe: arrived nonce=${n} handler=${t.clientVersion??`unreported`}`)},BU=(e,t)=>{let[n=``,r=``]=YH(()=>mM(e)),i=qH(n),a=hT(r);if(a===void 0)throw new $(`doctor-fix: unknown check "${r}"`);let o=LU(t,i),s=a.probe(o);if(s.ok||s.fix===void 0)throw new $(`doctor-fix: ${a.label} — ${s.ok?`nothing to fix`:s.reason}`);let c=gH(s.fix,o);t.dlog(`info`,`doctor-fix: ${a.name} → ${s.fix.kind} ${s.fix.path.join(`.`)}=${JSON.stringify(s.fix.value)} (session=${i})`),IU(t,i,c)},VU=(e,t)=>{let[n=``,...r]=YH(()=>mM(e)),i=qH(n),a=fU(t,i),o=Object.values(t.configFor(a).actions).filter(e=>`ceiling`in e).find(e=>{let t=tO(e);return t.length===r.length&&t.every((e,t)=>e===r[t])});if(o===void 0)throw new $(`ceiling: "${r.join(` `)}" is not a move this config declares`);let s=o.ceiling===`set`?{kind:`set`,to:o.to}:{kind:`clear`},c=wF({sessionId:i,projectDir:a.projectDir,cwd:a.cwd},FU(t,i));t.memento.move(c,s),t.dlog(`info`,`ceiling: ${r.join(` `)} (session=${i} claudeConfigDir=${c.claudeConfigDir})`)},HU=(e,t)=>{let[n=``,r=``]=YH(()=>mM(e)),i=qH(n),a=Object.values(t.configFor(fU(t,i)).actions).filter(e=>`slash`in e),o=a.find(e=>e.slash===r);if(o===void 0)throw new $(`${JSON.stringify(r)} is not a command this config declares (it declares: ${[...new Set(a.map(e=>e.slash))].join(`, `)||`none`})`);let s=VH(t.claudeInput,FU(t,i).tmux,o.slash);if(s.kind===`refused`)throw t.dlog(`warn`,`slash: ${r} refused — ${s.reason} (session=${i})`),new $(`${r} was not typed: ${s.reason}`);t.dlog(`info`,`slash: typed ${r} into ${s.pane} (session=${i})`)},UU=`config-override`,WU=new Map([[Wj,ZH],[`load-config`,(e,t)=>{let n=e.indexOf(`/`);if(n===-1)throw new $(`load-config: expected <sessionId>/<path> (missing separator)`);let r=qH(YH(()=>decodeURIComponent(e.slice(0,n)))),i=YH(()=>decodeURIComponent(e.slice(n+1))).trim();if(i!==``){if(!i.startsWith(`/`))throw new $(`load-config: path must be absolute, got "${i}"`);if(!/\.(json5?|json)$/.test(i))throw new $(`load-config: path must end with .json5 or .json, got "${i}"`)}i===``?(t.sessionState.clear(r,UU),t.dlog(`info`,`load-config: override cleared (session=${r})`)):(t.sessionState.set(r,UU,i),t.dlog(`info`,`load-config: ${i} (session=${r})`))}],[Gj,QH],[Hj,nU],[Uj,aU],[Yj,_U],[Xj,vU],[tM,TU],[Zj,yU],[Qj,SU],[$j,CU],[eM,wU],[nM,OU],[rM,kU],[iM,MU],[aM,AU],[oM,jU],[qj,$H],[Jj,eU],[Kj,tU],[sM,NU],[cM,RU],[lM,BU],[uM,zU],[dM,VU],[fM,HU]]),GU=new Set([Hj,Uj,Yj,Xj,tM,Zj,Qj,$j,eM,nM,rM,iM,aM,oM,Kj,sM,cM,lM,dM,fM]),KU=(e,t)=>{let n=[],r=!1,i=null;for(let{verb:a,value:o}of vM(gM(e))){if(!i&&GU.has(a)){let e=mM(o);e.length>0&&e[0]&&(i=e[0])}let e=WU.get(a);if(!e){n.push(`unknown effect verb "${a}"`);continue}try{e(o,t)}catch(e){e instanceof $||(r=!0),n.push(`${a}: ${e instanceof Error?e.message:String(e)}`)}}if(n.length>0){i&&t.sessionState.set(i,`click.error`,n.join(`
210
+ `));let e=`dispatch: ${n.join(`; `)}`;throw r?Error(e):new $(e)}};function qU(e){return(t,n)=>{let r=n.history.begin(),i=n.navigation.begin(r.sessionState),a=[];try{e(t,{...n,sessionState:r.sessionState,journal:r,navigating:i.sessionState})}catch(e){a.push(e)}i.commit();try{r.commit()}catch(e){a.push(e)}if(a.length===1)throw a[0];if(a.length>1)throw Error(a.map(e=>String(e.message??e)).join(`; `))}}const JU=new Map([...WU,[Vj,KU]].map(([e,t])=>[e,qU(t)]));Object.freeze([...JU.keys()]);const YU=new Set([`hook_event_name`,`session_id`,`session_name`,`transcript_path`,`cwd`,`model`,`workspace`,`version`,`output_style`,`cost`,`context_window`,`exceeds_200k_tokens`,`effort`,`thinking`,`rate_limits`,`vim`,`agent`,`worktree`]),XU=[[`session_id`,`string`],[`transcript_path`,`string`],[`cwd`,`string`],[`model`,`object`],[`model.id`,`string`],[`model.display_name`,`string`],[`workspace`,`object`],[`workspace.current_dir`,`string`],[`workspace.project_dir`,`string`]],ZU=[[`workspace.added_dirs`,`string-list`]];function QU(e){let t={missingRequired:[],typeMismatches:[],unknownTopLevelFields:[]},n=typeof e==`object`&&e&&!Array.isArray(e)?e:{};for(let[e,r]of XU){let i=tW(n,e);if(i==null)t.missingRequired.push(e);else{let n=$U(i);n!==r&&t.typeMismatches.push({path:e,expected:r,got:n})}}for(let[e,r]of ZU){let i=tW(n,e),a=i===void 0?r:eW(i);a!==r&&t.typeMismatches.push({path:e,expected:r,got:a})}for(let e of Object.keys(n))YU.has(e)||t.unknownTopLevelFields.push(e);return{data:e,report:t}}function $U(e){return Array.isArray(e)?`array`:typeof e==`string`&&!e.isWellFormed()?`ill-formed string`:typeof e}function eW(e){return Array.isArray(e)&&e.every(e=>$U(e)===`string`)?`string-list`:$U(e)}function tW(e,t){let n=e;for(let e of t.split(`.`)){if(typeof n!=`object`||!n||Array.isArray(n))return;n=n[e]}return n}function nW(e,t){switch(e){case`vars`:return{what:e,vars:rW(t)};case`segments`:return{what:e,segments:cW(t)};case`config`:return{what:e,config:fW(t)}}}function rW(e){if(e===null)return[];let{store:t,registry:n,config:r}=e,i=oW(r),a=t.names().sort(),o=[];for(let e of a){let r=t.getNode(e),a=iW(r),s=n.getLastError(e);o.push({name:e,source:i.get(e)??null,...a,lastError:s===void 0?null:{timestampMs:s.timestamp,message:s.message},ageMs:aW(r.lastUpdatedMs())})}return o}function iW(e){if(e.kind!==`document`)try{return{type:e.type,value:e.read()}}catch(t){return{type:e.type,value:t instanceof Error?t.message:String(t)}}let t=e.read();switch(t.kind){case`ok`:return{type:`document`,value:JSON.stringify(t.value)};case`absent`:return{type:`document`,value:`(not yet scanned)`};case`failed`:return{type:`document`,value:t.reason}}}function aW(e){return e===null?null:Math.max(0,Date.now()-e)}function oW(e){let t=new Map;for(let[n,r]of Object.entries(e.variables))t.set(n,sW(r));for(let[n,r]of Object.entries(e.segments))if(r.vars)for(let[e,i]of Object.entries(r.vars))t.set(`${n}.${e}`,sW(i));return t}function sW(e){return e.kind}function cW(e){if(e===null)return[];let{store:t,config:n,lastRenderBySegment:r}=e,i=new Set(t.names()),a=uW(n),o=lW(n),s=[];for(let e of a){let t=n.segments[e];t&&s.push({name:e,description:t.description??null,template:t.template,referencedVars:dW(t.template,n.helpers,i),placements:(o.get(e)??[]).map(e=>({id:e,lastRender:r.get(e)??null}))})}return s}function lW(e){let t=new Map;for(let n of Nb(e.presets))for(let r of wu(Ib(e,n).node)){if(r.kind!==`segment`)continue;let e=t.get(r.name)??[],n=bu(r);e.includes(n)||t.set(r.name,[...e,n])}return t}function uW(e){let t=[],n=new Set;for(let r of wu(jd(e.root)))r.kind===`segment`&&e.segments[r.name]&&!n.has(r.name)&&(t.push(r.name),n.add(r.name));for(let r of Object.keys(e.segments))n.has(r)||(t.push(r),n.add(r));return t}function dW(e,t,n){let r=new Set;for(let i of Cx(e,t).keys()){if(n.has(i)){r.add(i);continue}let e=i.split(`.`);for(;e.length>1;){e.pop();let t=e.join(`.`);if(n.has(t)){r.add(t);break}}}return Array.from(r).sort()}function fW(e){return e===null?null:e.config}const pW=[`vars`,`segments`,`config`];function mW(e){return typeof e==`string`&&pW.includes(e)}function hW(e){return Math.max(1,e-2)}var gW=class{written=new Map;constructor(e){this.dir=e}pathFor(e){return l.join(this.dir,`${encodeURIComponent(e)}.txt`)}sync(e,t){let n=this.pathFor(e);if(t===(this.written.get(e)??null))return null;try{return t===null?(r.rmSync(n,{force:!0}),this.written.delete(e)):(r.mkdirSync(this.dir,{recursive:!0,mode:448}),r.writeFileSync(n,t,{mode:384}),this.written.set(e,t)),null}catch(e){return`${n}: ${e.message}`}}reset(){this.written.clear();try{return r.rmSync(this.dir,{recursive:!0,force:!0}),null}catch(e){return`${this.dir}: ${e.message}`}}};const _W=new TB,vW=new EH;ke(_W.launchStats);const yW=new hC({counters:_W,logger:Z}),bW=pR({watchers:yW,logger:Z}),{gitProvider:xW,usageStore:SW,mementoProvider:CW}=bW,wW=new OB,TW=new RV(wW,Z),EW=new sH,DW=new qN,OW=new gW(Ze()),kW=new CB({gitService:xW,sessionState:wW,watchers:yW},{observers:{onReload:e=>Z(`info`,`config loaded projectDir=${e.projectDir} cwd=${e.cwd} files=${e.configLayers.join(` < `)||`<bundled default>`} error=${e.lastError===null?`none`:JSON.stringify(e.lastError)} warning=${e.lastWarning===null?`none`:JSON.stringify(e.lastWarning)}`)}}),AW=60*1e3;function jW(){let e=import.meta.url,n=[];e.startsWith(`file://`)&&n.push(E(e)),t.argv[1]&&n.push(t.argv[1]);let i=new Map;for(let e of n)try{i.set(e,r.statSync(e).mtimeMs)}catch{}let a=null,o=()=>{for(let[e,t]of i)try{if(r.statSync(e).mtimeMs!==t){Z(`info`,`binary mtime changed (${e}); shutting down`),a&&clearInterval(a),qW(0);return}}catch(e){Z(`warn`,`bin stat failed: ${e.message}`)}};return{arm(){i.size!==0&&(a=setInterval(o,AW),a.unref())},checkNow:o}}const MW=jW(),NW=fL({entryUrl:import.meta.url,intervalMs:AW,releaseIntervalMs:216e5,registryUrl:t.env.CC_CANDYBAR_REGISTRY_URL??`https://registry.npmjs.org`,fetchImpl:fetch,onApplied:()=>MW.checkNow(),log:Z});let PW=null,FW=null,IW=0;function LW(){t.on(`uncaughtException`,e=>{Z(`error`,`uncaughtException: ${e.stack||e.message}`),qW(1)}),t.on(`unhandledRejection`,e=>{Z(`error`,`unhandledRejection: ${String(e)}`),qW(1)});for(let e of[`SIGINT`,`SIGTERM`,`SIGHUP`])t.on(e,()=>{Z(`info`,`received ${e}, shutting down`),qW(0)});try{IW=pj(t.env)}catch(e){Z(`error`,`refusing to boot: ${e.message}`),qW(1);return}PW=mN(t.pid);let e=wN(EN(PW));if(!e.decision.allow){Z(`warn`,`fork-bomb breaker: ${e.decision.reason}; refusing to boot`),qW(1);return}FW=e.registryPath,r.mkdirSync(Re(),{recursive:!0}),He(ze()),wW.useStorage(new AB(Ge(),500,Z)),TW.useStorage(aH(Ke(),Z)),_N({anchor:gN(t.env),isAlive:vN,onOrphaned:e=>{Z(`info`,`parent watchdog: ${e}; shutting down`),qW(0)}}),RW(x.createServer({allowHalfOpen:!1},e=>{JW(e)}),ze(),!1)}function RW(e,n,r){e.removeAllListeners(`error`),e.removeAllListeners(`listening`),e.once(`error`,i=>{if(i.code!==`EADDRINUSE`){Z(`error`,`server error: ${i.message}`),qW(1);return}if(r){Z(`info`,`lost rebind race; another daemon is alive — exiting`),t.exit(0);return}zW(e,n)}),e.listen(n,()=>BW(n))}function zW(e,n){let i=iN(aN(Ue(n)),(e,t)=>pN(e,t,{readStartTime:fN,pidAlive:vN}));if(i.kind===`attach-and-exit`){Z(`info`,`EADDRINUSE: ${i.reason} — exiting`),t.exit(0);return}Z(`warn`,`EADDRINUSE: ${i.reason} — unlinking stale socket and rebinding`);try{r.unlinkSync(n)}catch(e){if(e.code!==`ENOENT`){Z(`error`,`cannot unlink stale socket ${n}: ${e.message}`),qW(1);return}}RW(e,n,!0)}function BW(e){let n=cN(e);if(n.kind!==`present`){Z(`warn`,`no ownable socket at bind callback (${n.kind}); exiting`),qW(0);return}WW(e);try{r.chmodSync(e,384)}catch(e){Z(`warn`,`chmod socket failed: ${e.message}`)}Z(`info`,`daemon up: pid=${t.pid} v=3 sock=${e} heapCap=${Math.round(re.getHeapStatistics().heap_size_limit/1048576)}MB rssLimit=${Math.round(IW/1048576)}MB`),Aj();let i=OW.reset();i!==null&&Z(`warn`,`diagnostic dump wipe failed: ${i}`),MW.arm(),NW.arm(),UW(),VW(e,n.identity)}function VW(e,n){dN({bound:n,myPid:t.pid,readIdentity:()=>cN(e),readLease:()=>aN(Ue(e)),shutdown:e=>qW(e),log:Z}).arm()}let HW=null;function UW(){HW=_j(xj(_W.startedAt.getTime(),e=>qW(e),{rssLimitBytes:IW})),HW.arm()}function WW(e){let n=oN(Ue(e),{pid:t.pid,version:3,binPath:t.argv[1],startTime:PW});n!==null&&Z(`warn`,`lease write failed: ${n}`)}let GW=0,KW=!1;function qW(e){if(!KW){KW=!0,setTimeout(()=>t.kill(t.pid,`SIGKILL`),500);try{xW.close()}catch(e){Z(`warn`,`gitService close failed: ${e.message}`)}try{SW.close()}catch(e){Z(`warn`,`usageStore close failed: ${e.message}`)}try{yW.closeAll()}catch(e){Z(`warn`,`watcherRegistry close failed: ${e.message}`)}try{wW.flush()}catch(e){Z(`warn`,`sessionState flush failed: ${e.message}`)}sN(We(),t.pid),FW!==null&&TN(FW,t.pid,SN,e=>r.unlinkSync(e)),t.exit(e)}}function JW(e){GW++,_W.inFlight=GW;let t=!1,n=(n,r)=>{if(t){r!==null&&Z(`warn`,`exit-after-flush dropped: an earlier responder settled this socket`);return}t=!0;let i=r===null?void 0:()=>qW(r);try{e.end(HA(n),i)}catch(e){Z(`warn`,`response write failed: ${e.message}`),i?.()}},r=setTimeout(()=>{_W.requestsTimedOut++,n({ok:!1,error:`request exceeded 200ms`,code:`TIMEOUT`,daemonV:3},null)},200),i=UA(e=>{XW(e).then(e=>n(e.resp,e.exitAfterFlush)).catch(e=>{Z(`error`,`handler threw: ${e?.stack||e}`),n({ok:!1,error:String(e?.message||e),code:`RENDER_FAILED`,daemonV:3},null)})},e=>{Z(`warn`,`frame parse failed: ${e.message}`),n({ok:!1,error:e.message,code:`BAD_REQUEST`,daemonV:3},null)});e.on(`data`,i),e.on(`error`,e=>{Z(`warn`,`socket error: ${e.message}`)}),e.on(`close`,()=>{clearTimeout(r),GW=Math.max(0,GW-1),_W.inFlight=GW})}const YW=e=>({resp:e,exitAfterFlush:null});async function XW(e){if(!e||typeof e!=`object`||typeof e.v!=`number`)return YW({ok:!1,error:`malformed request`,code:`BAD_REQUEST`,daemonV:3});if(e.v!==3)return e.v>3?Z(`info`,`version mismatch: client=${e.v} > daemon=3; binary likely upgraded — exiting after the response flushes`):Z(`info`,`version mismatch: client=${e.v} < daemon=3; client is stale — staying up`),{resp:{ok:!1,error:`protocol v${e.v} not supported (daemon at v3)`,code:`VERSION_MISMATCH`,daemonV:3},exitAfterFlush:e.v>3?0:null};if(e.kind===`shutdown`)return{resp:{ok:!0,output:``},exitAfterFlush:0};if(e.kind===`stats`)return YW({ok:!0,stats:_W.snapshot({gitCache:xW.getStats(),usageCache:SW.getStats(),renderCacheSize:kW.size,effectCache:DW.getStats(),watchersActive:yW.size(),nextRestartReason:HW?.describeNextRestart()??null,handlerProbes:vW.list()})});if(e.kind===`render`){_W.requestsTotal++;let t=new Date,n=DC(t),r=t.getTime();try{let{report:t}=QU(e.hookData);for(let e of t.unknownTopLevelFields)Z(`info`,`schema: unknown field '${e}' — Anthropic may have added it`);let i=[];for(let e of t.missingRequired)i.push(`missing required field '${e}'`);for(let{path:e,expected:n,got:r}of t.typeMismatches)i.push(`field '${e}' expected ${n}, got ${r}`);if(e.cwd===``&&i.push(`request 'cwd' is empty`),i.length>0)return _W.requestsErrored++,Z(`warn`,`BAD_REQUEST: ${i.join(`; `)}`),YW({ok:!1,error:`malformed hookData: ${i.join(`; `)}`,code:`BAD_REQUEST`,daemonV:3});let a=e.hookData.workspace.project_dir,{configFile:o,unknownFlagsError:s}=ZW(e.args),c=e.hookData.session_id,l=MA(e),u=JSON.stringify(l);wW.get(c,`client-hints`)!==u&&wW.set(c,PU,u);let d=wW.get(c,`config-override`)??o??l.configEnv,f=kW.getOrCreate(a,e.cwd,d),p=uU({projectDir:a,cwd:e.cwd,configFile:d??null});wW.get(c,`render-origin`)!==p&&wW.set(c,lU,p);let m=l.termCols,h=hW(m??120),g=aP(l.termRows),{authoredRoots:_}=f.state,v=t=>wW.get(e.hookData.session_id,t),y=LF(f.state.config,v,e=>_.has(e)),b=await eI(e.hookData,n,{...nG,navigation:e=>EW.depth(e,wW,WI(f.state.config))},e.cwd,f.state.neededInputPaths(y.preset),y,l,{...jI(f.state.config,f.state.fileHeldSettings,v),configPath:f.configLayers.includes(f.configHome)?f.configHome:null}),x=[],S=RF(y,h),C=DW.of(c),ee=nB(f.state.config,f.state.compiled,f.state.store,f.state.registry,b,n,S,{perSegmentSink:f.state.lastRenderCellsBySegment,onRenderWarning:e=>x.push(e)},{...zF(y),effects:C}),w=wW.get(e.hookData.session_id,`click.error`);w&&wW.clear(e.hookData.session_id,`click.error`);let te=[s,f.lastError,w].filter(Boolean).join(`
211
+ `),ne=NW.notice({sessionId:c,dismissed:wW.get(c,XI),enabled:y.updateNotice}),re=f.lastError===null?null:f.failedFile,ie=[...f.lastWarning===null?[]:[{kind:`load`,message:f.lastWarning}],...x],T=uP(te,ne,ie.map(e=>e.message).join(`
212
+ `)),E=OW.sync(c,T===null?null:fP(T));E!==null&&Z(`warn`,`diagnostic dump failed: ${E}`);let ae=pP(ee,T,{fullText:E===null?{kind:`file`,path:OW.pathFor(c)}:{kind:`unavailable`,reason:E},failedConfigFile:re},{width:h,rowCap:g,colorCompatibility:y.colorCompatibility}),oe=Date.now()-r,se=xW.getStats(),ce=SW.getStats(),le=C.lastFrame(),ue=le.own.map(e=>`${e.placement}:${e.effect}@${e.t.toFixed(3)}`).join(`,`)||`-`,de=e=>e.map(e=>`${e.placement}@${e.t.toFixed(3)}`).join(`,`)||`-`,fe=ie.map(e=>e.kind).join(`,`)||`-`;return Z(`info`,`render sid=${e.hookData.session_id??`?`} at=${n.toFixed(3)} took=${oe}ms termCols=${m??`?`} termRows=${l.termRows??`?`} width=${h} git=${se.size}/${se.hits}h/${se.misses}m usage=${ce.size}/${ce.hits}h/${ce.misses}m effect=${le.effect} effectT=${le.t.toFixed(3)} effectRows=${le.made}made/${le.reused}reused effectOwn=${ue} fadeBasis=${le.basis} stateRev=${le.revision} fades=${de(le.fades)} leaves=${de(le.leaves)} prompts=${b.metrics?.messageCount??`-`} nonPrompts=${b.metrics?.nonPrompts??`-`} err=${te?`Y`:`N`} upd=${ne.length} warn=${fe}`),YW({ok:!0,output:ae+`
213
+ `})}catch(e){throw _W.requestsErrored++,e}}if(e.kind===`click`)return YW(rG(e.verb,e.value,BA(e.clientVersion)));if(e.kind===`debug`){if(!mW(e.what))return YW({ok:!1,error:`unknown debug 'what': ${String(e.what)} (have: ${pW.join(`, `)})`,code:`BAD_REQUEST`,daemonV:3});let t=kW.firstState(),n=t===null?null:{store:t.store,registry:t.registry,config:t.config,compiled:t.compiled,lastRenderBySegment:e.what===`segments`?tG(t.lastRenderCellsBySegment,t.config.globals.charset??`unicode`,t.config.globals.colorCompatibility??`truecolor`):eG};return YW({ok:!0,debug:nW(e.what,n)})}return YW({ok:!1,error:`unknown kind`,code:`BAD_REQUEST`,daemonV:3})}function ZW(e){let{values:t,tokens:n}=y({args:e.slice(1),options:{config:{type:`string`}},strict:!1,tokens:!0,allowPositionals:!0}),r=[...new Set((n??[]).filter(e=>e.kind===`option`&&e.name!==`config`).map(e=>`--${e.name}`))];return{configFile:FA(t.config),unknownFlagsError:r.length>0?`Unknown flags: ${r.join(`, `)}`:null}}const QW={sessionState:wW,dlog:Z,applyUpdate:()=>NW.act(),doctor:lH(e=>{let t=[e.projectDir,e.cwd,e.configFile??void 0];kW.reload(...t);let n=kW.getOrCreate(...t);return{layers:n.configLayers,error:n.lastError,warning:n.lastWarning,unused:n.state.unused,config:n.state.config}}),probes:vW,memento:CW,claudeInput:KH(),history:TW,navigation:EW,configFor:e=>kW.getOrCreate(e.projectDir,e.cwd,e.configFile??void 0).state.config,reloadConfig:e=>kW.reload(e.projectDir,e.cwd,e.configFile??void 0)};QW.reloadConfig;const $W={endcaps:`powerline`,colorCompatibility:`truecolor`,wrap:!0,padding:1,charset:rl,width:1/0},eG=new Map;function tG(e,t,n){let r=new Map;for(let[i,a]of e)r.set(i,iP(a,{...$W,charset:t,colorCompatibility:n}));return r}const nG={...bW,history:e=>TW.depth(e)};function rG(e,t,n){let r=JU.get(e);if(!r)return{ok:!1,error:`unknown click verb: ${e}`,code:`BAD_REQUEST`,daemonV:3};try{return r(t,{...QW,clientVersion:n}),{ok:!0,output:``}}catch(e){let t=e instanceof $?`BAD_REQUEST`:`RENDER_FAILED`;return{ok:!1,error:String(e instanceof Error?e.message:e),code:t,daemonV:3}}}const iG={connectMs:200,budgetMs:500};async function aG(e,n){let r=n.includes(`--json`),i=await oG(e);if(i.kind!==`ok`&&(t.stderr.write(`${e}: ${ZA(i)}\n`),t.exit(1)),r){t.stdout.write(JSON.stringify(i.value,null,2)+`
214
+ `);return}t.stdout.write(sG(i.value))}function oG(e){return GA({kind:`debug`,what:e},iG,e=>`debug`in e?e.debug:void 0)}function sG(e){switch(e.what){case`vars`:return cG(e.vars);case`segments`:return lG(e.segments);case`config`:return uG(e.config);default:return e}}function cG(e){if(e.length===0)return`no variables (DSL not active)
215
+ `;let t=[`variables (${e.length})`,``],n=e.reduce((e,t)=>Math.max(e,t.name.length),4),r=e.reduce((e,t)=>Math.max(e,(t.source??`—`).length),6),i=e.reduce((e,t)=>Math.max(e,t.type.length),4);for(let a of e){let e=a.ageMs===null?``:` ${fG(a.ageMs)}`,o=a.lastError?` ✗ ${a.lastError.message}`:``;t.push(` ${a.name.padEnd(n)} ${(a.source??`—`).padEnd(r)} ${a.type.padEnd(i)} ${dG(a.value)}${e}${o}`)}return t.join(`
216
216
  `)+`
217
- `}function cG(e){if(e.length===0)return`no segments (DSL not active)
217
+ `}function lG(e){if(e.length===0)return`no segments (DSL not active)
218
218
  `;let t=[`segments (${e.length})`,``];for(let n of e){t.push(` ${n.name}`),n.description!==null&&t.push(` shows ${n.description}`),t.push(` template ${n.template}`),n.referencedVars.length>0&&t.push(` vars ${n.referencedVars.join(`, `)}`);for(let{id:e,lastRender:r}of n.placements)r!==null&&t.push(` last ${e}: ${r}`)}return t.join(`
219
219
  `)+`
220
- `}function lG(e){return e===null?`config: DSL not active
220
+ `}function uG(e){return e===null?`config: DSL not active
221
221
  `:JSON.stringify(e,null,2)+`
222
- `}function uG(e){let t=typeof e==`string`?e:JSON.stringify(e);return t.length>60?t.slice(0,57)+`…`:t}function dG(e){return e<1e3?`${e}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${Math.floor(e/6e4)}m`}function fG(){let e=mG();return e===null?null:r.readFileSync(e,`utf-8`)}function pG(){let e;try{e=fG()}catch(e){t.stderr.write(`schema: cannot read bundled schema: ${e instanceof Error?e.message:String(e)}\n`),t.exit(2)}e===null&&(t.stderr.write("schema: bundled schema not found (expected schema/cc-candybar.schema.json). Run `pnpm gen:schema` from a source checkout.\n"),t.exit(2)),t.stdout.write(e),t.exit(0)}function mG(){let e=l.join(`schema`,`cc-candybar.schema.json`),n=t.argv[1];if(n===void 0)return null;let i=l.dirname(l.resolve(n));for(;;){let t=l.join(i,e);if(r.existsSync(t))return t;let n=l.dirname(i);if(n===i)return null;i=n}}function hG(e){let t=e.CC_CANDYBAR_CONFIG??``;return t===``?void 0:t}const gG=5e3;function _G(e,t,n){let r=`/home/tester`,i=Math.floor(n),a=`test0a1b-2c3d-4e5f-6a7b-8c9d0e1f2a3b`,o={current_dir:`${r}/code/cc-candybar/src`,project_dir:`${r}/code/cc-candybar`,added_dirs:[]};return{hook_event_name:`Status`,session_id:a,version:`1.15.0`,home:r,cwd:`${r}/code/cc-candybar/src`,transcript_path:`${r}/.claude/projects/x/test.jsonl`,model:{id:`claude-opus-4-8`,display_name:`Opus 4.8`},workspace:o,git:{repoName:`cc-candybar`,repoUrl:`https://github.com/promptctl/cc-candybar`,branch:`main`,sha:`abc1234`,ahead:2,behind:1,staged:3,unstaged:2,untracked:1,conflicts:0,upstream:`origin/main`,stash:1,status:`dirty`,operation:`rebase`,timeSinceCommit:780},session:{cost:.39,tokens:241400},today:{cost:12.5,tokens:34e5},context:{totalTokens:48487,contextLeft:24},metrics:{lastResponseTime:8.2,responseTime:4.2,sessionDuration:930,messageCount:8,linesAdded:512,linesRemoved:88},block:{nativeUtilization:63,resetsAt:i+2*3600},weekly:{percentage:21,resetsAt:i+5*86400},cache:{expiresAt:i+900},tmux:{pane:`%0`,session:`work`},host:{name:`tester-box`,user:`tester`,ssh:!0},autocompact:GT(4e5,1e6),...zF(e),history:{undo:1,redo:1,sinceEdit:1},navigation:{back:1},unsaved:1,resettable:ow(()=>!0),themeDefault:{differs:!0,theme:`<theme>`},resumeCommand:FF(o,a,void 0),configPath:t??`${r}/.config/cc-candybar/config.json5`}}function vG(e,t){let n=Pk(e,e),r=Lk(n);return r!==null&&t.push(r),n.kind===`chain`?n.layers:[]}async function yG(e,n=t.cwd()){let i=[],a=e===void 0?null:l.resolve(jk(e)),o=a===null?vG(n,i):[a];if(a!==null){let e;try{e=r.statSync(a,{throwIfNoEntry:!1})}catch(e){return{kind:`unreadable`,path:a,message:e instanceof Error?e.message:String(e)}}if(e!==void 0&&!e.isFile())return{kind:`unreadable`,path:a,message:`not a file`}}let s=zk(n,n);s!==null&&i.push(s);try{return{kind:`clean`,layers:o,warnings:i,rendered:await SG(o,n,i)}}catch(e){let t=e;return typeof t==`object`&&t&&typeof t.code==`string`&&typeof t.path==`string`&&o.includes(t.path)&&typeof t.message==`string`?{kind:`unreadable`,path:t.path,message:t.message}:(e instanceof pu&&i.push(...e.warnings),{kind:`fatal`,layers:o,message:e instanceof pu||e instanceof Error?e.message:String(e),warnings:i})}}async function bG(e,t,n){let r=bA(e,iF,{entered:()=>{},warned:e=>n.push(...e)},{projectDir:t,cwd:t}),{config:i}=r,a=new pB,o=new ZC(a,i.globals.default_empty_value??``,void 0,new DB);try{let s=Xz(i,o,{cwd:t});n.push(...s.loadWarnings);let c=await o.settled(gG);return c.length>0&&n.push(`source${c.length===1?``:`s`} still running after ${gG} ms, rendered with fallback values: ${c.join(`, `)}`),{layers:e,droppedPlugins:[...r.installed.dropped,...r.layers.flatMap(e=>e.plugins.dropped)],config:i,compiled:s,store:a,registry:o}}catch(e){throw o.dispose(),e}}function xG({layers:e,config:t,compiled:n,store:r,registry:i},a,o,s){let c=new Map,l=new Set,u={"theme-rule":e=>c.set(`theme rule`,e),"band-floor":e=>l.add(e)};return{rendered:tB(t,n,r,i,_G(a,e.at(-1)??null,s),s,LF(a,o),{onSegmentError:(e,t)=>c.set(`segment "${e}"`,t),onRenderWarning:({kind:e,message:t})=>u[e](t)},RF(a)),failures:c,advisories:l}}async function SG(e,t,n){let r=await bG(e,t,n),{config:i}=r,a=DC(new Date);try{let e=uL();try{UI(i),VP(i)}finally{e()}let t=Pb(null,i.globals.preset,i.presets),o=(e,t)=>{let n=IF(i,t=>t===`preset`?e:null,()=>t),o;try{o=xG(r,n,200,a)}catch(e){o={failures:new Map([[`render`,e instanceof Error?e.message:String(e)]]),advisories:new Set}}return{preset:e,customized:t,...o}},s=o(t,!1),c=[s,o(t,!0),...Nb(i.presets).filter(e=>e!==t).flatMap(e=>[o(e,!1),o(e,!0)])],l=e=>{let n=new Map;for(let t of c)for(let r of e(t)){let e=n.get(r)??new Map;e.set(t.preset,(e.get(t.preset)??new Set).add(t.customized)),n.set(r,e)}return[...n].map(([e,n])=>n.get(t)?.has(!1)?e:`${e} (under ${[...n].map(([e,n])=>[...e===t?[]:[`preset "${e}"`],...n.has(!1)?[]:[`.preset.customized = true`]].join(`, `)).join(`; `)})`)};n.push(...l(e=>e.advisories));let u=l(e=>[...e.failures].map(([e,t])=>`${e}: ${t}`)),d=s.rendered,f=r.droppedPlugins.length,p=[...f>0?[`${f} plugin${f===1?``:`s`} did not load (named in the warnings)`]:[],...u.length>0||d===void 0?[`config renders with ${u.length} render error${u.length===1?``:`s`} (the daemon would show them on the bar):\n`+u.map(e=>` ${e}`).join(`
222
+ `}function dG(e){let t=typeof e==`string`?e:JSON.stringify(e);return t.length>60?t.slice(0,57)+`…`:t}function fG(e){return e<1e3?`${e}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${Math.floor(e/6e4)}m`}function pG(){let e=hG();return e===null?null:r.readFileSync(e,`utf-8`)}function mG(){let e;try{e=pG()}catch(e){t.stderr.write(`schema: cannot read bundled schema: ${e instanceof Error?e.message:String(e)}\n`),t.exit(2)}e===null&&(t.stderr.write("schema: bundled schema not found (expected schema/cc-candybar.schema.json). Run `pnpm gen:schema` from a source checkout.\n"),t.exit(2)),t.stdout.write(e),t.exit(0)}function hG(){let e=l.join(`schema`,`cc-candybar.schema.json`),n=t.argv[1];if(n===void 0)return null;let i=l.dirname(l.resolve(n));for(;;){let t=l.join(i,e);if(r.existsSync(t))return t;let n=l.dirname(i);if(n===i)return null;i=n}}function gG(e){let t=e.CC_CANDYBAR_CONFIG??``;return t===``?void 0:t}const _G=5e3;function vG(e,t,n){let r=`/home/tester`,i=Math.floor(n),a=`test0a1b-2c3d-4e5f-6a7b-8c9d0e1f2a3b`,o={current_dir:`${r}/code/cc-candybar/src`,project_dir:`${r}/code/cc-candybar`,added_dirs:[]};return{hook_event_name:`Status`,session_id:a,version:`1.15.0`,home:r,cwd:`${r}/code/cc-candybar/src`,transcript_path:`${r}/.claude/projects/x/test.jsonl`,model:{id:`claude-opus-4-8`,display_name:`Opus 4.8`},workspace:o,git:{repoName:`cc-candybar`,repoUrl:`https://github.com/promptctl/cc-candybar`,branch:`main`,sha:`abc1234`,ahead:2,behind:1,staged:3,unstaged:2,untracked:1,conflicts:0,upstream:`origin/main`,stash:1,status:`dirty`,operation:`rebase`,timeSinceCommit:780},session:{cost:.39,tokens:241400},today:{cost:12.5,tokens:34e5},context:{totalTokens:48487,contextLeft:24},metrics:{lastResponseTime:8.2,responseTime:4.2,sessionDuration:930,messageCount:8,linesAdded:512,linesRemoved:88},block:{nativeUtilization:63,resetsAt:i+2*3600},weekly:{percentage:21,resetsAt:i+5*86400},cache:{expiresAt:i+900},tmux:{pane:`%0`,session:`work`},host:{name:`tester-box`,user:`tester`,ssh:!0},autocompact:GT(4e5,1e6),...BF(e),history:{undo:1,redo:1,sinceEdit:1},navigation:{back:1},unsaved:1,resettable:ow(()=>!0),themeDefault:{differs:!0,theme:`<theme>`},resumeCommand:IF(o,a,void 0),configPath:t??`${r}/.config/cc-candybar/config.json5`}}function yG(e,t){let n=Pk(e,e),r=Lk(n);return r!==null&&t.push(r),n.kind===`chain`?n.layers:[]}async function bG(e,n=t.cwd()){let i=[],a=e===void 0?null:l.resolve(jk(e)),o=a===null?yG(n,i):[a];if(a!==null){let e;try{e=r.statSync(a,{throwIfNoEntry:!1})}catch(e){return{kind:`unreadable`,path:a,message:e instanceof Error?e.message:String(e)}}if(e!==void 0&&!e.isFile())return{kind:`unreadable`,path:a,message:`not a file`}}let s=zk(n,n);s!==null&&i.push(s);try{return{kind:`clean`,layers:o,warnings:i,rendered:await CG(o,n,i)}}catch(e){let t=e;return typeof t==`object`&&t&&typeof t.code==`string`&&typeof t.path==`string`&&o.includes(t.path)&&typeof t.message==`string`?{kind:`unreadable`,path:t.path,message:t.message}:(e instanceof pu&&i.push(...e.warnings),{kind:`fatal`,layers:o,message:e instanceof pu||e instanceof Error?e.message:String(e),warnings:i})}}async function xG(e,t,n){let r=bA(e,iF,{entered:()=>{},warned:e=>n.push(...e)},{projectDir:t,cwd:t}),{config:i}=r,a=new mB,o=new ZC(a,i.globals.default_empty_value??``,void 0,new OB);try{let s=Zz(i,o,{cwd:t});n.push(...s.loadWarnings);let c=await o.settled(_G);return c.length>0&&n.push(`source${c.length===1?``:`s`} still running after ${_G} ms, rendered with fallback values: ${c.join(`, `)}`),{layers:e,droppedPlugins:[...r.installed.dropped,...r.layers.flatMap(e=>e.plugins.dropped)],config:i,compiled:s,store:a,registry:o}}catch(e){throw o.dispose(),e}}function SG({layers:e,config:t,compiled:n,store:r,registry:i},a,o,s){let c=new Map,l=new Set,u={"theme-rule":e=>c.set(`theme rule`,e),"band-floor":e=>l.add(e)};return{rendered:nB(t,n,r,i,vG(a,e.at(-1)??null,s),s,RF(a,o),{onSegmentError:(e,t)=>c.set(`segment "${e}"`,t),onRenderWarning:({kind:e,message:t})=>u[e](t)},zF(a)),failures:c,advisories:l}}async function CG(e,t,n){let r=await xG(e,t,n),{config:i}=r,a=DC(new Date);try{let e=dL();try{WI(i),VP(i)}finally{e()}let t=Pb(null,i.globals.preset,i.presets),o=(e,t)=>{let n=LF(i,t=>t===`preset`?e:null,()=>t),o;try{o=SG(r,n,200,a)}catch(e){o={failures:new Map([[`render`,e instanceof Error?e.message:String(e)]]),advisories:new Set}}return{preset:e,customized:t,...o}},s=o(t,!1),c=[s,o(t,!0),...Nb(i.presets).filter(e=>e!==t).flatMap(e=>[o(e,!1),o(e,!0)])],l=e=>{let n=new Map;for(let t of c)for(let r of e(t)){let e=n.get(r)??new Map;e.set(t.preset,(e.get(t.preset)??new Set).add(t.customized)),n.set(r,e)}return[...n].map(([e,n])=>n.get(t)?.has(!1)?e:`${e} (under ${[...n].map(([e,n])=>[...e===t?[]:[`preset "${e}"`],...n.has(!1)?[]:[`.preset.customized = true`]].join(`, `)).join(`; `)})`)};n.push(...l(e=>e.advisories));let u=l(e=>[...e.failures].map(([e,t])=>`${e}: ${t}`)),d=s.rendered,f=r.droppedPlugins.length,p=[...f>0?[`${f} plugin${f===1?``:`s`} did not load (named in the warnings)`]:[],...u.length>0||d===void 0?[`config renders with ${u.length} render error${u.length===1?``:`s`} (the daemon would show them on the bar):\n`+u.map(e=>` ${e}`).join(`
223
223
  `)]:[]];if(p.length>0||d===void 0)throw Error(p.join(`
224
- `));return d}finally{r.registry.dispose()}}function CG(e){return e.map(e=>`warning: ${e}\n`).join(``)}function wG(e,t=!1){switch(e.kind){case`clean`:return{stdout:`✓ ${e.layers.join(` < `)||`bundled default (no config file found)`}: config OK${e.warnings.length>0?` (${e.warnings.length} warning${e.warnings.length===1?``:`s`})`:``}\n`+(t?`${e.rendered}\n`:``),stderr:CG(e.warnings),code:0};case`fatal`:return{stdout:``,stderr:CG(e.warnings)+`✗ ${e.layers.join(` < `)||`<default>`}\n${e.message}\n`,code:1};case`unreadable`:return{stdout:``,stderr:`check: cannot read ${e.path}: ${e.message}\n`,code:2}}}const TG=`--render`,EG=`Usage: cc-candybar check [${TG}] [config-file]\n`;function DG(e){let t=e.filter(e=>e.startsWith(`--`)),n=e.filter(e=>!e.startsWith(`--`)),r=t.filter(e=>e!==TG);return r.length>0?{kind:`usage`,message:`check: unknown option ${r.join(` `)}\n${EG}`}:n.length>1||n[0]===``?{kind:`usage`,message:`check: expected at most one non-empty path\n${EG}`}:{kind:`run`,target:n[0],render:t.includes(TG)}}async function OG(e){let n=DG(e),r=n.kind===`usage`?{stdout:``,stderr:n.message,code:2}:wG(await yG(n.target??hG(t.env)),n.render);t.stdout.write(r.stdout),t.stderr.write(r.stderr),t.exit(r.code)}const kG=`${jN}${AN}`;function AG(e){return`${kG}⚠ cc-candybar: ${jG(e)}\n`}function jG(e){switch(e.cause){case`version_mismatch`:{let t=e.daemonV===0?`unknown`:`v${e.daemonV}`;return`protocol mismatch (client v${e.clientV} ≠ daemon ${t})`}case`bad_request`:return`daemon rejected request: ${kN(e.message,60)}`;case`render_failed`:return`render failed: ${kN(e.message,60)}`;case`malformed_response`:return`malformed daemon response: ${kN(e.message,60)}`}}function MG(e){switch(e.kind){case`ok`:return{output:e.value,kick:!1,debug:null};case`transient`:return{output:`
225
- `,kick:!0,debug:`daemon unavailable (transient: ${e.cause}: ${e.message}) — kicking daemon`};case`permanent`:return{output:AG(e),kick:!1,debug:`daemon refused request (permanent: ${e.cause}) — not kicking`}}}function NG(e,t){if(e!==void 0&&/^\+?\d+$/.test(e)){let t=Number(e);if(t>0&&t<=4294967295)return t}if(t&&t>0)return t}const PG=[`SSH_CONNECTION`,`SSH_CLIENT`,`SSH_TTY`];function FG(e,t,n){return{termCols:NG(e.COLUMNS,n.columns),termRows:NG(e.LINES,n.rows),ssh:PG.some(t=>(e[t]??``)!==``),tmux:aT(e),configEnv:hG(e),claudeConfigDir:NT(e,t),mementoEnv:et(e,t)}}const IG=` (fix: click the settings menu (${Vd} by default) › 🧰 tools › 🩺 doctor, then [fix] on the bar)`;function LG({check:e,verdict:t}){return t.ok?`✓ ${e.label}\n`:`✗ ${e.label} — ${t.reason}${t.fix===void 0?``:IG}\n`+(t.more??[]).map(e=>` ${e}\n`).join(``)}function RG(e){let t={sessionState:new DB},n=bB(e.projectDir,e.cwd,e.configFile??void 0,t),r=n.state??xB(e.cwd,e.projectDir,t);return r.registry.dispose(),{layers:n.layers,error:n.error,warning:n.warning,unused:r.unused,config:r.config}}async function zG(e,t,n,r,i=void 0){let a;try{a={...mH(e,{tmux:aT(n),claudeConfigDir:NT(n,r)},{projectDir:r,cwd:r,configFile:FA(i??hG(n))??null},()=>null),urlHandler:await AH(t)}}catch(e){return{stdout:``,stderr:`doctor: ${e instanceof Error?e.message:String(e)}\n`,code:2}}let o=mT(a);return{stdout:o.map(LG).join(``),stderr:``,code:+!o.every(e=>e.verdict.ok)}}async function BG(e){(e.length>1||e[0]===``||e[0]?.startsWith(`--`))&&(t.stderr.write(`doctor: expected at most one config file
224
+ `));return d}finally{r.registry.dispose()}}function wG(e){return e.map(e=>`warning: ${e}\n`).join(``)}function TG(e,t=!1){switch(e.kind){case`clean`:return{stdout:`✓ ${e.layers.join(` < `)||`bundled default (no config file found)`}: config OK${e.warnings.length>0?` (${e.warnings.length} warning${e.warnings.length===1?``:`s`})`:``}\n`+(t?`${e.rendered}\n`:``),stderr:wG(e.warnings),code:0};case`fatal`:return{stdout:``,stderr:wG(e.warnings)+`✗ ${e.layers.join(` < `)||`<default>`}\n${e.message}\n`,code:1};case`unreadable`:return{stdout:``,stderr:`check: cannot read ${e.path}: ${e.message}\n`,code:2}}}const EG=`--render`,DG=`Usage: cc-candybar check [${EG}] [config-file]\n`;function OG(e){let t=e.filter(e=>e.startsWith(`--`)),n=e.filter(e=>!e.startsWith(`--`)),r=t.filter(e=>e!==EG);return r.length>0?{kind:`usage`,message:`check: unknown option ${r.join(` `)}\n${DG}`}:n.length>1||n[0]===``?{kind:`usage`,message:`check: expected at most one non-empty path\n${DG}`}:{kind:`run`,target:n[0],render:t.includes(EG)}}async function kG(e){let n=OG(e),r=n.kind===`usage`?{stdout:``,stderr:n.message,code:2}:TG(await bG(n.target??gG(t.env)),n.render);t.stdout.write(r.stdout),t.stderr.write(r.stderr),t.exit(r.code)}const AG=`${jN}${AN}`;function jG(e){return`${AG}⚠ cc-candybar: ${MG(e)}\n`}function MG(e){switch(e.cause){case`version_mismatch`:{let t=e.daemonV===0?`unknown`:`v${e.daemonV}`;return`protocol mismatch (client v${e.clientV} ≠ daemon ${t})`}case`bad_request`:return`daemon rejected request: ${kN(e.message,60)}`;case`render_failed`:return`render failed: ${kN(e.message,60)}`;case`malformed_response`:return`malformed daemon response: ${kN(e.message,60)}`}}function NG(e){switch(e.kind){case`ok`:return{output:e.value,kick:!1,debug:null};case`transient`:return{output:`
225
+ `,kick:!0,debug:`daemon unavailable (transient: ${e.cause}: ${e.message}) — kicking daemon`};case`permanent`:return{output:jG(e),kick:!1,debug:`daemon refused request (permanent: ${e.cause}) — not kicking`}}}function PG(e,t){if(e!==void 0&&/^\+?\d+$/.test(e)){let t=Number(e);if(t>0&&t<=4294967295)return t}if(t&&t>0)return t}const FG=[`SSH_CONNECTION`,`SSH_CLIENT`,`SSH_TTY`];function IG(e,t,n){return{termCols:PG(e.COLUMNS,n.columns),termRows:PG(e.LINES,n.rows),ssh:FG.some(t=>(e[t]??``)!==``),tmux:aT(e),configEnv:gG(e),claudeConfigDir:NT(e,t),mementoEnv:et(e,t)}}const LG=` (fix: click the settings menu (${Vd} by default) › 🧰 tools › 🩺 doctor, then [fix] on the bar)`;function RG({check:e,verdict:t}){return t.ok?`✓ ${e.label}\n`:`✗ ${e.label} — ${t.reason}${t.fix===void 0?``:LG}\n`+(t.more??[]).map(e=>` ${e}\n`).join(``)}function zG(e){let t={sessionState:new OB},n=xB(e.projectDir,e.cwd,e.configFile??void 0,t),r=n.state??SB(e.cwd,e.projectDir,t);return r.registry.dispose(),{layers:n.layers,error:n.error,warning:n.warning,unused:r.unused,config:r.config}}async function BG(e,t,n,r,i=void 0){let a;try{a={...hH(e,{tmux:aT(n),claudeConfigDir:NT(n,r)},{projectDir:r,cwd:r,configFile:FA(i??gG(n))??null},()=>null),urlHandler:await jH(t)}}catch(e){return{stdout:``,stderr:`doctor: ${e instanceof Error?e.message:String(e)}\n`,code:2}}let o=mT(a);return{stdout:o.map(RG).join(``),stderr:``,code:+!o.every(e=>e.verdict.ok)}}async function VG(e){(e.length>1||e[0]===``||e[0]?.startsWith(`--`))&&(t.stderr.write(`doctor: expected at most one config file
226
226
  Usage: cc-candybar doctor [config-file]
227
- `),t.exit(2));let n=t.cwd(),r=await zG(cH(RG),PH(),t.env,n,e[0]===void 0?void 0:l.resolve(n,jk(e[0])));t.stdout.write(r.stdout),t.stderr.write(r.stderr),t.exit(r.code)}const VG=e=>e.some(e=>t.argv.includes(e));function HG(){console.log(nT)}async function UG(){try{VG(eT.help)&&(HG(),t.exit(0)),VG(eT.version)&&(console.log(`cc-candybar ${QA}`),t.exit(0));let e=t.argv[2];if(e===`install`&&(await nN(t.argv.slice(3)),t.exit(0)),e===`install-url-handler`&&(ZM(),t.exit(0)),e===`url-handle`){await $M(t.argv[3]);return}if(e===`daemon`){IW();return}if(e===`daemon-stats`&&(await _H(t.argv.slice(3)),t.exit(0)),e===`check`||e===`lint`){await OG(t.argv.slice(3));return}if(e===`schema`){pG();return}if(e===`doctor`){await BG(t.argv.slice(3));return}pW(e)&&(await iG(e,t.argv.slice(3)),t.exit(0)),t.stdin.isTTY===!0&&(console.error(`Error: This tool requires input from Claude Code
227
+ `),t.exit(2));let n=t.cwd(),r=await BG(lH(zG),FH(),t.env,n,e[0]===void 0?void 0:l.resolve(n,jk(e[0])));t.stdout.write(r.stdout),t.stderr.write(r.stderr),t.exit(r.code)}const HG=e=>e.some(e=>t.argv.includes(e));function UG(){console.log(nT)}async function WG(){try{HG(eT.help)&&(UG(),t.exit(0)),HG(eT.version)&&(console.log(`cc-candybar ${QA}`),t.exit(0));let e=t.argv[2];if(e===`install`&&(await nN(t.argv.slice(3)),t.exit(0)),e===`install-url-handler`&&(ZM(),t.exit(0)),e===`url-handle`){await $M(t.argv[3]);return}if(e===`daemon`){LW();return}if(e===`daemon-stats`&&(await vH(t.argv.slice(3)),t.exit(0)),e===`check`||e===`lint`){await kG(t.argv.slice(3));return}if(e===`schema`){mG();return}if(e===`doctor`){await VG(t.argv.slice(3));return}mW(e)&&(await aG(e,t.argv.slice(3)),t.exit(0)),t.stdin.isTTY===!0&&(console.error(`Error: This tool requires input from Claude Code
228
228
 
229
229
  cc-candybar is designed to be used as a Claude Code statusLine command.
230
230
  It reads hook data from stdin and outputs formatted statusline.
@@ -240,4 +240,4 @@ Add to ~/.claude/settings.json:
240
240
  Run with --help for more options.
241
241
 
242
242
  To test output manually:
243
- echo '{"session_id":"test-session","workspace":{"project_dir":"/path/to/project"},"model":{"id":"claude-sonnet-4-5","display_name":"Claude"}}' | cc-candybar`),t.exit(1)),D(`Working directory: ${t.cwd()}`),D(`Process args:`,t.argv);let r=await n(t.stdin);D(`Received hook data:`,JSON.stringify(r,null,2)),r||(console.error(`Error: No input data received from stdin`),HG(),t.exit(1));let i=MG(await nj(r,t.argv,t.cwd(),FG(t.env,t.cwd(),t.stderr)));i.debug!==null&&D(i.debug),i.kick&&Sj(),t.stdout.write(i.output),t.exit(0)}catch(e){let n=e instanceof Error?e.message:String(e);console.error(`Error generating statusline:`,n),t.exit(1)}}UG();export{};
243
+ echo '{"session_id":"test-session","workspace":{"project_dir":"/path/to/project"},"model":{"id":"claude-sonnet-4-5","display_name":"Claude"}}' | cc-candybar`),t.exit(1)),D(`Working directory: ${t.cwd()}`),D(`Process args:`,t.argv);let r=await n(t.stdin);D(`Received hook data:`,JSON.stringify(r,null,2)),r||(console.error(`Error: No input data received from stdin`),UG(),t.exit(1));let i=NG(await nj(r,t.argv,t.cwd(),IG(t.env,t.cwd(),t.stderr)));i.debug!==null&&D(i.debug),i.kick&&Sj(),t.stdout.write(i.output),t.exit(0)}catch(e){let n=e instanceof Error?e.message:String(e);console.error(`Error generating statusline:`,n),t.exit(1)}}WG();export{};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promptctl/cc-candybar",
3
- "version": "1.129.3",
3
+ "version": "1.129.5",
4
4
  "description": "Statusline renderer for Claude Code — a JSON5-configurable DSL with daemon-cached data sources, byte-clean palette-aware composition, and OSC8 click verbs.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.mjs",
@@ -101,9 +101,9 @@
101
101
  "typescript": "^5.0.0"
102
102
  },
103
103
  "optionalDependencies": {
104
- "@promptctl/cc-candybar-darwin-arm64": "1.129.3",
105
- "@promptctl/cc-candybar-darwin-x64": "1.129.3",
106
- "@promptctl/cc-candybar-linux-x64": "1.129.3",
107
- "@promptctl/cc-candybar-linux-arm64": "1.129.3"
104
+ "@promptctl/cc-candybar-darwin-arm64": "1.129.5",
105
+ "@promptctl/cc-candybar-darwin-x64": "1.129.5",
106
+ "@promptctl/cc-candybar-linux-x64": "1.129.5",
107
+ "@promptctl/cc-candybar-linux-arm64": "1.129.5"
108
108
  }
109
109
  }