@promptctl/cc-candybar 1.65.0 → 1.66.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.mjs +20 -20
  2. package/package.json +5 -5
package/dist/index.mjs CHANGED
@@ -122,7 +122,7 @@ Config tooling:
122
122
  Single-row example: root: { h: ["seg1", "seg2"] }`,line:G(e.source,[`layout`])}),t.root!==void 0&&(r.root=Mc(e,`root`,t.root)),t.actions!==void 0&&(r.actions=Lg(e,t.actions)),t.looks!==void 0&&(r.looks=T_(e,t.looks)),t.presets!==void 0&&(r.presets=D_(e,t.presets)),t.editGlobals!==void 0&&(r.editGlobals=wo(e,`editGlobals`,t.editGlobals)),t.helpers!==void 0&&(r.helpers=O_(e,t.helpers)),Bc(e,r),Um(e,r),Zm(e,r),bs(e,r,gs,`the global settings menu`),r}const Tv=new Set([`globals`,`variables`,`segments`,`layout`,`root`,`actions`,`looks`,`presets`,`editGlobals`,`helpers`]);function Ev(e){let t=Av(e.termCols),n=Av(e.termRows),r=jv(e.ssh),i=Ov(e.tmux),a=Dv(e.configEnv);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}}}function Dv(e){return typeof e==`string`&&e!==``?cv(e):void 0}function Ov(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 kv=1e4;function Av(e){if(typeof e!=`number`||!Number.isFinite(e))return;let t=Math.floor(e);if(!(t<=0))return t>kv?kv:t}function jv(e){return typeof e==`boolean`?e:void 0}var Mv=class extends Error{constructor(e){super(e),this.name=`ProtocolError`}};function Nv(e){let t=Buffer.from(JSON.stringify(e),`utf8`),n=Buffer.alloc(4);return n.writeUInt32BE(t.length,0),Buffer.concat([n,t])}function Pv(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 Mv(`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 Mv(e instanceof Error?e.message:String(e));e instanceof Error&&(n.cause=e),t(n);return}}}}function Fv(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=Pv(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(Nv(t))})}async function Iv(e,t,n){let r=null;try{r=await Vv(Pe(),t.connectMs);let i=await Fv(r,{v:3,...e},t.budgetMs);return zv(e.kind,i,n)}catch(e){return Bv(e)}finally{r&&r.destroy()}}function Lv(e,t){return typeof e==`string`?e:t}function Rv(e){return typeof e==`number`&&Number.isInteger(e)&&e>=0?e:0}function zv(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=Lv(r.error,`(no error message)`);switch(r.code){case`VERSION_MISMATCH`:return{kind:`permanent`,cause:`version_mismatch`,clientV:3,daemonV:Rv(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 Bv(e){if(e instanceof Mv||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 Vv(e,t){return new Promise((n,r)=>{let i=g.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 Hv(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 Uv={connectMs:50,budgetMs:150},Wv={connectMs:50,budgetMs:200};function Gv(e){let t=e.output;return typeof t==`string`?t:void 0}function Kv(e,t,n,r){return Iv({kind:`render`,hookData:e,args:t,cwd:n,...r},Uv,Gv)}function qv(e,t){return Iv({kind:`click`,verb:e,value:t},Wv,Gv)}let Jv=null;function Yv(e){if(Jv!==null)return Jv;r.mkdirSync(c.dirname(e),{recursive:!0});try{Jv=r.statSync(e).size}catch{Jv=0}return Jv}function Xv(e){for(let t=2;t>=1;t--){let n=`${e}.${t}`,i=`${e}.${t+1}`;try{r.renameSync(n,i)}catch{}}try{r.renameSync(e,`${e}.1`)}catch{}Jv=0}function Y(e,t){let n=`${new Date().toISOString()} [${e}] ${t}\n`;try{let e=Ke(),t=Yv(e);r.appendFileSync(e,n),Jv=t+Buffer.byteLength(n,`utf8`),Jv>=5242880&&Xv(e)}catch(e){Jv=null;try{process.stderr.write(`${n}cc-candybar: daemon.log unwritable: ${e.message}\n`)}catch{}}}function Zv(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(`
123
123
  `)}function Qv(e,t){return e===`darwin`?[$v(`footprint`,[`-p`,String(t)]),$v(`vmmap`,[`--summary`,String(t)])]:e===`linux`?[ey(`/proc/self/smaps_rollup`),ey(`/proc/self/status`)]:[]}function $v(e,t){return{name:`${e} ${t.join(` `)}`,read:()=>{let n=De({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}`}${ty(n.stderr)}`}}}}function ey(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 ty(e){let t=e.split(`
124
124
  `).map(e=>e.trim()).find(e=>e.length>0);return t===void 0?``:` (${t})`}const ny=`CC_CANDYBAR_RSS_LIMIT_MB`;function ry(e){let t=e[ny];if(t===void 0)return 512;let n=/^\d+$/.test(t)?Number(t):NaN;if(!Number.isSafeInteger(n)||n<=0)throw Error(`${ny} must be a positive integer (MB), got ${JSON.stringify(t)}`);return n}function iy(e){return ry(e)*2}const ay=1024*1024;function oy(e){return ry(e)*ay}const sy={memoryReport:{prefix:`memory-`,suffix:`.txt`},heapSnapshot:{prefix:`heap-`,suffix:`.heapsnapshot`}};function cy(e,t,n){let{prefix:r,suffix:i}=sy[t];return c.join(e,`${r}${n}${i}`)}function ly(e){for(let t of Object.keys(sy)){let{prefix:n,suffix:r}=sy[t];if(e.startsWith(n)&&e.endsWith(r))return t}return null}function uy(e){let t=e.rssLimitBytes??512*ay,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 dy(e.log,`memory report`,()=>{let t=cy(e.snapshotDir,`memoryReport`,o);e.writeMemoryReport(t,e.captureMemoryReport()),e.log(`info`,`memory report written: ${t}`)}),dy(e.log,`heap snapshot`,()=>{let t=cy(e.snapshotDir,`heapSnapshot`,o);e.log(`info`,`heap snapshot written: ${e.writeHeapSnapshot(t)}`)}),dy(e.log,`artifact rotation`,()=>{py(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 dy(e,t,n){try{n()}catch(n){e(`warn`,`${t} failed: ${n.message}`)}}function fy(e){let t=e.slice(e.lastIndexOf(`/`)+1),n=ly(t);if(n===null)return t;let{prefix:r,suffix:i}=sy[n];return t.slice(r.length,t.length-i.length)}function py(e,t,n){let r=new Map;for(let t of e){let e=fy(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 my(e,t,n={}){let i=Ne();return{now:()=>Date.now(),pid:process.pid,snapshotDir:i,log:Y,memoryBytes:()=>{let e=process.memoryUsage();return{rss:e.rss,heapTotal:e.heapTotal}},captureMemoryReport:()=>Zv(Qv(process.platform,process.pid)),writeMemoryReport:(e,t)=>r.writeFileSync(e,t,{mode:384}),writeHeapSnapshot:e=>_.writeHeapSnapshot(e),listArtifacts:()=>{try{return r.readdirSync(i).filter(e=>ly(e)!==null).map(e=>c.join(i,e))}catch{return[]}},removeFile:e=>r.unlinkSync(e),shutdown:t,startedAtMs:e,...n}}function hy(e={}){if(jy()!==null)return;let n=e.spawn??My,r=Oy();if(r.kind===`contended`){let e=_y();e!==null&&e>2e3&&(t.stderr.write(`cc-candybar: spawn-lock held ${e}ms (likely crashed holder) — spawning unlocked\n`),gy(n));return}if(r.kind===`error`){t.stderr.write(`cc-candybar: spawn-lock unavailable (${r.reason}) — spawning unlocked\n`),gy(n);return}try{gy(n)}finally{Ay()}}function gy(e){wy()&&vy(e)}function _y(){try{let e=r.statSync(He());return Date.now()-e.mtimeMs}catch{return null}}function vy(e){try{e()||t.stderr.write(`cc-candybar: daemon spawn returned false (unable to resolve script path?)
125
- `)}catch(e){t.stderr.write(`cc-candybar: daemon spawn failed: ${e.message}\n`)}}function yy(e,t){return e===null?{kind:`allow`}:e<-1e4?{kind:`allow-future-garbage`,futureMs:-e}:e<t?{kind:`deny`}:{kind:`allow`}}function by(e){return Math.min(3e3*2**Math.min(Math.max(e,0),5),6e4)}function xy(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 Sy(e,n){try{r.mkdirSync(c.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 Cy(){try{r.unlinkSync(We())}catch(e){e.code!==`ENOENT`&&t.stderr.write(`cc-candybar: could not reset spawn.backoff: ${e.message}\n`)}}function wy(){let e=Ue(),n=We(),r=xy(n),i=yy(Ty(e),by(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`),Ey(e),Sy(n,Math.min(r+1,5)),!0)}function Ty(e){try{return Date.now()-r.statSync(e).mtimeMs}catch{return null}}function Ey(e){try{r.mkdirSync(c.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 Dy=null;function Oy(){let e=He();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 Dy={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(!ky(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 ky(e){try{let t=r.statSync(e);return Date.now()-t.mtimeMs>1e4}catch{return!0}}function Ay(){if(!Dy)return;let{fd:e,path:t}=Dy;Dy=null;try{r.closeSync(e)}catch{}try{r.unlinkSync(t)}catch{}}function jy(){try{return r.mkdirSync(Ne(),{recursive:!0}),null}catch(e){return`mkdir ${Ne()}: ${e.message}`}}function My(){let e=t.execPath,n=t.argv[1];return n?Oe({bin:e,args:[`--max-old-space-size=${iy(t.env)}`,n,`daemon`],category:`daemon-spawn`}).ok:!1}const Ny=`cc-candybar`,Py=`dispatch`,Fy=`set-state`,Iy=`step-state`,Ly=`copy`,Ry=`open-vscode`,zy=`toolbar-toggle`,By=`show-config-error`,Vy=`show-config-warning`,Hy=`set-config`,Uy=`step-config`,Wy=`reset-config`,Gy=`apply-layout-op`,Ky=`undo`,qy=`redo`,Jy=`apply-update`,Yy=`doctor-run`,Xy=`doctor-fix`;function Zy(e){return e.map(encodeURIComponent).join(`/`)}function Qy(e){return e.length===0?[]:e.split(`/`).map(decodeURIComponent)}function $y(e){return`${Ny}://${Py}/${e.map(e=>`e=${encodeURIComponent(`${e.verb}/${Zy(e.args)}`)}`).join(`&`)}`}function eb(e){return new y(e).getAll(`e`).map(tb)}function tb(e){let t=e.indexOf(`/`);return t===-1?{verb:e,value:``}:{verb:e.slice(0,t),value:e.slice(t+1)}}const nb=`1.65.0`;function rb(){return c.join(f.homedir(),`.claude`,`settings.json`)}function X(e){return{kind:`ok`,value:e}}const Z={kind:`absent`};function Q(e){return{kind:`failed`,reason:e}}function ib(e,t){return e?.kind===`ok`?e.value:t}const ab=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/;function ob(e){let t=ab.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 sb(e){return e.join(`.`)}function cb([e,t,n],[r,i,a]){return e-r||t-i||n-a}const lb=`@promptctl/cc-candybar`;async function ub(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 Q(`registry responded ${e.status} for ${r}`);let n=await e.json();return typeof n.latest==`string`?ob(n.latest):Z}catch(e){return Q(e instanceof Error?e.message:String(e))}}function db(e,t){let n=ob(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=cb(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 fb(e,t){switch(t.kind){case`current`:return{stream:`stdout`,text:`✓ cc-candybar ${sb(t.installed)} is the latest release.\n`};case`ahead`:return{stream:`stdout`,text:`cc-candybar ${sb(t.installed)} is newer than the registry's latest release (${sb(t.latest)}): an unpublished build.\n`};case`stale`:{let n=sb(t.latest);return{stream:`stderr`,text:`⚠ cc-candybar ${sb(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 pb=`CCCandybarURLHandler`,mb=[],hb={"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 gb(e){return/^[A-Za-z0-9_./=,:-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}function _b(e,t){return[e,...t].map(gb).join(` `)}function vb(){return c.join(f.homedir(),`Applications`,`${pb}.app`)}function yb(){if(process.platform!==`darwin`)throw Error(`URL handler installation requires macOS (found platform: ${process.platform}).`)}function bb(){if(process.platform===`darwin`)return c.join(f.homedir(),`Library`,`Application Support`,`CCCandybar`);let e=process.env.XDG_DATA_HOME??c.join(f.homedir(),`.local`,`share`);return c.join(e,`cc-candybar`)}function xb(){return c.join(bb(),`bin`,`cc-candybar`)}function Sb(){return c.join(bb(),`dist`,`index.mjs`)}function Cb(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(`
125
+ `)}catch(e){t.stderr.write(`cc-candybar: daemon spawn failed: ${e.message}\n`)}}function yy(e,t){return e===null?{kind:`allow`}:e<-1e4?{kind:`allow-future-garbage`,futureMs:-e}:e<t?{kind:`deny`}:{kind:`allow`}}function by(e){return Math.min(3e3*2**Math.min(Math.max(e,0),5),6e4)}function xy(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 Sy(e,n){try{r.mkdirSync(c.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 Cy(){try{r.unlinkSync(We())}catch(e){e.code!==`ENOENT`&&t.stderr.write(`cc-candybar: could not reset spawn.backoff: ${e.message}\n`)}}function wy(){let e=Ue(),n=We(),r=xy(n),i=yy(Ty(e),by(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`),Ey(e),Sy(n,Math.min(r+1,5)),!0)}function Ty(e){try{return Date.now()-r.statSync(e).mtimeMs}catch{return null}}function Ey(e){try{r.mkdirSync(c.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 Dy=null;function Oy(){let e=He();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 Dy={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(!ky(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 ky(e){try{let t=r.statSync(e);return Date.now()-t.mtimeMs>1e4}catch{return!0}}function Ay(){if(!Dy)return;let{fd:e,path:t}=Dy;Dy=null;try{r.closeSync(e)}catch{}try{r.unlinkSync(t)}catch{}}function jy(){try{return r.mkdirSync(Ne(),{recursive:!0}),null}catch(e){return`mkdir ${Ne()}: ${e.message}`}}function My(){let e=t.execPath,n=t.argv[1];return n?Oe({bin:e,args:[`--max-old-space-size=${iy(t.env)}`,n,`daemon`],category:`daemon-spawn`}).ok:!1}const Ny=`cc-candybar`,Py=`dispatch`,Fy=`set-state`,Iy=`step-state`,Ly=`copy`,Ry=`open-vscode`,zy=`toolbar-toggle`,By=`show-config-error`,Vy=`show-config-warning`,Hy=`set-config`,Uy=`step-config`,Wy=`reset-config`,Gy=`apply-layout-op`,Ky=`undo`,qy=`redo`,Jy=`apply-update`,Yy=`doctor-run`,Xy=`doctor-fix`;function Zy(e){return e.map(encodeURIComponent).join(`/`)}function Qy(e){return e.length===0?[]:e.split(`/`).map(decodeURIComponent)}function $y(e){return`${Ny}://${Py}/${e.map(e=>`e=${encodeURIComponent(`${e.verb}/${Zy(e.args)}`)}`).join(`&`)}`}function eb(e){return new y(e).getAll(`e`).map(tb)}function tb(e){let t=e.indexOf(`/`);return t===-1?{verb:e,value:``}:{verb:e.slice(0,t),value:e.slice(t+1)}}const nb=`1.66.0`;function rb(){return c.join(f.homedir(),`.claude`,`settings.json`)}function X(e){return{kind:`ok`,value:e}}const Z={kind:`absent`};function Q(e){return{kind:`failed`,reason:e}}function ib(e,t){return e?.kind===`ok`?e.value:t}const ab=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/;function ob(e){let t=ab.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 sb(e){return e.join(`.`)}function cb([e,t,n],[r,i,a]){return e-r||t-i||n-a}const lb=`@promptctl/cc-candybar`;async function ub(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 Q(`registry responded ${e.status} for ${r}`);let n=await e.json();return typeof n.latest==`string`?ob(n.latest):Z}catch(e){return Q(e instanceof Error?e.message:String(e))}}function db(e,t){let n=ob(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=cb(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 fb(e,t){switch(t.kind){case`current`:return{stream:`stdout`,text:`✓ cc-candybar ${sb(t.installed)} is the latest release.\n`};case`ahead`:return{stream:`stdout`,text:`cc-candybar ${sb(t.installed)} is newer than the registry's latest release (${sb(t.latest)}): an unpublished build.\n`};case`stale`:{let n=sb(t.latest);return{stream:`stderr`,text:`⚠ cc-candybar ${sb(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 pb=`CCCandybarURLHandler`,mb=[],hb={"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 gb(e){return/^[A-Za-z0-9_./=,:-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}function _b(e,t){return[e,...t].map(gb).join(` `)}function vb(){return c.join(f.homedir(),`Applications`,`${pb}.app`)}function yb(){if(process.platform!==`darwin`)throw Error(`URL handler installation requires macOS (found platform: ${process.platform}).`)}function bb(){if(process.platform===`darwin`)return c.join(f.homedir(),`Library`,`Application Support`,`CCCandybar`);let e=process.env.XDG_DATA_HOME??c.join(f.homedir(),`.local`,`share`);return c.join(e,`cc-candybar`)}function xb(){return c.join(bb(),`bin`,`cc-candybar`)}function Sb(){return c.join(bb(),`dist`,`index.mjs`)}function Cb(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(`
126
126
  `)}function wb(e){if(!e)throw Error(`install: process.argv[1] not set`);return e.endsWith(`.mjs`)||e.endsWith(`.js`)?e:c.resolve(c.dirname(e),`..`,`dist`,`index.mjs`)}function Tb(t){let n=hb[`${process.platform}-${process.arch}`];if(n){let r=e(t);try{return{kind:`native`,sourcePath:r.resolve(`${n}/bin/cc-candybar`)}}catch{}}return{kind:`node-shim`,sourcePath:c.resolve(c.dirname(t),`..`,`bin`,`cc-candybar`)}}function Eb(e,t){c.resolve(e)!==c.resolve(t)&&r.copyFileSync(e,t)}function Db(e){let t=r.openSync(e,`r`);try{let n=Buffer.alloc(2),i=r.readSync(t,n,0,2,0);if(i<2)throw Error(`install: staged render entry at ${e} is truncated (${i} byte(s)). Re-run: pnpm dlx ${lb}@latest install`);return n.toString(`latin1`)===`#!`?`node-shim`:`native`}finally{r.closeSync(t)}}function Ob(){let e=wb(process.argv[1]);if(!r.existsSync(e))throw Error(`install: bundled dist not found at ${e}. Reinstall the package.`);let t=Tb(e);if(!r.existsSync(t.sourcePath))throw Error(`install: render entry not found at ${t.sourcePath}. Reinstall the package.`);r.mkdirSync(c.dirname(Sb()),{recursive:!0}),r.mkdirSync(c.dirname(xb()),{recursive:!0}),Eb(e,Sb()),Eb(t.sourcePath,xb()),r.chmodSync(xb(),493),r.rmSync(c.join(bb(),`url-handler.mjs`),{force:!0});let n=Db(xb());return process.stdout.write(`Staged cc-candybar v${nb} runtime at ${bb()}\n`+(n===`native`?` render entry: native binary (${process.platform}-${process.arch})\n`:` render entry: node shim (no native binary for ${process.platform}-${process.arch}; renders are correct but pay node startup)\n`)),{binPath:xb(),distPath:Sb(),entryKind:n}}function kb(){return[{key:`CFBundleIdentifier`,xml:`<string>com.cccandybar.url-handler</string>`},{key:`CFBundleURLTypes`,xml:[`<array>`,` <dict>`,` <key>CFBundleURLName</key>`,` <string>Claude Powerline Click Action</string>`,` <key>CFBundleURLSchemes</key>`,` <array>`,` <string>${Ny}</string>`,` </array>`,` </dict>`,`</array>`].join(`
127
127
  `)}]}function Ab(e){let t=vb();r.mkdirSync(c.dirname(t),{recursive:!0}),r.existsSync(t)&&r.rmSync(t,{recursive:!0,force:!0}),process.stdout.write(`Building ${t}\n`);let n=De({bin:`/usr/bin/osacompile`,args:[`-o`,t,`-e`,Cb(process.execPath,e)],category:`install.osacompile`});if(!n.ok)throw process.stderr.write(n.stderr),Error(`osacompile failed (${n.reason})`);let i=c.join(t,`Contents`,`Info.plist`);for(let{key:e}of kb())De({bin:`/usr/bin/plutil`,args:[`-remove`,e,i],category:`install.plutil`});for(let{key:e,xml:t}of kb()){let n=De({bin:`/usr/bin/plutil`,args:[`-insert`,e,`-xml`,t,i],category:`install.plutil`});if(!n.ok)throw process.stderr.write(n.stderr),Error(`plutil -insert ${e} failed (${n.reason})`)}process.stdout.write(`Registering ${Ny}:// with Launch Services\n`);let a=De({bin:`/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister`,args:[`-f`,t],category:`install.lsregister`});if(!a.ok)throw process.stderr.write(a.stderr),Error(`lsregister failed (${a.reason})`);process.stdout.write(`✓ ${pb}.app installed and registered.\n`),process.stdout.write(` Test: open '${Ny}://hello-world' && pbpaste\n`)}function jb(){yb(),Ab(Ob().distPath)}function Mb(e,t=Ny){let n=`${t}://`;if(!e.startsWith(n))throw Error(`expected ${n} scheme, got: ${e}`);let r=e.slice(n.length),i=r.indexOf(`/`);return i===-1?{verb:Ly,value:r}:{verb:decodeURIComponent(r.slice(0,i)),value:r.slice(i+1)}}async function Nb(e){e||(process.stderr.write(`url-handle: missing URL argument.
128
128
  `),process.exit(1));let t;try{t=Mb(e)}catch(e){process.stderr.write(`url-handle: ${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}let n=await qv(t.verb,t.value);n.kind===`ok`&&process.exit(0),n.kind===`transient`&&(hy(),process.stderr.write(`url-handle: daemon unavailable (${n.cause}: ${n.message})\n`),process.exit(1)),process.stderr.write(Pb(n)+`
@@ -135,7 +135,7 @@ Config tooling:
135
135
  `)?r.slice(0,-1):r}return Vr(new jr([...e],n),{colorSystem:t.colorCompatibility})}function bx(e){return Math.min(20,e??20)}const xx={heading:`ERROR`,glyph:`⚠`,colors:px},Sx={heading:`WARNING`,glyph:`⚠`,colors:mx},Cx={heading:`UPDATE`,glyph:`⬆`,colors:mx};function wx(e,t){return{text:cx(e),link:t}}function Tx(e,t,n){let[r,...i]=[Ex(e,xx,By),t,Ex(n,Sx,Vy)].flat();return r===void 0?null:{channels:[r,...i]}}function Ex(e,t,n){let r=$y([{verb:n,args:[e]}]),[i,...a]=e.split(/\r\n|\r|\n/).map(e=>wx(e,r)).filter(e=>e.text!==``).map(e=>[e]);return i===void 0?[]:[{severity:t,message:e,lines:[i,...a]}]}function Dx(e){return e.channels.map(e=>`${e.severity.heading}\n${e.message}\n`).join(`
136
136
  `)}function Ox(e,t,n,r){if(t===null)return e;let i=kx(r),a=t.channels.flatMap(e=>Ax(e,i)),o=n.failedConfigFile!==null||a.length>r.rowCap,s=a.slice(0,r.rowCap-Number(o)),c=o?[jx(t,n,a.length-s.length,i)]:[],l=[...s,...c].join(`
137
137
  `);return e?`${l}\n${e}`:l}function kx(e){return{style:`plain`,separator:``,width:e.width,wrap:!0,padding:0,charset:`unicode`,colorCompatibility:e.colorCompatibility}}function Ax(e,t){let n=new H({bgcolor:e.severity.colors.bg,color:e.severity.colors.fg}),r=A(Math.max(2,t.width-1)),i=(e,t)=>new Ar(`${e} `,{style:t,end:``,noWrap:!0});return e.lines.flatMap((a,o)=>yx([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=>Vt(e,r)).map(e=>i(e,t))})],t).split(`
138
- `))}function jx(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 Ar(e,{style:t,end:``,noWrap:!0}),l=n>0?[c(`${n} more rows · `,s),a.kind===`file`?c(`open full text`,s.withLink(x(a.path).href)):c(`full text unavailable: ${cx(a.reason)}`,s)]:[],u=o===null?[]:[c(`${l.length>0?` · `:``}open `,s),c(cx(o),s.withLink(x(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=Ar.fromFragments([...d,...p]).truncate(r.width,{overflow:`ellipsis`});return m.noWrap=!0,yx([m],r)}const Mx=e=>!e.startsWith(`.`)&&!e.endsWith(`~`);function Nx(e,t){return t.isSymbolicLink()?Buffer.from(r.readlinkSync(e)):r.readFileSync(e)}function Px(e,t){return r.readdirSync(t).filter(Mx).sort().flatMap(n=>{let i=c.join(t,n),a=r.lstatSync(i,{throwIfNoEntry:!1});return a===void 0?[]:a.isDirectory()?Px(e,i):[[c.relative(e,i).split(c.sep).join(`/`),Nx(i,a)]]})}function Fx(e){let t=ee.createHash(`sha256`);for(let[n,r]of Px(e,e))t.update(n).update(`\0`).update(r).update(`\0`);return t.digest(`hex`)}const Ix=e=>e.slice(0,7);function Lx(e){return c.dirname(c.dirname(e))}function Rx(){return{version:nb,digest:`1d6fdaafe6cdfdd799ab1b72132dce1ff1b9595e773b30b50c65542bdea3e7e5`}}function zx(e){let t=JSON.parse(r.readFileSync(c.join(e,`package.json`),`utf8`)),n=typeof t==`object`&&t?t.version:void 0;if(typeof n!=`string`)throw Error(`${c.join(e,`package.json`)} has no version string`);return n}function Bx(e,t){try{let n=Lx(b(e)),i=c.join(n,`src`);if(!r.existsSync(i))return{kind:`not-source-checkout`};let a=t(),o=Fx(i);return o===a.digest?{kind:`current`,root:n,stamp:a}:{kind:`stale`,root:n,source:{version:zx(n),digest:o},running:a}}catch(e){return{kind:`unchecked`,reason:e.message}}}var $=class extends Error{constructor(e){super(e),this.name=`BadVerbArgs`}};const Vx=/^-?\d+$/;function Hx(e,t,n){return e===void 0?t:Math.max(t,Math.min(n,e))}function Ux(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 Wx(e){return t=>{if(!t)return{ok:!1,reason:`${e} value is required`};if(!Vx.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 Gx(e,t,n){return r=>r?Vx.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 Kx(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=>!Vx.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,seed:Hx(r[0].seed,t,i)}}return{kind:`int`}}function qx(e){return e===`config`?`set-config`:`set-state`}function Jx(e,t,n){return t.kind===`int`?Wx(`menu page "${e}"`):t.kind===`range`?Gx(t.min,t.max,`${n} stepper "${e}"`):Ux(t.allowed,`${n} "${e}"`,qx(n))}function Yx(e,t,n){return Jx(e,Kx(e,t,n),n)}function Xx(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:Kx(e,n,t)}))}function Zx(e,t=`state`){let n=new Map(Object.entries(e).map(([e,t])=>[e,{validator:t,permanent:!0}]));function r(){let e=[];for(let[t,r]of n)r.permanent&&e.push(t);return e}return{register(e,i){if(!e)throw Error(`register: key is required`);if(e.includes(`/`))throw Error(`register: key "${e}" contains "/" — the wire shape splits on "/" so a slash-bearing key cannot be addressed. Use a slash-free key.`);let a=n.get(e);if(a){if(a.permanent)throw Error(`register: key "${e}" is a built-in ${t} key and cannot be re-claimed (built-in keys: ${[...r()].join(`, `)})`);if(a.kind!==i.kind)throw Error(`register: key "${e}" is already a ${a.kind} ${t} key; cannot also register it as ${i.kind}. A ${t} key has one key shape — a menu page index (int) and a button allow-list cannot share a key.`);a.specs.push(i),a.validator=Yx(e,a.specs,t)}else{let r=[i];n.set(e,{permanent:!1,kind:i.kind,validator:Yx(e,r,t),specs:r})}let o=!0;return()=>{if(!o)return;o=!1;let r=n.get(e);if(!r||r.permanent)return;let a=r.specs.indexOf(i);a>=0&&r.specs.splice(a,1),r.specs.length===0?n.delete(e):r.validator=Yx(e,r.specs,t)}},validate(e,r){let i=n.get(e);return i?i.validator(r):{ok:!1,reason:`unknown ${t} key "${e}" (have: ${[...n.keys()].join(`, `)})`}},listKeys(){return[...n.keys()]},listBaselineKeys(){return r()},rangeParamsFor(e){let r=n.get(e);if(!r||r.permanent||r.kind!==`range`)return null;let i=Kx(e,r.specs,t);if(i.kind!==`range`)throw Error(`rangeParamsFor: key "${e}" holds range specs but the merge produced a ${i.kind} spec — the entry-kind invariant is broken.`);return{min:i.min,max:i.max,seed:i.seed}}}}const Qx=Zx({},`config`);function $x(){return Qx.listKeys()}function eS(e,t){return Qx.validate(e,t)}function tS(e){return Qx.rangeParamsFor(e)}function nS(e,t,n){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:N_(e.from,n)}}]:`cycle`in e?[{key:e.persist,spec:{kind:`allow-list`,allowed:e.cycle}}]:`removeSegment`in e?[{key:e.persist,spec:{kind:`allow-list`,allowed:[Qm({op:`remove`,target:e.removeSegment})]}}]:`insertSegment`in e?[{key:e.persist,spec:{kind:`allow-list`,allowed:[Qm({op:`insert`,segment:e.insertSegment,anchor:e.anchor,relation:e.relation})]}}]:`insertSegmentFrom`in e?[{key:e.persist,spec:{kind:`allow-list`,allowed:N_(e.insertSegmentFrom,n).map(t=>Qm({op:`insert`,segment:t,anchor:e.anchor,relation:e.relation}))}}]:[{key:e.persist,spec:{kind:`range`,min:e.min,max:e.max,seed:Hx(t.get(e.persist),e.min,e.max)}}]:[]}function rS(e){return ko(e.globals)}function iS(e){let t=new Set;for(let n of oS(e)){let e=`persist`in n?n.persist:`reset`in n?n.reset:null;if(e===null)continue;let r=dh(e);r?.scope===`preset-root`&&t.add(r.preset)}return[...t].map(e=>({key:uh(e),spec:{kind:`allow-list`,allowed:[]}}))}function aS(e){let t=rS(e),n=new Map([...j_(e),...wh(e)]);return[...iS(e),...oS(e).flatMap(e=>nS(e,t,n))]}function oS(e){return Object.values(e.actions).flatMap(Ag)}function sS(e){return Xx(aS(e),`config`)}function cS(e,t){return Qx.register(e,t)}const lS=li(),uS=new Set(lS),dS=new Set(pi),fS=e=>e?uS.has(e)?{ok:!0,value:e}:{ok:!1,reason:`unknown theme "${e}" (have: ${lS.join(`, `)})`}:{ok:!1,reason:`theme name is required`},pS=e=>e?dS.has(e)?{ok:!0,value:e}:{ok:!1,reason:`unknown style "${e}" (have: ${pi.join(`, `)})`}:{ok:!1,reason:`style name is required`},mS=new Set([`1`,`true`]),hS=new Set([`0`,`false`]),gS=Zx({style:pS,theme:fS,"toolbar-expanded":e=>mS.has(e)?{ok:!0,value:`1`}:hS.has(e)?{ok:!0,value:``}:{ok:!1,reason:`expected boolean-ish (1, 0, true, false), got "${e}"`}});function _S(){return gS.listKeys()}function vS(e,t){return gS.register(e,t)}function yS(e,t){return gS.validate(e,t)}function bS(e){return gS.rangeParamsFor(e)}function xS(e,t,n){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:N_(e.from,n)}}]:`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,seed:Hx(t.get(e.set),e.min,e.max)}}]:[]}function SS(e){let t=new Set(gS.listBaselineKeys());return e.filter(e=>e.spec.kind!==`allow-list`||!t.has(e.key))}function CS(e){let t=new Map,n=/^-?\d+$/;for(let r of Object.values(e.variables)){if(r.kind!==`state`)continue;let e=r.default;e!==void 0&&n.test(e)&&t.set(r.key,parseInt(e,10))}for(let[n,r]of ko(e.globals))t.set(n,r);return t}function wS(e){let t=CS(e),n=j_(e);return SS(Object.values(e.actions).flatMap(Ag).flatMap(e=>xS(e,t,n)))}function TS(e){return Xx(wS(e))}const ES=`update.dismissed`,DS=`updateNotice`;function OS(e){return e.kind===`source`?e.newer.digest:sb(e.newer)}const kS=e=>`${e.version} [${Ix(e.digest)}]`;function AS(e){switch(e.kind){case`source`:return{headline:`Newer source`,newer:kS(e.newer),running:kS(e.running),act:`rebuild`,busy:`rebuilding…`,command:{bin:`pnpm`,args:[`build`],cwd:e.root}};case`release`:return{headline:`Newer release`,newer:sb(e.newer),running:sb(e.running),act:`upgrade`,busy:`upgrading…`,command:{bin:`pnpm`,args:[`dlx`,`${lb}@${sb(e.newer)}`,`install`]}}}}const jS={kind:`idle`},MS={kind:`running`};function NS(e,t,n){if(e===null)return[];let r=OS(e);if(!n.enabled||n.dismissed===r)return[];let i=AS(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(`
138
+ `))}function jx(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 Ar(e,{style:t,end:``,noWrap:!0}),l=n>0?[c(`${n} more rows · `,s),a.kind===`file`?c(`open full text`,s.withLink(x(a.path).href)):c(`full text unavailable: ${cx(a.reason)}`,s)]:[],u=o===null?[]:[c(`${l.length>0?` · `:``}open `,s),c(cx(o),s.withLink(x(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=Ar.fromFragments([...d,...p]).truncate(r.width,{overflow:`ellipsis`});return m.noWrap=!0,yx([m],r)}const Mx=e=>!e.startsWith(`.`)&&!e.endsWith(`~`);function Nx(e,t){return t.isSymbolicLink()?Buffer.from(r.readlinkSync(e)):r.readFileSync(e)}function Px(e,t){return r.readdirSync(t).filter(Mx).sort().flatMap(n=>{let i=c.join(t,n),a=r.lstatSync(i,{throwIfNoEntry:!1});return a===void 0?[]:a.isDirectory()?Px(e,i):[[c.relative(e,i).split(c.sep).join(`/`),Nx(i,a)]]})}function Fx(e){let t=ee.createHash(`sha256`);for(let[n,r]of Px(e,e))t.update(n).update(`\0`).update(r).update(`\0`);return t.digest(`hex`)}const Ix=e=>e.slice(0,7);function Lx(e){return c.dirname(c.dirname(e))}function Rx(){return{version:nb,digest:`70b902a762bb064d6d46d39703380dceb22a10e7c8aa74bef077490bc8c0b016`}}function zx(e){let t=JSON.parse(r.readFileSync(c.join(e,`package.json`),`utf8`)),n=typeof t==`object`&&t?t.version:void 0;if(typeof n!=`string`)throw Error(`${c.join(e,`package.json`)} has no version string`);return n}function Bx(e,t){try{let n=Lx(b(e)),i=c.join(n,`src`);if(!r.existsSync(i))return{kind:`not-source-checkout`};let a=t(),o=Fx(i);return o===a.digest?{kind:`current`,root:n,stamp:a}:{kind:`stale`,root:n,source:{version:zx(n),digest:o},running:a}}catch(e){return{kind:`unchecked`,reason:e.message}}}var $=class extends Error{constructor(e){super(e),this.name=`BadVerbArgs`}};const Vx=/^-?\d+$/;function Hx(e,t,n){return e===void 0?t:Math.max(t,Math.min(n,e))}function Ux(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 Wx(e){return t=>{if(!t)return{ok:!1,reason:`${e} value is required`};if(!Vx.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 Gx(e,t,n){return r=>r?Vx.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 Kx(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=>!Vx.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,seed:Hx(r[0].seed,t,i)}}return{kind:`int`}}function qx(e){return e===`config`?`set-config`:`set-state`}function Jx(e,t,n){return t.kind===`int`?Wx(`menu page "${e}"`):t.kind===`range`?Gx(t.min,t.max,`${n} stepper "${e}"`):Ux(t.allowed,`${n} "${e}"`,qx(n))}function Yx(e,t,n){return Jx(e,Kx(e,t,n),n)}function Xx(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:Kx(e,n,t)}))}function Zx(e,t=`state`){let n=new Map(Object.entries(e).map(([e,t])=>[e,{validator:t,permanent:!0}]));function r(){let e=[];for(let[t,r]of n)r.permanent&&e.push(t);return e}return{register(e,i){if(!e)throw Error(`register: key is required`);if(e.includes(`/`))throw Error(`register: key "${e}" contains "/" — the wire shape splits on "/" so a slash-bearing key cannot be addressed. Use a slash-free key.`);let a=n.get(e);if(a){if(a.permanent)throw Error(`register: key "${e}" is a built-in ${t} key and cannot be re-claimed (built-in keys: ${[...r()].join(`, `)})`);if(a.kind!==i.kind)throw Error(`register: key "${e}" is already a ${a.kind} ${t} key; cannot also register it as ${i.kind}. A ${t} key has one key shape — a menu page index (int) and a button allow-list cannot share a key.`);a.specs.push(i),a.validator=Yx(e,a.specs,t)}else{let r=[i];n.set(e,{permanent:!1,kind:i.kind,validator:Yx(e,r,t),specs:r})}let o=!0;return()=>{if(!o)return;o=!1;let r=n.get(e);if(!r||r.permanent)return;let a=r.specs.indexOf(i);a>=0&&r.specs.splice(a,1),r.specs.length===0?n.delete(e):r.validator=Yx(e,r.specs,t)}},validate(e,r){let i=n.get(e);return i?i.validator(r):{ok:!1,reason:`unknown ${t} key "${e}" (have: ${[...n.keys()].join(`, `)})`}},listKeys(){return[...n.keys()]},listBaselineKeys(){return r()},rangeParamsFor(e){let r=n.get(e);if(!r||r.permanent||r.kind!==`range`)return null;let i=Kx(e,r.specs,t);if(i.kind!==`range`)throw Error(`rangeParamsFor: key "${e}" holds range specs but the merge produced a ${i.kind} spec — the entry-kind invariant is broken.`);return{min:i.min,max:i.max,seed:i.seed}}}}const Qx=Zx({},`config`);function $x(){return Qx.listKeys()}function eS(e,t){return Qx.validate(e,t)}function tS(e){return Qx.rangeParamsFor(e)}function nS(e,t,n){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:N_(e.from,n)}}]:`cycle`in e?[{key:e.persist,spec:{kind:`allow-list`,allowed:e.cycle}}]:`removeSegment`in e?[{key:e.persist,spec:{kind:`allow-list`,allowed:[Qm({op:`remove`,target:e.removeSegment})]}}]:`insertSegment`in e?[{key:e.persist,spec:{kind:`allow-list`,allowed:[Qm({op:`insert`,segment:e.insertSegment,anchor:e.anchor,relation:e.relation})]}}]:`insertSegmentFrom`in e?[{key:e.persist,spec:{kind:`allow-list`,allowed:N_(e.insertSegmentFrom,n).map(t=>Qm({op:`insert`,segment:t,anchor:e.anchor,relation:e.relation}))}}]:[{key:e.persist,spec:{kind:`range`,min:e.min,max:e.max,seed:Hx(t.get(e.persist),e.min,e.max)}}]:[]}function rS(e){return ko(e.globals)}function iS(e){let t=new Set;for(let n of oS(e)){let e=`persist`in n?n.persist:`reset`in n?n.reset:null;if(e===null)continue;let r=dh(e);r?.scope===`preset-root`&&t.add(r.preset)}return[...t].map(e=>({key:uh(e),spec:{kind:`allow-list`,allowed:[]}}))}function aS(e){let t=rS(e),n=new Map([...j_(e),...wh(e)]);return[...iS(e),...oS(e).flatMap(e=>nS(e,t,n))]}function oS(e){return Object.values(e.actions).flatMap(Ag)}function sS(e){return Xx(aS(e),`config`)}function cS(e,t){return Qx.register(e,t)}const lS=li(),uS=new Set(lS),dS=new Set(pi),fS=e=>e?uS.has(e)?{ok:!0,value:e}:{ok:!1,reason:`unknown theme "${e}" (have: ${lS.join(`, `)})`}:{ok:!1,reason:`theme name is required`},pS=e=>e?dS.has(e)?{ok:!0,value:e}:{ok:!1,reason:`unknown style "${e}" (have: ${pi.join(`, `)})`}:{ok:!1,reason:`style name is required`},mS=new Set([`1`,`true`]),hS=new Set([`0`,`false`]),gS=Zx({style:pS,theme:fS,"toolbar-expanded":e=>mS.has(e)?{ok:!0,value:`1`}:hS.has(e)?{ok:!0,value:``}:{ok:!1,reason:`expected boolean-ish (1, 0, true, false), got "${e}"`}});function _S(){return gS.listKeys()}function vS(e,t){return gS.register(e,t)}function yS(e,t){return gS.validate(e,t)}function bS(e){return gS.rangeParamsFor(e)}function xS(e,t,n){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:N_(e.from,n)}}]:`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,seed:Hx(t.get(e.set),e.min,e.max)}}]:[]}function SS(e){let t=new Set(gS.listBaselineKeys());return e.filter(e=>e.spec.kind!==`allow-list`||!t.has(e.key))}function CS(e){let t=new Map,n=/^-?\d+$/;for(let r of Object.values(e.variables)){if(r.kind!==`state`)continue;let e=r.default;e!==void 0&&n.test(e)&&t.set(r.key,parseInt(e,10))}for(let[n,r]of ko(e.globals))t.set(n,r);return t}function wS(e){let t=CS(e),n=j_(e);return SS(Object.values(e.actions).flatMap(Ag).flatMap(e=>xS(e,t,n)))}function TS(e){return Xx(wS(e))}const ES=`update.dismissed`,DS=`updateNotice`;function OS(e){return e.kind===`source`?e.newer.digest:sb(e.newer)}const kS=e=>`${e.version} [${Ix(e.digest)}]`;function AS(e){switch(e.kind){case`source`:return{headline:`Newer source`,newer:kS(e.newer),running:kS(e.running),act:`rebuild`,busy:`rebuilding…`,command:{bin:`pnpm`,args:[`build`],cwd:e.root}};case`release`:return{headline:`Newer release`,newer:sb(e.newer),running:sb(e.running),act:`upgrade`,busy:`upgrading…`,command:{bin:`pnpm`,args:[`dlx`,`${lb}@${sb(e.newer)}`,`install`]}}}}const jS={kind:`idle`},MS={kind:`running`};function NS(e,t,n){if(e===null)return[];let r=OS(e);if(!n.enabled||n.dismissed===r)return[];let i=AS(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(`
139
139
  `),c=$y([{verb:Vy,args:[s]}]),l=t.kind===`running`?wx(`[${i.busy}]`,c):wx(`[${i.act}]`,$y([{verb:Jy,args:[n.sessionId]}]));return[{severity:Cx,message:s,lines:[[wx(a,c),l,wx(`[dismiss]`,$y([{verb:Fy,args:[n.sessionId,ES,r]}])),wx(`[disable]`,$y([{verb:Hy,args:[n.sessionId,DS,`false`]}]))],...o.map(e=>[wx(e,c)])]}]}function PS(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 FS(e){switch(e.kind){case`current`:return[`info`,`build: current ${kS(e.stamp)}`];case`stale`:return[`info`,`build: stale — source ${kS(e.source)}, running ${kS(e.running)}`];case`not-source-checkout`:return[`info`,`build: not a source checkout`];case`unchecked`:return[`warn`,`build: unchecked: ${e.reason}`]}}function IS(e){switch(e.kind){case`current`:return[`info`,`release: current ${sb(e.installed)}`];case`stale`:return[`info`,`release: stale — latest ${sb(e.latest)}, running ${sb(e.installed)}`];case`ahead`:return[`info`,`release: ahead — running ${sb(e.installed)}, latest ${sb(e.latest)}`];case`unchecked`:return[`warn`,`release: unchecked: ${e.reason}`]}}function LS(e){let t=null;return([n,r])=>{r!==t&&(t=r,e(n,r))}}const RS=e=>e.split(/\r?\n/).map(e=>e.trim()).filter(e=>e!==``).at(-1);function zS(e){let t=e.exitCode===null?``:` (exit ${e.exitCode})`,n=RS(e.stderr)??e.error??RS(e.stdout)??`no output`;return`${e.reason}${t}: ${n}`}function BS(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=jS,d=null,f=LS(s),p=LS(s),m=()=>PS(c,l);function h(){let e=m(),t=e===null?null:OS(e);(d===null?null:d.identity)!==t&&(d?.dispose(),d=t===null?null:{identity:t,dispose:vS(ES,{kind:`allow-list`,allowed:[t]})})}function g(){c=Bx(t,Rx),f(FS(c)),h()}async function _(){l=db(nb,await ub(lb,a,i)),p(IS(l)),h()}return{arm(){cS(DS,{kind:`allow-list`,allowed:[`false`]}),g(),setInterval(g,n).unref(),c.kind===`not-source-checkout`&&(_(),setInterval(()=>void _(),r).unref())},notice:e=>NS(m(),u,e),act(){let e=m();if(e===null)throw new $(`apply-update: nothing newer is known to apply`);let t=AS(e);if(u.kind===`running`)throw new $(`apply-update: already ${t.busy}`);u=MS,s(`info`,`apply-update: ${t.act} — ${t.command.bin} ${t.command.args?.join(` `)??``}`),Ee({...t.command,category:`update.apply`,timeoutMs:6e5}).then(n=>{if(n.ok){u=jS,s(`info`,`apply-update: ${t.act} succeeded`),g(),o();return}let r=zS(n);u={kind:`failed`,identity:OS(e),reason:r},s(`error`,`apply-update: ${t.act} failed: ${r}`)})}}}function VS(e,t,n){return t.ok?X(t.stdout):t.reason===`non-zero`&&n===`absent`||t.reason===`non-zero`&&n===t.exitCode?Z:Q(`${e}: ${[t.reason,t.exitCode==null?null:`exit ${t.exitCode}`,t.error??HS(t.stderr)].filter(Boolean).join(`, `)}`)}function HS(e){return e.trim().split(`
140
140
  `,1)[0]??``}function US(e,t){if(e.kind!==`ok`)return e;let n=t(e.value);return n===null?Z:X(n)}function WS(e){if(e.kind!==`ok`)return e;let t=e.value.trim();return t?X(t):Z}const GS=/^[A-Za-z]:[\\/]/;function KS(e){let t=e.trim();if(GS.test(t))return null;let n=t.match(/^(?:[^@/]+@)?(\[[^\]]+\]):(.*)$/)??t.match(/^(?:[^@/:]+@)?([^/:]+):(?!\/\/)(.*)$/),r=n?`ssh://${n[1]}/${n[2].replace(/^\/+/,``)}`:t,i;try{i=new URL(r)}catch{return null}return{scheme:i.protocol.replace(/:$/,``),host:i.hostname.toLowerCase(),port:i.port,path:i.pathname.replace(/^\/+/,``).replace(/\/+$/,``)}}function qS(e){return KS(e)?.host||null}function JS(e){let t=qS(e);return t?t===`github.com`||t.endsWith(`.github.com`)?`github`:/(^|\.)gitlab\./.test(t)?`gitlab`:null:null}function YS(e){let t=new Map;for(let n of e.split(`
141
141
  `)){let e=n.match(/^remote\.(.+)\.url\s+(\S.*)$/);if(!e)continue;let r=t.get(e[1])??[];r.push(e[2].trim()),t.set(e[1],r)}return[...t].map(([e,t])=>({name:e,urls:t}))}function XS(e){return e.urls.find(e=>tC(e)!==null)??e.urls[0]??null}function ZS(e){return e.find(e=>e.name===`origin`)??e[0]??null}function QS(e){let t=ZS(e);return t?XS(t):null}function $S(e){let t=ZS(e);return t?t.urls.find(e=>JS(e)!==null)??XS(t):null}function eC(e){let t=(KS(e)?.path??e.replace(/[\\/]+$/,``)).split(`/`);return(t[t.length-1]??``).replace(/\.git$/,``)||null}function tC(e){let t=KS(e);if(!t)return null;let n=t.scheme===`https`?{scheme:`https`,port:t.port}:t.scheme===`http`?{scheme:`http`,port:t.port}:t.scheme===`ssh`||t.scheme===`git`?{scheme:`https`,port:``}:null;if(!n||!t.host)return null;let r=t.path.replace(/\.git$/,``);if(!r)return null;let i=n.port?`${t.host}:${n.port}`:t.host;return`${n.scheme}://${i}/${r}`}function nC(e){let t=QS(e);return t===null?null:tC(t)}function rC(e,t,n,r){return t.ok?r(t.stdout):t.reason===`spawn-error`&&/ENOENT/i.test(t.error??``)||t.reason===`non-zero`&&n.test(t.stderr)?Z:Q(`${e}: ${[t.reason,t.exitCode==null?null:`exit ${t.exitCode}`,t.error??HS(t.stderr)].filter(Boolean).join(`, `)}`)}function iC(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function aC(e){let t=`detached`,n=Z,r=Z,i=Z,a=0,o=0,s=0,c=0;for(let l of e.split(`
@@ -176,30 +176,30 @@ Extending builtins is not supported.`),e;Object.isExtensible(e)||n(`Cannot make
176
176
  The field is already annotated with '`+a+`'.`)+`
177
177
  Re-annotating fields is not allowed.
178
178
  Use 'override' annotation for methods overridden by subclass.`)}}var na=ca(0),ra=function(){var e=!1,t={};return Object.defineProperty(t,`0`,{set:function(){e=!0}}),Object.create(t)[0]=1,e===!1}(),ia=0,aa=function(){};function oa(e,t){Object.setPrototypeOf?Object.setPrototypeOf(e.prototype,t):e.prototype.__proto__===void 0?e.prototype=t:e.prototype.__proto__=t}oa(aa,Array.prototype);var sa=function(e){function t(t,n,r,i){var a;return r===void 0&&(r=`ObservableArray@`+h()),i===void 0&&(i=!1),a=e.call(this)||this,ma(function(){var e=new Oi(r,n,i,!0);e.proxy_=a,te(a,D,e),t&&t.length&&a.spliceWithArray(0,0,t),ra&&Object.defineProperty(a,`0`,na)}),a}ve(t,e);var n=t.prototype;return n.concat=function(){this[D].atom_.reportObserved();var e=[...arguments];return Array.prototype.concat.apply(this.slice(),e.map(function(e){return Fi(e)?e.slice():e}))},n[Symbol.iterator]=function(){var e=this,t=0;return ba({next:function(){return t<e.length?{value:e[t++],done:!1}:{done:!0,value:void 0}}})},he(t,[{key:`length`,get:function(){return this[D].getArrayLength_()},set:function(e){this[D].setArrayLength_(e)}},{key:Symbol.toStringTag,get:function(){return`Array`}}])}(aa);Object.entries(Ai).forEach(function(e){var t=e[0],n=e[1];t!==`concat`&&ee(sa.prototype,t,n)});function ca(e){return{enumerable:!1,configurable:!0,get:function(){return this[D].get_(e)},set:function(t){this[D].set_(e,t)}}}function la(e){s(sa.prototype,``+e,ca(e))}function ua(e){if(e>ia){for(var t=ia;t<e+100;t++)la(t);ia=e}}ua(1e3);function da(e,t,n){return new sa(e,t,n)}function G(e,t){if(typeof e==`object`&&e){if(Fi(e))return t!==void 0&&n(23),e[D].atom_;if(Gi(e))return e.atom_;if(Bi(e)){if(t===void 0)return e.keysAtom_;var r=e.data_.get(t)||e.hasMap_.get(t);return r||n(25,t,pa(e)),r}if($i(e)){if(!t)return n(26);var i=e[D].values_.get(t);return i||n(27,t,pa(e)),i}if(Pe(e)||tn(e)||z(e))return e}else if(v(e)&&z(e[D]))return e[D];n(28)}function fa(e,t){if(e||n(29),t!==void 0)return fa(G(e,t));if(Pe(e)||tn(e)||z(e)||Bi(e)||Gi(e))return e;if(e[D])return e[D];n(24,e)}function pa(e,t){var n;if(t!==void 0)n=G(e,t);else if(sr(e))return e.name;else n=$i(e)||Bi(e)||Gi(e)?fa(e):G(e);return n.name_}function ma(e){var t=F(),n=Xt(!0);An();try{return e()}finally{jn(),Zt(n),hn(t)}}var ha=c.toString;function ga(e,t,n){return n===void 0&&(n=-1),_a(e,t,n)}function _a(e,t,n,r,i){if(e===t)return e!==0||1/e==1/t;if(e==null||t==null)return!1;if(e!==e)return t!==t;var a=typeof e;if(a!==`function`&&a!==`object`&&typeof t!=`object`)return!1;var o=ha.call(e);if(o!==ha.call(t))return!1;switch(o){case`[object RegExp]`:case`[object String]`:return``+e==``+t;case`[object Number]`:return+e==+e?+e==0?1/e==1/t:+e==+t:+t!=+t;case`[object Date]`:case`[object Boolean]`:return+e==+t;case`[object Symbol]`:return typeof Symbol<`u`&&Symbol.valueOf.call(e)===Symbol.valueOf.call(t);case`[object Map]`:case`[object Set]`:n>=0&&n++;break}e=va(e),t=va(t);var s=o===`[object Array]`;if(!s){if(typeof e!=`object`||typeof t!=`object`)return!1;var c=e.constructor,l=t.constructor;if(c!==l&&!(v(c)&&c instanceof c&&v(l)&&l instanceof l)&&`constructor`in e&&`constructor`in t)return!1}if(n===0)return!1;n<0&&(n=-1),r||=[],i||=[];for(var u=r.length;u--;)if(r[u]===e)return i[u]===t;if(r.push(e),i.push(t),s){if(u=e.length,u!==t.length)return!1;for(;u--;)if(!_a(e[u],t[u],n-1,r,i))return!1}else{var d=Object.keys(e),f=d.length;if(Object.keys(t).length!==f)return!1;for(var p=0;p<f;p++){var m=d[p];if(!(ce(t,m)&&_a(e[m],t[m],n-1,r,i)))return!1}}return r.pop(),i.pop(),!0}function va(e){return Fi(e)?e.slice():re(e)||Bi(e)||C(e)||Gi(e)?Array.from(e.entries()):e}var ya=i().Iterator?.prototype||{};function ba(e){return e[Symbol.iterator]=xa,Object.assign(Object.create(ya),e)}function xa(){return this}function Sa(e){return e instanceof Object&&typeof e.annotationType_==`string`&&v(e.make_)&&v(e.extend_)}[`Symbol`,`Map`,`Set`].forEach(function(e){i()[e]===void 0&&n(`MobX requires global '`+e+`' to be available or polyfilled`)}),typeof __MOBX_DEVTOOLS_GLOBAL_HOOK__==`object`&&__MOBX_DEVTOOLS_GLOBAL_HOOK__.injectMobx({spy:Jn,extras:{getDebugName:pa},$mobx:D}),e.$mobx=D,e.FlowCancellationError=Dr,e.ObservableMap=zi,e.ObservableSet=Wi,e.Reaction=Ln,e._allowStateChanges=M,e._allowStateChangesInsideComputed=or,e._allowStateReadsEnd=_n,e._allowStateReadsStart=gn,e._autoAction=ar,e._endAction=Yt,e._getAdministration=fa,e._getGlobalState=wn,e._interceptReads=Fr,e._isComputingDerivation=sn,e._resetGlobalState=Tn,e._startAction=j,e.action=ir,e.autorun=cr,e.comparer=Be,e.computed=Ht,e.configure=br,e.createAtom=Fe,e.defineProperty=Qr,e.entries=qr,e.extendObservable=U,e.flow=jr,e.flowResult=Nr,e.get=Zr,e.getAtom=G,e.getDebugName=pa,e.getDependencyTree=xr,e.getObserverTree=Cr,e.has=Xr,e.intercept=Ir,e.isAction=sr,e.isBoxedObservable=en,e.isComputed=Br,e.isComputedProp=Vr,e.isFlow=Pr,e.isFlowCancellationError=Or,e.isObservable=Ur,e.isObservableArray=Fi,e.isObservableMap=Bi,e.isObservableObject=$i,e.isObservableProp=Wr,e.isObservableSet=Gi,e.keys=Gr,e.makeAutoObservable=Ci,e.makeObservable=xi,e.observable=A,e.observe=ei,e.onBecomeObserved=mr,e.onBecomeUnobserved=hr,e.onReactionError=Rn,e.override=Ke,e.ownKeys=$r,e.reaction=dr,e.remove=Yr,e.runInAction=or,e.set=Jr,e.spy=Jn,e.toJS=ai,e.trace=oi,e.transaction=ci,e.untracked=mn,e.values=Kr,e.when=li})),Mw=me(((e,t)=>{process.env.NODE_ENV===`production`?t.exports=Aw():t.exports=jw()}))();function Nw(e){if(Array.isArray(e))return Object.freeze(e.map(Nw));if(typeof e==`object`&&e){let t=Object.create(null),n=Object.entries(e).sort(([e],[t])=>e<t?-1:+(e>t));for(let[e,r]of n)t[e]=Nw(r);return Object.freeze(t)}return e}function Pw(e){let t=typeof e;if(t===`string`||t===`number`||t===`boolean`)return t;throw TypeError(`Variable values must be string|number|boolean (got ${t})`)}function Fw(e){return typeof e==`string`?e:String(e)}function Iw(e){if(typeof e==`number`)return e;if(typeof e==`boolean`)return+!!e;let t=e.trim();if(t===``)throw TypeError(`Cannot cast empty string to number`);let n=Number(t);if(!Number.isFinite(n))throw TypeError(`Cannot cast ${JSON.stringify(e)} to number`);return n}function Lw(e){if(typeof e==`boolean`)return e;if(typeof e==`number`){if(e===0||e===1)return e===1;throw TypeError(`Cannot cast number ${e} to bool (only 0 and 1 are accepted)`)}if(e===`true`)return!0;if(e===`false`)return!1;throw TypeError(`Cannot cast ${JSON.stringify(e)} to bool (expected "true" or "false")`)}function Rw(e,t){if(!(e instanceof Ar))throw TypeError(`template function expected a RichText fragment, got ${typeof e==`object`?Object.prototype.toString.call(e):typeof e}`);let n=e.copy();return n.style=e.style.add(t),n}function zw(e){return{fn:(t=>Rw(t,e)),argTypes:[`liftable`],returnType:`T`}}function Bw(e){return{fn:((t,n)=>Rw(n,new H({[e]:N.parse(t)}))),argTypes:[`string`,`liftable`],returnType:`T`}}function Vw(e,t){return new H({[e]:t})}function Hw(){let e={};for(let t of lr)e[t]=zw(Vw(t,!0)),e[`not_${t}`]=zw(Vw(t,!1));for(let[t,n]of Object.entries(dr))e[t]=zw(Vw(n,!0));return e}const Uw={fn:((e,t)=>Rw(t,H.parse(e))),argTypes:[`string`,`liftable`],returnType:`T`},Ww={fn:((e,t)=>Rw(t,new H({link:e}))),argTypes:[`string`,`liftable`],returnType:`T`};function Gw(){return{fg:Bw(`color`),bg:Bw(`bgcolor`),...Hw(),link:Ww,style:Uw}}function Kw(e,t){if(!Dn.test(e.trim()))throw TypeError(`${t} expected a color (#RRGGBB or #RRGGBBAA), got ${JSON.stringify(e)} — to use a palette name here, wrap it: ${t} (color ${JSON.stringify(e)}) …`);return On(e)}function qw(e,t){return{fn:t,argTypes:e,returnType:`string`}}function Jw(e,t,n,r){let i=r===void 0||e>=r.min&&e<=r.max;if(!Number.isFinite(e)||!i){let i=r===void 0?`a finite number`:`within ${r.min}..${r.max} (${r.note})`;throw RangeError(`${t}'s ${n} must be ${i}, got ${e}`+(e===void 0?` — ${t} takes it as its last argument`:``))}return e}const Yw=qw([`string`,`int`],((e,t)=>Fn(Kw(e,`darken`),Jw(t,`darken`,`levels`)).hex)),Xw=qw([`string`,`int`],((e,t)=>Fn(Kw(e,`lighten`),-Jw(t,`lighten`,`levels`)).hex)),Zw={min:0,max:100,note:`0 = from, 100 = toward`},Qw=qw([`string`,`string`,`float`],((e,t,n)=>cn(Kw(e,`mix`),Kw(t,`mix`),Jw(n,`mix`,`percentage`,Zw)/100).hex)),$w={min:1,max:21,note:`4.5 = AA body text, 3 = AA large text`},eT=qw([`string`],(e=>In(Kw(e,`contrastOn`)).hex)),tT=qw([`string`,`string`,`float`],((e,t,n)=>zn(Kw(e,`readableOn`),Kw(t,`readableOn`),Jw(n,`readableOn`,`ratio`,$w)).hex)),nT={hueShift:`shiftHue`,chromaScale:`scaleChroma`,lightnessScale:`scaleLightness`,lightnessShift:`shiftLightness`};function rT(){let e={};for(let[t,n]of Object.entries(nT)){let r=t;e[n]=qw([`string`,`float`],((e,t)=>{let i={...gn,[r]:Jw(t,n,`amount`)};return L.fromRgba(Kw(e,n)).applyKey(i).toRgba().hex}))}return e}function iT(){return{darken:Yw,lighten:Xw,mix:Qw,contrastOn:eT,readableOn:tT,...rT()}}function aT(e,t){if(e.length===0)throw RangeError(`ramp needs at least one stop after the easing: ramp <value> <easing> <position> <color> …`);if(e.length%2!=0)throw RangeError(`ramp's last stop (position ${String(e[e.length-1])}) has no color — stops are <position> <color> pairs`);let n=[];for(let r=0;r<e.length;r+=2)n.push({at:e[r],color:kn(t,e[r+1])});return n}function oT(e){return{color:{fn:(t=>kn(e(),t).hex),argTypes:[`string`],returnType:`string`},ramp:{fn:((...t)=>{if(t.length<2)throw RangeError(`ramp needs a value and an easing before its stops (got ${t.length}): ramp <value> "linear"|"step" <position> <color> …`);let[n,r,...i]=t;return new ar(ir(r),aT(i,e())).at(n).hex}),argTypes:[`float`,`string`],argTypePattern:`alternating`,returnType:`string`}}}function sT(){return{...Gw(),...iT()}}new H({color:`red`,dim:!0});const cT=/^(?:(?:global|apac|au|eu|us|us-east-\d|us-west-\d|eu-west-\d|eu-central-\d)\.)?(?:anthropic\.|azure_ai\/|bedrock\/|vertex_ai\/)?claude-(?:(?<family>opus|sonnet|haiku)-(?<newMajor>\d+)(?:-(?<newMinor>\d))?|(?<oldMajor>\d+)(?:-(?<oldMinor>\d))?-(?<oldFamily>opus|sonnet|haiku))(?:[-@]\d{8})?(?:-v\d+:\d+)?(?:-latest)?$/i,lT=/^(?<family>opus|sonnet|haiku)\s+(?<major>\d+)(?:\.(?<minor>\d))?$/i;function uT(e){if(!e)return`Claude`;let t=e.trim().replace(/\s*\([^)]*\)\s*$/,``).replace(/\s*\[[^\]]*\]\s*$/,``).trim(),n=t.match(cT);if(n?.groups){let{family:e,newMajor:t,newMinor:r,oldMajor:i,oldMinor:a,oldFamily:o}=n.groups,s=e||o,c=t||i,l=r||a;if(s&&c)return`${s.charAt(0).toUpperCase()+s.slice(1).toLowerCase()} ${l?`${c}.${l}`:c}`}let r=t.match(lT);if(r?.groups){let e=r.groups.family,t=r.groups.major,n=r.groups.minor;return`${e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()} ${n?`${t}.${n}`:t}`}return t||e}function dT(e){let t=e.match(lT);if(!t?.groups)return e;let n=t.groups.family,r=t.groups.major,i=t.groups.minor;return`${n.charAt(0).toUpperCase()}${i?`${r}.${i}`:r}`}function fT(e){let t=e.split(`/`),n=t.length-1;return t.map((e,t)=>{if(t===n)return e;let r=e.match(/^\.*./);return r?r[0]:e}).join(`/`)}function pT(e){return e.toLocaleString()}const mT=[`▁`,`▂`,`▃`,`▄`,`▅`,`▆`,`▇`,`█`],hT=mT.length;function gT(e,t){let n=t===void 0?e:t<=0?[]:e.slice(-t);if(n.length===0)return``;let r=n[0],i=n[0];for(let e of n)e<r&&(r=e),e>i&&(i=e);let a=i-r,o=``;for(let e of n){let t=a===0?0:Math.round((e-r)/a*(hT-1));o+=mT[t]}return o}function _T(e){let t=[];for(let n of e.split(`,`)){let e=n.trim();if(e===``)continue;let r=Number(e);if(!Number.isFinite(r))throw TypeError(`sparkline: non-numeric series element ${JSON.stringify(n)}`);t.push(r)}return t}const vT=li(),yT=[...pi];function bT(){return{basename:{fn:e=>l(e),argTypes:[`string`]},dirname:{fn:e=>u(e),argTypes:[`string`]},abbreviatePath:{fn:e=>fT(e),argTypes:[`string`]},int:{fn:e=>Iw(e),argTypes:[`value`]},string:{fn:e=>Fw(e),argTypes:[`value`]},bool:{fn:e=>Lw(e),argTypes:[`value`]},urlEncode:{fn:e=>encodeURIComponent(e),argTypes:[`string`]},themes:{fn:()=>vT,argTypes:[]},styles:{fn:()=>yT,argTypes:[]},sparkline:{fn:(e,t)=>gT(_T(e),t),argTypes:[`string`,`int`]}}}function xT(e=()=>new Date){return{minutesUntilReset:{fn:t=>Math.round(Math.max(0,t*1e3-e().getTime())/6e4),argTypes:[`int`]},formatInteger:{fn:e=>pT(e),argTypes:[`int`]},round:{fn:e=>Math.round(e),argTypes:[`float`]},formatModelName:{fn:e=>uT(e),argTypes:[`string`]},shortenModelName:{fn:e=>dT(e),argTypes:[`string`]}}}function ST(e,t=()=>new Date){return Eu({fromString:e=>new Ar(e),toString:e=>e.plain,isT:e=>e instanceof Ar,clock:t,missingKey:`error`,funcs:{...mf(),...wm(),...ep(),...Sp(),...of(t),...Yu(),...Of(),...sT(),...bT(),...xT(t),...e??{}}})}function CT(e){return wT(e,new Set(e.names()),``)}function wT(e,t,n){return new Proxy(Object.create(null),{has(e,r){if(typeof r!=`string`)return!1;let i=n?`${n}.${r}`:r;if(t.has(i))return!0;let a=`${i}.`;for(let e of t)if(e.startsWith(a))return!0;return!1},get(r,i){if(typeof i!=`string`)return;let a=n?`${n}.${i}`:i;if(t.has(a))return e.getKind(a)===`document`?TT(a,e.readDocument(a)):e.read(a);let o=`${a}.`;for(let n of t)if(n.startsWith(o))return wT(e,t,a)}})}function TT(e,t){switch(t.kind){case`ok`:return t.value;case`absent`:throw Error(`variable "${e}" has no value yet: its source has not completed a scan`);case`failed`:throw Error(`variable "${e}": ${t.reason}`)}}const ET=/\r\n|\r|\n/g,DT=e=>X(e.replace(ET,` `).trim());function OT(e){return t=>{let n=e.exec(t)?.[1];return n===void 0?Q(`regex no-match`):X(n.replace(ET,` `))}}const kT=e=>{try{return X(JSON.parse(e))}catch(e){return Q(`JSON parse failed: ${e.message}`)}};function AT(e,t){return t.kind!==`ttl`||t.durationMs>=500?t:(E(`declareShell "${e}": ttl ${t.durationMs}ms below floor 500ms; clamping`),{kind:`ttl`,durationMs:500})}function jT(e){let t=/^(\d+(?:\.\d+)?)(ms|s|m|h)$/.exec(e);if(!t)throw RangeError(`Invalid duration: "${e}"`);let n=parseFloat(t[1]);switch(t[2]){case`ms`:return n;case`s`:return n*1e3;case`m`:return n*6e4;case`h`:return n*36e5;default:throw RangeError(`Unexpected duration unit: "${t[2]}"`)}}function MT(e,t){return{where:`output of "${e}"`,read:async()=>{let n=await Ee({bin:`/bin/sh`,args:[`-c`,e],category:`user-shell`,signal:t});if(!n.ok&&n.reason===`aborted`)throw t.reason;return n.ok?X(n.stdout):Q(`shell "${e}" ${n.exitCode===null?[n.reason,n.error].filter(e=>e!==void 0).join(`: `):`exited with code ${n.exitCode}`}`)}}}function NT(e,t,n){return{where:`"${e}"`,read:async()=>{try{let r=await C(e,{encoding:`utf8`,signal:n});return X(t===`first-line`?r.split(/\r?\n/)[0]??``:r)}catch{if(n.aborted)throw n.reason;return Q(`file unreadable: ${e}`)}}}}function PT(e,t,n){if(e.kind!==`ok`)return e;let r=t(e.value);return r.kind===`failed`?Q(`${r.reason} in ${n}`):r}const FT=[`January`,`February`,`March`,`April`,`May`,`June`,`July`,`August`,`September`,`October`,`November`,`December`],IT=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],LT=[`Sunday`,`Monday`,`Tuesday`,`Wednesday`,`Thursday`,`Friday`,`Saturday`],RT=[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`];function zT(e,t){let n=[[`2006`,e=>String(e.getFullYear())],[`January`,e=>FT[e.getMonth()]],[`Monday`,e=>LT[e.getDay()]],[`Jan`,e=>IT[e.getMonth()]],[`Mon`,e=>RT[e.getDay()]],[`15`,e=>String(e.getHours()).padStart(2,`0`)],[`06`,e=>String(e.getFullYear()%100).padStart(2,`0`)],[`01`,e=>String(e.getMonth()+1).padStart(2,`0`)],[`02`,e=>String(e.getDate()).padStart(2,`0`)],[`04`,e=>String(e.getMinutes()).padStart(2,`0`)],[`05`,e=>String(e.getSeconds()).padStart(2,`0`)],[`PM`,e=>e.getHours()<12?`AM`:`PM`],[`pm`,e=>e.getHours()<12?`am`:`pm`],[`1`,e=>String(e.getMonth()+1)],[`2`,e=>String(e.getDate())],[`3`,e=>String(e.getHours()%12||12)],[`4`,e=>String(e.getMinutes())],[`5`,e=>String(e.getSeconds())]],r=``,i=0;for(;i<e.length;){let a=!1;for(let[o,s]of n)if(e.startsWith(o,i)){r+=s(t),i+=o.length,a=!0;break}a||(r+=e[i],i++)}return r}const BT={branch:`string`,sha:`string`,dirty:`boolean`,ahead:`number`,behind:`number`,stash:`number`};function VT(e,t,n,r){if(e===null){if(n!==void 0)return n;let e=BT[t];try{return GT(r,e)}catch{return KT(e)}}switch(t){case`branch`:return e.branch===`detached`?``:e.branch;case`sha`:return ib(e.sha,``);case`dirty`:return e.status!==`clean`;case`ahead`:return ib(e.aheadBehind,{ahead:0,behind:0}).ahead;case`behind`:return ib(e.aheadBehind,{ahead:0,behind:0}).behind;case`stash`:return ib(e.stashCount,0)}}var HT=class{watchers=new Map;subscribe(e,t){let n=this.watchers.get(e);if(!n){let t=new Set,r;try{r=s(e,()=>{for(let e of t)e()})}catch{return()=>{}}n={watcher:r,callbacks:t},this.watchers.set(e,n)}return n.callbacks.add(t),()=>this.unsubscribe(e,t)}unsubscribe(e,t){let n=this.watchers.get(e);n&&(n.callbacks.delete(t),n.callbacks.size===0&&(n.watcher.close(),this.watchers.delete(e)))}dispose(){for(let{watcher:e}of this.watchers.values())e.close();this.watchers.clear()}size(){return this.watchers.size}},UT=class{buckets=new Map;subscribe(e,t){let n=this.buckets.get(e);if(!n){let t=new Set;n={timer:se(()=>{for(let e of t)e()},e),callbacks:t},this.buckets.set(e,n)}return n.callbacks.add(t),()=>this.unsubscribe(e,t)}unsubscribe(e,t){let n=this.buckets.get(e);n&&(n.callbacks.delete(t),n.callbacks.size===0&&(oe(n.timer),this.buckets.delete(e)))}dispose(){for(let{timer:e}of this.buckets.values())oe(e);this.buckets.clear()}bucketCount(){return this.buckets.size}};function WT(e,t){let n=e;for(let e of t.split(`.`)){if(typeof n!=`object`||!n)return;n=n[e]}return n}function GT(e,t){if(typeof e!=`string`&&typeof e!=`number`&&typeof e!=`boolean`)throw TypeError(`Expected string|number|boolean from payload, got ${typeof e}`);return t===`string`?Fw(e):t===`number`?Iw(e):Lw(e)}function KT(e){return e===`number`?0:e===`boolean`?!1:``}var qT=class{inputMetas=new Map;lastErrors=new Map;watchMgr=new HT;ttlMgr=new UT;gitSubscriptions=new Map;cleanups=[];inFlight=new Map;reads=new fC;abort=new AbortController;engine=ST();gitProvider;ownsGitProvider;sessionState;constructor(e,t=``,n,r){this.store=e,this.defaultEmptyValue=t,n?(this.gitProvider=n,this.ownsGitProvider=!1):(this.gitProvider=new yC({sanityIntervalMs:0}),this.ownsGitProvider=!0),this.sessionState=r}get variableStore(){return this.store}declareLiteral(e,t){this.store.defineBox(e,Pw(t),t)}declareInput(e,t,n,r){let i=r===void 0?this.defaultFor(n):r;this.store.defineBox(e,n,i),this.inputMetas.set(e,{path:t,varDefault:r})}declareEnv(e,t,n){let r=process.env[t];if(r!==void 0){this.store.defineBox(e,`string`,r);return}let i=n===void 0?typeof this.defaultEmptyValue==`string`?this.defaultEmptyValue:``:n;this.store.defineBox(e,`string`,i),this.recordError(e,`env var "${t}" is not set`)}declareShell(e,t,n){this.declareSource(e,MT(t,this.abort.signal),AT(e,n.cache),n.parse)}declareFile(e,t,n){this.declareSource(e,NT(t,n.readMode??`whole`,this.abort.signal),n.cache,n.parse)}declareSource(e,t,n,r){let i=this.publisherFor(e,r,t.where),a=()=>this.runSource(e,t,i);a(),this.registerCachePolicy(e,n,a)}publisherFor(e,t,n){switch(t.kind){case`text`:return this.scalarPublisher(e,DT,t.default,n);case`regex`:return this.scalarPublisher(e,OT(t.regex),t.default,n);case`json`:return this.documentPublisher(e,t.default,n)}}scalarPublisher(e,t,n,r){let i=this.stringInitial(n);return this.store.defineBox(e,`string`,i),n=>{let a=PT(n,t,r);this.noteOutcome(e,a),this.store.setBox(e,ib(a,i))}}documentPublisher(e,t,n){let r=t===void 0?Z:X(t);return this.store.defineDocument(e,r),i=>{let a=PT(i,kT,n);this.noteOutcome(e,a),this.store.setDocument(e,a.kind===`ok`||t===void 0?a:r)}}runSource(e,t,n){let r=this.reads.run(e,()=>t.read().then(n,e=>{if(e!==this.abort.signal.reason)throw e}));r.kind===`started`&&this.track(e,r.done)}track(e,t){let n=t.finally(()=>{this.inFlight.get(e)===n&&this.inFlight.delete(e)});this.inFlight.set(e,n)}async settled(e){let t=Date.now()+e;for(;this.inFlight.size>0;){let e=t-Date.now();if(e<=0)break;let n,r=await Promise.race([Promise.all(this.inFlight.values()).then(()=>`settled`),new Promise(t=>{n=setTimeout(()=>t(`deadline`),e)})]);if(clearTimeout(n),r===`deadline`)break}return[...this.inFlight.keys()]}declareTemplate(e,t,n={}){let r=this.engine.parse(t);this.store.defineComputed(e,`string`,t=>{let i=CT(this.store);try{let t=r.evaluate(i).map(e=>e.plain).join(``);return this.lastErrors.delete(e),t}catch(t){let r=t instanceof Error?t.message:String(t);if(this.recordError(e,r),n.varDefault===void 0)throw Error(`variable "${e}": ${r}`);return n.varDefault}});try{this.store.read(e)}catch{}}declareTime(e,t){let n=t.ttlMs??1e3;this.store.defineBox(e,`string`,(e=>{try{return zT(t.format,e)}catch{return this.stringInitial(t.varDefault)}})(new Date));let r=this.ttlMgr.subscribe(n,()=>{try{this.store.setBox(e,zT(t.format,new Date)),this.lastErrors.delete(e)}catch(n){this.applyFallback(e,`string`,t.varDefault,n instanceof Error?n.message:String(n))}});this.cleanups.push(r)}declareGit(e,t){let n=BT[t.field],r=t.varDefault===void 0?KT(n):GT(t.varDefault,n);this.store.defineBox(e,n,r);let i=this.gitSubscriptions.get(t.cwd);if(!i){let e=new Map,n=this.gitProvider.subscribe(t.cwd,t=>{this.store.runInAction(()=>{for(let[n,r]of e)for(let{name:e,varDefault:i}of r)this.store.setBox(e,VT(t,n,i,this.defaultEmptyValue))})});i={fieldSubs:e,firstDelivery:n.firstDelivery,unsubscribe:n.unsubscribe},this.gitSubscriptions.set(t.cwd,i)}let a=i.fieldSubs.get(t.field);a||(a=[],i.fieldSubs.set(t.field,a)),a.push({name:e,varDefault:t.varDefault}),this.track(e,i.firstDelivery)}declareState(e,t){if(!this.sessionState)throw Error(`declareState("${e}"): SourceRegistry was constructed without a SessionState — state-kind variables require a SessionState (the daemon provides one; tests must supply one)`);let n=this.sessionState,r=t.varDefault??this.stringInitial(void 0);this.store.defineComputed(e,`string`,e=>{let i=e(`session.id`);if(typeof i!=`string`||!i)return r;let a=n.get(i,t.key);return a===null?r:a})}applyInput(e){this.store.runInAction(()=>{for(let[t,n]of this.inputMetas){let r=WT(e,n.path),i=this.store.getType(t);if(r!==void 0)try{this.store.setBox(t,GT(r,i)),this.lastErrors.delete(t)}catch(e){this.applyFallback(t,i,n.varDefault,e instanceof Error?e.message:String(e))}else this.applyFallback(t,i,n.varDefault,`input path "${n.path}" not found in payload`)}})}getLastError(e){return this.lastErrors.get(e)}dispose(){this.abort.abort();for(let e of this.cleanups)e();this.cleanups.length=0;for(let e of this.gitSubscriptions.values())e.unsubscribe();this.gitSubscriptions.clear(),this.reads.clear(),this.watchMgr.dispose(),this.ttlMgr.dispose(),this.ownsGitProvider&&this.gitProvider.close()}registerCachePolicy(e,t,n){switch(t.kind){case`never`:break;case`ttl`:{let e=this.ttlMgr.subscribe(t.durationMs,n);this.cleanups.push(e);break}case`watch_file`:{let e=this.watchMgr.subscribe(t.path,n);this.cleanups.push(e);break}case`key`:{let e=this.engine.parse(t.template),r=(0,Mw.reaction)(()=>{let t=CT(this.store);try{return e.evaluate(t).map(e=>e.plain).join(``)}catch{return``}},n);this.cleanups.push(r);break}case`depends_on`:{let e=(0,Mw.reaction)(()=>t.varNames.map(e=>this.store.changeKey(e)).join(`,`),n);this.cleanups.push(e);break}}}applyFallback(e,t,n,r){if(this.recordError(e,r),n!==void 0){this.store.setBox(e,n);return}try{this.store.setBox(e,GT(this.defaultEmptyValue,t))}catch{this.store.setBox(e,KT(t))}}defaultFor(e){try{return GT(this.defaultEmptyValue,e)}catch{return KT(e)}}stringInitial(e){return e===void 0?typeof this.defaultEmptyValue==`string`?this.defaultEmptyValue:``:e}recordError(e,t){this.lastErrors.set(e,{timestamp:Date.now(),message:t})}noteOutcome(e,t){t.kind===`ok`?this.lastErrors.delete(e):this.recordError(e,t.kind===`failed`?t.reason:`no value`)}};function JT(e,t){return e===void 0?!0:e.evaluate(t).map(e=>e.plain).join(``)!==`false`}function YT(e,t){let n=Ar.fromFragments(e);return n.end=``,n.noWrap=!0,t!==void 0&&!t.isNull&&(n.style=t),n}function XT(e,t,n){e.cellLength>t?e.truncate(t,{mode:n.truncate,marker:n.truncateMarker}):e.cellLength<t&&e.align(n.justify,t)}const ZT=Symbol(`cc-candybar.fillDemand`);function QT(e,t){return e[ZT]=t,e}function $T(e){return e[ZT]}function eE(e,t){let{width:n,justify:r,truncate:i,truncateMarker:a=`…`,baseStyle:o,padding:s}=t;if(e.length===0)return[];let c=YT(e,o).pad(s);if(n===`auto`)return[c];let l={justify:r,truncate:i,truncateMarker:a};return n===`fill`?[QT(c,l)]:(XT(c,n,l),[c])}const tE=/\x1b\[[0-9;]*m|\x1b\]8;;[^\x07\x1b]*(?:\x1b\\|\x07)/g;function nE(e){return k(e.replace(tE,``))}function rE(e,t){let n=[];for(let t of e){let e=$T(t);e!==void 0&&n.push({cell:t,how:e})}if(n.length===0||!Number.isFinite(t.width))return e;let r=yx(e,t).split(`
179
- `);if(r.length>1)return e;let i=Math.max(0,t.width-nE(r[0]??``)),a=Math.floor(i/n.length),o=i-a*n.length;return n.forEach(({cell:e,how:t},r)=>{let i=a+(r===n.length-1?o:0);XT(e,e.cellLength+i,t)}),e}const iE=new Map,aE=new Map;function oE(e){let t=ai(e),n=iE.get(t);if(n!==void 0)return n;let r=Kn(t);if(r===null)throw Error(`Palette "${e}" (resolved "${t}") did not resolve in the theme registry — allowed names and the registry are inconsistent`);return iE.set(t,r),r}function sE(e,t){let n=`${e.name} ${t.hueShift} ${t.chromaScale} ${t.lightnessScale} ${t.lightnessShift}`,r=aE.get(n);if(r!==void 0)return r;let i=tr(e,t);return aE.set(n,i),i}function cE(e,t){let n=[],r=[],i=()=>{if(!r.length)return;let e=lE(r,t);e.plain.length>0&&n.push(e),r=[]};for(let a of e)if(a.style.link){i();let e=lE([a],t);e.plain.length>0&&n.push(e)}else r.push(a);return i(),n}function lE(e,t){let n=t!==void 0&&!t.isNull?e.map(e=>uE(e,t)):e,r=Ar.fromFragments(n);return r.end=``,r.noWrap=!0,n.length===1?r.style=n[0].style:t!==void 0&&!t.isNull&&(r.style=t),r}function uE(e,t){let n=e.copy();return n.style=t.add(e.style),n}var dE=class extends Error{constructor(e,t,n){super(`Invalid ${t} color ${JSON.stringify(e)}: ${n}`),this.name=`ColorSpecError`}};function fE(e,t,n,r,i,a,o,s,c){let l={segName:t,palette:n,disclosure:r,bg:void 0};e.current=l;let u=pE(o,c),d=u===void 0?i:mE(n,u,`bg`);l.bg=d;let f=pE(s,c),p=f===void 0?a(d):mE(n,f,`fg`);return new H({bgcolor:N.fromRgba(d),color:p===void 0?void 0:N.fromRgba(p)})}function pE(e,t){if(e!==void 0)return e.evaluate(t).map(e=>e.plain).join(``)}function mE(e,t,n){try{return kn(e,t)}catch(e){throw e instanceof En?new dE(t,n,e.message):e}}const hE=new Map([[`palette`,`theme.effective`],[`preset`,`preset.effective`],[`look`,`look.effective`],[`style`,`style.effective`],[`charset`,`charset.effective`],[`colorCompatibility`,`colorCompatibility.effective`],[`autoWrap`,`autoWrap.effective`],[`padding`,`padding.effective`]]);function gE(e,t,n,r){let i=new Map;for(let[a,o]of Object.entries(t))i.set(a,_E(e,a,o,n,r));return i}function _E(e,t,n,r,i){if(kg(n)){let[a,o]=Ag(n);return vE(r.get(n.persistWhen)??n.persistWhen,n.set,_E(e,t,a,r,i),_E(e,t,o,r,i))}if(`set`in n){let e=r.get(n.set)??n.set;return`to`in n?{kind:`set-literal`,key:n.set,value:n.to,stateVar:e}:`from`in n?{kind:`set-option`,key:n.set,stateVar:e,options:[...N_(n.from,i)]}:`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=hE.get(n.persist)??n.persist;return`to`in n?{kind:`persist-literal`,key:n.persist,value:n.to,stateVar:e}:`from`in n?{kind:`persist-option`,key:n.persist,stateVar:e,options:[...N_(n.from,i)]}:`cycle`in n?{kind:`persist-cycle`,key:n.persist,stateVar:e,members:n.cycle}:`removeSegment`in n?{kind:`layout-op`,key:n.persist,op:{op:`remove`,target:n.removeSegment}}:`insertSegment`in n?{kind:`layout-op`,key:n.persist,op:{op:`insert`,segment:n.insertSegment,anchor:n.anchor,relation:n.relation}}:`insertSegmentFrom`in n?{kind:`layout-op-option`,key:n.persist,anchor:n.anchor,relation:n.relation,options:[...N_(n.insertSegmentFrom,i)]}:{kind:`persist-bounded`,key:n.persist,by:n.by}}return`copy`in n?{kind:`copy`,text:bE(e,n.copy,t)}:`open`in n?{kind:`open`,target:bE(e,n.open,t)}:`reset`in n?{kind:`reset`,key:n.reset}:`doctor`in n?n.doctor===`run`?{kind:`doctor-run`}:{kind:`doctor-fix`,check:n.check}:`undo`in n?{kind:`undo`}:{kind:`redo`}}function vE(e,t,n,r){return{kind:`dual`,selector:e,session:`stateVar`in n&&`stateVar`in r?{...n,stateVar:r.stateVar}:n,durable:r,sessionKey:t}}function yE(e,t){return e.kind===`dual`?Si(xE(t,e.selector))===!0?e.durable:e.session:e}function bE(e,t,n){try{return e(t)}catch(e){throw Error(`Template parse error in actions.${n}: ${e.message}`,{cause:e})}}function xE(e,t){return e.has(t)?Fw(e.read(t)):``}function SE(e,t){return e.evaluate(t).map(e=>e.plain).join(``)}function CE(e,t,n,r){let i=new Ar(e,{style:H.combine([r,new H({link:t,bold:n})])});return i.noWrap=!0,i.end=``,i}function wE(e,t){return Math.max(e.members.indexOf(xE(t,e.stateVar)),0)}function TE(e,t,n,r,i){switch(e.kind){case`set-literal`:{let t=xE(r,e.stateVar);return{effects:[{verb:Fy,args:[i,e.key,e.value]}],active:t===e.value}}case`set-option`:{let a=n??t,o=xE(r,e.stateVar);return{effects:[{verb:Fy,args:[i,e.key,a]}],active:o===a}}case`set-int`:{let a=n??t,o=xE(r,e.stateVar);return{effects:[{verb:Fy,args:[i,e.key,a]}],active:o===a}}case`set-cycle`:{let t=e.members[(wE(e,r)+1)%e.members.length];return{effects:[{verb:Fy,args:[i,e.key,t]}],active:!1}}case`set-bounded`:return{effects:[{verb:Iy,args:[i,e.key,String(e.by)]}],active:!1};case`copy`:return{effects:[{verb:Ly,args:[SE(e.text,CT(r))]}],active:!1};case`open`:return{effects:[{verb:Ry,args:[SE(e.target,CT(r))]}],active:!1};case`persist-literal`:{let t=xE(r,e.stateVar);return{effects:[{verb:Hy,args:[i,e.key,e.value]}],active:t===e.value}}case`persist-option`:{let a=n??t,o=xE(r,e.stateVar);return{effects:[{verb:Hy,args:[i,e.key,a]}],active:o===a}}case`persist-cycle`:{let t=e.members[(wE(e,r)+1)%e.members.length];return{effects:[{verb:Hy,args:[i,e.key,t]}],active:!1}}case`persist-bounded`:return{effects:[{verb:Uy,args:[i,e.key,String(e.by)]}],active:!1};case`reset`:return{effects:[{verb:Wy,args:[i,e.key]}],active:!1};case`undo`:return{effects:[{verb:Ky,args:[i]}],active:!1};case`redo`:return{effects:[{verb:qy,args:[i]}],active:!1};case`doctor-run`:return{effects:[{verb:Yy,args:[i]}],active:!1};case`doctor-fix`:return{effects:[{verb:Xy,args:[i,e.check]}],active:!1};case`layout-op`:return{effects:[{verb:Gy,args:[i,e.key,Qm(e.op)]}],active:!1};case`dual`:{let a=yE(e,r),{effects:o,active:s}=TE(a,t,n,r,i);return a===e.durable?{effects:o.map(t=>({...t,args:[...t.args,e.sessionKey]})),active:s}:{effects:o,active:s}}case`layout-op-option`:{let r={op:`insert`,segment:n??t,anchor:e.anchor,relation:e.relation};return{effects:[{verb:Gy,args:[i,e.key,Qm(r)]}],active:!1}}}}function EE(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:cc(`action "${e}"`,n,t.members.length,wE(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 DE(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}=EE(e,yE(r,i),t,i),{effects:s,active:c}=TE(r,a,o,i,xE(i,`session.id`));return CE(a,$y(s),c)}function OE(e){return{action:{fn:(t,...n)=>DE(t,n,e),argTypes:[`string`,`string`],returnType:`T`}}}function kE(e,t){return new H({bgcolor:N.fromRgba(t),color:N.fromRgba(Js(e,t))})}function AE(e,t){return kE(e.palette,ec(e.palette,e.disclosure,[t]))}function jE(){return{current:null}}function ME(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 NE(e){return new Ar(e).cellLength}function PE(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 FE(e,t){let n=[];for(let t of e)n.length>0&&n.push(new Ar(` `)),n.push(t);let r=Ar.fromFragments(n);return r.noWrap=t,r.end=``,r}function IE(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 LE(e,t){let n=e.compiled.get(t),r=n&&yE(n,e.store);if(!r||r.kind!==`set-option`&&r.kind!==`persist-option`&&r.kind!==`layout-op-option`)throw Error(`picker 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 ${r?`a ${r.kind} action`:`no such action`}`);return r}function RE(e,t,n,r,i,a,o){let s=LE(a,e),c=a.compiled.get(e),l=a.store,u=xE(l,`session.id`),d=`stateVar`in s?xE(l,s.stateVar):void 0,f=s.options.map(NE),p=i?Math.max(1,Iw(l.read(`term.cols`))-vx(a.stripStyle)-2*a.padding):1/0,m=NE(`✕`)+1,h=NE(`←`)+1+NE(`→`)+1,g=PE(f,p,m),_=g.length>1?PE(f,p,m+h):g,v=parseInt(xE(l,t.stateVar),10),y=Number.isInteger(v)?Math.max(0,Math.min(v,_.length-1)):0,b=_[y]??[],x=e=>$y([{verb:Fy,args:[u,t.key,String(e)]}]),S=n.flatMap(([e,t])=>[e,t]),ee=$y([{verb:Fy,args:[u,...S]}]),te=r?[{verb:Fy,args:[u,...S]}]:[],ne=e=>{let{effects:t}=TE(c,e,e,l,u),n=t.length===1?t[0]:void 0;return n?.verb===`set-state`?$y([{verb:Fy,args:[...n.args,...r?S:[]]}]):$y([...t,...te])},re=[CE(`✕`,ee,!1)];y>0&&re.push(CE(`←`,x(y-1),!1));for(let e of b){let t=s.options[e];re.push(CE(t,ne(t),t===d,o({index:e,count:s.options.length})))}return y<_.length-1&&re.push(CE(`→`,x(y+1),!1)),FE(re,i)}function zE(e,t){return{picker:{fn:(n,r,i,a)=>{let o=IE(e,r,`set-int`,`an int action ({ set, int: true })`);return RE(n,{key:o.key,stateVar:o.stateVar},[[o.key,`-1`]],i===!0,a===!0,e,e=>AE(ME(t,`{{ picker }}`),{...e,distribution:Rs(void 0)}))},argTypes:[`string`,`string`,`bool`,`bool`],returnType:`T`}}}const BE=Symbol(`cc-candybar.menuDrop`);function VE(e){return e.flatMap(e=>e[BE]??[])}function HE(e,t,n,r){let i=r.activeSegment.current;if(i===null)throw Error(`{{ menu }} rendered with no active segment placement — the render walk must publish one before evaluating a segment template`);let a=r.action,o=Em(i.segName,e,n.key),s=km(o),c=Tm(e),l=xE(a.store,o)===c,u=xE(a.store,`session.id`),d=l?oc:c,f=CE(cc(`{{ menu "${e}" }}`,t,2,+!!l),$y([{verb:Fy,args:[u,o,d,s,`0`]}]),!1);return f[BE]=l?[RE(e,{key:s,stateVar:s},[[o,oc],[s,`0`]],n.closeOnPick,n.paged,a,e=>AE(i,{...e,distribution:n.distribution}))]:[],f}const UE=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function WE(e,t){let n=t[t.length-1],r=UE(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:Nm(r??{})}}function GE(e){return{menu:{fn:(t,...n)=>{let{displays:r,options:i}=WE(t,n);return HE(t,r,i,e)},argTypes:[`string`,`value`],returnType:`T`}}}function KE(e){let t={fn:(()=>{let t=ME(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:[],returnType:`string`};return{...oT(()=>ME(e,`{{ color }} / {{ ramp }}`).palette),bgOf:t}}function qE(e){let t=[],n=[];for(let r of e){if(!r.contains(`
179
+ `);if(r.length>1)return e;let i=Math.max(0,t.width-nE(r[0]??``)),a=Math.floor(i/n.length),o=i-a*n.length;return n.forEach(({cell:e,how:t},r)=>{let i=a+(r===n.length-1?o:0);XT(e,e.cellLength+i,t)}),e}const iE=new Map,aE=new Map;function oE(e){let t=ai(e),n=iE.get(t);if(n!==void 0)return n;let r=Kn(t);if(r===null)throw Error(`Palette "${e}" (resolved "${t}") did not resolve in the theme registry — allowed names and the registry are inconsistent`);return iE.set(t,r),r}function sE(e,t){let n=`${e.name} ${t.hueShift} ${t.chromaScale} ${t.lightnessScale} ${t.lightnessShift}`,r=aE.get(n);if(r!==void 0)return r;let i=tr(e,t);return aE.set(n,i),i}function cE(e,t){let n=[],r=[],i=()=>{if(!r.length)return;let e=lE(r,t);e.plain.length>0&&n.push(e),r=[]};for(let a of e)if(a.style.link){i();let e=lE([a],t);e.plain.length>0&&n.push(e)}else r.push(a);return i(),n}function lE(e,t){let n=t!==void 0&&!t.isNull?e.map(e=>uE(e,t)):e,r=Ar.fromFragments(n);return r.end=``,r.noWrap=!0,n.length===1?r.style=n[0].style:t!==void 0&&!t.isNull&&(r.style=t),r}function uE(e,t){let n=e.copy();return n.style=t.add(e.style),n}var dE=class extends Error{constructor(e,t,n){super(`Invalid ${t} color ${JSON.stringify(e)}: ${n}`),this.name=`ColorSpecError`}};function fE(e,t,n,r,i,a,o,s,c){let l={segName:t,palette:n,disclosure:r,bg:void 0};e.current=l;let u=pE(o,c),d=u===void 0?i:mE(n,u,`bg`);l.bg=d;let f=pE(s,c),p=f===void 0?a(d):mE(n,f,`fg`);return new H({bgcolor:N.fromRgba(d),color:p===void 0?void 0:N.fromRgba(p)})}function pE(e,t){if(e!==void 0)return e.evaluate(t).map(e=>e.plain).join(``)}function mE(e,t,n){try{return kn(e,t)}catch(e){throw e instanceof En?new dE(t,n,e.message):e}}const hE=new Map([[`palette`,`theme.effective`],[`preset`,`preset.effective`],[`look`,`look.effective`],[`style`,`style.effective`],[`charset`,`charset.effective`],[`colorCompatibility`,`colorCompatibility.effective`],[`autoWrap`,`autoWrap.effective`],[`padding`,`padding.effective`]]);function gE(e,t,n,r){let i=new Map;for(let[a,o]of Object.entries(t))i.set(a,_E(e,a,o,n,r));return i}function _E(e,t,n,r,i){if(kg(n)){let[a,o]=Ag(n);return vE(r.get(n.persistWhen)??n.persistWhen,n.set,_E(e,t,a,r,i),_E(e,t,o,r,i))}if(`set`in n){let e=r.get(n.set)??n.set;return`to`in n?{kind:`set-literal`,key:n.set,value:n.to,stateVar:e}:`from`in n?{kind:`set-option`,key:n.set,stateVar:e,options:[...N_(n.from,i)]}:`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=hE.get(n.persist)??n.persist;return`to`in n?{kind:`persist-literal`,key:n.persist,value:n.to,stateVar:e}:`from`in n?{kind:`persist-option`,key:n.persist,stateVar:e,options:[...N_(n.from,i)]}:`cycle`in n?{kind:`persist-cycle`,key:n.persist,stateVar:e,members:n.cycle}:`removeSegment`in n?{kind:`layout-op`,key:n.persist,op:{op:`remove`,target:n.removeSegment}}:`insertSegment`in n?{kind:`layout-op`,key:n.persist,op:{op:`insert`,segment:n.insertSegment,anchor:n.anchor,relation:n.relation}}:`insertSegmentFrom`in n?{kind:`layout-op-option`,key:n.persist,anchor:n.anchor,relation:n.relation,options:[...N_(n.insertSegmentFrom,i)]}:{kind:`persist-bounded`,key:n.persist,by:n.by}}return`copy`in n?{kind:`copy`,text:bE(e,n.copy,t)}:`open`in n?{kind:`open`,target:bE(e,n.open,t)}:`reset`in n?{kind:`reset`,key:n.reset}:`doctor`in n?n.doctor===`run`?{kind:`doctor-run`}:{kind:`doctor-fix`,check:n.check}:`undo`in n?{kind:`undo`}:{kind:`redo`}}function vE(e,t,n,r){return{kind:`dual`,selector:e,session:`stateVar`in n&&`stateVar`in r?{...n,stateVar:r.stateVar}:n,durable:r,sessionKey:t}}function yE(e,t){return e.kind===`dual`?Si(xE(t,e.selector))===!0?e.durable:e.session:e}function bE(e,t,n){try{return e(t)}catch(e){throw Error(`Template parse error in actions.${n}: ${e.message}`,{cause:e})}}function xE(e,t){return e.has(t)?Fw(e.read(t)):``}function SE(e,t){return e.evaluate(t).map(e=>e.plain).join(``)}function CE(e,t,n,r){let i=new Ar(e,{style:H.combine([r,new H({link:t,bold:n})])});return i.noWrap=!0,i.end=``,i}function wE(e,t){return Math.max(e.members.indexOf(xE(t,e.stateVar)),0)}function TE(e,t,n,r,i){switch(e.kind){case`set-literal`:{let t=xE(r,e.stateVar);return{effects:[{verb:Fy,args:[i,e.key,e.value]}],active:t===e.value}}case`set-option`:{let a=n??t,o=xE(r,e.stateVar);return{effects:[{verb:Fy,args:[i,e.key,a]}],active:o===a}}case`set-int`:{let a=n??t,o=xE(r,e.stateVar);return{effects:[{verb:Fy,args:[i,e.key,a]}],active:o===a}}case`set-cycle`:{let t=e.members[(wE(e,r)+1)%e.members.length];return{effects:[{verb:Fy,args:[i,e.key,t]}],active:!1}}case`set-bounded`:return{effects:[{verb:Iy,args:[i,e.key,String(e.by)]}],active:!1};case`copy`:return{effects:[{verb:Ly,args:[SE(e.text,CT(r))]}],active:!1};case`open`:return{effects:[{verb:Ry,args:[SE(e.target,CT(r))]}],active:!1};case`persist-literal`:{let t=xE(r,e.stateVar);return{effects:[{verb:Hy,args:[i,e.key,e.value]}],active:t===e.value}}case`persist-option`:{let a=n??t,o=xE(r,e.stateVar);return{effects:[{verb:Hy,args:[i,e.key,a]}],active:o===a}}case`persist-cycle`:{let t=e.members[(wE(e,r)+1)%e.members.length];return{effects:[{verb:Hy,args:[i,e.key,t]}],active:!1}}case`persist-bounded`:return{effects:[{verb:Uy,args:[i,e.key,String(e.by)]}],active:!1};case`reset`:return{effects:[{verb:Wy,args:[i,e.key]}],active:!1};case`undo`:return{effects:[{verb:Ky,args:[i]}],active:!1};case`redo`:return{effects:[{verb:qy,args:[i]}],active:!1};case`doctor-run`:return{effects:[{verb:Yy,args:[i]}],active:!1};case`doctor-fix`:return{effects:[{verb:Xy,args:[i,e.check]}],active:!1};case`layout-op`:return{effects:[{verb:Gy,args:[i,e.key,Qm(e.op)]}],active:!1};case`dual`:{let a=yE(e,r),{effects:o,active:s}=TE(a,t,n,r,i);return a===e.durable?{effects:o.map(t=>({...t,args:[...t.args,e.sessionKey]})),active:s}:{effects:o,active:s}}case`layout-op-option`:{let r={op:`insert`,segment:n??t,anchor:e.anchor,relation:e.relation};return{effects:[{verb:Gy,args:[i,e.key,Qm(r)]}],active:!1}}}}function EE(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:cc(`action "${e}"`,n,t.members.length,wE(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 DE(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}=EE(e,yE(r,i),t,i),{effects:s,active:c}=TE(r,a,o,i,xE(i,`session.id`));return CE(a,$y(s),c)}function OE(e){return{action:{fn:(t,...n)=>DE(t,n,e),argTypes:[`string`,`string`],returnType:`T`}}}function kE(e,t){return new H({bgcolor:N.fromRgba(t),color:N.fromRgba(Js(e,t))})}function AE(e,t){return kE(e.palette,ec(e.palette,e.disclosure,[t]))}function jE(){return{current:null}}function ME(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 NE(e){return new Ar(e).cellLength}function PE(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 FE(e,t){let n=[];for(let t of e)n.length>0&&n.push(new Ar(` `)),n.push(t);let r=Ar.fromFragments(n);return r.noWrap=t,r.end=``,r}function IE(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 LE(e,t){let n=e.compiled.get(t),r=n&&yE(n,e.store);if(!r||r.kind!==`set-option`&&r.kind!==`persist-option`&&r.kind!==`layout-op-option`)throw Error(`picker 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 ${r?`a ${r.kind} action`:`no such action`}`);return r}function RE(e,t,n,r,i,a,o){let s=LE(a,e),c=a.compiled.get(e),l=a.store,u=xE(l,`session.id`),d=`stateVar`in s?xE(l,s.stateVar):void 0,f=s.options.map(NE),p=i?Math.max(1,Iw(l.read(`term.cols`))-vx(a.stripStyle)-2*a.padding):1/0,m=NE(`✕`)+1,h=NE(`←`)+1+NE(`→`)+1,g=PE(f,p,m),_=g.length>1?PE(f,p,m+h):g,v=parseInt(xE(l,t.stateVar),10),y=Number.isInteger(v)?Math.max(0,Math.min(v,_.length-1)):0,b=_[y]??[],x=e=>$y([{verb:Fy,args:[u,t.key,String(e)]}]),S=n.flatMap(([e,t])=>[e,t]),ee=$y([{verb:Fy,args:[u,...S]}]),te=r?[{verb:Fy,args:[u,...S]}]:[],ne=e=>{let{effects:t}=TE(c,e,e,l,u),n=t.length===1?t[0]:void 0;return n?.verb===`set-state`?$y([{verb:Fy,args:[...n.args,...r?S:[]]}]):$y([...t,...te])},re=[CE(`✕`,ee,!1)];y>0&&re.push(CE(`←`,x(y-1),!1));for(let e of b){let t=s.options[e];re.push(CE(t,ne(t),t===d,o({index:e,count:s.options.length})))}return y<_.length-1&&re.push(CE(`→`,x(y+1),!1)),FE(re,i)}function zE(e,t){return{picker:{fn:(n,r,i,a)=>{let o=IE(e,r,`set-int`,`an int action ({ set, int: true })`);return RE(n,{key:o.key,stateVar:o.stateVar},[[o.key,`-1`]],i===!0,a===!0,e,e=>AE(ME(t,`{{ picker }}`),{...e,distribution:Rs(void 0)}))},argTypes:[`string`,`string`,`bool`,`bool`],returnType:`T`}}}const BE=Symbol(`cc-candybar.menuDrop`);function VE(e){return e.flatMap(e=>e[BE]??[])}function HE(e,t,n,r){let i=r.activeSegment.current;if(i===null)throw Error(`{{ menu }} rendered with no active segment placement — the render walk must publish one before evaluating a segment template`);let a=r.action,o=Em(i.segName,e,n.key),s=km(o),c=Tm(e),l=xE(a.store,o)===c,u=xE(a.store,`session.id`),d=l?oc:c,f=CE(cc(`{{ menu "${e}" }}`,t,2,+!!l),$y([{verb:Fy,args:[u,o,d,s,`0`]}]),!1);return f[BE]=l?[RE(e,{key:s,stateVar:s},[[o,oc],[s,`0`]],n.closeOnPick,n.paged,a,e=>AE(i,{...e,distribution:n.distribution}))]:[],f}const UE=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function WE(e,t){let n=t[t.length-1],r=UE(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:Nm(r??{})}}function GE(e){return{menu:{fn:(t,...n)=>{let{displays:r,options:i}=WE(t,n);return HE(t,r,i,e)},argTypes:[`string`,`value`],returnType:`T`}}}function KE(e){let{value:t,max:n,width:r,filled:i,empty:a,colourAt:o}=e,s=qE(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 Ar(t?i:a,{style:l===void 0?void 0:new H({color:l})}))}let l=Ar.fromFragments(c);return l.end=``,l.noWrap=!0,l}function qE(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 JE(e){let t={fn:(()=>{let t=ME(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:[],returnType:`string`},n=oT(()=>ME(e,`{{ color }} / {{ ramp }} / {{ gauge }}`).palette),r={fn:((e,t,r,i,a,o,...s)=>KE({value:e,max:t,width:r,filled:i,empty:a,colourAt:o===void 0||s.length===0?void 0:e=>String(n.ramp.fn(e,o,...YE(s)))})),argTypes:[`float`,`float`,`int`,`string`,`string`,`string`,`string`],returnType:`T`};return{...n,bgOf:t,gauge:r}}function YE(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 XE(e){let t=[],n=[];for(let r of e){if(!r.contains(`
180
180
  `)){n.push(r);continue}let e=r.split(`
181
- `);n.push(e[0]);for(let r=1;r<e.length;r++)t.push(n),n=[e[r]]}return t.push(n),t}function JE(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?[]:[t.flatMap(e=>e[0]??[]),...t.flatMap(e=>e.slice(1))]}}const YE={container:{compile(e,t){return{kind:`container`,direction:e.direction,when:t.when,distribution:Rs(e.distribution),children:e.children.map((e,n)=>t.compileChild(e,`${t.path}.children[${n}]`))}},render(e,t){return JE(e.direction,e.children.map((n,r)=>t.renderChild(n,t.visible,{index:r,count:e.children.length,distribution:e.distribution})))}},segment:{compile(e,t){return{kind:`segment`,when:t.when,name:e.name,...e.opens!==void 0&&{opens:{open:t.parse(dc(e.opens.ref),`opens`),body:t.compileChild(e.opens.body,`${t.path}.opens.body`)}}}},render(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[];try{if(!JT(i.when,t.scope))return[];let n=i.palette??t.palette,a=t.enterSegment(e.name,n,t.region,i.bg,i.fg),o=i.template.evaluate(t.scope),s=t.exitSegment(o),c=e.opens!==void 0&&JT(e.opens.open,t.scope),l=e.opens===void 0?[]:t.renderBody(e.opens.body,c,a.disclosure),u=s.length>0||c?a.trigger:a.closed,d={width:r.width??`auto`,justify:r.justify??`left`,truncate:r.truncate??`right`,baseStyle:u,padding:t.padding},f=qE(cE(o,u)).map(e=>eE(e,d)),p=s.map(e=>eE(cE([e],a.band),{...d,baseStyle:a.band})),m=[...f,...p];return t.perSegmentSink!==void 0&&t.perSegmentSink.set(e.name,m.flat()),[...m,...l]}catch(n){let r=n.message??String(n);return t.onSegmentError?.(e.name,r),[[new Ar(`⚠ ${e.name}: ${r}`)]]}}}};function XE(e){return YE[e]}function ZE(e){if(`ttl`in e)return{kind:`ttl`,durationMs:jT(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 QE(e,t){switch(ba(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 $E(e,t,n,r){switch(n.kind){case`literal`:e.declareLiteral(t,n.value);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:ZE(n.cache),parse:QE(n.parse,n.default)});break;case`shell`:e.declareShell(t,n.command,{cache:ZE(n.cache),parse:QE(n.parse,n.default)});break;case`template`:e.declareTemplate(t,n.template,{varDefault:n.default});break;case`time`:e.declareTime(t,{format:n.layout,ttlMs:n.cache?jT(n.cache.ttl):void 0,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 eD(e,t){let n=pl.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}function tD(e,t,n){let r=n?.cwd??process.cwd(),i={store:t.variableStore,compiled:new Map,stripStyle:`powerline`,padding:1},a=jE(),o={action:i,activeSegment:a},s=Object.keys(e.looks),c=rh(e.presets),l=new Map([...j_(e),...wh(e)]),u=ST({...OE(i),...zE(i,a),...GE(o),...KE(a),looks:{fn:()=>s,argTypes:[]},presets:{fn:()=>c,argTypes:[]}},n?.clock),d=eD(u,e.helpers),f=e=>u.parse(e,d),p=new Map;for(let[t,n]of Object.entries(e.variables))n.kind===`state`&&!p.has(n.key)&&p.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`&&!p.has(r.key)&&p.set(r.key,`${t}.${e}`);i.compiled=gE(f,e.actions,p,l);let m=[];for(let[n,i]of Object.entries(e.variables))try{$E(t,n,i,r)}catch(e){m.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{$E(t,`${n}.${e}`,a,r)}catch(t){m.push(`Variable "${n}.${e}": ${t.message??String(t)}`)}let h=Object.create(null);for(let[t,n]of Object.entries(e.segments)){let e=(e,n)=>{try{return f(e)}catch(e){throw Error(`Template parse error in segments.${t}.${n}: ${e.message}`,{cause:e})}};h[t]={when:n.when===void 0?void 0:e(n.when,`when`),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`),palette:n.palette===void 0?void 0:oE(n.palette)}}let g=(e,t,n)=>{try{return f(e)}catch(e){throw Error(`Template parse error in ${t}.${n}: ${e.message}`,{cause:e})}},_=(e,t)=>{let n={path:t,when:e.when===void 0?void 0:g(e.when,t,`when`),parse:(e,n)=>g(e,t,n),compileChild:_};return XE(e.kind).compile(e,n)},v=new Map;for(let t of c){let{node:n,path:r}=oh(e,t);v.set(t,_(n,r))}return{segments:h,roots:v,activeSegment:a,menuRuntime:o,loadWarnings:m}}function nD(e,t,n,r,i,a,o,s,c){let{perSegmentSink:l,onSegmentError:u}=s??{},{look:d=gn,preset:f=th}=c??{};r.applyInput({...i,term:{cols:o.width}}),t.menuRuntime.action.stripStyle=o.style,t.menuRuntime.action.padding=o.padding;let p=CT(n),m=sE(a,d);l?.clear();let h=n=>{let r=e.segments[n],i=t.segments[n];return r!==void 0&&i!==void 0?{seg:r,compiled:i}:void 0},g=(e,n,r,i,a)=>{let{tint:o,text:s,disclosure:c}=ac(n,r),l=fE(t.activeSegment,e,n,c,o,s,i,a,p),u=Qs(n,c);return{closed:l,trigger:kE(n,u.state),band:kE(n,u.plane),disclosure:c}},_=e=>(t.activeSegment.current=null,VE(e)),v=(e,t,n)=>{let r=t&&JT(e.when,p),i={scope:p,palette:m,visible:r,padding:o.padding,region:n,perSegmentSink:l,onSegmentError:u,enterSegment:g,exitSegment:_,lookupSegment:h,renderChild:(e,t,r)=>v(e,t,nc(n,r)),renderBody:(e,t,n)=>v(e,r&&t,rc(n))};return XE(e.kind).render(e,i)},y=t.roots.get(f);if(y===void 0)throw Error(`Preset "${f}" has no compiled layout — registerDslConfig compiles one per declared preset and effectivePresetName collapses unknown names to "${th}"; a miss here is merge/policy drift (have: ${[...t.roots.keys()].join(`, `)})`);return v(y,!0,tc).map(e=>yx(rE(e,o),o)).join(`
182
- `)}var rD=class{kind=`box`;cell;lastChangedAt;constructor(e,t,n){this.name=e,this.type=t,lD(e,t,n,`initial value`),this.cell=Mw.observable.box(n,{deep:!1}),this.lastChangedAt=Date.now()}read(){return this.cell.get()}set(e){lD(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}},iD=class{kind=`computed`;cell;constructor(e,t,n){this.name=e,this.type=t,this.cell=(0,Mw.computed)(()=>{let e=n();return lD(this.name,this.type,e,`computed result`),e},{keepAlive:!0})}read(){return this.cell.get()}lastUpdatedMs(){return null}},aD=class{kind=`document`;cell;lastChangedAt;constructor(e,t){this.name=e,this.cell=Mw.observable.box(cD(t),{deep:!1}),this.lastChangedAt=Date.now()}read(){return this.cell.get()}set(e){let t=cD(e);sD(this.cell.get(),t)||(this.cell.set(t),this.lastChangedAt=Date.now())}lastUpdatedMs(){return this.lastChangedAt}};function oD(e){return JSON.stringify(e)}function sD(e,t){return oD(e)===oD(t)}function cD(e){return e.kind===`ok`?{kind:`ok`,value:Nw(e.value)}:e}function lD(e,t,n,r){let i=Pw(n);if(i!==t)throw TypeError(`Variable "${e}": ${r} type ${i} does not match declared type ${t}`)}var uD=class{nodes=new Map;defineBox(e,t,n){this.assertNotDefined(e),this.nodes.set(e,new rD(e,t,n))}defineDocument(e,t){this.assertNotDefined(e),this.nodes.set(e,new aD(e,t))}defineComputed(e,t,n){this.assertNotDefined(e);let r=e=>this.read(e);this.nodes.set(e,new iD(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,Mw.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,Mw.runInAction)(()=>n.set(t))}runInAction(e){(0,Mw.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 oD(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 dD(e,t,n){return e+`\0`+t+`\0`+(n??``)}function fD(e,t){return new Set(rh(e.presets).filter(n=>oh(e,n).path===`root`?t.root!==void 0:t.presets?.[n]?.root!==void 0))}function pD(e){let t=c.basename(e),n=c.dirname(e);for(;!r.existsSync(n);)t=c.basename(n),n=c.dirname(n);return{dir:n,name:t}}function mD(e,t){let n=new Map;for(let t of lv(e.projectDir,e.cwd,e.configFile)){let{dir:e,name:r}=pD(t);n.has(e)||n.set(e,new Set),n.get(e).add(r)}return{files:t===null?[]:[t],dirs:[...n.entries()].sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>({path:e,filenames:[...t].sort()}))}}function hD(e){return e.filter(Boolean).join(`
183
- `)||null}var gD=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=dD(e,t,n),i=this.entries.get(r);if(i)return this.entries.delete(r),this.entries.set(r,i),i;let a=this.loadFromDisk(e,t,n),o={projectDir:e,cwd:t,configFile:n,configFilePath:null,lastError:a.error,lastWarning:a.warning,state:a.state??this.buildState(t,null,[]),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.state.validatorDisposers.forEach(e=>e()),n.watcher?.release(),this.entries.delete(t)}}return this.refreshWatcher(o,a.resolvedPath),this.observers.onReload?.(o),o}reloadInto(e){let t=this.loadFromDisk(e.projectDir,e.cwd,e.configFile);e.lastWarning=t.warning,e.lastError=t.error,t.state!==null&&(e.state.registry.dispose(),e.state.validatorDisposers.forEach(e=>e()),e.state=t.state),this.refreshWatcher(e,t.resolvedPath),this.observers.onReload?.(e)}loadFromDisk(e,t,n){let r=dv(e,t,n),i=r.kind===`file`?r.path:null,a=[hv(e,t),pv(r)],o;try{o=this.buildState(t,i,a)}catch(e){return e instanceof da&&a.push(...e.warnings),{resolvedPath:i,warning:hD(a),state:null,error:e instanceof da||e instanceof Error?e.message:String(e)}}return{resolvedPath:i,warning:hD(a),state:o,error:null}}buildState(e,t,n){let{config:r,raw:i,source:a,warnings:o}=gv(t,kw);n.push(...o);let s=yv(r,t??`<default>`,a),c=new uD,l=new qT(c,s.globals.default_empty_value??``,this.deps.gitService,this.deps.sessionState),u,d=[];try{u=tD(s,l,{cwd:e}),n.push(...u.loadWarnings);for(let{key:e,spec:t}of TS(s))d.push(vS(e,t));for(let{key:e,spec:t}of sS(s))d.push(cS(e,t))}catch(e){for(let e of d)e();throw l.dispose(),e}return{config:s,store:c,registry:l,compiled:u,neededInputPaths:fw(s),lastRenderCellsBySegment:new Map,validatorDisposers:d,authoredRoots:fD(r,i)}}refreshWatcher(e,t){e.configFilePath=t;let n=mD(e,t),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){Y(`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 _D=16384;var vD=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<_D){this.rollingTimestamps.push(e);return}this.rollingTimestamps[this.rollingHead]=e,this.rollingHead=(this.rollingHead+1)%_D}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:nb,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},watchers:{active:e.watchersActive,opened:this.watchersOpened,closed:this.watchersClosed,evicted:this.watchersEvicted},subprocesses:this.snapshotSubprocesses(),nextRestartReason:e.nextRestartReason??null}}};const yD={load:()=>({}),save:()=>{},flush:()=>{}};function bD(e){let t=new Map;for(let[n,r]of Object.entries(e))t.set(n,new Map(Object.entries(r)));return t}var xD=class{sessions;storage;atom=(0,Mw.createAtom)(`SessionState`);constructor(e=yD,t=256){this.maxSessions=t,this.storage=e,this.sessions=new Map,this.hydrateFromStorage()}useStorage(e){this.storage=e,this.hydrateFromStorage()}hydrateFromStorage(){this.sessions=bD(this.storage.load()),this.evictOldest(),this.persist()}get(e,t){this.atom.reportObserved();let n=this.sessions.get(e);return n?(this.touch(e,n),n.get(t)??null):null}set(e,t,n){this.setBatch(e,[{key:t,value:n}])}setBatch(e,t){t.length!==0&&(0,Mw.runInAction)(()=>{let n=this.sessions.get(e)??new Map;for(let{key:e,value:r}of t)n.set(e,r);this.touch(e,n),this.evictOldest(),this.persist(),this.atom.reportChanged()})}clear(e,t){(0,Mw.runInAction)(()=>{let n=this.sessions.get(e);n&&(n.delete(t),n.size===0?this.sessions.delete(e):this.touch(e,n)),this.persist(),this.atom.reportChanged()})}prune(e){(0,Mw.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,n]of this.sessions)e[t]=Object.fromEntries(n);return e}};const SD=(e,t)=>E(t);function CD(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 wD=class{timer=null;pending=null;constructor(e,t=500,n=SD){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 CD(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(c.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 TD={default_bg:`string`,default_fg:`string`,default_empty_value:`string`,default_separator:`string`,default_truncate_marker:`string`,palette:`string`,look:`string`,preset:`string`,style:`string`,autoWrap:`boolean`,padding:`number`,charset:`string`,updateNotice:`boolean`,colorCompatibility:`string`},ED=new Set([`1`,`true`]),DD=new Set([`0`,`false`,``]);function OD(e,t){let n=$D(e),r=n.scope===`globals`?TD[n.field]:`string`;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(ED.has(t))return`true`;if(DD.has(t))return`false`;throw Error(`persistValueText: "${e}" expects boolean-ish (1, 0, true, false), got "${t}"`)}function kD(e){try{return r.readFileSync(e,`utf8`)}catch(e){if(e.code===`ENOENT`)return null;throw e}}function AD(e,t,n){try{if(t===null){r.rmSync(e,{force:!0});return}r.mkdirSync(c.dirname(e),{recursive:!0}),Ae(e,t)}catch(t){let r=`config write failed (${e}): ${t.message}`;throw n(`error`,r),Error(r)}}function jD(e){return/^\s*$/.test(e)?null:ji(e)}function MD(e,t){return e!==null&&Ni(e,t)!==void 0}function ND(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(ND),...i}}return e}function PD(e){if(!ao(e))return ND(e);let{rows:t,...n}=e;return{rows:Object.fromEntries(Object.entries(t).map(([e,t])=>[e,ND(t)])),...n}}const FD=Dw,ID=FD.segments,LD=FD.presets,RD=FD.root;function zD(e,t,n,r){if(!MD(e,t)&&n===void 0)throw new $(`cannot edit ${r}: neither the config file nor the bundled default declares ${t.join(`.`)}`)}function BD(e,t){let n=fh(t);return t.scope===`segment-palette`&&zD(e,[`segments`,t.segment],ID[t.segment],n.join(`.`)),n}function VD(e){return ji(zi(e))}function HD(){return Object.entries(RD.rows).map(([e,t])=>{let n=ND(t);return{path:[`root`],fragment:VD({rows:{[e]:n}}),unit:{path:[`root`,`rows`,e],value:n}}})}function UD(e,t){let n=e===null?void 0:Ni(e,t);return n===void 0?null:{path:t,fragment:n,unit:null}}function WD(e,t){if(t===void 0)return null;let n=PD(t);return{path:e,fragment:VD(n),unit:{path:e,value:n}}}function GD(e,t){let n=[`presets`,t],r=[...n,`root`],i=LD[t];zD(e,n,i,r.join(`.`));let a=UD(e,r)??WD(r,i?.root);return a!==null&&aa(a.fragment)?a:null}function KD(e,t){let n=ia(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 qD(e,t){return[...HD(),UD(e,[`root`]),GD(e,t)].filter(e=>e!==null).reduce(KD,new Map)}function JD(e,t,n){for(let{node:r,...i}of qD(e,t).values())if(sa(r,n))return i;throw new $(`${YD(e,t).join(`.`)} holds no segment "${n}" — the bar you clicked is stale; it reloads on the next render`)}function YD(e,t){return GD(e,t)?.path??[`root`]}function XD(e,t){return t.scope===`preset-root`?YD(e,t.preset):fh(t)}function ZD(e,{unit:t}){return t===null?e:$i(e,t.path,zi(t.value),Li)}function QD(e){let t=dh(e);if(t===null)throw Error(`"${e}" is not a valid persist target`);return t}function $D(e){let t=QD(e);if(t.scope===`preset-root`)throw Error(`"${e}" names a layout, not a value`);return t}function eO(e,t){let n=$D(t),r=jD(kD(e)??``),i=r===null?void 0:Ni(r,fh(n));return i!==void 0&&`value`in i?i.value:void 0}function tO(e,t,n,r){let i=$D(n),a=kD(t);dO(e,t,{before:a,after:$i(a??``,BD(jD(a??``),i),OD(n,r),Li)})}function nO(e,t,n){let r=QD(n),i=kD(t);if(i===null)return;let a=ea(i,XD(jD(i),r));a!==i&&dO(e,t,{before:i,after:a})}function rO(e,t,n,r){let i=QD(n);if(i.scope!==`preset-root`)throw Error(`"${n}" is not a "presets.<name>.root" target`);let a=kD(t),o=r.op===`remove`?r.target:r.anchor,s=JD(jD(a??``),i.preset,o),c=ZD(a??``,s),l=r.op===`remove`?la(c,s.path,r.target):ua(c,s.path,r.segment,r.anchor,r.relation);if(l===null)throw new $(`${s.path.join(`.`)} in ${t} has no segment "${o}" — the bar you clicked is stale; it reloads on the next render`);dO(e,t,{before:a,after:l})}const iO={past:[],future:[]};function aO(e){if(typeof e!=`object`||!e)return!1;let t=e;return(t.before===null||typeof t.before==`string`)&&typeof t.after==`string`}function oO(e){if(typeof e!=`object`||!e)return!1;let t=e;return Array.isArray(t.past)&&t.past.every(aO)&&Array.isArray(t.future)&&t.future.every(aO)}function sO(e){let t;try{t=r.readFileSync(e.historyPath,`utf8`)}catch(t){let n=t.code;return n!==`ENOENT`&&e.logger(`warn`,`config-edit-history read failed (${n}); starting empty`),{}}try{let e=JSON.parse(t);if(typeof e==`object`&&e&&!Array.isArray(e)&&Object.values(e).every(oO))return e}catch{}return e.logger(`warn`,`config-edit-history load: unexpected shape, starting empty`),{}}function cO(e,t){try{r.mkdirSync(c.dirname(e.historyPath),{recursive:!0}),Ae(e.historyPath,JSON.stringify(t),384)}catch(t){let n=`config-edit-history write failed: ${t.message}`;throw e.logger(`error`,n),Error(n)}}function lO(e,t){let n=[...e,t];return n.length>50?n.slice(-50):n}function uO(e,t,n,r,i){AD(t,n,e.logger);try{cO(e,r)}catch(e){throw Error(`${i} landed in ${t} but recording it failed — it is not undoable: ${e.message}`)}}function dO(e,t,n){let r=sO(e),{past:i}=r[t]??iO;uO(e,t,n.after,{...r,[t]:{past:lO(i,n),future:[]}},`edit`)}function fO(e,t){let n=sO(e),{past:r,future:i}=n[t]??iO,a=r[r.length-1];return a===void 0?null:(mO(t,a.after,`undo`),uO(e,t,a.before,{...n,[t]:{past:r.slice(0,-1),future:lO(i,a)}},`undo`),a)}function pO(e,t){let n=sO(e),{past:r,future:i}=n[t]??iO,a=i[i.length-1];return a===void 0?null:(mO(t,a.before,`redo`),uO(e,t,a.after,{...n,[t]:{past:lO(r,a),future:i.slice(0,-1)}},`redo`),a)}function mO(e,t,n){if(kD(e)!==t)throw new $(`${n}: ${e} has changed since that edit — refusing to overwrite it`)}function hO(e){let t=De({bin:`tmux`,args:[`-S`,e.socket,`display`,`-p`,`-t`,e.pane,`#{client_termfeatures}`],timeoutMs:2e3,category:`doctor.tmux`});return t.ok?{kind:`ok`,value:t.stdout.trim().split(`,`).filter(e=>e!==``)}:{kind:`failed`,reason:`tmux display -p failed (${t.error??[t.reason,t.stderr.trim()].filter(e=>e!==``).join(`: `)})`}}function gO(){return{probeTmux:hO,claudeSettingsPath:rb()}}function _O(e){return r.existsSync(e.claudeSettingsPath)?r.readFileSync(e.claudeSettingsPath,`utf8`):``}function vO(e){if(/^\s*$/.test(e))return{};let t=Ri.parse(e);if(typeof t!=`object`||!t||Array.isArray(t))throw Error(`not a JSON object`);let n=t.env;if(n===void 0)return{};if(typeof n!=`object`||!n||Array.isArray(n))throw Error("`env` is not an object");return n}function yO(e,t){return t===void 0?{kind:`unreported`}:t===null?{kind:`outside`}:{kind:`inside`,hint:t,termfeatures:e.probeTmux(t)}}function bO(e){try{return vO(_O(e))}catch(t){throw Error(`cannot read ${e.claudeSettingsPath}: ${t instanceof Error?t.message:String(t)}`,{cause:t})}}function xO(e,t){return{tmux:yO(e,t),claudeSettingsEnv:bO(e)}}function SO(e,t,n){switch(t.kind){case`claude-settings-env`:{let i=$i(_O(e),[`env`,t.name],JSON.stringify(t.value),Ri);return r.mkdirSync(c.dirname(e.claudeSettingsPath),{recursive:!0}),Ae(e.claudeSettingsPath,i),{...n,claudeSettingsEnv:bO(e)}}default:return t.kind}}function CO(e){if(!e)throw new $(`session id is required`);if(e.includes(`/`)||e.includes(`..`))throw new $(`invalid session id "${e}"`);return e}function wO(e){return TO(()=>decodeURIComponent(e))}function TO(e){try{return e()}catch(e){throw e instanceof URIError?new $(`malformed wire encoding: ${e.message}`):e}}function EO(e,t){let n=De({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 DO=(e,t)=>EO(wO(e),t),OO=(e,t)=>{let n=De({bin:`/usr/bin/open`,args:[`-a`,`Visual Studio Code`,wO(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`})`)}},kO=(e,t)=>EO(wO(e),t),AO=(e,t)=>EO(wO(e),t),jO=(e,t)=>{let n=CO(wO(e));t.sessionState.get(n,`toolbar-expanded`)?t.sessionState.clear(n,`toolbar-expanded`):t.sessionState.set(n,`toolbar-expanded`,`1`)},MO=(e,t)=>{let[n=``,...r]=TO(()=>Qy(e)),i=CO(n);if(r.length===0)throw new $(`set-state: <key>/<value> is required (have keys: ${_S().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: ${_S().join(`, `)})`);let a=[];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=yS(t,n);if(!i.ok)throw new $(`set-state: pair ${e/2+1}: ${i.reason}`);a.push({key:t,value:i.value})}t.sessionState.setBatch(i,a);let o=a.map(e=>`${e.key}=${e.value}`).join(` `);t.dlog(`info`,`set-state: ${o} (session=${i})`)},NO=/^-?\d+$/;function PO(e,t,n){return e>n?t:e<t?n:e}function FO(e,t){if(!e)return null;if(!_S().includes(e))throw new $(`${t}: unknown session key "${e}" to release (have: ${_S().join(`, `)})`);return e}function IO(e,t,n,r){e!==null&&(n.sessionState.clear(t,e),n.dlog(`info`,`${r}: released session key ${e} (session=${t})`))}const LO=(e,t)=>{let[n=``,r=``,i=``]=TO(()=>Qy(e)),a=CO(n);if(!r)throw new $(`step-state: <key> is required (shape: <sessionId>/<key>/<by>)`);if(!NO.test(i))throw new $(`step-state: delta must be an integer, got "${i}"`);let o=parseInt(i,10),s=bS(r);if(!s)throw new $(`step-state: key "${r}" is not a bounded (range) state key (have keys: ${_S().join(`, `)})`);let c=t.sessionState.get(a,r),l=c&&NO.test(c)?Math.max(s.min,Math.min(s.max,parseInt(c,10))):s.seed,u=PO(l+o,s.min,s.max),d=yS(r,String(u));if(!d.ok)throw new $(`step-state: ${d.reason}`);t.sessionState.set(a,r,d.value),t.dlog(`info`,`step-state: ${r} ${l}→${d.value} (by ${o}, session=${a})`)},RO=`render-origin`;function zO(e){return JSON.stringify(e)}function BO(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 VO(e,t){let n=e.sessionState.get(t,RO);if(n===null)throw new $(`session ${t} has not rendered yet — no config file to write`);let r=BO(n);return fv(r.projectDir,r.cwd,r.configFile??void 0)}function HO(e){return{historyPath:Be(),logger:e.dlog}}const UO=(e,t)=>{let[n=``,r=``,i=``,a=``]=TO(()=>Qy(e)),o=CO(n);if(!r)throw new $(`set-config: <key>/<value> is required (have keys: ${$x().join(`, `)})`);let s=eS(r,i);if(!s.ok)throw new $(`set-config: ${s.reason}`);let c=FO(a,`set-config`),l=VO(t,o);tO(HO(t),l,r,s.value),t.dlog(`info`,`set-config: ${r}=${s.value} → ${l} (session=${o})`),IO(c,o,t,`set-config`)},WO=(e,t)=>{let[n=``,r=``,i=``,a=``]=TO(()=>Qy(e)),o=CO(n);if(!r)throw new $(`step-config: <key> is required (shape: <sessionId>/<key>/<by>)`);if(!NO.test(i))throw new $(`step-config: delta must be an integer, got "${i}"`);let s=parseInt(i,10),c=FO(a,`step-config`),l=tS(r);if(!l)throw new $(`step-config: key "${r}" is not a bounded (range) config key (have keys: ${$x().join(`, `)})`);let u=VO(t,o),d=eO(u,r),f=typeof d==`number`?Math.max(l.min,Math.min(l.max,d)):l.seed,p=PO(f+s,l.min,l.max),m=eS(r,String(p));if(!m.ok)throw new $(`step-config: ${m.reason}`);tO(HO(t),u,r,m.value),t.dlog(`info`,`step-config: ${r} ${f}→${m.value} (by ${s}) → ${u} (session=${o})`),IO(c,o,t,`step-config`)},GO=(e,t)=>{let[n=``,r=``]=TO(()=>Qy(e)),i=CO(n);if(!r||!$x().includes(r))throw new $(`reset-config: unknown config key "${r}" (have: ${$x().join(`, `)})`);let a=VO(t,i);nO(HO(t),a,r),t.dlog(`info`,`reset-config: ${r} ← ${a} (session=${i})`)},KO=(e,t)=>{let[n=``,r=``,i=``]=TO(()=>Qy(e)),a=CO(n);if(!r)throw new $(`apply-layout-op: <key>/<op> is required (have: ${$x().join(`, `)})`);let o=eS(r,i);if(!o.ok)throw new $(`apply-layout-op: ${o.reason}`);let s=$m(o.value);if(s===null)throw new $(`apply-layout-op: "${o.value}" is not a layout op token`);let c=VO(t,a);rO(HO(t),c,r,s),t.dlog(`info`,`apply-layout-op: ${r} ${o.value} → ${c} (session=${a})`)},qO=(e,t)=>{let[n=``]=TO(()=>Qy(e)),r=CO(n),i=VO(t,r);if(fO(HO(t),i)===null)throw new $(`undo: history is empty, nothing to undo`);t.dlog(`info`,`undo: ${i} (session=${r})`)},JO=(e,t)=>{let[n=``]=TO(()=>Qy(e)),r=CO(n),i=VO(t,r);if(pO(HO(t),i)===null)throw new $(`redo: nothing to redo`);t.dlog(`info`,`redo: ${i} (session=${r})`)},YO=(e,t)=>{CO(wO(e)),t.applyUpdate()},XO=`client-hints`;function ZO(e,t){let n=e.sessionState.get(t,XO);if(n===null)throw new $(`session ${t} has not rendered yet — no client facts to diagnose`);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 Ev(r)}function QO(e,t,n){let r=Ih(n);e.sessionState.setBatch(t,zh(r)),e.dlog(`info`,`doctor: ${r.map(e=>`${e.check.name}=${e.verdict.ok?`ok`:`failed`}`).join(` `)} (session=${t})`)}const $O=(e,t)=>{let n=CO(wO(e));QO(t,n,xO(t.doctor,ZO(t,n).tmux))},ek=(e,t)=>{let[n=``,r=``]=TO(()=>Qy(e)),i=CO(n),a=Lh(r);if(a===void 0)throw new $(`doctor-fix: unknown check "${r}"`);let o=xO(t.doctor,ZO(t,i).tmux),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=SO(t.doctor,s.fix,o);t.dlog(`info`,`doctor-fix: ${a.name} → ${s.fix.kind} ${s.fix.name}=${s.fix.value} (session=${i})`),QO(t,i,c)},tk=`config-override`,nk=new Map([[Ly,DO],[`load-config`,(e,t)=>{let n=e.indexOf(`/`);if(n===-1)throw new $(`load-config: expected <sessionId>/<path> (missing separator)`);let r=CO(TO(()=>decodeURIComponent(e.slice(0,n)))),i=TO(()=>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,tk),t.dlog(`info`,`load-config: override cleared (session=${r})`)):(t.sessionState.set(r,tk,i),t.dlog(`info`,`load-config: ${i} (session=${r})`))}],[Ry,OO],[Fy,MO],[Iy,LO],[Hy,UO],[Uy,WO],[Wy,GO],[Gy,KO],[Ky,qO],[qy,JO],[By,kO],[Vy,AO],[zy,jO],[Jy,YO],[Yy,$O],[Xy,ek]]),rk=new Set([Fy,Iy,Hy,Uy,Wy,Gy,Ky,qy,zy,Jy,Yy,Xy]),ik=(e,t)=>{let n=[],r=!1,i=null;for(let{verb:a,value:o}of eb(e)){if(!i&&rk.has(a)){let e=Qy(o);e.length>0&&e[0]&&(i=e[0])}let e=nk.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(`
184
- `));let e=`dispatch: ${n.join(`; `)}`;throw r?Error(e):new $(e)}},ak=new Map([...nk,[Py,ik]]);Object.freeze([...ak.keys()]);const ok=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`]),sk=[[`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`]];function ck(e){let t={missingRequired:[],typeMismatches:[],unknownTopLevelFields:[]},n=typeof e==`object`&&e&&!Array.isArray(e)?e:{};for(let[e,r]of sk){let i=uk(n,e);if(i==null)t.missingRequired.push(e);else{let n=lk(i);n!==r&&t.typeMismatches.push({path:e,expected:r,got:n})}}for(let e of Object.keys(n))ok.has(e)||t.unknownTopLevelFields.push(e);return{data:e,report:t}}function lk(e){return Array.isArray(e)?`array`:typeof e==`string`&&!e.isWellFormed()?`ill-formed string`:typeof e}function uk(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 dk(e,t){switch(e){case`vars`:return{what:e,vars:fk(t)};case`segments`:return{what:e,segments:_k(t)};case`config`:return{what:e,config:bk(t)}}}function fk(e){if(e===null)return[];let{store:t,registry:n,config:r}=e,i=hk(r),a=t.names().sort(),o=[];for(let e of a){let r=t.getNode(e),a=n.getLastError(e);o.push({name:e,source:i.get(e)??null,...pk(r),lastError:a===void 0?null:{timestampMs:a.timestamp,message:a.message},ageMs:mk(r.lastUpdatedMs())})}return o}function pk(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 mk(e){return e===null?null:Math.max(0,Date.now()-e)}function hk(e){let t=new Map;for(let[n,r]of Object.entries(e.variables))t.set(n,gk(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}`,gk(i));return t}function gk(e){return e.kind}function _k(e){if(e===null)return[];let{store:t,config:n,lastRenderBySegment:r}=e,i=new Set(t.names()),a=vk(n),o=[];for(let e of a){let t=n.segments[e];t&&o.push({name:e,description:t.description??null,template:t.template,referencedVars:yk(t.template,i),lastRender:r.get(e)??null})}return o}function vk(e){let t=[],n=new Set;for(let r of va(co(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 yk(e,t){let n=new Set;for(let r of L_(e)){if(t.has(r)){n.add(r);continue}let e=r.split(`.`);for(;e.length>1;){e.pop();let r=e.join(`.`);if(t.has(r)){n.add(r);break}}}return Array.from(n).sort()}function bk(e){return e===null?null:e.config}const xk=[`vars`,`segments`,`config`];function Sk(e){return typeof e==`string`&&xk.includes(e)}function Ck(e){return Math.max(1,e-2)}var wk=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 E(`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);E(`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{E(`Calculating context tokens from transcript: ${e}`);let n=await FC(e);if(n.length===0)return E(`No entries in transcript`),Z;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,E(`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 E(`Most recent main chain context: ${n} tokens (limit: ${t})`),X({totalTokens:n,maxTokens:t,...this.ratioPercentages(n,t)})}return E(`No main chain entries with usage data found`),Z}catch(e){return Q(`context transcript: ${e instanceof Error?e.message:String(e)}`)}}async getContextInfo(e){let t=this.calculateContextFromHookData(e);if(t)return X(t);let n=e.context_window?.context_window_size??2e5;return this.calculateContextTokensFromTranscript(e.transcript_path,n)}};function Tk(e){let t=e.type||e.message?.role||e.message?.type,n=e.type===`user`&&e.message?.firstContentType===`tool_result`;return t===`user`&&!n}var Ek=class{state=new Map;calculateLastResponseTime(e){if(e.length===0)return null;let t=null,n=null;for(let r of e){let e=r.type||r.message?.role||r.message?.type;if(Tk(r))t=r.timestamp;else if(e===`assistant`&&t){let e=(r.timestamp.getTime()-t.getTime())/1e3;e>.1&&e<300&&(n=e)}}return n}async foldMetrics(e,t){let n=this.state.get(e),r=CC(t);if(n&&r!==0&&n.cursor.mtimeMs===r)return this.state.delete(e),this.state.set(e,n),{kind:`ok`,value:{messageCount:n.messageCount,recent:[...n.recent]}};let i=await zC(t,n?.cursor);if(i.kind===`failed`)return i;if(i.kind===`absent`)return{kind:`ok`,value:{messageCount:n?.messageCount??0,recent:[...n?.recent??[]]}};let{entries:a,cursor:o,reset:s}=i.value,c=n&&!s?n:void 0,l=c?.messageCount??0,u=c?[...c.recent]:[];for(let e of a)e.isSidechain||(Tk(e)&&l++,u.push(e));for(u.length>20&&(u=u.slice(-20)),this.state.delete(e),this.state.set(e,{cursor:o,messageCount:l,recent:u});this.state.size>256;){let e=this.state.keys().next().value;if(e===void 0)break;this.state.delete(e)}return{kind:`ok`,value:{messageCount:l,recent:[...u]}}}async getMetricsInfo(e,t){if(E(`Getting metrics from hook data for session: ${e}`),!t.cost)return Z;let n=await this.foldMetrics(e,t.transcript_path);return n.kind===`failed`?Q(`metrics (${e}): ${n.reason}`):X({responseTime:t.cost.total_api_duration_ms/1e3,lastResponseTime:this.calculateLastResponseTime(n.value.recent),sessionDuration:t.cost.total_duration_ms/1e3,messageCount:n.value.messageCount,linesAdded:t.cost.total_lines_added,linesRemoved:t.cost.total_lines_removed})}};const Dk=new Map;function Ok(e){if(!e)return``;let t=e.indexOf(`,`);return t<0?e:e.slice(0,t)}var kk=class{async getSessionId(){if(!process.env.TMUX_PANE)return Z;let e=Ok(process.env.TMUX),t=Dk.get(e);if(t!==void 0)return t;E(`Getting tmux session ID, TMUX_PANE: ${process.env.TMUX_PANE}`);let n=await Ee({bin:`tmux`,args:[`display-message`,`-p`,`#S`],timeoutMs:1e3,category:`tmux`}),r=n.ok?n.stdout.trim()?X(n.stdout.trim()):Z:Q(`tmux display-message: ${n.reason}`);return Dk.set(e,r),r}isInTmux(){return!!process.env.TMUX_PANE}},Ak=class{written=new Map;constructor(e){this.dir=e}pathFor(e){return c.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 jk=new vD;we(jk.launchStats);const Mk=new dC({counters:jk,logger:Y}),Nk=new yC({watchers:Mk,logger:Y}),Pk=new ZC,Fk=new xD,Ik=new Ak(Ge()),Lk=new wk,Rk=new Ek,zk=new kk,Bk=new gD({gitService:Nk,sessionState:Fk,watchers:Mk},{observers:{onReload:e=>Y(`info`,`config loaded projectDir=${e.projectDir} cwd=${e.cwd} file=${e.configFilePath??`<bundled default>`} error=${e.lastError===null?`none`:JSON.stringify(e.lastError)} warning=${e.lastWarning===null?`none`:JSON.stringify(e.lastWarning)}`)}}),Vk=60*1e3;function Hk(){let e=import.meta.url,n=[];e.startsWith(`file://`)&&n.push(b(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){Y(`info`,`binary mtime changed (${e}); shutting down`),a&&clearInterval(a),iA(0);return}}catch(e){Y(`warn`,`bin stat failed: ${e.message}`)}};return{arm(){i.size!==0&&(a=setInterval(o,Vk),a.unref())},checkNow:o}}const Uk=Hk(),Wk=BS({entryUrl:import.meta.url,intervalMs:Vk,releaseIntervalMs:216e5,registryUrl:t.env.CC_CANDYBAR_REGISTRY_URL??`https://registry.npmjs.org`,fetchImpl:fetch,onApplied:()=>Uk.checkNow(),log:Y});let Gk=null,Kk=null,qk=0;function Jk(){t.on(`uncaughtException`,e=>{Y(`error`,`uncaughtException: ${e.stack||e.message}`),iA(1)}),t.on(`unhandledRejection`,e=>{Y(`error`,`unhandledRejection: ${String(e)}`),iA(1)});for(let e of[`SIGINT`,`SIGTERM`,`SIGHUP`])t.on(e,()=>{Y(`info`,`received ${e}, shutting down`),iA(0)});try{qk=oy(t.env)}catch(e){Y(`error`,`refusing to boot: ${e.message}`),iA(1);return}Gk=Jb(t.pid);let e=ix(ox(Gk));if(!e.decision.allow){Y(`warn`,`fork-bomb breaker: ${e.decision.reason}; refusing to boot`),iA(1);return}Kk=e.registryPath,r.mkdirSync(Ne(),{recursive:!0}),Ie(Pe()),Fk.useStorage(new wD(ze(),500,Y)),Zb({anchor:Xb(t.env),isAlive:Qb,onOrphaned:e=>{Y(`info`,`parent watchdog: ${e}; shutting down`),iA(0)}}),Yk(g.createServer({allowHalfOpen:!1},e=>{aA(e)}),Pe(),!1)}function Yk(e,n,r){e.removeAllListeners(`error`),e.removeAllListeners(`listening`),e.once(`error`,i=>{if(i.code!==`EADDRINUSE`){Y(`error`,`server error: ${i.message}`),iA(1);return}if(r){Y(`info`,`lost rebind race; another daemon is alive — exiting`),t.exit(0);return}Xk(e,n)}),e.listen(n,()=>Zk(n))}function Xk(e,n){let i=Rb(zb(Le(n)),(e,t)=>qb(e,t,{readStartTime:Kb,pidAlive:Qb}));if(i.kind===`attach-and-exit`){Y(`info`,`EADDRINUSE: ${i.reason} — exiting`),t.exit(0);return}Y(`warn`,`EADDRINUSE: ${i.reason} — unlinking stale socket and rebinding`);try{r.unlinkSync(n)}catch(e){if(e.code!==`ENOENT`){Y(`error`,`cannot unlink stale socket ${n}: ${e.message}`),iA(1);return}}Yk(e,n,!0)}function Zk(e){let n=Hb(e);if(n.kind!==`present`){Y(`warn`,`no ownable socket at bind callback (${n.kind}); exiting`),iA(0);return}tA(e);try{r.chmodSync(e,384)}catch(e){Y(`warn`,`chmod socket failed: ${e.message}`)}Y(`info`,`daemon up: pid=${t.pid} v=3 sock=${e} heapCap=${Math.round(_.getHeapStatistics().heap_size_limit/1048576)}MB rssLimit=${Math.round(qk/1048576)}MB`),Cy();let i=Ik.reset();i!==null&&Y(`warn`,`diagnostic dump wipe failed: ${i}`),Uk.arm(),Wk.arm(),eA(),Qk(e,n.identity)}function Qk(e,n){Gb({bound:n,myPid:t.pid,readIdentity:()=>Hb(e),readLease:()=>zb(Le(e)),shutdown:e=>iA(e),log:Y}).arm()}let $k=null;function eA(){$k=uy(my(jk.startedAt.getTime(),e=>iA(e),{rssLimitBytes:qk})),$k.arm()}function tA(e){let n=Bb(Le(e),{pid:t.pid,version:3,binPath:t.argv[1],startTime:Gk});n!==null&&Y(`warn`,`lease write failed: ${n}`)}let nA=0,rA=!1;function iA(e){if(!rA){rA=!0,setTimeout(()=>t.kill(t.pid,`SIGKILL`),500);try{Nk.close()}catch(e){Y(`warn`,`gitService close failed: ${e.message}`)}try{Pk.close()}catch(e){Y(`warn`,`usageStore close failed: ${e.message}`)}try{Mk.closeAll()}catch(e){Y(`warn`,`watcherRegistry close failed: ${e.message}`)}try{Fk.flush()}catch(e){Y(`warn`,`sessionState flush failed: ${e.message}`)}Vb(Re(),t.pid),Kk!==null&&ax(Kk,t.pid,nx,e=>r.unlinkSync(e)),t.exit(e)}}function aA(e){nA++,jk.inFlight=nA;let t=!1,n=(n,r)=>{if(t){r!==null&&Y(`warn`,`exit-after-flush dropped: an earlier responder settled this socket`);return}t=!0;let i=r===null?void 0:()=>iA(r);try{e.end(Nv(n),i)}catch(e){Y(`warn`,`response write failed: ${e.message}`),i?.()}},r=setTimeout(()=>{jk.requestsTimedOut++,n({ok:!1,error:`request exceeded 200ms`,code:`TIMEOUT`,daemonV:3},null)},200),i=Pv(e=>{sA(e).then(e=>n(e.resp,e.exitAfterFlush)).catch(e=>{Y(`error`,`handler threw: ${e?.stack||e}`),n({ok:!1,error:String(e?.message||e),code:`RENDER_FAILED`,daemonV:3},null)})},e=>{Y(`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=>{Y(`warn`,`socket error: ${e.message}`)}),e.on(`close`,()=>{clearTimeout(r),nA=Math.max(0,nA-1),jk.inFlight=nA})}const oA=e=>({resp:e,exitAfterFlush:null});async function sA(e){if(!e||typeof e!=`object`||typeof e.v!=`number`)return oA({ok:!1,error:`malformed request`,code:`BAD_REQUEST`,daemonV:3});if(e.v!==3)return e.v>3?Y(`info`,`version mismatch: client=${e.v} > daemon=3; binary likely upgraded — exiting after the response flushes`):Y(`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 oA({ok:!0,stats:jk.snapshot({gitCache:Nk.getStats(),usageCache:Pk.getStats(),renderCacheSize:Bk.size,watchersActive:Mk.size(),nextRestartReason:$k?.describeNextRestart()??null})});if(e.kind===`render`){jk.requestsTotal++;let t=Date.now();try{let{report:n}=ck(e.hookData);for(let e of n.unknownTopLevelFields)Y(`info`,`schema: unknown field '${e}' — Anthropic may have added it`);let r=[];for(let e of n.missingRequired)r.push(`missing required field '${e}'`);for(let{path:e,expected:t,got:i}of n.typeMismatches)r.push(`field '${e}' expected ${t}, got ${i}`);if(e.cwd===``&&r.push(`request 'cwd' is empty`),r.length>0)return jk.requestsErrored++,Y(`warn`,`BAD_REQUEST: ${r.join(`; `)}`),oA({ok:!1,error:`malformed hookData: ${r.join(`; `)}`,code:`BAD_REQUEST`,daemonV:3});let i=e.hookData.workspace.project_dir,{configFile:a,unknownFlagsError:o}=cA(e.args),s=e.hookData.session_id,c=Ev(e),l=JSON.stringify(c);Fk.get(s,`client-hints`)!==l&&Fk.set(s,XO,l);let u=Fk.get(s,`config-override`)??a??c.configEnv,d=Bk.getOrCreate(i,e.cwd,u),f=zO({projectDir:i,cwd:e.cwd,configFile:u??null});Fk.get(s,`render-origin`)!==f&&Fk.set(s,RO,f);let p=c.termCols,m=Ck(p??120),h=bx(c.termRows),g={...uA,width:m},{authoredRoots:_}=d.state,v=rw(d.state.config,t=>Fk.get(e.hookData.session_id,t),e=>_.has(e)),y=await gw(e.hookData,mA,e.cwd,d.state.neededInputPaths,v,c),b=oE(v.theme);g.style=v.style,g.separator=v.separator,g.wrap=v.autoWrap,g.padding=v.padding,g.charset=v.charset,g.colorCompatibility=v.colorCompatibility;let x=nD(d.state.config,d.state.compiled,d.state.store,d.state.registry,y,b,g,{perSegmentSink:d.state.lastRenderCellsBySegment},{look:fi(d.state.config.looks,v.look),preset:v.preset}),S=Fk.get(e.hookData.session_id,`click.error`);S&&Fk.clear(e.hookData.session_id,`click.error`);let ee=[o,d.lastError,S].filter(Boolean).join(`
185
- `),te=Wk.notice({sessionId:s,dismissed:Fk.get(s,ES),enabled:v.updateNotice}),ne=d.lastError===null?null:d.configFilePath,re=Tx(ee,te,d.lastWarning??``),ie=Ik.sync(s,re===null?null:Dx(re));ie!==null&&Y(`warn`,`diagnostic dump failed: ${ie}`);let C=Ox(x,re,{fullText:ie===null?{kind:`file`,path:Ik.pathFor(s)}:{kind:`unavailable`,reason:ie},failedConfigFile:ne},{width:m,rowCap:h,colorCompatibility:v.colorCompatibility}),ae=Date.now()-t,w=Nk.getStats(),T=Pk.getStats();return Y(`info`,`render sid=${e.hookData.session_id??`?`} took=${ae}ms termCols=${p??`?`} termRows=${c.termRows??`?`} width=${m} git=${w.size}/${w.hits}h/${w.misses}m usage=${T.size}/${T.hits}h/${T.misses}m err=${ee?`Y`:`N`} upd=${te.length} warn=${d.lastWarning?`Y`:`N`}`),oA({ok:!0,output:C+`
186
- `})}catch(e){throw jk.requestsErrored++,e}}if(e.kind===`click`)return oA(await hA(e.verb,e.value));if(e.kind===`debug`){if(!Sk(e.what))return oA({ok:!1,error:`unknown debug 'what': ${String(e.what)} (have: ${xk.join(`, `)})`,code:`BAD_REQUEST`,daemonV:3});let t=Bk.firstState(),n=t===null?null:{store:t.store,registry:t.registry,config:t.config,compiled:t.compiled,lastRenderBySegment:e.what===`segments`?pA(t.lastRenderCellsBySegment,t.config.globals.charset??`unicode`,t.config.globals.colorCompatibility??`truecolor`):fA};return oA({ok:!0,debug:dk(e.what,n)})}return oA({ok:!1,error:`unknown kind`,code:`BAD_REQUEST`,daemonV:3})}function cA(e){let{values:t,tokens:n}=S({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:Dv(t.config),unknownFlagsError:r.length>0?`Unknown flags: ${r.join(`, `)}`:null}}const lA={sessionState:Fk,dlog:Y,applyUpdate:()=>Wk.act(),doctor:gO()},uA={style:`powerline`,colorCompatibility:`truecolor`,wrap:!0,padding:1,charset:`unicode`},dA={...uA,width:1/0},fA=new Map;function pA(e,t,n){let r=new Map;for(let[i,a]of e)r.set(i,yx(a,{...dA,charset:t,colorCompatibility:n}));return r}const mA={gitProvider:Nk,usageStore:Pk,contextProvider:Lk,metricsProvider:Rk,tmuxService:zk,log:Y,clock:()=>new Date};function hA(e,t){let n=ak.get(e);if(!n)return{ok:!1,error:`unknown click verb: ${e}`,code:`BAD_REQUEST`,daemonV:3};try{return n(t,lA),{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 gA={connectMs:200,budgetMs:500};async function _A(e){let n=e.includes(`--json`),r=await vA();if(r.kind!==`ok`&&(t.stderr.write(`daemon-stats: ${Hv(r)}\n`),t.exit(1)),n){t.stdout.write(JSON.stringify(r.value,null,2)+`
187
- `);return}t.stdout.write(SA(r.value))}function vA(){return Iv({kind:`stats`},gA,e=>`stats`in e?e.stats:void 0)}function yA(e){return e<1024?`${e}B`:e<1024*1024?`${(e/1024).toFixed(1)}KB`:`${(e/1024/1024).toFixed(1)}MB`}function bA(e,t){let n=e+t;return n===0?`n/a`:`${(e/n*100).toFixed(1)}%`}function xA(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 SA(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 ${xA(e.uptimeSec)}`),t.push(` rss ${yA(e.rssBytes)}`),t.push(` heapUsed ${yA(e.heapUsedBytes)}`),t.push(` heapTotal ${yA(e.heapTotalBytes)}`),t.push(` external ${yA(e.externalBytes)}`),t.push(` arrayBuffers ${yA(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 ${bA(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 ${bA(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(`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(`
181
+ `);n.push(e[0]);for(let r=1;r<e.length;r++)t.push(n),n=[e[r]]}return t.push(n),t}function ZE(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?[]:[t.flatMap(e=>e[0]??[]),...t.flatMap(e=>e.slice(1))]}}const QE={container:{compile(e,t){return{kind:`container`,direction:e.direction,when:t.when,distribution:Rs(e.distribution),children:e.children.map((e,n)=>t.compileChild(e,`${t.path}.children[${n}]`))}},render(e,t){return ZE(e.direction,e.children.map((n,r)=>t.renderChild(n,t.visible,{index:r,count:e.children.length,distribution:e.distribution})))}},segment:{compile(e,t){return{kind:`segment`,when:t.when,name:e.name,...e.opens!==void 0&&{opens:{open:t.parse(dc(e.opens.ref),`opens`),body:t.compileChild(e.opens.body,`${t.path}.opens.body`)}}}},render(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[];try{if(!JT(i.when,t.scope))return[];let n=i.palette??t.palette,a=t.enterSegment(e.name,n,t.region,i.bg,i.fg),o=i.template.evaluate(t.scope),s=t.exitSegment(o),c=e.opens!==void 0&&JT(e.opens.open,t.scope),l=e.opens===void 0?[]:t.renderBody(e.opens.body,c,a.disclosure),u=s.length>0||c?a.trigger:a.closed,d={width:r.width??`auto`,justify:r.justify??`left`,truncate:r.truncate??`right`,baseStyle:u,padding:t.padding},f=XE(cE(o,u)).map(e=>eE(e,d)),p=s.map(e=>eE(cE([e],a.band),{...d,baseStyle:a.band})),m=[...f,...p];return t.perSegmentSink!==void 0&&t.perSegmentSink.set(e.name,m.flat()),[...m,...l]}catch(n){let r=n.message??String(n);return t.onSegmentError?.(e.name,r),[[new Ar(`⚠ ${e.name}: ${r}`)]]}}}};function $E(e){return QE[e]}function eD(e){if(`ttl`in e)return{kind:`ttl`,durationMs:jT(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 tD(e,t){switch(ba(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 nD(e,t,n,r){switch(n.kind){case`literal`:e.declareLiteral(t,n.value);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:eD(n.cache),parse:tD(n.parse,n.default)});break;case`shell`:e.declareShell(t,n.command,{cache:eD(n.cache),parse:tD(n.parse,n.default)});break;case`template`:e.declareTemplate(t,n.template,{varDefault:n.default});break;case`time`:e.declareTime(t,{format:n.layout,ttlMs:n.cache?jT(n.cache.ttl):void 0,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 rD(e,t){let n=pl.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}function iD(e,t,n){let r=n?.cwd??process.cwd(),i={store:t.variableStore,compiled:new Map,stripStyle:`powerline`,padding:1},a=jE(),o={action:i,activeSegment:a},s=Object.keys(e.looks),c=rh(e.presets),l=new Map([...j_(e),...wh(e)]),u=ST({...OE(i),...zE(i,a),...GE(o),...JE(a),looks:{fn:()=>s,argTypes:[]},presets:{fn:()=>c,argTypes:[]}},n?.clock),d=rD(u,e.helpers),f=e=>u.parse(e,d),p=new Map;for(let[t,n]of Object.entries(e.variables))n.kind===`state`&&!p.has(n.key)&&p.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`&&!p.has(r.key)&&p.set(r.key,`${t}.${e}`);i.compiled=gE(f,e.actions,p,l);let m=[];for(let[n,i]of Object.entries(e.variables))try{nD(t,n,i,r)}catch(e){m.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{nD(t,`${n}.${e}`,a,r)}catch(t){m.push(`Variable "${n}.${e}": ${t.message??String(t)}`)}let h=Object.create(null);for(let[t,n]of Object.entries(e.segments)){let e=(e,n)=>{try{return f(e)}catch(e){throw Error(`Template parse error in segments.${t}.${n}: ${e.message}`,{cause:e})}};h[t]={when:n.when===void 0?void 0:e(n.when,`when`),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`),palette:n.palette===void 0?void 0:oE(n.palette)}}let g=(e,t,n)=>{try{return f(e)}catch(e){throw Error(`Template parse error in ${t}.${n}: ${e.message}`,{cause:e})}},_=(e,t)=>{let n={path:t,when:e.when===void 0?void 0:g(e.when,t,`when`),parse:(e,n)=>g(e,t,n),compileChild:_};return $E(e.kind).compile(e,n)},v=new Map;for(let t of c){let{node:n,path:r}=oh(e,t);v.set(t,_(n,r))}return{segments:h,roots:v,activeSegment:a,menuRuntime:o,loadWarnings:m}}function aD(e,t,n,r,i,a,o,s,c){let{perSegmentSink:l,onSegmentError:u}=s??{},{look:d=gn,preset:f=th}=c??{};r.applyInput({...i,term:{cols:o.width}}),t.menuRuntime.action.stripStyle=o.style,t.menuRuntime.action.padding=o.padding;let p=CT(n),m=sE(a,d);l?.clear();let h=n=>{let r=e.segments[n],i=t.segments[n];return r!==void 0&&i!==void 0?{seg:r,compiled:i}:void 0},g=(e,n,r,i,a)=>{let{tint:o,text:s,disclosure:c}=ac(n,r),l=fE(t.activeSegment,e,n,c,o,s,i,a,p),u=Qs(n,c);return{closed:l,trigger:kE(n,u.state),band:kE(n,u.plane),disclosure:c}},_=e=>(t.activeSegment.current=null,VE(e)),v=(e,t,n)=>{let r=t&&JT(e.when,p),i={scope:p,palette:m,visible:r,padding:o.padding,region:n,perSegmentSink:l,onSegmentError:u,enterSegment:g,exitSegment:_,lookupSegment:h,renderChild:(e,t,r)=>v(e,t,nc(n,r)),renderBody:(e,t,n)=>v(e,r&&t,rc(n))};return $E(e.kind).render(e,i)},y=t.roots.get(f);if(y===void 0)throw Error(`Preset "${f}" has no compiled layout — registerDslConfig compiles one per declared preset and effectivePresetName collapses unknown names to "${th}"; a miss here is merge/policy drift (have: ${[...t.roots.keys()].join(`, `)})`);return v(y,!0,tc).map(e=>yx(rE(e,o),o)).join(`
182
+ `)}var oD=class{kind=`box`;cell;lastChangedAt;constructor(e,t,n){this.name=e,this.type=t,fD(e,t,n,`initial value`),this.cell=Mw.observable.box(n,{deep:!1}),this.lastChangedAt=Date.now()}read(){return this.cell.get()}set(e){fD(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}},sD=class{kind=`computed`;cell;constructor(e,t,n){this.name=e,this.type=t,this.cell=(0,Mw.computed)(()=>{let e=n();return fD(this.name,this.type,e,`computed result`),e},{keepAlive:!0})}read(){return this.cell.get()}lastUpdatedMs(){return null}},cD=class{kind=`document`;cell;lastChangedAt;constructor(e,t){this.name=e,this.cell=Mw.observable.box(dD(t),{deep:!1}),this.lastChangedAt=Date.now()}read(){return this.cell.get()}set(e){let t=dD(e);uD(this.cell.get(),t)||(this.cell.set(t),this.lastChangedAt=Date.now())}lastUpdatedMs(){return this.lastChangedAt}};function lD(e){return JSON.stringify(e)}function uD(e,t){return lD(e)===lD(t)}function dD(e){return e.kind===`ok`?{kind:`ok`,value:Nw(e.value)}:e}function fD(e,t,n,r){let i=Pw(n);if(i!==t)throw TypeError(`Variable "${e}": ${r} type ${i} does not match declared type ${t}`)}var pD=class{nodes=new Map;defineBox(e,t,n){this.assertNotDefined(e),this.nodes.set(e,new oD(e,t,n))}defineDocument(e,t){this.assertNotDefined(e),this.nodes.set(e,new cD(e,t))}defineComputed(e,t,n){this.assertNotDefined(e);let r=e=>this.read(e);this.nodes.set(e,new sD(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,Mw.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,Mw.runInAction)(()=>n.set(t))}runInAction(e){(0,Mw.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 lD(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 mD(e,t,n){return e+`\0`+t+`\0`+(n??``)}function hD(e,t){return new Set(rh(e.presets).filter(n=>oh(e,n).path===`root`?t.root!==void 0:t.presets?.[n]?.root!==void 0))}function gD(e){let t=c.basename(e),n=c.dirname(e);for(;!r.existsSync(n);)t=c.basename(n),n=c.dirname(n);return{dir:n,name:t}}function _D(e,t){let n=new Map;for(let t of lv(e.projectDir,e.cwd,e.configFile)){let{dir:e,name:r}=gD(t);n.has(e)||n.set(e,new Set),n.get(e).add(r)}return{files:t===null?[]:[t],dirs:[...n.entries()].sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>({path:e,filenames:[...t].sort()}))}}function vD(e){return e.filter(Boolean).join(`
183
+ `)||null}var yD=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=mD(e,t,n),i=this.entries.get(r);if(i)return this.entries.delete(r),this.entries.set(r,i),i;let a=this.loadFromDisk(e,t,n),o={projectDir:e,cwd:t,configFile:n,configFilePath:null,lastError:a.error,lastWarning:a.warning,state:a.state??this.buildState(t,null,[]),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.state.validatorDisposers.forEach(e=>e()),n.watcher?.release(),this.entries.delete(t)}}return this.refreshWatcher(o,a.resolvedPath),this.observers.onReload?.(o),o}reloadInto(e){let t=this.loadFromDisk(e.projectDir,e.cwd,e.configFile);e.lastWarning=t.warning,e.lastError=t.error,t.state!==null&&(e.state.registry.dispose(),e.state.validatorDisposers.forEach(e=>e()),e.state=t.state),this.refreshWatcher(e,t.resolvedPath),this.observers.onReload?.(e)}loadFromDisk(e,t,n){let r=dv(e,t,n),i=r.kind===`file`?r.path:null,a=[hv(e,t),pv(r)],o;try{o=this.buildState(t,i,a)}catch(e){return e instanceof da&&a.push(...e.warnings),{resolvedPath:i,warning:vD(a),state:null,error:e instanceof da||e instanceof Error?e.message:String(e)}}return{resolvedPath:i,warning:vD(a),state:o,error:null}}buildState(e,t,n){let{config:r,raw:i,source:a,warnings:o}=gv(t,kw);n.push(...o);let s=yv(r,t??`<default>`,a),c=new pD,l=new qT(c,s.globals.default_empty_value??``,this.deps.gitService,this.deps.sessionState),u,d=[];try{u=iD(s,l,{cwd:e}),n.push(...u.loadWarnings);for(let{key:e,spec:t}of TS(s))d.push(vS(e,t));for(let{key:e,spec:t}of sS(s))d.push(cS(e,t))}catch(e){for(let e of d)e();throw l.dispose(),e}return{config:s,store:c,registry:l,compiled:u,neededInputPaths:fw(s),lastRenderCellsBySegment:new Map,validatorDisposers:d,authoredRoots:hD(r,i)}}refreshWatcher(e,t){e.configFilePath=t;let n=_D(e,t),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){Y(`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 bD=16384;var xD=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<bD){this.rollingTimestamps.push(e);return}this.rollingTimestamps[this.rollingHead]=e,this.rollingHead=(this.rollingHead+1)%bD}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:nb,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},watchers:{active:e.watchersActive,opened:this.watchersOpened,closed:this.watchersClosed,evicted:this.watchersEvicted},subprocesses:this.snapshotSubprocesses(),nextRestartReason:e.nextRestartReason??null}}};const SD={load:()=>({}),save:()=>{},flush:()=>{}};function CD(e){let t=new Map;for(let[n,r]of Object.entries(e))t.set(n,new Map(Object.entries(r)));return t}var wD=class{sessions;storage;atom=(0,Mw.createAtom)(`SessionState`);constructor(e=SD,t=256){this.maxSessions=t,this.storage=e,this.sessions=new Map,this.hydrateFromStorage()}useStorage(e){this.storage=e,this.hydrateFromStorage()}hydrateFromStorage(){this.sessions=CD(this.storage.load()),this.evictOldest(),this.persist()}get(e,t){this.atom.reportObserved();let n=this.sessions.get(e);return n?(this.touch(e,n),n.get(t)??null):null}set(e,t,n){this.setBatch(e,[{key:t,value:n}])}setBatch(e,t){t.length!==0&&(0,Mw.runInAction)(()=>{let n=this.sessions.get(e)??new Map;for(let{key:e,value:r}of t)n.set(e,r);this.touch(e,n),this.evictOldest(),this.persist(),this.atom.reportChanged()})}clear(e,t){(0,Mw.runInAction)(()=>{let n=this.sessions.get(e);n&&(n.delete(t),n.size===0?this.sessions.delete(e):this.touch(e,n)),this.persist(),this.atom.reportChanged()})}prune(e){(0,Mw.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,n]of this.sessions)e[t]=Object.fromEntries(n);return e}};const TD=(e,t)=>E(t);function ED(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 DD=class{timer=null;pending=null;constructor(e,t=500,n=TD){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 ED(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(c.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 OD={default_bg:`string`,default_fg:`string`,default_empty_value:`string`,default_separator:`string`,default_truncate_marker:`string`,palette:`string`,look:`string`,preset:`string`,style:`string`,autoWrap:`boolean`,padding:`number`,charset:`string`,updateNotice:`boolean`,colorCompatibility:`string`},kD=new Set([`1`,`true`]),AD=new Set([`0`,`false`,``]);function jD(e,t){let n=nO(e),r=n.scope===`globals`?OD[n.field]:`string`;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(kD.has(t))return`true`;if(AD.has(t))return`false`;throw Error(`persistValueText: "${e}" expects boolean-ish (1, 0, true, false), got "${t}"`)}function MD(e){try{return r.readFileSync(e,`utf8`)}catch(e){if(e.code===`ENOENT`)return null;throw e}}function ND(e,t,n){try{if(t===null){r.rmSync(e,{force:!0});return}r.mkdirSync(c.dirname(e),{recursive:!0}),Ae(e,t)}catch(t){let r=`config write failed (${e}): ${t.message}`;throw n(`error`,r),Error(r)}}function PD(e){return/^\s*$/.test(e)?null:ji(e)}function FD(e,t){return e!==null&&Ni(e,t)!==void 0}function ID(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(ID),...i}}return e}function LD(e){if(!ao(e))return ID(e);let{rows:t,...n}=e;return{rows:Object.fromEntries(Object.entries(t).map(([e,t])=>[e,ID(t)])),...n}}const RD=Dw,zD=RD.segments,BD=RD.presets,VD=RD.root;function HD(e,t,n,r){if(!FD(e,t)&&n===void 0)throw new $(`cannot edit ${r}: neither the config file nor the bundled default declares ${t.join(`.`)}`)}function UD(e,t){let n=fh(t);return t.scope===`segment-palette`&&HD(e,[`segments`,t.segment],zD[t.segment],n.join(`.`)),n}function WD(e){return ji(zi(e))}function GD(){return Object.entries(VD.rows).map(([e,t])=>{let n=ID(t);return{path:[`root`],fragment:WD({rows:{[e]:n}}),unit:{path:[`root`,`rows`,e],value:n}}})}function KD(e,t){let n=e===null?void 0:Ni(e,t);return n===void 0?null:{path:t,fragment:n,unit:null}}function qD(e,t){if(t===void 0)return null;let n=LD(t);return{path:e,fragment:WD(n),unit:{path:e,value:n}}}function JD(e,t){let n=[`presets`,t],r=[...n,`root`],i=BD[t];HD(e,n,i,r.join(`.`));let a=KD(e,r)??qD(r,i?.root);return a!==null&&aa(a.fragment)?a:null}function YD(e,t){let n=ia(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 XD(e,t){return[...GD(),KD(e,[`root`]),JD(e,t)].filter(e=>e!==null).reduce(YD,new Map)}function ZD(e,t,n){for(let{node:r,...i}of XD(e,t).values())if(sa(r,n))return i;throw new $(`${QD(e,t).join(`.`)} holds no segment "${n}" — the bar you clicked is stale; it reloads on the next render`)}function QD(e,t){return JD(e,t)?.path??[`root`]}function $D(e,t){return t.scope===`preset-root`?QD(e,t.preset):fh(t)}function eO(e,{unit:t}){return t===null?e:$i(e,t.path,zi(t.value),Li)}function tO(e){let t=dh(e);if(t===null)throw Error(`"${e}" is not a valid persist target`);return t}function nO(e){let t=tO(e);if(t.scope===`preset-root`)throw Error(`"${e}" names a layout, not a value`);return t}function rO(e,t){let n=nO(t),r=PD(MD(e)??``),i=r===null?void 0:Ni(r,fh(n));return i!==void 0&&`value`in i?i.value:void 0}function iO(e,t,n,r){let i=nO(n),a=MD(t);mO(e,t,{before:a,after:$i(a??``,UD(PD(a??``),i),jD(n,r),Li)})}function aO(e,t,n){let r=tO(n),i=MD(t);if(i===null)return;let a=ea(i,$D(PD(i),r));a!==i&&mO(e,t,{before:i,after:a})}function oO(e,t,n,r){let i=tO(n);if(i.scope!==`preset-root`)throw Error(`"${n}" is not a "presets.<name>.root" target`);let a=MD(t),o=r.op===`remove`?r.target:r.anchor,s=ZD(PD(a??``),i.preset,o),c=eO(a??``,s),l=r.op===`remove`?la(c,s.path,r.target):ua(c,s.path,r.segment,r.anchor,r.relation);if(l===null)throw new $(`${s.path.join(`.`)} in ${t} has no segment "${o}" — the bar you clicked is stale; it reloads on the next render`);mO(e,t,{before:a,after:l})}const sO={past:[],future:[]};function cO(e){if(typeof e!=`object`||!e)return!1;let t=e;return(t.before===null||typeof t.before==`string`)&&typeof t.after==`string`}function lO(e){if(typeof e!=`object`||!e)return!1;let t=e;return Array.isArray(t.past)&&t.past.every(cO)&&Array.isArray(t.future)&&t.future.every(cO)}function uO(e){let t;try{t=r.readFileSync(e.historyPath,`utf8`)}catch(t){let n=t.code;return n!==`ENOENT`&&e.logger(`warn`,`config-edit-history read failed (${n}); starting empty`),{}}try{let e=JSON.parse(t);if(typeof e==`object`&&e&&!Array.isArray(e)&&Object.values(e).every(lO))return e}catch{}return e.logger(`warn`,`config-edit-history load: unexpected shape, starting empty`),{}}function dO(e,t){try{r.mkdirSync(c.dirname(e.historyPath),{recursive:!0}),Ae(e.historyPath,JSON.stringify(t),384)}catch(t){let n=`config-edit-history write failed: ${t.message}`;throw e.logger(`error`,n),Error(n)}}function fO(e,t){let n=[...e,t];return n.length>50?n.slice(-50):n}function pO(e,t,n,r,i){ND(t,n,e.logger);try{dO(e,r)}catch(e){throw Error(`${i} landed in ${t} but recording it failed — it is not undoable: ${e.message}`)}}function mO(e,t,n){let r=uO(e),{past:i}=r[t]??sO;pO(e,t,n.after,{...r,[t]:{past:fO(i,n),future:[]}},`edit`)}function hO(e,t){let n=uO(e),{past:r,future:i}=n[t]??sO,a=r[r.length-1];return a===void 0?null:(_O(t,a.after,`undo`),pO(e,t,a.before,{...n,[t]:{past:r.slice(0,-1),future:fO(i,a)}},`undo`),a)}function gO(e,t){let n=uO(e),{past:r,future:i}=n[t]??sO,a=i[i.length-1];return a===void 0?null:(_O(t,a.before,`redo`),pO(e,t,a.after,{...n,[t]:{past:fO(r,a),future:i.slice(0,-1)}},`redo`),a)}function _O(e,t,n){if(MD(e)!==t)throw new $(`${n}: ${e} has changed since that edit — refusing to overwrite it`)}function vO(e){let t=De({bin:`tmux`,args:[`-S`,e.socket,`display`,`-p`,`-t`,e.pane,`#{client_termfeatures}`],timeoutMs:2e3,category:`doctor.tmux`});return t.ok?{kind:`ok`,value:t.stdout.trim().split(`,`).filter(e=>e!==``)}:{kind:`failed`,reason:`tmux display -p failed (${t.error??[t.reason,t.stderr.trim()].filter(e=>e!==``).join(`: `)})`}}function yO(){return{probeTmux:vO,claudeSettingsPath:rb()}}function bO(e){return r.existsSync(e.claudeSettingsPath)?r.readFileSync(e.claudeSettingsPath,`utf8`):``}function xO(e){if(/^\s*$/.test(e))return{};let t=Ri.parse(e);if(typeof t!=`object`||!t||Array.isArray(t))throw Error(`not a JSON object`);let n=t.env;if(n===void 0)return{};if(typeof n!=`object`||!n||Array.isArray(n))throw Error("`env` is not an object");return n}function SO(e,t){return t===void 0?{kind:`unreported`}:t===null?{kind:`outside`}:{kind:`inside`,hint:t,termfeatures:e.probeTmux(t)}}function CO(e){try{return xO(bO(e))}catch(t){throw Error(`cannot read ${e.claudeSettingsPath}: ${t instanceof Error?t.message:String(t)}`,{cause:t})}}function wO(e,t){return{tmux:SO(e,t),claudeSettingsEnv:CO(e)}}function TO(e,t,n){switch(t.kind){case`claude-settings-env`:{let i=$i(bO(e),[`env`,t.name],JSON.stringify(t.value),Ri);return r.mkdirSync(c.dirname(e.claudeSettingsPath),{recursive:!0}),Ae(e.claudeSettingsPath,i),{...n,claudeSettingsEnv:CO(e)}}default:return t.kind}}function EO(e){if(!e)throw new $(`session id is required`);if(e.includes(`/`)||e.includes(`..`))throw new $(`invalid session id "${e}"`);return e}function DO(e){return OO(()=>decodeURIComponent(e))}function OO(e){try{return e()}catch(e){throw e instanceof URIError?new $(`malformed wire encoding: ${e.message}`):e}}function kO(e,t){let n=De({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 AO=(e,t)=>kO(DO(e),t),jO=(e,t)=>{let n=De({bin:`/usr/bin/open`,args:[`-a`,`Visual Studio Code`,DO(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`})`)}},MO=(e,t)=>kO(DO(e),t),NO=(e,t)=>kO(DO(e),t),PO=(e,t)=>{let n=EO(DO(e));t.sessionState.get(n,`toolbar-expanded`)?t.sessionState.clear(n,`toolbar-expanded`):t.sessionState.set(n,`toolbar-expanded`,`1`)},FO=(e,t)=>{let[n=``,...r]=OO(()=>Qy(e)),i=EO(n);if(r.length===0)throw new $(`set-state: <key>/<value> is required (have keys: ${_S().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: ${_S().join(`, `)})`);let a=[];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=yS(t,n);if(!i.ok)throw new $(`set-state: pair ${e/2+1}: ${i.reason}`);a.push({key:t,value:i.value})}t.sessionState.setBatch(i,a);let o=a.map(e=>`${e.key}=${e.value}`).join(` `);t.dlog(`info`,`set-state: ${o} (session=${i})`)},IO=/^-?\d+$/;function LO(e,t,n){return e>n?t:e<t?n:e}function RO(e,t){if(!e)return null;if(!_S().includes(e))throw new $(`${t}: unknown session key "${e}" to release (have: ${_S().join(`, `)})`);return e}function zO(e,t,n,r){e!==null&&(n.sessionState.clear(t,e),n.dlog(`info`,`${r}: released session key ${e} (session=${t})`))}const BO=(e,t)=>{let[n=``,r=``,i=``]=OO(()=>Qy(e)),a=EO(n);if(!r)throw new $(`step-state: <key> is required (shape: <sessionId>/<key>/<by>)`);if(!IO.test(i))throw new $(`step-state: delta must be an integer, got "${i}"`);let o=parseInt(i,10),s=bS(r);if(!s)throw new $(`step-state: key "${r}" is not a bounded (range) state key (have keys: ${_S().join(`, `)})`);let c=t.sessionState.get(a,r),l=c&&IO.test(c)?Math.max(s.min,Math.min(s.max,parseInt(c,10))):s.seed,u=LO(l+o,s.min,s.max),d=yS(r,String(u));if(!d.ok)throw new $(`step-state: ${d.reason}`);t.sessionState.set(a,r,d.value),t.dlog(`info`,`step-state: ${r} ${l}→${d.value} (by ${o}, session=${a})`)},VO=`render-origin`;function HO(e){return JSON.stringify(e)}function UO(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 WO(e,t){let n=e.sessionState.get(t,VO);if(n===null)throw new $(`session ${t} has not rendered yet — no config file to write`);let r=UO(n);return fv(r.projectDir,r.cwd,r.configFile??void 0)}function GO(e){return{historyPath:Be(),logger:e.dlog}}const KO=(e,t)=>{let[n=``,r=``,i=``,a=``]=OO(()=>Qy(e)),o=EO(n);if(!r)throw new $(`set-config: <key>/<value> is required (have keys: ${$x().join(`, `)})`);let s=eS(r,i);if(!s.ok)throw new $(`set-config: ${s.reason}`);let c=RO(a,`set-config`),l=WO(t,o);iO(GO(t),l,r,s.value),t.dlog(`info`,`set-config: ${r}=${s.value} → ${l} (session=${o})`),zO(c,o,t,`set-config`)},qO=(e,t)=>{let[n=``,r=``,i=``,a=``]=OO(()=>Qy(e)),o=EO(n);if(!r)throw new $(`step-config: <key> is required (shape: <sessionId>/<key>/<by>)`);if(!IO.test(i))throw new $(`step-config: delta must be an integer, got "${i}"`);let s=parseInt(i,10),c=RO(a,`step-config`),l=tS(r);if(!l)throw new $(`step-config: key "${r}" is not a bounded (range) config key (have keys: ${$x().join(`, `)})`);let u=WO(t,o),d=rO(u,r),f=typeof d==`number`?Math.max(l.min,Math.min(l.max,d)):l.seed,p=LO(f+s,l.min,l.max),m=eS(r,String(p));if(!m.ok)throw new $(`step-config: ${m.reason}`);iO(GO(t),u,r,m.value),t.dlog(`info`,`step-config: ${r} ${f}→${m.value} (by ${s}) → ${u} (session=${o})`),zO(c,o,t,`step-config`)},JO=(e,t)=>{let[n=``,r=``]=OO(()=>Qy(e)),i=EO(n);if(!r||!$x().includes(r))throw new $(`reset-config: unknown config key "${r}" (have: ${$x().join(`, `)})`);let a=WO(t,i);aO(GO(t),a,r),t.dlog(`info`,`reset-config: ${r} ← ${a} (session=${i})`)},YO=(e,t)=>{let[n=``,r=``,i=``]=OO(()=>Qy(e)),a=EO(n);if(!r)throw new $(`apply-layout-op: <key>/<op> is required (have: ${$x().join(`, `)})`);let o=eS(r,i);if(!o.ok)throw new $(`apply-layout-op: ${o.reason}`);let s=$m(o.value);if(s===null)throw new $(`apply-layout-op: "${o.value}" is not a layout op token`);let c=WO(t,a);oO(GO(t),c,r,s),t.dlog(`info`,`apply-layout-op: ${r} ${o.value} → ${c} (session=${a})`)},XO=(e,t)=>{let[n=``]=OO(()=>Qy(e)),r=EO(n),i=WO(t,r);if(hO(GO(t),i)===null)throw new $(`undo: history is empty, nothing to undo`);t.dlog(`info`,`undo: ${i} (session=${r})`)},ZO=(e,t)=>{let[n=``]=OO(()=>Qy(e)),r=EO(n),i=WO(t,r);if(gO(GO(t),i)===null)throw new $(`redo: nothing to redo`);t.dlog(`info`,`redo: ${i} (session=${r})`)},QO=(e,t)=>{EO(DO(e)),t.applyUpdate()},$O=`client-hints`;function ek(e,t){let n=e.sessionState.get(t,$O);if(n===null)throw new $(`session ${t} has not rendered yet — no client facts to diagnose`);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 Ev(r)}function tk(e,t,n){let r=Ih(n);e.sessionState.setBatch(t,zh(r)),e.dlog(`info`,`doctor: ${r.map(e=>`${e.check.name}=${e.verdict.ok?`ok`:`failed`}`).join(` `)} (session=${t})`)}const nk=(e,t)=>{let n=EO(DO(e));tk(t,n,wO(t.doctor,ek(t,n).tmux))},rk=(e,t)=>{let[n=``,r=``]=OO(()=>Qy(e)),i=EO(n),a=Lh(r);if(a===void 0)throw new $(`doctor-fix: unknown check "${r}"`);let o=wO(t.doctor,ek(t,i).tmux),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=TO(t.doctor,s.fix,o);t.dlog(`info`,`doctor-fix: ${a.name} → ${s.fix.kind} ${s.fix.name}=${s.fix.value} (session=${i})`),tk(t,i,c)},ik=`config-override`,ak=new Map([[Ly,AO],[`load-config`,(e,t)=>{let n=e.indexOf(`/`);if(n===-1)throw new $(`load-config: expected <sessionId>/<path> (missing separator)`);let r=EO(OO(()=>decodeURIComponent(e.slice(0,n)))),i=OO(()=>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,ik),t.dlog(`info`,`load-config: override cleared (session=${r})`)):(t.sessionState.set(r,ik,i),t.dlog(`info`,`load-config: ${i} (session=${r})`))}],[Ry,jO],[Fy,FO],[Iy,BO],[Hy,KO],[Uy,qO],[Wy,JO],[Gy,YO],[Ky,XO],[qy,ZO],[By,MO],[Vy,NO],[zy,PO],[Jy,QO],[Yy,nk],[Xy,rk]]),ok=new Set([Fy,Iy,Hy,Uy,Wy,Gy,Ky,qy,zy,Jy,Yy,Xy]),sk=(e,t)=>{let n=[],r=!1,i=null;for(let{verb:a,value:o}of eb(e)){if(!i&&ok.has(a)){let e=Qy(o);e.length>0&&e[0]&&(i=e[0])}let e=ak.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(`
184
+ `));let e=`dispatch: ${n.join(`; `)}`;throw r?Error(e):new $(e)}},ck=new Map([...ak,[Py,sk]]);Object.freeze([...ck.keys()]);const lk=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`]),uk=[[`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`]];function dk(e){let t={missingRequired:[],typeMismatches:[],unknownTopLevelFields:[]},n=typeof e==`object`&&e&&!Array.isArray(e)?e:{};for(let[e,r]of uk){let i=pk(n,e);if(i==null)t.missingRequired.push(e);else{let n=fk(i);n!==r&&t.typeMismatches.push({path:e,expected:r,got:n})}}for(let e of Object.keys(n))lk.has(e)||t.unknownTopLevelFields.push(e);return{data:e,report:t}}function fk(e){return Array.isArray(e)?`array`:typeof e==`string`&&!e.isWellFormed()?`ill-formed string`:typeof e}function pk(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 mk(e,t){switch(e){case`vars`:return{what:e,vars:hk(t)};case`segments`:return{what:e,segments:bk(t)};case`config`:return{what:e,config:Ck(t)}}}function hk(e){if(e===null)return[];let{store:t,registry:n,config:r}=e,i=vk(r),a=t.names().sort(),o=[];for(let e of a){let r=t.getNode(e),a=n.getLastError(e);o.push({name:e,source:i.get(e)??null,...gk(r),lastError:a===void 0?null:{timestampMs:a.timestamp,message:a.message},ageMs:_k(r.lastUpdatedMs())})}return o}function gk(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 _k(e){return e===null?null:Math.max(0,Date.now()-e)}function vk(e){let t=new Map;for(let[n,r]of Object.entries(e.variables))t.set(n,yk(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}`,yk(i));return t}function yk(e){return e.kind}function bk(e){if(e===null)return[];let{store:t,config:n,lastRenderBySegment:r}=e,i=new Set(t.names()),a=xk(n),o=[];for(let e of a){let t=n.segments[e];t&&o.push({name:e,description:t.description??null,template:t.template,referencedVars:Sk(t.template,i),lastRender:r.get(e)??null})}return o}function xk(e){let t=[],n=new Set;for(let r of va(co(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 Sk(e,t){let n=new Set;for(let r of L_(e)){if(t.has(r)){n.add(r);continue}let e=r.split(`.`);for(;e.length>1;){e.pop();let r=e.join(`.`);if(t.has(r)){n.add(r);break}}}return Array.from(n).sort()}function Ck(e){return e===null?null:e.config}const wk=[`vars`,`segments`,`config`];function Tk(e){return typeof e==`string`&&wk.includes(e)}function Ek(e){return Math.max(1,e-2)}var Dk=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 E(`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);E(`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{E(`Calculating context tokens from transcript: ${e}`);let n=await FC(e);if(n.length===0)return E(`No entries in transcript`),Z;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,E(`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 E(`Most recent main chain context: ${n} tokens (limit: ${t})`),X({totalTokens:n,maxTokens:t,...this.ratioPercentages(n,t)})}return E(`No main chain entries with usage data found`),Z}catch(e){return Q(`context transcript: ${e instanceof Error?e.message:String(e)}`)}}async getContextInfo(e){let t=this.calculateContextFromHookData(e);if(t)return X(t);let n=e.context_window?.context_window_size??2e5;return this.calculateContextTokensFromTranscript(e.transcript_path,n)}};function Ok(e){let t=e.type||e.message?.role||e.message?.type,n=e.type===`user`&&e.message?.firstContentType===`tool_result`;return t===`user`&&!n}var kk=class{state=new Map;calculateLastResponseTime(e){if(e.length===0)return null;let t=null,n=null;for(let r of e){let e=r.type||r.message?.role||r.message?.type;if(Ok(r))t=r.timestamp;else if(e===`assistant`&&t){let e=(r.timestamp.getTime()-t.getTime())/1e3;e>.1&&e<300&&(n=e)}}return n}async foldMetrics(e,t){let n=this.state.get(e),r=CC(t);if(n&&r!==0&&n.cursor.mtimeMs===r)return this.state.delete(e),this.state.set(e,n),{kind:`ok`,value:{messageCount:n.messageCount,recent:[...n.recent]}};let i=await zC(t,n?.cursor);if(i.kind===`failed`)return i;if(i.kind===`absent`)return{kind:`ok`,value:{messageCount:n?.messageCount??0,recent:[...n?.recent??[]]}};let{entries:a,cursor:o,reset:s}=i.value,c=n&&!s?n:void 0,l=c?.messageCount??0,u=c?[...c.recent]:[];for(let e of a)e.isSidechain||(Ok(e)&&l++,u.push(e));for(u.length>20&&(u=u.slice(-20)),this.state.delete(e),this.state.set(e,{cursor:o,messageCount:l,recent:u});this.state.size>256;){let e=this.state.keys().next().value;if(e===void 0)break;this.state.delete(e)}return{kind:`ok`,value:{messageCount:l,recent:[...u]}}}async getMetricsInfo(e,t){if(E(`Getting metrics from hook data for session: ${e}`),!t.cost)return Z;let n=await this.foldMetrics(e,t.transcript_path);return n.kind===`failed`?Q(`metrics (${e}): ${n.reason}`):X({responseTime:t.cost.total_api_duration_ms/1e3,lastResponseTime:this.calculateLastResponseTime(n.value.recent),sessionDuration:t.cost.total_duration_ms/1e3,messageCount:n.value.messageCount,linesAdded:t.cost.total_lines_added,linesRemoved:t.cost.total_lines_removed})}};const Ak=new Map;function jk(e){if(!e)return``;let t=e.indexOf(`,`);return t<0?e:e.slice(0,t)}var Mk=class{async getSessionId(){if(!process.env.TMUX_PANE)return Z;let e=jk(process.env.TMUX),t=Ak.get(e);if(t!==void 0)return t;E(`Getting tmux session ID, TMUX_PANE: ${process.env.TMUX_PANE}`);let n=await Ee({bin:`tmux`,args:[`display-message`,`-p`,`#S`],timeoutMs:1e3,category:`tmux`}),r=n.ok?n.stdout.trim()?X(n.stdout.trim()):Z:Q(`tmux display-message: ${n.reason}`);return Ak.set(e,r),r}isInTmux(){return!!process.env.TMUX_PANE}},Nk=class{written=new Map;constructor(e){this.dir=e}pathFor(e){return c.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 Pk=new xD;we(Pk.launchStats);const Fk=new dC({counters:Pk,logger:Y}),Ik=new yC({watchers:Fk,logger:Y}),Lk=new ZC,Rk=new wD,zk=new Nk(Ge()),Bk=new Dk,Vk=new kk,Hk=new Mk,Uk=new yD({gitService:Ik,sessionState:Rk,watchers:Fk},{observers:{onReload:e=>Y(`info`,`config loaded projectDir=${e.projectDir} cwd=${e.cwd} file=${e.configFilePath??`<bundled default>`} error=${e.lastError===null?`none`:JSON.stringify(e.lastError)} warning=${e.lastWarning===null?`none`:JSON.stringify(e.lastWarning)}`)}}),Wk=60*1e3;function Gk(){let e=import.meta.url,n=[];e.startsWith(`file://`)&&n.push(b(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){Y(`info`,`binary mtime changed (${e}); shutting down`),a&&clearInterval(a),sA(0);return}}catch(e){Y(`warn`,`bin stat failed: ${e.message}`)}};return{arm(){i.size!==0&&(a=setInterval(o,Wk),a.unref())},checkNow:o}}const Kk=Gk(),qk=BS({entryUrl:import.meta.url,intervalMs:Wk,releaseIntervalMs:216e5,registryUrl:t.env.CC_CANDYBAR_REGISTRY_URL??`https://registry.npmjs.org`,fetchImpl:fetch,onApplied:()=>Kk.checkNow(),log:Y});let Jk=null,Yk=null,Xk=0;function Zk(){t.on(`uncaughtException`,e=>{Y(`error`,`uncaughtException: ${e.stack||e.message}`),sA(1)}),t.on(`unhandledRejection`,e=>{Y(`error`,`unhandledRejection: ${String(e)}`),sA(1)});for(let e of[`SIGINT`,`SIGTERM`,`SIGHUP`])t.on(e,()=>{Y(`info`,`received ${e}, shutting down`),sA(0)});try{Xk=oy(t.env)}catch(e){Y(`error`,`refusing to boot: ${e.message}`),sA(1);return}Jk=Jb(t.pid);let e=ix(ox(Jk));if(!e.decision.allow){Y(`warn`,`fork-bomb breaker: ${e.decision.reason}; refusing to boot`),sA(1);return}Yk=e.registryPath,r.mkdirSync(Ne(),{recursive:!0}),Ie(Pe()),Rk.useStorage(new DD(ze(),500,Y)),Zb({anchor:Xb(t.env),isAlive:Qb,onOrphaned:e=>{Y(`info`,`parent watchdog: ${e}; shutting down`),sA(0)}}),Qk(g.createServer({allowHalfOpen:!1},e=>{cA(e)}),Pe(),!1)}function Qk(e,n,r){e.removeAllListeners(`error`),e.removeAllListeners(`listening`),e.once(`error`,i=>{if(i.code!==`EADDRINUSE`){Y(`error`,`server error: ${i.message}`),sA(1);return}if(r){Y(`info`,`lost rebind race; another daemon is alive — exiting`),t.exit(0);return}$k(e,n)}),e.listen(n,()=>eA(n))}function $k(e,n){let i=Rb(zb(Le(n)),(e,t)=>qb(e,t,{readStartTime:Kb,pidAlive:Qb}));if(i.kind===`attach-and-exit`){Y(`info`,`EADDRINUSE: ${i.reason} — exiting`),t.exit(0);return}Y(`warn`,`EADDRINUSE: ${i.reason} — unlinking stale socket and rebinding`);try{r.unlinkSync(n)}catch(e){if(e.code!==`ENOENT`){Y(`error`,`cannot unlink stale socket ${n}: ${e.message}`),sA(1);return}}Qk(e,n,!0)}function eA(e){let n=Hb(e);if(n.kind!==`present`){Y(`warn`,`no ownable socket at bind callback (${n.kind}); exiting`),sA(0);return}iA(e);try{r.chmodSync(e,384)}catch(e){Y(`warn`,`chmod socket failed: ${e.message}`)}Y(`info`,`daemon up: pid=${t.pid} v=3 sock=${e} heapCap=${Math.round(_.getHeapStatistics().heap_size_limit/1048576)}MB rssLimit=${Math.round(Xk/1048576)}MB`),Cy();let i=zk.reset();i!==null&&Y(`warn`,`diagnostic dump wipe failed: ${i}`),Kk.arm(),qk.arm(),rA(),tA(e,n.identity)}function tA(e,n){Gb({bound:n,myPid:t.pid,readIdentity:()=>Hb(e),readLease:()=>zb(Le(e)),shutdown:e=>sA(e),log:Y}).arm()}let nA=null;function rA(){nA=uy(my(Pk.startedAt.getTime(),e=>sA(e),{rssLimitBytes:Xk})),nA.arm()}function iA(e){let n=Bb(Le(e),{pid:t.pid,version:3,binPath:t.argv[1],startTime:Jk});n!==null&&Y(`warn`,`lease write failed: ${n}`)}let aA=0,oA=!1;function sA(e){if(!oA){oA=!0,setTimeout(()=>t.kill(t.pid,`SIGKILL`),500);try{Ik.close()}catch(e){Y(`warn`,`gitService close failed: ${e.message}`)}try{Lk.close()}catch(e){Y(`warn`,`usageStore close failed: ${e.message}`)}try{Fk.closeAll()}catch(e){Y(`warn`,`watcherRegistry close failed: ${e.message}`)}try{Rk.flush()}catch(e){Y(`warn`,`sessionState flush failed: ${e.message}`)}Vb(Re(),t.pid),Yk!==null&&ax(Yk,t.pid,nx,e=>r.unlinkSync(e)),t.exit(e)}}function cA(e){aA++,Pk.inFlight=aA;let t=!1,n=(n,r)=>{if(t){r!==null&&Y(`warn`,`exit-after-flush dropped: an earlier responder settled this socket`);return}t=!0;let i=r===null?void 0:()=>sA(r);try{e.end(Nv(n),i)}catch(e){Y(`warn`,`response write failed: ${e.message}`),i?.()}},r=setTimeout(()=>{Pk.requestsTimedOut++,n({ok:!1,error:`request exceeded 200ms`,code:`TIMEOUT`,daemonV:3},null)},200),i=Pv(e=>{uA(e).then(e=>n(e.resp,e.exitAfterFlush)).catch(e=>{Y(`error`,`handler threw: ${e?.stack||e}`),n({ok:!1,error:String(e?.message||e),code:`RENDER_FAILED`,daemonV:3},null)})},e=>{Y(`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=>{Y(`warn`,`socket error: ${e.message}`)}),e.on(`close`,()=>{clearTimeout(r),aA=Math.max(0,aA-1),Pk.inFlight=aA})}const lA=e=>({resp:e,exitAfterFlush:null});async function uA(e){if(!e||typeof e!=`object`||typeof e.v!=`number`)return lA({ok:!1,error:`malformed request`,code:`BAD_REQUEST`,daemonV:3});if(e.v!==3)return e.v>3?Y(`info`,`version mismatch: client=${e.v} > daemon=3; binary likely upgraded — exiting after the response flushes`):Y(`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 lA({ok:!0,stats:Pk.snapshot({gitCache:Ik.getStats(),usageCache:Lk.getStats(),renderCacheSize:Uk.size,watchersActive:Fk.size(),nextRestartReason:nA?.describeNextRestart()??null})});if(e.kind===`render`){Pk.requestsTotal++;let t=Date.now();try{let{report:n}=dk(e.hookData);for(let e of n.unknownTopLevelFields)Y(`info`,`schema: unknown field '${e}' — Anthropic may have added it`);let r=[];for(let e of n.missingRequired)r.push(`missing required field '${e}'`);for(let{path:e,expected:t,got:i}of n.typeMismatches)r.push(`field '${e}' expected ${t}, got ${i}`);if(e.cwd===``&&r.push(`request 'cwd' is empty`),r.length>0)return Pk.requestsErrored++,Y(`warn`,`BAD_REQUEST: ${r.join(`; `)}`),lA({ok:!1,error:`malformed hookData: ${r.join(`; `)}`,code:`BAD_REQUEST`,daemonV:3});let i=e.hookData.workspace.project_dir,{configFile:a,unknownFlagsError:o}=dA(e.args),s=e.hookData.session_id,c=Ev(e),l=JSON.stringify(c);Rk.get(s,`client-hints`)!==l&&Rk.set(s,$O,l);let u=Rk.get(s,`config-override`)??a??c.configEnv,d=Uk.getOrCreate(i,e.cwd,u),f=HO({projectDir:i,cwd:e.cwd,configFile:u??null});Rk.get(s,`render-origin`)!==f&&Rk.set(s,VO,f);let p=c.termCols,m=Ek(p??120),h=bx(c.termRows),g={...pA,width:m},{authoredRoots:_}=d.state,v=rw(d.state.config,t=>Rk.get(e.hookData.session_id,t),e=>_.has(e)),y=await gw(e.hookData,_A,e.cwd,d.state.neededInputPaths,v,c),b=oE(v.theme);g.style=v.style,g.separator=v.separator,g.wrap=v.autoWrap,g.padding=v.padding,g.charset=v.charset,g.colorCompatibility=v.colorCompatibility;let x=aD(d.state.config,d.state.compiled,d.state.store,d.state.registry,y,b,g,{perSegmentSink:d.state.lastRenderCellsBySegment},{look:fi(d.state.config.looks,v.look),preset:v.preset}),S=Rk.get(e.hookData.session_id,`click.error`);S&&Rk.clear(e.hookData.session_id,`click.error`);let ee=[o,d.lastError,S].filter(Boolean).join(`
185
+ `),te=qk.notice({sessionId:s,dismissed:Rk.get(s,ES),enabled:v.updateNotice}),ne=d.lastError===null?null:d.configFilePath,re=Tx(ee,te,d.lastWarning??``),ie=zk.sync(s,re===null?null:Dx(re));ie!==null&&Y(`warn`,`diagnostic dump failed: ${ie}`);let C=Ox(x,re,{fullText:ie===null?{kind:`file`,path:zk.pathFor(s)}:{kind:`unavailable`,reason:ie},failedConfigFile:ne},{width:m,rowCap:h,colorCompatibility:v.colorCompatibility}),ae=Date.now()-t,w=Ik.getStats(),T=Lk.getStats();return Y(`info`,`render sid=${e.hookData.session_id??`?`} took=${ae}ms termCols=${p??`?`} termRows=${c.termRows??`?`} width=${m} git=${w.size}/${w.hits}h/${w.misses}m usage=${T.size}/${T.hits}h/${T.misses}m err=${ee?`Y`:`N`} upd=${te.length} warn=${d.lastWarning?`Y`:`N`}`),lA({ok:!0,output:C+`
186
+ `})}catch(e){throw Pk.requestsErrored++,e}}if(e.kind===`click`)return lA(await vA(e.verb,e.value));if(e.kind===`debug`){if(!Tk(e.what))return lA({ok:!1,error:`unknown debug 'what': ${String(e.what)} (have: ${wk.join(`, `)})`,code:`BAD_REQUEST`,daemonV:3});let t=Uk.firstState(),n=t===null?null:{store:t.store,registry:t.registry,config:t.config,compiled:t.compiled,lastRenderBySegment:e.what===`segments`?gA(t.lastRenderCellsBySegment,t.config.globals.charset??`unicode`,t.config.globals.colorCompatibility??`truecolor`):hA};return lA({ok:!0,debug:mk(e.what,n)})}return lA({ok:!1,error:`unknown kind`,code:`BAD_REQUEST`,daemonV:3})}function dA(e){let{values:t,tokens:n}=S({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:Dv(t.config),unknownFlagsError:r.length>0?`Unknown flags: ${r.join(`, `)}`:null}}const fA={sessionState:Rk,dlog:Y,applyUpdate:()=>qk.act(),doctor:yO()},pA={style:`powerline`,colorCompatibility:`truecolor`,wrap:!0,padding:1,charset:`unicode`},mA={...pA,width:1/0},hA=new Map;function gA(e,t,n){let r=new Map;for(let[i,a]of e)r.set(i,yx(a,{...mA,charset:t,colorCompatibility:n}));return r}const _A={gitProvider:Ik,usageStore:Lk,contextProvider:Bk,metricsProvider:Vk,tmuxService:Hk,log:Y,clock:()=>new Date};function vA(e,t){let n=ck.get(e);if(!n)return{ok:!1,error:`unknown click verb: ${e}`,code:`BAD_REQUEST`,daemonV:3};try{return n(t,fA),{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 yA={connectMs:200,budgetMs:500};async function bA(e){let n=e.includes(`--json`),r=await xA();if(r.kind!==`ok`&&(t.stderr.write(`daemon-stats: ${Hv(r)}\n`),t.exit(1)),n){t.stdout.write(JSON.stringify(r.value,null,2)+`
187
+ `);return}t.stdout.write(TA(r.value))}function xA(){return Iv({kind:`stats`},yA,e=>`stats`in e?e.stats:void 0)}function SA(e){return e<1024?`${e}B`:e<1024*1024?`${(e/1024).toFixed(1)}KB`:`${(e/1024/1024).toFixed(1)}MB`}function CA(e,t){let n=e+t;return n===0?`n/a`:`${(e/n*100).toFixed(1)}%`}function wA(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 TA(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 ${wA(e.uptimeSec)}`),t.push(` rss ${SA(e.rssBytes)}`),t.push(` heapUsed ${SA(e.heapUsedBytes)}`),t.push(` heapTotal ${SA(e.heapTotalBytes)}`),t.push(` external ${SA(e.externalBytes)}`),t.push(` arrayBuffers ${SA(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 ${CA(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 ${CA(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(`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(`
188
188
  `)+`
189
- `}const CA={connectMs:200,budgetMs:500};async function wA(e,n){let r=n.includes(`--json`),i=await TA(e);if(i.kind!==`ok`&&(t.stderr.write(`${e}: ${Hv(i)}\n`),t.exit(1)),r){t.stdout.write(JSON.stringify(i.value,null,2)+`
190
- `);return}t.stdout.write(EA(i.value))}function TA(e){return Iv({kind:`debug`,what:e},CA,e=>`debug`in e?e.debug:void 0)}function EA(e){switch(e.what){case`vars`:return DA(e.vars);case`segments`:return OA(e.segments);case`config`:return kA(e.config);default:return e}}function DA(e){if(e.length===0)return`no variables (DSL not active)
191
- `;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?``:` ${jA(a.ageMs)}`,o=a.lastError?` ✗ ${a.lastError.message}`:``;t.push(` ${a.name.padEnd(n)} ${(a.source??`—`).padEnd(r)} ${a.type.padEnd(i)} ${AA(a.value)}${e}${o}`)}return t.join(`
189
+ `}const EA={connectMs:200,budgetMs:500};async function DA(e,n){let r=n.includes(`--json`),i=await OA(e);if(i.kind!==`ok`&&(t.stderr.write(`${e}: ${Hv(i)}\n`),t.exit(1)),r){t.stdout.write(JSON.stringify(i.value,null,2)+`
190
+ `);return}t.stdout.write(kA(i.value))}function OA(e){return Iv({kind:`debug`,what:e},EA,e=>`debug`in e?e.debug:void 0)}function kA(e){switch(e.what){case`vars`:return AA(e.vars);case`segments`:return jA(e.segments);case`config`:return MA(e.config);default:return e}}function AA(e){if(e.length===0)return`no variables (DSL not active)
191
+ `;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?``:` ${PA(a.ageMs)}`,o=a.lastError?` ✗ ${a.lastError.message}`:``;t.push(` ${a.name.padEnd(n)} ${(a.source??`—`).padEnd(r)} ${a.type.padEnd(i)} ${NA(a.value)}${e}${o}`)}return t.join(`
192
192
  `)+`
193
- `}function OA(e){if(e.length===0)return`no segments (DSL not active)
193
+ `}function jA(e){if(e.length===0)return`no segments (DSL not active)
194
194
  `;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(`, `)}`),n.lastRender!==null&&t.push(` last ${n.lastRender}`);return t.join(`
195
195
  `)+`
196
- `}function kA(e){return e===null?`config: DSL not active
196
+ `}function MA(e){return e===null?`config: DSL not active
197
197
  `:JSON.stringify(e,null,2)+`
198
- `}function AA(e){let t=typeof e==`string`?e:JSON.stringify(e);return t.length>60?t.slice(0,57)+`…`:t}function jA(e){return e<1e3?`${e}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${Math.floor(e/6e4)}m`}function MA(){let e=PA();return e===null?null:r.readFileSync(e,`utf-8`)}function NA(){let e;try{e=MA()}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 PA(){let e=c.join(`schema`,`cc-candybar.schema.json`),n=t.argv[1];if(n===void 0)return null;let i=c.dirname(c.resolve(n));for(;;){let t=c.join(i,e);if(r.existsSync(t))return t;let n=c.dirname(i);if(n===i)return null;i=n}}function FA(e){let t=e.CC_CANDYBAR_CONFIG??``;return t===``?void 0:t}const IA=5e3;function LA(e){let t=`/home/tester`,n=Math.floor(Date.now()/1e3);return{hook_event_name:`Status`,session_id:`test0a1b-2c3d-4e5f-6a7b-8c9d0e1f2a3b`,version:`1.15.0`,home:t,cwd:`${t}/code/cc-candybar/src`,transcript_path:`${t}/.claude/projects/x/test.jsonl`,model:{id:`claude-opus-4-8`,display_name:`Opus 4.8`},workspace:{current_dir:`${t}/code/cc-candybar/src`,project_dir:`${t}/code/cc-candybar`},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:n+2*3600},weekly:{percentage:21,resetsAt:n+5*86400},cache:{expiresAt:n+900},tmux:{session:`work`},host:{name:`tester-box`,user:`tester`,ssh:!0},theme:{effective:e.theme},look:{effective:e.look},preset:{effective:e.preset,customized:e.presetCustomized},style:{effective:e.style},charset:{effective:e.charset},colorCompatibility:{effective:e.colorCompatibility},autoWrap:{effective:e.autoWrap},padding:{effective:e.padding}}}function RA(e,t){let n=dv(e,e),r=pv(n);return r!==null&&t.push(r),n.kind===`file`?n.path:null}async function zA(e,n=t.cwd()){let i=[],a=e===void 0?RA(n,i):c.resolve(cv(e));if(e!==void 0&&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 o=hv(n,n);o!==null&&i.push(o);try{return{kind:`clean`,configPath:a,warnings:i,rendered:await BA(a,n,i)}}catch(e){let t=e;return a!==null&&typeof t==`object`&&t&&typeof t.code==`string`&&t.path===a&&typeof t.message==`string`?{kind:`unreadable`,path:a,message:t.message}:(e instanceof da&&i.push(...e.warnings),{kind:`fatal`,configPath:a,message:e instanceof da||e instanceof Error?e.message:String(e),warnings:i})}}async function BA(e,t,n){let{config:r,source:i,warnings:a}=gv(e,kw);n.push(...a);let o=yv(r,e??`<default>`,i),s=new uD,c=new qT(s,o.globals.default_empty_value??``,void 0,new xD);try{let e=tD(o,c,{cwd:t});n.push(...e.loadWarnings);let r=await c.settled(IA);r.length>0&&n.push(`source${r.length===1?``:`s`} still running after ${IA} ms, rendered with fallback values: ${r.join(`, `)}`),TS(o);let i=rw(o,()=>null,()=>!1),a=t=>{let n=new Map;return{rendered:nD(o,e,s,c,LA(t),oE(t.theme),{style:t.style,separator:t.separator,width:200,colorCompatibility:t.colorCompatibility,wrap:t.autoWrap,padding:t.padding,charset:t.charset},{onSegmentError:(e,t)=>n.set(e,t)},{look:fi(o.looks,t.look),preset:t.preset}),segmentErrors:n}},l=a(i),u=a({...i,presetCustomized:!0}),d=[...[...l.segmentErrors].map(([e,t])=>`segment "${e}": ${t}`),...[...u.segmentErrors].filter(([e])=>!l.segmentErrors.has(e)).map(([e,t])=>`segment "${e}": ${t} (under .preset.customized = true)`)];if(d.length>0)throw Error(`config renders with ${d.length} segment error${d.length===1?``:`s`} (the daemon would render ⚠ error cells):\n`+d.map(e=>` ${e}`).join(`
199
- `));return l.rendered}finally{c.dispose()}}function VA(e){return e.map(e=>`warning: ${e}\n`).join(``)}function HA(e,t=!1){switch(e.kind){case`clean`:return{stdout:`✓ ${e.configPath??`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:VA(e.warnings),code:0};case`fatal`:return{stdout:``,stderr:VA(e.warnings)+`✗ ${e.configPath??`<default>`}\n${e.message}\n`,code:1};case`unreadable`:return{stdout:``,stderr:`check: cannot read ${e.path}: ${e.message}\n`,code:2}}}const UA=`--render`,WA=`Usage: cc-candybar check [${UA}] [config-file]\n`;function GA(e){let t=e.filter(e=>e.startsWith(`--`)),n=e.filter(e=>!e.startsWith(`--`)),r=t.filter(e=>e!==UA);return r.length>0?{kind:`usage`,message:`check: unknown option ${r.join(` `)}\n${WA}`}:n.length>1||n[0]===``?{kind:`usage`,message:`check: expected at most one non-empty path\n${WA}`}:{kind:`run`,target:n[0],render:t.includes(UA)}}async function KA(e){let n=GA(e),r=n.kind===`usage`?{stdout:``,stderr:n.message,code:2}:HA(await zA(n.target??FA(t.env)),n.render);t.stdout.write(r.stdout),t.stderr.write(r.stderr),t.exit(r.code)}const qA=`${dx}${ux}`;function JA(e){return`${qA}⚠ cc-candybar: ${YA(e)}\n`}function YA(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: ${lx(e.message,60)}`;case`render_failed`:return`render failed: ${lx(e.message,60)}`;case`malformed_response`:return`malformed daemon response: ${lx(e.message,60)}`}}function XA(e){switch(e.kind){case`ok`:return{output:e.value,kick:!1,debug:null};case`transient`:return{output:`
200
- `,kick:!0,debug:`daemon unavailable (transient: ${e.cause}: ${e.message}) — kicking daemon`};case`permanent`:return{output:JA(e),kick:!1,debug:`daemon refused request (permanent: ${e.cause}) — not kicking`}}}function ZA(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}function QA({check:e,verdict:t}){return t.ok?`✓ ${e.label}\n`:`✗ ${e.label} — ${t.reason}${t.fix===void 0?``:` (fix: click ☰ 🧰 tools ▸ 🩺 doctor, then [fix] on the bar)`}\n`}function $A(e,t){let n;try{n=xO(e,Nh(t))}catch(e){return{stdout:``,stderr:`doctor: ${e instanceof Error?e.message:String(e)}\n`,code:2}}let r=Ih(n);return{stdout:r.map(QA).join(``),stderr:``,code:+!r.every(e=>e.verdict.ok)}}function ej(e){e.length>0&&(t.stderr.write(`doctor: takes no arguments
198
+ `}function NA(e){let t=typeof e==`string`?e:JSON.stringify(e);return t.length>60?t.slice(0,57)+`…`:t}function PA(e){return e<1e3?`${e}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${Math.floor(e/6e4)}m`}function FA(){let e=LA();return e===null?null:r.readFileSync(e,`utf-8`)}function IA(){let e;try{e=FA()}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 LA(){let e=c.join(`schema`,`cc-candybar.schema.json`),n=t.argv[1];if(n===void 0)return null;let i=c.dirname(c.resolve(n));for(;;){let t=c.join(i,e);if(r.existsSync(t))return t;let n=c.dirname(i);if(n===i)return null;i=n}}function RA(e){let t=e.CC_CANDYBAR_CONFIG??``;return t===``?void 0:t}const zA=5e3;function BA(e){let t=`/home/tester`,n=Math.floor(Date.now()/1e3);return{hook_event_name:`Status`,session_id:`test0a1b-2c3d-4e5f-6a7b-8c9d0e1f2a3b`,version:`1.15.0`,home:t,cwd:`${t}/code/cc-candybar/src`,transcript_path:`${t}/.claude/projects/x/test.jsonl`,model:{id:`claude-opus-4-8`,display_name:`Opus 4.8`},workspace:{current_dir:`${t}/code/cc-candybar/src`,project_dir:`${t}/code/cc-candybar`},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:n+2*3600},weekly:{percentage:21,resetsAt:n+5*86400},cache:{expiresAt:n+900},tmux:{session:`work`},host:{name:`tester-box`,user:`tester`,ssh:!0},theme:{effective:e.theme},look:{effective:e.look},preset:{effective:e.preset,customized:e.presetCustomized},style:{effective:e.style},charset:{effective:e.charset},colorCompatibility:{effective:e.colorCompatibility},autoWrap:{effective:e.autoWrap},padding:{effective:e.padding}}}function VA(e,t){let n=dv(e,e),r=pv(n);return r!==null&&t.push(r),n.kind===`file`?n.path:null}async function HA(e,n=t.cwd()){let i=[],a=e===void 0?VA(n,i):c.resolve(cv(e));if(e!==void 0&&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 o=hv(n,n);o!==null&&i.push(o);try{return{kind:`clean`,configPath:a,warnings:i,rendered:await UA(a,n,i)}}catch(e){let t=e;return a!==null&&typeof t==`object`&&t&&typeof t.code==`string`&&t.path===a&&typeof t.message==`string`?{kind:`unreadable`,path:a,message:t.message}:(e instanceof da&&i.push(...e.warnings),{kind:`fatal`,configPath:a,message:e instanceof da||e instanceof Error?e.message:String(e),warnings:i})}}async function UA(e,t,n){let{config:r,source:i,warnings:a}=gv(e,kw);n.push(...a);let o=yv(r,e??`<default>`,i),s=new pD,c=new qT(s,o.globals.default_empty_value??``,void 0,new wD);try{let e=iD(o,c,{cwd:t});n.push(...e.loadWarnings);let r=await c.settled(zA);r.length>0&&n.push(`source${r.length===1?``:`s`} still running after ${zA} ms, rendered with fallback values: ${r.join(`, `)}`),TS(o);let i=rw(o,()=>null,()=>!1),a=t=>{let n=new Map;return{rendered:aD(o,e,s,c,BA(t),oE(t.theme),{style:t.style,separator:t.separator,width:200,colorCompatibility:t.colorCompatibility,wrap:t.autoWrap,padding:t.padding,charset:t.charset},{onSegmentError:(e,t)=>n.set(e,t)},{look:fi(o.looks,t.look),preset:t.preset}),segmentErrors:n}},l=a(i),u=a({...i,presetCustomized:!0}),d=[...[...l.segmentErrors].map(([e,t])=>`segment "${e}": ${t}`),...[...u.segmentErrors].filter(([e])=>!l.segmentErrors.has(e)).map(([e,t])=>`segment "${e}": ${t} (under .preset.customized = true)`)];if(d.length>0)throw Error(`config renders with ${d.length} segment error${d.length===1?``:`s`} (the daemon would render ⚠ error cells):\n`+d.map(e=>` ${e}`).join(`
199
+ `));return l.rendered}finally{c.dispose()}}function WA(e){return e.map(e=>`warning: ${e}\n`).join(``)}function GA(e,t=!1){switch(e.kind){case`clean`:return{stdout:`✓ ${e.configPath??`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:WA(e.warnings),code:0};case`fatal`:return{stdout:``,stderr:WA(e.warnings)+`✗ ${e.configPath??`<default>`}\n${e.message}\n`,code:1};case`unreadable`:return{stdout:``,stderr:`check: cannot read ${e.path}: ${e.message}\n`,code:2}}}const KA=`--render`,qA=`Usage: cc-candybar check [${KA}] [config-file]\n`;function JA(e){let t=e.filter(e=>e.startsWith(`--`)),n=e.filter(e=>!e.startsWith(`--`)),r=t.filter(e=>e!==KA);return r.length>0?{kind:`usage`,message:`check: unknown option ${r.join(` `)}\n${qA}`}:n.length>1||n[0]===``?{kind:`usage`,message:`check: expected at most one non-empty path\n${qA}`}:{kind:`run`,target:n[0],render:t.includes(KA)}}async function YA(e){let n=JA(e),r=n.kind===`usage`?{stdout:``,stderr:n.message,code:2}:GA(await HA(n.target??RA(t.env)),n.render);t.stdout.write(r.stdout),t.stderr.write(r.stderr),t.exit(r.code)}const XA=`${dx}${ux}`;function ZA(e){return`${XA}⚠ cc-candybar: ${QA(e)}\n`}function QA(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: ${lx(e.message,60)}`;case`render_failed`:return`render failed: ${lx(e.message,60)}`;case`malformed_response`:return`malformed daemon response: ${lx(e.message,60)}`}}function $A(e){switch(e.kind){case`ok`:return{output:e.value,kick:!1,debug:null};case`transient`:return{output:`
200
+ `,kick:!0,debug:`daemon unavailable (transient: ${e.cause}: ${e.message}) — kicking daemon`};case`permanent`:return{output:ZA(e),kick:!1,debug:`daemon refused request (permanent: ${e.cause}) — not kicking`}}}function ej(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}function tj({check:e,verdict:t}){return t.ok?`✓ ${e.label}\n`:`✗ ${e.label} — ${t.reason}${t.fix===void 0?``:` (fix: click ☰ 🧰 tools ▸ 🩺 doctor, then [fix] on the bar)`}\n`}function nj(e,t){let n;try{n=wO(e,Nh(t))}catch(e){return{stdout:``,stderr:`doctor: ${e instanceof Error?e.message:String(e)}\n`,code:2}}let r=Ih(n);return{stdout:r.map(tj).join(``),stderr:``,code:+!r.every(e=>e.verdict.ok)}}function rj(e){e.length>0&&(t.stderr.write(`doctor: takes no arguments
201
201
  Usage: cc-candybar doctor
202
- `),t.exit(2));let n=$A(gO(),t.env);t.stdout.write(n.stdout),t.stderr.write(n.stderr),t.exit(n.code)}function tj(){return ZA(t.env.COLUMNS,t.stderr.columns)}function nj(){return ZA(t.env.LINES,t.stderr.rows)}const rj=[`SSH_CONNECTION`,`SSH_CLIENT`,`SSH_TTY`],ij=e=>e.some(e=>t.argv.includes(e));function aj(){return rj.some(e=>(t.env[e]??``)!==``)}function oj(){console.log(yh)}async function sj(){try{ij(gh.help)&&(oj(),t.exit(0)),ij(gh.version)&&(console.log(`cc-candybar ${nb}`),t.exit(0));let e=t.argv[2];if(e===`install`&&(await Ib(t.argv.slice(3)),t.exit(0)),e===`install-url-handler`&&(jb(),t.exit(0)),e===`url-handle`){await Nb(t.argv[3]);return}if(e===`daemon`){Jk();return}if(e===`daemon-stats`&&(await _A(t.argv.slice(3)),t.exit(0)),e===`check`||e===`lint`){await KA(t.argv.slice(3));return}if(e===`schema`){NA();return}if(e===`doctor`){ej(t.argv.slice(3));return}Sk(e)&&(await wA(e,t.argv.slice(3)),t.exit(0)),t.stdin.isTTY===!0&&(console.error(`Error: This tool requires input from Claude Code
202
+ `),t.exit(2));let n=nj(yO(),t.env);t.stdout.write(n.stdout),t.stderr.write(n.stderr),t.exit(n.code)}function ij(){return ej(t.env.COLUMNS,t.stderr.columns)}function aj(){return ej(t.env.LINES,t.stderr.rows)}const oj=[`SSH_CONNECTION`,`SSH_CLIENT`,`SSH_TTY`],sj=e=>e.some(e=>t.argv.includes(e));function cj(){return oj.some(e=>(t.env[e]??``)!==``)}function lj(){console.log(yh)}async function uj(){try{sj(gh.help)&&(lj(),t.exit(0)),sj(gh.version)&&(console.log(`cc-candybar ${nb}`),t.exit(0));let e=t.argv[2];if(e===`install`&&(await Ib(t.argv.slice(3)),t.exit(0)),e===`install-url-handler`&&(jb(),t.exit(0)),e===`url-handle`){await Nb(t.argv[3]);return}if(e===`daemon`){Zk();return}if(e===`daemon-stats`&&(await bA(t.argv.slice(3)),t.exit(0)),e===`check`||e===`lint`){await YA(t.argv.slice(3));return}if(e===`schema`){IA();return}if(e===`doctor`){rj(t.argv.slice(3));return}Tk(e)&&(await DA(e,t.argv.slice(3)),t.exit(0)),t.stdin.isTTY===!0&&(console.error(`Error: This tool requires input from Claude Code
203
203
 
204
204
  cc-candybar is designed to be used as a Claude Code statusLine command.
205
205
  It reads hook data from stdin and outputs formatted statusline.
@@ -215,4 +215,4 @@ Add to ~/.claude/settings.json:
215
215
  Run with --help for more options.
216
216
 
217
217
  To test output manually:
218
- echo '{"session_id":"test-session","workspace":{"project_dir":"/path/to/project"},"model":{"id":"claude-sonnet-4-5","display_name":"Claude"}}' | cc-candybar --style=powerline`),t.exit(1)),E(`Working directory: ${t.cwd()}`),E(`Process args:`,t.argv);let r=await n(t.stdin);E(`Received hook data:`,JSON.stringify(r,null,2)),r||(console.error(`Error: No input data received from stdin`),oj(),t.exit(1));let i=XA(await Kv(r,t.argv,t.cwd(),{termCols:tj(),termRows:nj(),ssh:aj(),tmux:Nh(t.env),configEnv:FA(t.env)}));i.debug!==null&&E(i.debug),i.kick&&hy(),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)}}sj();export{};
218
+ echo '{"session_id":"test-session","workspace":{"project_dir":"/path/to/project"},"model":{"id":"claude-sonnet-4-5","display_name":"Claude"}}' | cc-candybar --style=powerline`),t.exit(1)),E(`Working directory: ${t.cwd()}`),E(`Process args:`,t.argv);let r=await n(t.stdin);E(`Received hook data:`,JSON.stringify(r,null,2)),r||(console.error(`Error: No input data received from stdin`),lj(),t.exit(1));let i=$A(await Kv(r,t.argv,t.cwd(),{termCols:ij(),termRows:aj(),ssh:cj(),tmux:Nh(t.env),configEnv:RA(t.env)}));i.debug!==null&&E(i.debug),i.kick&&hy(),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)}}uj();export{};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promptctl/cc-candybar",
3
- "version": "1.65.0",
3
+ "version": "1.66.0",
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",
@@ -90,9 +90,9 @@
90
90
  "mobx": "^6.15.0"
91
91
  },
92
92
  "optionalDependencies": {
93
- "@promptctl/cc-candybar-darwin-arm64": "1.65.0",
94
- "@promptctl/cc-candybar-darwin-x64": "1.65.0",
95
- "@promptctl/cc-candybar-linux-x64": "1.65.0",
96
- "@promptctl/cc-candybar-linux-arm64": "1.65.0"
93
+ "@promptctl/cc-candybar-darwin-arm64": "1.66.0",
94
+ "@promptctl/cc-candybar-darwin-x64": "1.66.0",
95
+ "@promptctl/cc-candybar-linux-x64": "1.66.0",
96
+ "@promptctl/cc-candybar-linux-arm64": "1.66.0"
97
97
  }
98
98
  }